The law: every human-facing surface has a --json twin, every
machine payload carries a version envelope, and evolution is
additive-only β a field is added, never renamed or removed within
a version. Agents and tooling parse the JSON; the pretty output is
free to improve without breaking anyone.
The wires
nika check - reads the workflow from stdin β editors and agents
audit keystroke-fresh buffers without touching the disk.
The hosted twins
The same law reaches the web: the machine surfaces an agent can fetch without a binary, each probed and versioned like the CLI wires.The exit-code contract
Scripts and agents branch on exit codes, so they are the engine CLI exit-code contract (locked Β· additive-only), not an accident:
Stream discipline: product output goes to stdout, only
environmental noise goes to stderr β and in
--json modes, progress
moves to stderr so stdout stays parseable.
The MCP oracle
nika mcp serves the same truths over the Model Context Protocol
(stdio, read-only): validate (nika_check β a dirty workflow returns
isError: true, mirroring the CLIβs exit 2) and learn (nika_schema Β·
nika_examples Β· nika_template Β· nika_canon Β· nika_catalog Β·
nika_tools Β· nika_explain). Same owning builders as the CLI
payloads β the two lanes cannot drift apart by construction.
The evolution rules
- Versioned: breaking a payload shape means bumping its envelope field β consumers pin on it.
- Additive-only within a version: new fields appear, existing ones keep their meaning.
- Deterministic: stable key ordering, no timestamps injected into otherwise-stable payloads β machine output is cache- and diff-friendly.
- Presence, never values: no secret VALUE crosses any wire, human or machine. Requirements name the env var; doctor reports set/unset.
Next on this page once the next engine tag ships:
nika welcome --deep --json (context_version) β the whole workspace truth in one call
(file map with per-file verdicts Β· run inventory with actual cost Β·
environment snapshot Β· wiring state Β· caps always reported, relative
paths only). It is merged on main today and rides the next release.