← Back to Homepage

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 August 2026
Links
Source code

Background

Can a phone in your pocket safely run a fleet of coding agents on the Mac at home?

DryDock started life as a lightweight deployment framework — "a shipyard for containerized apps." Then the agents moved in. It's now an orchestration platform: type a prompt on your phone, and a Claude Code or Gemini CLI subprocess spins up on the Mac, works inside an isolated git worktree in the target repo, streams its output live to a home-screen PWA, and gets its work checked by a quality gate before anything merges.

There are no API keys anywhere in the system. 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 server 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.

The dashboard: every project is a card with pending, active, and done runs (mobile) The dashboard: every project is a card with pending, active, and done runs (desktop)
The dashboard: every project is a card with pending, active, and done runs — pick one and dispatch a coding agent into it from a phone-pinned PWA.
One-tap session kickoff: a free-form prompt against a chosen project, Claude or Gemini, and per-run model and autonomy overrides (mobile) One-tap session kickoff: a free-form prompt against a chosen project, Claude or Gemini, and per-run model and autonomy overrides (desktop)
One-tap session kickoff: a free-form prompt against a chosen project, Claude or Gemini, and per-run model and autonomy overrides — dispatched on the CLI's own subscription login, no API keys anywhere.

How It Works

One Next.js app owns the whole loop — capture, dispatch, isolation, verification, and accounting:

[View the Code]


← Back to Homepage