VS Code 中的 Claude Code 一发起请求就返回 400,不一定是扩展安装故障。错误若明确包含 Unexpected value(s) for the anthropic-beta headerExtra inputs are not permitted,更可能是请求经过的代理不接受 Anthropic 特定 beta 头或 beta 工具字段。本文只处理这组已由官方文档列出的兼容问题:先确认原始错误,再设置对应环境变量,启动新会话复测,并记录被禁用的实验能力和回滚方式。

先确认是不是同一类错误

保存完整错误、Claude Code 版本、VS Code 扩展版本和请求所经过的接入路径。与本文匹配的信号是错误直接指向:

anthropic-beta 请求头的值不被接受
beta 工具 schema 出现额外字段
代理返回 400 invalid_request_error

Claude Code 环境变量官方文档给出的示例错误包括:

Unexpected value(s) for the anthropic-beta header
Extra inputs are not permitted

如果错误是认证失败、模型不存在、网络连接失败、扩展未加载或 claude 命令找不到,应按对应层排查,不要使用本文变量掩盖其他问题。

先比较 CLI 与 VS Code

在 VS Code 集成终端和独立终端分别记录:

claude --version

用不含敏感内容的最小请求复现。比较:

CLI 和扩展都失败时,优先检查共享 Claude Code 配置与接入链路;只有扩展失败时,再检查 VS Code 扩展设置、进程环境和会话是否读取了新配置。

选择正确的 settings 范围

Claude Code settings 官方文档列出三类位置:

范围 位置 适用情况
用户 ~/.claude/settings.json 当前用户的所有项目
项目 .claude/settings.json 仓库共享设置,可进入版本控制
本地项目 .claude/settings.local.json 当前用户在当前仓库的本地设置

Windows 中 ~ 对应当前用户目录,用户级文件可表示为:

%USERPROFILE%\.claude\settings.json

兼容问题只发生在个人接入路径时,优先使用用户或本地项目范围,并避免把个人代理地址、密钥或内部配置提交到项目文件。

修改前保存原文件内容并确认其中是否已经存在 env。不能用最小示例覆盖包含其他设置的真实文件。

合并官方兼容变量

若文件只有相关配置,可以使用:

{
  "env": {
    "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
  }
}

已有 env 时,只增加这个键,保留其他值。例如:

{
  "env": {
    "EXISTING_VARIABLE": "existing-value",
    "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
  }
}

不要把真实密钥放进教程示例。保存后先验证 JSON 能被解析。PowerShell 可以使用结构化解析器:

Get-Content -Raw -Encoding UTF8 "$env:USERPROFILE\.claude\settings.json" |
  ConvertFrom-Json | Out-Null

命令无输出且退出成功,只能证明 JSON 语法可解析,不证明 Claude Code 已读取该文件。

启动新会话并复测

settings 中的 env 会应用到 Claude Code 会话及其子进程。关闭当前 Claude Code 会话,确保相关扩展进程重新启动,再用与之前相同的最小请求复测。完整重启 VS Code 可以排除旧扩展进程仍持有原环境,但不是诊断根因的替代品。

记录复测结果:

原错误是否消失
请求是否到达预期上游
工具是否仍能按任务需要加载
CLI 与扩展结果是否一致
是否出现新的 schema 或工具错误

不要因为聊天请求成功就宣布所有 Claude Code 功能兼容。该变量会改变实验字段,必须验证当前工作流真正使用的工具。

这个变量改变了什么

官方环境变量文档说明,设置 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 会从 API 请求中移除:

标准工具字段仍会保留。文档还说明,启用该变量时,MCP 工具搜索相关设置会被忽略,工具会改为预先加载。

因此它是面向不兼容代理的降级开关,不是通用性能优化。若工作流依赖被移除的实验字段或大工具集的按需发现,需要评估功能和上下文影响。

仍然失败时怎么定位

错误文本没有变化

检查实际会话读取的 settings 范围、JSON 键名和扩展进程是否重新启动。不要重复添加多个 env 对象。

CLI 成功但扩展失败

对照 VS Code 集成官方文档检查扩展状态、当前工作区和进程环境。保留扩展日志中的原始响应。

beta 错误消失但工具调用异常

这可能是降级变量移除了工作流依赖的实验字段。对照工具类型和官方环境变量说明,判断应继续使用兼容模式,还是修复代理对当前协议的支持。

代理仍返回其他 400

新的 400 可能属于认证、模型、请求 schema 或工具定义问题。以新错误为独立问题排查,不把所有 400 都归因于 beta header。

回滚方式

代理已经支持当前 beta 字段,或兼容开关影响必要功能时,从对应 settings 的 env 中删除:

"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"

同时修复相邻逗号,重新解析 JSON,并启动新会话复测。删除比长期保留一个含义不明确的替代值更清楚。

团队排错记录应包括启用原因、适用接入路径、验证过的功能和计划复核条件,避免变量成为无人理解的永久配置。

结论与限制

CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 是官方文档针对代理拒绝 Anthropic beta 请求头或额外 beta 工具字段提供的兼容选项。正确用法是先用原始错误确认症状,合并到合适的 settings 范围,启动新会话复测,并验证工具能力变化。

这个开关不能修复认证、模型、网络或扩展安装问题,也不保证所有代理实现兼容。协议和环境变量行为会更新,长期配置需要随 Claude Code 和代理版本复核。