Repository navigation
v4.0.0 - Five sources feed one Inbox
Your day did not arrive in Linear. It arrived in a Slack mention at 9:02 and a review request on GitHub. A Sentry error was assigned to you overnight. You promised three things in yesterday's sync, and a meeting starts in forty minutes. Dispatch saw one of those. You kept the rest in your head.
This release is why the version number jumps. Dispatch grows from a Linear board into a workspace that reads GitHub, Sentry, Slack, your meetings and your calendar. All of it lands in one Inbox. A Today page ranks it, and an agent can start from any of it. Nothing you rely on changes. The board, sessions, playbooks, Vault and board.db carry over with no migration. Every new source is off until you press Connect.
Meeting notes become action items
Open the Meetings page, or press New ticket, and choose "From meeting notes". Paste the notes, name the meeting, and press Draft action items. Dispatch sends the notes to a headless claude -p run and returns up to fifteen reviewable items. Untick the ones that are not yours, edit a title, press Create. Each checked item lands in the Inbox. The Meetings page groups them by meeting, keeps the transcript one click away, and turns any of them into a ticket or an agent session. In a real run, four drafts came back in 22 seconds.
This is the one new source that needs no token. It uses the Claude Code login Dispatch already requires.
Today: what first
The Today page opens with a greeting, the date, and a P0 card with the three to five things that most need you. Sessions waiting for input come first, then urgent tickets, review requests and mentions, then everything else. Count chips per source filter the paged "top of your list" below. Once a calendar source exists, today's agenda appears with a Join button. Every row goes where it belongs: the card panel, the pull request, the error.
GitHub and Sentry
GitHub brings in the pull requests that wait on you: review requested, mentioned, assigned. The Pull Requests page shows the description, CI checks with the failing ones first, and diffs on demand. From there you approve, request changes, comment, or squash merge with a confirm. Review with agent and Fix CI with agent start sessions. A pasted token goes in the Vault. Without one, Dispatch asks the gh CLI.
Sentry brings in unresolved errors, yours first. The Errors page shows the exception, breadcrumbs, the stack trace with source context, and tags. Fix with agent starts a session whose card carries the stack trace. Sentry items stay out of the Inbox and Today until you enable the toggle in the Sentry card.
Slack, read-only
Paste a Slack app token into the Slack card, read the consent block, pick channels, and turn the switch on. Every mention in a picked channel and every DM lands in the Inbox with its permalink within one two-minute poll. Load the thread from the row, or press Draft reply to start a session with the message and the thread in its prompt. Dispatch never writes to Slack. One client holds a frozen allowlist of six read methods. A unit test fails if any file under src/ names a write method.
Calendar and Granola
The Calendar source reads this Mac's calendars through EventKit, or a secret iCal URL from the Vault. The Calendar page shows the next 48 hours with Join and Prepare with agent, which gathers the tickets and pull requests an invite mentions. Calendar items feed Today's agenda and stay out of the Inbox. The Granola card runs an hourly headless Claude round through your own claude login, with the Granola tool as the only allowed tool.
Workspaces, Ask and Flow
Workspaces lists every worktree on disk with its card, branch, size, age and cleanup due date, and cleans one up in a click. Ask answers questions like "What needs me right now" from the app's own data through a headless Claude run with tools and hooks off. Flow draws how work reaches you: sources, poller, triage, four urgency trays, with a chip riding the edge when an item lands.
What changed underneath
Every new source is an item source on the registry from v3.8. GitHub, Sentry and Calendar are snapshot sources: a complete pull marks missing rows done, a partial pull marks nothing. Slack and Meetings append, and their cursors advance only after a successful upsert, so a failed poll never skips a message.
Tokens live in the Vault under GITHUB_TOKEN, SENTRY_TOKEN, SLACK_USER_TOKEN, SLACK_BOT_TOKEN and CALENDAR_ICAL_URL. Provider text reaches an agent only inside a fence, with its DISPATCH_STATUS: token disarmed, because a Slack message can hold a literal marker line.
Known limits
No real Slack workspace, Sentry organization, GitHub approve or merge, macOS Calendar, or Granola login was exercised before this release. Each was proven against a loopback fake or a stub. Mentions inside thread replies are not seen. A Slack channel with more than 100 new messages between two reads loses the oldest. A done item that reappears in a later pull stays done. Only daily and weekly iCal series expand. Dismissing the Start dialog after Draft reply loses the drafted prompt. The new pages have no j/k keys yet.
Upgrade notes
No migration and no configuration step. Restart Dispatch, reload the board. Connect sources one at a time from Settings, Connections. Slack needs an internal app with the scopes the card lists. The first Calendar read raises the macOS Calendars prompt. Granola needs its connector in your claude login.
See it
Higher-quality video: dispatch-v4.0.0-meeting-notes-to-today.mp4
Full changelog: v3.8.0...v4.0.0
Requires Node ≥ 22.22, tmux, ttyd, git, and the Claude Code CLI. Setup is in the README.
