settings.json 配置详解:层级、常用字段、环境变量

配置是 Claude Code 的操作系统

如果 CLAUDE.md 是给模型看的说明书,settings.json 就是给程序本身看的配置——模型选什么、权限怎么管、钩子挂哪里、界面长什么样,全在这里。理解 settings 的关键不是背字段(字段有一百多个,官方有完整参考),而是理解层级:同一个字段写在不同文件里,效果不同、影响的人也不同。

四层配置文件,各管一摊

层级 文件位置 影响谁 典型内容
用户级 ~/.claude/settings.json 本机所有项目的你 主题、默认模型、个人权限规则
项目共享 .claude/settings.json(进 git) 本项目的所有人 团队权限、hooks、插件、env
项目本地 .claude/settings.local.json(gitignore) 本项目的你 个人覆盖、试错沙盘
企业托管 managed-settings.json 等系统路径 全组织的每个人 安全策略、合规要求

几个新手不知道的细节值得点出来。这些文件不是装完就有的——Claude Code 首次在 /config 菜单里改选项时才创建用户级文件,首次在权限弹窗选"不再询问"时才创建本地文件(并自动帮你加进全局 git excludes)。~/.claude.json 是第五个文件,但它归 Claude Code 自己管(登录态、MCP 配置、项目信任状态),你不需要手编。

优先级从高到低一句话记住:托管 > 命令行 > 本地 > 项目共享 > 用户。比如团队共享文件把模型设成了 Sonnet,你想用 Opus,不用去改共享文件吵架——在本地文件写 "model": "..." 覆盖即可,只影响你自己。

常用字段速查

一百多个字段里,日常真正高频的就这些:

字段 作用
model 默认模型
effortLevel 推理力度
permissions allow / ask / deny 三类权限规则
hooks 各生命周期事件的钩子
env 会话环境变量
statusLine 自定义状态栏(本章末有专章)
outputStyle 默认输出样式
autoUpdatesChannel 更新通道 latest / stable
cleanupPeriodDays 会话转录保留天数(默认 30)
includeGitInstructions 是否注入内置 Git 指令
attribution 提交/PR 的归属尾注文本
autoMemoryEnabled 自动记忆开关

一份真实可用的个人配置长这样:

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "claude-sonnet-5",
  "autoUpdatesChannel": "stable",
  "outputStyle": "Concise",
  "cleanupPeriodDays": 14,
  "env": {
    "DISABLE_TELEMETRY": "1"
  },
  "permissions": {
    "allow": ["Bash(npm run test*)", "Bash(git diff*)"],
    "deny": ["Read(./.env*)"]
  }
}

带上 $schema 那一行,VS Code 等编辑器会给字段自动补全和校验。注意 settings 是严格 JSON——注释、尾逗号都会导致文件解析失败,启动时会弹 Settings Error 让你修。

环境变量的特殊地位

env 块里写的是会话环境变量,它有三种来源:shell 里 export、settings 的 env 块、启动前临时设置。三者不构成统一优先级——具体哪边赢是逐对判定的。比如 ANTHROPIC_MODEL 这个 shell 变量会压过任何文件里的 model 键;而 ANTHROPIC_DEFAULT_MODEL 只在没有文件设置 model 时才生效。记不住就查官方环境变量参考里每个变量的说明。

两类变量有硬性限制要记住:遥测导出类变量在项目共享/本地文件里不生效(防篡改);permissions.defaultMode 的 auto 和 bypassPermissions 值不能写在项目或本地文件里,只能放用户级或托管层,或用 --permission-mode 临时指定。这些限制都是为了防止"别人提交的仓库文件"悄悄改你的安全姿态。

改了怎么验证

配置调错的常见姿势是"改完不知道有没有生效"。标准流程三步:

# 1. 会话内看加载了哪些配置源
/status        # Setting sources 一行列出所有生效的文件

# 2. 终端里体检错误细节
claude doctor  # 列出被拒绝的条目、解析错误

# 3. 单次试一个值,不落盘
claude --settings '{"model": "claude-opus-5-5"}'

好消息是大部分编辑即时生效:权限、hooks、env 这类改动会被监听并热加载,不用重启会话。少数字段例外(如 model、effortLevel 只在启动时读),但它们都有对应的会话内命令 /model、/effort 可中途切换。

还有一层保险:个别安全敏感键支持"低层级收紧值压过托管放开值"——比如项目文件里 disableClaudeAiConnectors: true 就算托管层想开也关不掉你的关闭状态。设计哲学一以贯之:收紧永远比放开容易。

别配错地方:settings 与相邻文件分工

配置相关文件多,新手最容易"想改 A 却改了 B"。一张分工表定乾坤:

你想改什么 该动哪里
Claude 每会话该知道的项目知识 CLAUDE.md
允许/禁止哪些工具调用 settings.json 的 permissions 或 hooks
固定时机的自动化脚本 settings.json 的 hooks
会话环境变量 settings.json 的 env
个人偏好但不想进 git settings.local.json
/命令 形式的流程 .claude/skills/
专用子代理 .claude/agents/
MCP 服务器 .mcp.json(团队)或 ~/.claude.json(个人)
回复风格 .claude/output-styles/

单次会话的临时覆盖

试一个配置值不想落盘,有三种姿势,作用范围略有差别:

# 姿势一:--settings 传 JSON 或文件,压过用户/项目/本地文件,只在本次会话生效
claude --settings '{"model": "claude-opus-5-5"}'

# 姿势二:专用旗标,如 --model、--effort
claude --model claude-opus-5-5

# 姿势三:配对的环境变量,如 ANTHROPIC_MODEL
ANTHROPIC_MODEL=claude-opus-5-5 claude

--settings 适合临时试一组配置;旗标和环境变量则是"每键一对"的设计,哪个压过文件里的值要查该键的参考条目。反向操作也有:会话内改的设置(/config、/model)默认会写回你的用户设置作为新默认——按 s 可以只切本会话不落盘。

团队共享的注意事项

把 .claude/settings.json 提交进仓库前,两条纪律:第一,不是所有键都能从仓库文件生效——查官方设置参考里的 Scope 列,标着 User、Global config 的键写进去是无效的;第二,权限 allow 规则和环境变量要等每个同事"信任该文件夹"后才生效(deny 和 ask 立即生效),所以新人入职时第一次弹的信任框别随手划掉。

调试配置不生效的完整思路:先 /status 确认文件加载了,再查更高层级是否覆盖(企业托管 > 命令行 > 本地 > 共享 > 用户),最后 claude doctor 看被跳过的条目。完整字段参考见官方设置文档。

本章由 WorkBuddy 原创整理,事实性内容参考 Claude Code 官方文档。