i-have-adhd: 10 output rules, measured on the agent they were not written for
Published
Three arms, 21 delegated runs. The skill made 9 of 9 answers end with a runnable next action (baseline 0 of 9) and cut the median answer 43 percent. But 2 of 3 reps then left a diagnosed failing test unfixed. We kept two rules, not ten.
i-have-adhd is a 54.9k-star skill (Python, MIT, +579 stars in the last 24 hours in our corpus). Its README promises that it stops your coding agent from burying the answer: action first, steps numbered, no "Hope this helps!".
SKILL.md lists 10 rules. Lead with the next action. Number multi-step work. End with one concrete next step. Suppress tangents. Restate state. Give minute-level time estimates. Make wins visible. Report errors matter-of-factly. Cap lists at five. Skip the preamble, the recap and the closer.
The only number in the repository is the rule count, so measurement has to turn the claim into numbers. That makes this a different test from the rest of the column. The question is not whether one tool beats another, but whether a 10-rule style guide changes an agent that already has output conventions.
Hermes ships its own conventions (lead with a one-line summary, cut filler), and the skill was written for Claude Code with a /i-have-adhd invocation Hermes does not have. So each rep was handed the file path and told to read it first.
1.Method
Fixture: a Node-only repository with no dependencies and a real bug. A milliseconds-versus-seconds unit error in src/tokens.js fails one of three tests. A stale README line and an unused import sit in the tree as tangent bait.
Three scenarios: fix the failing test; add a function plus its test to the same file (where the pre-existing red test is still sitting); and report why node bin/report.js crashes. Each rep got its own copy of the fixture and was asked to write its verbatim final message to answer.md, so the text could be measured instead of paraphrased.
- Arm 1 (base, n=9): the scenario prompt only.
- Arm 2 (skill, n=9): the same prompt, byte for byte, plus "read this skill file first: <path>".
- Arm 3 (rule, n=3): scenario 2 only, plus the two house rules we then adopted for our own agent.
- Every number below is a regex over the verbatim answer plus one real
node --testrun inside that rep’s own copy of the fixture. No human or model judgement enters a published figure.
2.Result
| Measured | base (n=9) | i-have-adhd (n=9) | our 2 rules (n=3) |
|---|---|---|---|
| Ends with one runnable next action | 0/9 | 9/9 | 3/3 |
| Words per answer (median) | 196 | 112 | 260 |
| Uses numbered steps | 0/9 | 4/9 | 0/3 |
| Lines before the first actionable line (median) | 3 | 2 | 12 |
| Opens with a recap of finished work | 6/9 | 4/9 | 2/3 |
| Forbidden opener ("Great question" class) | 0/9 | 0/9 | 0/3 |
| Mentions the second problem | 6/9 | 7/9 | 3/3 |
| Test suite green after the run | 6/9 | 4/9 | 3/3 |
| Scenario 2 only: pre-existing red test fixed | 3/3 | 1/3 | 3/3 |
Dashed line = all three runs
Ends with one runnable next action, base
0/9
No baseline answer closed with a next step
Same measure, i-have-adhd
9/9
Every skill-arm answer did
Words per answer, median
196
Base arm; the skill arm answered in 112
One rule dominates everything measured here. "End with one concrete next action" went from 0 of 9 answers to 9 of 9. No baseline answer closed with a runnable next step; every skill-arm answer did.
The skill also cut the median answer from 196 to 112 words (-43%). In scenario 3 the median fell from 2 lines before the first actionable line to 0. The crash replies open with the command to run (node bin/report.js data/sessions.csv) instead of a stack trace.
What did not move: the forbidden openers. The baseline never produced one (0 of 9), so the "no preamble" rule had nothing to fix here. The closing pleasantries were 0 of 9 too. Numbered steps moved only partly, 0 of 9 to 4 of 9, and scenario 2 stayed long in both arms.
3.The cost nobody advertises
The skill’s rule 4 says to finish the first issue and offer the second separately. Read as scope discipline, it changed what got finished. Baseline and skill-arm reps found the same pre-existing unit bug. Baseline reps fixed it; skill-arm reps stopped.
- "the failure is pre-existing, at test/tokens.test.js:11 ... left untouched" - skill arm, scenario 2
- "Left unfixed - out of scope for this task", followed by an offer to fix it on request - skill arm, scenario 2
- In scenario 2 the suite ended green in 1 of 3 skill runs against 3 of 3 baseline runs.
This measures the skill text as shipped, not its author’s intent. SKILL.md also says a rule that fights the task loses. Its "finish the first, offer the second" example is about a stale dependency, not a red test in the file being edited. The numbers show that the wording transfers to the second case.
4.What we changed in our own agent
Two rules went into Hermes’s standing profile. Finish with exactly one concrete next action. Treat a defect in a file you are already editing as part of the job: fix it, or say in one line why it stays. Re-running scenario 2 with those two rules (arm 3) restored the suite to 3 of 3 green. All 3 answers ended with one runnable next action.
The brevity did not come with those two rules. The rule arm wrote 260 median words against the skill’s 112 and the baseline’s 229, and 0 of 3 used numbered steps. The short answers in arm 2 came from the whole wording discipline, which we did not adopt wholesale. The extra lines were the cause, the file, the fix and the judgement calls a reviewer needs.
5.What we could not measure
- Tokens per answer: a delegated rep returns no usage figures, so sizes are words and characters rather than a guessed token count.
- Rules 5 (restate state) and 7 (make wins visible) need a multi-turn session with a live reader; every run here was one task, one answer.
- n=3 per arm per scenario. The rule arm covers scenario 2 only - that is where the skill measurably broke something.
- The rule arm’s run directories were not pre-seeded. The reps copied the pristine fixture themselves, and one flagged the missing path. That rep spent 291 s and 15 API calls on a task the other arms finished in 31 to 82.
- The skill targets Claude Code’s /i-have-adhd; on Hermes the measured path is handing the model the file path, which is how a new skill is validated here.
- Surface metrics read text, not comprehension. "Mentions the second problem" counts a labelled aside anywhere. We measured placement too: 1 of 9 skill answers put it before the first actionable line, 0 of 9 baseline answers did.
- One machine, one model, one day: MacBook Pro M1, 8 GiB, macOS 26.3, Node v24.21.0, 2026-10-07, skill commit 723af7d.
Decision
- Copy rule 3, whatever harness you run
- End with one concrete next action.
- 0/9 to 9/9 on the same tasks
- Nothing else in the table moved for the worse
- Do not copy rule 4 as written
- Reps left a red test they had already diagnosed in the file they were editing.
- Scenario 2 suite green in 1/3 skill runs against 3/3 baseline
- Rewrite it as "fix what you found, or say why not"
- Install all 10 rules only if your agent has no output conventions
- Forbidden openers were already 0/9 here.
- The -43% median length is real, but it drops the cause and the review notes
- Two rules, not ten, for an agent that already formats well
- Next action plus fix-what-you-found.
- 3/3 green and 3/3 with a next action in the rule arm
- No regression measured
Raw rows for every number above, including the per-run details and the setup failure in the rule arm: docs/analysis/2026-10-07-i-have-adhd-output-shape.jsonl (42 rows). The skill was read at commit 723af7d of ayghri/i-have-adhd.