dispatch
Sessions waiting on you:0finished:0· all quiet
Sign inStart the trial

Mass-dispatch dashboard/Windows/v0.2.30

The minutes after
an agent finishes
are the ones you lose.

Run six at once and the two that have stopped look identical from across the room: a session that finished its turn prints nothing, and one blocked on a permission prompt prints nothing either. Claude Code sessions tell Dispatch which they are (the count is in the top bar of this page), and you answer them from one list instead of going to find them. What you get back is the gap between a session stopping and you noticing.

Dispatch is a Windows desktop app. Your project terminals in one grid, six agents running at once, and one place to answer them from.

A tile runs whatever you run: Claude Code, Codex, Gemini CLI, or a plain shell.

A Dispatch workspace running four Claude Code sessions at once. One session in vantage has finished and reports that it fixed a race in useAuth. Two, in Aura-Tycoon and meme-factory, are blocked waiting on you: one asking permission to run a Rojo build, the other asking which of two test runners to fix. A fourth, in trendscout, is still working. The activity chip in the top bar reads two waiting, one finished.

One command into four repos. Seconds later: one finished, one still working, and two waiting on an answer. The gold pulse is the product: a tile saying it has stopped spending tokens and started spending you. Claude Code in all four tiles here; a tile runs whatever command you point it at.

Discovered
Every project under your root, grouped
Broadcast
One bar into every targeted shell
Any CLI agent
A tile runs the command you set
Platform
Windows · Rust · Tauri · portable-pty
waiting on you

The bell means a session needs you.
It does not mean the work is done.

You have six workspaces open and one session in one of them is sitting on a permission prompt. It prints exactly as much as the one that finished four minutes ago, which is nothing, so finding it costs you six tab switches. Claude Code sessions report which they are. The top bar counts both, and Ctrl+Shift+A opens the list you answer them from.

The Deck, opened with Ctrl+Shift+A. Two Claude Code sessions are waiting on you: one in Aura-Tycoon asking permission to run a Rojo build, shown with the four rows of its own screen that the question was read from, and buttons for each of the three options it printed; one in meme-factory asking which of two test runners to fix. Below them, one session in vantage that finished while you were elsewhere, leading with the sentence it finished on. One session is still working and three have already been seen, both collapsed to a single line because neither is asking for anything.

Claude Code says it itself

Dispatch runs a small loopback endpoint and Claude Code posts to it when a turn starts, when it ends, when a permission prompt appears and when a session goes away. So a row that says finished means the turn ended, and one that says waiting on you means there is a dialog on your screen right now. The buttons under it come from reading that screen, and that reading fails closed: where Dispatch can't tell what is being asked you get the rows and no buttons, never a button for a question nobody asked.

Anything else still gets a tile

Run Codex, Gemini CLI or a plain shell in a tile and you keep the rest of it: the tile goes gold when that command rings the terminal bell, marks itself done and says how long it has been quiet, strikes through when its shell exits, and marks its sidebar row and its workspace tab while you are elsewhere. What it does not do is reach the chip and this list. Those hold only what a session has reported for itself.

It only counts what you haven't seen

A session you are looking at is never in the count, and one drops out the moment you visit it. So the chip reads · all quiet whenever you are on top of things, rather than growing a permanent tally you learn to ignore.

MCP

Terminals that open themselves.

The broadcast bar is one command into many terminals. This is the other half: many different jobs into many terminals. Keep one session as the lead, a tile you talk to rather than work in. Describe your morning to it and it opens the rest, each in the right repo, each with its own prompt already typed. Any agent that speaks MCP can be the lead, and each tile it opens runs the command that project is set to.

The lead session

“I've got BUG-114 in vantage, BUG-118 in Aura-Tycoon, and two chores in meme-factory. Set them up.”

The command is typed into each shell and left sitting at the cursor. Not run. You read down the row, see exactly what each one is about to do, and press Enter on the ones you agree with. Ask for mode: "fired" when you'd rather they just go. Each tile uses that project's startup command unless the plan names a different one, so the row above is three CLIs because those three repos are set up that way.

All-or-nothing

You never get half a morning. Every project in a plan is resolved before a single terminal is created, so one it can't find means none of them open and you fix the name once. A name matching two projects comes back as an error listing both rather than a guess. A tile opened in the wrong repo is an agent working confidently on the wrong code.

It never disturbs what you're doing

Tiles land in a new workspace by default; pass workspace: "current" to add them to the one on screen. And when Dispatch isn't running, every tool says so rather than guessing.

The tools11 exposed over MCP
dispatch_projects
Every project it can open, with path, group, type and git branch. The lead calls this first to map tickets to repos.
dispatch_plan
Opens a set of terminals in one go, and it is the main one. A tile can carry a doc instead of a prompt.
dispatch_list
What's open now: project, title, still-armed, waiting-on-you, exited, plus each terminal's status and how long it's been quiet.
dispatch_send
Types into an open terminal; multi-line text is pasted as a block.
dispatch_read
Reads a terminal's text back out, including edits not yet saved on a document tile.
dispatch_wait
Blocks until a session rings, exits or goes quiet, then says which and why. Supervision without polling.
dispatch_doc
Opens a markdown file as a live, two-way tile beside the work.
dispatch_studio
Starts and stops a playtest in the Studio linked to a tile, from inside Studio, so it needs no window focus and no keystrokes. It reports the state it actually reached.
dispatch_rojo
The sync switch from a session, which makes "check before you edit" something an agent can do.
dispatch_workspace
Switches to, renames, or closes a workspace.
dispatch_close
Closes a tile and ends its shell.
✓ the mechanism

