Self-hosted sandbox for
any AI coding agent

Run Claude Code, OpenAI Codex, OpenCode, Pi — any agent harness — locally in isolated Docker containers on your own machine, behind a deny-by-default egress firewall. Free, open-source, no cloud.

Put your agents in containers where they belong. Handing the keys to a mythos-class Fable 5 agent? You especially want the sandbox.

Harness the harness

A padded cell for AI coding agents — how clawker's container security model compares to running a harness like Claude Code or Codex bare metal or in sandbox mode.

"Prompt injection can change the agent's intent, but it can't change the container's constraints."

— the threat model
terminal
$ brew install schmitthub/tap/clawker
$ curl -fsSL https://clawker.dev/install.sh | bash
$ clawker run -it --agent fix --worktree bugfix:main @
# Forwarding SSH keys + git config
# Firewall: github.com, npmjs.org
clawker.myapp.fix ready

Features

all the negative parallelisms, rule of threes, and em dashes below compliments of ai slop... ain't no way i was gunna write the splash page myself

Agent-in-Container

Each agent — Claude Code, Codex, OpenCode, Pi, or your own — gets its own sandboxed Docker container with embedded Dockerfile templates and a purpose-built init daemon. Alpine or Debian, your call.

Docs →

Harness-Agnostic Bundles

Any coding agent harness, one sandbox. Bundles package harness setups, dev stacks, and monitoring extensions as Dockerfile template fragments plus config files — hand-roll your own or distribute them. Claude Code, Codex, OpenCode, and Pi work out of the box; Copilot, Grok, z.ai, or anything else installable can be bundled in.

Fresh or Copy Agent Mode

Clean install or seamless transition — bring your existing harness settings, plugins, skills, and auth along for the ride. Config and memory persist in volumes across container restarts.

Bind or Snapshot

Live-sync your workspace with bind mounts, or give the agent a snapshot copy for pure isolation. You pick the sandbox level.

Kernel-Side Egress Firewall

Deny-by-default networking via Envoy, CoreDNS, and eBPF — unlisted domains don't even resolve. TLS inspection enables path- and method-level rules, enforced kernel-side where the agent holds no privileges. Per-project rules via clawker.yaml.

Docs →

Credential Forwarding

SSH agent, GPG agent, git HTTPS, and harness auth forwarded from your host automatically — private keys never enter the container. No copy-pasting secrets.

Docs →

Jailed Docker

A guardrail layer between clawker and Docker that prevents operations on resources created outside of clawker. You won't accidentally nuke unrelated containers, networks, or volumes.

Docs →

Project Namespace Isolation

Container resources scoped per-project. Run multiple projects simultaneously without stepping on each other's toes.

Dedicated Docker Network

All clawker resources live on the same clawker-net Docker network for easy communication.

Git Worktrees

Run parallel agents on separate branches with a single flag. Clawker handles worktree lifecycle, and host-path mirroring keeps session resume (like Claude Code /resume) working across container restarts.

Docs →

Host Proxy Service

Browser authentication callbacks forwarded from container to host. OAuth flows just work — zero config.

Injectable Build Instructions

Custom packages, environment variables, and scripts injected at container build time. Your Dockerfile, your rules.

Docs →

Lifecycle Hooks

post_init scripts that run once after container init, plus pre_run hooks on every start. Perfect for MCP server setup, custom tooling, or whatever your workflow needs.

Control Plane

A per-host supervisor that owns the firewall lifecycle, eBPF programs, and the agent identity registry. mTLS gRPC with OAuth2 — and if the control plane dies, firewall rules stay pinned in the kernel. Fail closed, not open.

Docs →

Monitoring & Observability

Real-time insight into your agents' tool calls, decisions, costs, and token usage. Optional OpenTelemetry stack with Prometheus metrics, OpenSearch logs, and preinstalled Cost & Usage dashboards — extensible per-harness via monitoring bundles.

