Claude Code 两个你可能没用过的环境变量:EFFORT_LEVEL 和 ADDITIONAL_DIRECTORIES_CLAUDE_MD

用 Claude Code 一段时间后,你会发现它的行为有时"时好时坏":有时写出的代码令人惊叹,有时却犯一些低级错误。实际上这背后有一个很多人没注意到的控制机制------推理档位(effort level)

与此同时,如果你同时维护多个项目,可能也遇到过这个问题:每个项目都要写一份差不多的 CLAUDE.md,重复配置团队规范、编码风格......有没有办法共享这些规则?

这篇文章介绍两个被严重低估的 Claude Code 环境变量。

第一个:CLAUDE_CODE_EFFORT_LEVEL

推理档位是什么

Claude Code 在每次响应时,会分配一定的"推理预算"------思考多深、考虑多少方案、验证多少边界情况。这个预算就是 effort level。

支持的档位

档位 说明 适用场景
low 最小推理预算,响应最快 简单重命名、格式化、单行修改
medium 中等预算,均衡成本与质量 日常开发任务、写函数、改 bug
high 大预算,追踪复杂逻辑 复杂重构、多文件改动、难以定位的 bug
xhigh 超高预算(Opus 4.7 独有) 长时间 agent 任务、复杂架构设计
max 无上限,全力推理 最复杂的任务,慎用

注意:xhigh 是 2026 年随 Opus 4.7 引入的新档位。Opus 4.7 的默认 effort level 已经是 xhigh ,无需手动设置。如果你用的是 Opus 4.6 或 Sonnet 4.6,设置 xhigh 会自动降级到 high

为什么需要手动设置

2026 年 3 月,Anthropic 把 Pro/Max 订阅用户的默认档位从 high 降到了 medium(针对 Opus 4.6/Sonnet 4.6)。

如果你最近觉得 Claude Code 质量下滑,很可能不是模型变差了,而是推理预算被调低。这个变化没有明显的 changelog,很多用户完全不知道。

更复杂的是,在 medium 档位下,adaptive thinking 有时会在某些轮次分配零推理 token,导致模型开始"编造"------捏造不存在的 commit SHA、引用不存在的包。社区验证的临时修复方案:

bash 复制代码
export CLAUDE_CODE_EFFORT_LEVEL=high
# 如果问题严重,可以加上:
export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1

四种设置方式

方式一:环境变量(推荐,跨会话持久化)

bash 复制代码
# 加到 ~/.zshrc 或 ~/.bashrc
export CLAUDE_CODE_EFFORT_LEVEL=high

# 单次覆盖
CLAUDE_CODE_EFFORT_LEVEL=low claude --model sonnet

方式二:settings.json(项目级配置)

json 复制代码
{
  "effortLevel": "high"
}

方式三:启动参数(单次会话)

bash 复制代码
claude --effort high

方式四:会话内动态切换

bash 复制代码
/effort high
/effort low
/effort auto   # 重置为默认值

优先级:环境变量 > 会话配置(/effort)> 模型默认值

一个重要细节:max 档位的特殊性

max 档位(全力推理,无 token 上限)只有通过环境变量 设置才能跨会话持久化。用 /effort max--effort max 只对当前会话有效,下次启动就恢复了。

但 Anthropic 官方建议:先用 eval 验证 max 是否比 xhigh 有明显效果提升,再决定是否采用。max 存在"过度思考"的风险------推理预算越大,模型越可能钻牛角尖,反而输出更差的结果。

与 think 触发词的区别

很多人以为在 prompt 里写关键词和设置 effort level 是一回事,其实完全不同:

  • /effort / CLAUDE_CODE_EFFORT_LEVEL :通过 API 参数控制推理档位,是系统级的持久设置
  • think / think hard / think harder :在 prompt 中插入的文字触发词,是上下文内的一次性指令,不改变发送给 API 的 effort level

触发词对应的大概 token 预算(供参考,以官方最新文档为准):

  • think:~4,000 tokens
  • think hard:~10,000 tokens
  • think harder:~31,999 tokens(从 Claude 4 起,思考模式已默认启用,触发词主要起调节预算的作用)

两者可以叠加使用,但不能互相替代。

实际推荐配置

bash 复制代码
# ~/.zshrc
# 日常编码任务,均衡成本和质量
export CLAUDE_CODE_EFFORT_LEVEL=high

# 如果用 Opus 4.7 做重型 agent 任务,改为:
# export CLAUDE_CODE_EFFORT_LEVEL=xhigh

# 子 agent 用更便宜的模型(节省成本)
export CLAUDE_CODE_SUBAGENT_MODEL=claude-sonnet-4-6

第二个:CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD

问题场景

假设你在维护一个 monorepo,结构如下:

objectivec 复制代码
my-company/
├── CLAUDE.md          ← 团队规范(编码风格、安全要求、API 接口约定)
├── packages/
│   ├── frontend/
│   │   └── CLAUDE.md  ← 前端特定规则(React 组件规范、CSS 约定)
│   └── backend/
│       └── CLAUDE.md  ← 后端特定规则(数据库约定、接口设计)

