Skip to main content
You’ve spent time customizing Claude Code — CLAUDE.md, custom skills, hooks, plugins, MCP servers. When you create a new cac environment, you don’t want to set all that up again. --clone lets you inherit your existing config into a new isolated environment, while keeping device identity and telemetry protection fully separate.

Quick start

# Clone from your host ~/.claude/ config
cac env create work --clone

# Start using it
cac work
claude
That’s it. Your new work environment now has all your customizations, with its own isolated identity.

What gets inherited

ResourceDefault (symlink)With --no-link (copy)
commands/Symlinked — changes reflect everywhereCopied — independent
hooks/SymlinkedCopied
skills/SymlinkedCopied
plugins/SymlinkedCopied
CLAUDE.mdSymlinkedCopied + cac instructions appended
settings.jsonLayered merge via settings.override.jsonLayered merge via settings.override.json
What’s not inherited (always generated fresh per environment):
  • Device identity (UUID, hostname, MAC address, machine ID)
  • Credentials and sessions
  • Telemetry protection settings
  • mTLS certificates
cac env create work --clone
Shared resources are symlinked to the source. When you edit a skill or hook in ~/.claude/, every cloned environment sees the change immediately. Best for: keeping all environments in sync with one set of customizations.
cac env create work --clone --no-link
Resources are copied into the new environment. Changes to the source don’t affect it, and vice versa. Best for: creating an environment you want to customize independently.
With --no-link, cac automatically appends its own instructions to the copied CLAUDE.md (the “CAC Meta Prompt”). With symlink mode this is skipped, since modifying a symlinked file would affect the source.

Clone from another environment

You can clone from any existing cac environment instead of ~/.claude/:
# Clone from the "work" environment
cac env create work2 --clone work
This is useful when you’ve customized one cac environment and want to branch off from it.

Settings merge

Settings use a layered merge system regardless of symlink/copy mode:
  1. Base: settings.json from the source (host ~/.claude/ or another env)
  2. Override: settings.override.json in the environment (cac-specific overrides)
  3. Result: Merged settings.json written to the environment’s .claude/ directory
The merge happens on each claude startup, so if you update your base settings, all cloned environments pick up the changes automatically.
~/.claude/settings.json          (your shared base)
    +
env/.claude/settings.override.json  (cac overrides: permissions, statusline, etc.)
    =
env/.claude/settings.json        (merged result, auto-generated)

Typical workflow

# 1. Set up your host ~/.claude/ config how you like it
#    (skills, hooks, plugins, CLAUDE.md, settings)

# 2. Create isolated environments that inherit everything
cac env create client-a --clone -p proxy-a:1080:user:pass
cac env create client-b --clone -p proxy-b:1080:user:pass

# 3. Each environment has:
#    - Your full config (skills, hooks, etc.)
#    - Its own identity (different fingerprint)
#    - Its own proxy (different exit IP)
#    - Its own telemetry protection

# 4. Switch between them
cac client-a
claude    # uses your config, proxy-a identity

cac client-b
claude    # same config, different identity + proxy

Combining with other flags

All create flags work together:
# Clone + proxy + pinned version + aggressive telemetry
cac env create secure --clone -p socks5://proxy:1080 -c 2.1.85 --telemetry aggressive

# Clone from another env + independent copies
cac env create fork --clone work --no-link