A briefing frozen at the starting gun
Helix remembers in four different places, and each is good at its own question. A hand-written knowledge base knows how applications work. A learned store knows what has actually worked on this machine. A fact store knows about you — who Riya is, which sheet the expenses live in, that you want short replies. And skills hold the how-to you wrote yourself.
All four were being consulted. Two of them were being asked the wrong question.
The question was asked once, before anything happened
At the start of a run, the agent built two briefings — what it knew about this kind of task, and what it knew about you — from the goal as you typed it. Those two strings were then held for the entire run and never rebuilt.
Which is fine for one step. By step ten the run is somewhere the original sentence never mentioned. Ask for "put this week's numbers in the expenses sheet" and you end up in Excel — and everything either store knew about Excel was unreachable for the whole run, because the only question ever asked was about a sentence that said "expenses".
The information was on disk. The retrieval worked. Nobody was ever going to ask for it, because the question had been frozen before the run began.
Retrieval now runs against the goal and the application the agent believes it is in, and rebuilds whenever either changes. That last clause is what makes it affordable: staying in the same app for twenty steps costs one lookup, not twenty.
Scoping it honestly
The first version of this fix was going to rebuild all four stores. Reading the code properly showed that two of them were never broken — the knowledge base and skills are retrieved further down, against a string that already carries the run's current state, so they had been drifting with the run all along.
Fixing them would have been motion without progress, and worse, it would have made the change harder to review by burying the two real repairs among two imaginary ones.
The cleanup that would have been a regression
Three stores, three tokenizers, three sets of stopwords. The obvious tidy-up is to unify them, and it is a trap.
The learned store deliberately keeps words like "play", "send" and "open", because those are exactly what distinguishes one recipe from another. The knowledge base deliberately discards them, because a word appearing in most goals cannot tell you which document is the right one. They disagree because they are answering different questions, and a single shared tokenizer would have quietly made both worse while looking like an improvement in the diff.
So the tokenizers stayed where they were. What was missing was a layer above them — somewhere the results get ranked, deduplicated and paid for.
Paying for it
Nothing had ever measured what recall cost. Each store rendered "a short block" and nobody owned the sum. With a hundred entries per store that sum reaches roughly 15,000 characters on every single step, and no log line anywhere would have told you.
There is now one budget across the whole briefing. Two decisions inside it are worth stating:
Trimming removes whole lines, never parts of them. "Never message anyone without showing me first", cut at the budget, becomes "never message anyone" — a different and much stronger instruction than the one that was given. A truncated rule is worse than a missing one.
Standing instructions are the last thing dropped. They are not about a topic; they are the frame everything else happens inside. A proven route that sends a message is the wrong route when the standing instruction is "always show me first".
A bug the benchmark found and the tests did not
Merging four stores means the same fact can arrive twice, so lines are deduplicated by a signature. The first signature was clever: the set of words longer than two characters, sorted. It would catch the same fact worded differently.
It also caught this:
- the standup is at 9 -> "standup the"
- the standup is at 10 -> "standup the"
Identical. The second was silently deleted. Dates, times, amounts, "sheet 1" and "sheet 2" — short tokens are frequently the entire difference between two facts, and the signature threw away precisely those.
Every test passed, because every test case happened to differ by a word as well as a number. It surfaced only when the briefing was benchmarked at increasing store sizes and the output stopped growing when it obviously should have. The signature is now close to the literal line. The regression test uses two facts differing only by the number — and was itself checked by reintroducing the old code to confirm the test fails.
Helix is free, runs on your own Windows PC, and asks before it does anything it cannot undo.
Download Helix