v0.5.0 — witness ingest (records-in engine) + install/wire split
witness becomes a generic records-in distillation engine — it now ingests your own records (notes, articles, any text stream), not just Claude Code / OpenCode chats — and the install surface is split so witness can be set up as a standalone library without wiring an editor.
Highlights
witness ingest— feed witness a documented NDJSON record contract (one JSON object per line, via stdin or--file) and it distills those records exactly like a coding session: observations → bi-temporal facets → a narrative profile, per lens, served over MCP. witness owns the format + protocol; you bring clean records (it parses no files itself).id(same id + unchanged → skip; same id + changed → update; new id → append), so re-ingesting is idempotent and never deletes records you didn't mention.tsis the temporal axis;sessionoptionally groups records mined together.fileplatform adapter — an ingested source distills through the unchanged engine;file:-namespaced sessions never collide with editor sessions.- install ≠ wire (breaking rename):
witness install [--path <dir>]now provisions an archive (no editor, no person-growth default lens — a blank engine you fill with your own lens);witness wire <claude|opencode>connects an editor (wasinstall <target>);witness unwire(wasuninstall). Run severalinstall --pathfor isolated archives (one per data source). - Contract documented + versioned in
prompts/SCHEMA.md— the public API a downstream tool builds against.
Breaking changes
witness install <claude|opencode>→witness wire <claude|opencode>;witness uninstall <target>→witness unwire <target>.witness installwith no target now provisions an archive.- Already-wired editors keep working — the installed hook contract (
capture/session-start/session-end) is unchanged; only the human-facing command names moved. Re-runwitness wire <target>(ormake install) if you want to re-wire.
Verification
Built via a fresh-subagent-per-task workflow with a final whole-branch review that caught + fixed a Critical incremental-append data-loss bug before release (dedup now uses true merge/append semantics). make fmt vet test + -race green; hook ABI byte-unchanged; zero distillation-engine changes; live end-to-end verified (a file: session mines observations under a domain lens on an isolated archive).
{"text": "...", "id": "stable-dedup-key", "session": "optional-group", "ts": "2026-07-26", "role": "document"}