MCP & CLI
The same execution core has three faces: a CLI, a programmatic API, and an MCP facade. Only named, promoted Journeys cross the boundary.
The CLI
The binary is jevitate. Every command accepts --json for a machine-readable envelope.
# install
npm install -g @jevitate/cli
# set up
jevitate init
jevitate profile create work
# journeys
jevitate journey list
jevitate journey find "checkout"
jevitate journey run <id> --param email=you@example.com
# author from recorded takes
jevitate recording fit take.json
jevitate recording postdoc take.json --out journey.json
jevitate recording promote journey.json
# load / throughput
jevitate load run <journeyId> --concurrency 5 --iterations 10 --seed 1
# model-assisted authoring
jevitate generate <task>
jevitate setup <feature> The MCP facade
The MCP surface is HITL-style: discover, then invoke. It exposes no raw browser tools — an approved Journey is one allowlisted domain tool.
| Tool | Behavior |
|---|---|
find_capabilities | Search the catalog, scoped to promoted / allowlisted Journeys, returning capabilities with their param-schemas |
run_journey | Resolve an already-published Journey by id only — never inline steps — and validate params against its schema |
queue_action / queue_retrieval | Enqueue a typed action or read; cannot skip approval policy |
approve_action | Record approval bound to the exact action hash, if the caller is authorized |
get_command / cancel_command | Read command state / cancel queued work at a safe boundary |
list_incoming / get_thread | Read normalized local records |
get_site_health | Session, queue, and quarantine status — without browser internals |
Federated sources add findFederatedCapabilities behind a trust + terms-of-use run-gate.
Explicitly forbidden
The facade never exposes browser_click, browser_fill,
page_evaluate, run_selector, navigate_url,
get_dom, or get_cookies — these are an enforced denylist, not options.
Roadmap: an authoring-plane
queue_exploration({ goal|feature|route, successAssertion, strategy, budget }) tool so an agent can scope what to test from
a diff or user story — it enqueues bounded missions behind the same allowlist, never the browser.
See Testing Modes.