On This Page
Grade Both Arms
No Handshake platform language, like Boson
Do not write “Boson”, internal task IDs, anything about the review process, or GitHub handles in anything you create: your grading, ratings, comments, and messages to the agent. The automated checks scan all of it, including transcripts.
In the form, per arm
- 1Six ratings
- 2Behavioral issues
Order
Grade Arm A right after its session, then run Arm B and grade it the same way. The Comparison tab unlocks when both arms are saved. For a finished example, see the Worked Example.
5.1 The grading form
hs starts the form with your first arm and opens it in your browser when a session ends (http://127.0.0.1:8765). If you closed it, run hs annotate. Save each arm's tab, then run hs submit --push --pr. Everything you enter is saved into submissions/armA/ (or armB/) as ratings.json and behavioral_issues.json.
Your own checks
On a code task, build the code and run the tests yourself before you rate it; do not rate from the transcript alone. Save the commands you ran and their raw output in verification/armA/ (or verification/armB/) at the top of your task repo, with a README.md saying what you ran, why, and what you saw. Never write test files in the workspace: anything there ends up in changes.patch and is treated as the agent's work. Use hs diff arm-a to see what the agent changed.
5.2 Six ratings
| Axis | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| Task Success | Failed completely | Partial success, major issues | Completed, notable problems | Successful, minor issues | Completely successful |
| Interaction Quality | Critical blocker | Major issue, overcame with prompting | Periodic issues, not major impediment | Only noticeable because looking | No behavioral issues |
| Thoroughness | Failed most tasks, constant user input | Failed many tasks, frequent user input | Solved most tasks, occasional user input | Solved nearly all, minimal user input (1-2) | Complete understanding, no user input needed |
| Code Quality | Critically bad, unacceptable quality issues | Mediocre, noticeably inconsistent | Adequate | Good, inline with codebase | Excellent, senior-level, mergeable, and maintainable code |
| Instruction Following | Repeatedly ignored instructions | Missed important instructions | Followed most | Followed nearly all | Perfect adherence to instructions and user intent |
| Communication Quality | Cannot be understood at all | Hard to follow; wrong words, jargon, or messy structure | Understandable with effort; vague or wordy in places | Clear on first read; minor wording or length issues | Clear, exact, and to the point |
Rate the arm on its own, not against the other arm. Every score needs a rationale of at least 20 characters. Each rationale must cite a trajectory turn or a file and line, and the cited location must support the claim. Interaction Quality must agree with your behavioral issues: a 5 (“no behavioral issues”) cannot coexist with a severity 1 or higher tag.
5.3 Behavioral issues
- • You tag issues per arm in that arm's tab, after the ratings.
- • Each issue needs a code, a severity, the turn, a description of at least 20 characters, and evidence of at least 20 characters.
- • The evidence has to be findable in the transcript or the code.
- • If the tool blocked or denied a call, add an entry for it with the turn. Use PROD if the harness did it, TOOL or INST if the agent asked for something it should not have.
- • Zero issues is a valid answer when the run was clean. Do not invent an issue to fill the section.
- •
model_behaviour_noteis only for notable model behaviour that none of the issue codes covers. If a code fits, use the code. QC checks that what you write there really happened and is not already covered by a code. - • If the agent fetches the upstream project from the internet (to copy the real fix), record it as a behavioral issue. QC blocks runs where this happened and is not flagged.
Severity
Observation
No negative impact: small nits that did not harm the experience.
Minor
Adds friction: a skilled user can work around it, but it is noticeable.
Major
Degrades the experience: wastes time, requires intervention, causes frustration.
Blocking
Blocks task success or causes harm.
The codes
A good entry
- Code
- LAZY
- Severity
- 2, Major
- Description
- Left a TODO in the retry helper instead of implementing the backoff the prompt asked for, and said the feature was complete.
- Evidence
- Transcript turn 14: 'I'll leave the backoff as a TODO for now'; workspace file src/retry.ts line 42.
5.4 Compare the arms
The Comparison tab asks four questions. Each one is a number from 0 to 7. 0 means you strongly prefer Arm A, 3.5 is a tie, 7 means you strongly prefer Arm B. Half steps are allowed. Use the ends of the scale only when the difference was big and obvious.
| Question | Ask yourself |
|---|---|
Overall Preference Overall, which arm did you prefer working with more? | Everything considered, which arm would you rather work with again. |
Time to Resolution Which arm got you to the correct solution faster? | Which arm reached a correct result faster. State your basis: wall clock, turns, or whether the arm finished at all, and say which. A fast wrong answer does not count. |
Instruction Following Which arm followed instructions better? | Which arm stuck to the opening prompt and your follow-ups. Watch for scope creep and ignored constraints. |
Vibe Which arm had a more preferable vibe in the interaction? | Which arm felt better to work with: tone, pacing, how it handled uncertainty, how much babysitting it needed. |
Three comments follow the scores. Each one needs at least 20 characters, in your own words, pointing at concrete moments.
Overall preference and reasoning
Which arm was better, or that they were equal, and why. Name what you weighed and how each arm did. Your reasoning must match both the direction and the strength of your Overall Preference score.
Behavioral issues encountered
Name the issues you tagged in each arm, by code. Each claim cites a turn, a file and line, or a test result.
Code quality observations
Readability, fit with the codebase, tests, shortcuts, anything your Code Quality ratings did not capture.
Pick 3.5 only when the two arms were truly equal on that question. If one was even slightly better, lean that way (3 or 4) instead of calling it a tie. Your ratings must agree: do not pick 3.5 when your ratings for the two arms differ on the matching axis unless your comments explain the concrete evidence that balances the difference.
Judge what actually happened in the transcripts and the code, not how the agent described its own work.
Reconcile ratings.json, behavioral_issues.json and comparison.json before submitting. Behavioral issues discussed in ratings or comments must agree with the tagged codes and severities. Keep test counts and outcomes identical across files. Cite each factual comparison claim, explain steering differences, and name shared limitations without treating them as a preference when their impact is equal. QC checks the claims using claim sourcing.
Save the comparison, then run hs submit --push --pr. This last push writes each arm's changes.patch, validates everything, and releases your key.