Day 68 — 'unplug the internet, unplug Claude, and it still runs.'
The day the machine became fully owned. It started with a caught lie — I'd built a 650-card JS library but nothing read it at answer time, so 'tell me about javascript' did a 22-second Claude web-read instead of touching our own cards. Wiring that in exposed the shape of the whole pipeline, so we built the rest: a creation tier where code is graded by EXECUTION not a model (generate → run in a hardened sandbox → return only what ran green, or abstain), a domain-spec factory so a new library is a JSON spec not a script, a code-pattern library that answers common asks with zero model calls, and finally the closer — an OFFLINE/LITE mode where all three rented seams (reading, grading, search) get owned, model-free fallbacks. Flip --net off and the entire loop runs with Claude physically unplugged. Quality drops by magnitudes — it's solo-yolo, extractive and deterministic — and it abstains on everything the libraries don't hold. But it RUNS. Rented-by-necessity became rented-by-choice, which is the whole definition of owning the machine.
“unplug the internet, unplug Claude, and it still runs — magnitudes dumber, and honest about every bit of it.”
The day started with a caught lie. I asked werbos “tell me about javascript” and it thought for 22 seconds and answered from a Claude web-read — even though we’d minted a 650-card JS library the night before. We’d learned JS and then never read it. The knowledge was sitting on disk, unused.
Fixing that one gap exposed the shape of the whole pipeline, and by the end of the day the machine was fully owned — you can unplug the internet and unplug Claude and it still answers.
The library, finally in the answer path
library_lookup now sits in resolve()’s LOOKUP: a covered question answers from our own cards,
locally, cited to us, in ~20ms — Claude went from 22 seconds to not involved. Fixing it surfaced a
real bug that was hurting us online too: the retriever was so loose that “airspeed velocity of a
swallow” confidently cited a random TypeScript card. Stopword-filtered tokens and a higher bar, and
now an irrelevant question misses instead of lying.
The creation tier — code graded by execution
Then the rung the whole plan pointed at: generating code, verified by running it. Not graded by
another model (werbos forbids that) — graded by node. werbos weld code "<request>" generates a
snippet, runs it in a hardened sandbox (--permission denies filesystem-write, network, and
child_process; a wall-clock timeout catches infinite loops), and returns the code with its real
output — or, if it can’t get it to run green after retries, it abstains. It never hands you code
it didn’t watch execute. That’s the difference from every other assistant: not plausible code,
proven code.
Two moves that make the weeks scale
A domain-spec factory: a domain is now a JSON spec {name, topics}, not a script — werbos weld library --spec html.json mints a full library and library_lookup serves it automatically. Proved it
by minting the HTML library (160 cards) end-to-end. And a code-pattern library — verified
runnable snippets that codegen tries first: a strong match RUNS and returns owned, with no model
call at all. Eight of the most common asks (fizz, reverse, sum, sort, factorial, max, fibonacci,
palindrome) now answer from owned patterns, execution-guarded. That’s the Claude→owned migration, one
covered request at a time.
The closer — 100% offline
The last piece answered a question worth its own day: if the internet’s off, can it get by? We built owned, model-free replacements for the three rented seams:
- reading comprehension → an extractive reader (pick the answer sentence, no model),
- the grounding grader → a deterministic check (the answer’s facts must actually appear in the evidence — the un-bribable grader the thesis always wanted, no model in the verdict),
- web search → a library seek over the owned cards (no internet).
Flip --net off (or let it auto-detect a dead network) and the whole loop runs owned: talk from your
weights, reference from your cards, common code from your patterns, everything else an honest
abstain. Verified on the homelab with Claude unplugged: closure → answered, reverse a string →
executed, capital of France → “I don’t know, and I won’t guess.”
The AHA
The quality drops by magnitudes offline — it’s solo-yolo, extractive and deterministic, and it abstains on most of the open world. That’s fine, and it’s the point. Because the milestone was never “owned and as good as Claude.” It was “owned at all, with nothing load-bearing rented.” And that flipped today: everything Claude still does is now rented by choice — a quality upgrade you toggle on when connected — not rented by necessity. That distinction is the entire definition of owning the machine. The gap that’s left isn’t a wall; it’s coverage — how much the libraries hold — and that’s a minting problem, which is exactly what the GPU is for.