What’s installed#
The files ./install places, by scope. For the configuration these
files read, see configuration.
Container-scoped#
Re-established by re-running ./install, typically wired into
postCreate.sh.
The apt step also installs passt (which provides pasta, the userspace
network forwarder the egress jail attaches to
Claude’s private netns). The jail’s one container-side requirement —
--device=/dev/net/tun in devcontainer.json’s runArgs — is not
something the installer can add (a runArg is a container-launch setting); on a
host missing it the jail fails closed and claude refuses to launch with a
message naming the fix.
Path |
Source |
Purpose |
|---|---|---|
|
Anthropic installer ( |
The real Claude binary, kept off the user’s PATH so the shadow always wins |
|
|
Shadow that wraps the real binary in |
|
Generated |
Curated gitconfig — regenerated from |
|
|
|
|
|
|
|
jq-merged by |
The GLOBAL guard policy. Adds the two hooks (deduped by basename), sets |
|
|
Host-global sandbox config read by the shadow at launch — |
Disabling the auto-updater is root-cause removal: Claude Code’s updater
otherwise re-creates ~/.local/bin/claude on a version bump, which can
launch the real binary unwrapped and self-entrench. With the updater
off, updates happen only via a deliberate ./install, which
re-relocates the current binary and re-asserts the shadow. See the
shadow-on-PATH explanation.
User-scope ~/.claude#
Preference only — the guard does not live here.
Path |
Behaviour |
|---|---|
|
Statusline — seeded only if absent (an owner-customised one survives) |
|
|
Not placed: CLAUDE.md and README-CLAUDE.md live in the meta-repo for
dogfooding.