Work with agents
that feel like coworkers.
A terminal app where your opencode boss and sub-agents clock in as coworkers on a living floor. See the work move, talk to the boss like a person, and come back tomorrow to an office that remembers.
Native CLI · demo first · live opencode when you're ready
A team that works in the open
More hands on the work. One floor where it all happens.
Hand the busywork to the team without handing over the context. You stay close to the decisions — and out of the scrollback.
PERMISSION_QUEUE — 1 of 3
ALLOW ONCE · yRun this action, ask again next time
ALLOW ALWAYS · aNever ask for this action again
boss (oikonomos)
Ship the auth fix, get dikastes to review it, and post a digest to #eng when it's green.
Work Thread ›
Live work thread
AGENTMEMORY_SIGNALS
BOSS_SESSION: oikonomos-04
BOARD_ACTION
TICKET_OPENED — flaky-test-482
Permission Queue
The office keeps moving while asks wait for your call. Requests stack as 1 of N with allow-once, always, or reject — your judgment requested, never hijacked.
Learn more
Work Threads
Hear what changed from the worker who changed it. Diffs, tool calls, and thinking stay attached to the work, so review feels like a handoff — not a log you have to dig through.
Learn more
A Team That Remembers
1 office=theboringoffice.attach(server="127.0.0.1:4096")
2 roster=office.employees()
3 memory=office.recall("yesterday's batch")The office runs on agentmemory. Decisions, lessons, and yesterday's batch survive every ctrl+q — nobody on your team ever starts from a blank slate.
Learn moreAny Model, Any Backend

Swap the boss's model with /model, or attach to any running opencode server. No lock-in — run the office locally or point it at your own backend. Claude Code support is coming soon: same floor, more coworkers.
Learn moreKind to your machine.
A living office sounds expensive. It isn't. This is a terminal app that respects the box it runs on — we sweat the boring parts carefully so the agents can be the interesting ones.
One file on disk
Written in Go and shipped as a single static binary. No Electron, no Chromium, no runtime to install. The whole office is one file you can delete.
The floor moves when work moves
Sprites walk when the opencode server's event stream says something happened — never on animation timers. Coffee steam and rack LEDs tick gently in the background, so an idle office stays cheap.
A power governor, built in
/power auto, saver, or performance. Saver slows the tick and coalesces renders; performance keeps the floor crisp. Your battery gets a say.
Polling with manners
When nothing changes, quiet polls stretch out. The moment work starts, they snap back. A calm board costs next to nothing.
Sound, synthesized
UI sounds are synthesized in pure Go at runtime — no audio files shipped. Platform player, terminal bell, or silence.
Tested by its own hands
The app ships its own screenshot and regression drivers — uishot and floorshot — so every wave is checked by deterministic, scripted runs before it lands.
$ curl -fsSL https://raw.githubusercontent.com/theboringhumane/theboringoffice/main/install.sh | sh
macOS · Linux · amd64 · arm64
Cross-compiled by GoReleaser, tagged publicly. House rule: zero new dependencies without need.
A boss you can talk to.
A team you can watch work.
A FLOOR THAT LIVES
> tekton-03 walking to board…
task claimed — flaky-test-482
> hemerodromos-01 dropping mail
idle: skopos-02 refilling tea
A floor that lives
tekton walks a ticket to the board; hemerodromos drops mail at the tray. Every sprite is a real opencode sub-agent event, so a glance at the floor replaces a dashboard.
- Real opencode sub-agents behind every walk cycle
- Coffee steam, blinking rack LEDs, an uplink ripple — all tick-driven
- Six tabs, one office: chat, terminal, agents, board, mail, activity
Read the waves. Watch us work.
theboringoffice is built in the open because an office should be inspectable end-to-end. The code, the commits, the releases — even this website — all live in one public repository.
There is no private version of the office. The floor that ships to your terminal is the floor in the repo — the same sprites, the same waves, the same commit messages. If you want to know how something works, you read it; if you want to change how it works, you know exactly where it lives.
And if you'd rather just look around first, demo mode walks you through a full shift with a scripted team — no setup, nothing to install beyond the one binary.
$ theboringoffice --demo
f09d0ba website: homepage copy in the vision voice
830eca6 wave 33: topbar reads the ldflags-stamped version
f26ad24 wave 32: transcript mouse selection, OSC52 copy
aa1e645 wave 31: transcript UX pack
8ec5d0b wave 30: session lifecycle UX
38a6cf6 wave 29: website on Cloudflare Pages
… and every wave before it, in the open.
The log is the changelog
Every feature ships as a numbered wave — a small, reviewable commit you can read in one sitting. Wave 22 through wave 33 and counting.
Releases in the open
Releases are tagged and cross-compiled publicly — currently the v0.2.x wave releases, cut from the same commits you just read.
This site, same repo
The marketing site lives in website/ in the same repository and deploys to Cloudflare Pages. What you're reading is checked in next to the code it describes.
Company welcome
Stars, watchers, and issues are all welcome. Tell us which part is boring in the wrong way.
Start with one desk. Grow into a full floor.
theboringoffice
For YouOpen one terminal and a real opencode session greets you. When work fans out, sub-agents take desks on the floor with the context you need to follow them.
Six tabs, one office: chat, terminal, agents, board, mail, and activity. No separate dashboard to configure, no status meeting to schedule — you just look across the floor.
Get startedtheboringoffice
Your workflowKeep the hours and habits that already work. Tour the office in demo mode, walk in live, or attach the floor to an opencode server you already run.
theboringoffice --demo
theboringoffice
theboringoffice --server
http://127.0.0.1:4096
Fixed the flaky test
Delivered the mail run
Watching the dashboards
Reviewing the deploy diff
Filed the meeting notes
Kept the rack humming