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).Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub intuned/skills --plugin intuned-agent-plugin