# fix-it-once kit

Brinvik Lab, 21 October 2026. Does one correction, saved in a shared memory, reach the agents that
never got it?

## What was tested

Three drafting agents for Mette, an invented seller at an invented Danish software firm: First touch
(new leads), Inbox (customer mail) and Follow-up (after meetings). Mette has eight house rules the agents
are never told. When a draft breaks one, she corrects it, and the correction is saved as a note in her
words. Two set-ups, same tasks, same order:

- **Separate notes**: every agent reads and writes its own notes.
- **One shared memory**: all three read and write the same notes.

One working week (five days, two drafts per agent per day), run three times each way, in Danish and in
English: 360 drafts by Claude Sonnet 5.5. A script (`rules.py`) decides which rules a draft broke, so
every number re-computes from `runs.jsonl`.

## What came out

| | Separate notes | One shared memory |
|---|---|---|
| Corrections in a week, Danish runs | 33 to 34 | 13 to 16 |
| Corrections in a week, English runs | 37 to 41 | 13 to 20 |
| Inbox, corrections in the week (DA / EN) | 11 to 14 / 13 to 15 | 0 to 1 / 0 to 3 |
| Monday's first two Inbox drafts with nothing to fix | 0 of 12 | 12 of 12 |
| Times a rule had to be taught, per run | 19 to 20 | 7 |

- All six runs: 215 corrections with separate notes, 92 with one shared memory. The shared memory came
  out lower in 6 of 6 paired runs.
- Notes that came from another agent's draft were followed 801 times out of 814.
- One rule never needed teaching: no draft used an exclamation mark.
- The script counted one rule as broken again and again: "I, not we". 31 of the 32 times Mette had to
  repeat herself were this rule. Read draft by draft, 28 of the 31 are the "we" that means you and me
  ("Could we talk Tuesday at 10:00?"), which the note's own reason allows ("the customer is talking to me,
  not to a company"). Three are the company "we" the note bans, and one of those copied "den tager vi"
  straight out of the price note. The agents learned the reason, not the word.
- A note's example gets copied. The time note said "for example Tuesday at 10:00". 155 of the 306 drafts
  that had that note offered exactly Tuesday at 10; none of the 54 without it did. Write your notes the way
  you want the drafts to sound, and leave out examples you don't want repeated.
- A note from another agent worked as well as the agent's own: followed in 801 of 814 drafts that had it,
  against 1,183 of 1,202 for notes the agent earned itself. "Followed" means the draft did not break the
  rule, which includes drafts where the rule could not come up.
- Cost of all 360 drafts at list price: $3.17.

## What is in the kit

- `skills/shared-notes/SKILL.md` (English) and `skills/faelles-noter/SKILL.md` (Danish): a skill that
  makes an agent read the shared notes before drafting and turn your edits into notes. Drop it into
  Claude or into a Managed Agents setup with a shared memory store.
- `rules.py`: the eight rules as a checker. Replace them with your own and run `python3 rules.py` to see
  each rule fail on purpose before you trust it.
- `prompts.json`: the invented company, the tasks and the exact wording of every note.
- `api_job.py`: the test itself. It needs the `anthropic` Python package and an API key in
  `ANTHROPIC_API_KEY` on your own machine. Set `FIX_IT_ONCE_FAKE=1` to dry-run it without any API call.
- `score.py`, `facts.json`, `runs.jsonl`: the scoring, the numbers and every draft, word for word.

## What it does not show

- A script, not a person, plays Mette. A regex cannot judge tone, so the eight rules are things a regex
  can decide. Real edits are messier, and real notes are written by the agent from the difference
  between the draft and what you sent.
- One invented company, 30 tasks, one model. Your rules and your drafts will behave differently.
- A shared memory also spreads a bad note to every agent at once. Only your own edits should become
  notes, never text from a customer's email. On Managed Agents, attach the store read_only to any agent
  that reads customer mail, and let one path write.
- Agents were always run in the same order, so First touch took Monday's lessons in both set-ups. The
  saving lands on the agents that run after the first.

## På dansk

Pakken indeholder testen, tallene og alle 360 udkast. Den danske skill ligger i `skills/faelles-noter/`.
Den får en agent til at læse de fælles noter, før den skriver, og til at gøre dine rettelser til noter,
som alle agenterne læser næste gang. Brug den i Claude eller i et Managed Agents-setup med en fælles
memory store.
