Hardware-isolated sandbox for running coding agents on your repos, on macOS. The agent never sees your real API key; egress is deny-by-default; only a diff you approve leaves the sandbox.
8
stars
449
commits
Go
primary language
Sep 7, 2026
updated
Let a coding agent run wild on your Mac, without trusting it.
drydock runs Claude Code, OpenAI Codex, or any OpenAI-compatible
model (Gemini, OpenRouter, local) full-throttle on your own repos, on your
own Mac — no permission prompts, no babysitting. Each task runs sealed in a
throwaway VM. The only thing that ever comes back is a git diff, and nothing
reaches your real code until you approve it.
origin.Most agent tooling tries to keep the agent well-behaved: permission prompts, output filters, policy. drydock takes the opposite stance: contain the blast radius. A hostile agent — a poisoned repo, a malicious dependency, a prompt injection that turns a fetched URL into a shell command — can't reach your key, your filesystem, your push credentials, or the open internet, regardless of what it tries.
Don't take the threat model's word for it. Every green above is a real go test red-team case that runs the actual attack and asserts it fails. Reproduce them yourself: see Prove it yourself.
Docs · Threat model · Website · Roadmap
main is supported, behavior and config can change
between minor versions, and it has not been hardened by wide real-world use.container runtime (1.x, validated through 1.1.0), which ships nowhere else.1. Check you're eligible. drydock runs locally, and Apple's container
runtime needs macOS 26+ on Apple silicon:
[ "$(uname -m)" = arm64 ] && [ "$(sw_vers -productVersion | cut -d. -f1)" -ge 26 ] \
&& echo "eligible" || echo "not yet, needs macOS 26+ on Apple silicon"
2. Install. Sets up the runtime, squid, and ~/.drydock:
brew install sricola/drydock/drydock
drydock setup
3. Give it a credential and start. A vendor API key works:
export ANTHROPIC_API_KEY=sk-ant-...
drydock start
…or skip keys entirely and reuse a plan you already pay for:
drydock auth claude # Claude Pro/Max → anthropic_auth: subscription
drydock auth codex # ChatGPT → openai_auth: subscription
drydock start
4. Submit your first sandboxed task (in another shell):
drydock submit --repo git@github.com:you/repo \
--instruction "Add a one-line comment to README.md."
drydock review <id> # read the diff, then approve or deny
That's the whole loop: the agent runs sealed, hands back a git diff, and
nothing reaches your repo until you approve it. The full walkthrough is in the
Quickstart.
A few things you'll probably want next:
drydock daemon install — see
Run unattended.aggregate_budget_usd to cap cross-task spend
(subscription mode is bounded by task_max_requests instead).drydock stats [--since 30d] [--by agent|vendor|repo|day|week] [--json] aggregates outcome rates, duration
and gate-wait percentiles, spend, and egress-widen frequency straight from
the audit dir.brew install go, clone, then
make install && drydock init.Full operator docs live at sricola.github.io/drydock/docs:
drydock submit, the approval gate, flags, scripting.config.yaml and env overrides.drydock doctor and common failures.You don't have to trust the threat model — run the attacks. drydock redteam
boots throwaway VMs and runs the real red-team cases behind the security
claims (key isolation, deny-by-default egress, VM teardown) and prints a
pass/fail table. No API key, no spend, ~5 minutes.
drydock redteam # live containment attacks
make demo VM=1 # …or watch all seven, including live VM isolation
Codebase layout, build/test/CI, and known gaps are in
CONTRIBUTING.md. Security reporting and documented
residuals are in SECURITY.md.
449 commits
Go
94.9%
JavaScript
1.7%
CSS
1.1%
Hardware-isolated sandbox for running coding agents on your repos, on macOS. The agent never sees your real API key; egress is deny-by-default; only a diff you approve leaves the sandbox.
8
stars
449
commits
Go
primary language
Sep 7, 2026
updated
Let a coding agent run wild on your Mac, without trusting it.
drydock runs Claude Code, OpenAI Codex, or any OpenAI-compatible
model (Gemini, OpenRouter, local) full-throttle on your own repos, on your
own Mac — no permission prompts, no babysitting. Each task runs sealed in a
throwaway VM. The only thing that ever comes back is a git diff, and nothing
reaches your real code until you approve it.
origin.Most agent tooling tries to keep the agent well-behaved: permission prompts, output filters, policy. drydock takes the opposite stance: contain the blast radius. A hostile agent — a poisoned repo, a malicious dependency, a prompt injection that turns a fetched URL into a shell command — can't reach your key, your filesystem, your push credentials, or the open internet, regardless of what it tries.
Don't take the threat model's word for it. Every green above is a real go test red-team case that runs the actual attack and asserts it fails. Reproduce them yourself: see Prove it yourself.
Docs · Threat model · Website · Roadmap
main is supported, behavior and config can change
between minor versions, and it has not been hardened by wide real-world use.container runtime (1.x, validated through 1.1.0), which ships nowhere else.1. Check you're eligible. drydock runs locally, and Apple's container
runtime needs macOS 26+ on Apple silicon:
[ "$(uname -m)" = arm64 ] && [ "$(sw_vers -productVersion | cut -d. -f1)" -ge 26 ] \
&& echo "eligible" || echo "not yet, needs macOS 26+ on Apple silicon"
2. Install. Sets up the runtime, squid, and ~/.drydock:
brew install sricola/drydock/drydock
drydock setup
3. Give it a credential and start. A vendor API key works:
export ANTHROPIC_API_KEY=sk-ant-...
drydock start
…or skip keys entirely and reuse a plan you already pay for:
drydock auth claude # Claude Pro/Max → anthropic_auth: subscription
drydock auth codex # ChatGPT → openai_auth: subscription
drydock start
4. Submit your first sandboxed task (in another shell):
drydock submit --repo git@github.com:you/repo \
--instruction "Add a one-line comment to README.md."
drydock review <id> # read the diff, then approve or deny
That's the whole loop: the agent runs sealed, hands back a git diff, and
nothing reaches your repo until you approve it. The full walkthrough is in the
Quickstart.
A few things you'll probably want next:
drydock daemon install — see
Run unattended.aggregate_budget_usd to cap cross-task spend
(subscription mode is bounded by task_max_requests instead).drydock stats [--since 30d] [--by agent|vendor|repo|day|week] [--json] aggregates outcome rates, duration
and gate-wait percentiles, spend, and egress-widen frequency straight from
the audit dir.brew install go, clone, then
make install && drydock init.Full operator docs live at sricola.github.io/drydock/docs:
drydock submit, the approval gate, flags, scripting.config.yaml and env overrides.drydock doctor and common failures.You don't have to trust the threat model — run the attacks. drydock redteam
boots throwaway VMs and runs the real red-team cases behind the security
claims (key isolation, deny-by-default egress, VM teardown) and prints a
pass/fail table. No API key, no spend, ~5 minutes.
drydock redteam # live containment attacks
make demo VM=1 # …or watch all seven, including live VM isolation
Codebase layout, build/test/CI, and known gaps are in
CONTRIBUTING.md. Security reporting and documented
residuals are in SECURITY.md.
449 commits
Go
94.9%
JavaScript
1.7%
CSS
1.1%