| Mode | What Assay is | Labelling |
|---|---|---|
Corpus (mode: "corpus") | Track a person or a business using AI to build | Core. assay labelling on. |
Observability (mode: "observability") | Meter + transcripts on an agent loop | Optional. assay sweep on without labelling. |
assay init writes mode: "corpus" and both switches off.
The two switches
| Switch | Command | What it does |
|---|---|---|
| Capture | assay sweep on / off | File-log ingest on a 30-minute timer |
| Labelling | assay labelling on / off | Place unplaced sittings using their AI |
labelling on does not require sweep on (an embedded or OTLP host already fills the store). Both off unloads the timer.
on is the consent moment. It records the harness binary it found. It copies enough environment into the timer so the job sees the same AI you do. For Claude Code it also merges a Stop hook: assay labelling session-end.
off reverses config, copied skill files, the timer, and that marked hook. Overlays already written stay.
Do not buy a second model
The runner uses the AI they already pay for:- A coding-harness CLI on
PATHwith print mode, or labelling.apiin the config (url, model, and the name of an env var for the key — never the secret itself).
on refuses and writes nothing.
Assay owns: the tree, the type vocabulary, the write door, rank (declared > judge > heuristic), retrieve-by-write, the timer.
The model returns JSON. Assay parses and writes through the same door as assay declare.
Reliability path
Clean exit:assay labelling session-end [--session <id>].
- Retrieve-only objective placement. No judge.
- If that sitting is still unplaced, run the labeler for that sitting only.
- No session id → retrieve only. Do not guess the newest sitting.
- Always exits 0 so the host sitting never fails.
on true. Session-end does not capture. Sweep still does.
What you do by hand
source=user and outranks later guesses.
A sitting that changed job needs episodes, not one label. A sitting that also touched another product needs a touch, not a split. See Framing.
Proposed nodes from a judge wait for accept. Do not treat a proposal as an accepted root.
Observability
Labelling is optional.assay sweep on captures without it. A local --judge stays behind the sovereignty gate. Do not treat that pass as corpus quality.