Selected work

Creator · AI agents · 2026

A control room for a one-person company run by AI agents, where the founder watches the work and approves what ships.

  • Claude Agent SDK
  • Node.js
  • Three.js
  • Vite
  • Firebase
  • Multi-agent
  • node:test
Agent Office isometric 3D office with named AI staff working in separate rooms and a Today panel on the side
The office: named staff in their rooms, with today's plan alongside.
  • 11

    AI staff

  • 1,600+

    Tests

  • 48 h

    Pending approvals expire

  • 304

    Commits in two weeks

Agent Office is a founder control room built on the Claude Agent SDK (Node 20 ESM, no build step). Eleven AI staff plan, research, write copy, design stills and short videos, pull real metrics, write reports and ask for approval. I watch them work in a 3D office built with Vite and Three.js and decide what goes out. The first company it runs is my own Don't Forget Dad, a medication-reminder app. It is a working local prototype used for one company: no external users, no published results.

Staff with limits

Each of the 11 staff members has a SOUL.md whose front matter lists the tools it may call, and policy.js enforces that list on every tool call. Agents get no shell, file or web tools, only harness tools such as message_agent, call_meeting and assign_task. Meeting consensus is computed in code from the votes, not by asking a model. Claude Opus runs the CEO and design roles; Claude Sonnet runs the rest.

Approval gate in code

Work moves through a research note with cited sources, copy and design, manager review (up to 3 rounds), a hidden CEO review gate, then my decision. The gate itself is enforced in code, not in prompts: a file-backed queue stores the exact payload and a hash, publish and spend re-check the hash and refuse if anything changed, and pending approvals expire after 48 hours. A kill switch stops everything, and the default is draft-only. Publishing behind approval covers X, Instagram and Facebook Page, TikTok inbox drafts, YouTube Shorts (private by default), LinkedIn, with Buffer as a fallback.

Design and claims checks

Stills are laid out in HTML and CSS and rendered in headless Chromium, then pass deterministic craft checks for contrast, thumbnail legibility, hierarchy and word count. Short videos render locally with HyperFrames. The draft_post tool refuses copy that matches block rules, and any post without a research note under 14 days old. Segment email campaigns keep a 10% random holdout measured at 7, 14 and 30 days, and groups under 30 are flagged as too small to judge.

Staying up and staying honest

A scheduler ticks every 30 seconds with named jobs such as the morning plan, data pull, ads report and budget check, and a no-model publisher runs on each tick. A no-model supervisor looks for 5 kinds of stalled work every 10 minutes and restarts it, capped per thread and per day. Cost controls set a monthly company cap, an ad cap and per-agent token caps, and only real money counts toward the cap. In live mode every animation in the office comes from a real agent event.

Secrets and scope

Secrets live in an encrypted local vault outside the repo, text from outside is wrapped as untrusted, and the local agent server binds to 127.0.0.1 only. A phone mode sits behind a one-time pairing code. It has about 1,600 tests (node --test) and about 304 commits over two weeks in October 2026.

Highlights

  • 11 AI staff, each with a SOUL.md that lists permitted tools, enforced by policy.js on every call
  • No shell, file or web tools for agents, only harness tools
  • Approval gate enforced in code: exact payload and hash stored, re-checked on publish and spend
  • Pending approvals expire after 48 hours, with a kill switch and draft-only default
  • Claims gate: no post without a research note under 14 days old, and block rules on copy
  • Deterministic design checks on stills rendered in headless Chromium
  • No-model supervisor restarts 5 kinds of stalled work every 10 minutes
  • About 1,600 tests with node --test

© 2026 Theophilus Rex Danquah

Accra, Ghana