Start with the CLI — it's the fastest way to see whether Sideboard fits how you already work. The desktop, MCP, and phone app layer on top of the same local orchestrator.
Ships the stdio MCP server too. Aliases: side → sideboard.
npm i -g @sideboard-ai/cli sideboard detect
Apple Silicon Mac builds from the public download host. Auto-updates on launch and every four hours — never mid-session. Token counts always show; turn on Settings → Advanced → Show cost (when available) for provider-reported USD (off by default; Codex has no USD). Claude and Global / orchestration chats also show remaining Claude Code plan usage (5-hour, weekly, per-model) next to the context ring.
Download for MacSideboard shells out to each agent's own CLI. Install the ones you want on your PATH and authenticate; Cursor uses a user-installed @cursor/sdk plus a CURSOR_API_KEY (Settings → Agents → Cursor → Install).
npm i -g @anthropic-ai/claude-code npm i -g @openai/codex npm i -g opencode-ai@latest npm i -g @cursor/sdk export CURSOR_API_KEY="cursor_..."
Board, send, inspect, attach when you want the native CLI, land when it's ready.
sideboard new --from branch:main --agent claude sideboard new --from branch:main --cowboy # project folder on default branch; Settings → Advanced first sideboard ls sideboard send <thread> "add a README note" sideboard diff <thread> sideboard attach <thread> # native CLI, same session sideboard land <thread> # interactive y/N; no --yes in v1 sideboard schedule ls sideboard adopt --from-conductor # import Conductor workspaces + history
The desktop auto-injects the MCP into its own turns. Register it yourself when you want fleet tools from an agent running outside Sideboard.
claude mcp add --scope user \ sideboard -- sideboard mcp
{ "mcpServers": { "sideboard": {
"command": "sideboard",
"args": ["mcp"] } } }
[mcp_servers.sideboard] command = "sideboard" args = ["mcp"]
{ "mcp": { "sideboard": {
"type": "local",
"command": ["sideboard","mcp"] } } }
Agents then get discovery (list_projects, list_chats), worktree chats (create_workspace, send_to_chat, wait_for_turn, fork_workspace), automations (create_schedule), structure panes, setup/run scripts, diffs, review and ask_git. create_workspace cowboy=true (and CLI --cowboy) needs Settings → Advanced → Cowboy mode first — then the child works in the project folder on the default branch. send_to_chat steers (Settings → Follow-up, default interrupt now). wait_for_turn returns within ~45s with stillRunning and taskState while the child is still working — call it again; do not assume a hang. Ready-for-review land and purge stay human-only. Orchestrators may tell a worktree agent to merge (ask_git) only when the user explicitly asked.
Desktop Settings opens on Agents. Connections are owned by Sideboard, not per-agent MCP.
Default agent, model, and effort for new chats; Account context (roles, tickets, and review queues as freeform text); then harness setup for Claude, Codex, OpenCode, Cursor, and Brightsy.
Per-repo context that adds to Settings → Agents. Agents can update account or project context after you confirm.
How this Mac and worktree agents authenticate GitHub — Auto, gh, SSH, or a personal access token.
Preferred tracker for Create-from and Home. Connect Linear (browser) or AbleTime (personal access token).
The phone app remote-controls this Mac. Sign in with GitHub, name it, show a pairing code, then scan it in the app.
Optional Vercel, Supabase, PostHog, and Sentry tokens. Vercel, Supabase, and Sentry use official CLIs. PostHog is the posthog_api tool, and the key stays off the agent. Do not add vendor MCPs.
Environment injects extra env. Automations sit in the sidebar after Board. Advanced covers cowboy, caffeinate, show cost, and one usage/session-limit policy (keep going, confirm, switch agent, or wait for reset). History is archived chats.
The orchestrator reads Settings → Agents (account) plus Settings → Projects (per-repo) so it can pick tickets and review PRs the way you would.
Lists options only. Tickets via list_issues (query + assignee from your context). Reviews via list_prs queue=review — open non-draft PRs labeled eng-review with no individual reviewer, preferring teams that match that context. Does not create worktrees.
Same list, then create_workspace + send_to_chat for the ones you want started. Same split for reviews.
A team request such as engineering-team is a queue, not a claim — you are on that team. Set this once; every orchestration chat already has that context.
Local jobs that send a prompt to an existing Global chat, or start a new one. Sideboard.app or sideboard serve must be the host. A sleeping Mac skips until wake.
sideboard schedule ls sideboard schedule add --prompt "Triage open PRs" --every 1h --thread <id> sideboard schedule add --prompt "Morning standup" --cron "0 9 * * *" --tz America/Los_Angeles sideboard schedule run <id>
Same jobs from Automations in the sidebar (after Board), or orchestration MCP (create_schedule, threadId=self to continue this coordinator). Overnight: Settings → Advanced → Caffeinate while automations are enabled (off by default so a 9am cron does not pin the Mac awake), or set_caffeinate from a chat. Recurring jobs with no target chat open a new Global chat each run.
Agents (account context), Projects, Git, Issues, Remote, and Connectors — connections live here, not in per-agent MCP.
Account and project context so the orchestrator is aware when listing tickets and review PRs — or starting them. Agents can update that text after you confirm.
Local jobs that wake an orchestration chat. Opt-in caffeinate so overnight runs can fire.
Deploy the phone relay, then set that address in Settings → Remote and in the phone app. The service is the relay only, not this website.
Settings → Remote. Sign in with GitHub, name this Mac, show a pairing code, and scan it in the phone app.
Install Claude Code, Codex, OpenCode, and Cursor. Sideboard shells out to each harness.
Settings map, phone relay, Linear, optional connectors, and what does and doesn't leave the machine.
Recurring guides live in .claude/skills so Claude Code and attach see them without Sideboard. Sideboard also ships /long-running to every worktree agent.
Where credentials live, what the relay sees, and the v1 safety rails on landing.
Commit these next to the code. Sideboard prefers .sideboard/settings.toml; an existing .conductor/settings.toml still works.
Checkouts live outside the repo at ~/sideboard/workspaces/<repo-slug>/<team>/. Override the root in settings. Opt-in cowboy (Settings → Advanced, then New chat → ⋯) works in the project folder on the default branch instead. [worktree] shared_directories can symlink a gitignored directory (typically node_modules) from the primary checkout. The per-worktree package cache stays the default.
New worktrees run [scripts] setup when present, then Cursor .cursor/worktrees.json, then script/setup or bin/setup.
Review attaches .claude/skills/review/SKILL.md when that skill already exists; otherwise it copies .sideboard/review.md into the worktree .context/review.md. Sideboard does not create a review skill.
Put recurring guides in .claude/skills/<name>/SKILL.md, not .sideboard/skills, so Claude Code and attach load them without Sideboard. /long-running is a Sideboard product skill — every worktree agent gets detach-and-wait without copying that file.
[worktree]
shared_directories = ["node_modules"]
[scripts]
setup = "pnpm install"
[scripts.run.dev]
command = "PORT=${SIDEBOARD_PORT:-3000} pnpm --filter web dev"
default = true