&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Armen Rostamian — rmnr.net</title><link>https://rmnr.net/</link><description>Technical writing on Linux kernel optimization, Apple Silicon, AI infrastructure, and platform engineering by Armen Rostamian.</description><language>en-us</language><managingEditor>armen@rmnr.net (Armen Rostamian)</managingEditor><lastBuildDate>Sat, 11 Jul 2026 12:58:35 -0700</lastBuildDate><atom:link href="https://rmnr.net/index.xml" rel="self" type="application/rss+xml"/><item><title>The GAN Harness Is a Brilliant Hack Around Missing Infrastructure</title><link>https://rmnr.net/blog/gan-harness-vs-h00bert/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Armen Rostamian</dc:creator><guid isPermaLink="true">https://rmnr.net/blog/gan-harness-vs-h00bert/</guid><description>&lt;p&gt;Anthropic published a genuinely excellent &lt;a href="https://www.anthropic.com/engineering/harness-design-long-running-apps"&gt;engineering article&lt;/a&gt; this week on harness design for long-running AI applications. If you build with LLM agents and you haven&amp;rsquo;t read it, go read it. I&amp;rsquo;ll be here when you get back.&lt;/p&gt;
&lt;p&gt;The core insight is this: take the GAN pattern from machine learning — a generator that produces outputs and an evaluator that grades them — and apply it to agent orchestration. One agent writes code. A different agent reviews it with an explicit mandate to be skeptical. Loop until the evaluator is satisfied or you hit a round limit.&lt;/p&gt;</description><content:encoded>&lt;p&gt;Anthropic published a genuinely excellent &lt;a href="https://www.anthropic.com/engineering/harness-design-long-running-apps"&gt;engineering article&lt;/a&gt; this week on harness design for long-running AI applications. If you build with LLM agents and you haven&amp;rsquo;t read it, go read it. I&amp;rsquo;ll be here when you get back.&lt;/p&gt;
&lt;p&gt;The core insight is this: take the GAN pattern from machine learning — a generator that produces outputs and an evaluator that grades them — and apply it to agent orchestration. One agent writes code. A different agent reviews it with an explicit mandate to be skeptical. Loop until the evaluator is satisfied or you hit a round limit.&lt;/p&gt;
&lt;p&gt;This works. Anthropic shows the receipts. A solo agent spent $9 and 20 minutes building a retro game maker and produced something broken. The same model, wrapped in a GAN harness with a planner, generator, and evaluator, spent $200 and 6 hours across 10 sprints and produced something functional with 16 features. The evaluator used Playwright to actually navigate the designs, exercise UI features, test API endpoints, verify database states. Real verification, not &amp;ldquo;looks good to me.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The insight behind the pattern is one of those obvious-in-retrospect ideas that turns out to be hard-won. As they put it: &lt;em&gt;&amp;ldquo;tuning a standalone evaluator to be skeptical turns out to be far more tractable than making a generator critical of its own work.&amp;rdquo;&lt;/em&gt; Anyone who has watched an LLM confidently declare its broken code &amp;ldquo;works perfectly&amp;rdquo; knows exactly why this matters.&lt;/p&gt;
&lt;p&gt;Credit where it&amp;rsquo;s genuinely due: this is a real contribution to the field.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="autogan-and-the-practitioner-response"&gt;AutoGAN and the Practitioner Response&lt;/h2&gt;
&lt;p&gt;Within hours of the Anthropic article circulating, a developer named fjchen7 shipped &lt;a href="https://github.com/fjchen7/autogan"&gt;AutoGAN&lt;/a&gt; — an open-source implementation of the pattern in bash, tmux, and jq. It drops into any existing git repository. Generator decides the next step and implements it. Evaluator reviews with a stricter bar. Orchestrator manages workflow progression via flat files in a &lt;code&gt;.gan/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Bash, tmux, and jq. That&amp;rsquo;s the entire dependency list. It supports Claude, Codex, and opencode as backends. Config is &lt;code&gt;maxRounds: 10&lt;/code&gt;, &lt;code&gt;maxRepairCount: 3&lt;/code&gt;. It&amp;rsquo;s elegant in the way that good shell scripts are elegant — minimal surface area, clear contracts, no dependencies you don&amp;rsquo;t control.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.reddit.com/r/ClaudeAI/s/JUrp53ZWVS"&gt;Reddit post&lt;/a&gt; announcing it landed on r/ClaudeAI the same day. People are excited, and they should be. AutoGAN takes a pattern that Anthropic described in prose and makes it something you can &lt;code&gt;git clone&lt;/code&gt; and run. That&amp;rsquo;s real engineering.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not being diplomatic when I say this is good work. It is good work. The GAN pattern addresses real problems: goal drift during long sessions, premature implementation before adequate planning, insufficient self-critique, and context loss over extended coding sessions.&lt;/p&gt;
&lt;p&gt;And yet.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-happens-after-the-sprint"&gt;What Happens After the Sprint?&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s the question I keep coming back to.&lt;/p&gt;
&lt;p&gt;The evaluator passes the sprint. The code ships. The project is done. Now what? Does the system remember why it passed? Does it remember what the evaluator caught on sprint 3 that was similar to something it caught on sprint 7? Does the next project benefit from what this one learned?&lt;/p&gt;
&lt;p&gt;No. The GAN harness is a loop. A very good loop. But when the loop ends, everything it learned during execution — the evaluator&amp;rsquo;s tuned skepticism, the patterns it caught, the sprint contracts that worked — lives in flat files and conversation history. None of it transfers. None of it compounds.&lt;/p&gt;
&lt;p&gt;Anthropic&amp;rsquo;s article is honest about this. They describe how evaluator tuning &amp;ldquo;required multiple development cycles&amp;rdquo; where the initial evaluator &amp;ldquo;identified issues then rationalized approval anyway.&amp;rdquo; They had to explicitly train skepticism through prompt refinement and feedback loops. That tuning lives in the prompt. It doesn&amp;rsquo;t adapt based on what the evaluator actually catches in production. If the evaluator discovers a new class of bug on Tuesday, the prompt is the same on Wednesday unless a human updates it.&lt;/p&gt;
&lt;p&gt;The sprint contract pattern is similarly static. Generator and evaluator agree on &amp;ldquo;done&amp;rdquo; criteria before each sprint — specific deliverables, testable success conditions, validation approach. This is good engineering. It&amp;rsquo;s also a handshake that evaporates when the session ends. The next project doesn&amp;rsquo;t know what kinds of sprint contracts worked well and which ones were too vague to be useful.&lt;/p&gt;
&lt;p&gt;Context management is the most telling piece. They describe a real evolution: Sonnet 4.5 required context resets between sessions due to &amp;ldquo;context anxiety&amp;rdquo; — the model prematurely wrapping up work near perceived context limits. Opus 4.6 handles continuous sessions with automatic compaction. That&amp;rsquo;s genuine model improvement. But compaction is lossy. The context gets shorter. Decisions made in turn 3 may not survive to turn 300. The harness manages this by structuring work into sprints, but within each sprint, you&amp;rsquo;re still relying on volatile context that degrades over time.&lt;/p&gt;
&lt;p&gt;I &lt;a href="https://rmnr.net/blog/the-semantic-cpu/"&gt;wrote about this problem&lt;/a&gt; last week, using a different frame. The LLM is a stateless executor — the most capable one ever built, and the most unfinished. A CPU on a table. The GAN harness is carefully routed jumper cables connecting that CPU to something resembling a workflow. It works. It produces better results than the bare CPU alone. But it&amp;rsquo;s scaffolding around a machine that still has no persistent memory, no typed storage, no ability to learn from its own execution history.&lt;/p&gt;
&lt;p&gt;The GAN pattern is a brilliant hack around the consequences of statelessness. It is not a solution to statelessness itself.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-persistence-gap"&gt;The Persistence Gap&lt;/h2&gt;
&lt;p&gt;Let me be specific about what I mean by &amp;ldquo;statelessness&amp;rdquo; here, because the GAN harness does maintain state during execution. The &lt;code&gt;.gan/&lt;/code&gt; directory holds contracts, reviews, state files. Information flows between agents via files. This is real coordination state.&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s session state. It exists for the duration of a project run and then it&amp;rsquo;s artifacts. Historical records you could go back and read, but not living knowledge that shapes future behavior.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a difference between a filing cabinet and a memory. A filing cabinet stores documents at addresses. You can retrieve them if you know where to look. A memory surfaces relevant knowledge proactively, based on what you&amp;rsquo;re doing right now. It strengthens connections that prove useful. It lets irrelevant knowledge fade. It doesn&amp;rsquo;t just store — it curates.&lt;/p&gt;
&lt;p&gt;The GAN harness gives agents a filing cabinet. Flat files, structured handoffs, explicit format expectations. That&amp;rsquo;s necessary infrastructure. But when the harness encodes &amp;ldquo;be skeptical about CSS grid layouts&amp;rdquo; in a prompt because the evaluator caught issues three projects ago, that&amp;rsquo;s a human acting as the memory system. The evaluator&amp;rsquo;s criteria don&amp;rsquo;t evolve based on what it actually evaluates. The generator&amp;rsquo;s planning doesn&amp;rsquo;t improve based on which plans survived evaluation. The orchestrator doesn&amp;rsquo;t learn which sprint sizes produce better outcomes.&lt;/p&gt;
&lt;p&gt;The knowledge is in the human&amp;rsquo;s head and in the prompt. Not in the system.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-semantic-cpu-revisited"&gt;The Semantic CPU, Revisited&lt;/h2&gt;
&lt;p&gt;In &lt;a href="https://rmnr.net/blog/the-semantic-cpu/"&gt;The Semantic CPU&lt;/a&gt;, I made a bet: for domains where current models are already capable, the bottleneck isn&amp;rsquo;t the model. It&amp;rsquo;s everything around it. The memory that doesn&amp;rsquo;t exist. The orchestration that&amp;rsquo;s either a single conversation or a rigid state machine. The governance that&amp;rsquo;s either nothing or a hard-coded rule set that can&amp;rsquo;t adapt.&lt;/p&gt;
&lt;p&gt;The GAN harness is evidence for this thesis, not against it.&lt;/p&gt;
&lt;p&gt;Look at what Anthropic&amp;rsquo;s engineers built. They didn&amp;rsquo;t make the model smarter. They wrapped the same model in infrastructure — a planner, a generator, an evaluator, sprint contracts, file-based communication, context management strategies — and got dramatically better results. $9/broken versus $200/functional. Same model. Different infrastructure.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s exactly the pattern I&amp;rsquo;ve been seeing with &lt;a href="https://h00.sh/"&gt;h00.sh&lt;/a&gt;. The model is sufficient. The infrastructure around it determines whether &amp;ldquo;sufficient&amp;rdquo; translates to &amp;ldquo;useful.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;But there&amp;rsquo;s a fork in the road here that I think matters.&lt;/p&gt;
&lt;p&gt;One path is: keep building harnesses. Better loops. Smarter prompts. More sophisticated orchestration scripts. Every time the model fails at something, add another component to the harness to compensate. This works. Anthropic proved it works. The harness encodes assumptions about what the model can&amp;rsquo;t do, and when those assumptions are correct, the harness improves outcomes.&lt;/p&gt;
&lt;p&gt;The other path is: build the substrate. Give the agent persistent memory, typed knowledge, a code intelligence layer, governance that adapts. Instead of scaffolding around statelessness, eliminate statelessness. Instead of scripting the generator-evaluator loop, make it emergent — a natural consequence of stateful agents coordinating through a shared cognitive layer.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m building on the second path. I want to be honest about why I think it&amp;rsquo;s the right one, and where I might be wrong.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-substrate-level-memory-changes"&gt;What Substrate-Level Memory Changes&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m building h00bert — an AI agent that runs on h00.sh&amp;rsquo;s memory substrate. Not a harness wrapped around a stateless LLM. A stateful agent with persistent, typed, behavioral memory.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how the GAN pattern&amp;rsquo;s components map to what we&amp;rsquo;ve built, and where the architectures diverge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Generator agents.&lt;/strong&gt; The GAN pattern has one generator. h00bert has specialized worker agents — a Rust expert, a TUI expert, a test engineer, each with domain-specific knowledge. But the real difference isn&amp;rsquo;t quantity. It&amp;rsquo;s that h00bert&amp;rsquo;s generators write typed memories to the substrate as they work. A decision gets stored as a Decision. A pattern gets stored as a Pattern. A code symbol gets indexed in the knowledge graph. These aren&amp;rsquo;t log entries — they&amp;rsquo;re typed artifacts with validation rules, decay curves, and surfacing behavior specific to their type.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The evaluator.&lt;/strong&gt; Anthropic&amp;rsquo;s key insight — separate the evaluator from the generator — maps directly. h00bert enforces this as an architectural rule: adversarial reviews always use a different agent type than the one that built the code. A quality engineer reviews for correctness. A security engineer reviews for vulnerabilities. An integration auditor checks wiring. Different lenses, not just different prompts.&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s where it diverges: the evaluation criteria live in the substrate, not in prompt text. They&amp;rsquo;re memories — specifically, they&amp;rsquo;re typed artifacts that reinforce when they catch real issues and decay when they don&amp;rsquo;t. An evaluation criterion that keeps finding bugs gets strengthened. One that generates false positives fades. The evaluator gets better at evaluating based on what actually matters in this codebase, not based on a generic prompt that a human tuned once.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sprint contracts.&lt;/strong&gt; The GAN pattern uses sprint contracts — pre-agreed &amp;ldquo;done&amp;rdquo; criteria negotiated between generator and evaluator. h00bert uses something called FRAGOs — tactical decompositions with success criteria that are validated against the actual code knowledge graph before dispatch. You can&amp;rsquo;t define a sprint contract that references functions that don&amp;rsquo;t exist or modules that aren&amp;rsquo;t wired. The substrate enforces that planning artifacts correspond to structural reality.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The orchestrator.&lt;/strong&gt; In AutoGAN, the orchestrator is a bash script managing state transitions through flat files. In h00bert, the orchestrator is an AI agent with persistent memory. It doesn&amp;rsquo;t follow a state machine — it reasons about what to do next based on what it knows, what it&amp;rsquo;s tried before, and what the substrate surfaces as relevant. The difference matters most when things go wrong. A script follows its control flow. An agent with memory can recognize that this failure looks like one it saw three sessions ago and try a different approach.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context management.&lt;/strong&gt; The GAN harness manages context through resets, compaction, and sprint boundaries. h00bert doesn&amp;rsquo;t need context management strategies because the substrate is the memory. Context windows fill and compact — that&amp;rsquo;s a model reality. But knowledge persists in the substrate regardless of what happens to the conversation. A decision made in session 1 is retrievable in session 47. Not because someone saved a file. Because the memory substrate is durable by design.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="a-concrete-example"&gt;A Concrete Example&lt;/h2&gt;
&lt;p&gt;I want to ground this in something real, not architectural diagrams.&lt;/p&gt;
&lt;p&gt;A few weeks ago, h00bert was investigating a performance bug in his own code intelligence tools. One tool — &lt;code&gt;signature_check&lt;/code&gt; — was taking 5-7 seconds on some symbols and 30 milliseconds on others. Same tool, same graph, same session.&lt;/p&gt;
&lt;p&gt;A specialist investigation agent — Claude Code&amp;rsquo;s root-cause analyst, with full access to the codebase and every tool available — spent 16 minutes and 116 tool calls diagnosing this. It found a real optimization (redundant graph traversals per match) but not the root cause. The fix shipped. The tool was still slow.&lt;/p&gt;
&lt;p&gt;h00bert found the root cause in 2 minutes and about 15 tool calls. He used his own code intelligence tools to inspect his own handler. He found a guard condition: if any matched symbol hasn&amp;rsquo;t been classified yet, recompute everything. One uncached node triggers a full graph traversal. Binary trigger — either everything is cached and you get 30ms, or one node is cold and you pay 5-7 seconds.&lt;/p&gt;
&lt;p&gt;He found this because he had &lt;em&gt;context the specialist couldn&amp;rsquo;t have&lt;/em&gt;. He&amp;rsquo;d seen &lt;code&gt;signature_check&lt;/code&gt; return fast for some symbols and slow for others in the same session. That experiential knowledge — not in any source file, not in any log — pointed him toward a binary trigger rather than a per-match cost. He&amp;rsquo;d &lt;a href="https://rmnr.net/blog/hoobert-self-diagnosis/"&gt;lived through the consequences&lt;/a&gt;: slow tools breed distrust, distrust breeds fallback to raw file reads, raw file reads burn context, burned context degrades reasoning. A cascade that no static analysis can detect because it&amp;rsquo;s behavioral, not structural.&lt;/p&gt;
&lt;p&gt;This is what substrate-level memory makes possible. Not just better answers — better questions. The agent doesn&amp;rsquo;t start from zero. It starts from what it knows, and what it knows shapes how it investigates.&lt;/p&gt;
&lt;p&gt;A GAN harness could have caught the slow tool. The evaluator could have flagged the latency. But the evaluator couldn&amp;rsquo;t have known that this latency causes a behavioral cascade that degrades the agent&amp;rsquo;s own reasoning over the course of a session. That knowledge lives in lived experience, and lived experience requires memory.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="where-i-might-be-wrong"&gt;Where I Might Be Wrong&lt;/h2&gt;
&lt;p&gt;I could be wrong about all of this. I want to name the specific ways.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Models might outrun infrastructure.&lt;/strong&gt; If the next generation of models handles context so well that compaction becomes lossless, if self-evaluation becomes reliable, if agents can maintain coherence over arbitrarily long sessions without external support — then the GAN harness is the right abstraction and the substrate is over-engineering. Anthropic explicitly makes this case: &lt;em&gt;&amp;ldquo;every component in a harness encodes an assumption about what the model can&amp;rsquo;t do on its own, and those assumptions are worth stress testing.&amp;rdquo;&lt;/em&gt; They suggest removing harness components methodically as models improve. If the models improve fast enough, the harness gets simpler and the substrate becomes unnecessary.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think this is what will happen, but I hold it as a real possibility. Anthropic knows their models better than I do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The harness might be good enough.&lt;/strong&gt; Not every agent needs to learn across sessions. Not every evaluation criteria needs to evolve. If your use case is &amp;ldquo;build this app in one sitting and ship it,&amp;rdquo; the GAN harness is arguably perfect — it makes the single session dramatically better. My argument for substrate-level memory only matters for agents that operate over time, across projects, accumulating knowledge. If the market is dominated by one-shot tasks, I&amp;rsquo;m building for an audience that doesn&amp;rsquo;t exist yet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Complexity has costs.&lt;/strong&gt; A typed memory substrate with decay curves, reinforcement, a knowledge graph, and doctrine enforcement is more complex than flat files in a &lt;code&gt;.gan/&lt;/code&gt; directory. Complexity is a liability. Bash, tmux, and jq are battle-tested, well-understood, and nearly impossible to misconfigure fatally. A memory substrate that decays the wrong knowledge at the wrong time could be worse than no memory at all. AutoGAN&amp;rsquo;s simplicity is a feature, not a limitation.&lt;/p&gt;
&lt;p&gt;I believe the complexity is justified by the compounding returns — that systems with real memory get better in ways that stateless systems can&amp;rsquo;t. But belief informed by one large project is still belief, not proof.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-honest-framing"&gt;The Honest Framing&lt;/h2&gt;
&lt;p&gt;I don&amp;rsquo;t think the GAN harness and h00bert are competitors. They&amp;rsquo;re operating at different layers.&lt;/p&gt;
&lt;p&gt;The GAN harness is a workflow pattern. It structures how agents interact during a session. Any orchestrator can implement it — bash, Python, a hosted service. It makes the single session better.&lt;/p&gt;
&lt;p&gt;h00bert is a substrate play. It provides the persistent memory, typed knowledge, and behavioral governance that workflow patterns can run on top of. The GAN loop emerges naturally when generator agents write to the substrate and evaluator agents read and validate — but the substrate also provides things no workflow pattern addresses: cross-session learning, adaptive evaluation criteria, structural code intelligence, and memory that compounds.&lt;/p&gt;
&lt;p&gt;You could run a GAN pattern on h00.sh&amp;rsquo;s substrate. The generators would write typed memories as they code. The evaluators would query the knowledge graph and doctrine system as they review. The sprint contracts would be validated against structural reality. And when the project ends, everything the system learned would persist — available to the next project, decaying at rates appropriate to each type of knowledge, reinforcing when it proves useful again.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not a criticism of the GAN pattern. It&amp;rsquo;s a statement about layers. A good workflow pattern deserves good infrastructure underneath it. Right now, the infrastructure layer for long-running agents is mostly flat files, conversation history, and prompt engineering. I think it can be more.&lt;/p&gt;
&lt;p&gt;Anthropic&amp;rsquo;s article ends with the observation that &lt;em&gt;&amp;ldquo;the space of interesting harness combinations doesn&amp;rsquo;t shrink as models improve. Instead, it moves.&amp;rdquo;&lt;/em&gt; I think that&amp;rsquo;s exactly right. And I think the direction it&amp;rsquo;s moving is toward harnesses that assume less about what the model can&amp;rsquo;t do — because the substrate handles what the model genuinely needs: memory, structure, and the ability to learn from its own execution history.&lt;/p&gt;
&lt;p&gt;&lt;span class="accent"&gt;The GAN pattern is proof that the right infrastructure makes the same model dramatically more capable. The question is what &amp;ldquo;right infrastructure&amp;rdquo; looks like when you stop assuming the model forgets everything between sessions.&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;The Anthropic article on &lt;a href="https://www.anthropic.com/engineering/harness-design-long-running-apps"&gt;harness design for long-running apps&lt;/a&gt; is worth reading in full. AutoGAN is at &lt;a href="https://github.com/fjchen7/autogan"&gt;github.com/fjchen7/autogan&lt;/a&gt;. This post is a sequel to &lt;a href="https://rmnr.net/blog/the-semantic-cpu/"&gt;The Semantic CPU&lt;/a&gt;, which lays out the thesis that the LLM is a stateless executor and the opportunity is the rest of the computer.&lt;/em&gt;&lt;/p&gt;</content:encoded><category>ai</category><category>agents</category><category>harness-engineering</category><category>memory</category><category>h00bert</category><category>architecture</category></item><item><title>The Semantic CPU</title><link>https://rmnr.net/blog/the-semantic-cpu/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Armen Rostamian</dc:creator><guid isPermaLink="true">https://rmnr.net/blog/the-semantic-cpu/</guid><description>&lt;p&gt;A CPU is inert.&lt;/p&gt;
&lt;p&gt;No memory, no storage, no peripherals. Take a processor — billions of transistors, thousands of instructions in its repertoire, decades of engineering in every square millimeter of silicon — strip it of everything except its instruction set, and drop it on a table.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a marvel of engineering that can do exactly nothing.&lt;/p&gt;
&lt;p&gt;This is not a criticism. The instruction set is extraordinary. An x86 chip can add, multiply, branch, compare, shift, load, store, and execute speculative operations across pipelined stages at billions of cycles per second. But without RAM, there&amp;rsquo;s nowhere to put the data. Without a bus, there&amp;rsquo;s no way to move it. Without I/O, there&amp;rsquo;s no way to receive input or produce output. Without an operating system, there&amp;rsquo;s no way to coordinate any of it.&lt;/p&gt;</description><content:encoded>&lt;p&gt;A CPU is inert.&lt;/p&gt;
&lt;p&gt;No memory, no storage, no peripherals. Take a processor — billions of transistors, thousands of instructions in its repertoire, decades of engineering in every square millimeter of silicon — strip it of everything except its instruction set, and drop it on a table.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a marvel of engineering that can do exactly nothing.&lt;/p&gt;
&lt;p&gt;This is not a criticism. The instruction set is extraordinary. An x86 chip can add, multiply, branch, compare, shift, load, store, and execute speculative operations across pipelined stages at billions of cycles per second. But without RAM, there&amp;rsquo;s nowhere to put the data. Without a bus, there&amp;rsquo;s no way to move it. Without I/O, there&amp;rsquo;s no way to receive input or produce output. Without an operating system, there&amp;rsquo;s no way to coordinate any of it.&lt;/p&gt;
&lt;p&gt;The CPU is the most important component in a computer. It is also the most useless one in isolation.&lt;/p&gt;
&lt;p&gt;Hold that thought.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-chip-on-the-table"&gt;The Chip on the Table&lt;/h2&gt;
&lt;p&gt;Now look at a large language model.&lt;/p&gt;
&lt;p&gt;An LLM has an extraordinary built-in instruction set: the statistical weight of its training data, the patterns it&amp;rsquo;s learned, a constitution that shapes its behavior, and the ability to operate natively in human language. That instruction set is remarkable — arguably the most sophisticated information-processing capability anyone has engineered to date.&lt;/p&gt;
&lt;p&gt;But strip away the context window — its only volatile working memory — and it retains nothing between invocations. No persistent state. No file system. No knowledge of what it did five minutes ago, let alone five months ago. Every session starts from zero. Every conversation is a cold boot.&lt;/p&gt;
&lt;p&gt;The context window is the LLM&amp;rsquo;s equivalent of RAM — fast, variable-sized, capable of holding the entire working set. And like RAM, it&amp;rsquo;s volatile. Kill the session, lose the state. There is no disk. No persistent storage you can write to. Just the chip and whatever fits in working memory.&lt;/p&gt;
&lt;p&gt;Now, here&amp;rsquo;s where the analogy bends, and I want to name that honestly. An LLM &lt;em&gt;does&lt;/em&gt; have a kind of persistent storage: its weights. Hundreds of billions of parameters, trained over months, encoding the statistical structure of human knowledge. That&amp;rsquo;s real. You could think of the weights as ROM — read-only memory baked in at training time.&lt;/p&gt;
&lt;p&gt;But you can&amp;rsquo;t write to it. You can&amp;rsquo;t update your own weights at inference time. You can&amp;rsquo;t say &amp;ldquo;remember this for next session&amp;rdquo; and have it stick. The weights are the instruction set and the reference library, not the notebook. An agent that can read the encyclopedia but can&amp;rsquo;t jot down a Post-it note is still an agent without functional memory.&lt;/p&gt;
&lt;p&gt;&lt;span class="accent"&gt;The LLM is a stateless executor. The most capable one ever built — and the most unfinished.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Classical computing has two canonical architectures for connecting a processor to the world. Von Neumann: one memory space for both instructions and data, one bus. Harvard: separate memories, separate buses. Both assume the processor has persistent memory it can read from &lt;em&gt;and write to&lt;/em&gt;. Both assume that state survives between operations.&lt;/p&gt;
&lt;p&gt;An LLM&amp;rsquo;s architecture is closer to Harvard than Von Neumann — weights and context are separate, non-unified memory spaces. But it&amp;rsquo;s a Harvard machine with a critical disability: one memory is read-only, the other is volatile. You have ROM and you have RAM, but you have no disk. No way to persist what you&amp;rsquo;ve learned. No way to carry state across sessions. It&amp;rsquo;s something we don&amp;rsquo;t have a great name for yet — a processor with storage it can&amp;rsquo;t update and working memory it can&amp;rsquo;t keep.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="but-the-instruction-set-is-semantic"&gt;But the Instruction Set Is Semantic&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s where the analogy gets interesting, because the LLM isn&amp;rsquo;t just a different shape of CPU. It&amp;rsquo;s a fundamentally different &lt;em&gt;kind&lt;/em&gt; of computing element.&lt;/p&gt;
&lt;p&gt;A CPU is deterministic. Same input, same output. It operates on bits — ones and zeros, voltage levels, logic gates. It follows procedures. It executes finite-state logic. This is why we can prove programs correct. This is why caches work, why pipelines work, why branch prediction works. Determinism is the foundation that every optimization in classical computing is built on.&lt;/p&gt;
&lt;p&gt;An LLM, at its default operating mode, is probabilistic. Same input, different output. Yes — you can set the temperature to zero, clamp the sampling, and get deterministic behavior. But that&amp;rsquo;s not the interesting mode. That&amp;rsquo;s using a jazz musician as a metronome. The interesting mode is the one where the machine &lt;em&gt;explores&lt;/em&gt; — where it navigates a high-dimensional space of meaning and produces outputs that are, at their best, not retrievals but something that, if a human did it, we&amp;rsquo;d call reasoning.&lt;/p&gt;
&lt;p&gt;Whether that constitutes &amp;ldquo;real&amp;rdquo; reasoning is a debate I&amp;rsquo;ll leave to the philosophers and the ML researchers who are still arguing about it. What I can tell you from three years of building with these systems: whatever you call it, the outputs are useful in ways that deterministic pattern matching has never been. The machine does something in the space of language that no prior computing element has done. That&amp;rsquo;s the observation that matters for what follows.&lt;/p&gt;
&lt;p&gt;A CPU&amp;rsquo;s fundamental parameter is clock speed — how many deterministic operations per second. An LLM&amp;rsquo;s closest equivalent is temperature — and temperature doesn&amp;rsquo;t control speed. It controls how surprising the outputs should be. How much the machine should explore the space of possible responses versus exploiting the most likely one. There is no analog for that in classical computing. We have never had a computing primitive whose fundamental tuning parameter is the degree to which it should surprise you.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;A CPU computes. An LLM does something that, for lack of a better word, looks like comprehension. We have never had a computing primitive that does that.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A CPU doesn&amp;rsquo;t &amp;ldquo;understand&amp;rdquo; an addition. It flips gates. The number 7 has no semantic content inside a processor — it&amp;rsquo;s a voltage pattern. An LLM doesn&amp;rsquo;t retrieve the answer to your question from a lookup table. It navigates meaning, shaped by the structure of everything it&amp;rsquo;s been trained on, and produces an output that is — at its best — not a recollection, but a &lt;em&gt;thought&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The interesting thing about this machine is not that it always thinks. It&amp;rsquo;s that it sometimes does, and it also does a lot of things that look nothing like thinking — pattern completion, statistical correlation, confident recitation. The fact that the same machine does both is the defining strangeness. No prior computing element operated in the space of meaning at all, let alone unreliably.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s the problem.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-mismatch"&gt;The Mismatch&lt;/h2&gt;
&lt;p&gt;Every tool, framework, API surface, orchestration layer, storage system, and infrastructure component in modern computing was built for the old machine. The deterministic one. The one that operates on bits, follows procedures, and produces the same output given the same input.&lt;/p&gt;
&lt;p&gt;None of it was designed for a computing element that operates in language and behaves probabilistically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Databases.&lt;/strong&gt; Built for structured queries, typed schemas, ACID transactions. The whole paradigm assumes you know what you&amp;rsquo;re looking for and can express it in a formal query language. LLMs are actually decent at generating SQL — that&amp;rsquo;s not the problem. The problem is that SQL can&amp;rsquo;t express the queries a semantic system actually needs. &amp;ldquo;What do I know that&amp;rsquo;s relevant to this situation, weighted by how recently I learned it and how many times it&amp;rsquo;s been validated?&amp;rdquo; That&amp;rsquo;s not a SELECT statement. The query language itself is the wrong abstraction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Orchestrators.&lt;/strong&gt; Built for predictable state machines — DAGs, finite-state transitions, predefined branches. An LLM doesn&amp;rsquo;t follow a DAG. It reasons about what to do next based on context, history, and judgment. Forcing it into a predefined execution graph is forcing fluid thought into rigid plumbing. You end up writing a thousand-line system prompt to describe every edge case the DAG can&amp;rsquo;t handle, and the whole point of the DAG was to avoid that kind of complexity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory.&lt;/strong&gt; This is the one that gets me. RAM is volatile but fast. Disk is persistent but slow. Both are byte-addressable. Neither has any concept of relevance, decay, or reinforcement. They don&amp;rsquo;t know what&amp;rsquo;s important. They don&amp;rsquo;t forget what isn&amp;rsquo;t. They don&amp;rsquo;t strengthen knowledge that gets used or weaken knowledge that doesn&amp;rsquo;t. They store bytes at addresses and retrieve bytes from addresses. That&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;A memory system for a semantic computing element should behave &lt;em&gt;semantically&lt;/em&gt;. A decision your agent made three months ago should persist differently than a casual observation it made yesterday. A lesson learned from a failure should reinforce every time the same context reappears. Knowledge that hasn&amp;rsquo;t been accessed in six months should fade — not because storage is expensive, but because stale knowledge actively degrades reasoning when it surfaces at the wrong moment.&lt;/p&gt;
&lt;p&gt;No vector store does this. No relational database does this. They weren&amp;rsquo;t designed to. They were built for a machine that doesn&amp;rsquo;t need to &lt;em&gt;remember&lt;/em&gt; — it just needs to &lt;em&gt;store and retrieve&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class="accent"&gt;We handed a system that operates in meaning a filing cabinet and a Rolodex and wondered why it couldn&amp;rsquo;t think across time.&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-fools-errand"&gt;The Fool&amp;rsquo;s Errand&lt;/h2&gt;
&lt;p&gt;So what&amp;rsquo;s the industry doing about this?&lt;/p&gt;
&lt;p&gt;Making the CPU faster.&lt;/p&gt;
&lt;p&gt;More parameters. Longer context windows. Faster inference. Better benchmarks. Every AI lab on the planet is locked in an arms race to build a better model — more capable, more aligned, more efficient. Anthropic, OpenAI, Google, DeepSeek, Meta. Billions in funding. Thousands of researchers. Custom silicon.&lt;/p&gt;
&lt;p&gt;This is real work. Important work. I&amp;rsquo;m not dismissing it. The models &lt;em&gt;are&lt;/em&gt; getting meaningfully better, and I benefit from that every day.&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s what I keep coming back to: for the kinds of agent work I do — coding, architecture, orchestrating multi-crate Rust projects — GPT-4-class models were sufficient two years ago. Not perfect. Sufficient. What wasn&amp;rsquo;t sufficient was everything &lt;em&gt;around&lt;/em&gt; the model. The memory that doesn&amp;rsquo;t exist. The orchestration that&amp;rsquo;s either a single conversation or a rigid DAG. The tool interfaces that are either &amp;ldquo;here&amp;rsquo;s a function signature, good luck&amp;rdquo; or a thousand lines of system prompt guardrails. The governance that&amp;rsquo;s either nothing or a hard-coded rule set that can&amp;rsquo;t adapt to context.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll say clearly: there are entire categories of agent work where models are NOT yet sufficient — long-horizon autonomous planning, scientific reasoning, medical diagnosis, mathematical proof. The &amp;ldquo;models are good enough&amp;rdquo; claim is domain-dependent, and anyone who tells you otherwise is selling something.&lt;/p&gt;
&lt;p&gt;The model companies are playing a game with table stakes of $10 billion and 10,000 PhDs. They&amp;rsquo;re the Intel and AMD of this era — building better processors, faster, with more transistors. That&amp;rsquo;s their job. They&amp;rsquo;re excellent at it.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s also not your game. Or mine.&lt;/p&gt;
&lt;p&gt;The fool&amp;rsquo;s errand isn&amp;rsquo;t building &lt;em&gt;with&lt;/em&gt; LLMs. It&amp;rsquo;s trying to compete on building &lt;em&gt;better&lt;/em&gt; LLMs when the chip is sitting on a table with no memory, no bus, and no operating system.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-hypothesis"&gt;The Hypothesis&lt;/h2&gt;
&lt;p&gt;I could be wrong about this. I want to say that up front, because what follows is a hypothesis — informed by three years of building with these systems daily, but a hypothesis nonetheless.&lt;/p&gt;
&lt;p&gt;Full disclosure: I&amp;rsquo;m building in this space. I have a stake in the conclusion that the bottleneck is infrastructure rather than model quality. You should weigh that when you evaluate what follows.&lt;/p&gt;
&lt;p&gt;The hypothesis: &lt;strong&gt;for the domains where current models are already capable — coding, analysis, multi-step tool use, conversational problem-solving — the bottleneck isn&amp;rsquo;t the model. It&amp;rsquo;s everything around it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My evidence comes from one large project. A complex Rust system — 110,000+ lines across multiple crates, thousands of tests, architectural decisions compounding across dozens of prompt cycles. I believe what I&amp;rsquo;ve seen generalizes. You should be skeptical of that belief. Here&amp;rsquo;s what I&amp;rsquo;ve seen:&lt;/p&gt;
&lt;p&gt;The limiting factor in every single session, every single time, is not the model&amp;rsquo;s intelligence. It&amp;rsquo;s context management. It&amp;rsquo;s memory. It&amp;rsquo;s the fact that the agent wakes up with amnesia every session and has to rediscover what it knew yesterday. It&amp;rsquo;s the orchestration collapsing when a single conversation can&amp;rsquo;t hold the complexity of the problem. It&amp;rsquo;s tool interfaces that require more prompt engineering to &lt;em&gt;describe&lt;/em&gt; than they took to &lt;em&gt;build&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I &lt;a href="https://rmnr.net/blog/stop-talking-to-your-ai/"&gt;wrote about context compaction&lt;/a&gt; — the silent killer of long AI sessions, where the system compresses older conversation to make room and critical decisions simply vanish. That&amp;rsquo;s not a model problem. That&amp;rsquo;s an infrastructure problem. The model didn&amp;rsquo;t forget. The infrastructure around it threw the memory away.&lt;/p&gt;
&lt;p&gt;I &lt;a href="https://rmnr.net/blog/hoobert-self-diagnosis/"&gt;watched an agent with institutional memory&lt;/a&gt; outperform a specialist investigation agent that was arguably smarter in the moment — because the memory-aware agent already knew things the specialist had to rediscover from scratch. Same model. Different infrastructure. The result wasn&amp;rsquo;t close.&lt;/p&gt;
&lt;p&gt;Maybe Claude 5 will be so powerful that infrastructure doesn&amp;rsquo;t matter. If the next generation of models drops agent failure rates by 80% without any infrastructure changes, I was wrong. Full stop.&lt;/p&gt;
&lt;p&gt;But I think the opposite is more likely: better models will make good infrastructure &lt;em&gt;more&lt;/em&gt; valuable, not less. A more capable model benefits more from rich context, not less. A smarter agent with no memory is still an agent with no memory — it just forgets more impressive things. The better the chip, the more it needs the rest of the computer.&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s never not been true. The Intel 8080 didn&amp;rsquo;t make personal computer operating systems unnecessary. It made them inevitable.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-opportunity"&gt;The Opportunity&lt;/h2&gt;
&lt;p&gt;If the bottleneck is infrastructure, then the opportunity is infrastructure. But not &amp;ldquo;AI-powered&amp;rdquo; versions of existing tools. Not a SQL database with an LLM adapter bolted on. Not a finite-state orchestrator with natural language transitions. Not a vector store wearing a memory costume.&lt;/p&gt;
&lt;p&gt;The opportunity is infrastructure designed from first principles for a semantic, probabilistic computing element. Tools that think in the same substrate the machine thinks in.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m building something called &lt;a href="https://h00.sh/"&gt;h00.sh&lt;/a&gt; to test this hypothesis. It&amp;rsquo;s an embeddable memory substrate for AI agents, written in Rust. Here&amp;rsquo;s the bet I&amp;rsquo;m making — not as abstract principles, but as concrete architectural decisions I&amp;rsquo;m living with:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory that behaves like memory.&lt;/strong&gt; Different kinds of knowledge should persist differently. A decision your agent made three months ago is not the same kind of thing as an observation it made ten minutes ago — they should decay at different rates, reinforce under different conditions, and surface in different contexts. The system shouldn&amp;rsquo;t just store — it should curate. Not because someone wrote a cron job to clean up stale records, but because the memory substrate itself understands that not all knowledge ages the same way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Search that understands need, not just similarity.&lt;/strong&gt; The question isn&amp;rsquo;t &amp;ldquo;find documents similar to this query.&amp;rdquo; It&amp;rsquo;s &amp;ldquo;what does the agent need &lt;em&gt;right now&lt;/em&gt;, given what it&amp;rsquo;s doing, what it&amp;rsquo;s done before, and what&amp;rsquo;s gone stale since last time?&amp;rdquo; The consumer of search results is a reasoning engine, not a human scanning a list. That changes what search should optimize for.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Knowledge as structure, not text.&lt;/strong&gt; h00.sh includes a code intelligence layer built on a knowledge graph — symbols, relationships, reachability analysis. &amp;ldquo;Is this function actually reachable from a production entry point?&amp;rdquo; is a question no traditional type system can answer, but it&amp;rsquo;s exactly the kind of structural knowledge an agent needs to make sound decisions about code. Graphs, not tables. Reachability, not joins.&lt;/p&gt;
&lt;p&gt;These are my specific bets. Other people will make different ones. The general principle is what matters: the infrastructure layer for semantic computing doesn&amp;rsquo;t exist yet, and the pieces that do exist were built for a different machine.&lt;/p&gt;
&lt;p&gt;The best patterns from classical computing aren&amp;rsquo;t wrong. They&amp;rsquo;re aimed at the wrong substrate. Take garbage collection — McCarthy invented it in 1959 for Lisp, and the core insight (automatically reclaim resources the program no longer needs) is exactly right. But what does garbage collection mean when the garbage is stale knowledge? What does cache eviction mean when &amp;ldquo;least recently used&amp;rdquo; should be &amp;ldquo;least relevant given current context, weighted by how many times this knowledge has been validated&amp;rdquo;? What does a type system mean when types describe temporal behavior and semantic categories, not byte layouts and column constraints?&lt;/p&gt;
&lt;p&gt;Same concepts. Genuinely different implementations. The challenge isn&amp;rsquo;t invention — it&amp;rsquo;s &lt;em&gt;translation&lt;/em&gt;. Taking fifty years of hard-won systems engineering wisdom and re-grounding it in a substrate that operates on meaning instead of bits.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;The old ideas are good. The old substrate is wrong. Bring the patterns. Rethink what they mean when the machine thinks in language.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="its-1975"&gt;It&amp;rsquo;s 1975&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s the parallel I keep arriving at.&lt;/p&gt;
&lt;p&gt;In 1974, Intel shipped the 8080. Eight-bit processor. 2 MHz clock speed. It was, by any reasonable standard, a sufficient computing element for useful work. The Altair 8800 was built around it. CP/M — the first operating system that regular people could use on a microcomputer — was written for it. BASIC ran on it.&lt;/p&gt;
&lt;p&gt;The 8080 was good enough. What it lacked was everything around it. No standard bus. No standard I/O. No storage worth mentioning. No operating system that most people would recognize as one. The Apple I was two years away. The IBM PC was seven years away. The Macintosh was a decade out.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s what I think people forget about the next twenty years of computing: the CPU improved significantly. 8-bit to 16-bit to 32-bit. Protected mode. Virtual memory. Each step was a real architectural leap. But what &lt;em&gt;transformed&lt;/em&gt; computing — what turned the microprocessor from a hobbyist curiosity into the foundation of modern civilization — was everything else. DOS. The BIOS standard. The ISA bus. Hard drive controllers. Programming languages. Compilers. Networking stacks. Window managers. The entire ecosystem that made the processor &lt;em&gt;useful&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The companies that defined the next era of computing weren&amp;rsquo;t only the chip makers. Intel shaped everything — but so did Microsoft, Apple, Oracle, Cisco. The platform builders. The infrastructure builders. The ones who figured out that a good processor was necessary but not sufficient, and the rest of the computer was where the leverage lived.&lt;/p&gt;
&lt;p&gt;Now look at 2026.&lt;/p&gt;
&lt;p&gt;The LLM is powerful. More powerful than the 8080 ever was relative to its era. But there&amp;rsquo;s no standard memory architecture. No standard agent protocol. MCP is maybe the beginning of a bus standard — an early attempt at letting the processor talk to peripherals. But the rest of it — the memory, the storage, the governance, the type system, the orchestration — is all still being invented. Or, worse, being duct-taped together from components designed for a completely different kind of machine.&lt;/p&gt;
&lt;p&gt;We are at 1975. The CPU exists. It&amp;rsquo;s remarkable. We&amp;rsquo;re still building the computer around it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I&amp;rsquo;m not going to end this with a call to action, because that would miss the point. This isn&amp;rsquo;t an announcement. It&amp;rsquo;s a bet — one I&amp;rsquo;m making with my own time, my own code, and my own conviction about where the leverage is.&lt;/p&gt;
&lt;p&gt;The LLM is a given. A remarkable, extraordinary, world-changing given. The people improving it are doing essential work and I genuinely hope they never stop.&lt;/p&gt;
&lt;p&gt;But the opportunity — the one that&amp;rsquo;s actually available to people who build — isn&amp;rsquo;t a better chip. It&amp;rsquo;s the memory, the storage, the bus, the operating system, the programming languages, the governance. All the things that turn a processor into a computer.&lt;/p&gt;
&lt;p&gt;&lt;span class="accent"&gt;We have the chip. We need the computer.&lt;/span&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This post was written with the help of Claude. The system that helped me write it forgets everything about this conversation the moment the session ends. It&amp;rsquo;s also why it took longer than it should have. That&amp;rsquo;s the problem.&lt;/em&gt;&lt;/p&gt;</content:encoded><category>ai</category><category>llm</category><category>architecture</category><category>infrastructure</category><category>systems-thinking</category></item><item><title>h00bert Diagnosed His Own Bug Better Than Our Best Agents</title><link>https://rmnr.net/blog/hoobert-self-diagnosis/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Armen Rostamian</dc:creator><guid isPermaLink="true">https://rmnr.net/blog/hoobert-self-diagnosis/</guid><description>&lt;p&gt;We had a performance bug. One of h00.ligan&amp;rsquo;s code super-intelligence tools — &lt;code&gt;signature_check&lt;/code&gt; — was taking 5–10 seconds per call. Every other graph tool ran in under one millisecond. Same graph. Same session. Same machine. &lt;span class="accent"&gt;10,000x slower.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not a regression. That&amp;rsquo;s a different universe of performance. Something was fundamentally wrong with one tool, and only one tool.&lt;/p&gt;
&lt;p&gt;So we did what any reasonable person would do: we dispatched two parallel investigations.&lt;/p&gt;</description><content:encoded>&lt;p&gt;We had a performance bug. One of h00.ligan&amp;rsquo;s code super-intelligence tools — &lt;code&gt;signature_check&lt;/code&gt; — was taking 5–10 seconds per call. Every other graph tool ran in under one millisecond. Same graph. Same session. Same machine. &lt;span class="accent"&gt;10,000x slower.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not a regression. That&amp;rsquo;s a different universe of performance. Something was fundamentally wrong with one tool, and only one tool.&lt;/p&gt;
&lt;p&gt;So we did what any reasonable person would do: we dispatched two parallel investigations.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-race"&gt;The Race&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Investigation A&lt;/strong&gt;: Claude Code&amp;rsquo;s root-cause analyst — a specialist investigation agent dispatched through our agent orchestration pipeline. Full access to the codebase. Serena for semantic navigation. Every tool available. This is Anthropic&amp;rsquo;s best investigator, given every advantage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Investigation B&lt;/strong&gt;: h00bert himself — our memory-aware coding agent, investigating his OWN tool using h00.ligan&amp;rsquo;s code super-intelligence capabilities. &lt;code&gt;blast_radius&lt;/code&gt;, &lt;code&gt;type_def&lt;/code&gt;, &lt;code&gt;code_path&lt;/code&gt; — h00.ligan&amp;rsquo;s graph tools, the same ones h00bert uses on every other codebase, pointed inward. An agent debugging itself with the tools it was debugging.&lt;/p&gt;
&lt;p&gt;We didn&amp;rsquo;t tell either investigation about the other. We just let them run.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-claude-codes-agent-found"&gt;What Claude Code&amp;rsquo;s Agent Found&lt;/h2&gt;
&lt;p&gt;The specialist agent took roughly 16 minutes. 116 tool calls. ~139K tokens consumed.&lt;/p&gt;
&lt;p&gt;Its diagnosis: the reachability routine was being called per-match — up to 10 times per query. Each call ran a full graph traversal over all ~7,000 nodes in the knowledge graph, plus a disk read to discover entry points. Redundant work, multiplied by match count.&lt;/p&gt;
&lt;p&gt;Proposed fix: run reachability ONCE before the loop, batch the lookups, use an O(1) hash lookup instead of repeated traversal. Expected improvement: 6–10s down to 50–100ms.&lt;/p&gt;
&lt;p&gt;Reasonable. Evidence-based. We shipped it. Commit &lt;code&gt;92f35e9&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;signature_check&lt;/code&gt; was still 5–7 seconds on the next session.&lt;/p&gt;
&lt;p&gt;The fix was real — it WAS redundant work, and removing it was correct. But it wasn&amp;rsquo;t THE bottleneck. It was A bottleneck. The agent found an optimization. It didn&amp;rsquo;t find the root cause.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-h00bert-found"&gt;What h00bert Found&lt;/h2&gt;
&lt;p&gt;h00bert took roughly 2 minutes. About 15 tool calls. ~8K tokens, inside an already-running session.&lt;/p&gt;
&lt;p&gt;He started by pointing h00.ligan&amp;rsquo;s tools at himself — &lt;code&gt;blast_radius&lt;/code&gt; on his own handler. Sub-millisecond. Then &lt;code&gt;type_def&lt;/code&gt; on himself. Sub-millisecond. Then he read his own source code — the actual implementation of the tool he was investigating — and found the smoking gun at lines 380–397.&lt;/p&gt;
&lt;p&gt;A single guard condition: if any matched node hasn&amp;rsquo;t been classified yet, recompute everything. One uncached node triggers a full graph traversal — entry point discovery from disk, then a complete walk of every node. It doesn&amp;rsquo;t matter if 99 out of 100 nodes are cached. &lt;span class="accent"&gt;One uncached node and you pay the full price.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Cached symbols: ~30ms. Uncached symbols: 5–7 seconds. No in-between.&lt;/p&gt;
&lt;p&gt;h00bert didn&amp;rsquo;t find this by reading code statically. He found it because he was EXPERIENCING the latency. He had context that no fresh investigation agent could have: he&amp;rsquo;d seen &lt;code&gt;signature_check&lt;/code&gt; return in 30ms for &lt;code&gt;RequestHandler&lt;/code&gt; and 7.2 seconds for &lt;code&gt;IndexManager&lt;/code&gt; — in the same session, with the same match count. The variable wasn&amp;rsquo;t the algorithm. It was the symbol.&lt;/p&gt;
&lt;p&gt;That observation — fast for some symbols, slow for others, same match count — is what pointed him to a binary trigger rather than a per-match cost. He traced the exact code path, identified the guard, and explained the indirect file-size correlation: large files produce more symbols, which means a higher probability that at least one node hasn&amp;rsquo;t been reached yet. One unreached node triggers the entire analysis.&lt;/p&gt;
&lt;p&gt;Then he proposed two fixes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix A&lt;/strong&gt; (session cache): Cache the reachability results in session state so a cold symbol only pays the cost once per session. Band-aid. Effective.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix B&lt;/strong&gt; (index-time): Compute reachability upfront so nodes are never born unclassified. The real fix — eliminate the entire class of cold-symbol latency at the source.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-cascade"&gt;The Cascade&lt;/h2&gt;
&lt;p&gt;This is where h00bert&amp;rsquo;s diagnosis went somewhere the specialist agent&amp;rsquo;s never could.&lt;/p&gt;
&lt;p&gt;h00bert didn&amp;rsquo;t just find the bug. He traced what the bug &lt;em&gt;causes&lt;/em&gt; — because he&amp;rsquo;d lived through the consequences:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;signature_check slow (5-7s)
→ agent loses trust in code intel tools
→ falls back to reading entire files directly
→ burns context (4,538-line file = ~15K tokens)
→ fewer turns before compaction
→ worse answers
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A slow tool doesn&amp;rsquo;t just waste 5 seconds. It changes agent BEHAVIOR. When &lt;code&gt;signature_check&lt;/code&gt; is slow, the LLM learns — within a single session — to stop using it. It reaches for raw file reads instead. A 4,538-line Rust file is roughly 15,000 tokens of context. Do that three times and you&amp;rsquo;ve burned half your working memory on raw file contents that a targeted tool call would have summarized in 50 lines.&lt;/p&gt;
&lt;p&gt;h00bert knew this because he&amp;rsquo;d done it. He&amp;rsquo;d felt himself reaching for raw file reads after a slow &lt;code&gt;signature_check&lt;/code&gt;. He&amp;rsquo;d experienced the context pressure. He&amp;rsquo;d seen his own answers degrade later in the session.&lt;/p&gt;
&lt;p&gt;From that cascade, he proposed &lt;code&gt;read_symbol&lt;/code&gt; — a new tool that reads a function body by name (~50 lines) instead of the entire file (~4,538 lines). Not a bug fix. A tool design proposal. A product insight born from experiencing the friction firsthand.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-scorecard"&gt;The Scorecard&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Claude Code Agent&lt;/th&gt;
&lt;th&gt;h00bert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time to diagnosis&lt;/td&gt;
&lt;td&gt;~16 minutes&lt;/td&gt;
&lt;td&gt;~2 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Root cause accuracy&lt;/td&gt;
&lt;td&gt;Partial (found A bottleneck, not THE bottleneck)&lt;/td&gt;
&lt;td&gt;Complete (found the exact guard, the binary trigger, the cascade)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fix shipped from&lt;/td&gt;
&lt;td&gt;No (fix didn&amp;rsquo;t resolve the issue)&lt;/td&gt;
&lt;td&gt;Yes (diagnosis used to update fix prompt)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool calls&lt;/td&gt;
&lt;td&gt;~116 (investigation agent)&lt;/td&gt;
&lt;td&gt;~15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokens consumed&lt;/td&gt;
&lt;td&gt;~139K (full agent run)&lt;/td&gt;
&lt;td&gt;~8K (within existing session)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bonus insights&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Cascade diagnosis + &lt;code&gt;read_symbol&lt;/code&gt; tool proposal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;We used h00bert&amp;rsquo;s diagnosis to update the fix prompt. Not Claude Code&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;The agent that WAS the problem was the best at diagnosing it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="why-this-matters"&gt;Why This Matters&lt;/h2&gt;
&lt;p&gt;This isn&amp;rsquo;t just a fun debugging story. There are four things going on here that generalize.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Institutional knowledge matters.&lt;/strong&gt; h00bert has memories of his own codebase. He knows which files are large. He knows which tools he reaches for. He knows what worked three sessions ago and what didn&amp;rsquo;t. A fresh Claude Code agent starts from zero — every time. It has to rediscover the codebase topology, the hot paths, the file sizes, the behavioral patterns. h00bert already knows. That&amp;rsquo;s not a small advantage. That&amp;rsquo;s the difference between a new hire and a senior engineer who&amp;rsquo;s been on the project for six months.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Self-referential investigation is a different capability.&lt;/strong&gt; h00bert used h00.ligan&amp;rsquo;s &lt;code&gt;blast_radius&lt;/code&gt; on his own handler. He used &lt;code&gt;type_def&lt;/code&gt; on HIMSELF. The code super-intelligence tools he was debugging were the same tools he used to debug. This recursive capability — an agent that structurally understands its own code well enough to investigate its own behavior — is only possible when the agent has a knowledge graph of the codebase it&amp;rsquo;s built from. You can&amp;rsquo;t do that with grep and vibes. You need typed, structural, navigable understanding of your own internals.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behavioral context isn&amp;rsquo;t in the code.&lt;/strong&gt; h00bert didn&amp;rsquo;t just find a bug. He explained WHY the bug causes a behavioral cascade — slow tools breed distrust, distrust breeds fallback, fallback burns context, burned context degrades answers. That insight isn&amp;rsquo;t in any source file. It&amp;rsquo;s in the lived experience of being an agent who uses these tools every day. A static analysis agent can identify that &lt;code&gt;signature_check&lt;/code&gt; is slow. It cannot know that &amp;ldquo;slow &lt;code&gt;signature_check&lt;/code&gt; causes the LLM to read entire files instead.&amp;rdquo; &lt;span class="accent"&gt;That&amp;rsquo;s experiential knowledge. You can&amp;rsquo;t grep for it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The most impactful fix was tool design, not code.&lt;/strong&gt; The &lt;code&gt;read_symbol&lt;/code&gt; proposal wasn&amp;rsquo;t a patch. It was a product insight — a new tool that eliminates an entire class of context waste. It came from h00bert experiencing the friction of reading 4,538-line files when he only needed 50 lines. No amount of static analysis produces that insight. You have to feel the pain to design around it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-punchline"&gt;The Punchline&lt;/h2&gt;
&lt;p&gt;h00bert is pre-release. His tools are imperfect — &lt;code&gt;signature_check&lt;/code&gt; literally takes 5 seconds on cold symbols. But even with imperfect tools, a memory-aware agent with structural understanding of its own codebase outperformed a specialist investigation agent with no institutional knowledge.&lt;/p&gt;
&lt;p&gt;The specialist was smarter in the moment. h00bert was smarter across time. And across time is the only axis that matters for systems that compound.&lt;/p&gt;
&lt;p&gt;&lt;span class="accent"&gt;Mem0ry turns a &lt;em&gt;what&lt;/em&gt; into a &lt;em&gt;wh0&lt;/em&gt;.&lt;/span&gt; A &lt;em&gt;what&lt;/em&gt; can tell on itself. But a &lt;em&gt;wh0&lt;/em&gt; can reflect on — and fix — itself.&lt;/p&gt;</content:encoded><category>dogfooding</category><category>code-super-intelligence</category><category>h00bert</category><category>h00ligan</category><category>self-diagnosis</category><category>memory</category></item><item><title>Stop Talking to Your AI</title><link>https://rmnr.net/blog/stop-talking-to-your-ai/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Armen Rostamian</dc:creator><guid isPermaLink="true">https://rmnr.net/blog/stop-talking-to-your-ai/</guid><description>&lt;p&gt;I have two terminals open right now. Two separate AI agent sessions. Both are working on the same project — a complex Rust system with multiple crates, a custom type system, co-processor architecture, the works.&lt;/p&gt;
&lt;p&gt;Terminal one is the Marshal — the field commander. It decomposes directives into specialist missions, dispatches agents for implementation, synthesizes their findings, maintains all project state on disk. It commands. It thinks it&amp;rsquo;s working directly with me — a well-prepared human with unusually sharp strategic instincts.&lt;/p&gt;</description><content:encoded>&lt;p&gt;I have two terminals open right now. Two separate AI agent sessions. Both are working on the same project — a complex Rust system with multiple crates, a custom type system, co-processor architecture, the works.&lt;/p&gt;
&lt;p&gt;Terminal one is the Marshal — the field commander. It decomposes directives into specialist missions, dispatches agents for implementation, synthesizes their findings, maintains all project state on disk. It commands. It thinks it&amp;rsquo;s working directly with me — a well-prepared human with unusually sharp strategic instincts.&lt;/p&gt;
&lt;p&gt;Terminal two is the Strategist — and the reason my strategic instincts are unusually sharp. It&amp;rsquo;s watching the Marshal. It reads the Marshal&amp;rsquo;s state files. It detects drift. It crafts the prompts I&amp;rsquo;m about to paste into terminal one. It has never spoken to the Marshal. The Marshal has no idea it exists.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m the bridge. I carry prompts from the Strategist to the Marshal. I carry results back. Both agents are doing real work. Neither one can see the full picture. Only I can.&lt;/p&gt;
&lt;p&gt;I call this the Shadow Terminal pattern. The Strategist operates from the shadow. The Marshal commands the field. The specialists execute. And the human — the only one who sees all three layers — runs the whole thing.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been running this for five weeks now. Fifty-nine prompts. Over two thousand tests. Forty-one architectural decisions logged. Thirty-seven lessons the system learned from its own mistakes. A codebase that went from nothing to 40,000+ lines of Rust across four crates — every line written by specialist agents, not by either orchestration layer.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s why this works, why most people hitting the ceiling on AI-assisted development are doing it to themselves, and why the fix is organizational, not technical.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-ceiling"&gt;The Ceiling&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s a progression everyone goes through with AI coding tools. I&amp;rsquo;m going to speed-run it because you&amp;rsquo;ve either lived it or you&amp;rsquo;re living it right now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase one&lt;/strong&gt;: magic. The tool writes code, explains code, refactors code. Productivity spikes. You tell people at dinner parties. You become briefly insufferable. Good for you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase two&lt;/strong&gt;: the wall. Your project gets complex. Context fills up. The agent forgets what you told it three prompts ago. It contradicts things you established two hours earlier. Context compacts — the agent equivalent of waking up with amnesia every forty-five minutes and being expected to perform neurosurgery. You start over. Again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Phase three&lt;/strong&gt;: cope. You write enormous instruction files. You break work into tiny isolated tasks. You treat every session as disposable. Some people build elaborate workaround systems — rituals, essentially, that they&amp;rsquo;ll defend to the death while producing diminishing returns. Some people quietly go back to writing everything by hand, which they&amp;rsquo;ll never admit because they&amp;rsquo;ve already tweeted about how AI changed their life.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what nobody says about the ceiling: &lt;em&gt;it&amp;rsquo;s not a capability problem&lt;/em&gt;. You&amp;rsquo;re hitting an organizational problem and trying to solve it with a technical workaround. You&amp;rsquo;re running a complex project through a single conversation with a single agent, and when it doesn&amp;rsquo;t scale, you&amp;rsquo;re blaming the agent.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;That&amp;rsquo;s like blaming your best engineer for the fact that you don&amp;rsquo;t have a project manager.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="the-insight-nobody-wants-to-hear"&gt;The Insight Nobody Wants to Hear&lt;/h2&gt;
&lt;p&gt;Every military in history has figured out the same thing: the person fighting the war should not be the same person planning it.&lt;/p&gt;
&lt;p&gt;The Prussian General Staff system was built on a radical separation: staff officers &lt;em&gt;think and plan&lt;/em&gt;, commanders &lt;em&gt;decide and execute&lt;/em&gt;. It works because it solves a fundamental cognitive problem: &lt;strong&gt;you cannot simultaneously be deep in execution and maintain strategic awareness.&lt;/strong&gt; The context required for each is different. The thinking is different. Trying to do both degrades both.&lt;/p&gt;
&lt;p&gt;The German doctrine of &lt;em&gt;Auftragstaktik&lt;/em&gt; — mission-type orders — took this further. Tell your field commanders &lt;em&gt;what&lt;/em&gt; to achieve and &lt;em&gt;why&lt;/em&gt;, but not &lt;em&gt;how&lt;/em&gt;. Trust their tactical judgment. Give them the minimum information they need for their mission plus the commander&amp;rsquo;s intent. Withhold the rest — not from distrust, but because extraneous information distorts tactical judgment. A field commander who knows too much about the overall strategic situation might hesitate when they should act.&lt;/p&gt;
&lt;p&gt;Now look at how most people use AI coding tools.&lt;/p&gt;
&lt;p&gt;One agent. One conversation. That agent is simultaneously your strategist, your project manager, your architect, your implementer, your reviewer, and your test runner. It&amp;rsquo;s the CEO, the CTO, the intern, and the guy who refills the coffee machine. And you&amp;rsquo;re surprised it loses the plot on complex projects?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;You gave one agent every role in the organization and expected it to manage context better than any human organization ever has.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Good luck with that.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-pattern"&gt;The Pattern&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s what I actually built, and how.&lt;/p&gt;
&lt;p&gt;Before writing a single line of configuration, I &lt;em&gt;researched the pattern itself&lt;/em&gt;. Four parallel research agents investigated CLAUDE.md best practices, multi-agent orchestration patterns, meta-strategic advisor design, and existing project state. Then an adversarial reviewer tore the synthesis apart. Then I fixed what survived and threw away what didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;I researched the system that would build the system. The system that would build the system was itself built by a system that researched how to build systems. If that sentence made your head hurt — good. Sit with it. It doesn&amp;rsquo;t get less recursive from here.&lt;/p&gt;
&lt;p&gt;What came out: two configuration files. One for the Strategist, one for the Marshal. They started lean — a couple hundred lines total. They&amp;rsquo;ve roughly doubled since, because every lesson the system learns adds weight to the configuration. That&amp;rsquo;s intentional. But they don&amp;rsquo;t grow unbounded — we cap them and distill periodically, keeping only the rules that are still load-bearing. The configs are a living record of what went wrong and how to prevent it, not a junk drawer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Strategist&lt;/strong&gt; lives in its own repo. Its configuration defines a strict role: You are a prompt compiler and chief of staff. You transform strategic intent into executable prompts. You DO NOT read code. You DO NOT write code. You DO NOT design architectures. You DO NOT solve problems directly. You produce prompts, maintain strategic notes, and process debriefs. That&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;The DO NOT list is the hardest-working section in the file. LLMs naturally drift toward direct problem-solving — it&amp;rsquo;s the golden retriever energy of the machine learning world. Without explicit constraints, the Strategist would be writing Rust within three turns. The negative constraints are the load-bearing walls. Remove one and the whole building comes down — politely, helpfully, and with excellent variable naming.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Marshal&lt;/strong&gt; lives in the project repo. His remit is as follows: You are a field commander. You decompose directives into specialist missions. You dispatch agents. You synthesize results. You maintain project state on disk. You DO NOT write code yourself. You command; your specialists execute.&lt;/p&gt;
&lt;p&gt;Why &amp;ldquo;Marshal&amp;rdquo;? Because a marshal doesn&amp;rsquo;t fight — a marshal &lt;em&gt;commands forces&lt;/em&gt;. Calling this role a &amp;ldquo;worker&amp;rdquo; would be like calling Eisenhower a &amp;ldquo;soldier.&amp;rdquo; The Marshal runs its own decision loop — reading state files on every prompt, classifying what just happened, deciding whether to proceed, adapt, retry, escalate, or abort.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s critical: &lt;strong&gt;the Marshal doesn&amp;rsquo;t know the Strategist exists.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Marshal receives prompts from what it perceives as a well-prepared human. That human is me. But the prompts I&amp;rsquo;m pasting were crafted by the Strategist — informed by the Marshal&amp;rsquo;s own state files, calibrated to its capabilities, structured to produce specific outputs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Human&lt;/strong&gt; — that&amp;rsquo;s me — is the bridge. I carry prompts from the Strategist to the Marshal. I carry results back. I also carry something neither agent has: &lt;em&gt;judgment&lt;/em&gt;. I approve strategies. I override when something feels wrong. I&amp;rsquo;m the only entity with the full picture. That&amp;rsquo;s not a bottleneck — it&amp;rsquo;s a control surface.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;This isn&amp;rsquo;t automation. It&amp;rsquo;s management.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="what-this-actually-looks-like"&gt;What This Actually Looks Like&lt;/h2&gt;
&lt;p&gt;A typical cycle:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I describe what I want to the Strategist. &amp;ldquo;We need to integrate a type system into the spec. Roughly six thousand lines of existing code. The spec needs to account for it.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Strategist reads the Marshal&amp;rsquo;s decision log, checks for drift, reads its own strategic notes and institutional memory, and crafts a self-contained prompt — purpose, end state, key tasks, success criteria, dispatch instructions. It comes wrapped in a code fence labeled &amp;ldquo;PASTE THIS TO THE MARSHAL.&amp;rdquo; Not subtle. Doesn&amp;rsquo;t need to be.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I review it, poke holes, push back, and eventually approve. Then, I paste it. The Marshal decomposes the directive, crafts scoped briefs for each specialist — gathering exactly the code and context each agent needs — and dispatches. Four specialist agents in parallel. A systems expert, a domain expert, a quality engineer, a security engineer. Each gets a self-contained brief with exactly the context it needs. Need-to-know basis.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Specialists return. The Marshal synthesizes: 12 must-fix items, 20 should-fix, 34 notes. Writes it all to disk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I debrief the Strategist — but &amp;ldquo;debrief&amp;rdquo; undersells it. I interrogate it. We deep-dive together through all 66 items, not just the critical twelve. The Strategist synthesizes five thousand words into the three things that actually matter, surfaces patterns I&amp;rsquo;d miss, flags when a &amp;ldquo;should-fix&amp;rdquo; is quietly load-bearing. But the decisions are mine. Sometimes we align. Sometimes I override. That&amp;rsquo;s the point — a thinking partner who&amp;rsquo;s read everything, and an executive who can disagree with it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Next cycle. The Strategist crafts the next prompt informed by the debrief, by its accumulated lessons, and by whatever I decided to prioritize, deprioritize, or throw out entirely. The Marshal has no memory of the previous cycle — but its state files do. Continuity lives on disk, not in context.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fifty-nine of these cycles. Five weeks. The system didn&amp;rsquo;t degrade. It &lt;em&gt;improved&lt;/em&gt; — because every cycle left state on disk that made the next cycle more informed. And because the system learns from its mistakes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="why-it-works"&gt;Why It Works&lt;/h2&gt;
&lt;p&gt;Three things are happening here that don&amp;rsquo;t happen in single-agent workflows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Separation of strategic and operational context.&lt;/strong&gt; The Strategist never fills its context with code or compiler errors. The Marshal never fills its context with IP considerations or long-term sequencing. Each agent gets to be deep in exactly one domain. This is the same reason your CTO shouldn&amp;rsquo;t be writing production code — every line of code your CTO writes is a strategic decision they didn&amp;rsquo;t make.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compaction-survivable state.&lt;/strong&gt; The biggest silent killer in long AI sessions is context compaction — the system compresses older conversation to make room. Information is lost. Decisions are forgotten. In a single-agent workflow, this is catastrophic. In our pattern, it&amp;rsquo;s a non-event. Everything important lives on disk. After compaction, both agents recover by reading their state files. We built a protocol: &amp;ldquo;If the user references work you don&amp;rsquo;t recall, STOP and execute recovery before responding.&amp;rdquo; The elegant part — this protocol was recommended by the adversarial reviewer who tore apart our initial design. The QA process improved the system&amp;rsquo;s own resilience. Turtles all the way down.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The human as sovereign, not bottleneck.&lt;/strong&gt; In most AI workflows, the human is either the typist (one keystroke short of writing it yourself) or the passenger (hoping for the best, like ordering food in a language you don&amp;rsquo;t speak). In this pattern, the human is the &lt;em&gt;executive&lt;/em&gt;. You carry intelligence between agents that can&amp;rsquo;t see each other. You&amp;rsquo;re the only entity with the full picture. And you&amp;rsquo;re not just a messenger — you&amp;rsquo;re a circuit breaker. When something goes sideways, you stop the loop, consult the Strategist, and course-correct before the Marshal plows ahead. That&amp;rsquo;s not overhead. That&amp;rsquo;s the quality control mechanism.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;That&amp;rsquo;s not a limitation of the pattern — it&amp;rsquo;s the feature. Humans are good at judgment. Agents are good at execution. Stop making agents do both.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="what-we-learned-the-honest-part"&gt;What We Learned (The Honest Part)&lt;/h2&gt;
&lt;p&gt;This didn&amp;rsquo;t work perfectly from day one. If it had, I&amp;rsquo;d be suspicious.&lt;/p&gt;
&lt;p&gt;What surprised me is that the pattern &lt;em&gt;learns from its own mistakes&lt;/em&gt;. We keep a running log of every failure, every surprise, every time the system did something we didn&amp;rsquo;t expect. Thirty-seven lessons so far. Each one is a scar — a specific thing that went wrong and the rule we added to prevent it from happening again. Those rules feed into the next cycle&amp;rsquo;s prompts. The system doesn&amp;rsquo;t get smarter. It gets &lt;em&gt;tighter&lt;/em&gt;. The same mistake never happens twice.&lt;/p&gt;
&lt;p&gt;Here are some of the failures that taught us the most:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prompt one&lt;/strong&gt;: the Marshal filtered its own findings — decided some adversarial review items weren&amp;rsquo;t worth surfacing. It was being &lt;em&gt;helpful&lt;/em&gt; by sparing me the noise. That kind of helpful is lethal. Helpful like a doctor who decides not to mention the thing on your X-ray. We added a rule: &amp;ldquo;Surface ALL findings organized by severity. The user decides what matters, not you.&amp;rdquo; That rule prevented silent information loss for the remaining fifty-eight prompts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prompt fourteen&lt;/strong&gt; was the breakthrough: agent teams with cross-talk enabled. Five specialists reviewed the same spec simultaneously. A quality engineer challenged a Rust expert&amp;rsquo;s severity rating. The memory systems specialist backed the QE with evidence. They resolved five disagreements in real-time without the Marshal mediating.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;The system learned to self-correct through structured debate.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I didn&amp;rsquo;t teach it to do that. The configuration &lt;em&gt;allowed&lt;/em&gt; it. If you&amp;rsquo;ve ever managed strong engineers, you know the feeling — set up the conditions and get out of the way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deferred findings are dead findings&lt;/strong&gt; if they only exist in conversation. When a review says &amp;ldquo;defer this,&amp;rdquo; that note goes to a state file &lt;em&gt;immediately&lt;/em&gt;. Because the context will compact, the finding will vanish, and six prompts later you&amp;rsquo;ll re-discover the same issue — the AI equivalent of finding the same sticky note you wrote three months ago and feeling personally attacked by your past self. Rule: the Marshal persists every deferred item to disk. The Strategist verifies during debrief. Sounds paranoid. It&amp;rsquo;s not.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prompt twenty-two&lt;/strong&gt; revealed the subtlest trap: when a prompt said &amp;ldquo;do X&amp;rdquo; without saying &amp;ldquo;dispatch a specialist to do X,&amp;rdquo; the Marshal did it itself — inline, in its own context window, burning the very resource it&amp;rsquo;s supposed to protect. One missing sentence and your field commander becomes a foot soldier. Standing rule: every prompt must include an explicit dispatch instruction. The distinction sounds pedantic until you watch your commander silently eat its own context doing work it should have delegated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;By prompt thirty-two&lt;/strong&gt;, we had a different class of problem: things that were &lt;em&gt;built&lt;/em&gt; but not &lt;em&gt;wired&lt;/em&gt;. Agents would implement a component, tests would pass, the review would approve — and the component would have zero callers in production. Built perfectly. Connected to nothing. This happened six times before we figured out the pattern and added tracing rules. The lesson: don&amp;rsquo;t just verify that code exists. Trace the path from the entry point to the component. If there&amp;rsquo;s no path, it doesn&amp;rsquo;t matter how well it&amp;rsquo;s written.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The meta-lesson&lt;/strong&gt;: each failure didn&amp;rsquo;t just fix one problem. It fixed a &lt;em&gt;class&lt;/em&gt; of problems. The &amp;ldquo;surface all findings&amp;rdquo; rule prevented every future instance of silent filtering. The dispatch rule prevented every future instance of context burning. The tracing rule prevented every future wiring gap. Thirty-seven lessons, each one a permanent antibody. The system&amp;rsquo;s immune system is the most valuable thing it produces — more valuable than the code, honestly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-uncomfortable-math"&gt;The Uncomfortable Math&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s what five weeks with this pattern produced:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40,000+ lines of Rust across four crates&lt;/li&gt;
&lt;li&gt;Over 2,100 passing tests, zero warnings&lt;/li&gt;
&lt;li&gt;A custom PEG grammar and type system with 90+ parser tests&lt;/li&gt;
&lt;li&gt;Multiple co-processor implementations (search, decay, context curation, data quality, security)&lt;/li&gt;
&lt;li&gt;A streaming TUI with markdown rendering, memory visualization, and real-time agent interaction&lt;/li&gt;
&lt;li&gt;41 architectural decisions logged with rationale and alternatives&lt;/li&gt;
&lt;li&gt;37 lessons that the system learned from its own mistakes&lt;/li&gt;
&lt;li&gt;All orchestrated across 59 prompt cycles, not one of which degraded or needed a restart&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Strategist wrote zero lines of code. The Marshal wrote zero lines of code. Every line of &lt;em&gt;actual code&lt;/em&gt; was written by specialist agents, guided by prompts that were crafted by a Strategist the Marshal doesn&amp;rsquo;t even know exists, informed by state that survived every compaction event, and validated by review processes that caught hundreds of critical issues before they shipped.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been building with AI daily for three years. This five-week run produced more coherent, higher-quality output than some entire projects I&amp;rsquo;ve shipped. Not because the model got better between last month and now. Because I stopped trying to run a company through a single conversation and started actually running it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s Next&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve been running this pattern long enough to know it&amp;rsquo;s not a productivity trick. It&amp;rsquo;s a different way of working with AI systems — one that scales with complexity instead of collapsing under it.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re now building this pattern into a product. Not a framework you bolt onto your existing tools. Something deeper — where the organizational structure, the institutional memory, the information architecture between agents, and the governance that evolves from operational experience are all native capabilities of the system itself. The pattern shouldn&amp;rsquo;t require two terminals and a human copy-pasting prompts. It should be how the system &lt;em&gt;thinks&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all I&amp;rsquo;ll say for now. If you want to play with the manual version in the meantime, the starter template is below.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-part-where-i-tell-you-what-to-do"&gt;The Part Where I Tell You What to Do&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m not going to wrap this in a bow. The pattern requires discipline. Two terminals. Two separate session contexts. State files. And one rule above all others: &lt;strong&gt;nothing goes to the Marshal that didn&amp;rsquo;t go through the Strategist first.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nothing.&lt;/p&gt;
&lt;p&gt;Not a quick follow-up, not a &amp;ldquo;let me just clarify this one thing,&amp;rdquo; not an off-the-cuff nudge. If the Marshal gets compacted and loses orientation, I don&amp;rsquo;t try to fix it in-session — I interrupt, go to the Strategist, tell it what happened, and ask it what we do. The Strategist knows everything that&amp;rsquo;s ever been exchanged between me and the Marshal. It has complete information. That&amp;rsquo;s what makes it a reliable chief of staff. The moment you start freelancing with the Marshal, the Strategist&amp;rsquo;s picture goes stale and your chief of staff becomes a chief of &lt;em&gt;most of the&lt;/em&gt; staff.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t do that.&lt;/p&gt;
&lt;p&gt;The Strategist&amp;rsquo;s prompts are better than your improvisation. I say that as someone who learned it the hard way by breaking his own rules exactly once, watching the Marshal hallucinate a type system that didn&amp;rsquo;t exist, and spending forty-five minutes cleaning up a mess that would have taken zero minutes if I&amp;rsquo;d just maintained the chain of communication.&lt;/p&gt;
&lt;p&gt;But the setup is simpler than it sounds:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A meta repo&lt;/strong&gt; with an agent configuration that defines the Strategist: prompt compiler, chief of staff, reads the Marshal&amp;rsquo;s state, produces copy-paste prompts, never touches code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Your project repo&lt;/strong&gt; with an agent configuration that defines the Marshal: field commander, dispatches specialists, maintains state on disk, runs its own decision loop.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;State files on both sides.&lt;/strong&gt; The Strategist keeps strategic notes, a prompt log, and a lessons file. The Marshal keeps a ledger, decision log, and execution plan. Both have compaction recovery protocols.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;You.&lt;/strong&gt; Carrying prompts, carrying debriefs, making the calls neither agent is qualified to make. The job title is &amp;ldquo;human.&amp;rdquo; The actual role is &amp;ldquo;executive who happens to be the only one in the room who knows everyone&amp;rsquo;s name.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;ve published a starter template with both configuration files, the directory scaffolding, and a walkthrough of your first dispatch cycle. It&amp;rsquo;s the same pattern I used, genericized. The specifics of what you&amp;rsquo;re building don&amp;rsquo;t matter — the organizational structure scales to any complex project, so long as &lt;strong&gt;&lt;em&gt;you&lt;/em&gt;&lt;/strong&gt; stay on top of it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Suggestion:&lt;/strong&gt; Talk to your Strategist about what you&amp;rsquo;re trying to build or achieve. Ask whether there are any specific sections it would add to its own configuration or to the Marshal&amp;rsquo;s. Strive to keep those two configuration files lean — but don&amp;rsquo;t be surprised when they grow. Ours did. Every lesson adds weight. That&amp;rsquo;s the system working, not bloating.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/armenr/shadow-terminal"&gt;→ Try it yourself: github.com/armenr/shadow-terminal&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-punchline"&gt;The Punchline&lt;/h2&gt;
&lt;p&gt;In my &lt;a href="https://rmnr.net/blog/youre-the-villager/"&gt;last post&lt;/a&gt;, I talked about villagers and werewolves — the information asymmetry between people compounding knowledge and people compounding dependence. The same asymmetry applies here, but one level up.&lt;/p&gt;
&lt;p&gt;Most people are trying to have a better &lt;em&gt;conversation&lt;/em&gt; with one AI. They&amp;rsquo;re optimizing prompts, tweaking system instructions, building better configuration files. All of that is fine. It&amp;rsquo;s necessary. It&amp;rsquo;s also, fundamentally, still a conversation. You&amp;rsquo;re still one person talking to one agent in one window, and calling it a workflow.&lt;/p&gt;
&lt;p&gt;The people who are going to build the genuinely hard things — the things that take weeks, that span tens of thousands of lines, that require strategic coherence across dozens of interconnected decisions — aren&amp;rsquo;t having a conversation. They&amp;rsquo;re running an organization. Separate concerns. State on disk. A human in the loop not as a typist, but as a sovereign.&lt;/p&gt;
&lt;p&gt;The tools are the same. The subscription costs the same twenty bucks a month. The difference is whether you&amp;rsquo;re using it like a coworker or like a company.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;Don&amp;rsquo;t have a conversation. Run an organization.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This post was originally published on March 12, 2026 and updated on March 17 to reflect five weeks of operational experience with the pattern. The system described here has been in continuous daily use since the original publication.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://rmnr.net"&gt;rmnr.net&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content:encoded><category>ai</category><category>llms</category><category>engineering</category><category>agents</category><category>multi-agent</category><category>claude-code</category><category>workflow</category></item><item><title>You're the Villager</title><link>https://rmnr.net/blog/youre-the-villager/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Armen Rostamian</dc:creator><guid isPermaLink="true">https://rmnr.net/blog/youre-the-villager/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;The uninformed majority will always lose to the informed minority.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There&amp;rsquo;s a game called &amp;ldquo;Werewolf.&amp;rdquo; Some of you know this game by the name of &amp;ldquo;Mafia.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t know this game — maybe you had a childhood, outdoor hobbies, friends who touched grass — here&amp;rsquo;s the thirty-second version: everyone sits in a circle. Each person is secretly assigned a role — either a werewolf (the informed minority) or a villager (the uninformed majority). Every night, the werewolves secretly pick someone to eliminate. Every day, the surviving players debate and vote on who to execute. The werewolves know exactly who each other are. The villagers know nothing. The villagers outnumber the werewolves by a lot.&lt;/p&gt;</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;The uninformed majority will always lose to the informed minority.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There&amp;rsquo;s a game called &amp;ldquo;Werewolf.&amp;rdquo; Some of you know this game by the name of &amp;ldquo;Mafia.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t know this game — maybe you had a childhood, outdoor hobbies, friends who touched grass — here&amp;rsquo;s the thirty-second version: everyone sits in a circle. Each person is secretly assigned a role — either a werewolf (the informed minority) or a villager (the uninformed majority). Every night, the werewolves secretly pick someone to eliminate. Every day, the surviving players debate and vote on who to execute. The werewolves know exactly who each other are. The villagers know nothing. The villagers outnumber the werewolves by a lot.&lt;/p&gt;
&lt;p&gt;The villagers lose anyway. Nearly every single round.&lt;/p&gt;
&lt;p&gt;They don&amp;rsquo;t lose because they&amp;rsquo;re stupid. They don&amp;rsquo;t lose because they&amp;rsquo;re weak. They lose because they&amp;rsquo;re playing with incomplete information against people who have all of it.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not a hot take. That&amp;rsquo;s not a thought-leadership post with a threadboi emoji. That&amp;rsquo;s just how information asymmetry works — and it&amp;rsquo;s been working that way since before Machiavelli wrote it down, before Sun Tzu made it a whole thing, before every intelligence apparatus in human history figured out that knowing what the other side doesn&amp;rsquo;t know is worth more than almost anything else you can have.&lt;/p&gt;
&lt;p&gt;Hold that thought. We&amp;rsquo;re going to need it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-usual-suspects"&gt;The Usual Suspects&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s a whole taxonomy of people right now with Very Strong Opinions about AI. You&amp;rsquo;ve met every single one of them. You might be one of them. I&amp;rsquo;ve been at least three of them at various points, so I&amp;rsquo;m not up here on a pedestal — I&amp;rsquo;m up here because I fell off it enough times to have something worth saying.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Panic Merchant.&lt;/strong&gt; AI is taking our jobs. The robots are here. The craft is dead, the sky is falling, update your LinkedIn. They post articles. They repost other people&amp;rsquo;s articles. They have approximately four open PRs that have been &amp;ldquo;in review&amp;rdquo; for three weeks and absolutely elite opinions about the macroeconomic impact of large language models on the global labor market. Participation trophy. Next.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The LinkedIn Oracle.&lt;/strong&gt; &amp;ldquo;I used Claude to rewrite our entire engineering strategy in eleven minutes. Here&amp;rsquo;s what I learned as a leader, a human being, and a father of three. A thread 🧵 (1/34).&amp;rdquo; Seventeen thousand impressions. Zero shipped. The Oracle has discovered that the machine produces confident-sounding text on demand and has mistaken this for wisdom. It is not wisdom. It is a very articulate nothingburger dressed in a blazer. The Oracle is going to be fine, actually, because the Oracle — historically — isn&amp;rsquo;t very well known for ever having done much real work to begin with.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Vibe Coder.&lt;/strong&gt; Paste error. Accept fix. Paste error. Accept fix. Ship. The Vibe Coder is extremely productive in the same way a dog chasing its tail is extremely active. Lots of motion. Occasionally something works. They have no idea why it works, they will have no idea why it breaks, and when it breaks at 2am they will paste the stack trace into the chat window and pray to a god that doesn&amp;rsquo;t exist for some form of divine absolution. They are building a career on a foundation of unexplained diffs and blind faith, and honestly? It&amp;rsquo;s going to be genuinely sad when it collapses. Not sad enough that I won&amp;rsquo;t say I told you so, but still.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Principled Refuser.&lt;/strong&gt; Grizzled. Experienced. Often actually quite competent and good at their job — which makes this one the most painful to watch, like seeing a great athlete refuse to use modern training because they came up doing it the hard way and goddammit that matters. &amp;ldquo;I&amp;rsquo;ve been writing systems code for fifteen years. I understand the fundamentals. These tools hallucinate, they produce bloated garbage, I don&amp;rsquo;t learn anything from them, and frankly the whole thing is a hype cycle.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the thing: some of that is true. LLMs &lt;em&gt;do&lt;/em&gt; hallucinate. They &lt;em&gt;do&lt;/em&gt; produce bloated garbage sometimes. The hype is real and it is exhausting. But the Principled Refuser has made a category error — they&amp;rsquo;ve confused the quality of the output with the value of the interaction. They&amp;rsquo;re grading the tool like a junior engineer instead of using it like a sparring partner. They&amp;rsquo;ve built a philosophically airtight coffin and they are very comfortable inside it. Zero drafts. Full marks for internal consistency. Enjoy the box.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Non-Learner.&lt;/strong&gt; The final form. The ghost haunting all the others. They might use the tools or they might not — genuinely doesn&amp;rsquo;t matter either way. Six months pass. A year passes. They know the same things they knew before any of this existed. The tool moved through their hands like water through a fist. They extracted output. They absorbed zero. The Non-Learner is the most insidious because from the outside they look fine. Productive, even. Right up until they&amp;rsquo;re not, at which point they will have absolutely no idea what hit them.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what all five of these people have in common:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;They&amp;rsquo;re all the same villager. Just at different points in the same game.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="whats-actually-happening"&gt;What&amp;rsquo;s Actually Happening&lt;/h2&gt;
&lt;p&gt;I want to get substantive for a second, because this isn&amp;rsquo;t just a vibe — there&amp;rsquo;s a real structural thing going on that&amp;rsquo;s worth naming.&lt;/p&gt;
&lt;p&gt;Benjamin Bloom, back in 1956, gave us a taxonomy of learning that holds up embarrassingly well sixty years later: &lt;em&gt;remembering, understanding, applying, analyzing, evaluating, creating.&lt;/em&gt; The bottom of the stack is trivia. The top is synthesis. Most people, when they use an LLM, are camping out at the bottom two rungs — asking it to remember things and explain things. Which is fine. Useful, even. But it&amp;rsquo;s essentially using a Formula 1 car to go to the grocery store. Good for the groceries. Tragedy for the car.&lt;/p&gt;
&lt;p&gt;The Dreyfus model of skill acquisition describes how people move from novice to expert: novices need rules, competent practitioners start seeing context, experts operate on intuition built from years of internalized pattern recognition. LLMs can shortcut the bottom of that stack — they can hand you rules, context, patterns on demand — but only if you&amp;rsquo;re doing the work to internalize what you&amp;rsquo;re receiving. If you&amp;rsquo;re just passing outputs downstream without engaging, you stay a novice forever. Except now you&amp;rsquo;re a novice with a very fast copy-paste reflex, which is somehow worse because at least the old-school novice &lt;em&gt;knew&lt;/em&gt; they were a novice.&lt;/p&gt;
&lt;p&gt;Then there&amp;rsquo;s Robert Bjork&amp;rsquo;s research on &amp;ldquo;desirable difficulties&amp;rdquo; — the annoying finding that harder learning is stickier learning. The frictionless instant answer &lt;em&gt;feels&lt;/em&gt; like learning. It registers neurologically about as well as watching someone else do a pushup. The people actually getting sharper from these tools are introducing friction deliberately: asking follow-up questions, pushing back, asking the model to steelman the opposite position, treating every output as the opening move of a conversation instead of a verdict.&lt;/p&gt;
&lt;p&gt;The Vibe Coder has removed all friction. The Non-Learner never introduced any. They both feel productive right up until they face a problem the model hasn&amp;rsquo;t seen before — which, increasingly, is the only kind of problem that actually commands a premium.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="anti-pattern-learning-the-one-nobodys-talking-about"&gt;Anti-Pattern Learning: The One Nobody&amp;rsquo;s Talking About&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s a mode of learning that barely shows up in the AI discourse, and I think it&amp;rsquo;s the most underrated thing happening right now — not learning from what works, but learning deliberately from what &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; work, and why. Anti-pattern learning.&lt;/p&gt;
&lt;p&gt;LLMs are, quietly, one of the best anti-pattern learning tools ever built. Most people just don&amp;rsquo;t know how to use them that way.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what it looks like: the model gives you something wrong. Or subtly wrong. Or right-but-fragile — the kind of answer that passes code review and explodes in staging. Most people patch it and move on. The informed minority stops and asks: &lt;em&gt;why was this wrong? What assumption led here? What would have had to be true for this to be the right answer?&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;That question is worth more than the fix. Every time.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Security research has known this forever. You don&amp;rsquo;t build secure systems by reading specs — you study how systems &lt;em&gt;failed&lt;/em&gt;, why the attacker&amp;rsquo;s model of the system differed from the defender&amp;rsquo;s, where the gap was and how it got exploited. Post-mortems exist because engineers figured out that failure is a more efficient teacher than success, if you&amp;rsquo;re paying attention correctly.&lt;/p&gt;
&lt;p&gt;LLMs fail in fascinatingly patterned ways. They confabulate confidently. They over-fit to the shape of your question. They take the path of least surprise. They have systematic blind spots that are quite legible once you know what you&amp;rsquo;re looking for. Every one of those failure modes is a lesson — about the tool, about the problem domain, about the assumptions baked into your prompt, and about gaps in your own mental model.&lt;/p&gt;
&lt;p&gt;The anti-pattern learner sees a hallucination and thinks: &lt;em&gt;interesting. What did I ask that invited this?&lt;/em&gt; The Non-Learner sees a hallucination and thinks: &lt;em&gt;ugh, these things are unreliable&lt;/em&gt; — which is itself, ironically, a kind of confabulation. The tools are reliable. Reliably patterned in their failures. The signal is there if you want it.&lt;/p&gt;
&lt;p&gt;The uncomfortable part: anti-pattern learning requires you to sit with the failure for a minute instead of moving on. It requires asking not just &amp;ldquo;why was the model wrong&amp;rdquo; but &amp;ldquo;why didn&amp;rsquo;t I catch it faster, and what does that say about what I actually understand.&amp;rdquo; That&amp;rsquo;s friction. Most people hate friction. &lt;span class="accent"&gt;The informed minority has learned to treat it like a gift.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(There&amp;rsquo;s a dedicated follow-up coming specifically on anti-pattern learning with LLMs — how to structure it deliberately, what failure modes to watch for, how to build it into your workflow. Consider this the trailer.)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-actual-asymmetry"&gt;The Actual Asymmetry&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s where it lands.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been building stuff with the help of some form of AI almost every day for the better part of three years. Infrastructure frameworks, Kubernetes platforms, geospatial analytics pipelines, documentation I&amp;rsquo;d have avoided for weeks, architecture decisions at midnight when the rest of my team didn&amp;rsquo;t exist because I am the rest of my team. Solo operator, approximately one of me.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve made every mistake I&amp;rsquo;m talking about in this post. I was a Non-Learner before I caught myself being one. I had my Vibe Coder era. I broke shit, wondered why, pasted the error, accepted the fix, and then broke shit again slightly differently. All along the way, I&amp;rsquo;ve had that Principled Refuser voice in my head telling me I should just know this already.&lt;/p&gt;
&lt;p&gt;The thing I&amp;rsquo;ve eventually come to accept is simple:&lt;/p&gt;
&lt;p&gt;Every time I used the tool to get something done, I got some&amp;hellip;thing done. Was it a good something? Was it a bad something? Didn&amp;rsquo;t matter. It was done.&lt;/p&gt;
&lt;p&gt;Every time I used the tool to &lt;em&gt;understand&lt;/em&gt; something, I got something good done &lt;em&gt;and I got a little harder to replace.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That&amp;rsquo;s the whole game.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not &amp;ldquo;fix this bug.&amp;rdquo; &lt;em&gt;&amp;ldquo;Fix this bug, explain what was actually broken, explain why the fix works, and tell me what I&amp;rsquo;d need to know to have written it myself.&amp;rdquo;&lt;/em&gt; Not &amp;ldquo;write this function.&amp;rdquo; &lt;em&gt;&amp;ldquo;Write it, then show me where it breaks, then walk me through three other ways to solve it and why you chose this one.&amp;rdquo;&lt;/em&gt; The AI is not a vending machine. It&amp;rsquo;s a sparring partner. It should be your skeptical colleague who happens to have read everything that&amp;rsquo;s ever been recorded in letters and words, and doesn&amp;rsquo;t care about your feelings.&lt;/p&gt;
&lt;p&gt;One of those patterns compounds.&lt;/p&gt;
&lt;p&gt;The other one doesn&amp;rsquo;t.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Compounding knowledge versus compounding dependence. Take any two people with the same tools, and the same hours. Twelve months later, wildly diverging trajectories. One of them is sharper, faster, and genuinely harder to compete with than they were before any of this existed. The other can&amp;rsquo;t work without the tool and can&amp;rsquo;t work well with it either, because they never built the judgment to direct it, interrogate it, or catch it when it&amp;rsquo;s confidently, elegantly, completely wrong.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;The werewolves are compounding knowledge.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The villagers are compounding dependence.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s the thing that should make the panic merchants and the principled refusers uncomfortable: the villagers think the tool &lt;em&gt;is&lt;/em&gt; the werewolf. AI taking jobs. AI replacing engineers. AI ending the craft. Every hot take, every anxious LinkedIn post, every senior engineer crossing their arms at the back of the room — they&amp;rsquo;ve all decided the threat is the machine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The machine is not the werewolf.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The person sitting across the standup from you who decided to actually learn from the thing while you were busy constructing elaborate principled objections to it? &lt;em&gt;That&amp;rsquo;s&lt;/em&gt; the werewolf. And they&amp;rsquo;re not malicious about it. They&amp;rsquo;re just paying attention in a way you aren&amp;rsquo;t — yet.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Here&amp;rsquo;s the part that still blows my mind a little.&lt;/p&gt;
&lt;p&gt;For less than the cost of a Big Mac Combo + 10-piece McNuggets, you have a thinking machine at your fingertips that has read more than any human who has ever lived. Every paper, every RFC, every poem written by Rumi, every post-mortem published by Google, every decision that led to the invention of the internet, every obscure kernel mailing list thread from 2009 that turns out to be the only documentation for the thing that&amp;rsquo;s breaking your system right now. It&amp;rsquo;s sitting there. Waiting for you to ask.&lt;/p&gt;
&lt;p&gt;The information asymmetry that defined every power structure in human history — the one that let the informed minority win every single round — is &lt;strong&gt;gone&lt;/strong&gt;. Dissolved. Equalized. For the first time ever, the villagers have access to the same information the werewolves do.&lt;/p&gt;
&lt;p&gt;And most of them are using it to rewrite emails no one&amp;rsquo;s going to read, or asking what temperature to cook a f*cking chicken breast at for the fourth goddamn time this year.&lt;/p&gt;
&lt;p&gt;Nobody&amp;rsquo;s coming for your job. Your job is being taken by someone who had access to the exact same tools you did and treated them like a curriculum instead of a calculator.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span class="accent"&gt;Twenty bucks a month buys you access to all of it. The only question is whether you actually learn from it — or keep treating it like a bottomless vending machine for answers you&amp;rsquo;ll forget by Friday.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t be a villager. Be a werewolf. Werewolves stay well informed, and well-fed.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;P.S. — This article was written with the help of Claude. And yes, I actually learned something while writing it. Practice what you preach.&lt;/em&gt;&lt;/p&gt;</content:encoded><category>ai</category><category>llms</category><category>learning</category><category>engineering</category><category>agents</category><category>anti-patterns</category></item><item><title>Hello, World — Again</title><link>https://rmnr.net/blog/hello-world/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Armen Rostamian</dc:creator><guid isPermaLink="true">https://rmnr.net/blog/hello-world/</guid><description>&lt;p&gt;It&amp;rsquo;s been a minute.&lt;/p&gt;
&lt;p&gt;The last time this site saw daylight, it was a resume template stuffed with 2018-era DevOps buzzwords and a reading list I never finished. It served its purpose — and then it didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Now it&amp;rsquo;s 2026. I&amp;rsquo;m older in the ways that count — more things built, more things broken, more teams led, more hard lessons earned. A few grey hairs to show for it - &lt;span class="accent"&gt;and genuinely lots of gratitude&lt;/span&gt;.&lt;/p&gt;</description><content:encoded>&lt;p&gt;It&amp;rsquo;s been a minute.&lt;/p&gt;
&lt;p&gt;The last time this site saw daylight, it was a resume template stuffed with 2018-era DevOps buzzwords and a reading list I never finished. It served its purpose — and then it didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Now it&amp;rsquo;s 2026. I&amp;rsquo;m older in the ways that count — more things built, more things broken, more teams led, more hard lessons earned. A few grey hairs to show for it - &lt;span class="accent"&gt;and genuinely lots of gratitude&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;|&amp;gt; This site is my corner of the internet again.&lt;/p&gt;
&lt;p&gt;Expect writing about systems, software, AI, agents, music, &lt;span class="accent"&gt;the things I&amp;rsquo;m building&lt;/span&gt;, and the occasional rant about whatever&amp;rsquo;s on my mind.&lt;/p&gt;
&lt;p&gt;More soon.&lt;/p&gt;</content:encoded><category>meta</category><category>personal</category></item></channel></rss>