Anatomy of a notice
ADiagnosticNotice is everything the repair agent needs to diagnose one detected degradation. It deliberately carries enough that no follow-up round trip is needed to find where the problem was. Your task agent never sees it:
Notice ids are timestamp-sortable and validated as safe path components (they are supplied to tools and become filenames).
The mailbox
- The hook posts to
pending/; the repair agent resolves viaharness_notice_ack(a candidate was created) orharness_notice_resolve(duplicate, already-covered, no proposal, or unactionable). Either moves the notice toprocessed/with aResolutionnaming what happened. - Related notices from one turn are claimed together as a single repair episode, and resolved atomically — a partial acknowledgement is not possible. Timeout or failure acknowledges nothing, leaving every notice recoverable.
status.jsonis a cheap summary for operators. No eval-derived free text ever reaches a task prompt: the task preamble is a constant sentence, and rich content stays behind repair-only tool calls where it is sanitized and framed as untrusted data.
Trace dumps
Two artifacts undertraces/:
latest_eval.json— always rewritten with the most recent evaluation, alerting or not. A cheap “what did the harness last see” probe.<notice-id>.json— one immutable dump per notice: every score with its threshold, tier, trace id and conditions, the per-trace breakdown, and (withenrich_flagged_traces=true) the worst flagged trace’s TOOL spans fetched at notice time.
The journal
journal.jsonl is the append-only, cross-run event log — the harness’s long-term memory of the agent’s health. It spans process restarts, so a fresh harness over the same workspace inherits everything: rules re-enter the rules.md References index, and past notices inform new forward-trial baselines.
The journal is an operator surface, not an agent tool. Neither agent can read it: it is where you see what is being learned, and it drives forward-trial baselines and rule-effectiveness counts internally. The cross-run signal repair actually needs — the trajectory — is inside the notice itself.
Everything in the workspace is plain JSON (or markdown) on disk. When in doubt,
cat it — the file layout is the API surface for operators.
