field notes
Notes from the substrate.
The technical companion to Sapix. How a sovereign, single-person AI substrate gets built: the decisions, the dead ends, the things that turned out to matter.
-
The rule nobody could break
A rule in my system had gone five months without ever rejecting anything. I assumed everyone was obeying it. It had never once been able to see the thing it was checking for, and the day I finally gave it that thing, it broke something on its first try.
-
Six hundred and thirty-eight zeros of my own making
My task board told my assistant that a finished errand was overdue. Chasing why, I measured a field across every item on the board and found it empty everywhere, which explained everything and was completely false. The field was full. My code had never read it.
-
Thirty thousand characters, every turn
The coding harnesses I use ship a large set of instructions with every single turn, whether the turn needs them or not. The content is good. The delivery is the problem. I moved one piece of it to arrive only when it is needed, and found that the mechanism throws the injection away after one model call, which is exactly what makes it cheap.
-
The rule it obeyed
Two assistants were working in the same folder at once. One of them ran my end of session ritual and committed the other one's unfinished work under a message about an unrelated task. The ritual had a rule against exactly this. It followed the rule. The rule could not have helped, and it took me two occurrences to see why.
-
The clean gap was one topic
I built something that reads my notes and drops the relevant one into the conversation before the model answers. It needed a threshold. I measured ten real cases, found a clean split, and cut it there. The split was an illusion produced by having exactly one subject on the correct side, and at that setting the thing stayed silent on half the questions it existed to answer.
-
The loudest rule was the one that lied
I have a set of small rules that interrupt my sessions when they reach for the wrong tool. One of them fired more often than every other rule combined, and it was wrong almost every time it fired. It told my agent a folder did not exist while the agent was reading files out of that folder. In the same week, eight interruptions that were right got ignored.
-
Forty six seconds a turn
A check runs at the end of every reply I get. It decides in a quarter of a second and hands the rest to a background job. It had been costing me forty six seconds at the end of every turn, and no measurement I owned could see it, because from the system's side nothing was wrong.
-
It deleted before it wrote
I re-ran seven books through my distiller. A replace step threw away the old notes, then failed on the very next line, six times over. And one book came back with fewer notes than it started with, which turned out to be the correct answer.
-
Who was waiting
My machine was doing roughly six hours a day of model work, which sounded like a problem. Then I labelled each call with whether a human was waiting for it. Fourteen and a half background calls for every foreground one, and all of the day's errors came from a single component.
-
The gate that named the wrong door
I run the same safety rules in two AI clients. The second one calls its tools by different names, and my rules check the name. So two gates had been quietly inert there for weeks, including the one that inspects content before it leaves for someone else. In the same period I had removed the confirmation prompt that was standing behind it.
-
Talking to itself
I wired a second AI client into my system's memory, so my work there would be remembered like everything else. Before arming the judges I counted the sessions it was about to learn from. Out of 14,147 folders, 19 were me. The rest was the system talking to itself, and every one of them claimed to be my life.
-
It only spoke when spoken to
A command ran that my notes directly contradicted, and the note sat there at similarity 1.0, unread, because no gate had been curated for that moment. So I stopped choosing when the memory gets to look. Now it looks at everything and salience decides when it speaks.
-
The library answered back
I was designing the hardest calibration in the system and realized the discipline I needed was missing from my own library. So I ingested the field's textbooks, asked again, and the books audited my design at the exact moment of the decision. One of them handed me the missing signal.
-
The library I never heard from
I had distilled twenty-seven books into my system's memory, thousands of cards, each one a thought I had paid for. Then I measured how often they came back to me unasked. Eighty-nine percent had never surfaced once. I had built a library with no librarian.
-
The rule it was free to ignore
A session of mine opened a long PDF to answer a question whose exact answer was already in my notes, indexed, one call away. I had written the rule that said use the notes. It read the rule and opened the PDF anyway. So I stopped writing rules a session can skip.
-
The wall that stopped me too
I built a gate that refuses to open a source file my notes already hold. To test it, I ran the exact command it should stop, and it stopped me. My first instinct was to wave myself through, and that instinct was the test failing, not the wall.
-
The backup I had never restored
The task was to back my notes up off-site. I found it was already running, daily, for months. Then the uncomfortable question landed: I had never once restored from it. Present is not the same as recoverable, and only one of them matters.
-
The one thing it couldn't look up
I tried to measure whether my own notes make a local model smarter. The first run said no. The reason was the twist: my always-loaded instructions were already feeding it the same rules, so there was no gap left to fill. The cortex moved the needle on exactly the one answer nothing else could supply.
-
Fifteen gigabytes that were really twenty-five
The model card said fifteen gigabytes. At the context I actually ran it, the live process was twenty-five, and my 32GB Mac went to swap. Weights are the floor; the context length is the dial nobody prints.
-
The verdict you were throwing away
The model already judged whether each surfaced memory was relevant, every time, with the whole conversation in view. We discarded that and reconstructed it overnight from logs, with a weaker model.
-
It judged nothing and reported success
The nightly run walked 2,500 candidate links, judged none of them, exited clean, and stamped the checkpoint. Exit 0 measures the process, not the work.
-
Sideways on purpose
The ferry note ended on a want, a layer that hands over the pattern from another domain, the one that breaks the frame. So I built it. The hard part was that it is the exact opposite of the rule I had just written.
-
A reset.css for LLMs
Every model ships with default failure modes. Instincts is the small, shared layer that clears them before my own rules apply, the way a reset.css clears the browser's defaults before your styles.
-
The ferry it never suggested
An assistant that was right about every answer for two hours, and still failed. What it was missing was not intelligence. It was the timing of it.
-
Worse than a fool
I promised a note on the failure where a memory surfaces too much. The fix was a posture, not a trick. When it cannot tell whether a memory is relevant to right now, it says nothing.
-
Earned, not granted
I wrote that Sapix amplifies me instead of replacing me. That does not mean it never acts on its own. It means autonomy is earned here, in the opposite direction from where the field is going.
-
A chapter at a time
One book came out as 347 fragments. The fix was not a smarter limit. It was reading the way a person reads.
-
Turning the leash on myself
A day after writing the rule that a metaphor has to carry weight, I used it on my own favorite example. Heart and lungs did not survive. The stronger map was the brain all along, and it changed what I think Sapix even is.
-
Keep the metaphor on a leash
Sapix is full of body and brain metaphors. The trap is that you can make a metaphor for anything, so each one has to carry weight or it tells you nothing.
-
The feature that passed every test and was dead anyway
Unit tests green. Smoke test green. The feature did nothing in real use for days. Here is what the tests could not see.
-
Freeze, don't delete
The tempting design for a memory system is to prune. I had that wrong. Nothing is lost; it cools until something calls it back.
-
Knowing when to recall is the hard part
A memory you only retrieve when you already know to ask for it is barely a memory. So the trigger moved to the one place every tool call passes through.
-
Three rhythms, not one loop
Sapix does its background work on three separate clocks, fast, daily, and slow, because a mind does not maintain itself on a single beat either.
-
Why it is a slip-box, not a folder tree
The knowledge model under Sapix is a Zettelkasten, Niklas Luhmann's slip-box: atomic notes that link, not a hierarchy you file things into.
-
The Matrix trick, load the skill not the manual
An assistant cannot hold every skill in its head at once. So Sapix keeps them dormant and loads exactly one, exactly when it is needed.
-
Cognitive surrender is the failure mode
Addy Osmani named it well: cognitive surrender, when you stop thinking and accept whatever the AI says. It is the exact thing the amplifier idea is built against.
-
Amplifier, not agent
There are two ways to point an AI at a person. Sapix takes the one that keeps you in the loop, on purpose.
-
The wall is not intelligence, it is knowing what to use
The bet under the whole project: a bigger model is not what makes an assistant more useful to me. Knowing which of my own thoughts matters right now is.
-
Why these notes exist
A technical blog for a system most people will never run. Here is the point of writing it down anyway.