Appearance
Claude Code系列第三篇。搭好了.claude目录后,你会碰到两个新问题:有些行为想改但不知道改哪个变量;每次操作都要点确认很烦,但又不敢全开YOLO。
环境变量:按场景找到你要的那个
三种设置方式(优先级从高到低)
bash
# 方式1:启动参数(最高优先级,当次有效)
claude --model opus --effort high
# 方式2:终端export(当次会话有效)
export CLAUDE_CODE_EFFORT_LEVEL=max
claude
# 方式3:settings.json的env字段(持久化,推荐)
{
"env": {
"CLAUDE_CODE_EFFORT_LEVEL": "max"
}
}环境变量场景速查
场景一:API中转用户
| 变量 | 用途 |
|---|---|
| ANTHROPIC_BASE_URL | 中转服务商的API地址 |
| ANTHROPIC_AUTH_TOKEN | API密钥(自动加Bearer前缀) |
| CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC | 关掉遥测、自动更新、错误上报 |
注意:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC是组合开关,等于同时设了DISABLE_AUTOUPDATER + DISABLE_TELEMETRY + DISABLE_ERROR_REPORTING + DISABLE_FEEDBACK_COMMAND。
场景二:默认Opus + max effort
| 变量 | 用途 |
|---|---|
| ANTHROPIC_MODEL | 默认模型,支持别名(opus、sonnet、haiku、opusplan) |
| CLAUDE_CODE_EFFORT_LEVEL | 思考深度:low / medium / high / max(仅Opus) |
场景三:控制上下文和Token
| 变量 | 用途 | 默认值 |
|---|---|---|
| CLAUDE_CODE_MAX_OUTPUT_TOKENS | 最大输出token数 | 因模型而异 |
| API_TIMEOUT_MS | API请求超时(毫秒) | 600000(10分钟) |
| DISABLE_AUTO_COMPACT | 禁用自动压缩 | - |
| CLAUDE_AUTOCOMPACT_PCT_OVERRIDE | 自动压缩触发阈值(1-100) | ~95% |
场景四:调试问题
bash
# 加--debug启动,日志写到指定路径
claude --debugCLAUDE_CODE_DEBUG_LOGS_DIR- 日志路径CLAUDE_CODE_DEBUG_LOG_LEVEL- 日志详细程度(verbose到error)
小技巧:Claude Code启动时会自动设CLAUDECODE=1,你的脚本可以用它检测当前是否在CC里运行。
场景五:关闭功能
bash
DISABLE_AUTOUPDATER=1 # 关掉自动更新
DISABLE_TELEMETRY=1 # 关掉遥测数据
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 # 关掉自动记忆
CLAUDE_CODE_DISABLE_CLAUDE_MDS=1 # 不加载任何CLAUDE.md
CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS=1 # 去掉内置commit/PR工作流指令
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 # 关掉后台任务场景六:Bash行为微调
| 变量 | 用途 |
|---|---|
| BASH_DEFAULT_TIMEOUT_MS | 命令默认超时时间 |
| BASH_MAX_TIMEOUT_MS | 模型能设置的最大超时 |
| BASH_MAX_OUTPUT_LENGTH | 输出最大字符数(超了中间截断) |
| CLAUDE_CODE_SHELL | 覆盖自动检测的shell |
场景七:安全与UI
| 变量 | 用途 |
|---|---|
| CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 | 剥离子进程环境里的API凭证,防prompt injection |
| CLAUDE_CODE_NO_FLASH=1 | 全屏渲染模式,防画面闪烁 |
| CLAUDE_CODE_SCROLL_SPEED | 鼠标滚轮速度(1-20倍) |
实用技巧:多账户切换
bash
alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'
alias claude-personal='CLAUDE_CONFIG_DIR=~/.claude-personal claude'权限规则语法速查
从「大开关」到「精细旋钮」
第一篇讲过四个权限模式——Default、Auto-Accept、Auto、YOLO。这些是「大开关」,但实际需要更细的控制。
规则语法
json
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git status)",
"Read"
],
"deny": [
"Bash(rm -rf *)",
"Bash(curl *)",
"Read(./.env)"
]
}
}评估顺序:deny → ask → allow。deny优先级最高。
Bash命令匹配
| 规则 | 匹配 | 不匹配 |
|---|---|---|
Bash(npm run *) | npm run dev、npm run test | npm install |
Bash(git * main) | git push main、git merge main | git push origin dev |
Bash(* --version) | node --version、python --version | node index.js |
注意:空格很重要!Bash(ls *)匹配ls -la但不匹配lsof;Bash(ls*)两个都匹配。
文件路径匹配
| 写法 | 含义 | 示例 |
|---|---|---|
Read(./.env) | 当前目录下的.env | 精确匹配 |
Read(./secrets/**) | secrets目录下所有文件 | 目录保护 |
Edit(/src/**/*.ts) | 项目根目录下src内所有.ts | 限定编辑范围 |
Read(//Users/alice/file) | 文件系统绝对路径 | 注意双斜杠 |
重要:/Users/alice/file不是绝对路径,它是相对于项目根的路径。绝对路径要用//Users/alice/file(双斜杠)。
四大实战配置方案
案例1:个人日常开发
json
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Read",
"Edit"
],
"ask": [
"Bash(git push *)",
"Bash(git reset *)",
"Bash(npm publish *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)"
]
}
}案例2:全自动模式(并行会话用户)
json
{
"permissions": {
"allow": [
"WebSearch", "WebFetch", "Bash", "Read", "Write",
"Edit", "Glob", "Grep", "Task", "TodoWrite"
],
"deny": [],
"defaultMode": "bypassPermissions"
},
"skipDangerousModePermissionPrompt": true,
"hooks": {
"stop": [{
"hooks": [{
"type": "command",
"command": "afplay /System/Library/Sounds/Blow.aiff"
}]
}]
}
}前提:有Git兜底,环境不是生产服务器。
案例3:多人团队
项目级.claude/settings.json(提交Git,全员统一):
json
{
"permissions": {
"allow": [
"Bash(pnpm run *)",
"Bash(git status)",
"Bash(git diff *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force *)",
"Read(./.env)",
"Read(./.env.*)"
]
}
}**
