Claude Code 的配置体系基于一个5级优先级链,从企业策略到个人偏好逐层覆盖。本文将系统解析 settings.json 的 80+ 设置项、权限模式(allow/ask/deny)、Hooks 与 MCP 服务器集成,并说明如何通过环境变量和 CLI 启动标志进行精细控制。

Claude Code Settings 完整配置指南:80+ 设置项、权限、Hooks、MCP 详解

Claude Code 的行为由其配置文件 settings.json 驱动,这些文件分布在不同的位置,形成一个层级清晰的配置系统。掌握这套系统是实现从“随意编码”到结构化代理工程工作流的关键一步。本文将深入拆解 settings.json 的所有核心部分。

1. 设置的5级优先级链

Claude Code 的配置并非单一来源,而是按照明确的优先级顺序合并。下表列出了从高到低的5个层级:

优先级 位置 作用域 是否共享 用途
1 Managed settings 组织级 是 (由 IT 部署) 不可覆盖的安全策略
2 命令行参数 会话级 N/A 临时的单次会话覆盖
3 .claude/settings.local.json 项目级 否 (被 git 忽略) 个人的项目特定设置
4 .claude/settings.json 项目级 是 (已提交) 团队共享的设置
5 ~/.claude/settings.json 用户级 N/A 全局个人默认设置

重要规则

  • deny 规则拥有最高安全优先级,无法被更低优先级的 allowask 规则覆盖。
  • 数组类型的设置(如 permissions.allow)在各个作用域间是合并并去重的,而不是替换。
  • Managed settings 通过多种方式下发(服务器管理、MDM 配置、注册表策略、文件部署),并且在 Managed 内部也有优先级(server-managed > MDM/OS 策略 > 文件 > HKCU 注册表)。

2. 核心配置项概览

.claude/settings.json 的根层级,有数十个通用设置项控制 Claude Code 的基础行为。

Key 类型 默认值 描述
model string "default" 覆盖默认模型。接受别名 (sonnet, opus, haiku) 或完整模型 ID
agent string - 设置主对话的默认代理。值是 .claude/agents/ 中的代理名称。也可通过 --agent CLI 标志使用
language string "english" Claude 偏好的响应语言,也设置了语音听写语言
cleanupPeriodDays number 30 启动清理扫描的年龄截止点(最小为 1)。不活跃的会话记录和孤立的子代理 worktree 将被删除
alwaysThinkingEnabled boolean false 默认为所有会话启用扩展思考
availableModels array - 限制用户可通过 /model--model、Config 工具或 ANTHROPIC_MODEL 选择的模型。不影响默认选项
cleanupPeriodDays number 30 启动清理扫描的年龄截止点(最小为 1)。不活跃的会话记录和孤立的子代理 worktree 将被删除
skillOverrides object - 按技能名称控制自动调用行为的覆盖。值可以是 "off", "user-invocable-only", "name-only"

示例:

{
  "model": "opus",
  "agent": "code-reviewer",
  "language": "japanese",
  "cleanupPeriodDays": 60,
  "alwaysThinkingEnabled": true
}

此外,还有用于组织计划文件自动记忆存储目录的设置:

  • plansDirectory: /plan 命令输出的存储目录。
  • autoMemoryDirectory: 自定义自动记忆存储目录。

3. 权限系统详解

权限系统是控制 Claude Code 行为安全边界的核心,通过 permissions 对象进行配置。

权限模式 (defaultMode)

模式 行为
"default" 标准权限检查,需要提示
"acceptEdits" 自动接受文件编辑及工作目录或 additionalDirectories 内的常见文件系统命令
"dontAsk" 除非通过 /permissionspermissions.allow 规则预先批准,否则自动拒绝工具
"bypassPermissions" 跳过所有权限检查(危险)。对受保护路径的写入仍然会提示
"auto" 在后台安全检查下自动批准工具调用
"plan" 只读探索模式,阻止文件写入

三种规则类型

权限规则分为三类,评估顺序为:deny → ask → allow,第一个匹配的规则生效。

  • allow: 无需提示即允许工具使用。
  • ask: 需要用户确认。
  • deny: 阻止工具使用(最高优先级)。

工具权限语法

