本教程面向第一次接触 Claude Code 的开发者,目标是用一份 settings.json 让工具"默认就懂你":选定模型、设定中文回复、自动清理历史,并亲手写一个状态栏脚本,把当前模型、本次会话花费、增删行数实时显示在终端底部。学完后你将掌握 Claude Code 的五层配置优先级,并拥有一个可复用、可提交团队共享的配置基线。
claude 进入交互界面jq(解析状态栏 JSON):未装可 brew install jq 或 apt install jqClaude Code 的配置不是一个文件说了算,而是五层叠加,从高到低依次为:
| 优先级 | 位置 | 是否共享 | 用途 |
|---|---|---|---|
| 1 | 托管设置(Managed,组织下发) | 是 | 安全策略,不可被覆盖 |
| 2 | 命令行参数(claude --model opus) |
否 | 单次会话临时覆盖 |
| 3 | .claude/settings.local.json |
否(git 忽略) | 个人在该项目的私有偏好 |
| 4 | .claude/settings.json |
是(提交到 Git) | 团队共享的项目配置 |
| 5 | ~/.claude/settings.json |
否 | 全局个人默认值 |
两条铁律记牢:
deny 规则优先级最高,任何低层级的 allow/ask 都无法放行被 deny 的命令。allow 了 Bash(npm test),又在项目里 allow 了 Bash(npm run build),最终两条都生效,而非后者覆盖前者。预期结果:当你发现某个设置"改了没反应",先问自己——是不是被更高优先级的层压住了?是不是命令行参数临时覆盖了?
常见问题:
/config 改了设置,重启后没了? 自 v2.1.126 起,/config 的修改会持久化写入 ~/.claude/settings.json,重启后保留。如果你用的是更早的版本,升级即可。.claude/settings.json 强制了某个模型,我个人想换怎么办? 项目级(第 4 层)高于用户级(第 5 层),所以你得改项目里的文件,或用命令行参数(第 2 层)临时覆盖。settings.json用户级配置位于 ~/.claude/settings.json,这是个人所有项目的默认基线。新建并编辑它:
mkdir -p ~/.claude
cat > ~/.claude/settings.json <<'EOF'
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"model": "sonnet",
"language": "chinese",
"cleanupPeriodDays": 30,
"autoCompactEnabled": true,
"alwaysThinkingEnabled": false
}
EOF
字段逐条解释:
$schema:贴上后,VS Code / Cursor 编辑这个文件时会有自动补全和字段校验,强烈建议加上。model:默认模型,可填别名 sonnet/opus/haiku,也可填完整模型 ID。language:Claude 的回复语言,设为 chinese 后默认用中文作答(也会影响语音听写和终端标签标题,v2.1.121 起)。cleanupPeriodDays:超过该天数的不活跃会话记录会被清理(最小为 1,填 0 会被拒绝)。设 30 既保留近期历史,又控制磁盘占用。autoCompactEnabled:上下文逼近模型上限时自动压缩对话。新手建议保持 true,避免长会话突然"失忆"。alwaysThinkingEnabled:是否默认开启扩展思考(更慢但更深)。入门阶段先关掉,熟悉后再开。预期结果:再次运行 claude,向它提问,应直接用中文回答;用 /model 查看时默认停留在 sonnet。
常见问题:
$schema 已开启的话编辑器会直接标红。language 写成 zh 没效果? 取值需用全称 chinese(参考官方示例用 japanese 这种全称写法)。状态栏(status line)是 Claude Code 在交互界面底部显示的一行信息。默认很简陋,但它支持你用任意脚本接管:Claude Code 会把当前会话的 JSON 数据通过标准输入喂给你的脚本,你的脚本打印什么,底部就显示什么。
先确认数据格式。Claude Code 传给脚本的 JSON 大致长这样:
{
"model": { "id": "claude-sonnet-4-6", "display_name": "Sonnet" },
"workspace": { "current_dir": "/home/you/myapp", "project_dir": "/home/you/myapp" },
"version": "2.1.199",
"cost": {
"total_cost_usd": 0.0234,
"total_duration_ms": 45120,
"total_lines_added": 87,
"total_lines_removed": 12
}
}
接下来写一个解析脚本:
cat > ~/.claude/statusline.sh <<'EOF'
#!/usr/bin/env bash
input=$(cat)
model=$(echo "$input" | jq -r '.model.display_name // "?"')
cost=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
added=$(echo "$input" | jq -r '.cost.total_lines_added // 0')
removed=$(echo "$input" | jq -r '.cost.total_lines_removed // 0')
dir=$(echo "$input" | jq -r '.workspace.current_dir // ""' | sed "s|$HOME|~|")
printf "🤖 %-8s 💰 \$%.4f ✎ +%s/-%s 📂 %s" \
"$model" "$cost" "$added" "$removed" "$dir"
EOF
chmod +x ~/.claude/statusline.sh
然后把它挂到配置里。编辑 ~/.claude/settings.json,增加 statusLine 字段:
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"model": "sonnet",
"language": "chinese",
"cleanupPeriodDays": 30,
"autoCompactEnabled": true,
"alwaysThinkingEnabled": false,
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh",
"padding": 0
}
}
预期结果:重新进入 claude,终端底部出现一行类似:
🤖 Sonnet 💰 $0.0234 ✎ +87/-12 📂 ~/myapp
随着对话推进,金额与增删行数会实时跳动——这就是你最直观的"开销仪表盘"。
常见问题:
jq 没装。先在终端手测:echo '{"model":{"display_name":"X"},"cost":{"total_cost_usd":0}}' | bash ~/.claude/statusline.sh,能正常输出说明脚本本身没问题。transcript_path,进阶脚本可读取该文件估算上下文占比。入门阶段先用上面的"四件套",稳定后再扩展。printf 里用 ANSI 转义码即可,例如 \033[36m(青色)……\033[0m(复位)。/config 与 /model 在会话里微调不想每次改文件也可以:进入 claude 后输入 /config 打开交互式配置面板,能可视化切换主题、是否自动压缩、是否推送通知等,改动会写回 ~/.claude/settings.json;输入 /model 可临时切模型,输入 /output-style 可切换输出风格(如更简洁或更详尽)。
把前面学的串起来,用一个最小闭环验证:建项目 → 用配置好的环境 → 让 Claude 生成并测试代码 → 状态栏反映改动量。
# 1) 建项目目录与团队共享配置(第 4 层,可提交 Git)
mkdir -p hello-cc/.claude && cd hello-cc
cat > .claude/settings.json <<'EOF'
{
"model": "sonnet",
"language": "chinese"
}
EOF
# 2) 进入 Claude Code
claude
在交互界面输入一句需求(直接喂文件、给清楚验收标准是高效提问的要诀):
在当前目录用 Python 写一个
adder.py,提供add(a, b)函数,并用assert写 3 条测试。写完直接运行python3 -c "import adder; adder.add(1,2)"验证。
预期结果:
adder.py 并自动执行验证命令。Bash(python3 *) 加入项目 settings.json 的 permissions.allow(详见官方权限文档)。✎ +N/-M 随文件写入而增长,💰 金额同步上升。完成后,退出 claude,查看文件:
cat adder.py
至此,你的配置(中文、Sonnet、状态栏、自动压缩)在真实任务里全部跑通。
flowchart TD
A[启动 claude] --> B{读取五层配置}
B -->|优先级由高到低| C1[托管设置 Managed]
C1 --> C2[命令行参数]
C2 --> C3[.claude/settings.local.json]
C3 --> C4[.claude/settings.json 团队共享]
C4 --> C5[~/.claude/settings.json 个人]
C5 --> D[合并: 标量覆盖 数组拼接去重 deny最高]
D --> E[会话按配置运行]
E --> F[每轮更新会话JSON]
F --> G[statusLine脚本接收JSON]
G --> H[终端底部渲染: 模型/花费/改动量]
H --> E
allow/ask/deny 三态与 Bash() 通配规则——告别逐条放行。~/.claude/output-styles/ 放 Markdown,定义专属回答范式。thinkingBudgetTokens 精确控制每次回复的思考开销。policyHelper、requiredMinimumVersion 做版本与策略下发。~/.claude/settings.json 与 statusline.sh。statusLine 字段、传入 JSON 数据结构的官方说明。[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
