用选区和 Diff 约束 Claude Code 的修改范围

“优化这个项目”之类的宽泛请求,会把目标选择、修改范围和验收标准都交给编码代理。结果即使能运行,也可能包含无关重构、公共接口变化或没有覆盖的行为回归。本文假设 Claude Code 已经连接 JetBrains IDE,只解决修改边界问题:怎样用当前选区、精确文件、禁止事项和 Diff 审查,把一个任务收敛成可解释、可验证、可拒绝的小改动。

把任务写成可检查的边界

一个适合交给编码代理的任务至少应回答四个问题:

例如,“修复空指针问题”仍然太宽,可以改成:

分析当前选区中的空值路径。只允许修改当前函数,不改变函数签名、调用方和异常类型。
先解释原因并列出最小修改计划,得到确认后再改。完成后展示 diff,并运行该模块已有测试。

约束不是提示词装饰,而是后续审查的检查表。

第一步:先解释选区,不修改

在 IDE 中选择目标函数或失败分支,先让 Claude Code复述代码行为:

只分析当前选区。说明输入、输出、外部依赖、异常分支和你认为的问题。
引用选区中的具体标识符作为依据。不要修改任何文件。

这一步同时验证上下文与理解。如果回答没有出现选区中的关键变量、条件或调用,就不要进入修改阶段。可以缩小选区、补充精确文件路径,或要求它重新基于代码说明判断依据。

“先解释”也能暴露需求歧义。例如,模型可能把 null 当作非法输入,而现有调用方其实用它表达“未配置”。这种分歧应在人类确认预期行为后解决,不能靠模型自行选择。

第二步:提供相邻证据,而不是整个仓库

修改通常需要少量上下文,例如调用方、现有测试和同类实现。只提供能影响决策的文件范围:

阅读目标函数、直接调用方和该模块现有测试。
说明当前行为由哪些测试覆盖,并列出准备修改的文件。
除非先解释必要性并获得确认,否则不得修改列出的范围之外的文件。

如果需要遵循项目风格,应指出具体样板文件,而不是只说“保持一致”。样板必须与目标处于相同框架和职责层次;控制器、领域逻辑和基础设施代码不能互相充当通用模板。

第三步:先审计划,再执行改动

计划不需要很长,但应说明:

  1. 根因是什么,证据位于哪里。
  2. 哪些文件会被修改。
  3. 为什么这些修改足以达到目标。
  4. 会运行哪些已有验证。
  5. 哪些风险仍需人工判断。

如果计划包含无关清理、依赖升级、接口重命名或大范围格式化,应在执行前移除。认证、支付、数据库迁移、部署权限和密钥处理等高风险路径,还需要更严格的人工审批和环境验证。

执行提示可以继续限定边界:

按已确认计划执行。不要进行顺手重构,不要新增依赖,不要改变公共接口。
遇到计划外问题时停止并报告,不要自行扩大范围。

第四步:按层审查 Diff

JetBrains 集成的安装与当前能力应以 Claude Code JetBrains 官方文档 为准。无论 Diff 在 IDE 还是终端中展示,都按相同顺序审查:

先看文件集合

修改文件是否与计划一致?出现配置、锁文件、生成文件或相邻模块时,必须说明为什么是完成任务所必需。

再看行为变化

逐块检查条件分支、返回值、异常、状态更新和外部调用。不要被变量重命名或格式变化掩盖真正的行为差异。

最后看边界之外

确认公共接口、依赖版本、权限范围、日志内容和敏感数据处理没有发生未计划变化。任何不必要的改动都应撤回,而不是留到后续 PR 再解释。

可以让 Claude Code 辅助自审:

审查当前 diff,只报告可能的 bug、行为回归、缺少测试和越过任务边界的修改。
每条结论引用具体文件和代码位置。不要提出纯风格建议,也不要声称未运行的验证已通过。

这份自审不能替代人的 Diff 阅读,但能帮助发现代理自己引入的不一致。

第五步:验证实际行为

Diff 合理只是静态判断,仍要执行仓库已有验证。优先顺序通常是:

  1. 与目标函数直接相关的测试。
  2. 所属模块的测试或静态检查。
  3. 受公共接口影响的更大范围验证。

不要在不知道项目工具链时让模型编造测试命令。应先从项目文档、构建配置和持续集成文件中找到已有命令,再由开发者确认运行环境。

交付说明要区分“已运行”和“未运行”:

目标:
修改文件:
行为变化:
已运行验证及结果:
未运行验证:
需要人工确认的风险:

测试失败时保留原始错误,判断它是本次回归、环境问题还是原有失败。不能把“命令执行过”写成“验证通过”。

发现越界时怎么处理

如果 Diff 已经超出范围,不要继续叠加修复提示。先拒绝或撤回未接受的改动,再把任务缩小到单个失败和单个验证目标。随后要求代理重新解释根因和最小文件集合。

常见越界信号包括:

结论与限制

约束 Claude Code 修改范围的核心流程是:用选区确认理解,用少量相邻证据建立上下文,先审计划,再按文件和行为审 Diff,最后运行仓库已有验证。这样可以把代理速度转化为可审查的工程变更,而不是不可解释的大型补丁。

选区和提示词只能降低越界概率,不能证明改动正确。最终接受仍取决于代码审查、测试结果以及对业务语义和高风险边界的人工判断。