DryDock
Case study · Tech & fun
A shipyard for coding agents — dispatch, isolate, verify, from a phone
- What
- A personal orchestrator that dispatches Claude Code and Gemini CLI runs into any project, each task isolated in its own git worktree.
- Stack
- Next.js 15 + better-sqlite3 + Node subprocess spawn; SSE streaming to a mobile-first PWA over a Cloudflare Tunnel.
- Status
- In Progress
- Dates
- Published May 2026 · Updated September 2026
- Links
- Source code
Background
Can a phone in your pocket safely run a fleet of coding agents on the Mac at home?
Type a prompt on your phone, and a Claude Code or Gemini CLI subprocess spins up on the Mac, works inside its own git worktree, streams its output live to a home-screen PWA, and gets checked by a quality gate before anything merges.
There are no API keys anywhere. Dispatch rides the CLIs' own subscription logins, and the remote door fails closed: every non-local request needs Cloudflare Access or a token, and the origin only binds loopback.
A Look Inside
Each view shown on mobile and desktop — captured from a local instance seeded with demo projects. Tap any image to open the source on GitHub.
How It Works
One Next.js app owns the loop:
- Dispatch: a free-form prompt against a chosen project, with per-run model and autonomy overrides, behind a concurrency cap and a queue with cancel.
- Isolation: every task gets its own git worktree, so an agent can't touch main, and the project's tests run the moment the agent exits.
- Live streaming: agent output parses from stream-json into an SSE feed the PWA renders in real time, with tokens and cost captured per run.
- Budget awareness: usage windows across Claude, Codex, and Gemini roll up into one budget pill before you send the next dispatch.
- Fail-closed security: loopback-only bind, Cloudflare Access or token auth for anything remote, and per-caller MCP tool allowlists.