当你在 packages/frontend 目录启动 Claude Code 时,它只会读取 packages/frontend/CLAUDE.md不会自动读取根目录的团队规范。

要让 Claude 同时了解根目录规范,需要用 --add-dir ../..

bash 复制代码
cd packages/frontend
claude --add-dir ../..

但这里有个问题:--add-dir 默认只给 Claude 访问目录的权限,不会加载目标目录的 CLAUDE.md。这是出于向后兼容的考虑,避免意外加载不相关的规则文件。

解决方案:CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD

设置这个环境变量后,--add-dir 指向的目录也会加载其中的 CLAUDE.md 系列文件:

bash 复制代码
export CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1

# 现在启动时,根目录的 CLAUDE.md 也会被加载
cd packages/frontend
claude --add-dir ../..

加载范围包括目标目录中的:

  • CLAUDE.md
  • .claude/CLAUDE.md
  • .claude/rules/*.md
  • CLAUDE.local.md

实际使用场景

场景一:Monorepo 多包开发

在子包目录启动 Claude,同时加载根目录团队规范:

json 复制代码
{
  "env": {
    "CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD": "1"
  },
  "additionalDirectories": ["../.."]
}

根目录 CLAUDE.md(团队规范)和子目录 CLAUDE.md(模块规则)会叠加生效,Claude 同时了解两套规则。

场景二:微服务跨仓库开发

前端需要了解后端 API 规范,后端 CLAUDE.md 里写了接口格式、错误码约定:

bash 复制代码
alias claude-fs="CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../backend"

场景三:公司级共享规范

维护一个独立的规范目录,所有项目都引用:

javascript 复制代码
~/company-rules/
└── CLAUDE.md   ← 安全规范、合规要求、技术栈约定
bash 复制代码
# ~/.zshrc
export CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1
# 在每个项目的 settings.json 中添加
# "additionalDirectories": ["~/company-rules"]

搭配 claudeMdExcludes 精细控制

有时 --add-dir 会引入你不想要的规则(比如某个团队的特定约定和你的项目冲突),可以用 claudeMdExcludes 过滤:

json 复制代码
{
  "claudeMdExcludes": [
    "**/other-team/.claude/rules/**",
    "**/irrelevant-package/CLAUDE.md"
  ]
}

附:其他值得了解的环境变量

研究这两个变量的过程中,发现了几个同样有用的配置:

bash 复制代码
# 关闭 adaptive thinking(中等档位下出现幻觉时的临时修复)
export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1

# 触发自动压缩的上下文阈值(默认约 83%,只能降低不能升高)
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70

# 子 agent 使用更便宜的模型
export CLAUDE_CODE_SUBAGENT_MODEL=claude-sonnet-4-6

# 日志审计:所有 bash 命令都通过包装脚本执行
export CLAUDE_CODE_SHELL_PREFIX=/path/to/audit.sh

# 多账户场景:指定不同的配置目录
export CLAUDE_CONFIG_DIR=~/.claude-work

小结

这两个变量解决的问题不同,但都值得根据实际情况配置:

  • CLAUDE_CODE_EFFORT_LEVEL :如果你发现 Claude Code 质量不稳定,先检查这个。默认 medium 档位在某些情况下会导致幻觉,设置为 high 是大多数开发者的合理选择。
  • CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD:如果你在做 monorepo 开发或需要跨项目共享规范,这个变量可以避免大量重复配置。

两个变量都写入 ~/.zshrc 就能永久生效,成本几乎为零。


相关阅读


原文发布于 陈广亮的技术博客,欢迎关注获取更多前端与 AI 开发内容。

相关推荐
前沿科技说i6 小时前
2026年AI大模型API中转站:主流服务商性能与成本
人工智能
黄啊码8 小时前
【黄啊码】程序员真正该担心的,不是 AI 会写代码
人工智能
weixin_468466859 小时前
Ava 2.0 智能应用场景落地指南
人工智能·自然语言处理·大模型·智能交互·ava
John_ToDebug9 小时前
MCP 深度解析:大模型的“万能插头”
人工智能·经验分享·ai
浦信仿真大讲堂9 小时前
CST 仿真软件与 AI 融合的工程应用实战
人工智能·仿真软件·达索仿真·达索软件
mit6.8249 小时前
A Software Engineer‘s Apology | CODA
人工智能
段一凡-华北理工大学9 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章11:演进路径与行业未来
大数据·网络·人工智能·算法·工业智能体·高炉炼铁智能化
小脑斧12310 小时前
AI技能化落地:从对话式大模型到可生产、可复用的AI工程体系
人工智能·skills·openclaw·hermes·marvis
西陵10 小时前
Agent 为什么会陷入 Doom Loop?OpenClaw 的破解之道
前端·人工智能·ai编程
飞哥数智坊10 小时前
动动嘴皮子就把事干了,Mic Air + TRAE SOLO 让我越来越懒
人工智能