Non-Obvious Decisions Worth Knowing
docker info, not docker --version, is how claudio detects your runtime. docker --version only reports the CLI client version — on a machine with both Docker Desktop and OrbStack installed, the client can report one runtime while docker info (and every actual docker command) talks to a completely different one. This project got misled by that once; docker info is the only check that's actually reliable.
- No Docker socket is mounted into agent containers, on purpose. Mounting
/var/run/docker.sock is a direct path to host-root access from inside the sandbox. If a repo genuinely needs to run docker/docker compose itself, that needs a separate, explicitly opt-in rootless Docker-in-Docker sidecar — not something claudio does by default.
- Dependency directories (
node_modules, etc.) are bind-mounted, not offloaded to a named volume. Volume offloading was measured and rejected: it's 7–15× faster on filesystem metadata operations, but the host loses proper visibility into the directory — which defeats the entire reason to use claudio instead of a headless remote sandbox. If your build is metadata-heavy and slow on a bind mount, that trade was made deliberately; see the architecture doc's Appendix A for the actual measurements rather than re-litigating it from scratch.
- The Anthropic credential is shared across every container (see First-run auth) — there is no per-instance isolation yet. Don't assume revoking one instance's access is possible without revoking all of them.