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.

ToolBehavior
find_capabilitiesSearch the catalog, scoped to promoted / allowlisted Journeys, returning capabilities with their param-schemas
run_journeyResolve an already-published Journey by id only — never inline steps — and validate params against its schema
queue_action / queue_retrievalEnqueue a typed action or read; cannot skip approval policy
approve_actionRecord approval bound to the exact action hash, if the caller is authorized
get_command / cancel_commandRead command state / cancel queued work at a safe boundary
list_incoming / get_threadRead normalized local records
get_site_healthSession, 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.