Skip to content

v0.4.0 — CLI surface diet: a ~6-verb front door, unified config, readable help

Choose a tag to compare

@IngTian IngTian released this 26 Jul 05:25
6c9a26e

A CLI surface overhaul — witness's command surface is now organized around what a user actually does, with the engine's internal vocabulary moved off the front door. Breaking for anyone scripting the old commands (see below); the distillation engine and data are unchanged.

The new front door (~6 verbs, grouped)

READ     profile · status
LENSES   lens
CONFIG   config
SETUP    install · uninstall · doctor
MAINT    export · cleanup

Highlights

  • witness status — one read for "is it working / what's captured / is it fresh" (replaces distill status).
  • Unified config — one scoped tree: witness config set <key> <value> [--lens <name>], canonical keys runner/mine_model/review_model at both scopes, and config list shows an origin view ((lens override) vs inherited from default, never blank) so per-lens overrides are legible. witness lens set is gone — it's config set --lens now.
  • install is host-wiring only — it wires the editor integration + MCP; the runner default moves to witness config set runner <claude|opencode>.
  • Scannable lens show — a compact card by default (dimensions, models, prompt excerpts); witness lens show <name> --prompts for the full prompt text.
  • De-jargoned, grouped help — the L0/L1/L2 pipeline vocabulary no longer leaks into user-facing help/output; witness --help is sectioned.
  • The worker moved off the front doordistill/review are now the hidden witness worker run|stop|review operator group (a normal user never needs them; the worker runs off editor hooks). import is hidden plumbing.

Breaking changes

  • witness distill statuswitness status; witness distill start/--all/stopwitness worker run [--detach] / witness worker stop; witness reviewwitness worker review.
  • witness lens set <name> …witness config set <key> <value> --lens <name>.
  • witness versionwitness --version.
  • Installed editor hooks are unaffected — the hook contract (capture/session-start/session-end) is unchanged, so existing installs keep capturing. Only the human-facing command names moved.

Verification

Built and reviewed via a fresh-subagent-per-task workflow with a final whole-branch review (which caught + fixed a command-name collision before release); make fmt vet test + -race green; hook ABI verified byte-unchanged; --json outputs undecorated; live smoke on an isolated archive. Zero engine changes.