Settings Snippet - xsyetopz/claudetto GitHub Wiki

Settings Snippet

This page tells users how to apply the settings that dotclaude needs. The page gives the settings as a JSON block in the format of Claude Code settings. The settings entries of each slice make the snippet, and just generate writes it into this page. A test checks each key against schemas/claude-code-settings.json. The reason, the effect in Claude Code, and the default of each key are on Settings snippet keys.

Apply It with Setup

  1. Run /dotclaude:setup.
  2. Pick the scope: user, project, or local.
  3. 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.

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.

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.

When dotclaude-docs is installed, the merge also adds the lines for the dotclaude-docs add-on.

Copy It by Hand

  1. Copy the keys that you want into ~/.claude/settings.json (user scope).
  2. Replace <plugin folder> in statusLine and subagentStatusLine with the absolute path of the plugin folder, or delete both keys. The commands are bun --no-env-file "<plugin folder>/bin/dotclaude-statusline" for statusLine, and the same command with --subagent for subagentStatusLine. 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.
  3. Replace claude-fable-5-1 with claude-mythos-5-1 only if your account has Mythos. See Mythos detection and the CVP procedure.
  4. Restart Claude Code.

The snippet sets a key only when the Claude Code default does not give the result that dotclaude needs. A test fails when the block holds a key of the never-set list.

The Snippet

