Why an operating system

Every feature is an app. Every app is a window.

Living Code OS is a company brain that is also an operating board. The operating system part is not a skin over a chat box; it is a doctrine written into the code. Operating system here means a shell for this product's own features, a window manager, a dock and apps, not a replacement for the computer it runs in.

The thesis

One brain. Many mouths.

Whoever asks, by whatever channel, searches the same memory and reads the same originals.

board chatvoicemessaging botphone linestask boardtwice-daily briefresearchMCP door ×2one retrieval function

Every recording, email, file, text and call goes in through one door, and every question comes out through one door.

A single ingestion function writes the original whole to R2, registers one row in D1, cuts the text into 1,100-character chunks with 150 of overlap, embeds each with bge-m3 on Workers AI (1,024 dimensions) into Vectorize, and has Llama 3.3 70B extract people, companies, projects and topics. Everything except the original is derived and can be rebuilt.

A single retrieval function fires four legs in parallel, title, vector, BM25 full-text and entity anchor, filters each by room access, and fuses them with reciprocal rank fusion (constant 60; weighted 1.0 vector, 0.9 full-text, 0.85 title, 0.8 anchor). An agent ranks on 700-character snippets, then reads the original in 14,000-character pages. The board, a phone line and a partner's MCP client all call that one function.

The dock, as shipped. Eleven tiles.
Why windows

A capability is a window, not a route.

A new feature does not get a page. It registers with the window manager and files its events into the notification center like everything else.

Open anything on the board and it tiles into free space, remembers its size, minimizes to a chip, and reports to one notification center. Code enforces that, not convention.

Every panel registers with one window manager, which fronts it, attaches resize grips (minimum 300 by 160 pixels, sizes remembered per window), and watches the hidden attribute so the registry stays truthful. New windows tile rather than cascade: the placer walks a 28-pixel grid and takes the first slot that clears a 14-pixel pad; if nothing fits it narrows the window to a column of at least 360 pixels, then stacks. A window you dragged by hand is never re-tiled.

Minimize shrinks the panel toward the dock at 4 percent scale and leaves a chip. Below 768 pixels the dock becomes a right-edge rail: swipe to summon it, flick right to throw an app off screen.

Same rule for new apps

The Apps folder is open-ended.

Seven built-ins, plus every connector that declares an app URL.

The seven

Brain, Control deck, Memory Graph, Connectors, Costs, Builds and About Board OS.

Events go to one place

A Notification Center on the right edge.

Packets become category-hued cards with per-category mutes.

Where mutes live

In a settings table on the server. An agent can flip one with set_ui_setting, which files a packet so every open board applies it.

Nothing generated is lost

Closing a generated panel archives it.

The Archive keeps the newest sixty, with restore, open and download.

What a generated panel is

Model-authored HTML in an iframe sandboxed to scripts only, capped at 90,000 characters.

Why the graph sits behind everything

The memory is visible, all the time.

The constellation behind every window is the graph itself, read live from two tables. Not a picture of the data. The data.

project · focused meteor
hue = kind · brightness = recency · size = mention count · dashed = provenance thread

Every person, company, project and topic hangs in a 3D field behind the windows, brighter the more recently it was seen. When the resident agent talks, that field becomes its face.

The graph page reads exactly two tables, entities and edges: the 800 most-mentioned entities by default, up to 25,000. Every entity is a bloomed sphere. Hue is kind: person blue, company green, project amber, topic violet. Brightness is recency, a glow from 0.55 to 1.0 over 180 days. Size is mention count, clamped to 24. A node seen within the last six minutes, and new to this session, streaks in as a meteor.

Search does not happen in the scene; dossiers, events and community briefs serve answer time and never reach the display. The scene is steered instead. When an agent calls show_on_graph, a focus packet parks the camera 130 units beyond the node over 1.4 seconds, and a reference in a brief draws a glowing thread from the card to the node. The cinematic tour is camera-only; node positions are never touched.

When the resident agent speaks (Jeffery on this deployment; every deployment names its own), the page takes 18,030 nodes, 17,700 for a baked head mesh plus 330 for lips, irises and eyelids, and eases each toward a point in face space. A jaw drops up to 0.16 face units with the live audio level; blinks arrive 2.8 to 6.6 seconds apart; gaze drifts. When the conversation ends, each face node gets a radial kick of 26 to 45 units and the face detonates back into the constellation.

