Agent Skills
An agent that drives jevitate for you needs to know which command fits the job, what to pass
it, and what it must never do on its own. Jevitate ships that knowledge as skills, installed by
jevitate init. The agent never drives the browser itself: it picks the command,
passes the user's intent, and reports what came back.
Install
jevitate init # keys (at a terminal), skills, MCP registration, the repo's .jevitate/
jevitate init --dry-run # show what it would install or register, change nothing
jevitate init --skip-skills # everything except the skills
jevitate init --targets claude-code,cursor # install to these agents, whatever is detected init installs the same twelve skills to every agent it finds:
| Agent | Installed when | Where |
|---|---|---|
| Claude Code | ~/.claude exists | ~/.claude/skills/<skill>/SKILL.md |
| Codex | ~/.codex exists | a jevitate block in ~/.codex/AGENTS.md |
| Cursor | the project has a .cursor/ folder | .cursor/rules/jevitate-<skill>.mdc |
| Any other agent | always | .agent/skills/<skill>/SKILL.md and a jevitate block in the project's AGENTS.md |
init also registers the jevitate mcp server for Claude Code, Cursor and
Codex (MCP & CLI).
Update
Skills ship with the CLI, so a new release can change them. Update the CLI, then run
init again:
npm install -g @jevitate/cli@latest --prefer-online
jevitate init # rewrites the skills you haven't edited; skips the ones you have
jevitate init --force # also overwrite your edits (shows them first with --dry-run) init remembers what it installed. A skill you haven't edited is updated in place;
one you have edited is left alone and reported, unless you pass --force.
The skills
| Skill | Use it when | Main commands |
|---|---|---|
jevitate-getting-started | Start here, or when unsure which skill applies. Checks setup (keys, .jevitate/, MCP), gets a first result against the app's URL, and routes to the right skill. | ai status, init --dry-run |
jevitate-explore | No saved Journey covers what needs testing, or the user wants bugs found. Goal, find-out, coverage, exploratory, adversarial, feature and usability runs; saves a verified path as a Journey. | explore, explore-author-journey |
jevitate-mission-scope | "What should I test?" after a diff, PR, changelog or story: maps the change to promoted Journeys and scopes bounded missions for the gaps. | journey find, explore, mission queue |
jevitate-run-journey | A known flow should be re-run or regression-checked: find a promoted Journey and replay it with typed params on any environment. | journey find, journey run |
jevitate-record | The user wants to demonstrate a flow themselves: a headed recording, then diff, classify and parameterize the takes. CLI only. | record, recording diff|postdoc |
jevitate-demo | A narrated demo video, .vtt subtitles or a step-by-step guide of a flow. Not for testing. | demo, journey demo, journey annotate |
jevitate-verify-fix | After a run reports a defect: reproduce it by fingerprint, prove a fix, attach evidence, lock it in as a regression. | verify-fix, ledger, regression capture|run |
jevitate-ci-check | Adding jevitate to CI or reading a failed check: suites, JUnit/SARIF, baselines, the deduped report and run diffs. | check, report, diff, baseline |
jevitate-ux-review | A usability critique of a flow, live or over a saved Recording. Ranked, cited, advisory: it never gates a run. | ux, explore --strategy usability |
jevitate-load-test | Capacity, throughput or latency numbers: a seeded, human-paced concurrent run of a promoted Journey against an authorized origin. | load run |
jevitate-sources | Sharing Journeys across repos and teams: git-backed sources, human-only trust, the run-gate and publishing. | source add|pull|run, journey publish |
jevitate-test-campaign | Testing a whole release across many user jobs: preflight, a jobs catalog, discovery, journey-anchored adversarial missions, triage, verify-fix and the release gate. | campaign run, explore --from-journey |
How an agent picks a skill
jevitate-getting-started is the entry point. It checks the setup once per session
(jevitate ai status --json; a missing .jevitate/ means the human runs
jevitate init), gets a first useful result, then routes:
# keys, and a task a user does
jevitate explore --url http://localhost:3000 --goal "<task>" --success "urlIncludes:/<done-path>" --real --json
# keys, and a question about the app (read-only by default)
jevitate explore --url http://localhost:3000 --goal "find out <question>; report the answer" --real --json
# no keys: misuse planned in code, findings from hard signals
jevitate explore --strategy adversarial --url http://localhost:3000 --fake-ai --json | The user wants to | Skill |
|---|---|
| explore, find bugs, or check that a goal is reachable | jevitate-explore |
| know what to test after a diff or PR | jevitate-mission-scope |
| replay a known flow (a saved Journey) | jevitate-run-journey |
| record a flow they click through | jevitate-record |
| get a narrated demo video or a step-by-step guide | jevitate-demo |
| reproduce a finding, prove a fix, or lock a bug in as a regression | jevitate-verify-fix |
| gate CI (JUnit, SARIF, baselines, a defect report) | jevitate-ci-check |
| get a usability critique | jevitate-ux-review |
| run a load test | jevitate-load-test |
| share or run third-party Journeys | jevitate-sources |
| test a whole release end to end | jevitate-test-campaign |
MCP tools or the CLI
-
If the jevitate MCP tools are in the agent's tool list, it uses them. They take the CLI flags
in camelCase (
--storage-statebecomesstorageState), run the same command, and return{exitCode, data}. Exit 2 and every refusal come back as MCP errors, never as a pass. - Otherwise it uses the CLI with
--jsonand reads the exit code too. -
Some things are CLI-only for a person:
record,init,ai setup,ui,source trust. Operator settings (shell hooks, browser binaries, secret sources, log sources) are never tool arguments. The skill tells the human the command instead.
Rules every skill enforces
- Human-only decisions. Promoting a Journey or a mission target, approving annotations or a demo, capturing a regression, trusting a third-party Journey, and approving or cancelling an inbox item happen only when the human asked for that action. A test campaign batches them into a few bulk gates rather than asking one at a time.
- Honest outcomes.
0clean ·1defects found ·2inconclusive (proved nothing, never a pass) ·3hang ·4intermittent ·64nothing ran. The agent reports the outcome it got and never rounds it up. - Authorized targets only. Never widen
--allowbeyond what the human authorized, and never point authoring runs or demos at production. - No workaround browser. Raw browser tools don't exist on purpose. When jevitate refuses, the agent never swaps in another browser-automation tool.
- Secrets stay out of chat and the model. Keys are entered by the human with
jevitate ai setup; passwords and codes are bound with--secret-fieldto an environment variable or acmd:source, never written on a command line. - Nothing invented. A Journey id, param or route the agent runs comes from
journey find(MCPfind_capabilities) in the same session, never from memory.
The skill files
The source of each skill is packages/skills/skills/<skill>/SKILL.md in the jevitate repo. That file is the authority; this page summarises it.