One workspace.
Any agent. Any harness.
Version, swap, and share the config layer that shapes how your agent thinks — CLAUDE.md plus .claude/ — as isolated, named personas.
Skills, subagents, MCP servers and permissions live as one global blob today, locked to one harness. Agent Containers turns them into containers you swap per task, snapshot like code, hand to your team — and export to OpenCode, Codex, Gemini, Kimi or Antigravity with one command.
Your agent is its config — and it is one global blob.
Claude Code's behaviour is not just the model. It is everything in CLAUDE.md and .claude/: the skills it can call, the subagents it can spawn, the MCP servers it reaches, the permissions it holds. You can't cleanly swap a coder loaded with build skills for a reviewer that deliberately lacks them. You can't version those setups. You can't hand them to a teammate.
_base
- = shared baseline
- = imported from your .claude/
- = every persona layers on it
coder
- + build / codegen skills
- + refactor subagents
- · write: allowed
reviewer
- − no build skills
- − write: denied
- · read-only, by design
An uncontaminated reviewer.
If the same agent that wrote the code also reviews it, its judgment is shaped by the very skills and habits that produced the bug. Agent Containers builds a reviewer that is provably stripped of the coder's powers — and then attests it.
- ▼Enforced, not advisory. Write tools are blocked through permissions.deny; only allow-listed skills are materialized.
- ◆Physically absent. Withheld skills aren't hidden — they never reach the agent's config dir at all.
- ✓Drift-checked. verify fails loudly if the materialized environment ever diverges from the manifest.
Author once. Run on any harness.
You tuned your setup in Claude Code. Now you want to try OpenCode — or a teammate runs Codex, or CI uses Gemini. Containerize your Claude setup and take it with you. One command renders a persona into the target's own config layout and prints an honest report of what crossed the boundary intact and what was lost.
- →Claude is the source. Every other harness is an export target. Your .claude/ stays the single source of truth.
- ≈Honest about loss. Each artifact is marked ok, ~translated, or dropped — never a silent lossy conversion.
- ▼Withholding travels. A withheld skill is physically absent in OpenCode, Codex and Gemini too — not just Claude.
Up and running in four commands.
Requires Go 1.25+. acon is the Agent Containers CLI — git for your agent config.
Everything is one verb away.
init [--from]Bind the workspace; seed _base or clone a shared repo. Auto-detects your harnesses.
new --templateScaffold a persona from coder / reviewer templates.
use [--harness]Activate a persona for this workspace, on any harness.
export --harnessMaterialize a persona's config for another harness.
harnessesList supported harnesses and which are installed.
config harnessGet or set the workspace's default target harness.
snapshot / log / diffSnapshot, history, and the capability delta between personas.
tag / rollbackSemVer-tag a snapshot, or restore a prior state.
push / pull / cloneShare over git — secret-scanned before every push.
verifyRe-attest the materialized Claude env matches the manifest.