Claude Code 设置
Settings 决定 Claude Code 如何加载记忆、权限、hooks、MCP servers、模型和 UI 偏好。合理的 settings 能减少每个会话和每个同事重复手动配置。
- 最近核验
- 适用版本
- Claude Code 2.1.x。本机使用 2.1.198 核对 CLI 拼写;官方文档可能描述更新的 2.1.x 行为。
- 核验方式
- 依据官方文档和本地 help 核对 settings scopes、local-file location、source selection、merge behavior 与 permission precedence;未修改真实 settings。
可复现实践
共享 Setting 前隔离测试 Project Setting
区分 project、local、user 和 command-line settings,避免覆盖已有配置。
准备
- 唯一临时 git 仓库。
- 使用 jq 校验语法。
- 一个可回退、有官方 key 和预期 scope 的 setting。
执行步骤
创建隔离 project/local layers
Fixture 不能覆盖已有 `.claude` 目录。
步骤 1 SETTINGS_LAB=$(mktemp -d "${TMPDIR:-/tmp}/claude-settings.XXXXXX") printf '%s\n' "$SETTINGS_LAB" cd "$SETTINGS_LAB" && git init -q mkdir .claude printf '%s\n' '{"permissions":{"allow":["Read"]}}' > .claude/settings.json printf '%s\n' '{"permissions":{"deny":["Read(.env)"]}}' > .claude/settings.local.json验证两个文件
Syntax 通过是必要条件,但不能证明有效 merge。
步骤 2 jq -e . .claude/settings.json >/dev/null jq -e . .claude/settings.local.json >/dev/null显式选择 source
可选 session 只加载 project/local,排除无关 user settings。
步骤 3 claude --setting-sources project,local覆盖 denial
请求普通文件和 `.env`,检查真实 permission result,fixture 不放秘密。
预期结果
Project allow 和 local deny 均可归因,`.env` 保持拒绝,测试不依赖 user settings。
验证
- 只用 `/status` 或 `/config` 检查 effective state,不推断未记录 merge rule。
- 分别检查两个 JSON 和 git status。
- 在真实 repo 采用前确认 local settings 仍 untracked。
失败处理
Setting 像是被忽略
检查 scope、repository root、支持的 key,以及 print mode 是否静默忽略 invalid settings。
Layer 冲突
缩减到一个 key 和一对 source;deny rule 始终保留 precedence。
清理或回退
- 退出并返回原目录,确认 SETTINGS_LAB 是打印出的 mktemp 路径,只删除它。
- 真实项目通过 reviewed commit 回退 shared settings,并保留无关 local settings。
边界与不适用场景
- 较新 2.1.x 中 local settings 可能跨 worktree 解析到 repository root。
- Managed settings 和安全控制可覆盖或补充 project choice,本地测试不能证明组织 policy。
Settings 层级
Claude Code 会合并多个作用域的 settings。组织 managed policy 可覆盖用户默认值;项目 settings 则细化某个仓库的行为。
用户 settings
Claude Code 配置目录中的个人默认值,适用于所有项目。
阅读指南项目 settings
`.claude/` 下的仓库级 settings,团队共享。
阅读指南Managed policy
组织托管 settings,用于安全、MCP allowlist 和部署规则。
阅读指南常见配置项
大多数团队早期会配置 permissions、additional directories、默认模型、diff 工具行为,以及主题或输出偏好。
| Command | Description |
|---|---|
/config | 打开 settings UI,或直接设置 key=value。 |
/permissions | 配置当前会话的 allow、ask、deny 工具规则。 |
--settings | 为脚本化或 CI 会话加载 JSON settings 文件。 |
--add-dir | 为当前运行授予额外工作目录访问。 |
/config theme=dark
/config model=sonnet环境变量
环境变量可覆盖认证、debug 日志、功能开关和集成行为,适合 CI、容器和团队标准 shell。
排查 settings 未生效
当某个 setting 看起来被忽略时,应检查当前会话实际加载了什么,而不是假设磁盘上的文件已经应用。
日常工作中的 settings
Settings 与 permissions、memory、MCP 和故障排查交叉。应调整真正控制当前行为的那一层。
权限
用 /permissions 或项目 rules 控制工具访问。
阅读指南项目记忆
项目 CLAUDE.md 和 `.claude/` settings 在会话启动时加载。
阅读指南IDE diff 工具
使用 IDE 集成时,通过 /config 设置 Diff tool。
阅读指南CI 覆盖
在 GitHub Actions job 中传入 --settings 和环境变量。
阅读指南Settings 检查
确认作用域
判断当前仓库适用的是 user、project 还是 managed policy settings。
阅读指南项目 settings 纳入版本控制
把团队默认值提交到仓库,便于 onboarding。
阅读指南用 /config 快速调整
改 theme、model、diff tool 时,不必先找 JSON 文件。
阅读指南用 /doctor 验证
settings 文件已改但行为未变时,先跑诊断。
阅读指南