设置文件与优先级
Claude Code 的四类设置文件、谁受影响、如何修改与验证,以及同一个键在多处设置时的优先级。
本页讲怎么修改 Claude Code 的设置、选择一个键应该放在哪个范围、验证修改是否生效,以及一个键在多处设置时 Claude Code 用哪个值。完整的键清单见官方的 All settings 页。
设置文件及其影响范围
Claude Code 读取四个设置文件,组织还可以从 claude.ai 控制台下发托管设置。每个来源有一个范围:保存在其中的设置适用于哪些人和项目——只是你、项目里的所有人,还是整个组织。
| 范围 | 文件 | 影响谁 | 用途 |
|---|---|---|---|
| 用户 | ~/.claude/settings.json | 你在这台机器上的每个项目 | 个人偏好:主题、编辑器模式、默认模型、你自己的权限规则 |
| 共享项目 | .claude/settings.json | 在包含它的文件夹里工作的每个人;在 git 仓库里提交它,队友就能拿到 | 团队权限、Hook、插件和项目需要的环境变量 |
| 项目本地 | .claude/settings.local.json | 只有你,只在这一个项目里。Claude Code 创建这个文件时会让它不进 git;如果你手工创建,要自己加进 .gitignore | 针对一个项目的个人覆盖,以及分享之前的测试 |
| 托管 | managed-settings.json 和其他托管来源 | 你组织部署到的所有人;你设置的任何东西都不会覆盖它,除了少数安全敏感的例外 | 安全策略和合规 |
在「文件」列里,~/.claude 是你家目录下的 .claude 文件夹,单独的 .claude 是项目里的 .claude 文件夹。
举例来说:~/.claude/settings.json 影响你机器上的每个项目,而不影响队友的或云端会话;acme-app/.claude/settings.json 只有当你把它提交进版本控制,才会到达队友的克隆和云端会话。托管设置(无论是 managed-settings.json 文件、MDM 策略还是 claude.ai 控制台下发的服务器托管设置)影响你组织部署到的每台机器上的每个项目。
查找或创建你的设置文件
安装 Claude Code 不会创建任何设置文件。如果你的机器或项目已经有一个,它来自:托管(你的组织部署,你不创建也不编辑);共享项目(已经使用 Claude Code 的项目可能提交了一个,没有的话在项目文件夹里创建 .claude/settings.json);用户和项目本地(自己创建,或让 Claude Code 创建。你第一次在 /config 菜单里更改它存到用户设置里的选项(如主题)时,它会写 ~/.claude/settings.json)。
在 Windows 上,~/.claude 指 %USERPROFILE%\.claude。想把家目录文件放到别处,设置 CLAUDE_CONFIG_DIR。Claude Code 还会保留第五个它自己写的文件 ~/.claude.json,你不需要编辑它,里面有登录会话、MCP 服务器配置和按项目的状态(如信任决定)。
与团队共享设置
提交 .claude/settings.json,让每个克隆仓库的人都得到同样的权限、Hook 和插件。每位队友仍然可以在自己的 .claude/settings.local.json 里为自己覆盖,所以个人例外不需要提交。注意你提交的一些内容要等每位队友信任文件夹后才生效,还有少数键永远不会从仓库文件里生效。
让个人设置留在仓库之外
想只为自己在一个项目里改某个设置而不影响队友,把它存进项目里的 .claude/settings.local.json。Claude Code 把这个文件应用在已提交的 .claude/settings.json 之上,所以如果团队文件设了 "model": "claude-sonnet-5" 而你想要 Opus,把你的值放这里。Claude Code 也会写这个文件:当 Claude 请求权限运行 Bash 命令而你选「Yes, and don't ask again」时,Claude Code 会把这条权限批准作为 allow 规则保存在这里。第一次在尚未忽略它的 git 仓库里写这个文件时,Claude Code 会把 **/.claude/settings.local.json 加进你的全局 git excludes 文件。
修改设置
三种方式:/config 菜单、编辑设置文件、从命令行为单个会话修改。(Claude Code 的系统提示没有公开;想给 Claude 常驻指令,用 CLAUDE.md 文件或 --append-system-prompt 标志。)
用 /config 菜单
在 Claude Code 里运行 /config 并打开 Config 标签页。它列出一小组个人选项,如主题、编辑器模式和详细输出,而不是每个设置键。选择一个选项来修改,Claude Code 会替你保存:大多数选项存到 ~/.claude/settings.json;少数选项(如 Show tips)存到 .claude/settings.local.json;全局配置选项存到 ~/.claude.json。不用菜单设置某一项时,传 key=value,如 /config verbose=true。/config 是终端界面的一部分,VS Code 聊天面板和桌面应用不打开它。
编辑设置文件
在你的编辑器里打开想要的范围的设置文件,添加或修改一个键。设置文件是严格的 JSON:// 注释或尾逗号都是语法错误,Claude Code 在下次启动时把该文件报告为 Settings Error。例如让 Claude 无需询问就运行 lint 和测试命令,同时禁止读取 .env:
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run test *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)"
]
}
}permissions 下的每一项都是一条命名了工具及其可做之事的规则。$schema 这行指向 Claude Code 设置的已发布 JSON schema,可以在编辑器里获得自动补全和校验。保存后,在 Claude Code 里运行 /status 确认文件已加载。官方还有「示例设置文件」页,展示完整的个人、团队和组织文件,每个键都带注释。
为单个会话修改设置
想试一个值而不保存它,启动 Claude Code 时设置。值只对那个会话生效,设置文件保持原样。三种方式:
--settings:以 JSON 传入键,内联或文件路径。Claude Code 把它应用在你的用户、项目和本地文件之上、托管设置之下- 该键专用的标志:一些键有自己的标志,如
--model对应model,--effort对应effortLevel - 环境变量:在运行
claude之前导出该键对应的变量,如ANTHROPIC_MODEL对应model
例如,在不更改默认值的情况下用 Opus 开一个会话:
claude --settings '{"model": "claude-opus-5-5"}'何时生效
Claude Code 监视你的设置文件,在它们变化时重新加载,所以多数编辑无需重启就应用到运行中的会话,包括 permissions、hooks 和 apiKeyHelper 这类凭据助手。少数键只在会话开始时读取一次,对它们的编辑不会到达运行中的会话,例如 model(会话中途用 /model 切换)和 effortLevel(用 /effort 改)。
确认加载了什么
在 Claude Code 里运行 /status 查看哪些设置来源处于活动状态。Status 标签页里有一行 Setting sources,列出 Claude Code 为当前会话加载的每个设置文件。这一行确认 Claude Code 读了哪些文件,但不显示每个键由哪个文件提供。想列出被 Claude Code 拒绝的条目,运行 claude doctor。
修复损坏的设置文件
如果你把 JSON 打错了,或给某个键设了 Claude Code 不接受的值,Claude Code 会在交互式会话开始时告诉你:Settings Error(用户、项目或本地文件有无效 JSON 或 schema 拒绝的值,会弹出对话框让你在 Claude 的帮助下修复、退出或不带损坏设置继续);Settings Warning(只有个别条目失败,如畸形的权限规则或未知的 Hook 事件名,Claude Code 跳过那些值并保留文件的其余部分);Configuration error(~/.claude.json 无法解析,Claude Code 把坏文件复制到 ~/.claude/backups/.claude.json.corrupted.<timestamp>,并问你是退出手动修复还是重置为默认配置)。-p 运行不显示对话框,会跳过损坏的文件或值继续,之后运行 claude doctor 查看它丢掉了什么。
设置优先级
同一个键出现在多处时,Claude Code 使用设置它的最高层级的值。从高到低:
- 托管设置:组织通过
managed-settings.json文件、MDM 策略或 claude.ai 控制台的服务器托管设置部署。你设置的任何东西都不能覆盖它们:用--settings传的键也不能覆盖同一个托管键 - 命令行参数:你在终端启动
claude时为单个会话传的标志。用--settings <file-or-json>传的 JSON 按与其他层相同的规则与你的设置文件合并 - 项目本地设置(
.claude/settings.local.json):你在这个项目里的个人设置 - 共享项目设置(
.claude/settings.json):团队提交进源码管理的设置 - 用户设置(
~/.claude/settings.json):你对每个项目的个人设置
环境变量不是这个栈里的一个层级。当某个行为既有 shell 变量又有设置键时,用哪个是逐对决定的:比如在 shell 里导出的 ANTHROPIC_MODEL 优先于任何文件里的 model 键。对少数安全敏感的键,Claude Code 会优先采用较低层级里更严格的值而不是托管值。
列表合并而不是覆盖:同一个列表键(如 permissions.allow)在多个文件里设置时,Claude Code 会合并列表,所以每个文件都可以添加条目而不删除其他文件的条目。四个保存模型列表或按模型条目的键遵循自己的规则(如 fallbackModel 是顺序有意义的有序链,取优先级最高文件里的整个值)。
优先级示例
Claude 工作时,Claude Code 会在旋转指示器下显示一行提示。假设你不想要这些提示,在 ~/.claude/settings.json 里把 spinnerTipsEnabled 设为 false:
- 团队设置覆盖个人设置:团队的
.claude/settings.json把它设为true,Claude Code 使用项目的值,因为共享项目高于用户,所以你在那个项目里能看到提示。你可以把自己的值拿回来:在该项目的.claude/settings.local.json里加"spinnerTipsEnabled": false,项目本地高于共享项目,所以你在那里的会话不再显示提示,队友的不变 - 组织设置覆盖一切:组织的托管设置把它设为
true,你在用户、项目或本地设置里放的任何东西都无法关掉,--settings也不行。运行/status看哪个托管来源适用,如果策略应该改,问你的管理员 - 命令行为单个会话覆盖你的文件:用
claude --settings '{"spinnerTipsEnabled": true}'启动会话,命令行高于除托管外的每个文件,所以即使你的文件说false,那个会话也显示提示;下个会话你的值就回来了 - 标志或环境变量设置同一件事:一些键有标志或环境变量,无论哪个文件设置了它,都覆盖设置的值,如
ANTHROPIC_MODEL覆盖model设置,--model在一个会话里覆盖两者
排查不生效的设置
设置了某个键而 Claude Code 没有按你设置的行为时,先用 /status 看它加载了哪些文件。你设置的值被忽略时:
- 更高层级设置了它:另一个设置文件、
--settings标志或托管来源在你之上设置了该键 - 安全键保持严格值:对少数键,Claude Code 采用任何文件里的限制性值,所以项目里设的
true(比如对disableClaudeAiConnectors)保持开启 - 该文件无法设置该值:
permissions.defaultMode的auto和bypassPermissions值不会从项目或本地设置生效,要在用户或托管设置里设置,或用--permission-mode为一个会话传入
更广泛的检查(包括干净配置测试)见官方的「Debug your configuration」。
每个设置键的作用域、类型、默认值和用途见全部设置项。