Skip to main content
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.
Prefer typed TypeScript over process glue? The published Nika client (@supernovae-st/nika@0.120.2) owns binary discovery, JSON decoding, cancellation, run.events() and typed errors. run() returns an admitted handle; run.result() settles. traceVerify reads existing evidence — it does not seal, rerun, or prove the job was correct. The SDK runtime guide maps these wires to code.

Canonical sources

The public documentation explains the contract. Machine consumers read the versioned CLI output or the owning repository, rather than a marketing build. For a reproducible integration, replace main with a reviewed commit and record its content digest. The knowledge system explains how to read source revisions and distinguish a contract from a released implementation. Historical schema identifiers are stable identities; retiring a website does not rename a language namespace.

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.
nika welcome --deep --json ships on the released 0.120.1 binary — the whole workspace truth in one call (file map with per-file verdicts · run inventory · environment snapshot · wiring state). Caps are always reported; paths stay relative.