Docs — keys & slash

You don't memorize this list. The popover does.

Every command in the office sits behind one discovery surface: type / and narrow. The tables below are the reference copy — grouped by where your hands already are.

The discovery surface

The slash popover is how you find everything.

/ at a word start opens the picker. Keep typing to narrow it: /th filters to /theme, /themes, /thinking. Arrows move through the matches, enter or tab accepts, esc walks away clean with no side effects. Arrowing through the /theme matches applies each theme as a live preview while you pass it — accept and it sticks; escape and the office settles back to what it was.

That popover is the intended way to learn the office — the reference table further down this page is what it is filtering.

slash popover — /th narrows the list; arrows move, enter accepts
theboringfloor slash command popover: typing /th filters the command list to theme and thinking commands
Key table

The keys, by where your hands are.

Navigation

q / ctrl+cquit the office
ctrl+qarm quit — works everywhere, embedded terminal included

Panes

tab / shift+tab / 1..7switch panel: chat · terminal · agents · board · mail · activity · git — only while shell-captured (ctrl+space) are these NOT intercepted
up / down / pgup / pgdn / wheelscroll the active panel
enter / click a filegit tab: open its colored unified diff — b / esc back to the list, r refresh

Chat composer

entersend to the boss — free-sends into the backlog while the boss is busy
shift+enter / ctrl+jnewline — ctrl+j covers terminals that deliver shift+enter as a bare enter
@at a word start: attach-file picker — type to filter, arrows choose, enter / tab attach, esc close
ctrl+vpaste text — attaches the image instead when the clipboard holds one
paste >20 lines / >2000 charscollapses to a one-line [pasted N lines · M chars] chip — deletes as one backspace unit, expands back to the full text on send
backspaceon an empty input: drop the newest attachment chip
y a n escanswer a permission prompt — allow once / always / reject / defer
ctrl+ptoggle plan/build mode — the plan pane opens once a plan has content
ctrl+xplan mode: approve the presented or edited plan → sent to the build agent

Attachments stage as dim paperclip chips above the input — capped at five, the oldest drops past the cap — ride the message queue like text, and go out as prompt file parts; the echoed bubble shows an attachment-count suffix. /clear or a send clears the chips.

Pastes route to the focused surface, one deliberate path. In the chat input a paste over twenty lines or two thousand chars collapses to a one-line [pasted N lines · M chars] chip — it deletes as a single backspace unit and expands back to the full text on send. A question dialog's free-answer field takes a multi-line paste verbatim. The terminal tab wraps the paste in bracketed-paste markers for the shell. And picker filter inputs — /model, /session, @ — take paste as filter text.

Threads

ctrl+gexpand / collapse a worker thread inline in the chat
ctrl+fopen the most recent worker thread as a fullscreen focus pane — esc / ctrl+f closes back, office state byte-identical
ctrl+texpand / collapse completed thinking blocks
ctrl+dexpand / collapse diff blocks

Terminal tab

ctrl+spacetoggle shell keyboard capture both ways — released is the default, leaving auto-releases
ctrl+orelease shell capture (alias — release only, never a dive)
rrespawn the shell when it dies
drag + releaseselect terminal text; release copies, · Copied N chars rides the badge row
esc / typingcancel the selection highlight
pasteinto the shell, wrapped in bracketed-paste markers — readline / zle safe

Browser tab

ctrl+bflip the left pane between the floor and the browser — the only way in
up / down / j / kmove the link cursor
oopen the focused link — a file rides to the OS browser, http(s) navigates in place
einline URL editor in the location bar — prefilled, enter opens, esc cancels
O (shift+o)open the current page in the OS browser
[ / ]back / forward in the 100-page history ring, scroll offsets restored
rreload in place, no duplicate history
pgup / pgdnscroll the body
q / escback to the floor
The model picker

/model swaps the boss's brain, and it writes back.

Find /model in the popover, then hand it the full id as /model provider/model — for example /model anthropic/claude-sonnet-4-5. From then on the choice rides every boss prompt as a {"model":{"providerID","modelID"}} pair, and the command writes back to brain.json like /power and /theme do, so the next boot keeps it.

