Docs

Everything you need to run the fleet

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.

Install

CLI

Ships the stdio MCP server too. Aliases: side → sideboard.

npm i -g @sideboard-ai/cli
sideboard detect

Desktop

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 Mac

Agent CLIs

Sideboard 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_..."

Quick start

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

Connect the MCP

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 Code

claude mcp add --scope user \
  sideboard -- sideboard mcp

Cursor

{ "mcpServers": { "sideboard": {
  "command": "sideboard",
  "args": ["mcp"] } } }

Codex

[mcp_servers.sideboard]
command = "sideboard"
args = ["mcp"]

OpenCode

{ "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.

Settings

Desktop Settings opens on Agents. Connections are owned by Sideboard, not per-agent MCP.

Agents

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.

Projects

Per-repo context that adds to Settings → Agents. Agents can update account or project context after you confirm.

Git

How this Mac and worktree agents authenticate GitHub — Auto, gh, SSH, or a personal access token.

Issues

Preferred tracker for Create-from and Home. Connect Linear (browser) or AbleTime (personal access token).

Remote

The phone app remote-controls this Mac. Sign in with GitHub, name it, show a pairing code, then scan it in the app.

Connectors

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.

The rest

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.

Contextually aware

The orchestrator reads Settings → Agents (account) plus Settings → Projects (per-repo) so it can pick tickets and review PRs the way you would.

“Find me some work”

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.

“Find me work and start it”

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.

Automations

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.

Guides

Settings

Agents (account context), Projects, Git, Issues, Remote, and Connectors — connections live here, not in per-agent MCP.

Find work

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.

Automations

Local jobs that wake an orchestration chat. Opt-in caffeinate so overnight runs can fire.

Your own relay

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.

Phone

Settings → Remote. Sign in with GitHub, name this Mac, show a pairing code, and scan it in the phone app.

Agents

Install Claude Code, Codex, OpenCode, and Cursor. Sideboard shells out to each harness.

Remote integrations

Settings map, phone relay, Linear, optional connectors, and what does and doesn't leave the machine.

Process skills

Recurring guides live in .claude/skills so Claude Code and attach see them without Sideboard. Sideboard also ships /long-running to every worktree agent.

Security

Where credentials live, what the relay sees, and the v1 safety rails on landing.

Repo config

Commit these next to the code. Sideboard prefers .sideboard/settings.toml; an existing .conductor/settings.toml still works.

Worktrees

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.

Setup

New worktrees run [scripts] setup when present, then Cursor .cursor/worktrees.json, then script/setup or bin/setup.

Review

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.

Process skills

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