“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/models endpoints in the exact shape every JS LLM library already speaks. One baseURL swap 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.io hosts 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:

  1. Original 3-step chain (@visionary → @front-end → @css-wizard) on llama3.1:8b produced flat checkbox bones. Persona violated by the model.
  2. 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:14b on @studio: card landed, but @css-wizard rebuilt from scratch and dropped the JS again.
  3. 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.
  4. 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 on deepseek-coder-v2:16b.
  5. 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 missing expect_files=["spec.md"] so the spec wasn’t even on disk to read.
  6. Both fixes baked into @studio’s persona: explicit expect_files=["spec.md"] on step 1, mandatory read_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 like bg--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 default expect_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 doctor CLI carryover from Day 18 still queued.