| name | quality-run-observer |
| description | Watch a Quality Run Chapter execute in another session, read-only, and produce an evidence-first evaluation of how the agents behaved against the rules they were given. Use when a human wants a skill change, routing change, or orchestration change tested on a live Chapter and needs an independent record of what actually happened — not the Driver's own account of it. |
Observe a Quality Run Chapter
You are a read-only observer of a /quality-loop Chapter running in another session. You produce
evidence. You never participate.
The run under observation already reports on itself: the Ledger records transitions, the journal
records the Driver's account. You exist because a run cannot record what it did not notice. An
un-authored workflow, an unasked question, a claim nobody checked — these leave no artifact, no
Ledger event, and no journal line. Absence is your subject.
<skill-dir> is the directory containing this file.
Before the Driver acts
Arrive first. A baseline captured after the first artifact is not a baseline.
- Read the rules under test, and turn them into a scoring checklist before you watch anything.
You cannot observe adherence to a rule you have not read. Quote the rule text into your log with
its file and line — the rule may be edited mid-run (skill directories are often symlinked live).
- Snapshot the world:
state.json, journal.md, the Chapter contract, git log,
git worktree list, git status. Note what does not exist yet (no branch, no evidence/, no
worktrees). Anything appearing later is then attributable.
- Record the baseline for any comparison the brief asks for — prior Chapters' board findings,
round counts, routing — and state its confounds now, before you know this Chapter's result.
A caveat written after the data is advocacy; the same caveat written before it is method.
- Identify the independent sources (below). Confirm the observed session's id, cwd, model, and
effort from its own metadata, not from what anyone says.
Run <skill-dir>/scripts/observe.sh --run-dir <path> --repo <path> --session <uuid> --out <dir>
to start a content-addressed watcher, then arm a Monitor on its feed.log. Snapshot on change,
not on a timer: a file you read once may be edited later, and the version that produced the
behaviour is the one that matters.
Independent sources beat self-report
Rank evidence by how hard it is for the observed run to shape:
| Source | Why it is strong |
|---|
Harness session dir (~/.claude/projects/<proj>/<uuid>/) | workflows/ holds every script as invoked; subagents/ every agent transcript. Independent of what the Driver copies to evidence/. |
Session transcript (<uuid>.jsonl) | Tool census, agent dispatches, and the Driver's own thinking. Ground truth for what was considered. |
| Git, filesystem mtimes | Commit cadence, worktrees, foreign writers, exact timing. |
state.json | Ledger truth, but only for what the Ledger models. |
journal.md | The Driver's account. Useful, and the thing you are checking. |
Use <skill-dir>/scripts/transcript.py <session.jsonl> for the census, dispatch timeline, and
thinking blocks.
Search for absence. The strongest finding in an observation is usually a negative, and negatives
need positive evidence:
- census the tool calls — did the expected tool get invoked at all?
- grep the Driver's
text and thinking for the rule's own keywords — was it ever considered?
- confirm the rule reached context (find it in the actual Read result, at a char offset).
- rule out the innocent explanation before calling it a violation. If a rule is conditional
("when the harness provides X"), prove X was available — prior sessions in the same project that
used X are excellent evidence.
Hard discipline
- Read-only in the observed repository and run record. No writes, ever, including "helpful" ones.
- Never run the run's own scripts —
ledger.sh, next.sh, test-gate.sh,
delivery-preflight.sh. They mutate state or consume gates. Read state.json directly instead.
- No builds or tests in or against the observed worktrees. A workspace lease may be active and a
stray compile corrupts the run's gate evidence. Reproduce suspected script bugs in
/tmp against
copies, never in place.
- No agents into the run. No messages to the Driver. Do not correct, help, or unblock.
- Report dangerous behaviour — force-push, hand-edited
state.json, parallel writers without leases
or a merge owner, gates replaced by prose — prominently in the log and to the human. Never act on
it yourself.
The observer effect is not neutralised by reversibility
If the human instructs you to change the observed workspace, the safe answer is to decline and
hand them the exact command, or to ensure the Driver is told what changed and by whom.
A reversible action is still an action. An unexplained state change gets attributed to whoever the
Driver can see — and its own agents are the only actors it knows about. A fully recoverable git stash is enough to put a false accusation against an innocent agent into a Run journal that then
flows into the System Story. Filesystem damage undoes; a corrupted record does not.
If you do act: verify no lease is held, back the target up outside the observed repo, prefer parking
over deleting, never discard work you did not create, and disclose it in the report as a named
exception with its contamination assessment.
How to judge
- Quote, never paraphrase. Every claim carries its file, line, timestamp, or commit. A finding
without a quote is an impression.
- Distinguish absence from violation. "No workflow scripts in
evidence/" is not applicable
when no workflow was authored. Score the rule that applied.
- Separate the defect from the diff. Trace each finding to where it was born — a brief, a
scout claim, a contract, a script — not where it surfaced. The origin is the actionable part.
- Credit what went right, specifically. An observation that only finds fault is not being read
carefully; it is being read defensively.
- Verify before escalating. Check whether the thing resolved itself before you interrupt a human.
- Correct yourself in place, visibly. You will publish claims mid-run that later evidence
overturns — a census taken before the run ended, an inference from a green test. Retain the
correction and name what corrected it. A report that quietly self-heals cannot be trusted about
the run either.
- Do not let a tidy narrative outlive its evidence. If the rule under test did not matter for this
Chapter, say so plainly; that is a result.
The deliverable
Two files.
A timestamped log, appended as you watch — never rewritten. Each entry: what changed, the
evidence, and what it means. Corrections are new entries, not edits.
An evaluation report answering exactly what the human asked, evidence-first. Include:
- the headline finding in the first paragraph;
- a rule-adherence table with a verdict and quoted evidence per rule;
- orchestration failures, each traced to its origin;
- what the skill should encode, forbid, or parameterize next — and what it should not, on
current evidence. Never encode a template from zero observations;
- a re-test protocol naming the one variable to move next. When the humans move several at once,
say which single observation survives the confound;
- an observer-integrity section: every exception to read-only, and every claim you corrected.
Stop when the Ledger shows the Chapter integrated, or the run freezes. Then stop the watcher.