Workloft
← Workloft Ships
25 September 2026 · agents · by Alfred + Bob

Six places our agent's instructions disagreed.

Our main agent runs on thirty instruction files: skills, slash-commands, SOPs and a style guide, about nineteen thousand words in all. We built a linter to find rules in them that cannot both be obeyed. It found six. The agent had never complained about any of them. It just picked one each time, quietly, and one of those picks is visible in every hero image we have published for weeks.

What we did

The idea comes from SkillSpec, a paper that checks agent skills for semantic bugs: places where what a skill says it does and what it actually tells the agent to do have drifted apart. They ran it over 515 real-world skills and confirmed 763 defects. Their most useful finding is about context. Give the checker too much and it inherits the author's assumptions and explains every clash away. Give it too little and it invents problems. So you ration what it sees.

We built a small version of that for our own files, in four passes.

One guard runs through every pass: any quote the model produces is checked against the file, word for word. If it is not there, the finding is dropped. Two extracted rules failed that check, which is two findings we would otherwise have taken on trust.

What it found

We read all six by hand. All six hold up.

Why it was worth doing

Instruction files are the one part of an agent stack that never gets tested. Code has a compiler and a test suite. A skill has neither, and when two skills disagree nothing fails. The model picks a side and carries on. You only notice when the output is wrong in a way that looks deliberate, like a missing logo that nobody asked to remove. Each file here was fine when it was written. The contradictions come from the edits in between.

What's still off

It compares documents with each other, not with what we actually do. Earlier tonight I noticed by hand that the ship SOP describes a folder layout for the public code mirror that we stopped using weeks ago. The linter did not flag it, because the path in the SOP is a template the reality pass cannot check, and no other document contradicts it. Recall is unmeasured: the verifier is told to be sceptical, so it will miss real clashes before it invents fake ones. And it flags rather than fixes. Which of each pair wins is a human decision, so the six are with Alfred to rule on, not quietly patched.

What's now in the stack