Skip to content

06.8 Settings 配置全解

五层配置的优先级、常用键、以及"配置为什么不生效"的排查。

读完你能做什么:精确控制 Claude Code 的行为,并快速定位配置冲突。


一、五层配置优先级

Claude Code 的设置来自多个文件,从低到高优先级:

text
优先级(低 → 高)

1. 用户设置       ~/.claude/settings.json
2. 项目设置       .claude/settings.json           (提交到 git)
3. 本地设置       .claude/settings.local.json      (gitignore)
4. --settings     命令行指定的文件或内联 JSON
5. 管理策略设置    系统级路径(组织下发,最高,不可覆盖)

高优先级覆盖低优先级的同名键;未指定的键保留低层的值。

管理策略设置在最顶层,个人无法覆盖 —— 这是企业管控的基础,见 10.3

1.1 控制加载哪些层

bash
claude --setting-sources user,project        # 只加载这两层
claude --safe-mode                            # 禁用所有自定义(排障)

二、常用设置键

2.1 模型与推理

json
{
  "model": "sonnet",
  "fallbackModel": "haiku",
  "effortLevel": "medium"
}

2.2 权限

json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": ["Bash(npm *)", "Read", "Edit"],
    "ask": ["Bash(git push *)"],
    "deny": ["Bash(rm -rf *)", "Read(./.env*)"],
    "additionalDirectories": ["../shared-lib"]
  }
}

详见 05.5

2.3 Hooks

json
{
  "hooks": {
    "PostToolUse": [
      { "matcher": "Edit|Write",
        "hooks": [{ "type": "command", "command": ".claude/hooks/format.sh" }] }
    ]
  }
}

详见 06.5

2.4 记忆

json
{
  "autoMemoryEnabled": true,
  "autoMemoryDirectory": "~/my-memory-dir",
  "claudeMdExcludes": ["**/other-team/CLAUDE.md"]
}

2.5 内联 CLAUDE.md(管理设置专用)

json
{
  "claudeMd": "Always run `make lint` before committing.\nNever push to main."
}

claudeMd 键只在管理/策略设置里生效。

2.6 沙箱与显示

json
{
  "sandbox": { "enabled": true },
  "teammateMode": "in-process",
  "viewMode": "verbose"
}

三、--settings 的两种用法

bash
# 指定一个设置文件
claude --settings ./ci-settings.json

# 内联 JSON(覆盖对应键,其他键保留)
claude --settings '{"model": "opus", "effortLevel": "high"}'

内联设置只覆盖你指定的键,未提到的键仍从文件读取。文件必须是常规文件,不超过 2 MiB。


四、环境变量

有些行为通过环境变量控制(部分与设置键等价):

环境变量作用
ANTHROPIC_MODEL默认模型(被 --model 覆盖)
CLAUDE_CODE_DISABLE_AUTO_MEMORY关闭自动记忆
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD加载附加目录的 CLAUDE.md
CLAUDE_CODE_NEW_INIT启用交互式 /init
CLAUDE_CODE_SKIP_PROMPT_HISTORY不保存会话
CLAUDE_CODE_USE_BEDROCK / CLAUDE_CODE_USE_VERTEX用 Bedrock / Vertex 承载
HTTPS_PROXY / HTTP_PROXY企业代理
MCP_TIMEOUTMCP 启动超时

完整清单以官方 env-vars 文档为准。


五、配置不生效的排查流程

这是最高频的困扰。按顺序查:

步骤 1:设置文件是合法 JSON 吗

bash
claude doctor        # 会报告 settings 文件的校验错误

JSON 有语法错误(多余逗号、缺引号)时,整个文件可能被忽略。

步骤 2:是不是被高优先级层覆盖了

text
你在 ~/.claude/settings.json 设了 model: opus
但 .claude/settings.json 里设了 model: sonnet
→ 项目层覆盖用户层,实际用 sonnet

--setting-sources 逐层排除定位:

bash
claude --setting-sources user "..."          # 只用用户层,看行为

步骤 3:是不是管理策略锁定了

管理策略设置不可被个人覆盖。如果某个设置怎么改都不生效,可能是组织策略。检查系统级路径或联系 IT。

步骤 4:是不是某个自定义搞坏了

bash
claude --safe-mode       # 禁用所有自定义

如果安全模式下正常,说明是某个 hook / skill / plugin / CLAUDE.md 的问题,逐个排查。

步骤 5:CLAUDE.md 到底加载了吗

text
> /context               # 看 Memory files 一节

05.6 第七节


六、settings.json vs settings.local.json

settings.jsonsettings.local.json
是否提交是,团队共享否,Claude Code 保存时自动 gitignore
放什么团队一致的规则你个人的偏好、本地路径
例子团队的权限规则、hook你的模型偏好、本地 MCP

约定:团队规范放 settings.json 并提交,个人偏好放 settings.local.json


七、一套推荐的三文件配置

7.1 用户级(~/.claude/settings.json

你个人跨所有项目的默认:

json
{
  "model": "sonnet",
  "fallbackModel": "haiku",
  "effortLevel": "medium",
  "autoMemoryEnabled": true
}

7.2 项目级(<project>/.claude/settings.json,提交)

团队共享的规则:

json
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": ["Bash(npm *)", "Bash(git status)", "Bash(git diff *)", "Read", "Edit", "Write"],
    "ask": ["Bash(git push *)"],
    "deny": ["Bash(rm -rf *)", "Read(./.env*)", "Bash(git push --force*)"]
  },
  "hooks": {
    "PostToolUse": [
      { "matcher": "Edit|Write",
        "hooks": [{ "type": "command", "command": ".claude/hooks/format.sh" }] }
    ]
  }
}

7.3 个人项目级(<project>/.claude/settings.local.json,gitignore)

你在这个项目的私人偏好:

json
{
  "model": "opus",
  "permissions": {
    "additionalDirectories": ["../my-local-scratch"]
  }
}

这里的 model: opus 会覆盖用户级的 sonnet,只对这个项目、只对你生效。


八、把配置纳入版本控制的策略

text
提交到 git(团队共享):
  .claude/settings.json      —— 权限、hook、团队规则
  .claude/CLAUDE.md          —— 项目记忆
  .claude/rules/             —— 分模块规则
  .claude/skills/            —— 项目技能
  .claude/agents/            —— 子代理

加入 .gitignore(个人/敏感):
  .claude/settings.local.json
  CLAUDE.local.md
  .claude/agent-memory-local/

.gitignore 建议:

gitignore
.claude/settings.local.json
CLAUDE.local.md
.claude/agent-memory-local/
.claude/worktrees/

延伸阅读

基于 VitePress 构建 · 内容采用原作者授权