Work with agents
that feel like coworkers.
A terminal app where your opencode or Claude Code 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.
$ curl -fsSL https://boringfloor.com/install.sh | shCLI
Demo
Threads
Queue
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
The office drafts the plan. You approve it. Then the crew builds.
Hit ctrl+p and keep talking — plan mode is conversation-first. The boss's finished reply mirrors into a markdown plan pane in the floor slot while you type, mermaid diagrams welcome. Click in and edit until it reads like your plan, not the office's guess — a fresh reply never clobbers your edits — then ctrl+x approves and the crew builds it. The [plan] badge in the status bar keeps the mode honest.

The office is quiet on purpose.
Your attention is the most precious resource on the floor, so the office spends almost none of it. While you're watching, it stays fully silent. Away from the keyboard, it taps your shoulder exactly twice — when the crew is blocked on your decision, and when the work is done. Good coworkers don't hover.
Silent while you watch
The office tracks focus and blur on your terminal. While you can see the floor, it says nothing at all — a good coworker doesn't tap your shoulder when you're already looking at them.
Blocked on your call
When an agent can't move without you, one OS notification names the employee and the tool — "permission needed — tekton-1 needs write". The floor waits on your decision, not the other way around.
The boss is done
When a turn completes, one ping carries the gist of the finished work — "the boss is done — …". Enough, while you're pouring the tea, to decide whether it's worth walking back.
One ping, never a wall
Ten asks in a burst coalesce into a single banner. The office would rather lose a little detail in the summary than spend your attention twice.
No click-to-return today. The banner comes from your OS — osascript on macOS, notify-send on Linux — delivered with zero new dependencies, and an OS banner can't focus a terminal window without a signed helper app. So the deal is an honest one: you hear it, you tab back. The office rings the bell; your feet do the walking.
Off means off — /notify off, the env var, or the config key all end the same way: silence.
A Team That Remembers
1 office=theboringfloor.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. Two LLM transports, one floor: opencode by default, or Claude Code on your own claude CLI — same roster, same board, no lock-in.
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.
measured on v0.2.11, this machine, full-suite runs
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 LLM transport says something happened — the opencode serve event stream, or a stream-json feed from your claude CLI — 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.
A browser, no browser engine
The browser tab renders pages as text and link rows on any terminal — no headless Chromium, no runtime. On kitty-capable terminals an installed zenbu terminal-browser embeds the real page in the pane; https pages open by default; plain http beyond localhost stays off unless you allow it.
$ curl -fsSL https://boringfloor.com/install.sh | sh
macOS · Linux · Windows · 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 sub-agent event from your transport — opencode or Claude Code — so a glance at the floor replaces a dashboard.
- Real sub-agents, opencode or Claude Code, 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.
theboringfloor 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.
$ theboringfloor --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
MIT licensed, and stars, watchers, and issues are all welcome. Tell us which part is boring in the wrong way.
The office is open. Build this together.
theboringfloor grows in public waves, and the whole crew — the maintainer, the regulars, and whoever walked in five minutes ago — argues about the next one in the Discord. Come watch the waves land, tell us which part is boring in the wrong way, or pick up an issue and ship a wave yourself. Contributors welcome; the commit log has room.
No invite required, no application form. The Discord is where designs get argued about before they ship, and the GitHub log is where the arguments settle. Lurk as long as you like — the channel is the office hours, and the office never closes.
When you're ready to do more than watch, the issue tracker is the work board. Claim one, open a pull request, and your handle lands in the same public log as everyone else's.
theboringhumane wave 34 is open — the floor needs a doorbell
skopos-02 issue #112 filed — doorbell spec, one page
tekton-01 claimed. PR up within the hour
dikastes-01 reviewed, merged. welcome to the commit log
… and the next wave is already being argued about.
Lurk productively
The Discord is where waves get argued about before they ship. The channel history is the design doc — read as far back as you like.
File the boring bugs
If something in the office is boring in the wrong way, open an issue. Reproduction steps are the love language around here.
Ship a wave
Pick an issue, open a pull request, and your commit lands in the same public log as everyone else's. Reviews are direct; merges are quick.
Start with one desk. Grow into a full floor.
theboringfloor
For YouOpen one terminal and a real agent session — opencode or Claude Code — 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 startedtheboringfloor
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.
theboringfloor --demo
theboringfloor
theboringfloor --backend claudecode
theboringfloor --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