Said plainly: the lip sync is amplitude only. A 128-bin FFT sums bins 2 through 39 into a level between 0 and 1, posted every animation frame. There are no visemes and no separate listening state. That is what it is.

Why live morphing

Every open board moves together.

Two boards side by side, or a board and a phone, show the same state within a network round trip. No reload.

any surfaceboard Durable Objectsequence numberjournal to D1broadcastevery socket

Approve a card on your phone and it leaves the tray on the desk. Ask the agent to focus the graph and it swings on every screen. The board is pushed, not polled.

The client opens one WebSocket to the board Durable Object and reconnects with backoff from one to fifteen seconds. Chat turns, settings, card state, focus, phone events, file events and build logs are all packets. Every surface files them into that one object, which assigns a sequence number, journals to D1, and broadcasts to every socket.

Rendering is differential, keyed on version, last run and flip state, so unchanged cards never flash. A show-card packet slides the card in from the nearest edge; a focus packet posts to the graph; a settings packet applies settings.

Why agents are colleagues with belts

Colleagues, not sessions.

A session is disposable. A colleague has a name, a directive you can edit live, a budget, and a record of every run.

The Hive lists workers the way a team directory lists people: by name, with a state dot, a chat column, their routines, and a log of what they did. You can change a worker's instructions before its next run, without a deploy.

Each fleet worker is its own Cloudflare Worker, born from a spec, with its own cron. It is two documents: code, and a directive row edited live in the Hive and re-read on every wake. Each run senses, reasons with one gateway call, acts by filing one packet, and records a flight-recorder row with a JSON trace and its cost, always, in a finally block.

A gateway holds the API key; workers never do. It compares today's spend to the daily budget, fifty cents by default, and returns 429 when it is spent. Budget means a cost ceiling, not financial authority: it pays for model calls and approves nothing.

The resident agent is the same idea with a bigger belt: about eighty tools, a written doctrine, and the foreman's role in the Hive.

Why humans approve, structurally

Reading is free. Acting waits for a person.

The line between reading and acting is not a setting. It is the shape of the code.

Pending · shipwright build · filed by the quartermaster
feature Conflicts strip shows the reason a move was requested budget $10.00 · cost ceiling, stops on overrun target staging · CI · browser test · then a merge request for you notes editable until approved
ApproveDenyEdit fields

Agents search, summarize, draft, propose and file. Sending an email, moving a meeting, starting a paid build, birthing a worker, or merging to production lands on a tray as a card and waits for a person.

Every surface that wants a real-world effect calls one function that inserts a pending row with the exact JSON payload that will run and journals a request packet. Nothing executes until a resolve function runs with approval, reachable only from the board tray, the Control deck's approve tool, or the paired messaging chat. Resolve refuses a second resolution and applies tray edits into the stored parameters. What is in the fields at approval is what runs.

Above the money line of twenty-five dollars, approving demands a PIN, a second factor layered on scope, so a leaked operator key can work the tray but cannot spend.

If the executor throws, the action is marked failed with the error text and the board raises an interrupting card: "Approved, but it did NOT execute." That card exists because three approved ships once failed silently. The same lesson is a written line in the resident agent's doctrine: never report an action you did not see succeed.

Why it is built in public view

Built where you can watch.

Streamed build sessions, a weekly changelog, a demo, and a ledger of what the week cost.

Read the build log →

The plan is to build the rest of this in front of people: streamed sessions, several developers, and a weekly publish of a changelog, a demo, and a ledger of what the week cost.

The sessions worth watching are the ones where the system builds itself. The Shipwright building a feature: plan, write the files, verify them in a sandbox, pull request to staging, CI, a browser test judged by a different model lineage, then a merge request for a person. Production merges are never automated. A worker born in the Foundry, every step streamed to the Hive. A machine paired through the Hand. The face speaking for the first time.

The work splits along the seams this site describes: memory, the shell and apps, the graph and avatar, the fleet, the communication surfaces, the Hand, and the platform plumbing. Every model call is already metered into one table with its cost, so the weekly ledger is not a new thing to build.

The operating system metaphor is literal in the code, not decorative.
Early access

It isn't available yet. The list hears first.

Leave an address. When there is something to hand you, you will know before anyone.