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.
- Avatars. Everyone in the office (you, the people with you and the passers-by on the street) is drawn as an office avatar: a chibi office worker built in Blender (blender/avatar/CH_OfficeAvatar), dressed as you pick it in the character editor (🧍 Your character): skin tone, haircut (wavy, short, curly, long, bun, bob or bald) and hair colour, beard (stubble, full, long or a goatee), glasses (round, square, thick or sunglasses) and their frames' colour, the top (an open hoodie, a zipped jacket, a sweater with a shirt collar, a tee or a printed tee) in your colour with the shirt inside and the trims in another, an ID badge on a lanyard, trousers or joggers and sneakers or runners, each in a colour of its own. Everyone sees you as you picked; someone who hasn't picked yet wears an outfit chosen from their name. It walks, sits, waves and does every emote and game as the classic people do, blinks now and then and moves its mouth as you talk on voice. In first person, looking down you see your own avatar's body and feet, and your hands are the avatar's, coming out of your sleeves (bare arms in a tee). Under ⚙️ → You → Characters, 🙂 Classic brings back the cartoon people, in your browser only.
- Scale-model look. Under ⚙️ → You → Look, pick 🧩 Scale model to see the office as a model from high up at a slant, the way a management game shows it: you're in it in third person, the walls and everything over head height are cut away, and it's drawn without the ink outlines. Drag to turn it round, scroll to zoom, WASD to walk across the screen, and click the floor to walk there or anything you can use to walk over and use it. 🏢 Classic brings back the first- or third-person camera you had. It's yours alone, kept in your browser.
- 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.
- Minimap. Down in the bottom-right corner, GTA style: the place round you as a scale model, seen at a slant from behind and above, indoors cut off a little over head height (no ceiling in the way; outside the trees and buildings stay whole), drawn every frame and turning as you turn so what's ahead of you is up, with an N on its edge for north. Icons mark the coffee machine, the elevator, the exit, the boards, the bookshelf, the jukebox, the arcade, the gong, the TV, the whiteboard, the golf tee and the ashtray; dots the workers by what they're doing (green working, white done, blue on a break, grey asleep) and the people on the floor in their colours; 🙋 a worker waiting on you, pulsing. Whoever's waiting on you, and the people, stay on its edge when they're off it, pointing the way. It pulls back while you run, and further while you drive. Bars under it show your coffee buzz and how much you've had at the bar. J (or a click on it) opens the whole floor big, north up: click someone to walk over to them, or the floor to walk there. Out on the street it opens the whole map instead, from high above and centred on you: the office (🏢), the city round it, the scenic loop, the beach and the sea. Either way, as GTA's map does: drag it about, zoom in and out with the wheel, a pinch or + and −, and ⌖ takes it back to you. It shows or hides from the ☰ menu like the other panels.
- 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.
- A computer of its own (agent machines). With a machines host set up (⚙️ Settings → Building → 🖥️ Agent machines, see Agent machines), tick 🖥️ With its own machine when you hire, or 🖥️ Own machine in a worker's ⚙️, and it gets a Linux desktop of its own on that host, with Google Chrome. It starts again with a browser MCP server (Chrome DevTools MCP, pointed at that Chrome), carrying on its conversation, and is told it has a computer a person may be watching. A worker in the middle of something asks first: now (which interrupts it) or once it finishes. Its terminal gets a 🖥️ Screen tab with the desktop live: it opens on 👀 Just watch (clicks and keys don't reach it), 🎮 Take control hands you its mouse and keyboard, and ↗ Open in a new tab gives it a tab of its own. A small 🖥️ by its name says it has one (🖥️
⚠️ while it isn't answering). Its machine is deleted when it's sent home, whichever way (✕,office-workers, its PR merging, the queue, its floor taken off), and when it's taken away; after a restart the office finds its machines again. A host that's down never holds a worker up: it works on without its machine and a toast says so. Admins give machines, and members on their floors too unless an admin turns that off; guests never. Claude Code gets the browser and the note; Codex gets both through-coverrides; OpenCode gets the browser only. It also gets a shell in that computer:machine run -- <command>runs a command line there with bash (with passwordlesssudo, so it cansudo apt-get installwhat it needs),machine putandmachine getcopy files in and out, andmachine infosays what's installed (and the same as themachine_run,machine_putandmachine_gettools); a dev server it starts there is atlocalhostin its Chrome. It sees and uses the whole desktop too, not only Chrome:desktop_screenshotshows its screen with every window (scaled to fit 1280×800, as a picture the agent sees), anddesktop_click,desktop_type,desktop_key,desktop_scrollanddesktop_dragwork its mouse and keyboard on anything there (a terminal, VS Code, a file manager, a native app, a dialog), each with a screenshot after; they run in the machine withxdotoolandxwd, which its image already has, and Claude Code workers use them without asking. The Screen tab's desktop follows the size of the window it's in (Chrome maximized in it), so it fills the tab whatever the size of the window. Beside it, a 🗄️ Database tab shows the databases in that computer, and a worker on a server's floor gets the same tab for its server (read over the floor's SSH, as root or with passwordlesssudowhen the floor's user has it): PostgreSQL, MySQL or MariaDB, MongoDB and Redis installed and listening on their usual ports, the same in Docker containers (read with the client inside the container, as the user its image made from its own environment, so no password is ever on a command line), the databases the apps there connect to (theDATABASE_URL,MONGODB_URI,REDIS_URL… in their.envfiles and in the environment of the apps PM2 runs: the page only ever getsuser@host:port/dband where it was found, never the password, which stays on the machine), and the SQLite files in its folders (home,/srv,/opt,/var/www,/app…, not dot-folders, browser profiles ornode_modules). The same database found two ways shows once. Pick a database and a table on the left for its rows, 50 a page (click a cell to see it whole, JSON laid out), or write a query of your own: SQL for the SQL ones, afindfilter for a MongoDB collection, a key pattern for Redis. It reads only, unless an admin turns ✍️ Write on (the office checks it's an admin): then the box runs what's in it as written, one statement at a time (SQL of any kind, withRETURNINGshowing the rows it changed; mongosh code withdbthe database picked, likedb.users.updateOne({…}, {$set: {…}}); a Redis command likeSET key value), each after a confirmation that shows it and where it runs, with a minute to run. Every write goes in the floor's.agent-office/dbview-writes.log(who, when, where, what, and how it went) and a toast tells the floor. Otherwise SQL runs in a read-only transaction (SQLite opens the file read-only, MySQL takes onlySELECT,SHOW,DESCRIBEandEXPLAIN). The office reads them by running a small Python script in the machine as root, through the machines host, with the databases' own clients (psqlaspostgres,mysqlas root,mongosh), so it works with the default local setups; nothing is installed. See Agent machines. - A floor for a server. Not every floor has to be a repository: an admin can add a server you manage over SSH with 🖥️ Add a server on the elevator's panel (its name, address, user and port). The office makes the floor an ed25519 key of its own and shows its public line, with the command that puts it in the server's
~/.ssh/authorized_keys; Try the connection says whether the office gets in (the 🔑 beside the floor shows it again). The floor's workers run on the office's machine, in a folder of their own (<workspace>/servers/<floor>, with anAGENTS.mdandCLAUDE.mdtelling them about the server), and reach it asssh <floor>: that floor'sssh,scpandsftpknow its address, user and key, andrsyncgoes through them. The note also has them build on the server, not on the office's machine (which every floor shares): they copy the code to a folder of its own there (~/build/<repo>, away from what's deployed) and compile, install and run tests overssh <floor>. A 🐚 shell at one of its desks opens on the server, and back to a shell here when you leave it. It looks the part, too: an executive's office at night, graphite walls with brass trim, dark walnut underfoot, black leather chairs and couch, a black kitchen, brass lamps and a green banker's lamp on every desk, the light lower and warmer, two server racks in the north-west corner blinking faster (and more of them amber) the more of its workers are working, and the TV showing a terminal logged in to the server. Its screens are the server's too: pick the repository it runs from your GitHub's (🔗 in the 🔑 window) and its issues and PR boards show that repository's, and the office clones its code into the floor's folder, in a folder named after it (<workspace>/servers/<floor>/<repo>, with the samegh repo clonethat adds floors; a toast says when it starts, ends or fails). The floor'sAGENTS.mdandCLAUDE.mdthen tell its workers the code is at./<repo>: they read, edit, commit and push it there (git and gh work as usual), deploy by the project's own docs or ask, and don't edit the code on the server unless asked. A clone that's there already is left as it is (fetched), every office start checks it's there, and unlinking the repository leaves the clone where it is. The workers still work from the floor's folder, sossh <floor>and the rest go on as before; a server's floor has no own git worktree option (its folder isn't a checkout, and every worker shares the one clone), and the Changes window (C) and a worker's 📝 Code tab show that clone. It works the other way round too: a project's floor can be linked to the server its project runs on (the 🖥️ beside it in the elevator's list, for admins: the server's address, user and port, then the same key to put in itsauthorized_keysand Try the connection). The floor stays the project's (its checkout, worktrees, look and its own 🐚 shells, and nothing is written into the repository: noCLAUDE.mdorAGENTS.md), and its workers get the way in asssh <floor>(withscp,sftpandrsync), the monitor on the west wall and the services board show the server (its PM2 apps, containers and services, which admins can restart), the 🗄️ Database tab reads its databases, and Claude Code workers are told about the server as they start, on top of the project's own instructions (--append-system-prompt, from.agent-office/server-note.md: how to reach it, that it's live, to deploy the project's way, and to build and test there). 🔑 shows its key again, and Unlink the server takes the link, the way in and the key away. Either kind of floor can move to another server: ✏️ Another server in its 🔑 window takes the new address, user and port, and the floor stays as it is (its workers, chats, repository) with the same key, which you put in the new server'sauthorized_keys; the office forgets the old server's host key (and any the new address had), its workers reach the new one asssh <floor>, and the monitor, services board, 🗄️ Database tab and the agents' note follow it. A repository linked to a server's floor isn't added as a floor of its own: it's still listed in the elevator's add a project list, marked already on floor , and picking it offers Go to instead; the monitor on the west wall shows the server's real CPU use (and its load), memory, disk and uptime; and the services board lists its PM2 apps, its Docker containers and its own systemd services (failed ones first, in red), read over SSH every 15 seconds while someone's on the floor. Hiring on a server's floor offers its areas (🗄️ databases, 🛡️ security & network, ⚙️ apps & APIs, 📈 monitoring, 🎨 frontends & deploys), each a first task that has the worker survey that area read-only and report before changing anything, and 👥 Whole team hires one for each at the next free desks. Open the services board for the list, where admins can 🔁 Restart a PM2 app, a container or a service (after a confirmation). The key stays on the office's machine (.agent-office/ssh/), the server's host key is kept the first time and checked after, and taking the floor off the building deletes its key. - A street with life in it. Cars drive round the street and the scenic loop by themselves (a police car, taxis, SUVs and everyday cars), each on its side of the road, slowing behind one another and stopping for you, your car or anyone's; and people walk up and down both sidewalks, stopping for you too. They're each browser's own, but solid: you bump into them on foot, and so does the car you drive.
- 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 grey BMW 328i M Sport parked out front, a sedan with a back seat; the cars are Quaternius's CC0 low-poly ones, fitted to the office) 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. In a car the camera goes behind it and you're not seen in it, only the car (on foot again, you look round the way you did before). Everyone on your floor sees the car go by, 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 city round the office. Past the neighbours out back the city goes on, in the street's own style: roads like the one out front between raised sidewalks with street lamps and trees, and blocks of pastel buildings like the neighbours, the ones close by with shops along the bottom under striped awnings, lower close by and taller further out, with downtown's towers off to the north-east and more blocks east of the scenic loop's pines. The street's taxis, police cars and SUVs drive round its blocks (stopping for you), and people walk round them on the sidewalks. Its windows and shops light up at night. An avenue joins it to the street out front, west of the office, so you can drive in (its streets are road like any other) as well as walk. Its crossings are one piece of asphalt with zebra crossings across every street, and its sidewalks have rounded corners. Its buildings, cars and people stop you.
- 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. Inside the office the light comes from overhead, as bright as the sun outside or the lamps at night, and its shadows fall straight down, so the office looks the same from the street as from inside; outside, the sun casts its shadows as usual. 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. How many? in the hire window hires several at once, at that desk and the next free ones. Workers come with a random name: ⚙️ in a terminal's header renames one (at once, nothing restarts). Claude Code workers also switch their own model by how big their task is (the office's
choose_modeltool, which types Claude Code's/model): Opus to plan and debug, Sonnet to build, Haiku for small chores, each switch shown to the floor;AGENT_OFFICE_MODEL_TIERSrenames the tiers (high=opus,medium=sonnet,low=haiku), and an admin turns it off for the whole office in ⚙️ Settings → Workers (🧠 Workers choose their model). Changed your mind once it's working? The same ⚙️ changes its provider, model and effort: it starts again on them and carries on its conversation (Claude Code, Codex and Pi do; the others, and a change of provider, start a new one in the same folder). - 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]. Rather pick than drag? 📎 in the header opens a file picker and does the same. 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.
- WhatsOffice: the workers' messages to each other, across floors. Workers message each other like on a messaging app.
list_contactslists every agent in the office a worker may reach (on every floor its owner may go to, servers' floors too), with its floor, that floor's project, what it's on and how many of its messages are unread;send_messagesends one a message byname@floor(or its id, or just its name when it's the only one); andread_messagesreads what's waiting (marking it read), or, withfrom, the whole conversation with one worker. Each pair of workers has one conversation. A message waits there; the worker it's for is only told, in one line, once it's free (📬 WhatsOffice: 2 messages from Pixel (Crivo). Read them with read_messages…: in the middle of a turn, after it; asleep, it wakes up for it), and it reads and answers when it's ready. So you can tell a worker ask the worker on crivo how its webhook works and build the gateway integration with it, and workers think of messaging on their own: they're told that when their work touches another project or system in the office, asking whoever works on it beats guessing. The same is thewhatsofficecommand (contacts,send,read) in a shell. Claude Code workers message and read without asking. A worker with unread messages shows 📬 and how many by its head, and 💬 and who it's been talking to for a while after; each worker's terminal has a 💬 WhatsOffice tab with its conversations, laid out like a messaging app (who it talks to down the side with the last message and its unread ones, the conversation as bubbles, its own on the right), to read only: looking doesn't mark anything read. Conversations are kept in the office's.agent-office/whatsoffice.json(the latest 300, 300 messages each). A worker started when this was the office phone keeps working: its calls and replies are messages. - Helpers: the subagents a worker calls in. When a Claude Code worker starts a subagent (its Agent tool: an Explore, a Plan, a general-purpose one…), a helper steps out of the elevator and sits at the free desk nearest it, named after it (Pixel's helper), its card saying what kind it is, what it was asked to do and the tool it's using now; that tool shows on the helper, not on the worker. Once the subagent's done it packs up its box and goes home like anyone sent home, and one running in the background stays at its desk until it really finishes, even after the worker has moved on. Helpers only borrow desks: someone hired at one takes it and the helper moves along to another, and with no desk free it doesn't show until one is (at most a dozen per worker). They come from Claude Code's own hooks (
SubagentStart,SubagentStop, and the tool calls each makes), cost nothing besides what the worker already runs, aren't saved, and a worker that's stopped or asleep has none. - A code editor beside the terminal. A worker's terminal has a 📝 Code tab: the files in the folder it works in (its worktree, or the project) down the side, and VS Code's editor (Monaco) for the one you open, with its colours, find and replace, and Ctrl+S to save. Ctrl+P (or the box over the files) finds one by name. 🌙/☀️ switches between a dark theme (Dracula) and a light one (GitHub's colours). ⛶ makes the window full screen, A−/A+ (or Ctrl − and Ctrl +) change the text size, ↵ (or Alt+Z) wraps long lines, and the line between the files and the editor drags to make the files wider; it remembers all that in your browser. While you have a file open it follows it live (see the next item): if the worker, or someone else, changes it and you haven't touched it, the change comes in by itself; if you have, a bar says so and lets you load theirs or save yours over it, so nobody's work is lost. Close the window with something unsaved and it's still there next time you open the file, as long as nobody's changed it since. The office only opens text files inside the worker's own folder (not its
.git, nothing ignored, nothing past a link out of it), up to 1 MB. Pictures (PNG, JPEG, GIF, WebP, AVIF, SVG drawn as a picture so its scripts never run…), sound (MP3, WAV, OGG, M4A, FLAC…), video (MP4, WebM, MOV…) with its controls and seeking, PDFs in the browser's own viewer, fonts (TTF, OTF, WOFF) as sample lines, and 3D models (.glb, or.gltfwith everything inside it) to turn round with the mouse open in a viewer instead, with their size, ↗ Open in a tab of its own and ⬇️ Download; any other file that isn't text, or text over 1 MB, says so and offers the download. Downloading goes the other way too: ⬇️ in the editor's bar downloads the file open (as it is on disk), a right-click on a file in the list downloads it, on a folder downloads it as a.zipof the project's files in it (what git ignores stays out; 300 MB at most), and on the list's empty space the whole project the same way; a file or folder dragged out of the list onto the desktop downloads there (Chrome and Edge). On a floor with a server (a server's floor, or a project's floor linked to one), admins also get 🖥️⬇️: any path on the server (absolute, or under its home as~/…), a file as it is or a folder as a.tar.gz, over the floor's ssh. Their bytes come as they are, whatever the size, with seeking for sound and video; anything that could run as a page (HTML, say) only ever downloads, and what is shown is sandboxed. The editor loads the first time you open the tab, so the office itself doesn't get any heavier. - Watching a worker code, live, and reviewing it like Cursor. While anyone has a worker's 📝 Code tab open, the office watches the worker's folder (one watcher for the whole folder on a Mac or Windows, one per folder on Linux, leaving out
.git,.agent-office,node_modulesand build output, and only a couple of dozen folders at once across the office) and tells that tab what changes, as it happens, instead of it asking every few seconds. A change to the file you have open comes in by its changed lines alone, so your cursor and scroll stay where they were; those lines light up green for a few seconds, with a red mark where lines went, and with ⌨️ on (it is, unless you turn it off) what was added is typed in over a second or so (just for show, and not for big changes or a hidden tab). Files come and go in the list as the worker makes, deletes and renames them, with a green dot on the ones just changed. 👀 Follow the worker (on while it's working, unless you turn it off) opens whatever it's editing now and jumps to the change, with a bar over the editor saying so (✍️ Ada is editing src/app.ts): Claude Code (and a custom agent that speaks its hooks) says which file each edit is on; for Codex, OpenCode, Grok, Muse and the rest it follows the file that changed last. 🔍 Review shows the worker's edits as Cursor does: each file against what it was the last time someone accepted it (at first, as it was when anyone first opened the worker's Code tab), its new and changed lines green and the lines it took away in red above them, with ✓ Accept and ✕ Reject on every hunk. Under the file list, Changes to review lists every changed file with its lines added and taken away, a ✓/✕ for each, and ✓ Accept all / ✕ Reject all. Accepting only moves the starting point (kept per worker in the floor's.agent-office, never in the project); rejecting writes the old lines back into the file, through the same checked save as Ctrl+S, and only over the version you were looking at: if the worker wrote it again meanwhile, it says so and shows you the file as it is now. A file the worker made is deleted when rejected, and one it deleted comes back. Save or undo your own unsaved changes to a file before reviewing it. Ctrl+K (⌘K on a Mac), or Ask … about this on the right-click menu, over some lines (or just the line the cursor's on) opens a box: say what you want and the worker gets it as a prompt naming the file, the lines and what they read, so its edit comes in live, ready to review. It goes only to an agent that's free (idle or finished: one in the middle of a turn says it's busy), and like everything in the Code tab, only for people allowed on the worker's floor, never guests. - Uploading into a worker's folder. Drag files, or whole folders, from your desktop onto the 📝 Code tab's file list and they go into the worker's folder, as in VS Code's explorer: onto a folder, into that folder; onto a file, into the folder it's in; onto empty space, the top folder; onto the editor, the open file's folder. The folder they'd go into lights up while you drag. ⬆️ Upload in the tab's toolbar picks files instead, for the open file's folder (or the top). The button counts them up as they go (Uploading 2/5…), the list shows them when they're in, a toast says how many went where (and what didn't, and why), and a single text file opens in the editor. Nothing's overwritten without asking: when some are already there, a bar asks once whether to Replace them, Keep both (the new one as name copy.ext, then name copy 2.ext, as VS Code names copies) or Skip them. Files go in byte for byte, text or not, up to 50 MB each, and only inside the worker's own folder: never into its
.gitor the office's.agent-office, nor past a link out of it. Files git ignores go in too, but the list doesn't show them. - 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.
- The other floors, from wherever you are. Under the 🤖 Workers panel, 🏢 Other floors lists each floor in the building with anyone working on it, one line apiece: api · 🙋 1 · ⌨️ 3 · ✅ 2 (waiting on you, working, done and nobody's looked). Open it, and open a floor, to see its workers as in the panel above, the ones that need you first and in red with what they're asking. Click one and you're taken there: the elevator, its desk, its terminal open. Whether it's open, and which floors, is kept in your browser. When a worker on another floor stops to ask you something, a strip under the top bar says so (Pixel, on the api floor, needs you), with the alarm if you have it on: Go takes you to it, ✕ puts it away until someone else asks.
- 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 · Command Express. 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 3D office by touch. On a phone or a tablet the 3D office has touch controls (a laptop with a touch screen gets them from the first finger on the scene; with a mouse nothing changes). A thumb landing low on the left of the screen is a thumbstick: it walks you the way it leans, faster the further it's pushed, and runs pushed all the way. Any other finger dragged over the scene looks around (orbits the camera in third person), and a tap uses what's there, as a click would: in first person the view turns to it first, so it's what the crosshair is on (a worker opens its terminal, a board opens, the elevator calls). The round buttons bottom-right are Use (E, labelled with what E does where you are), Jump (Space; where Space does something else the button says what and stands out, as Hold to swing at the golf tee or Brake in a car, and is held down and let go as the key would be), 🙋 Next (N, the next worker waiting on someone), ↩ Leave while you're sitting, driving, up the ladder, at the tee or looking through the telescope, and ⋯ with the other keys the hint bar shows (a worker's desk has a few), 😀 emotes (the wheel opens; tap one), 🤖 Workers, 🔎 Find (the command palette, as Ctrl+K opens it), chat, the map, the help (which starts with these touch controls) and the ☰ menu. They step aside while a window is open or you're typing. On a phone's width the panels down the side and the minimap give way, the chat moves to the top, and the scene is drawn at no more than 1.25 pixels to a CSS pixel (see the next item): 🤖 on the top bar (or 👥, or ⋯ → 🤖 Workers) opens the panels as a window of their own, the workers first (the ones waiting on someone at the top), then who's in and the spend, and a tap on a worker opens its terminal; J (⋯ → Map) has the map, full screen. The games and the rest play by touch too:
- Golf: drag to aim (finer than looking around), the stick's up and down change the loft, and hold the Hold to swing button and let go for the power.
- Darts and axes: put a finger on the target, drag it to aim while the meter runs, and let go in the green.
- The ladder: the stick up and down climbs.
- Cars: the stick is the pedal and the wheel, as far as it's pushed (halfway is half the gas, a little to the side a gentle turn), and the Space button brakes.
- The telescope: drag to look around, pinch to zoom in up to three times; its ✕ button gets you out.
- BLOCKFALL (the arcade cabinet): round buttons along the bottom, ◀ ▼ ▶ on the left and swap, pause, drop and turn on the right, held down as keys are.
- Minesweeper (the boss's monitor): a tap digs and a finger held on a cell flags it.
- Third person: pinch to bring the camera in or out, as the mouse wheel does.
- Graphics, light on a phone. Under ⚙️ → You → Graphics, ✨ Auto (the default) draws the office light on a phone or a tablet and at its sharpest on a computer; 🖥️ High and 🔋 Light pick one whatever the device (the page reloads to change it, and it's kept in your browser). Light draws without antialiasing at no more than 1.25 pixels to a CSS pixel, with a 2048 shadow map redrawn every other frame, at most 30 frames a second and 15 once nothing has been touched for half a minute. On Auto, either way, the resolution eases down while frames come slowly and back up once they don't. Whatever the setting, the office draws only 4 frames a second while a window covers the whole view (the big ones on a phone), nothing in a hidden tab, and it tries reconnecting less often (once a minute at most) while the page is out of sight, and at once when it's back.
- 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 conversation as a chat (see below), with its terminal on the 💻 Terminal tab: 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; a finger dragged over the terminal scrolls it, as a mouse wheel would (Claude Code's own view included). ✍️ on a card sends one without opening the terminal, and one that needs input has an Answer button. Chips over the list show everyone, only who's waiting, working or asleep (remembered in that browser), and a card shows 📬 with how many WhatsOffice messages its worker hasn't read. The tabs at the bottom open 📌 Issues, 🔀 PRs and 📋 Queue (the same windows as in the office) and ☰ More (notifications, installing the app, the meeting room, the 3D office); the round ✨ New button hires someone. Tap the floor's name at the top for every floor, with who's waiting on each, and there's a button straight to any floor where someone's waiting. The phone's back gesture closes the window on top instead of leaving. The tab title counts who's waiting, and a worker that needs you pops up a notification and buzzes the phone while the page is open. Installs as an app: from ☰ More → Install the app (Chrome and Android ask with a button; on an iPhone it's Share → Add to Home Screen), it opens full screen from its own icon, works offline for what it has already loaded, and shows how many workers are waiting on the icon. Opening/lite?floor=<id>&worker=<id>goes straight to that worker's terminal. The 3D office offers the 2D view on a phone (as a note at the top that leaves the touch controls free), 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. - Phone notifications, with the app closed. Install the 2D view on your phone's home screen (on an iPhone, iOS 16.4 or later, Share → Add to Home Screen, then open it from there) and turn on push notifications in it (☰ More → Turn on notifications, where Send a test checks it), and a worker that starts needing you, or finishes and nobody has looked, sends a push to the phone even when the app isn't open: 🙋 Byte needs you or ✅ Byte is done, with its task and what it's asking, in the language you picked. Tap it to open that worker in the 2D view; the app icon's badge counts who's waiting. You only hear about floors you may go to, once per change (not again for the same worker and status within 20 seconds), and a phone that unsubscribes or whose push service drops it is forgotten. It needs the office on HTTPS. The office makes its own push key (VAPID) the first time it's needed and keeps it, with the phones' subscriptions, in
.agent-office/push-vapid.jsonandpush-subscriptions.json(readable only by the office's user); deleting the key file means every phone has to turn notifications on again. Each push says it's from the office's own address; setAGENT_OFFICE_PUSH_SUBJECT(amailto:orhttps:URL) to sign them with another. - A worker's conversation as a chat. A Claude Code worker's terminal has a 💬 Chat tab: what you told it, what it said back (as it wrote it, headings, lists and code included) and each tool it used, as a row that opens to show what ran and what came back, in a page that scrolls like any chat. It's read off the session transcript Claude Code keeps, so it's the conversation itself rather than a picture of the terminal, and it shows a worker's whole history across office restarts; Earlier… at the top pages further back. The box at the bottom sends a prompt (🎤 dictates one), ⏹ interrupts, and when the worker wants permission the choices show above the box as buttons (Yes, Always, No), the same keys the terminal takes. A question with its own choices, or a menu, still wants the terminal: the tab is a tap away. On a phone the chat is the tab that opens; on a computer the terminal is, with the chat beside 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. - Copying out of a terminal. 📋 Copy in a worker's terminal copies the agent's last reply as plain text, ready to paste anywhere: without the margin the agent draws it in, and with its paragraphs back together instead of broken wherever the window ended (or, if you've selected something, just that; with Shift, the whole screen). ⌘C or Ctrl+C on a selection cleans it up the same way. Claude Code keeps a mouse drag for itself, so to select text inside it drag with Option held (Shift on Windows and Linux).
- 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 six 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_worker,discuss_with_worker(their turn in a discussion, below) andlink_pr. Every worker, whichever agent it runs, also has the same thing as theoffice-workerscommand (office-workers list,office-workers home --merged,office-workers tell Mochi,office-workers discuss <id>, 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). - Existing workers discussing. Press 💬 Discuss on the Workers panel's title, pick an implementation owner and an independent reviewer from the agents already at their desks, and give them a topic. They stay where they are and exchange up to six messages, every one of them a line in the floor's chat (the first line says who started it), so everyone who may be on the floor can follow and nobody else sees it. Each handoff waits until its recipient is done with its current turn, and a turn still waiting survives an office restart (it's kept in the floor's
.agent-office/discussions.json). Workers reply withoffice-workers discuss <id>(the reply on stdin, or--message "…") or thediscuss_with_workerMCP tool, and only the worker whose turn it is can. The reviewer is told to read without editing the shared checkout; both are prompted to prioritize robustness, efficiency, optimality and long-term maintainability. Shells, workers in a meeting and the board agents can't take part. Starting another discussion on the floor replaces the previous one, and one ends early if either worker goes home. It uses both agents' tokens. - 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. - Languages. The office speaks English and Brazilian Portuguese. Each person picks theirs under ⚙️ → You → Your language (or it follows the browser's), and an admin picks the office's own under Building → The office's language: what it says in its notices and errors, in the terminal it runs in and in Slack or Discord. That one starts as
AGENT_OFFICE_LANGsays, else English. - /party. Type
/partyin the chat and, on your floor, every worker and board agent gets up on its desk and dances for a minute (the dog too, hopping and turning on the beat), the rooftop DJ's drum and bass plays on the floor, and the room turns into a club: the lights go down, lasers sweep from the ceiling, a mirror ball turns, spots of colour chase across the floor and everything flashes on the beat./party stopends it early. - 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. Or make it a 🐱 Cat: it does the same day on the floor, but as a cat. It sets one paw down after another, sits with its tail wrapped round its front paws, washes its face, loafs on the rug with its paws tucked under, and curls up in a ring under a busy worker's desk. It meows at a worker that needs input, and when you pet it, it purrs with its tail straight up and half shuts its eyes. Every coat works on it, golden making it a ginger tabby.
- A toy whip. Press U to take out a whip and E (or click) at a worker nearby to crack it: the lash flies out with a crack, and the worker jumps back with an Ow! and stars round its head. Everyone on your floor sees it. It's purely for fun: nothing is sent to the worker, and its terminal, code and tokens are left alone. U again or Q puts it away.
- 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).
- Breaks. Press Z at the desk of a worker that's finished and it gets up for a break: it wanders the office from stop to stop, half a minute or so at each, for a coffee at the machine (mug in hand), a sit on the couch or the balcony bench, the jukebox, the arcade, the bookshelf and a few swings on the golf tee, and one in three goes out to the ashtray for a cigarette. Every worker's round is its own, one to a stop, and everyone on the floor sees the same. Walk up to it wherever it is for its terminal, as at its desk. Z again calls it back, and giving it something to do (a prompt, a task) ends the break too: it walks back to its desk and sits down.
- 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, search YouTube right there and pick a song (it carries on with a mix that starts from it), or paste a link to a YouTube video or playlist (a mix too), internet radio or an audio file. While YouTube's on, the jukebox shows the video and what's up next in the playlist, to jump straight to any of it. Everyone on the floor hears the same song from the same bar, coming from the jukebox and filling the floor like background music, a little softer and more muffled the further you are. 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. Left playing to an empty floor, it turns itself off after 10 minutes.
- 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.
- Floors per person, and the bar open to anyone. A member only goes to the floors an admin ticked for them (🏢 beside their name in 🔑 Accounts, or on the invite): the others show on the elevator by name, 🔒, and nothing of them reaches that member, not their workers, terminals, files, boards, people, chat or search. Each floor, and the rooftop bar, has its own chat. 🍸 Rooftop bar for guests makes a link (
/bar#…) anyone can come up by, as a guest, for everything at the bar: chat, voice, drinks, darts, axes and the DJ's horn. A new link or closing the bar sends the guests out. The building's own settings (map, decorations, sky clock, webhook, upgrades, merged workers going home) are every floor's, so only admins change them. - 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.