Give Claude Code a specific instruction and you get a focused result. I've watched the opposite happen enough times in ChatGPT and Gemini — same kind of task, same level of specificity, noticeably more drift — that for a while I chalked it up to a model difference. Better model, better discipline.
That's not it. Correction, because getting this wrong matters: that discipline is the scaffolding, not the intelligence. The CLAUDE.md file it reads before touching anything, the permission gate between "the agent proposed this" and "the agent did this," the diff it shows you instead of silently committing — that's what narrows the model's behavior down to something focused. Swap in a weaker harness around the same class of model and the vagueness comes back.
A Real Problem, Aimed At Correctly
Which is exactly why Boffin caught my attention on Hacker News this week — a "staff-engineer layer" that injects architectural constraints per edit, so an agent doesn't wander across a module boundary it shouldn't touch. I have to salute whoever built this. They're pointed at a real failure mode, and they're pointed at it the right way: an agent making architectural calls edit by edit, with nothing structural stopping it, will eventually make a bad one. That's true no matter which model is doing the editing.
Where I land differently is on where that discipline should live.
Constraints Are Code, or They're Nothing
Here's what actually holds when you're running agents against a real, changing codebase. Your file structure enforces boundaries — if the agent can import across a line you didn't want crossed, that's a structure problem, not an agent problem. Your tests catch violations the moment they happen; red means revert, and you don't need a layer to "route" architectural intent when a failing test already says exactly what broke. Your linter is mandatory, not aspirational — it doesn't negotiate with the agent any more than it negotiates with you. Your types do the heavy lifting a paragraph of prose can't: fewer ways to pass the wrong thing to the wrong function in the first place.
You don't build a staff-engineer layer for humans. You build a codebase where the wrong move is hard to execute in the first place.
None of that is theoretical for me — I run agents against production systems daily. The ones that behave are the ones working inside structure that rejects a bad edit mechanically, not the ones being reminded, edit by edit, what the rules are.
The Layer You Already Have
Here's the piece Boffin's pitch skips, and the reason my own experience with it differs from what someone running raw API calls to a model would report: a good chunk of "per-edit architectural reminder" is already the harness's job, not a bolt-on layer's. Claude Code reads your standing rules before it acts, shows you the diff, asks before it commits to something irreversible. That's scaffolding doing exactly what Boffin is trying to do from outside — except it's already inside, already running, already free.
I've made this argument before about a different layer of the same stack: the deterministic parts of your system — structure, tests, rules, the harness itself — are what make the probabilistic parts trustworthy enough to build on. Boffin is a second, external attempt at that same deterministic layer, built for a world where the harness underneath doesn't already provide it.
That's not nothing. If you're running agents through a harness that doesn't read a standing architecture doc, doesn't gate irreversible actions, doesn't show you a diff before committing — a tool like Boffin is a legitimate way to bolt that discipline on from outside. The authors picked the right problem. For anyone already inside a harness built to solve it, the fix was already running before Boffin arrived.
— J.P. Howlett
Related:
- Three Tiers — the deterministic-constrains-probabilistic argument this piece applies to a harness instead of a codebase.
- If You're Measuring AI in Percent, You're Not There Yet — the scaffolding concept this piece is named after, applied here to architecture instead of memory.
Sources