Sessions become rows
A spec can read agent sessions directly:turns view gives one row per message a person typed, with request (what they asked), final_reply (the agent’s last message for that turn) and next_message (what they wrote next), plus counts of tool calls and edits. Text the harness injects, such as IDE context and system reminders, is removed. The full list of views and columns is in the spec reference.
Look at the rows before writing a spec:
Keep private things private
Sessions contain paths, emails, keys and whatever else was pasted into them.redact removes these from every state column before a row is hashed, sent or logged. clip keeps long fields to a size.
hunch compile prints the exact request for the first row: that is what will leave your machine. The judgment’s results table in .hunch/store.sqlite keeps rows as they were read, unredacted, so keep .hunch/ out of git.
Two questions about each turn
outcome reads the next message. claims reads only the agent’s final reply, so it can run the moment a turn ends. Together they answer a sharper question: when the agent says it is done, is it?
outcome.yml
claims.yml
Public sessions: about 90% right
The first test used 28 public Claude Code sessions from Trace Commons (CC BY 4.0), which split into 309 turns. The specs are inprototype/examples/claude_code/, as shown above with act: 0.80. Both judgments cost $0.02.
A panel of three AI reviewers graded 60 random turns without seeing the model’s answers. Against their verdicts:
claims_done scored 88% the same way. The model’s outcome mistakes leaned one way: 5 of 6 said “worked” where the panel saw a failure or a redirect.
The join raised a question of its own. Among turns where the agent edited files and said it was done, the developer reported a problem in 33% of the 142 turns where it ran nothing after its last edit, against 16% of the 31 where it ran a command. Turns cluster within sessions, though. Resampling by session puts the gap between −1 and +30 points, so it is suggestive, not proven.
The maintainer’s own sessions
The next test was the maintainer’s own Claude Code sessions: personal and scratch projects, with work repositories left out. Only aggregate numbers are recorded; no text from those sessions appears here. The first run read 533 turns for $0.04. A later fix to the trace reader stopped it from taking another agent session’s message for the developer’s, which left 475 turns. The spec was the one above withact lowered to 0.60. The developer who wrote the sessions graded random turns from the text on screen:
outcomewas right on an estimated 91.7% of turns (95% CI 74.2–97.7%), from 24 random turns.- At
act: 0.60(not the example’s 0.80), 58.3% of the graded turns would be labelled automatically, and none of those were wrong. - 1 of 30 random turns needed more of the session than the request, reply and next message.
- When the agent said it was done, the next message reported a failure or a redirect in 3% of turns (7 of 227). When it did not, 8% (26 of 306). These rates rest on
claimsanswers nobody has reviewed yet.
A better wording that was worse
The remaining mistakes had a pattern: the developer’s next message was a follow-up question, and the model read it asfailed or worked rather than unclear, with confidence between 0.43 and 0.57.
The obvious fix was to say so in the spec. failed gained “A follow-up question (asking to explain, compare or recommend) is not a failure”, and unclear gained “such as a follow-up question about the answer”. Before shipping it, hunch diff compared the new wording with the old on the same 475 turns:
- 108 of 475 turns changed answer. Most moved from
workedtounclear. - On the 21 graded turns both versions shared, accuracy fell from 95.2% to 71.4%: 0 fixed, 5 broken.
diff is for: the change read well, and only the rows showed it was wrong.
Grade from the text, not from memory
When you review your own sessions, you remember what happened next and the model does not. Pressc (needs more context) when only your memory decides a row; see Review.
What is still open
claimshas not been reviewed on the maintainer’s sessions.- The own-session grades came from the person who wrote the sessions. The review screen shows the model’s answer, so the grades are not blind.
- 24 random grades give a wide interval. About 30 more are needed before judging the next wording change.