Docs — queue, board & memory

The prompt never locks.

Send while the boss is mid-turn and the line lands in a backlog the office manages — not a tunnel, not a lost keystroke. Flushes go out as one batch, completions sweep the board behind them, and everything the office finishes lands in a ledger the next boss reads.

Free-send

The backlog is a queue the office manages.

Hit enter while the boss works and the prompt free-sends into the backlog — the status line reads busy · N queued and you keep typing. Queued items are not invisible: each one gets a board row, so the office and its telemetry agree on what is waiting.

When the backlog drains it goes out as a single [BATCH DISPATCH] — one composed message the boss decomposes into parallel sub-agents, instead of N separate turns replayed in order./route forces that flush early, and /queue shows the backlog (/queue clear drops it). A dead boss respawns a fresh session and resends the batch — the queue is not hostage to one process.

enterfree-send into the backlog/queueshow the backlog/queue cleardrop the backlog/routeforce-dispatch now
chat — a three-item backlog flushing as one [BATCH DISPATCH]
theboringfloor chat tab: three queued prompts flushing out as one [BATCH DISPATCH] message
Board sync

Every completion sweeps the board behind it.

A worker return — or a flushed queue item — flips stranded DOING rows to DONE so the office board stays honest without you policing it. Only office-owned DOING rows are in play: agentmemory-mirrored rows own their own lifecycle and are never touched.

The matching is conservative by design. The completion's own exact row is excluded — the caller already closed it, and the sweep never double-flips it. Then the same worker's oldest in-progress row flips, one per completion. Then a normalized title-prefix match (≥8 characters, case- and whitespace-insensitive) catches twins. A row flips only when exactly one rule claims it — ambiguity across workers flips nothing, and nothing about it is printed or fudged.

When anything did move you get exactly one dim note: [office] board sync: flipped N rows to done. No sweep, no banner — and that note stays on the status bar and the activity log, never in the transcript.

board — two stranded DOING rows flipping to DONE
theboringfloor board tab: DOING rows flipping to DONE behind a worker return, with the dim board sync note
Memory

The ledger is the office's completed-work memory.

Every completed dispatch lands in <dir>/.opencode/office-ledger.md — newest first, capped at 50 — as one ### date · title — worker (role) · `verdict` block carrying the summary line, the touched files, the verify digest, a proof one-liner and a ledgerId. The charter wires that file into the boss's instructions, so the next session's boss reads what this project already finished before re-dispatching it. No more "I don't have any memory of a prior task."

The same record also rides to agentmemory as an office_dispatch_done observation when that server is up — file-only when it is not. The boot splash's memory: ledger armed versus memory: file-only (agentmemory :3111 refused) line, and the status line's memory: note, tell you which lane got it.

In-app, /memory reads the ledger newest-first: the header counts the records and names the memory state (agentmemory OK or file-only), a missing ledger shows an honest empty state, and /memory fix narrows rows case-folded over title and files. Each completed dispatch also stamps a [memory] recorded: <title> → ledger line into the activity tab.

/memorycompleted dispatches, newest first/memory fixfilter over title/files
Unwinding

/stop aborts. The watchdog names a wedge.

/stop aborts current work — boss and workers — on the spot, and free-send keeps taking prompts the whole time. If a busy turn goes silent for two minutes, the wedge watchdog notes it once: the office calls that a wedge, and it reads on the status bar and in the activity log — never in the transcript.

A wedge is a suspicion, not a lock. The office itself keeps answering: keys, panels, scrolling and /stop all still work while the note is up, so a silent turn never takes the floor down with it.

The inverse is an idle floor. After workers finish and the last real chat was yours — not the boss, not the office concierge — two quiet minutes asks the boss to write a recap in chat. The fallback office note only appears if that send misses the wire. A late boss or concierge wrap cancels the recap.

/stopabort boss + workers2minof silence = wedged, noted once2min idleboss writes a recap
chat — /stop unwinds the turn; the wedge note rides the status bar
theboringfloor: /stop aborting in-flight work with the wedge watchdog note on the status bar
Ceilings

What this doesn't do yet.

  • Stuck rows stay stuck. Board sync never flips a row it can't prove — a cross-worker doubt means no flip and no drama, so a stray DOING row is yours to close by hand.
  • The ledger is not recall. It records completed dispatches for the next boss, newest 50. The boss's scrollback is transcript history; agentmemory's semantic search is agentmemory's. /memory only reads the ledger.
  • /stop is not a rollback. It aborts the turn — whatever the turn already changed on disk stays changed.
  • /queue clear has no undo. Dropped backlog items are gone, not parked.

The desks are empty. Your agents are waiting.