Anatomy of a notice
ADiagnosticNotice is everything the agent needs to diagnose one detected degradation:
| Field | Purpose |
|---|---|
metrics | Every alerting metric with its value, threshold, platform reason, and which conditions fired. |
flagged_traces | The trace ids the platform identified as problematic — the starting point for harness_trace_inspect. |
signal_breakdown | Per-trace signal scores (loop_detection, tool_correctness, …) already extracted from the score metadata. |
dump_path | An immutable, verbose evaluation dump under traces/ for the full picture. |
signatures | The compact condition labels — used for de-dup, rule tags, and eval-case matching. |
resolution | Filled on acknowledgment: when, and which rule resolved it. |
The mailbox
- The hook posts to
pending/; the agent acknowledges viaharness_mailbox_ack, which moves the notice toprocessed/with aResolution(acked_at, optionalrule_id, optional note). status.jsonis the cheap summary the system-context banner reads — composing the prompt never scans the directory.- The banner carries only a count and a severity enum. No eval-derived free text enters the preamble; rich content stays behind explicit 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 thresholds, conditions, per-trace signals, 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 agent’s long-term memory of its own health. The agent mines it through harness_journal (recent events, filterable by type) and harness_reflect (an assembled reflection context: recent notices, the live rule set, validation outcomes, and per-rule effectiveness counts).
Everything in the workspace is plain JSON on disk. When in doubt,
cat it — the file layout is the API surface for operators.