One command. Every repo.
Still a real shell.

Type in the bar, press Enter, and the command goes to every targeted terminal, the ones whose checkbox is ticked. All and None target everything or nothing; when several groups are open, group chips let you target just one shelf of repos.

Interrupt all of them

Ctrl-C sends an interrupt to every targeted terminal; Clear clears their screens.

Then type into one

Click any single terminal and use it normally. It was never a log pane. It's a full interactive shell.

Pin the ones that matter

Auto-discovery groups projects by category. Pin what you're on, hide the noise, and Ctrl+Shift+P fuzzy-opens any of them.

Six contexts, none of them
each other's problem.

Each workspace remembers its own terminals, columns, tile heights and broadcast targeting, and switching keeps the other workspaces' processes running. Broadcasting only ever hits the active one.

Per-workspace roots

Each workspace scans its own root folder, so one can be your Roblox games directory while the next is your JS/web directory. Pins, hidden projects and recents are shared across all of them, because they're stored by full path.

A workspace for one folder

Right-click a project row or a group header and pick New workspace for this folder. You get a tab named after it with its root already pointed at it. Nothing is opened for you; the tab is just already aimed.

Minimize, don't close

The button drops a tile out of the grid and leaves a card in a bar underneath. The shell keeps running; the card still goes gold when that terminal rings, and strikes through when its process exits.

One repo, two branches, no collision

Two tiles on one repository used to share one checkout, so the session that switched branch moved the other one. Pin a tile to a branch and it gets its own git worktree instead, and a pin that has gone stale says so rather than quietly falling back. Branches and worktrees →

Also in the windownot terminals

Documents as tiles

A markdown file opens as a tile beside the work, rendered rather than raw, and live in both directions. So a plan an agent just wrote gets read next to the session that produced it.

Documents, and what a document tile is for →

A plugin looks like Dispatch

Plugins and integrations are in one place, the Marketplace, instead of a settings page per thing. Each one is a small sandboxed program, so installing one is not handing it your machine.

The manifest declares where its controls belong and what it is asking to touch, and Dispatch draws those controls itself. So a plugin reads as part of the app rather than as somebody else's website in a panel, and it gets the capabilities it named and nothing beside them. The ones that need an account get an OAuth flow instead of a box you paste a token into. Five ship with it, Spotify among them; the usage readout in the next row is another.

The Marketplace, and what a plugin may touch →

What Claude Code has spent, subagents included

Run Claude Code and this totals it from the transcripts on disk, in the sidebar footer where you can see it without asking. Subagent transcripts are counted with the rest. A lead session that fans six of them out looks cheap on its own, and the six are where the tokens went. A total that leaves them out is wrong in the direction that flatters you.

This one is Claude Code only, and plainly so: it reads Claude Code's transcripts and prices Claude models. Another agent in a tile runs perfectly well and has nothing to say to this panel.

What the window, the bar and the cost figure are actually worth →

synced

Know whether Rojo is
actually synced.

A Rojo workflow has two ends, and Dispatch only ever owned one: rojo serve runs in a tile, while the Connect that makes Studio listen lives in Rojo's own plugin. Forget that click and editing a project looks exactly like editing one that is synced. The files change, the place doesn't, and the first sign is a playtest behaving like the code from twenty minutes ago.

The chip is a switch: click it amber and it connects, click it green and it disconnects. Clicking Serve opens a terminal running it, in its own tile in that project, because rojo serve holds a terminal for as long as it runs.

Stated plainly: Studio gives one plugin no way to call another, so there is no API to press Rojo's Connect with. What Dispatch does is bring the window forward and type the shortcut you've bound to Rojo's Connect/Disconnect action. It reports the state it actually reached rather than the keystroke it sent, so a chip that stays amber tells you something real: nothing is bound to that chord, or Studio has a modal in front of the place.

Window-level, and nothing deeper

A tile can be pointed at a running Studio window, and its header carries a chip naming the place that window has open. Click to bring Studio to the front, shift-click to raise it without moving it, right-click for its home monitor. Which windows exist, what each has open, where they sit. Nothing reaches inside.

Close Studio and the chip stays

It names the place it is still pointed at, and clicking it opens that placerather than telling you it is shut. The plugin names itself on the way in, so every handshake carries the place's id.

One tier. Nothing withheld.

Dispatch

$6/ month

or $60 / year2 months free

  • 3 machines per licence
  • Every feature: no gates, no add-ons
  • 14-day trial, no card
  • Auto-updates that never restart your terminals
Full pricing →

Start with the trial, not the card.

14 days of the same build, nothing withheld and nothing to cancel. One afternoon with six sessions running is enough to know whether that number is worth it.

Start the 14-day trial, no card