From intuned-skills
Transform a Webwright "Crafted CLI" (the parameterized final_script.py produced by a `webwright craft` run) into a deployed, hosted Intuned project. Use when the user wants to port, convert, host, or deploy a Webwright craft/reusable CLI to Intuned, or says "turn this craft into an Intuned project", "host this on Intuned", "/intuned-port". Faithfully maps one parameterized craft function to one Intuned `automation` API, scaffolds the project, runs it locally, deploys it, and verifies a standalone platform run.
How this skill is triggered — by the user, by Claude, or both
Slash command
/intuned-skills:webwright-to-intunedThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Port a Webwright **Crafted CLI** into a **deployed Intuned project** and verify
Port a Webwright Crafted CLI into a deployed Intuned project and verify
it end to end. The contract is a faithful 1:1 port: one craft function →
one Intuned automation API, re-fitted only at Intuned's boundary.
intuned auth whoami shows a
workspace). The skill never logs the user in or creates accounts.final_script.py
with an argparse wrapper, plan.md, task.json). If it isn't, stop and say so.transformation-rules.md — the step-by-step transform and gates.intuned-contract.md — the exact target (API signature, SDK, CLI,
manifest), all verified against real scaffolds.gotchas.md — the hardening layer. Re-read before every port and
add to it after every failure.CONTEXT.md — canonical vocabulary. DECISIONS.md — why the key decisions hold.intuned dev init <task_id> --template <python-starter | python-starter-auth> --language python --install-deps --non-interactive [--stealth] into
intuned_projects/<task_id>/.transformation-rules.md:
asyncio.run wrapper; the inner async body
becomes async def automation(page, params=None, **_kwargs);Params, a pydantic schema if needed, and .parameters/.../default.json
so empty params reproduce the task;page.goto → go_to_url; drop screenshots/file-writes; log()→print();
return substantive data minus harness fields;apiAccess.enabled: true and the Playground default input in Intuned.jsonc.intuned dev run api <name> '{}'; compare output to the craft's
final_runs/ known-good shape/count. (Protected site: a block is expected —
don't fight it locally.)intuned dev deploy --non-interactive (after the local gate).intuned platform runs start '{"api":"<name>","parameters":{}}' -p <task_id>; poll intuned platform runs get <id> until terminal.gotchas.md entry, fix, re-run.auth-sessions/create.py + a derived check.py, enable authSessions; the
automation assumes a valid session. Test with dev run authsession create
then --auth-session.extend_payload is opt-in only.automation (page is injected).npx claudepluginhub intuned/skills --plugin intuned-agent-pluginCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.