Building the Machine · Lesson 2
What you'll be able to do: wire three AI "seats" — Architect, Drafter, Sandbox — so that each is filled by whichever model currently fits the job (one running free on your own graphics card, two rented by the word), and swap any occupant with a one-line, human-reviewed change. You'll also be able to prove every seat is actually alive before trusting it.
ollama list. Whatever you believed was on your machine, the list is what's actually there.A team doesn't rebuild its playbook when the quarterback changes. The position — its
responsibilities, its place in every play — is fixed; the depth chart says who plays it this
week. Coaches bench a struggling starter with a pen stroke, not a stadium renovation. Our
manifest is that chart: Architect, Drafter, Sandbox are positions;
claude-sonnet-5, hermes3:8b, gemini-3.1-flash-lite are
this week's starters. The Drafter even plays for free — it lives on our own graphics card, so
every snap costs zero dollars.
Where the analogy ends: players practice together, adapt, and remember last week's game. Models do none of that — swapping a seat swaps the entire mind, with no memory carried over, which is exactly why the build keeps all real state in the repo, never in the model. And unlike players, every model speaks the identical interface, so there is no "system fit" risk: if it answers the dialect, it can sit in the seat.
ollama list, check
LM Studio. We found: the planned local hire didn't exist anywhere — and the
"it's CPU-served" note in our own docs was a myth. The hardware check (one GPU query) showed a
12 GB card sitting idle.ollama pull hermes3:8b, then serve
it — and here's the trap: the tray app's managed server can be dead while its icon looks
healthy. Run ollama serve in the foreground in its own labeled window; it prints
its GPU discovery immediately. Confirm residence with ollama ps — you want 100%
GPU. You should see: the model answering locally, for free.null — nothing secret exists for it to leak. You should see: zero
placeholder entries left, and no secrets anywhere in the file.Three parts, strictly separated: the Seat (a named role with a job description — Architect, Drafter, Sandbox), the Occupant (whichever model currently holds the seat: a provider, an endpoint URL, one exact model string), and the Shim (one small piece of code that speaks the same OpenAI-style dialect to every seat, resolving secrets only at the moment of the call). The manifest file is the depth chart: it names each seat's occupant. Changing a line changes the starter; nothing else in the system moves.
Why seats instead of hard-coded models: a hard-coded model is a marriage — swapping it means touching code, retesting everything, and hoping nothing else depended on its quirks. A seat is employment at will, and the divorce is a one-line diff that a human reviews like any other change. Hiring policy follows the resource ladder: cheapest capable executor first. The Drafter runs local because its marginal cost is literally zero and its output is CI-gated anyway — a wrong draft costs nothing but electrons; the gate catches it. The Sandbox seat is escalation-only: the first rung for log triage is deterministic filtering (no model at all), and the long-context model is consulted only when filtered context genuinely overflows. The Architect seat stays premium because structure errors are the expensive kind. Note what the shim deliberately does NOT do: no retries, no fallbacks. Retry policy is the circuit breaker's job (next module) — a client that quietly retries is a client that quietly spends, and hidden spending is exactly what the safety layer exists to make impossible. Keys are resolved from the environment at call time, never persisted, never logged, and the error message for a missing key names the variable — not the value.
Pass each gate before moving on. These are permission to advance, not hazing.
ollama ps), not assumed it.Lesson complete — you can now staff a roster where every seat is a decision, not a dependency: local where free, rented where necessary, swappable by PR always. Next: Lesson 3 — The Fuse Box.