One honest caveat from the engine room: role models ride as best-effort notes. Which model a sub-agent actually gets is opencode's call at dispatch time, not the office's.

The picker filters as you type: a filter: … row shows the live query, the title badge runs N/M (narrowed of total), a dead query says (no matches), backspace edits, ctrl+u clears, and esc clears a live filter first — a second esc closes the picker. Pastes land in the filter too. The /session picker and the @ attach picker filter the same way.

/model — the boss model rides every prompt and persists
theboringfloor /model command: picking the boss model as provider/model
Slash reference

The full command table, grouped.

These are office commands — anything the picker doesn't list is sent to the boss as plain text.

Agent context-recovery tool

⟦recent-messages⟧ / ⟦recent-messages: N⟧agent-only marker, on its own line and once per reply — recover the latest 20 messages by default, or N clamped to 1..50; read-only and no permission prompt

The queue

/queue [clear]show the backlog — clear drops it
/routeforce-dispatch the backlog as one [BATCH DISPATCH] now

The work

/stopabort current work (boss + workers)
/newfresh office — the transcript is archived
/sessionpast-sessions picker; switch the office live
/backendprint the active LLM transport; swap opencode/claudecode while idle
/statusoffice status
/mcp [reconnect <name>]MCP server status; reconnect one server

Popovers

/permre-open an esc’d permission prompt
/questionre-open a deferred boss question

Permissions

/bypasstoggle session-scoped bypass-permissions — confirm to enable, instant off

Bypass permissions. /bypass is the deliberate escape hatch: agents run tools and browser actions without asking, for this office session only. Enabling asks for an explicit confirm first; disabling is instant. While on, every tab's topbar carries a loud ⚠ BYPASS segment, and any ask that still slips through — including the office's own browser-action prompt — is auto-approved with a dim log row in the transcript. Toggling respawns the backend so the mode actually reaches the agent (claude resumes your session context), and every boot starts with bypass OFF. On opencode the office-owned child receives an ephemeral OPENCODE_CONFIG_CONTENT allow-all override; the member's .opencode/opencode.json, parent environment, and brain.json stay byte-identical. Claude writes nothing at all. The full story lives with the permissions docs.

Display

/theme <name>switch theme (persists)
/themeslist themes
/thinking on|offshow / hide thinking blocks
/tools on|offshow / hide tool one-liners
/diffs on|offexpand / collapse file diffs
/clearempty the chat

Floor & power

/compact on|offcompact layout, this session
/mode normal|compactlayout mode (persists)
/wide 26..100sidebar width — 0 restores the default of 80
/zenfullscreen floor, any key exits
/focus flooralias of /zen
/power auto|performance|saverthe power governor — how hard the office renders

Boss & memory

/model provider/modelboss model — rides every prompt, persists
/memory [filter]completed dispatches from the project ledger, newest first

Meta

/helpthe command list, in-app
/quitexit theboringfloor
Sounds & clipboard

Two quiet channels worth knowing.

Sounds. The office has a small vocabulary of synthesized chimes — queued, send, reply, done, dispatch, alert, error. ui.sounds in brain.json takes on, bell or off, and THEBORINGFLOOR_MUTE=1 silences it from the environment. The sounds library plays every chime and serves the WAVs.

The clipboard. Drag-select over the chat transcript and the span copies through the terminal's OSC52 clipboard on release, with a transient Copied N chars note on the status bar; esc or a plain click clears the highlight. The terminal tab adds pbcopy, wl-copy, xclip or xsel ahead of OSC52 — the details live with the terminal tab docs.

Ceilings

What this doesn't do yet.

  • Keys are fixed. brain.json has no remap key — the table above is the table.
  • Attachments are files and images. The @ picker and ctrl+v image paste are the whole staging surface.
  • OSC52 depends on the terminal. A terminal that strips OSC52 keeps the host-clipboard paths only — the copied note stays honest, the pasteboard stays empty.

The desks are empty. Your agents are waiting.