Prerequisites

Shipyard is a native macOS application. Before installing, make sure you have:

Installation

Clone the repo and install dependencies:

git clone https://github.com/arthur791004/calypso-multi-agent.git
cd calypso-multi-agent
npm install

Start the development server:

npm run dev

This launches both the backend (:9090) and frontend (:9091) via npm-run-all. Open http://localhost:9091 to get started.

First Run

On first launch, Shipyard shows a Welcome screen that asks you to pick a repo folder. It gets symlinked to .config/repo/<name>/<default> (no clone), and its trunk branch starts automatically.

Once running:

Tasks & Sandboxes

Every row in the task list is a session. Trunk is always the first row with a Dashboard badge. All other tasks run in isolated Docker sandbox containers with Claude Code inside.

Trunk runs on the host (not in a sandbox) for direct access to your real Claude config. The idle sweeper and concurrency cap both skip trunk.

Each sandbox gets its own git worktree. Credentials from ~/.claude-sandbox/ are synced into every sandbox so one login covers all of them.

Slash Commands

Type / in the composer at the bottom of the task list to open the command palette:

/branch <name> [base]

Create a blank sandbox on a new or existing branch. Optionally specify a base branch.

/branch fix-navbar main

/gh-issue <url>

Derives a branch name from the GitHub issue number, creates it, and seeds Claude with a prompt to implement the issue.

/gh-issue https://github.com/org/repo/issues/123

/linear <url>

Derives the branch name from the Linear ticket identifier and seeds Claude with the ticket context.

/linear https://linear.app/team/issue/PROJ-456

Terminal Panel

Click any task to open the terminal panel on the right. It has three tabs:

The status bar at the bottom shows the current sandbox state: Creating, Starting, Running, Stopped, or Error. Action buttons in the header provide quick access to Preview, Open in Editor, and Fullscreen.

Repo Settings

Click the gear icon to open Settings. Each repo can override:

Environment Variables

Configure Shipyard behavior with environment variables:

MAX_SANDBOXES=9          # Concurrency cap for docker sandboxes
SANDBOX_IDLE_MS=1800000  # Idle timeout before auto-stop (30 min)
SANDBOX_IDLE_CHECK_MS=60000  # Sweeper tick interval
DATA_DIR=.config         # Where state.json and sessions.jsonl live
DOCKER_IMAGE=claude      # Docker image used for sandboxes

Electron App

Run Shipyard as a native desktop app:

npm run electron:dev

This compiles the Electron main process and opens a native window. If npm run dev is already running, Electron attaches to those servers instead of spawning duplicates. Otherwise it launches backend + Vite as child processes and shuts them down on quit.