Field note · 2026-07-26
Putting the right things in front of the agent, every turn
I moved the choice of what the model sees each turn into plain code that runs between turns, and tested it blind.
- 7 of 8
- times the instruction was followed with the packet2026-07-26
- 1 of 8
- without it2026-07-26
- 2.0 ms
- to assemble the packet, no model call2026-07-26
- 16 of 20
- people resolved from a description, against 0 of 20 before2026-07-26
What I saw
An instruction Bob had been given was present in his memory and absent from his behavior. It had been cut by a slice that knew nothing about what it was cutting.
What caused it
Context was being assembled by whatever wrote to it last. Nothing decided what mattered on this turn, for this person, on this channel.
What I changed
A curator, in three parts. The assembler is plain code with no model call; it runs as the lowest-priority hook so its packet lands last and the cached prefix survives. It always emits something. Pinned instructions are copied verbatim and exempt from the budget; evidence is what gets cut first. Between turns, a model writes two to four search queries of its own and the results are staged for the next turn. A third part resolves people referred to by description ("my old roommate") to the right person.
Then I replayed the original failure. A blind judge scored whether the instruction was followed: 7 of 8 with the packet, 1 of 8 without. Resolving people went from 0 of 20 to 16 of 20, and a stronger model scored the same, so the gain came from context and explicit rules.
Later I added a governor that caps the late context on technical turns, and a render cap: a register allowed to hold 50 entries hands the prompt its newest six and a count. A full register costs 144 characters instead of about 9,000.
What I'd tell another team
Assemble context with code you can read, and let the model propose what to fetch. Budget a reasoning model generously: mine once spent 396 of its 400 tokens thinking and returned 42 characters of JSON.