Using Claude Code, Cursor, or another coding agent? Paste this into your prompt to run cross-browser and real-device tests, debug sessions, and wire up CI on the TestMu AI cloud:
context extract, design tests, and maintain reconcile — are interactive by default. This page is the contract for running them headless: from CI, from a script, or from an AI agent driving kane-cli.
The ask policy: --mode
On a terminal, extract and design open a chat. Headless is an explicit opt-in — a bare non-TTY invocation exits 2 and mutates nothing:
--mode decides both what happens when the agent has a question, and what the command writes to stdout:
Rule of thumb:
agent when something can read the pause and answer (an AI agent, a human on the next shift); ci when a pipeline must never guess; override when you accept the recommended defaults wholesale and want one unattended pass.
The same matrix drives maintain reconcile, with two reconcile-specific rules: no headless mode ever archives anything — ARCHIVE decisions wait for an interactive session — and a ci-mode run that hits a decision needing a human stores the plan and exits 2 (the work isn’t lost; walk the stored plan interactively or apply it in agent mode).
Exit codes
Consistent across extract, design, and the maintain commands that embed them:The NDJSON stream (--mode agent)
With --mode agent, stdout speaks a versioned NDJSON vocabulary — envelope {"type": "<name>", "v": 1, "verb": "extract"|"design", ...}, one object per line. The vocabulary is open: new event types may appear, so tolerate unknown types.
The
done guarantee: every --mode agent invocation ends its stream with exactly one done event — including refusals and graceful interrupts. The one exception is operator force: a second Ctrl+C can hard-kill the process (exit 130) without a done. Any other stream that ends without done should be treated as a crash. One more parsing note: the agent may also repair a draft mid-turn on its own — that surfaces only as agent_activity lines (labels like validation failed, refining the draft); treat activity labels as display text, never script against them.
Reconcile’s stream
maintain reconcile --mode agent speaks the same envelope with verb: "reconcile" and its own event set:
Validation failures (bad inputs, unknown source, the fork guard) ride the stream as
error + done with exit 2 — never stderr alone.
The pause → answer → resume loop
This is the heart of driving assurance from an agent. A real exchange (events abridged, payloads shortened):run_start, corpus, and source_start (with "resumed": true) events, the stream continues:
kane-cli context sessions clean garbage-collects them.
Headless review
Trust promotion deliberately has no auto-approve — but it does have a non-interactive path. Prepare verdicts as JSON and land them atomically:resolution is one of approved | edited | rejected | skipped | supersede (optional reason, edit, supersede_target). One unresolvable ref fails the whole file (exit 2, nothing committed). With --json, each landed verdict echoes as one NDJSON row.
Machine-readable reads
These read commands have structured forms:context list --json and context sessions --json (one JSON object per line), context explain --json, context view --json (the full computed graph payload), context view --no-open --out graph.html (render without a browser), and cover --json.
Headless maintain
maintain reconcile --from <file> --source-id <id> --plan— safe preview: records the source change, stages every proposed row into a stored plan, touches nothing else. Exit0; when the source actually changed, the plan path is the last stdout line (an unchanged source is a no-op that stores nothing).maintain reconcile … --mode override(or--mode ci) — unattended application: ADD and MODIFY rows apply, archiving never happens headless, andcifail-closes the moment human judgement is needed (the plan is stored; exit2).- Re-running the same reconcile command is idempotent — it resumes a pending plan, reports an applied one, and recomputes a superseded one (details).
- Bare headless runs without an explicit
--moderefuse with exit2— by design.
A CI shape that works
Next steps
- The assurance overview — where each command sits.
- Building the context graph · Designing tests · Maintaining the suite.