Code Mode 是一项实验性功能,默认处于关闭状态。它可能会在任何版本中发生变化或被移除。如需分享反馈,请运行
/feedback。Code Mode 的工作原理
在 Code Mode 会话中,您仍然通过提示词描述任务,Claude 会编写 JavaScript 来执行该任务。一段代码可以并行运行命令、在下一次调用中使用上一次的结果,并返回 Claude 需要读取的那部分输出。 例如,如果您让 Claude 提高重试次数上限,Claude 可能会编写以下代码来查找文件、编辑文件并运行测试。最后一行将文件路径和测试输出返回给 Claude:Ctrl+O 打开会话记录查看器。每段代码在其中显示为一个折叠的 Code 行,并附有如何展开的提示。
何时使用 Code Mode
对于需要大量相关工具调用的任务,可以尝试使用 Code Mode,例如:- 需要在许多文件中重复进行的更改
- 需要在 Claude 读取之前先过滤结果的搜索
- 可以同时运行的多个独立命令
Code Mode 的限制
在启用 Code Mode 之前,请确认您可以接受以下限制:- 恢复会话:只能在终端中、并且在 Code Mode 开启的情况下恢复 Code Mode 会话
- 自动模式:自动模式的分类器审查的是代码,而不是每个工具调用
- 长时间运行的代码:除非代码可以在后台运行,否则您需要等待代码运行完成,并且代码会在十分钟后停止
- Hook:当
PreToolUsehook 无法运行或超时时,您可能会看到工具调用被拒绝;UserPromptSubmithook 可能会导致代码输出被阻止 - 不可用的功能:无法使用 Remote Control、Claude in Chrome 或计算机使用
- 移动会话:无法将会话移到 Desktop 应用,也无法将其转为后台会话,并且
/fork无法启动后台副本
要求
- 版本:Claude Code v2.1.323 或更高版本,任一发布频道均可。旧版本会在不启用 Code Mode 的情况下启动,可能附带也可能不附带原因
it isn't open to your account yet - 账户:Claude 订阅或 Console 账户。无法通过网关、Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 或 Microsoft Foundry 使用 Code Mode
- 组织:您的组织未使用 HIPAA 配置或零数据保留
- 模型:Claude Opus 5.5、Sonnet 5.5、Haiku 5.5 或 Fable 5.2
- 使用入口:终端中的交互式
claude会话。Code Mode 不适用于-p、Agent SDK、VS Code 面板、Desktop 应用或云端会话 - 安装:Claude Code 的原生构建版本
- Windows:已安装 Git for Windows
DISABLE_TELEMETRY。有关每种情况的解决方法,请参阅 Code Mode 无法启动。
试用 Code Mode
启用 Code Mode,给 Claude 一个任务,然后查看 Claude 编写的代码。1
检查您的版本
运行
claude --version。如果版本低于 v2.1.323,请运行 claude update。如果您使用的是 stable 频道,且更新后未达到 v2.1.323,请等待 stable 跟进,或切换到 latest。2
在开启 Code Mode 的情况下启动 Claude Code
将
CLAUDE_CODE_EXPERIMENTAL_CODE_MODE 环境变量设置为 1。如需试用 Code Mode,请在 shell 中设置它。如需为每个新会话启用 Code Mode,请在用户设置中设置它。- macOS, Linux, WSL
- Windows PowerShell
- settings.json
3
确认您要使用 Code Mode
在您的第一个 Code Mode 会话之前,Claude Code 会要求您确认。选择 Yes, turn on Code Mode。Claude Code 会重新启动,并在会话顶部附近显示以下这行内容:如果您看到的是其他内容或没有看到这行内容,请参阅 Code Mode 无法启动。
4
给 Claude 一个需要大量工具调用的任务
在您熟悉的项目中,发送如下提示词:
5
阅读 Claude 编写的代码
按
Ctrl+O 并展开一个 Code 行,查看工具调用背后的 JavaScript。再次按 Ctrl+O 返回对话。关闭 Code Mode
从 shell 和~/.claude/settings.json 中移除 CLAUDE_CODE_EXPERIMENTAL_CODE_MODE,然后启动新会话。您也可以保留该变量,并在任一位置将其值改为 0。只要其中一处为 0,即使另一处设置为 1,Code Mode 也会保持关闭。
为您的组织禁用 Code Mode
将值为0 的 CLAUDE_CODE_EXPERIMENTAL_CODE_MODE 添加到您的托管设置中,这样您组织中的任何人都无法使用 Code Mode:
0 生效期间无法恢复其 Code Mode 会话。您无法通过托管设置为用户启用 Code Mode。
权限与长时间运行的代码
您的权限模式决定了 Claude 的代码如何被检查,以及代码运行期间您能否与 Claude 交谈。权限检查
Claude 的代码进行的每个工具调用都会经过您的deny 和 ask 权限规则以及您的 PreToolUse hook。您无需为 Bash 等工具更改规则或匹配器。除了规则和 hook 之外,在自动模式下,分类器会审查代码;在会进行询问的模式下,您需要回复提示:
- 自动模式:分类器会在每段代码运行之前对其进行审查,而不是审查每个工具调用。它看不到运行时计算出的值,例如从搜索输出中获取的路径,因此对于必须加以控制的调用,请保留规则或 hook。当先前的代码仍在运行而新代码开始运行时,您仍可能收到提示
- 其他权限模式:代码在未经审查的情况下开始运行,对于在该模式下会提示您的每个工具调用,您都会收到提示
REPL(运行 Claude 代码的工具)的 PreToolUse hook,并从 tool_input.code 中读取 JavaScript。
长时间运行的代码
当代码运行耗时较长的构建或测试时,Claude 要么等待它完成,要么让它在后台继续运行:- 等待:Claude 在代码完成后才回复,代码会在十分钟后停止,这包括您在权限提示上花费的时间
- 后台:您可以继续与 Claude 交谈,代码最多可以运行两个小时
bypassPermissions 模式启动会话。如果 Claude 仍然在等待,请检查您当前的模式以及启动会话的方式:
- 您切换到了其他模式:按
Shift+Tab,直到回到您启动时所用的模式 - 您以其他模式启动,或从
claude --resume列表中选择了该会话:如果您可以使用自动模式,请退出,然后在 Code Mode 开启的情况下运行claude --continue --permission-mode auto - 您向
--tools传递了工具名称:以自动模式重新启动,不使用该标志
故障排除
Code Mode 无法启动
会话顶部附近出现Code Mode (experimental) isn't available 表示 Claude Code 在未启用 Code Mode 的情况下启动。原因显示在同一行中,/status 也会显示该原因。在下表中找到对应原因,进行相应更改,然后启动新会话。如果原因未在表中列出,请检查要求。
如果您没有看到任何关于 Code Mode 的行,请运行
claude --version。如果您的版本低于 v2.1.323,请进行更新。然后检查 shell 或用户设置中的 CLAUDE_CODE_EXPERIMENTAL_CODE_MODE 是否为 1,并从这些位置以及任何 --settings 文件中移除所有 0。
带倒计时的权限提示
在自动模式下,如果先前的代码仍在运行时 Claude 又启动了新代码,先前的代码将失去分类器审查。随后,Claude Code 会就先前代码中剩余的、需要审查的调用询问您。在未连接 IDE 的情况下,提示会显示倒计时:工具调用被 hook 拒绝
如果 Claude 报告工具调用被拒绝,请让它提供错误文本。以下错误表示PreToolUse hook 未给出决定,即使未设置 onFailure,这也会拒绝该调用:
the hook failed:对于来自 Claude 代码的调用,您的 hook 无法启动、被终止、以 126、127 或大于 128 的代码退出,或者返回了 HTTP 错误或无效输出。请修复该 hookthe hook did not finish:您的 hook 在处理来自 Claude 代码的调用时超时,或者在 Claude 已在会话中运行过代码后,在处理任何其他工具调用时超时。请增大该 hook 的timeout
command 或 http hook 失败或超时时允许调用继续进行,请在该 hook 上设置 "onFailure": "continue"。如果 command hook 以 1 等普通代码退出,调用会继续进行,除非您设置了 "onFailure": "block"。
代码输出被 hook 拦截
如果在您预期看到 Claude 代码输出的地方,Claude 报告了某个 hook 的阻止原因,请检查您的UserPromptSubmit hook。当代码可以在后台运行时,该事件上的 command、http 和 mcp_tool hook 也会在代码输出上运行。如需让输出通过,请修改该 hook,使其在输入中的 source 为 poll_event 时不进行阻止。