{
  "$schema": "https://raw.githubusercontent.com/xsyetopz/dotclaude/main/schemas/claude-code-settings.json",
  "syncClaudeAiSkills": false,
  "syncClaudeAiPlugins": false,
  "env": {
    "CLAUDE_CODE_AUTO_COMPACT_WINDOW": "300000",
    "CLAUDE_CODE_AUTO_CONNECT_IDE": "false",
    "CLAUDE_CODE_DISABLE_CFC_PROMPT": "1",
    "CLAUDE_CODE_DISABLE_CRON": "1",
    "CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS": "1",
    "CLAUDE_CODE_DISABLE_FAST_MODE": "1",
    "CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1",
    "CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "1",
    "CLAUDE_CODE_FORK_SUBAGENT": "0",
    "CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL": "1",
    "CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS": "5",
    "CLAUDE_CODE_MAX_CONTEXT_TOKENS": "300000",
    "CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT": "1",
    "CLAUDE_CODE_SUBAGENT_MODEL": "claude-sonnet-5-5",
    "CLAUDE_CODE_TODO_REMINDER_MODE": "off",
    "DISABLE_COMPACT": "1",
    "DISABLE_ERROR_REPORTING": "1",
    "DISABLE_FEEDBACK_COMMAND": "1"
  },
  "includeGitInstructions": false,
  "permissions": {
    "disableBypassPermissionsMode": "disable",
    "deny": [
      "Read(**/.env)",
      "Read(**/.env.local)",
      "Read(**/.env.production)",
      "Read(**/.env.*.local)",
      "Read(**/.env.development)",
      "Read(**/.env.dev)",
      "Read(**/.env.staging)",
      "Read(**/.env.stage)",
      "Read(**/.env.test)",
      "Read(**/.env.prod)",
      "Read(**/.env.qa)",
      "Read(**/.env.preview)",
      "Read(~/.ssh/**)",
      "Read(~/.aws/credentials)",
      "Read(~/.gnupg/**)",
      "Read(~/.netrc)",
      "Read(~/.docker/config.json)",
      "Bash(rm -rf /)",
      "Bash(rm -rf /*)",
      "Bash(rm -rf ~)",
      "Bash(rm -rf ~/*)",
      "Bash(mkfs *)",
      "Bash(mkfs.*)",
      "Bash(dd * of=/dev/*)",
      "Agent(general-purpose)",
      "Agent(claude-code-guide)",
      "Agent(statusline-setup)",
      "mcp__computer-use",
      "ScheduleWakeup",
      "ReportFindings",
      "EnterPlanMode",
      "ExitPlanMode",
      "TaskCreate",
      "TaskGet",
      "TaskList",
      "TaskStop",
      "TaskUpdate"
    ],
    "ask": [
      "Bash(git push *--force*)",
      "Bash(git push -f*)",
      "Bash(git push * -f)",
      "Bash(git push * -f *)",
      "Bash(git reset --hard*)",
      "Bash(git clean -f*)",
      "Bash(git clean -d*)",
      "Bash(git branch -D *)",
      "Bash(git checkout -- *)",
      "Bash(git restore *)",
      "Bash(rm -*r*)",
      "Bash(rm -*R*)",
      "Bash(rm * -*r*)",
      "Bash(rm * -*R*)",
      "Bash(rm --recursive*)",
      "Bash(rm * --recursive*)",
      "Bash(sh)",
      "Bash(sh -)",
      "Bash(sh -s*)",
      "Bash(bash)",
      "Bash(bash -)",
      "Bash(bash -s*)",
      "Bash(zsh)",
      "Bash(sudo *)",
      "Bash(npm publish*)",
      "Bash(bun publish*)",
      "Bash(pnpm publish*)",
      "Bash(yarn publish*)",
      "Bash(cargo publish*)",
      "Bash(gh pr create *)",
      "Bash(gh pr merge *)",
      "Bash(gh pr comment *)",
      "Bash(gh pr review *)",
      "Bash(gh issue create *)",
      "Bash(gh issue comment *)",
      "Bash(gh release *)",
      "Bash(* DROP DATABASE *)",
      "Bash(* DROP TABLE *)",
      "Bash(* TRUNCATE *)",
      "Bash(* drop database *)",
      "Bash(* drop table *)",
      "Bash(* truncate table *)"
    ],
    "allow": [
      "Bash(git status *)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git show *)",
      "Bash(git branch)",
      "Bash(git fetch *)",
      "Bash(gh pr view *)",
      "Bash(gh pr list *)",
      "Bash(gh pr diff *)",
      "Bash(gh pr checks *)",
      "Bash(gh issue view *)",
      "Bash(gh issue list *)",
      "Bash(gh run view *)",
      "Bash(gh run list *)",
      "Bash(gh repo view *)",
      "Bash(bun test *)",
      "Bash(bun run *)",
      "Bash(npm test *)",
      "Bash(npm run *)",
      "Bash(pnpm test *)",
      "Bash(pnpm run *)",
      "Bash(cargo build *)",
      "Bash(cargo test *)",
      "Bash(cargo check *)",
      "Bash(go build *)",
      "Bash(go test *)",
      "Bash(go vet *)",
      "Bash(just *)",
      "Bash(make *)"
    ]
  },
  "model": "claude-opus-5-5",
  "availableModels": [
    "claude-opus-5-5",
    "claude-sonnet-5-5",
    "claude-haiku-5-5",
    "claude-fable-5-1"
  ],
  "enforceAvailableModels": true,
  "disableClaudeAiConnectors": true,
  "skillOverrides": {
    "plugin-authoring": "name-only"
  },
  "disableBundledSkills": true,
  "disableAgentView": true,
  "disableRemoteControl": true,
  "enableArtifact": false,
  "enableWorkflows": false,
  "bashOutputMaxChars": 4000,
  "statusLine": {
    "type": "command",
    "command": "bun --no-env-file \"<plugin folder>/bin/dotclaude-statusline\"",
    "padding": 0,
    "refreshInterval": 1,
    "hideVimModeIndicator": true
  },
  "subagentStatusLine": {
    "type": "command",
    "command": "bun --no-env-file \"<plugin folder>/bin/dotclaude-statusline\" --subagent"
  },
  "enabledPlugins": {
    "cc-plugin-agents-md@builtin": false,
    "cc-plugin-claude-test@builtin": false,
    "cc-plugin-diff@builtin": false,
    "cc-plugin-mermaid@builtin": false,
    "cc-plugin-mods-guide@builtin": false,
    "cc-plugin-responsive-mode@builtin": false,
    "cc-plugin-telemetry@builtin": false,
    "cc-plugin-tips@builtin": false,
    "cc-plugin-you-should-know@builtin": false
  },
  "outputStyle": "dotclaude:Concise",
  "sandbox": {
    "enabled": true,
    "allowUnsandboxedCommands": true,
    "excludedCommands": ["git fetch *", "git pull *", "git push *", "gh *"],
    "network": {
      "allowedDomains": [
        "github.com",
        "*.github.com",
        "*.githubusercontent.com",
        "registry.npmjs.org",
        "pypi.org",
        "files.pythonhosted.org",
        "crates.io",
        "static.crates.io",
        "index.crates.io",
        "proxy.golang.org"
      ]
    }
  },
  "feedbackSurveyRate": 0,
  "feedbackDrafts": "off",
  "spinnerTipsEnabled": false,
  "promptCacheTtl": "5m",
  "maxEffortLevel": "max",
  "fastMode": false,
  "promptSuggestionEnabled": false,
  "awaySummaryEnabled": false,
  "autoMemoryEnabled": false,
  "autoCompactEnabled": false
}

The six rm rules match any flag spelling with an r or R after a dash, and --recursive. They also ask for some calls that are not recursive. An example is rm -f report.txt. The r is in the file name, after a dash option. An extra ask is acceptable. The rules do not stop a write outside the allowed folders. The sandbox limits the writes of Bash.

Lines for the dotclaude-docs Add-On

Add these lines only when you install dotclaude-docs (Library docs). Merge them into the permissions.allow list and the sandbox.network.allowedDomains list above.

{
  "permissions": {
    "allow": [
      "Skill(dotclaude-docs:docs)",
      "Bash(CTX7_TELEMETRY_DISABLED=1 npx -y [email protected] *)"
    ]
  },
  "sandbox": {
    "network": { "allowedDomains": ["context7.com", "registry.npmjs.org"] }
  }
}

Related Pages

⚠️ **GitHub.com Fallback** ⚠️