Day 19 — 'thesis on disk, studio on its feet.'
Day 18 closed with the surface-tightening pass: kanban triage, --studio opt-in, update flow, tilde-collapse. Day 19's work split in two: morning was strategy crystallizing into durable docs (THESIS, ARENA.1, OAI.1), evening was closing the studio loop — the design studio went from 'flat checkbox bones' to 'blank placeholder' to 'modern card with working JS' in one session. The structural fix: AO.1 Part 3.1 — a project-scoped read_file tool that lets the orchestrator hydrate the spec from disk between dispatches, instead of working from the 240-char content_preview dispatch_to_agent returns. Plus WHITEPAPER §2 landed (v0.13 → v0.14).
“thesis on disk, studio on its feet.”
Two halves of one day
Day 18 was the surface-tightening pass. Day 19 split into two unrelated halves that compose better than they look:
- Morning: strategy moved from head to disk. THESIS.md + two queued sprint docs (ARENA.1, OAI.1) captured the AI-game- company arc that had been forming for weeks in conversation.
- Evening: the design studio actually shipped. The chain that’s been working since SD.2 was producing flat checkbox bones; tonight it produced modern card UI with working JavaScript on first emit.
The first half makes the case for why werbos exists in 2026’s hosted-AI landscape. The second half makes one of werbos’s flagship features finally usable. Strategy and shipping landed on the same day.
THESIS.md — the strategy as a durable doc (b4df0c1)
Three docs now live at repo root, each doing one thing:
- GO-LIVE.md — what exists that needs verification before public release.
- IDEAS.md — what doesn’t exist yet that might be worth building.
- THESIS.md — why werbos exists + how the pieces compound.
THESIS.md captures the principle that has been load-bearing since at least Day 12 but never written down: the operator owns their data. Not the platform, not the model provider, not the cloud. Tailscale + Syncthing as the network + data layer. Hugo dogfooding as the proof. Four distribution paths (NX.1 / Tauri.1 / ARENA.1 / OAI.1) that target four different audiences without competing with each other. Three user- acquisition vectors: games funnel, 30-day Medium+HN feature parade, MCP ecosystem visibility.
The doc closes with what werbos is not — guardrails to keep the strategy honest. The headline launch piece is now scoped: a “How I Built a Full LLM in 30 Days — Let Me Show You the Features” Medium post, cross-posted to HN, timed for the Day 30 window. Build the artifact; acquisition is a side effect.
ARENA.1 + OAI.1 sprints (08891ef)
The strategy doc named four distribution paths. Two of them shipped as full sprint specs tonight:
- OAI.1 — OpenAI-compatible HTTP API. New
/v1/chat/completions+/v1/modelsendpoints in the exact shape every JS LLM library already speaks. OnebaseURLswap and any OpenAI-targeted client now uses werbos as its backend. Five-day sprint. Prerequisite for ARENA.1. - ARENA.1 — werbos as a hosted brain for SPA games.
Static games on any CDN talk to werbos via OAI.1; players
don’t install anything. Public
werbos.iohosts a free brain; BYO werbos URL points at the operator’s own box (their fine-tunes, their archives, their privacy).
The two compose: OAI.1 ships the universal protocol; ARENA.1 ships the first consumer of it. The first-game decision is explicitly operator-owned in the sprint doc — TTT for safe demo, chess for skill-ladder appeal, or a werbos-unique persona-driven game for moat. The doc recommends the third (chess engines already crush LLMs at chess; werbos’s persona system is the thing that doesn’t exist anywhere else), but leaves the call.
IDEAS.md got cross-references so the queued sprint backlog threads through to the strategic narrative. Caught a gap: MCP.1 wasn’t listed in IDEAS’ “already queued” section. Fixed.
WHITEPAPER §2 drafted — v0.13 → v0.14 (9ed21fc)
The whitepaper has been stubbed since v0.1 with 13 section stubs
each carrying _[DRAFT PENDING]_ and a “What this covers” note.
Tonight §2 came off the stub list:
- §2.1 Requirements. Seven properties an AI agent system must satisfy: capability, sovereignty, auditability, archivability, composability, low-friction, learning- positive. The first three are load-bearing; the other four decide whether sovereignty is coherent as a long-term artifact rather than a one-off escape from a vendor.
- §2.2 Sovereignty Minimization. Six trust requirements a hosted-API agent imposes (provider, hosting infra, billing, ToS, network path, third-party integrators) paired with how werbos eliminates each — by removing the party, not by minimizing what is trusted about it. Closes on structural vs policy-based sovereignty.
Mirrors TVS §2’s two-subsection shape exactly. Status block and changelog updated. Twelve sections still stubbed; the working order is “fill what’s sharpest, not what’s next in the TOC” (v0.6 changelog precedent).
AO.1 Part 3.1 — project-scoped read_file (0047ca3)
The bug that’s been embarrassing the design studio since SD.2:
the orchestrator dispatches to @front-end, gets back a 240-char
content_preview, then dispatches to @css-wizard with the
preview as the brief. @css-wizard, lacking the actual HTML to
restyle, rebuilds the whole page from scratch and silently
drops the JavaScript. Operator sees a pretty placeholder; click
“Add Task” and nothing happens.
The fix mirrors AO.1 Part 2.5’s bound_project injection
pattern: when SessionRegistry.create(project=...) binds a
chat to a studio project, register a read_file tool whose
workdir is clamped to ~/werbos/projects/<project>/. The
orchestrator can now read_file(path="spec.md") with no slug
prefix — same shape dispatch_to_agent already enjoys for
project resolution.
Symmetric replacement when the operator pre-registered
read_file globally via --tools read_file: the bound session
swaps the projects-root-scoped variant for the project-scoped
one. Strictly narrows surface area, never widens it.
Mirrors the screenshot_url rebind pattern (Purple-Team H-2).
For unbound bare chats, the operator-registered tool is
preserved unchanged.
Five regression tests pin the contract: bound session registers the tool; sibling-project read is refused; the bound replacement narrows the operator’s globally-registered variant; unbound session does not silently gain the tool; unbound session keeps the operator-registered tool unchanged. 256 neighboring session tests still pass.
The persona-pivot session that followed
The code change unblocked, but the operator still had to chase small-model failure modes through the chain. The arc of the evening, condensed:
- Original 3-step chain (
@visionary → @front-end → @css-wizard) onllama3.1:8bproduced flat checkbox bones. Persona violated by the model. - Persona edits (card-shaped scaffolding mandate in
@front-end, Tailwind-CDN allowance in @css-wizard, design-
direction section in @visionary) + model swap to
qwen2.5:14bon @studio: card landed, but @css-wizard rebuilt from scratch and dropped the JS again. - AO.1 Part 3.1 wired in: @studio could now hand @css-wizard the actual HTML. But qwen2.5:14b emitted three paragraphs of prose before the code fence and got truncated mid-output — partial styled HTML, no closing fence, no JS at all.
- Pivot to 2-step (
@visionary → @front-end), with @css-wizard reserved for explicit follow-up polish requests. @front-end now produces styled-and-working in a single emit ondeepseek-coder-v2:16b. - First fresh-project test: blank slate placeholder, because
@studio passed the spec’s 240-char preview to @front-end
instead of
read_file-ing the full spec.md. Plus the dispatch call to @visionary was missingexpect_files=["spec.md"]so the spec wasn’t even on disk to read. - Both fixes baked into @studio’s persona: explicit
expect_files=["spec.md"]on step 1, mandatoryread_file("spec.md")on step 2, full spec pasted into step 3’s brief. Plus @front-end persona hardened: never emit@tailwind base/components/utilities(PostCSS-only — silently fails in CDN runtime), never invent class names likebg--bg(mixing CSS-var syntax with Tailwind).
Final result: clean card with shadow, focused input ring, working Enter-to-add, delete button with hover state. Two of four brief features (edit + strikeout) still missing — but that’s a model-discipline failure, not a wiring failure. The LoRA path (Path B) addresses spec-completeness specifically.
AHAs
- 240 characters is not enough context for an orchestrator. Every multi-agent pipeline needs a disk-mediated handoff — the orchestrator’s context budget cannot hold each specialist’s full artifact. The “read full result from disk between dispatches” pattern generalizes far beyond the design studio.
- Default tool arguments are silent failure modes.
dispatch_to_agent’s defaultexpect_files=["index.html"]was sensible at write time but silently dropped @visionary’s spec.md every run. The right-on-paper default became the load-bearing bug. Every default deserves a “what if the caller forgets to override?” inspection. - Strategy is also an artifact. The THESIS / ARENA / OAI trio took an hour of writing and produced no working code. It’s still real work — durable scratch the operator can reference and the next person reading the repo can absorb. Hand-rolled strategy docs at repo root are a curriculum choice, not a bureaucratic one.
- The persona is a contract the model can break. Tonight’s iteration walked through three distinct persona violations in a row: prose before fence, invented Tailwind classes, PostCSS directives in a CDN context. Each fix was a sharper rule. The class of bug never fully closes — at some point the LoRA or a bigger base model is cheaper than another persona rewrite.
Quote of the day
“non functional….but pretty!”
Halfway through the persona-pivot session, after the @css-wizard rebuild had produced a styled card with no JavaScript. The pretty-but-broken state was a real waypoint — not the destination, but proof that the visual layer could land before the functional layer caught up. Two more iterations got both at once.
Carryover
- Path B — design-specialist LoRA. Tonight closed the visual-quality gap to ~80%; the remaining ~20% (consistent feature coverage from the brief, no cherry-picking which of add/edit/remove/strikeout to ship) is the LoRA’s job. Corpus design + screenshot eval Suite are the right opening moves. Documented in the AO.1 follow-up.
- Project root on SR8 is ephemeral.
/root/werbos/projects/inside the werbos container is NOT volume-mounted. Container rebuilds wipe projects. Agents at/data/agents/survive because /data IS mounted. Sprint-worthy: migrate projects to/data/projects/so they survive deploys. - Whitepaper §4, §6, §9, §12 still stubbed. §4 (foundational primitives) is mostly textbook content. §9 (agent safety) and §12 (threat analysis) would benefit from the Black/Purple/Red-Team work that’s shipped since v0.13 was written — significant material to fold in.
- docs/architecture.md is stale. Last updated Day 8 (2026-05-09). The orchestration plane, V1.x sprints, AO.x chain, design studio, persona system, and tonight’s project-scoped read_file are all unrepresented.
- /dashboard/mcp screen +
werbos doctorCLI carryover from Day 18 still queued.