Docs →

Egress Audit Trail

Every firewall decision — allowed, denied, even bypassed — logged as a structured event with per-agent attribution. Records travel an mTLS-authenticated lane agents can't forge. Bypass mode is no longer a forensic black hole.

Docs →

Frequently Asked Questions

How do I sandbox Claude Code, Codex, or another coding agent?

Run it in a container. clawker builds an isolated Docker container per agent with a deny-by-default egress firewall, forwards your git credentials and harness settings in, and gives you a single CLI to build, run, and attach. One command: clawker run.

Which coding agent harnesses does clawker support?

clawker is harness-agnostic. Claude Code, OpenAI Codex, OpenCode, and Pi run out of the box via bundles. Anything else installable — GitHub Copilot CLI, Gemini CLI, Kiro, Grok, z.ai, or your own tool — can be set up through the same bundle system. Sky is the limit: if it installs in a Docker image, clawker can sandbox it.

What is a clawker bundle?

A bundle packages a harness setup, dev stack, or monitoring extension as Dockerfile template fragments plus config files. Hand-roll one for your own workflow or distribute it for others to use — the same mechanism powers the built-in Claude Code, Codex, OpenCode, and Pi setups.

Is it safe to run agents in YOLO mode (--dangerously-skip-permissions, auto-approve)?

On your host, you are trusting the agent with your filesystem, credentials, and network. Inside a clawker container the blast radius is the container: the workspace is the only host data mounted in, outbound traffic is blocked unless whitelisted, and the agent runs unprivileged with no Linux capabilities. That makes YOLO mode — Claude Code --dangerously-skip-permissions, Codex full-auto, and friends — a calculated risk instead of a leap of faith.

How is clawker different from Docker Sandboxes?

Docker Sandboxes give each agent a disposable microVM, but its egress rules stop at the domain, IP, and port level. clawker filters deeper: per-path rules (literal prefix or anchored regex), HTTP method whitelisting, and hostname-scoped rules for opaque protocols like SSH — where Docker Sandboxes only allows non-HTTP TCP by raw IP and blocks UDP outright. clawker also ships a full OpenTelemetry monitoring stack (Prometheus metrics, OpenSearch logs, cost dashboards) and a per-decision egress audit trail for free — no account, no subscription, MIT-licensed, and extensible to any harness via bundles.

How is clawker different from devcontainers or Claude Code sandbox mode?

Devcontainers hand you a container and stop there. clawker ships the infrastructure around it: a control plane and kernel-side firewall stack in a box, agents seeded with auth material for provenance and trust, a custom PID 1 supervisor that executes control-plane commands, OpenTelemetry monitoring pre-built for coding agents and security events, and harness memory that persists between environments. Sandbox mode restricts the process — but it still shares your host.

Which models does clawker work with?

Any model your harness can run — clawker contains the harness, not the model. Anthropic models from Haiku up to mythos-class Fable 5 via Claude Code, OpenAI models via Codex, and any provider your harness of choice supports.

What platforms does clawker support?

macOS and Linux, with Docker installed and running. Install via Homebrew (brew install schmitthub/tap/clawker) or the shell script. Windows is not currently supported.

Does clawker protect against prompt injection?

clawker does not try to filter content — LLMs can be coerced through base64, steganography, even ancient languages, and that is an arms race you cannot win. It constrains the network instead: prompt injection can change the agent's intent, but it cannot change the container's constraints. If the agent is coerced into exfiltration, the firewall blocks the egress and the attempt lands in the audit trail.

Can the agent still reach the internet?

Only where you allow it. DNS for unlisted domains returns NXDOMAIN, and allowed domains can be scoped down to specific URL paths and HTTP methods via per-project rules in clawker.yaml.

Get Started

macOS and Linux. Needs Docker.

Homebrew
$ brew install schmitthub/tap/clawker
Shell Script
$ curl -fsSL https://clawker.dev/install.sh | bash