SOUNDTRACK // IRON UNDER PRESSURE
JEZWEB // GRID OSv2026
JEZWEB

> product // office-town // the making of

Office Town
how it was made.

Office Town was built in ten days across five repos: a cloud worker, a desktop app, a Go sync daemon, an agent plugin and a set of open content packs, nearly all of it public from day one. The idea was simple and the execution was not: give an AI agent a personal cortex it can read and write as plain files on your own Cloudflare. What that took is in the log.

282
commits
5
repos
10
days, 26 May – 4 June 2026
191
commits in the cloud worker alone

The short version

Office Town started as a methodology document, role files, a SETUP.md, and a named cast of specialists (boss, worker, librarian, scout) that an agent could drop into and immediately know how to work. Within 24 hours it became something more: a Cloudflare Worker serving live MCP tools, a D1-backed wiki, a file pipeline that reads PDFs and images, a Go daemon bisyncing your local ~/OfficeTown folder to R2, and an agent plugin that greets you by surfacing whatever is in your inbox. The arc is not glamorous. Commit by commit, each piece of the install story broke in a new way. 'INSTALL.md is HOST-AGNOSTIC, NOT a Goose-required install' appears across four repos on the same day, written after a test run on an empty Mac revealed every place the docs had assumed too much. What mattered most was the decision, made early and held, that the cortex is just files. No proprietary format, no black box. You open a Finder window and read your AI's memory.

● 26 May 2026: day one

Template, then cloud, on the same day

The office-town repo opened with a methodology: role files, building briefings, a named cast of five specialists and a SETUP.md. Before the day was out the cloud repo had appeared, architecture spec, a milestone plan, and the first M1 dogfood pass. The plugin repo arrived too, committing Office Town as an Open Plugin Spec package. Three of the five repos landed on day one.

● 27 May 2026: collapse and clarify

Five workers become one; the docs get honest

The cloud repo had grown into a monorepo of five Workers. The 'refactor/single-worker-collapse' PR merged that day and the Deploy to Cloudflare button went live. The same day surfaced a subtler problem: the install docs had drifted into Goose-specific assumptions. A cold test run on an empty Mac produced a round of corrections that propagated across all four repos, fourteen INSTALL.md commits in one day, each one a specific wrong thing discovered and fixed. The Go sync daemon (officetowd) appeared in the afternoon, shipping a bisync engine, a watcher, a manifest and an R2 client in its first two commits.

● 28 May 2026: the cortex grows up

Wiki, dashboard, dossier, and a sync rewrite

The dashboard gained four wiki views, inline dossier prompts, a file upload drop zone and wikilink resolution. Seven default example entries were seeded on cold install. The officetowd daemon rewrote its sync architecture from direct-R2 to HTTP-via-worker, making the Worker the canonical write orchestrator, and published its first GitHub Release with a CGO-free build. A string of design docs accumulated in .jez/artifacts: cortex shape, curator patterns, onboarding by dossier extraction, a Tier 1 town-view dashboard mockup.

● 29 May 2026: media, identity, and workflows

Files that read themselves; a daemon that runs jobs

The files MCP gained multimodal image understanding (Gemma 4 describing images and saving a sidecar), video understanding via Media Transformations, PPTX text extraction, and audio transcription via Whisper, each with honest errors for formats it couldn't handle (HEIC, encrypted PPTX). The daemon acquired a stable device ID, a self-update mechanism, an install-service command for persistent auto-start, and the ability to run cloud-dispatched Goose recipes. A live smoke suite was added to the cloud repo. The installer learned to survive ~/.local/bin not being on PATH.

● 30 May 2026: apps

Agents build their own apps

In a single day the cloud repo gained a complete app platform: agents could call create_app to author an interactive app, create_share_app to generate a magic-link view, and launch_app to open it. A catalogue shipped with a task board, mini-CRM, quote-to-cash and a compliance deadlines app, each backed by live wiki collections. The Goose Apps page was wired to display Office Town panels. The officetowd daemon learned to reconcile the Goose app list on each sync.

● 31 May – 4 June 2026: harden and simplify

Security, a route collapse, and the install story rewritten

A security pass added constant-time auth, blocked submit-tokens on the media endpoint and set CSP on agent apps. Thirteen page handlers were collapsed into two loops. The install story went through its final form: from a Deploy to Cloudflare button with form fields, to a Goose-driven installer where the agent provisions everything, one prompt, no form. A final commit on 4 June landed the definitive one-command setup path on /dashboard/connect.

git log: “INSTALL.md: explicit 'Office Town is content, not a runtime' framing”

Committed simultaneously across four repos on 27 May: the clearest single line the project ever wrote about what it actually is.

Tried, measured, set aside: the judgement lives here as much as in what shipped.

● rebuilt

Five workers collapsed into one

The cloud repo started as a monorepo of five separate Cloudflare Workers. On day two the entire thing was refactored into a single worker, simpler to deploy, easier to reason about, and the thing that made the Deploy to Cloudflare button possible.

● pivoted

Goose-specific to host-agnostic and back

The install docs went host-agnostic ('Office Town is content, not a runtime') after a cold test run, then pivoted back to Goose-first framing once it was clear that Goose was the natural host and hedging the docs just confused the story. 'Reposition: Office Town is capabilities for Goose, not a host-agnostic methodology' is a single commit on 27 May that says it plainly.

● rebuilt

officetowd: direct R2 to HTTP-via-worker

The sync daemon launched writing directly to R2 via API. On 28 May it was rewritten to route all writes through the Worker instead, v0.2.0, so the Worker could enforce schema, update D1 and stay the single authoritative write path.

● dropped

SMTP2Go and a devops MCP removed

An early design included SMTP2Go for outbound email and a devops MCP in the stack. Both were dropped: email was moved to Cloudflare-native bindings only, and the devops surface was cut to keep the install lean.

Want something built like this?

This is how we work: in the open, measured, honest about the dead ends.