Repository navigation
Settings Apply
This page tells users how to apply the settings snippet of claudetto. It is for a user who installs claudetto, with setup or by hand.
- Run
/claudetto:setup. - Pick the scope:
user,project, orlocal. - Read the list of changes, and approve the write.
The settings command of setup prints the changes, and it writes them only with --apply.
A failed read of the settings file writes nothing.
The merge adds keys and rules, and keeps your other keys.
It replaces the availableModels list.
A status line of another tool stays.
The project scope gets no status line, because the command holds the path of one computer.
Setup writes the autoMode lists of the destructive floor to the user scope only.
The project and local scopes get none.
Setup makes no backup, so the list of changes is the record.
Setup also writes these sandbox and worktree keys:
-
sandbox.filesystem.allowWritelists the package caches, so thatbun installwrites its cache with noEPERM. Only the Bun cache is tested. The caches ofnpm,pip,cargo, andgoare an assumption. -
sandbox.filesystem.allowReadgets the SSH signing key fromgit config user.signingkey, so that a signed commit works in the sandbox. Setup writes it only when the value is a path that starts with~/or/. The entry always names the.pubfile. When the setting is the path of the private key, setup writes the.pubfile next to it. The sandbox never reads the private key, so git signs through the ssh-agent. -
sandbox.network.allowUnixSocketsgets the folder ofSSH_AUTH_SOCK, so that git reaches the ssh-agent in the sandbox. Setup writes it only with a signing key file and an absoluteSSH_AUTH_SOCK. Load the key in the agent before the session. On macOS, runssh-add --apple-use-keychain ~/.ssh/id_ed25519, or setAddKeysToAgent yesandUseKeychain yesin~/.ssh/config. The macOS agent folder changes at each boot. The drift notice then names the old folder, and/claudetto:setupwrites the new one. -
autoModekeeps$defaultsand adds the entries of claudetto. -
worktree.baseRefishead, so that an agent worktree starts from the currentHEAD.
At session start, the drift notice also names an env key that has no effect.
BASH_OUTPUT_MAX_CHARS is one, and the setting bashOutputMaxChars does the work.
CLAUDE_CODE_MAX_CONTEXT_TOKENS is another, when DISABLE_COMPACT is not on.
The status line commands get the absolute path of the plugin folder. That path holds the plugin version, so run setup again after each plugin update.
The claude-md command of setup writes a block of working rules to a CLAUDE.md file.
Pick the file with --scope:
-
usergives~/.claude/CLAUDE.md. -
projectgivesCLAUDE.mdin the project. -
localgivesCLAUDE.local.mdin the project.
The command prints the changes, and it writes them only with --apply.
The block starts with <!-- claudetto:begin --> and ends with <!-- claudetto:end -->.
A second run replaces only the text between the markers.
Your text outside the markers stays as it is.
A file with a missing, repeated, or reversed marker is refused, and the file stays as it is.
The block holds three rules: do what the request asks, settle what a check can settle, and call a part done only after a check.
It also holds a section for each installed add-on among claudetto-codegraph, claudetto-docs, and claudetto-browser.
Run setup again after you install an add-on, to add its section.
The exclude step of setup adds CLAUDE.local.md to .git/info/exclude, so git does not track it.
When the model catalog of your account offers Mythos, setup puts claude-mythos-5-1 in place of claude-fable-5-1.
See Mythos detection.
Setup also gives an alias line for your shell that starts Claude Code with Glob and Grep.
It does not edit the startup file of your shell.
See Trim.
When claudetto-docs is installed, the merge also adds the lines for the claudetto-docs add-on.
The sandbox command of setup writes the hard stop of the AI policy to .claude/settings.local.json.
Run /claudetto:setup sandbox in the checkout.
- It acts only in a checkout of a repository that you do not own, when the verdict of the repository is not
allowedorconditions. In another checkout, it writes nothing and tells why. - It checks the programs that the sandbox needs on your platform before it writes, because
failIfUnavailablestops Claude Code at startup when the sandbox cannot start. The sandbox page of Claude Code gives the prerequisites. macOS needs no program, because the sandbox uses Seatbelt, which is a part of macOS. Linux and WSL2 needbwrap(the packagebubblewrap),socat, and the seccomp filter helperapply-seccomp. WSL1 has no sandbox. - When a program is missing, it writes nothing, names the program, and prints the install command for the package manager that it finds:
apt-get,dnf,pacman,zypper,apk, orbrew. With no known package manager, it names the packages./claudetto:setup sandboxshows you the command and runs it only after your approval, because the command usessudoand changes the system. Then it runs thesandboxcommand again. - On WSL1, it writes nothing and tells why.
- On Linux and WSL2, the seccomp filter is required, because the filter blocks Unix sockets.
Without it, a sandboxed command can reach the socket of
ssh-agent. On WSL2, it can also start a Windows program, such asgit.exeorgh.exe, which has the Windows credentials. The native build of Claude Code embeds the helper, so setup passes when the runningclaudeis an ELF file. The running copy is the one inCLAUDE_CODE_EXECPATH, and else theclaudeonPATH. For the npm build, setup looks for the helper as Claude Code does: the file insandbox.seccomp.applyPath, and thenvendor/seccomp/<arch>/apply-seccompin a global install of@anthropic-ai/sandbox-runtime. The arch isx64orarm64, and the filter has no other build. When the helper is missing, setup writes nothing and givesnpm install -g @anthropic-ai/sandbox-runtime./claudetto:setup sandboxruns it only after your approval, and then runs thesandboxcommand again. -
sandbox.network.allowAllUnixSockets: trueturns the filter off, so setup writes nothing and names the file that sets it. Setup does not change a setting that you chose. - On Linux, it also runs
bwrapone time, because AppArmor can stop an installedbwrap, such as on Ubuntu 24.04 and later. The run uses thebwrapthat Claude Code uses:sandbox.bwrapPathwhen a settings file sets it, andbwrapfromPATHif not. It resolves links, so a Homebrewbwrapgives its real path. When the run fails, it writes nothing and shows the error. When the sysctlkernel.apparmor_restrict_unprivileged_usernsis 1, it also prints the AppArmor profile of the sandbox page with the real path of thatbwrap./claudetto:setup sandboxwrites the profile to/etc/apparmor.d/bwrapand runssudo systemctl reload apparmoronly after your approval. The errorCan't mount procmeans an unprivileged container. The sandbox page namessandbox.enableWeakerNestedSandboxfor that case, and the hard stop does not set it, because it weakens the sandbox. - It prints the changes and the costs, and it writes them only with
--apply. - It keeps your other keys, and a second run changes nothing.
- It writes a record of its changes to
.claudetto/sandbox-stop.json.claudetto-setup sandbox --remove --applytakes out only those changes and puts back each old value. - The exclude step adds
.claude/settings.local.jsonand the record to.git/info/exclude, so git does not track them.
- Copy the keys that you want into
~/.claude/settings.json(user scope). - Replace
<plugin folder>instatusLineandsubagentStatusLinewith the absolute path of the plugin folder, or delete both keys. The commands arebun --no-env-file "<plugin folder>/bin/claudetto-statusline"forstatusLine, and the same command with--subagentforsubagentStatusLine. A status line command gets no${CLAUDE_PLUGIN_ROOT}, so the path must be absolute. The path holds the version, so change the two commands again after each plugin update. - Replace
claude-fable-5-1withclaude-mythos-5-1only if your account has Mythos. See Mythos detection and the CVP procedure. - Restart Claude Code.
The snippet sets a key only when the Claude Code default does not give the result that claudetto needs. A test fails when the block holds a key of the never-set list.
- Start
- How claudetto Works
- Add-On Plugins
- How Claude Code Works
- Reference
- Rationale
- Evidence
- Development
- Archive