Everything in the office, room by room. Back to the README.
- A floor per project. The first time the office starts in a terminal it walks you through picking your first project (see Run locally). Otherwise you start inside the elevator, and it asks for one: pick one of the repositories your
ghlogin can see (or typeowner/name) and the office clones it into the workspace folder,~/agent-office/<owner>/<repo>unless you pick another (📁 Change folder right there, for admins). While it clones, its floor on the panel says how far along it is (Downloading 64% · 231 MiB · 1.5 MiB/s), and you can close the panel and carry on: everyone hears when the floor opens. Whoever added it, or an admin, can stop it with the ⏹️ beside it. A clone that hears nothing from GitHub for 3 minutes is stopped as stalled, one that would have to ask something (an ssh host key, a password) fails straight away and says what to run on the office's machine, and restarting the office doesn't stop one. To add another project, or go to one, walk into the elevator on the north wall and press E. Or click the project name in the top-left corner for the list of floors: pick one and you're there in a blink, standing on the same spot in the office. From outside it (the balcony, the street, the garage) it takes you in, and you step out of that floor's elevator. Each floor has its own desks, workers, issues and PR boards, task queue, services and pictures, and its own wall and floor colors, so you always know where you are. You only see and hear the people on your floor. The elevator panel shows how many workers are busy or waiting on someone on each floor, and you get a heads-up when a worker on another floor starts waiting. An admin can take a project off the building with the 🗑 beside its floor in the elevator: its workers stop, and everyone on it rides the elevator to another floor. Nothing is deleted. The checkout stays on disk with its workers, queue and pictures, and adding the same repository again moves back into it (as long as the workspace folder hasn't moved since). That goes for the project the office was started in (agent-office <dir>) too: it stays off after a restart, and the office keeps its own data in that folder as before. - Walk around. Use WASD, Space to jump, and drag the mouse to orbit the camera. Everyone in the office sees everyone else move in real time.
- A quiet screen. The office stays in view: the top bar holds just the floor you're on, 🤖 Workers and the ☰ menu (or Tab). The menu opens every window (issues, PRs, the queue, services, the whiteboard, search, voice, screen sharing, settings) and lists what can show on screen: the workers, who's in the office, spend, Claude limits, the chat and the floor details. Turn each one on or off there, or hide a panel with its ✕. Pin anything you use a lot to the top bar. The choices are kept in your browser. Chat lines fade after a few seconds; hover the chat or press T to read back. What needs you shows up on the top bar by itself: the workers waiting on someone (click to go to them, like N), the mute button while you're in voice, Sharing while you share your screen, and ⬆️ Update when there's a new version.
- Coffee. Press E at the coffee machine in the kitchen for a mug and a minute of quicker walking and higher jumps. A little meter under the project name shows how much buzz is left. Drink a third cup before the last one wears off and you get the jitters for a few seconds.
- Boss office. Stairs along the back wall climb to a glass-walled office on the loft in the corner. From up there you can look down over every desk and watch your workers go.
- Ladder and fire poles. The floors are stacked like a real building, with a ceiling over each. A ladder up the west wall goes through trapdoors in the ceiling and the floor: press E to grab it, W / S to climb, and E (or Space) to get off. Climb past the ceiling and you come up through the floor of the floor above. To go down in a hurry, walk into the hole round the fire pole (or press E at it). You slide down it spinning and come out of the ceiling below. The pole runs the whole way down the building, so a slide takes you one floor down and swings you off beside its hole there, ready to go again. On the bottom floor you land on a mat and a firehouse bell rings, and pressing E at the pole there gives you a twirl.
- Upstairs, over the garage. The office is the second floor. Its windows are real glass, so you can look out over the street, the trees and the neighbours. Walk out the EXIT door in the west wall and down the stairs to the street. Underneath is an open garage full of Lambos and Ferraris, which you can jump up onto or drive (see below). The elevator goes down there too (Garage, under floor 1 on its panel), stopping at the garage's back wall, and back up from there to your floor or any other.
- Drive the supercars. Walk up to one of the Lambos or Ferraris in the garage (or the one parked out front) and press E to get behind the wheel. W is the gas, S brakes and then reverses, A and D steer, Space brakes and H honks. Take it out of the garage, round the lots and along the street either way, and on out of town round the scenic loop (see below). Columns, lamp posts, trees and the other cars stop you, and anyone standing in your way gets knocked aside. Everyone on your floor sees the car go by with you in it (the roof comes off, so they can see who's driving), and hears its engine and horn. Press E at a car someone else is driving to ride along beside them. E gets you out, and the car stays parked wherever you leave it until the office restarts, when every car goes back to its spot. Like the people you see, the cars are your floor's own: the garage under another floor has its cars where people on that floor left them.
- The scenic loop. Both ends of the street run on out of town into a country road, 1.4 km round with the street, that comes back in at the other end. Heading east, it passes Meadowbrook Farm (a red barn, a silo, a windmill, fields of wheat with hay bales and cows in their pasture), turns south into the pines of Whispering Pines and over a creek on a wooden bridge, then west along Summit Pass under a range of snowy mountains, past a lake with a dock, and through the Granite Tunnel under a spur of them. Round the headland it runs north up the coast past Sunset Beach, with palms, umbrellas, a lifeguard tower, a snack shack, a pier out into the sea and sailboats offshore, and past the lighthouse on its rocky point, whose beam sweeps round at night, back into town. Drive it either way. A sign at the start of each stretch says where you are, and so does the bar at the bottom of the screen while you drive. The road's edges keep you on it: run wide on a bend and you slide along the edge rather than off it. Out there the haze thins so you can see the mountains and the sea, and the sun's shadows go with you. Anyone can walk out there too. A chequered line across the street in front of the office times laps: cross it, go all the way round (either way) and cross it again, and the bar shows your lap and your best, which is kept in your browser. The upper floors look out over more of it than the bottom one.
- A tower that grows with your projects. Every floor is a storey of the same building, so from outside it's as tall as you have projects: add enough of them and it's a skyscraper, a balcony off every floor, windows lit here and there at night and a cornice round the top. Up on a higher floor the street is that many storeys further down. Only the bottom floor has the EXIT door and the stairs down; the floors above it have wall there, so take the elevator down to the garage to leave.
- Day and night, and weather. Outside the windows a whole day goes by every hour: midnight on the hour, sunrise around a quarter past, noon at half past and sunset around a quarter to, and at night the street lamps, the balcony's string lights and the windows across the street come on while the office lights warm up. The weather comes and goes by itself (sun, clouds, rain, thunderstorms, fog, and snow in winter), with raindrops on the glass, wet streets and snow settling outside. Start the office with
--city Berlinand the sky follows that city's live forecast instead, with its days as long or as short as they are there this time of year. Under ⚙️ → Building → Outside, anyone can switch the sky to the real time of day instead (Real time (24 h)), so it's night in the office when it's night there, and back to A day every hour. It's the same for everyone and stays picked across restarts; until someone picks,--real-time-sky(orAGENT_OFFICE_SKY_CLOCK=real) says which. Indoors the sun lights the room, but shadows fall from the lamps overhead, not from the street's sun. Everyone sees the same sky, and ⚙️ shows what it's doing. - Maps: the office, a castle, a space station, or your own. Under ⚙️ → Map, anyone can turn the whole building into another place, for everyone on every floor, and back. The 🏰 Castle is a great hall with a throne of iron blades at the end: you sit on it, the workers at the long tables down either side get up and line up before you when they're done or need you, and the Hand of the King at your left sends a new one running off to a free seat when you speak to him. Workers there dress as peasants and wear out as they toil, growing long grey beards, getting grubby and stooping, fully after 30 minutes of work. The boards hang on the hall's walls with a scribe at each, and the workers, queue, meetings and PRs all work as in the office. Under the hall is a dungeon: a worker sent home there is marched down to a cell by the Kingsguard and kept for good, wasting away until it starves, and then rotting down to its bones (see The castle). The 🚀 Space station is a deck in orbit with the Earth, the Moon and a ringed planet outside its windows: a bridge with the captain's chair where the throne would be, a First Officer to bring workers aboard, the boards as displays on the hull, and an airlock. A worker sent home there is marched to it by Security, sealed in under the red lights and blown out into space, and you can watch it tumble away from the observation windows either side, where everyone ever ejected is still adrift (see The space station). A map is plain JSON, so you can move things about or make your own without touching the code: see Maps.
- Halloween and Christmas. Under ⚙️ → Holiday theme, anyone can dress the whole building up, for everyone on every floor. For Halloween the workers turn into shambling zombies with stitched grins and bandages, your first-person hands become an undead warlock's, bony and clawed with green witch-fire curling round them, everyone dresses as a warlock (a crooked hat, a purple robe with an orange sash and a ragged hem, and pointed boots), and the dog gets bat wings and a witch's hat. The sky goes creepy, purple overhead and blood orange at the horizon, with a big harvest moon, bats crossing it and circling the building, and the odd far-off flash. Jack-o'-lanterns glow everywhere: on every desk, the window sills, the counter, the balcony rail and down the street, with gravestones on the lawn and cobwebs in the corners. For Christmas the workers are elves, your hands are in mittens, everyone wears a Santa suit (the hat, white fur trim, a black belt with a gold buckle, green mittens and black boots), the dog is Rudolph, the potted plants turn into little decorated trees with presents under them, and it snows outside, onto a big lit tree and a few snowmen out front. By the calendar (the default) puts up Halloween through October and Christmas through December, by the office's clock.
- Smoke breaks. Glass doors on the south wall slide open onto a balcony with string lights, a bench and a bistro table. Press E at the ashtray to light up. Everyone sees you puffing away until you stub it out or step back inside.
- Golf off the balcony. Next to the ashtray there's a tee: a square of turf, a ball on a tee and a bag of clubs. Across the street, where the neighbours leave a gap, a fairway runs up to a green with a flag on it, 43 m out and a storey down (further down from the floors above). Press E at the tee to step up with a club. The camera drops down behind the ball. The mouse or A/D aims, W/S set the loft (too flat and it hits the railing), and holding Space takes the club back while the power meter runs up and down: let go to hit. The camera follows the ball out and down, and a label says where it stopped and how far from the pin. Everyone on your floor sees you swing and your ball fly, landing in the same spot. Hole one and the green goes up in confetti. Your closest shot and your holes in one are kept in your browser. E puts the club back.
- Take a seat. Press E at the lounge couch, a beanbag, the balcony bench or a stool at its bistro table, or the couch or the boss's chair up in the boss office to sit down. Walk off, jump or press E again to get up. Everyone on your floor sees you sitting. Sit on the couch facing the TV while someone's sharing their screen and it opens full screen for you.
- Minesweeper on the boss's monitor. In the boss's chair, E plays Minesweeper on the monitor: the camera moves in close and the board sits right on the screen. Click to dig, right-click (or Shift-click) to flag, and click a number to dig around it once its mines are flagged. The first click is never a mine. Stop playing leaves your game up on the monitor, with its clock paused, until you come back. Walk off to get up.
- Pick your character. The first time you join, a character select screen lets you choose your name, skin tone, hair style, hair color and shirt, with a spinning preview. No name in mind? Leave it blank (or skip the screen) and you go by the made-up one shown in the box, like Sunny Otter, or press 🎲 for another. The office remembers your name and look in that browser, so you only pick once. Change it any time from ⚙️ or by clicking your name under In the office (turn on 👥 People in the ☰ menu).
- Hire workers. Walk up to an empty desk and press E to choose Claude Code, OpenCode, Codex, Grok, Muse, DeepSeek Harness, Pi or Cursor, or press P to write a task first. A little worker sits down, a laptop opens, and the agent's live screen appears on it. Choose the agent for each queue task too.
- Signs over the desks. Press L at any desk, empty or not, to hang a big sign from the ceiling over it: Operations, Code cleanup, Frontend, whatever that desk is for. Type up to 32 characters (or pick one of the ideas), choose one of seven colors and press Enter. It hangs over the far edge of the desk, facing the chair, so it reads over the shoulder of whoever sits there; while the desk back to back with it has no sign of its own, it says the same on the back, so you can read it from across the room either way. Everyone on the floor sees it, the hint at the desk names it, and it stays up across restarts. L again changes it or takes it down. Each floor has its own.
- Room to grow. When a floor needs more desks, the north wall past the gong comes down. Walk up to the yellow 🚧 Room to grow sign on it and press E, then 🔨 Knock through: the wall goes, and a back office opens behind it with a pair of desks, a rug, a lamp and a window, in a puff of confetti. Knock through once more and it goes back another row, for two more desks (two rows is as far as it goes before the street behind the building). New workers, and the task queue, take its desks once the room's are full, before any bean bag comes out. The sign moves to the back wall, where E can also wall the last row back up, once nobody's working there. Each floor is built out on its own, and from outside you see it: the back office sticks out of that storey, on posts down to the lawn.
- Bean bags for the overflow. There are 16 desks, and up to 4 more in the back office. Once they're all taken, a bean bag comes out on the floor with a low lap desk in front of it. Hire a worker there the same way as at a desk, and the next bean bag comes out, up to 12 around the room. The task queue seats workers on them too. A bean bag stays out while a worker sits on it, and the empty one goes away again as soon as a desk frees up.
- Shared shells. Press B at an empty desk to open a plain login shell for dev servers, git or tests. It's shared the same way as a Claude terminal.
- Isolated branches. When you hire with a task, you can tick own git worktree. The worker then gets its own
office/<name>branch under.agent-office/worktrees/, so parallel workers never share a checkout. The branch starts from the latest on GitHub, pull requests merged since anyone last pulled included, so a task never undoes the one before it. When you send that worker home you choose whether to keep the worktree and branch, delete the worktree, or delete both, and the office warns you first about uncommitted changes or commits no remote has.agent-office pruneclears out whatever was kept, once it is safe. If a worker's worktree is deleted outside the office (rm -rf,git worktree remove, a cleanup script), the worker doesn't keep failing to start: it waits at its desk under a 🌿 worktree deleted bubble. E there (or clicking it in the Workers list) says what's left and offers Rebuild worktree, which checks its branch out again in the same place (origin's copy when only the pushed one is left, or a fresh branch from where it started when the branch is gone too) and lets it carry on its conversation, Rebuild all for every worker on the floor that lost one, or Send home…. Under ⚙️ → Workers whose pull request merged, anyone can have them go home by themselves once their pull request merges: as soon as one isn't working or waiting on you and nobody has its terminal open, it leaves and its worktree and branch are deleted. Uncommitted changes, or commits that aren't on GitHub, keep the worktree, as when you send it home. It's off until someone turns it on, and turning it on sends home the ones already merged. - One task across several projects. Many systems are split over repositories (an api, an admin, a web app), and one change often needs two or three of them. When you hire a worker in its own worktree, 🗂️ Also work in lists the building's other floors: pick the projects the task spans (in the hire dialog, or in 🤖 Hand to a worker / ✍️ Ask a worker from the boards). The worker starts in a workspace folder with a worktree of each project in it, all on the same
office/<name>branch, and a short brief (asCLAUDE.mdandAGENTS.md) saying which folder is which. It works across them, tests them together and commits in each. O then opens a pull request in every project it committed to, and each description lists all of them, so they're reviewed and merged as one change. The issue the task came from is closed by the home floor's PR and linked from the others. Press O again for each project's PR, with a button to open the ones still missing. The Changes window has a tab per project, sending the worker home checks and deletes every worktree, and Workers whose pull request merged waits until the PRs in every project have merged. The brief can be rewritten in ⚙️ Settings like the office's other prompts. - One-click PRs. When a worktree worker is done, press O at its desk. The office pushes the branch and opens a pull request with a title and body drafted from the task (work handed over from the issues board gets a
Closes #n). The PR shows up on the PR board right away, tagged with the worker's desk, and Go to desk takes you there. Press O again to see the PR. - Shared terminals. Press E at an occupied desk to open the real terminal (a PTY, over WebSockets). Several people can type into the same session at once, and anyone who joins late gets the full scrollback. The terminal's header shows a face for everyone who has it open, and a line like Sam is typing… while someone else types, so you don't talk over each other. The Esc key leaves the terminal, so to send the program an Esc (to close a menu like Claude's
/skills, or to interrupt it) press Ctrl+[ or click ⎋ Esc in the header. Drag a screenshot (or any file) onto an open terminal, or paste a screenshot into it, and the office keeps a copy on its own machine and types its path, as a terminal does with a file dragged into it: Claude Code and Codex attach the picture as [Image #1]. The copies are kept in.agent-office/drops/until the worker goes home. - Dictation. Talk to a worker instead of typing. In a worker's terminal, or any box you write a prompt in (hiring, P at a desk, a board agent, an issue's Ask a worker, the task queue, a meeting), hold Ctrl+Space or the 🎤 and say it. The words show as they're heard and are typed in at the cursor when you let go; a quick tap instead of a hold leaves it listening, hands free, until the next tap. Nothing is sent for you: read it over, fix what it misheard, and press Enter yourself. There's nothing to install, because the listening is your browser's own speech recognition: Chrome, Edge and Safari have one, and where a browser doesn't (Firefox) there's no 🎤. The office never gets the audio, but the browser's maker does: Chrome and Edge send it to their speech service, unless the browser already has its on-device model for your language, which is used instead. It listens for your browser's language. Like voice, it needs HTTPS or localhost. In voice with an open mic, you're muted while you dictate. On a Mac with more than one keyboard language, Ctrl+Space switches between them, so use the 🎤 there. In the 2D view the 🎤 is on the prompt box under the terminal.
- Web page tabs. Click + Web page on a terminal to pin a web page open beside it, like a linked ChatGPT conversation or docs for the task at hand: give it a name and an address and it opens in its own tab next to 💻 Terminal. Switch between tabs without losing your place in either, and close a web page's tab with the × on it. Plenty of sites won't show inside another page (ChatGPT is one): ↗ New tab opens the page you're on in a browser tab of its own. The terminal keeps running behind the scenes while you're looking at a web page tab. Tabs are remembered for that worker until you reload the page.
- See what teammates are up to. A line under each person's name tag says what they have open (💻 in Pixel's terminal, 🔀 reading PR #12, 📋 at the issues board) or where they are (🌇 on the balcony, 👔 in the boss's office, 🛋️ on the couch). The same line shows under their name in the sidebar. Click someone there to walk over to them, riding the elevator first if they're on another floor. Any key of your own takes over.
- Changes at the desk. Press C at an occupied desk (or click 🌿 Changes in its terminal) to see what the worker changed: the changed files and their diff against the branch the office was opened on, refreshed every couple of seconds while it works. From there you can commit, discard, or push the branch and open a pull request.
- Live status. Claude Code, Codex, Grok, Muse and Cursor hooks, an OpenCode plugin and DeepSeek Harness's ACP session drive each worker's status: working, needs input or done (Cursor has no hook for its permission prompts, so a Cursor worker waiting on one still shows as working). When a worker needs a human or has finished, it jumps up and down, and you hear a ding when it's done. Its antenna bulb shows the status from across the room.
- A worker that needs you is hard to miss. A worker stopped on a question or a permission can't go on until someone answers, so the office makes the most of it. In the room, a red pin with a ! floats over its card, a pillar of red light stands over its desk and rings spread out over the floor around it, all of which you can see from the far side of the office; the light fades as you walk up, so it doesn't get between you and the laptop. Its bubble turns red and says 🙋 NEEDS YOU. On screen, a red banner under the top bar says who needs you, what it's asking and for how long (Byte needs you · Wants permission: Bash: npm test · 4 min), with +2 more when others are asking too: click it or press N to be put at that desk, or ✕ to put it away until someone else asks. The moment a worker starts asking, the edge of the screen flashes red and an alarm sounds, two rising pairs of notes that aren't the ding for a finished worker. Under ⚙️ → Sound & voice → When a worker needs you, pick Ring once, Keep reminding me (it rings again, softly, every 30 seconds until someone opens that worker's terminal) or Off. In the 🤖 Workers panel, the ones that need you move to the top in red, each with what it's asking and since when. With reduce motion on in your system, nothing pulses or flashes more than once.
- Workers act out what they're doing. A working worker acts out its latest tool call, so you can tell what it's doing from across the room without reading its card. Reading files, it holds up a stack of papers and flips through them. Editing, it hunches over the keys and types flat out. Running tests or a build, it leans back with its hands behind its head. Searching or fetching the web, a globe spins beside its laptop. When its tests or build fail twice in a row, it puts its head in its hands. Waiting on you, it jumps for a couple of seconds, then crosses its arms and taps its foot. When it finishes, it does a little spin and a puff of confetti goes up. Claude Code hooks tell a shell command that runs tests from one that only reads, and they report failures. Codex and OpenCode report only the tool's name, so their shell commands are acted out as plain typing.
- Next worker that needs you. Press N to go straight to the first worker waiting on someone (it needs input, or it's done and nobody has looked), standing behind it and looking at its laptop. Press N again for the next one, and after the last you start over: the ones that need input come first, then the ones that are done, and whoever has waited longest is first among each. A pin at the edge of the screen points the way to each waiting worker you can't see, red for needs input and green for done, and the top bar counts them (
🙋 2 need you · ✅ 1 done, in red and pulsing while anyone needs you; click it to do the same as N). With nobody waiting on your floor, N tells you which floor has someone. - Notifications. You don't have to be in the office tab. The tab title counts the workers waiting on someone, like
(2) my-project · Agent Office. Allow desktop notifications (the office asks when you first hire a worker, or turn them on under ⚙️) and a worker that needs you or finishes while you're in another tab or app pops one up (🙋 Byte needs you, with what it's asking; that one stays up until it's dealt with). Click it to go straight to that worker: the office comes to the front with you at its desk and its terminal open. For the whole team, paste a Slack or Discord incoming webhook under ⚙️ → Team notifications (or start with--webhook <url>), and the office posts to that channel when a worker has needed input or been done for a few seconds with nobody at its terminal. - The 2D view, for your phone. Open
/lite(or 📱 2D view in the ☰ menu) for the office without the 3D. It lists every worker on the floor, the ones waiting on someone first, each with what it's asking (🙋 Wants permission: Bash: npm test) or doing, its branch and PR, and who typed to it last. Tap one for its terminal, with a row of the keys a phone keyboard hasn't got (1 2 3 to answer a question or a permission prompt, the arrows, Enter, Tab, Esc and Ctrl+C) and a box to send it a prompt. ✍️ on a card sends one without opening the terminal. 📌 Issues, 🔀 PRs, 📋 Queue and ✨ New task open the same windows as in the office, and the floor at the top switches projects, with a button straight to any floor where someone's waiting. The tab title counts who's waiting, and once you allow notifications (🔔) a worker that needs you pops one up and buzzes the phone. The 3D office offers the 2D view as it loads on a phone, and on a computer where it draws fewer than 20 frames a second for ten seconds. Stay in 3D stops it asking in that browser. A browser that can't draw the 3D office at all (no WebGL) goes straight to the 2D view, and signing in from/litebrings you back there. Teammates see you under In the office as 📱 on the 2D view, not standing anywhere in it. - Task cards. A card over each worker's head names what it's on ("Fix Login Redirect") and says in one line what it's doing right now. For Claude workers, Claude Haiku writes it from prompts and recent tools through the
claudeCLI. OpenCode, Codex, Grok, Muse, DeepSeek Harness and Cursor use local task summaries and never invoke Claude to name their tasks. - Survives restarts. Workers are saved to disk with their agent choice and session ID, and their terminals run in a small process of their own. When the server restarts (a dev-server reload, a
killof its process), the agents keep working through it, and the new server picks every terminal back up, scrollback and all. Open terminals reconnect by themselves. Ctrl+C stops the workers; the next start wakes them back up in their sessions, and R resumes the Claude Code, OpenCode, Codex, Grok, Muse, DeepSeek Harness, Pi or Cursor session of one that exited. DeepSeek Harness workers are the exception to keeping working through a restart: their ACP session is a child of the office process, so it stops with the office and comes back offline, resumable with R. When a restart does take a worker's terminal with it (the machine rebooted, the terminal process died or was replaced by a newer one), a worker that was in the middle of something is resumed with continue, so it carries on by itself. The chat and each worker's last 3,000 lines of terminal are kept too, so after a restart (or a crash) you can still scroll back through what the workers printed and what everyone said. - Search. Press / (or 🔎 Search in the ☰ menu) to search the chat and every worker's terminal at once, including what they showed before the office restarted. Click a terminal line to open that terminal scrolled to it, with the line lit up.
- Command palette. Press Ctrl+K (⌘K on a Mac) anywhere in the office to find anything on your floor by typing a few letters: workers (by name, task card or desk), issues, pull requests, services, the boards, teammates, and actions (hire a worker, open the task queue, settings, invite, hang a picture). Words, word starts and scattered letters all match, best first, so "login" finds the worker whose card says Fix Login Redirect. ↑ ↓ choose and Enter opens it the way clicking it in the office does: a worker's terminal, a PR's window, a service in a new tab. Shift+Enter walks your character over to it first and opens it when you get there (take a step yourself to call it off). Esc or Ctrl+K again puts it away. It doesn't open while you're typing in a terminal or a text box, where Ctrl+K is the terminal's own (cut to the end of the line).
- Cost per worker. Claude Code workers show tracked session cost and tokens. OpenCode workers show tokens and model/provider-reported cost estimates, including child-session usage, with a cache/reasoning breakdown in tooltips. These estimates are not billing; missing cost is shown as unavailable. Codex workers show the root session’s recorded tokens, including cache and reasoning breakdowns; cost and API-call count are unavailable. DeepSeek Harness workers show what is in each session's context window (and the window's size) from ACP's usage updates, plus a cost only when the harness reports one. Today's and all-time totals,
--budgetwarnings and--budget-pauseuse tracked Claude Code spend only; they cannot cap OpenCode, Codex or DeepSeek Harness spending. Once the tracked budget is spent, the hiring pause applies to all new workers. OpenCode and Codex session snapshots and Claude totals survive restarts. Current-desk totals disappear when their workers are sent home. - Machine monitor and worker limit. A monitor on the west wall, between the windows, shows how busy the office's machine is: CPU and memory right now, the last five minutes of each, and how many workers the office runs. Start with
--max-workers <n>, or have an admin set a limit under ⚙️ → Worker limit, and the office runs at most that many workers at once across every floor (shells and board agents count too). Hiring past it is refused with a message saying why, and the task queue waits for room instead of failing its tasks. In the office, the limit can be lowered but never raised past--max-workers. When memory is 90% used, or the CPU has been 90% busy for half a minute, the monitor says the machine is under pressure, the hint at an empty desk says so, and the hire dialog warns you before you hire. - Plan limits. Turn on ⏳ Claude limits in the ☰ menu and a meter shows how much of your Claude plan's 5-hour session and week is used, plus any per-model weekly limit (like Fable's), and when each one starts over. These are the same numbers Claude Code's
/usageshows, on every floor: for your own Claude sign-in once you have one (see Your own Claude and GitHub below), else for the one the office's machine is signed in to. While anyone is in the office, it asksclaudefor them every two minutes, which starts no conversation and costs nothing. Click the meter to read it again. It stays hidden when Claude runs on an API key instead of a plan, and it doesn't count OpenCode, Codex, Grok, Muse, DeepSeek Harness or Pi. - Issues board. A tack board shows GitHub issues in Open, In progress and Closed. The notes pinned to the board on the wall are the Open ones, the issues nobody has started on: one that moves to In progress comes off the wall, and you find it in the board's window. Click a column's header to filter it by label: pick one or more and the column shows only the cards with any of them. Your filters stay put for each floor, in your browser. Or type in the box under a column's header to narrow it to the cards whose titles have every word you type; it works along with the label filter, ✕ clears it, and the boxes start empty each time you open the board. Click an issue to read it and its comments, or add a comment of your own (it posts as the GitHub account you signed in to in 🔐 Your sign-ins, or on the office password as the one
ghis signed in to on the server; the window names it), then choose Hand to a worker to seat a worker with a ready-made prompt (or give it to one who's already there), or Add to queue. Or take its card straight off the board, without opening it: point at the note (the crosshair in first person, the mouse in third) and press E or click (O opens it instead). ✋ Pick it up in an issue's window does the same. You carry the card across the office in your hands, where everyone on the floor sees it (and sees it missing from the board): press E at an empty desk to hire a worker for it, at a worker's desk to hand it to that worker, or at the task queue to queue it. However a worker gets an issue (Hand to a worker, its card, or the queue seating one for it), the issue moves to In progress and its note comes off the wall the moment the worker has it, for everyone on the floor. The office assigns it on GitHub behind that, which is what keeps it there; if GitHub won't assign it, the card goes back and you're told why. Q puts the card back. Close issue… closes it as completed or not planned, with an optional comment, and takes it off the queue if it was waiting there. 🏷️ Edit next to an issue's labels (Add labels when it has none), or the 🏷️ that shows when you hover its card on the board, picks its labels from the repo's own: tick them on and off, filter by typing (Enter ticks the first match), then Save labels. An in progress (or doing, wip) label moves the issue to In progress. - PR board. A second tack board shows pull requests in Draft, In review, Approved, Merged and Closed, with CI status and diff size. Its column headers filter by label too, and the box under each header by title. Click a PR to read its description, comments, reviews and checks, and comment on it. Files changed shows the diff, with the files listed on the left as a folder tree or a flat list, and review comments under the lines they're on. Tick a file Reviewed (or press V; J/K step through files) and it folds away. Your ticks are kept in your browser, and a file you ticked that changes again is flagged. Merge… squashes, merges or rebases it, and can have GitHub merge it once its checks pass. Close PR… closes it without merging, with an optional comment, and can delete its branch. Review and Fix comments & merge hand the PR to a worker; the second one addresses the review comments, gets the checks green and merges. When the PR conflicts with its base, that button becomes Fix conflicts & merge: a new worker is picked by default, merges the base in, resolves the conflicts and merges. Its labels change the same way as an issue's: 🏷️ Edit in the PR window, or the 🏷️ on its card.
- The merge gong. A brass gong stands by the elevator, on the far side from the PR board. When a pull request merges, it rings for everyone on the floor, confetti rains down from the ceiling all over the floor (the loft too) and bursts over the desk the PR came from (with no worker there, over the gong), and every worker that's awake climbs up on its desk for a quick dance, its light flashing like a disco ball, before it hops back into its seat. Workers on bean bags dance on the bag, and the board agents on their kiosks. It rings however the PR merged: from the PR window, by a worker's
gh pr merge, by auto-merge or on GitHub itself. When the last task on the task queue gets done, the gong rings three times and confetti flies over every desk. Walk up and press E to bang it yourself. - Ask a worker about anything on a board. Every issue and PR has ✍️ Ask a worker…: type your own prompt, and the worker gets it along with which issue or PR it's about. Send it to a new worker at a free desk, or to one already sitting at a desk.
- Board agents. An agent stands at a little kiosk beside each of the issues board, the PR board and the task queue. Walk up and press E, type what you want, and it runs as a Claude Code (or your configured) agent that already knows its job. The issues agent files, finds, triages, labels and closes issues with
gh. The PR agent sums up, reviews, comments on and merges pull requests. The queue agent turns what you ask for into tasks on the queue, one per piece of work, and can tell you what's queued or take tasks off. It never does the work itself, not even a one-line fix: it queues it and tells you what it queued. The first prompt hires it; after that your prompts go into the same session, so you can follow up, and a sleeping one wakes up with your prompt. Press O there to watch its terminal and X to send it home, and the next prompt starts a fresh one. The agents work in the floor's main checkout, so they're told not to change code there: work that needs code changed goes on the queue, where a fresh worker does it in its own worktree. - Agents that manage agents. Any worker can see and run the office's other workers. Ask one to "send everyone whose PR merged home", "hire someone to fix the flaky test" or "tell Mochi to rebase", and it can. Claude Code, Codex and OpenCode workers get an
agent-officeMCP server with five tools:list_workers(who's at which desk, their status and task, their branch, and where their pull request stands),hire_worker,send_home,tell_workerandlink_pr. Every worker, whichever agent it runs, also has the same thing as theoffice-workerscommand (office-workers list,office-workers home --merged, and so on). Sending home works as it does from a desk: each worker's worktree and branch are deleted unless they hold work that isn't on GitHub (what a merged PR delivered counts as on GitHub), and the answer says what was kept and why. Everyone on the floor sees a toast saying which worker did what, and nobody can send themselves home. - Whose pull request is whose. A worker's desk shows where its pull request stands (open, or merged and free to go home) rather than just ready or done. The office knows the pull request when it was opened from the desk (O), from the branch the office gave the worker, or by a queue task. A Claude Code worker that runs
gh pr createitself is linked to what that opened too, whatever branch it pushed, which is how a worker hired without its own worktree gets one. For the ones it can't see (another agent that opened its own from a branch of its own, or one opened by hand), ask any worker to "link the PRs to the workers that opened them": it matches them up and says so withlink_pr(office-workers pr 12 --worker Mochi, or--noneto take a wrong one off). - The meeting room. Under the boss office there's a glass meeting room with a long table. Press E at it (or 🤝 Meeting room in the ☰ menu, which sits on the top bar while a meeting is on), or 🤝 Meeting… on an issue or 🤝 Review panel… on a PR, to call a meeting: 2 to 5 workers step out of the elevator one after another, walk over and sit down round the table, each with a role you can rename, and work through one question or task together in a pattern. Debate: everyone proposes, then critiques the others, and the head of the table writes the decision. Lead & team: the lead splits the task into a part for each of the others, they each do theirs, and the lead merges the work. Map-reduce: the same task over a list of parts (files, modules, issues) shared out between the mappers, then one worker combines what they found. Red / blue: red attacks the change (bugs, security holes, edge cases) and blue fixes what holds up, round after round, until red finds nothing more. Review panel: reviewers each read a PR through their own lens (correctness, security, performance…), and the head of the table merges them into one review, every finding tagged with its lens, which the office posts on the PR. Every meeting declares its output file up front (
docs/decisions/….md, a review…) and ends when that file is written: the office commits it on the meeting's own branch (🔀 Open PR in the meeting window opens a pull request for it). Meetings are bounded by a round limit per pattern, and have no token limit. You pick the round limit for a debate (2 to 4) or red / blue (1 to 5). The other patterns always run the same rounds, so the form says so in place of a limit to set (🔒 3 rounds · fixed by the Lead & team workflow) and names them: planning, execution and merge for lead & team, map and reduce for map-reduce, the reviews and the combined review for a review panel. When a worker won't write its part, or when someone is sent home, the meeting stops and says why; ⛔ Stop meeting stops one by hand. The sign on the door shows the pattern, the round, and the tokens and cost so far, and a one-line summary once it's over; the board on the back wall shows the output as it's written, and the card over each worker says whose turn it is and which round. The workers stay at the table so you can read their terminals until 🧹 Clear the room or the next meeting sends them home. - Task queue. A whiteboard on the north wall, between the issues and PR boards, and 📋 Task queue in the ☰ menu. Click Add to queue on any issue, or type a free-text task, and walk away. Whenever a desk is free and fewer than workers at once of its tasks are running (3 by default; 0 pauses the queue), the next task gets a fresh worker in its own git worktree. Workers you hire yourself don't count against it; the office's worker limit, if there is one, counts everyone. The issue moves to In progress on the issues board as its worker sits down (and is assigned on GitHub), and the pull request is linked on the whiteboard as soon as it shows up. Finished workers stay at their desks so you can read their terminals, until the queue needs the desk for the next task. The queue survives restarts.
- Services board. When a worker starts a web server (
npm run dev, a preview build,python -m http.server), it appears within a few seconds on the 🌐 Services board, which hangs on the wall by the lounge and is also in the ☰ menu. Each entry shows the worker, its branch and the page's title. Click a row to copy one command that opens that server on your own computer. Or runagent-office tunnelon your computer once and leave it running: every server a worker starts opens there on the same port, by itself, and closes when the worker stops it (Workers' servers on your own computer). Hire a worker with its own worktree, ask it to run the dev server, and your designer can review the branch in their own browser. - Pictures on the walls. Press F (or 🖼️ Hang a picture in the ☰ menu) and paste a link to any image online: a team photo, a diagram, a meme. Pick one of six frames, then aim at a wall and click to hang it. Scroll to size it first. Where it can't go, over a window or a board, the preview turns red. Everyone sees it right away, and it stays up across restarts. Look at a picture and press E for a closer look, or to move, edit or take it down.
- A whiteboard to draw on together. A whiteboard on wheels stands out on the floor between the desks and the lounge. Press E at it (or 📝 Whiteboard in the ☰ menu) and Excalidraw opens, with shapes, arrows, freehand, text and pasted pictures. Everyone on the floor who opens it draws on the same board at once: you see their strokes as they draw, their cursors with their names, and what they have selected. The top of the window shows who's drawing, and so does the hint at the board. Whatever is drawn shows on the whiteboard in the office for everyone walking past, and stays there across restarts. Each floor has its own. Press Esc once to finish what you're doing and again to close it.
- A bookshelf of the project's docs. A bookshelf stands against the south wall, between the balcony doors and the window. Press E at it to read every Markdown file in the project: the README, the docs folder, each package's notes. Type in the filter box to narrow the list down. The letters only need to be in order, so
gsfindsgetting-started.md, and each extra word narrows it again. Use ↑ ↓ and Enter to open one, and Page Up/Down to read on without leaving the box. Docs look the way GitHub shows them, with tables, code, callouts, task lists and the project's own pictures. A link to another doc opens it right there, ☰ Contents jumps to any heading, and the shelf reopens on the doc you last read. While you read, your character holds an open book, turning a page now and then. Everyone else sees it, along with what you're reading under your name tag. A page turns with a soft swish when you open a doc or scroll a screenful. Turn the swish off with the 🔈 at the top of the bookshelf, or under ⚙️ → Sound & voice. - An office dog. Every floor has a dog. It naps under the desks of workers who are busy, trots after people for a while, sniffs around and hangs out on the lounge rug. When a worker needs input, it drops everything, runs to that desk and barks until someone opens that worker's terminal, so you can see from across the room who's waiting. It stays there until the worker is answered. Walk up and press E to pet it, and everyone sees it wag. Name it under ⚙️ → Office dog, and pick its breed (a pup, a corgi, a dachshund, a pug, a shiba or a pomeranian) and its coat there too: they're for everyone on that floor. Until someone picks them, each floor's dog is a breed and coat of its own.
- Sent home with a box. A worker you send home (X at its desk) doesn't just vanish. Its light goes out, its face falls, and its things go into a cardboard box: a plant, a framed photo, its mug and a rubber duck. Its laptop snaps shut, and it hops off its chair and trudges out with the box in its arms, out the exit door, down the steps and off along the sidewalk. Floors above the bottom one have no exit door, so there it walks out onto the balcony instead, climbs up on the railing and jumps: its parachute pops open and it circles down onto the lot out front, box and all, then walks off along the sidewalk. The desk is free straight away, so you can hire someone new while the last one is still on the way out. In the castle it goes to the dungeon instead and on the space station out of the airlock, and a map of your own can script its own way of seeing workers off (Sending workers home).
- Voice. Browser-to-browser WebRTC voice. Volume depends on how close you stand, but people are never fully silent. V joins, and once you're in, V is push to talk: hold it to talk, and you're muted when you let go. M mutes and unmutes. Pick Push to talk under ⚙️ to join muted, or keep an open mic. Leave voice from the ☰ menu.
- Office sounds. Busy workers clatter away at their keyboards, footsteps knock across the planks (and tick on the garage's concrete, swish through the grass and echo off the castle's flagstones, quicker and harder at a run), the fridge hums, birds chirp outside the windows by day and crickets at night, rain patters on the glass, thunder rolls in a storm, the coffee machine grinds and gurgles, the gong booms when a PR merges and the dog barks. It's all synthesized in the browser and placed where it happens, so it gets louder as you walk closer. Turn it down or mute it under ⚙️, which also covers the worker dings but not voice chat.
- Arcade cabinet. Workers take minutes, so there's an arcade cabinet in the lounge, next to the jukebox. Press E at it and the camera glides up to its screen to play BLOCKFALL, a falling-blocks game: arrows (or WASD) move and turn, Space drops, C holds a piece for later, P pauses. Everyone else on your floor sees your game on the cabinet as you play, and anyone can walk up and press E to watch it up close over your shoulder. When one of your workers needs input, the game pauses and says which one, with a button to its terminal. Walk away and your game waits, paused, until you come back. The high-score table is the whole building's: it shows on every floor's cabinet, and it survives restarts.
- Basketball. Every floor has a hoop on the west wall, by the exit door, with a key painted on the floor in front of it and a ball waiting underneath. Walk up to the ball and press E to pick it up. Hold E (or the mouse button, in first person) to wind up: a meter runs up and down, and letting go in its green band sinks it, while a little late banks in off the glass and too early or too late misses. In first person the ball goes where you look, so put the crosshair on the rim. In third person your character squares up to the hoop when you're facing roughly its way. Q drops the ball. Everyone on the floor sees the ball in your hands and the same shot fly, bounce off the rim and swish through the net, and grab the rebound (E, even in mid-air). A basket from past 6.75 m is worth three, and you're told how many you've sunk in a row. The ball stays on its floor: take the elevator with it and it goes back under the hoop.
- The rooftop bar. The elevator goes up to the roof, over every floor. A DJ plays drum and bass on a stage under a rig of moving lights and lasers, with an LED wall behind and a dance floor lighting up in front, all flashing in time with the music. The Sky Bar is under a pergola hung with string lights, there's a lounge round a fire pit, and sun loungers look out over the street. The city goes on all around, and its windows, street lamps and traffic light up at night. Press E at the bar (or sitting on a stool at it) for a drink: a beer, wine, a cocktail or a shot goes to your head for a minute or so, and the view sways, doubles and smears while you stagger a little. The more you have, the worse it gets, until the bartender pours you a water. Everyone up there sees the glass in your hand and hears the same bar of music. Press E at the DJ booth to blow the air horn for all of them.
- Darts and axe throwing. In the rooftop bar's north-west corner, past the DJ, there's a wooden axe-throwing booth with a target on its back wall, and a dart board in a cabinet on the outside of it. Walk up to either and press E to step up to the line: the camera looks over your shoulder at the target. Move the mouse (or use the arrow keys) to aim; your hand wanders a little, and more after a few drinks from the bar. Hold Space (or the mouse button) to draw back while a meter runs up and down, and let go in its green: a dart flies true, too soft and it drops, too hard and it sails high. An axe let go in the green turns over just right and sticks; off it, it comes in handle first, bounces off and clanks onto the mat. A visit is three darts (180 is the most) and an axe round five throws, scored 1 to 4 in the rings, 6 for the bullseye and 8 for either blue killshot dot. Everyone up there sees you throw, the darts and axes stuck in the target, and your round chalked up on the board beside it. Your best round at each is kept in your browser. E steps back from the line.
- Jukebox. A jukebox glows in the corner of the lounge. Walk up and press E to put on one of its four lo-fi tunes, skip to the next, turn it off, or paste a link to internet radio or an audio file. Everyone on the floor hears the same song from the same bar, coming from the jukebox: loud on the couch, faint at the desks. The tunes are synthesized in the browser like the office sounds, and it keeps playing when you switch tabs. The jukebox has its own volume under ⚙️, just for you.
- Screen sharing. Your screen appears on the lounge TV for everyone, and there's a full-screen viewer.
- An account for everyone. Open 🔑 Accounts from the ☰ menu and make an invite link. Whoever opens it picks a password and gets an account in their own name. That name is the one on their character, in chat and on every terminal they type into (⌨️ in the terminal header shows who typed last), and nobody else can take it. Admins see everyone's accounts there, can make someone an admin, and can revoke an account, which signs that person out at once. The shared office password keeps working alongside the accounts until an admin switches it off. Sessions are signed cookies, and login attempts are rate limited.
- Your own Claude and GitHub. With an account, the workers you hire run on your own Claude plan, and the office acts on GitHub as you: comments, merges, labels, claimed issues, commits, pushes and pull requests show up under your name, with your git name and GitHub noreply email. The first time you come in, 🔐 Your sign-ins opens (it's in the ☰ menu too). Sign in with Claude gives you Claude's sign-in page and takes back the code it shows; Sign in with GitHub shows a one-time code for github.com/login/device. Or paste a token from
claude setup-token(or an API key), or a GitHub token. A 🐚 shell you open at a desk runs as you, soclaude auth loginandgh auth logintyped there sign you in too. Hiring a Claude worker, queueing a task, calling a meeting or asking a board agent needs your own Claude sign-in first; without one, the window opens and says why. A worker keeps running as whoever hired it: a queued task as whoever queued it, a meeting's workers as whoever called it. Admins can pick the office machine's own sign-ins instead. Everyone's sign-ins are kept apart, so any number of people can be signed in to different accounts at once. Revoking an account signs it out and deletes its sign-ins. On the office password, with no account, everything runs on the machine's ownclaudeandghas before.