不同的工具有不同的匹配语法。例如:

  • Bash(command pattern): Bash(npm run *), Bash(git *)
  • Read(path pattern): Read(.env), Read(./secrets/**)
  • Edit(path pattern) / Write(path pattern): Edit(src/**)
  • MCP(server:tool): MCP(github:*)

路径模式支持绝对路径 (//)、主目录相对 (~/)、项目根相对 (/) 和相对路径 (./) 四种前缀。

示例配置:

{
  "permissions": {
    "allow": ["Edit(*)", "Bash(npm run *)", "mcp__*"],
    "ask": ["Bash(rm *)", "Bash(git push *)"],
    "deny": ["Read(.env)", "Read(./secrets/**)"],
    "additionalDirectories": ["../shared-libs/"]
  }
}

4. Hooks 集成

Hooks 允许你在 Claude Code 的生命周期关键节点执行自定义脚本或触发操作。相关的设置键包括 hooks (主要配置对象)、disableAllHooksallowManagedHooksOnly。关于所有 27 种事件、声音通知系统等完整细节,请参阅独立的 Claude Code Hooks 完整指南

5. MCP 服务器配置

MCP (Model Context Protocol) 服务器为 Claude Code 扩展了能力。配置主要在 settings.jsonmcpServers 字段和 .mcp.json 文件中完成。

关键设置项

Key 类型 描述
enableAllProjectMcpServers boolean 自动批准所有 .mcp.json 中的服务器
enabledMcpjsonServers array 特定服务器名称的白名单
disabledMcpjsonServers array 特定服务器名称的黑名单
allowedMcpServers array (仅 Managed) 带名称/命令/URL 匹配的白名单
deniedMcpServers array (仅 Managed) 带匹配的黑名单

自 v2.1.121 起,你可以在 .mcp.json 的单个服务器条目中设置 "alwaysLoad": true,使该服务器的工具在会话开始时立即加载,而不是延迟加载。

6. 沙箱 (Sandbox) 配置

沙箱通过 sandbox 对象配置,为 Bash 命令提供安全隔离环境。

Key 类型 默认值 描述
sandbox.enabled boolean false 启用 Bash 沙箱
sandbox.failIfUnavailable boolean false 当沙箱启用但无法启动时退出并报错
sandbox.network.allowedDomains array [] 沙箱的网络域名白名单
sandbox.network.deniedDomains array [] 网络域名黑名单,优先级高于白名单

7. 其他重要设置类别

Claude Code 的设置体系远不止上述几类,还包括:

  • Plugins (enabledPlugins, extraKnownMarketplaces): 配置插件和市场。
  • 模型配置 (model): 指定默认使用的 AI 模型。
  • 显示与 UX (viewMode, tui): 控制界面显示模式,如 "focus""fullscreen"
  • AWS & Cloud Credentials: 通过 env 字段配置云服务凭证。
  • Attribution (attribution): 自定义 Git 提交和 PR 的归属消息。

要查看完整的 80+ 设置项分类表格,请参考源仓库的 Settings Best Practice 文档

8. 环境变量配置 (env)

settings.json 中的 env 字段允许你配置超过 180 个环境变量,避免了编写包装脚本的麻烦。这些变量控制着从临时目录、Shell 行为到各种功能开关的方方面面。

示例:

{
  "env": {
    "CLAUDE_CODE_TMPDIR": "/tmp/claude-custom",
    "MAX_THINKING_TOKENS": "16000",
    "CLAUDE_CODE_SHELL": "zsh"
  }
}

9. CLI 启动标志与设置覆盖

命令行启动标志提供了最高优先级的临时覆盖能力。根据 CLI 启动标志参考,标志可分为 16 大类,其中直接与设置相关的包括:

  • Settings Override:

    • --settings <PATH|JSON>: 加载指定路径或 JSON 字符串的设置文件。
    • --setting-sources <LIST>: 以逗号分隔的列表指定要加载的源(user, project, local)。
    • --disable-slash-commands: 为本次会话禁用所有技能和斜杠命令。
  • Permissions & Security:

    • --permission-mode <MODE>: 以指定的权限模式启动(如 plan, bypassPermissions)。
    • --allowedTools <TOOLS>: 指定无需提示即可执行的工具。

这些标志可以与 settings.json 协同工作,实现灵活的临时配置调整。

10. 如何验证你的配置

  1. 创建/修改文件: 在对应层级(用户、项目、本地)创建或编辑 .claude/settings.json
  2. 运行验证: 启动新的 Claude Code 会话。观察权限提示、可用工具列表或模型选择是否符合预期。
  3. 检查合并结果: 使用 /config 命令或 claude doctor 可以查看当前生效的部分配置和诊断信息。
  4. 调试模式: 使用 --debug 标志启动,可以查看详细的加载和决策日志,帮助定位配置问题。

FAQ

Q: 如果不同层级的 permissions.allow 规则冲突了怎么办? A: 规则不会冲突,而是会合并。所有层级的 allow 规则会被汇总到一个列表中,Claude Code 检查时会遍历这个合并后的列表。

Q: auto 权限模式和 bypassPermissions 模式有什么区别? A: bypassPermissions 是完全跳过权限检查,对受保护路径的写入仍会提示。auto 模式则会在后台运行一个分类器进行安全检查,自动批准大多数操作,但对高风险操作仍会提示或阻止。

Q: 环境变量 env 和直接在 Shell 中设置有什么不同? A: 在 settings.jsonenv 中设置的变量作用域更清晰,与项目配置绑定,并且可以被 Managed 策略管理。直接在 Shell 中设置的变量是全局的,可能会影响其他应用程序,且不易共享和版本控制。

Q: 如何查看当前会话实际加载了哪些设置? A: 可以使用 --debug 启动标志,日志中会显示设置的加载来源和合并过程。也可以在交互模式中尝试使用 /config 命令。