Shipper is a standalone CLI that orchestrates AI coding agents to plan and build features in any repository. It ships as a compiled binary with a local web workspace — no Node.js required at runtime.
curl -fsSL https://raw.githubusercontent.com/shipper-is/shipper/main/install.sh | shPin a version:
SHIPPER_VERSION=0.1.0 sh -c 'curl -fsSL https://raw.githubusercontent.com/shipper-is/shipper/main/install.sh | sh'macOS binaries are unsigned in v1. Installing via curl | sh avoids Gatekeeper quarantine; downloading the binary directly in a browser may require removing the quarantine attribute or allowing it in System Settings.
Shipper checks for updates once per day and shows the install command in the UI when a newer release is available. There is no self-update in v1 — re-run the install script to upgrade.
- Plan — runs the
shipper-planskill through your coding agent to produce a structured markdown plan in.shipper/open/. - Build — loops the
shipper-buildskill phase-by-phase until the plan is complete, moving finished plans to.shipper/done/.
Running shipper starts a local web server and opens your browser at http://shipper.localhost (port 80, with fallback to :8712 if 80 is unavailable). Browsers resolve *.localhost to your machine with no hosts-file setup. Shipper deliberately uses .localhost, not .local — the latter is reserved for Bonjour/mDNS and behaves unreliably.
The workspace has three sections:
- Left nav — open and done plans, live-updating from
.shipper/ - Main window — plan overview, agent chat, inline questions, follow-up messages, build controls
- Right rail — a passthrough terminal (real PTY) for interactive commands like
vimorgit add -p
- Click New plan (or press
n), describe the feature. - Confirm the agent and model if prompted; Shipper refreshes bundled skills in your global agent directories and starts a headless agent session.
- Answer clarifying questions inline when prompted.
- A new plan file appears in
.shipper/open/.
- Select an open plan and click Build (or press
b). - Shipper runs one agent session per phase, auto-continuing until the plan is done.
- Progress updates live as the agent checks boxes in the plan file.
- Questions pause the loop; everything else continues automatically.
| Agent | Question handling |
|---|---|
| Claude Code | Native AskUserQuestion via the Agent SDK (canUseTool). |
| Cursor CLI | Shipper question protocol (fenced shipper-question JSON blocks). Cursor's native AskQuestion is unusable headlessly — it fabricates "skipped" answers. |
| opencode | Same question protocol as Cursor. The built-in question tool stalls under the SDK, so the protocol preamble overrides it. |
Agent choice is stored per project on your machine (~/.config/shipper/), not in the repo — so teammates can use different agents on the same codebase.
| Path | Contents |
|---|---|
<repo>/.shipper/open/ |
Active plans (commit these) |
<repo>/.shipper/done/ |
Completed plans |
~/.config/shipper/config.json |
Per-project agent preference, last plan |
~/.config/shipper/logs/ |
NDJSON session logs (last 20 retained) |
~/.claude/skills/shipper-*/ |
Global skills for Claude Code (auto-discovered) |
~/.cursor/skills/shipper-*/ |
Global skills for Cursor CLI (auto-discovered) |
~/.config/opencode/skills/shipper-*/ |
Global skills for opencode (auto-discovered) |
Bundled shipper-plan, shipper-build, shipper-spike, shipper-ship, and shipper-bug skills are embedded in the binary and installed globally for each detected coding agent on startup (or via shipper skills). Repos no longer receive skill copies — stale per-repo copies from older versions are removed on boot.
Every agent session writes an NDJSON log to ~/.config/shipper/logs/<timestamp>-<agent>.ndjson with typed AgentEvents and raw adapter I/O. Error notices in the chat show the log path for the failed session.
Demo mode (no agent required):
shipper --demoThis opens the browser and runs a scripted chat + question flow so you can verify the UI without a live agent.
Requires Bun.
bun install
bun run dev # web UI in current directory
bun run dev -- --dir /path/to/repo
bun run dev -- --demo # scripted demo in the browser
bun run typecheck
bun test
bun run build # local platform → dist/shipper
bun run build:release # all four release targets → dist/shipper-*
./dist/shipper --versionPush a v* tag to trigger .github/workflows/release.yml, which builds shipper-darwin-arm64, shipper-darwin-x64, shipper-linux-x64, and shipper-linux-arm64 with SHA256 checksums attached to the GitHub Release.
git tag v0.1.0 && git push origin v0.1.0| Command | Description |
|---|---|
shipper |
Start the web workspace (default) |
shipper skills |
Install or refresh global skills for detected agents |
Use shipper skills without starting the console when you want the bundled skills in your own coding agent — e.g. type /shipper-plan in Cursor CLI or Claude Code to plan a feature directly in your editor.
shipper skills # install for all detected agents
shipper skills --agent cursor # force install for one agent| Flag | Description |
|---|---|
--dir <path> |
Target repository (default: current directory) |
--port <n> |
HTTP port override (default: 80, fallback 8712) |
--no-open |
Do not open the browser automatically |
--demo |
Scripted chat/question demo in the browser |
--version |
Print version and exit |
Press ? in the browser for the full shortcut list. Highlights: n new plan, b build, / focus chat, `Ctrl+`` toggle terminal.