Repository navigation
Setup
The setup slice puts the right settings into your Claude Code settings file.
A plugin cannot set permissions or env vars by itself, so this slice does it for you.
Run /claudetto:setup once, and again after each update.
The cleanup of the 0.1.0 settings is on Setup Cleanup.
A plugin settings file can set only agent and subagentStatusLine.
So the slice ships a settings snippet and a tool that merges it into a file that you pick.
Only you can start the skill setup, because it has disable-model-invocation: true.
Its argument-hint is [user|project|local].
It may run only claudetto-setup * and codegraph install --target claude --location global.
- It takes the scope from the argument, or it asks you.
- It runs
claudetto-setup --scope <scope> --advisor <advisor>and shows the list of changes. - It asks you once whether to apply them.
- After a yes, it runs the same command with
--apply. - It gives you the
aliasline forGlobandGrep. - It runs
claudetto-setup --addonsand asks you about each step that the command prints. - It lists the files that changed and tells you to restart Claude Code.
The skill never edits a settings file itself. The command is the checked path.
claudetto-setup [--scope user|project|local] [--advisor builtin|claudetto] [--apply]
claudetto-setup --addons
| Option | Meaning |
|---|---|
--scope |
The settings file to change. The default is user. |
--advisor |
The advisor option of the advise slice. The default is builtin. |
--apply |
Write the changes. Without it, the command only prints them. |
--addons |
Print the optional step of each enabled add-on. It writes nothing. |
| (an unknown option) | Print the usage to stderr and exit with code 2. |
| Scope | Settings file | Markdown file for the cleanup |
|---|---|---|
user |
settings.json in CLAUDE_CONFIG_DIR, or ~/.claude
|
CLAUDE.md in the same folder |
project |
.claude/settings.json in CLAUDE_PROJECT_DIR, or the current folder |
CLAUDE.md in the project |
local |
.claude/settings.local.json in the same folder |
CLAUDE.local.md in the project |
| Exit code | Meaning |
|---|---|
| 0 | Good run |
| 1 | A settings file is not a JSON object |
| 2 | Bad option |
The command changes nothing when it fails. A second run with the same options changes nothing.
The command first runs the cleanup.
It then merges the settings snippet into the result.
The snippet is the sum of the settings of all slices.
See Settings Snippet for each key.
| Kind of value | What the merge does |
|---|---|
| Object | Merges key by key. |
| Array | Adds the entries that are missing. Your entries stay. availableModels is the one exception, because the snippet replaces it. |
| Scalar | Takes the value of the snippet. |
| Key that the snippet does not name | Stays as it is. |
The preview prints one line for each key that differs, as path: old -> new.
It prints Settings match the snippet. when nothing differs.
<plugin folder> in a status line command becomes the folder of the installed plugin.
That folder holds the version, so run the skill again after an update.
The setup slice adds these keys:
| Key | Value |
|---|---|
env.CLAUDE_CODE_DISABLE_CRON |
1 |
env.CLAUDE_CODE_DISABLE_FAST_MODE |
1 |
env.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT |
1 |
includeGitInstructions |
false |
autoMemoryEnabled |
false |
disableClaudeAiConnectors |
true |
syncClaudeAiSkills |
false |
syncClaudeAiPlugins |
false |
worktree.baseRef |
head |
sandbox.network.allowLocalBinding |
true |
sandbox.filesystem.allowWrite |
The package caches ~/.bun/install/cache, ~/.npm, ~/.cache/pip, ~/.cargo/registry, ~/go/pkg/mod
|
With --advisor claudetto, the snippet also sets CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1.
Claude then sees one advisor.
The skill passes its advisor option to the command, because a CLI that you run gets no CLAUDE_PLUGIN_OPTION_* env var.
The project scope gets no status line keys, because the command holds an absolute path of one computer.
Use the user or local scope for the status line.
If your statusLine or subagentStatusLine runs another tool, the merge keeps it.
The preview then prints Kept your <key>, because it runs another tool.
The native build of Claude Code hides Glob and Grep unless the CLI tool list names them.
A plugin cannot set a CLI flag.
So the skill gives you this line for your shell startup file, such as ~/.zshrc:
alias claude='claude --allowedTools Glob,Grep'The skill does not edit the file, because it is outside Claude Code.
With --apply, in a project that has a .git/ folder, the command adds these lines to .gitignore:
/.claudetto/
/.jscpd.json
/.claude/settings.local.json
It adds a line only when the file lacks it.
It creates .gitignore when the file is missing.
It changes nothing in a project with no .git/.
A file that a team shares, such as an OpenSpec change, is not in the list.
In a project that uses Docker (a Dockerfile, a Compose file, or a justfile or package.json that calls docker), the command offers the Docker socket in sandbox.network.allowUnixSockets, and with --apply it writes the socket to .claude/settings.local.json.
The socket is the unix:// path of DOCKER_HOST, or else the first of ~/.orbstack/run/docker.sock, ~/.docker/run/docker.sock, and /var/run/docker.sock that exists.
It changes nothing in a project that does not use Docker.
This step runs on macOS only, because Claude Code ignores allowUnixSockets on Linux.
A local settings file that does not parse stops the step with an error.
claudetto
- Start
- Slices
- Add-Ons
- Reference
- Rationale
- Evidence
- Development
Claude Code