A protected Docker devbox for running a harness CLI — Claude Code, Codex, etc.
Run ccbox from a repo root to run the harness CLI in a Docker container. ccbox run opens a shell in it instead; ccbox run <command...> execs a command there.
- Limits harness access — unprivileged user, no root, no Docker daemon, a disposable container
- Configurable protective host-mounts to the container
- Full control over harness configuration, including adding your own
Your first run of a harness CLI will create the CLI's config folder in ~/.ccbox.
The ccbox config scope hierarchy is:
- User -
~/.ccbox/config/ccbox.yaml(no dot) — seeded with ccbox's defaults on first run - Project -
project_dir/.ccbox.yaml - Project Local -
project_dir/.ccbox.local.yaml(for git ignore) ccboxflags
ccbox config prints the effective config with its aliases expanded. ccbox config init creates a commented empty config. When merging configs, arrays and maps are merged.
Protect your protect these configs:
tmpfs_masks— hide directories behind a throwaway temp filesystem. For editor junk (.vscode) or throwaway build output.volume_masks— cover directories with a persistent per-project volume: the container keeps its own copy across runs. Fornode_modules-like folders.read_only_globs— block writes to glob paths (files or directories) with read-only re-mounts: the real files, never modified. For files that must never change (configs, secrets).
ccbox built-in LLM harness configurations prevent reads, as external container configurations can't. You can add your own harnesses that do so too.
pkg/dmap/share/admin.md.tmpl— start here: the container the CLI runs inside (user, egress wall, what's installed), prepended to the agents docs'ccbox-adminvariants.AGENTS.md— the project layout: theccboxCLI, the build inputs, and how to build/test.