Installation
Applies to: Dispatch v1.0.0, last verified 2026-04-05
Prerequisites
Section titled “Prerequisites”- Node.js >= 20 (
.node-versionpins20.19.0) - npm >= 9
- A terminal and a browser
- At least one supported CLI agent installed (any combination):
- Claude Code (
claudeCLI) - OpenAI Codex (
codexCLI) - Google Gemini CLI (
geminiCLI) - GitHub Copilot (VS Code extension with MCP support; no CLI spawn)
- Claude Code (
None of the providers are required. Dispatch works with zero agents running (you can browse existing .tasks/ data), but session tracking requires at least one provider installed.
1. Clone and install
Section titled “1. Clone and install”git clone https://github.com/thepixelabs/dispatch.gitcd dispatchnpm install2. Start in development mode
Section titled “2. Start in development mode”npm run devThis starts the backend server and a Vite dev server with hot reload. Open http://localhost:5173 in your browser.
3. Production build
Section titled “3. Production build”npm run build && npm startThe production build serves everything from the backend server. Open http://localhost:4242 in your browser.
4. Register a project
Section titled “4. Register a project”Dispatch watches the .tasks/ directory inside each registered project. Register your first project:
node cli.js add /path/to/your/project --name "My Project"The path must exist on disk. Dispatch validates it and saves the registration to ~/.dispatch/config.json. You can register multiple projects, and Dispatch watches them all simultaneously.
Check what is registered:
node cli.js listRemove a project:
node cli.js remove "My Project"For the full ~/.dispatch/config.json format and how to edit it directly, see CLI Reference: Configuration file.
Running Dispatch persistently
Section titled “Running Dispatch persistently”By default the server runs in your terminal and stops when you close it. For day-to-day use, you want it to start automatically and stay running in the background.
Option 1: pm2 (cross-platform, recommended)
Section titled “Option 1: pm2 (cross-platform, recommended)”pm2 is a Node.js process manager that restarts your process on crash and survives terminal sessions.
npm install -g pm2cd /path/to/dispatchnpm run build # build once before starting in production modepm2 start "npm start" --name dispatchpm2 save # persist across rebootspm2 startup # follow the printed instructions to install the startup hookUseful commands:
pm2 status # show running processespm2 logs dispatch # stream logspm2 restart dispatch # restart after config changespm2 stop dispatch # stop without removingpm2 delete dispatch # remove from pm2 entirelyOption 2: launchd (macOS)
Section titled “Option 2: launchd (macOS)”launchd is the native macOS service manager. Create a plist at ~/Library/LaunchAgents/com.dispatch.server.plist:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>Label</key> <string>com.dispatch.server</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/npm</string> <string>start</string> </array> <key>WorkingDirectory</key> <string>/path/to/dispatch</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>StandardOutPath</key> <string>/tmp/dispatch.log</string> <key>StandardErrorPath</key> <string>/tmp/dispatch.err</string></dict></plist>Replace /path/to/dispatch with your actual clone path and /usr/local/bin/npm with the output of which npm.
Load and start it:
npm run build # build oncelaunchctl load ~/Library/LaunchAgents/com.dispatch.server.plistlaunchctl start com.dispatch.serverTo stop or disable:
launchctl stop com.dispatch.serverlaunchctl unload ~/Library/LaunchAgents/com.dispatch.server.plistOption 3: systemd user service (Linux)
Section titled “Option 3: systemd user service (Linux)”Create ~/.config/systemd/user/dispatch.service:
[Unit]Description=Dispatch serverAfter=network.target
[Service]Type=simpleWorkingDirectory=/path/to/dispatchExecStartPre=/usr/bin/env npm run buildExecStart=/usr/bin/env npm startRestart=on-failureRestartSec=5StandardOutput=journalStandardError=journal
[Install]WantedBy=default.targetEnable and start:
systemctl --user daemon-reloadsystemctl --user enable dispatchsystemctl --user start dispatchCheck status and logs:
systemctl --user status dispatchjournalctl --user -u dispatch -fTo make user services start at boot without login (useful on a headless server):
loginctl enable-linger "$USER"Next step
Section titled “Next step”Once the server is running and a project is registered, follow the Quick Start to start agents and see the dashboard in action.