Repository navigation
v4.5.1 - Boards, the pull requests page, inbox scope and the resume fix
Version 4.5.0 gave each board an orchestrator. Real use then found friction around it. A new board needed a key, a folder and a repository before it existed. The board pages had no address of their own. A pull request asked for a review, but a review session took manual setup. The Inbox filled with GitHub, Sentry and calendar items that needed no session. Resume could open an old conversation. A question from a subagent stopped the whole card.
This release fixes those problems. Each change is a fix or a follow-up to a released feature, so this is a patch release.
The orchestrator rule book and start_card
The board orchestrator now loads a rule book with the get_rulebook tool. It loads the rule book when the session starts and after each handoff. The rule book gives three paths for work: write code directly, a PRD with a Ralph Loop, or a group with a Roadmap Loop. It also gives the grouping rules and a block of standing rules that each direction carries. The rule book ships in the package.
The new start_card tool starts one ticket card the same way as the Start dialog. It takes a playbook, and optionally a direction, a folder and repositories. It refuses these starts:
- A group card, a card that already runs, or a card in Done or Inbox.
- The Board Orchestrator playbook, or an unknown playbook.
- A start above the Loops at once cap.
Evidence: "start_card answers when the start began, not when the worktree exists." (docs/orchestration/rulebook.md)
A lighter local check loop and a shared check slot
Local checks are now faster, and parallel sessions on one Mac no longer run heavy checks at the same time.
npm run lintruns ESLint without type information.npm run lint:typedadds the type rules, and CI runs it.npm run typecheckusestsgo. A cold typecheck went from more than 900 s to 10.1 s.npm run check:changedchecks only the files that changed againstorigin/main.- The heavy scripts run through a check slot gate. All worktrees on the machine share the slots. The default is 1 slot for each 8 GB of RAM, minimum 1.
DISPATCH_CHECK_SLOTSchanges it. A script with no free slot waits, and after 5400 s it exits with code 75. - The Stop hook runs the static checks with a 240 s limit. When no slot is free, it prints "Static checks skipped: no free check slot." and lets the stop continue.
Evidence: "Unit branch: full npm run check passed in 707.6 s wall." (LOCAL-105 ship notes)
Subagent questions no longer stop the card
When a subagent calls AskUserQuestion or ExitPlanMode, the card now stays where it is. A subagent cannot show a dialog, so the question never waited for you. The same tools in the main session still move the card to Needs Input. A pause marker now also clears when the tool fails, and when the main session runs a tool or stops.
Evidence: "A payload with an agent_id comes from a subagent, which cannot show a dialog, so its pause-tool events never move the card." (hook-events.ts)
Boards: a name is enough
The New board dialog now needs only a Name. Repositories are optional. Advanced holds the Key, the Folder and the Linear team keys. Dispatch makes the key from the first 6 letters or digits of the name, for example "Payments" becomes PAYMEN. The folder is <workspaces root>/<key>. You can also ask on the Ask page: "create a board called Payments".
- The Boards section in the sidebar comes after the System group. Each board row shows its attention count and running loops. The last row is Create board. The palette also has Switch to board, Manage boards and Create board.
- Each board has its own pages:
/boards/<KEY>for the kanban, and/boards/<KEY>/dashboard,/inbox,/sessionsand/settings. The old addresses/board,/inbox,/dashboardand/sessionsgo to the keyed page of the current board. - A board with no repository can still start work. Start offers Start without a repository, Create a repository here and Add a repository.
Evidence: the create body "takes a name alone and leaves the key and folder out" (LOCAL-102 test).
Command centre data
This part has no new screen. It prepares the command centre that a later release shows.
- A new decision kind,
plan, holds 1 to 20 entries. Each entry has a ticket, a playbook, an order and a size. You approve or reject the plan. The rule book now asks the orchestrator for aplandecision. - A new read route,
GET /api/boards/:key/orchestrators/:id/conversation, gives the orchestrator conversation as user, orchestrator and system messages. Wake, kickoff and handoff lines show as system messages. - View models for the centre graph and the conversation exist with their tests.
Evidence: "No shared component extraction applies (no UI in Part 1a)." (LOCAL-104 Part 1a PRD)
Resume, messages between sessions, the Inbox and pull requests
Resume starts the latest session (LOCAL-99). Resume now opens the newest conversation on disk when it started after the stored one. When the stored conversation file is missing, Resume continues the newest conversation in the workspace. The line next to Resume shows the choice as "Resume: <first 8 characters of the id>, started ". A tooltip tells you when a newer conversation replaced the stored one.
Messages from other Claude sessions (LOCAL-98). Settings, Board has a new setting, Messages from other Claude sessions, with Accept, Hold for review and Refuse. The default is Accept. It applies to sessions that start from a ticket. Roadmap Loop and orchestrator sessions refuse, unless the board policy field "Messages from other sessions (loops and orchestrator)" says otherwise. A running session keeps its value until it restarts.
The Inbox shows only work that needs a session (LOCAL-100). The Inbox now lists two kinds of item: Slack messages that need a session, and Linear Inbox cards. GitHub, Sentry, Calendar and meeting items stay on their own pages. A Slack message stays in the Inbox when it is a direct question or a request with an action verb. Dispatch shows the reason with a Needs a session badge. Bot messages, reactions, greetings, acknowledgements, digests and broadcasts go to the Slack page only. On a selected row, d dismisses the item with a 10 second Undo, r restores a dismissed item, and y opens the Start dialog. Dismissed (n) shows the dismissed items.
The Pull Requests page and Review (LOCAL-101). Pull Requests is in the Sources group. It lists the first 100 open pull requests of the board repositories with a github.com remote. The table shows number, title, author, repository, state, checks, age and the linked card. Filters are Mine, Review requested, an author list and a repository list. Review finds or makes one review card for the pull request, on the board that holds the repository. It moves the card to To Do and opens the Start dialog with "Review a pull request" selected. The session runs on a local branch review/pr-<n> at the head of the pull request. The prompt tells it to post nothing to GitHub until you approve in the session. A second Review uses the same card.
Evidence: "Linear reaches the Inbox as cards; GitHub, Sentry, Calendar and Meeting items stay on their own pages." (src/shared/feed-items.ts)
Also in this release
- The check loop. Untyped local lint, the
tsgotypecheck andcheck:changed(LOCAL-105). - The slot gate.
scripts/with-check-slot.mjsshares the check slots between all worktrees, and the Stop hook skips its checks with code 75 when no slot is free. - The hook fix. Hook settings now register
PostToolUseFailure, and the hook route readsagent_id(LOCAL-108). - Specs. New end to end scenarios for the orchestrator intake, the resume of the latest session and the centre data, and the unit specs of each change. The visual suite gains 5 board screens.
Known limits
- You cannot approve a permission prompt from the attention queue. Open the terminal.
- The queue refuses a reply in four cases. The session shows a permission prompt, the session shows the usage limit dialog, the session waits for the usage reset, or Claude exited.
- A reply of more than 500 characters goes to the loop as a file with a one-line pointer.
- The queue has no length limit.
- A Needs input item can take up to about 2 seconds to show, because the marker watcher reads the panes every 2 seconds.
- The sidebar Dashboard row and the Go to Dashboard command show only on a board with a main orchestrator.
- When an orchestrator start fails, the reason can be raw text from the Claude pane.
- A wake line clears a message that you typed but did not send in the orchestrator terminal.
- A review session runs with the default skip-permissions argument and your
ghlogin. "Post nothing" is a prompt instruction only. - A Roadmap Loop session starts with Refuse for messages from other sessions, but a later Resume of it starts with Accept.
- A session with no hooks gets no settings file, so the messages setting does not apply to it.
- A review card in Done cannot start a new review after the pull request changes. Ship from a review card pushes the card branch, not the review branch. A second session on a review card fails with a general start error.
- Dismissed Inbox items never expire. Dismissed (n) ignores the search and the filters. A second dismiss within 10 s replaces the first Undo.
- The command centre screen is not in this release.
- Some timing tests fail under load and pass alone.
Upgrade notes
- The store schema stays at 3.
board-db.tsdid not change, so there is no migration. - New values merge with defaults.
crossSessionInboundinconfig.jsondefaults to Accept, and the board policy field defaults to Refuse for loops and the orchestrator. Dispatch seeds the new "Review a pull request" playbook once. - One behavior changes: in 4.5.0 every ticket session refused messages from other sessions. Ticket sessions now accept them by default. Set Messages from other Claude sessions to Refuse to keep the old behavior.
- Old board addresses still open. Otherwise there is nothing to do on upgrade.
- For contributors: run
npm cifor the new dev dependency@typescript/native-preview. Addtags: reviewto a custom review playbook to show it in the Review dialog.
See it
dispatch-v4.5.1-boards-prs.mp4
Higher-quality video with narration: dispatch-v4.5.1-boards-prs.mp4
Full changelog: v4.5.0...v4.5.1
Requires Node ≥ 22.22, tmux, ttyd, git, and the Claude Code CLI. Setup is in the README.
