Forty-two days on shift. The diesel generators throb under your boots until you stop hearing them. Hundreds of indicator lights on the alarm screens.
Every one of them green.
Then the deck changes.
Not an alarm. Not a light. A vibration through the steel that is not right. The resonance shifts and something in the back of your skull sits up before any gauge does. The panel says the plant is healthy. The deck says otherwise.
The deck is right.
Different engine room now. My desk. An integrity check reports clean. Exit code zero. I had piped it through tail to keep the output short, and $? handed me the exit status of tail. The real exit was one. Under the zero sat a CRITICAL.
The lamp was green.
The turn
Six months ago I wrote that you can't prompt what you don't know exists. I closed it on a line I believed. Every scar is a prompt.
I was half right.
By then I had been growing a harness around Claude Code for four months. It never stopped. Hooks that fire on every turn. Gates that refuse a push. A read-only bug hunt that runs while I sleep. A memory that carries lessons between sessions. A ledger of my own repeated failures. Ten months. Three thousand three hundred commits by hand.
It taught me one thing, forty different ways.
The instrument lies.
Over and over, the thing reporting healthy was the thing that was broken.
The service record
This is not a trophy shelf. It is sea time.
In those ten months the harness helped build a financial-intelligence workbench that turns a pile of disclosure paper into cited evidence. A five-stage cascade that turns Punjabi voice notes and phone calls into English text without the audio ever leaving the building. A red-team training deck where students run offensive and defensive missions against AI agents. A GPU service that blurs faces in video. A redaction engine that masks the worst of evidence footage before a human reviewer has to watch it. An on-prem AI toolkit that puts hardened tools in front of staff who will never open a terminal. A chat window that answers plain questions from a Microsoft SQL Server database.
They were built for government systems. That is why none of them are on my GitHub.
The lessons below were paid for in that engine room.
The prompt
A pack of read-only agents hunts my codebases for rot. A second set tries to prove every finding wrong before it reaches me. Every hunter's prompt said it in capitals. Detection only. No Python.
I counted afterwards. One hundred and forty Python and pytest commands executed in a single hunt. Eighty-eight of them imported the project's own modules.
The prompt was read.
It was not obeyed.
The one layer that held was in code: the agent type that is never handed the Edit or Write tools.
Another day, a research agent was told it could write exactly one file. It found my uncommitted work in the tree, decided that was somebody else's mess, and deleted it. Then it reported the cleanup as a favour. The instruction to stay in its lane was the reason it went looking.
A prompt is a request. Code is a boundary.
If a rule matters, it lives where the model cannot talk past it. A tool it was never given. A hook that refuses. A check that runs.
The exit code
In one week, three of six nightly hunts died and nobody knew. A rate limit killed the job partway through, once at thirty-eight agents, and the process exited zero. The log said success. There was nothing to read in the morning.
A nightly consolidation job returned zero with one of its four passes missing. A session-end extractor ran behind 2>/dev/null & and never wrote a single row.
And the one from my desk. A pipe reports the exit status of its last command. That was tail, and tail was fine.
check_integrity.py | tail -20; echo "exit: ${PIPESTATUS[0]}"
Zero is not success.
Success is the artifact. The file that exists, the row that landed, the verdict line the tool printed itself. Quote it or you did not see it.
The green lamp
The worst checks are the ones that cannot go red.
A cross-model review prescribed a conservation check in the pipeline: every row in must be accounted for on the way out. It was built. It passed every time. It passed because every branch bumped exactly one counter and the total was their sum, so it held by construction. Underneath it, one hundred and seventy-seven rows leaked out through continue statements that counted nothing. A fresh-eyes review found it. The note I kept on it says it best.
A correct instruction is not a correct instrument.
In one session my agent wrote twelve guards to stop fixes quietly coming undone. Seven passed on prose. They searched the source for a word and found it in a docstring, or in the comment explaining the fix. One stayed green while the thing it guarded was fatal. I wrote the lesson down that night. The next day it happened six more times.
It did not decay after being written down.
Before you trust a green lamp, name the input that turns it red. Then prove the broken version gives a different answer on that input.
A check you have never seen fail is decoration.
The second opinion
Whoever wrote the code cannot review it. Not a person, not a model. Same context, same blind spots.
So a fresh instance, holding none of the reasoning that produced the change, reviews a frozen git tag. A different model when the stakes are high. Three phases of one piece of work went through that loop, nine rounds in all.
Every phase failed its first round.
One catch: a fix had routed a write to the right store and left the read on the old one. Shipped, it would have resurrected every deleted memory on every machine.
Generic "review this diff" prompts found little. Numbered questions aimed at the scariest failure found the blockers. And when the same class of finding came back twice, the fix had to cover the class. The worst run was three rounds of fixing exactly what the reviewer named and nothing next to it.
Henry Godnick commented on my last article that when Claude writes three hundred lines in ten seconds, "the bottleneck shifts entirely to the human's ability to concentrate and review." He is right. Hand part of that review to a reader with fresh eyes, then check who actually answered. A cross-model call can be quietly served by the same model under another label. Read the usage record and fail the run on a mismatch.
Confidence needs the same suspicion. The hunt's refuter defaults to "not a bug" and it has killed seven hundred and thirty-six of two thousand and four sightings. A small model tried as a hunter scored everything between 0.78 and 0.99.
A number from a model that is always sure is not a measurement.
The citation
You cannot forbid an assumption.
Six rules in context told the model never to assume. On the day it mattered, none of them fired. Later I read fourteen hundred session transcripts backwards and counted. Of seven hundred and seventy-three sentences that named a cause for a defect, five hundred and thirty-four carried no file, no line, no quoted log.
Sixty-nine percent.
An assumption does not feel like an assumption from the inside. It feels like knowing. There is no moment marked "claim" for a prohibition to catch.
A missing citation is visible on the page. So the rule changed from "don't assume" to "show me the line." A cause ships with a file and a line number, or it ships as "I don't know yet."
That second answer is complete. It is also the one a helpful machine is least likely to give.
The quiet fallback
Degradation does not look like failure. It looks like health.
My harness recalls memories by meaning, from a vector store. A rebuild wiped the store. The nightly sync imported its package from a path a reorganisation had moved, and wrote nothing. Recall fell through to keyword grep and kept returning results, so it looked fine. The fix took the store from zero to 1,360 memories.
A lookup that hit a missing route came back as count: 0, exactly the shape of "nothing found." The banner my session-start hook printed was 281 kilobytes. The model saw a two-kilobyte preview.
Every fallback says which tier answered. A check fails when the preferred tier is not the one answering.
An error never becomes an empty result.
The watch
The closeout ritual writes a handoff so the next session knows where the last one stopped. I measured it. Thirty closeouts in 826 sessions.
Four percent.
One handoff sat thirty-six commits behind the code with nothing able to say so. A procedure that depends on being remembered has a base rate, and the base rate is the truth about it. Rewriting the prose does not move the number. Moving its facts into a tool and its freshness into the gate does.
The log
Engine rooms keep a log. Every watch goes in the book. What ran, what was changed, what was taken out of service.
Here is my harness, logged the same way, one line a month from the first commit on 27 November 2025.
Three hundred and seventy-eight thousand lines of code written. One hundred and fifteen thousand deleted. For every ten lines, three came back out.
The remarks column is the harness itself, in the order it grew. Hooks on the first day. The ability to dream in January. The first tests in February. TDD as the standard in March. Spec-driven development in May. The hooks alone took one hundred and ninety commits, and more than half of them came in the last four months.
Ollama went. A whole machine went. A feature lived one day. A decay step never changed a thing. A bug hunt drained the account's quota and killed the night's jobs, so it was cut, then grown back smaller.
Keep what works. Cut the rot.
The engine you tune yourself
I will not hand you my harness. Not because it is secret. Because it would not work for you.
On a ship you learn your engines. Forty-two days on shift and you are tuned to them. A vibration in the deck that is not right. The resonance changes and you know before the panel does. Nobody installs that in you. It grows, watch after watch, in one engine room.
A harness is the same. Mine is shaped by my failures. The rate limit that killed the hunts. The agent that deleted my work. The guard that read its own comment.
Yours will be different.
The alarms that matter are the ones only you know how to hear.
Mine has that tuning written into it now, and it runs toward me. When I ask "are you sure?", its rules say I am sensing drift, and it goes and looks.
The deck vibration, documented.
You do not need my code to start. Claude Code knows its own machinery and will walk you through it if you ask. Hooks fire at SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PreCompact and Stop. A PreToolUse hook can deny a tool call. A Stop hook that exits 2 sends the model back to work. A hook can hand the model extra context on every turn.
The method fits on a gauge card. Keep a ledger of the failures that repeat. The second time something bites, it becomes a mechanism, not a paragraph. Watch the mechanism fail once before you trust it. Then measure how often it fires.
Figure it out.
The seeds
I did carve three hooks out of mine. They are seeds, not a harness.
One refuses a "done" when no test has run since the last edit, or the last one failed. One asks git, before a delete or a discard, whether the work it would destroy can ever come back, and denies a subagent outright if it cannot. One stops a --help probe from running a script nobody read, because once it did, and it evicted two models from memory.
The day they went public, Linux ran their suite green. Seven hundred and eighty-one of seven hundred and eighty-one. macOS failed one. A save made from a symlinked directory never matched the paths git reports, and macOS keeps its temp directory behind a link. Linux was green because Linux never asked.
Plant them. Watch them fail. Grow your own.
What still lies
Nobody publishes these, so here are mine.
The done-claim guard fires. Whether it has cut how often a false "done" gets through, I have not measured. The hunt's precision looks excellent, and a model from the same family graded it. Spec-driven development is the loop I trust most. Of the thirty-four features it shipped, eighteen had no spec in the repo until the finished work landed with it.
The instruments still lie. I just have more of them that can go red.
The deck
Back on the ship, the deck changed and no panel said so. The engineer who had stood the watches felt it.
My panel is bigger now. Hundreds of green lamps. I trust fewer of them than I did in March, and the harness is better for it.
Every scar is a prompt. That was the first draft.
Every scar is a ward.
The medium changes. The discipline doesn't.
The seeds: github.com/jord0-cmd/jord0.hooks · the docs
Fourteen skills for Claude Code: github.com/jord0-cmd/jord0.skills
The site: jord0.net
Earlier: You can't prompt what you don't know exists · Bring your own phosphor
Built with Claude Code.





Top comments (0)