Code Improver
通过运行 /code-improver:improve 改进任意代码目标 —— 这是一个动态工作流,会循环调用指定的审查者和修复子代理,直到审查报告零严重/重大问题,然后剥离自身残留。循环、记录和守护机制都运行在工作流中;本技能收集通用入口所需的三个输入,并传递结果。
启动循环
用户提供了:$ARGUMENTS(如果为空,则从对话中获取细节)。
1. 收集三个必需的输入 -- 不要猜测
- 目标:要改进的目录的绝对路径。根据工作目录解析相对路径;验证目录存在。
- 审查者:执行每次审查的已安装技能或代理。用户必须命名它 —— 没有默认值,也没有捆绑的审查者。确定其类型:
- 带命名空间的代理(例如
plugin-dev:skill-reviewer)→"kind": "agent" - 已安装的技能(例如
pr-review-toolkit:review-pr)→"kind": "skill"如果名称可能属于两者,请检查会话的技能列表;如果仍然有歧义,询问用户。如果没有命名审查者,请询问 —— 不要自行选择。
- 带命名空间的代理(例如
- 作用域:循环可能触碰的仓库相对通配符。通用入口明确要求它;如果用户没有提供,建议目标目录(
<仓库相对目标>/**)并在启动前确认。
2. 解析循环脚本
循环是本插件中的动态工作流 workflows/improve.js。通过路径启动它:scriptPath 接受解析后的绝对路径,而 Workflow 工具的 name 解析内置和项目工作流,因此从市场安装的副本可能不响应 code-improver:improve。按顺序尝试,先找到的胜出 —— 主目录排在 . 之前,因此已安装的副本优先于本市场的签出版本:
Bash: ls -d -- "${CLAUDE_PLUGIN_ROOT}/workflows/improve.js"Bash: ls -d -- "${CODEX_PLUGIN_ROOT}/workflows/improve.js"(如果设置了该变量)Bash: find ~/.claude ~/.codex . -maxdepth 7 -path '*/code-improver/workflows/improve.js' -print -quit 2>/dev/null
使用精确打印的路径。其插件目录 —— 去掉 /workflows/improve.js 后的路径 —— 是 pluginRoot。如果三个都返回空,尝试一次 {name: "code-improver:improve"};如果也不可用,停止并说明无法定位循环。不要手动组装路径,也不要即兴实现循环。
3. 调用工作流
使用 Workflow 工具运行它,{scriptPath: "<步骤 2 中的路径>", args: {...}}:
{
"target": "<绝对目标路径>",
"reviewer": { "kind": "agent|skill", "name": "<命名空间名称>", "notes": "<审查者需要了解的目标信息>" },
"scope": ["<仓库相对通配符>/**"],
"pluginRoot": "<步骤 2 中的插件目录>",
"maxRounds": 5
}
- 仅当用户要求不同的上限时才设置
maxRounds。 pluginRoot允许运行找到其度量收集器;仅当步骤 2 回退到工作流名称时才省略该键 —— 工作流随后会自行搜索。finalize({"version_bump": bool, "narration_strip": bool, "docs_pass": bool})仅用于覆盖默认值:当目标位于插件内部时进行版本升级,始终进行叙述剥离和文档检查。decision仅在继续时使用(见下文)。
工作流在后台运行,无需监护:它会审查、修复、重新审查,每次修复轮次后检查作用域,并且只能在审查干净时完成。它从不提交;所有更改保留在工作树中。
如果 Workflow 工具不可用或被拒绝,请停止并说明。 不要通过直接编辑来内联模仿循环 —— 记录、作用域守护和升级保证都存在于工作流中,内联模仿不具备任何这些特性。
如果结果是 halted: "reviewer-unavailable",请传递该结果并停止。 指定的审查者未在此会话中安装;告知用户哪个插件提供了它,安装后重新运行。不要自行审查目标。
循环运行时不要结束您的回合。 Workflow 工具立即返回任务 ID;结果稍后到来。在交互式会话中,完成通知会重新调用您 —— 请等待它。在非交互式运行(脚本化、CI、评估)中,没有后续回合:停止会在中途放弃循环,因此启动后,轮询任务(使用返回的任务 ID 调用 TaskOutput,或休眠并重新检查)直到完成,然后传递结果。回答“循环正在运行,稍后报告”的会话会丢失该运行。
传递结果
工作流返回结构化结果。如实报告 —— 区别很重要:
converged: true—— 最后操作是审查,没有严重/重大问题。报告使用的轮次、剩余次要问题(open_minor_count)和产物路径(ledger_path、metrics)。capped: true—— 修复预算耗尽,最终审查仍然发现阻塞性问题。明确说明:已封顶,未收敛,并列出open_blocking。不要将其呈现为成功。escalation—— 循环检测到没有收敛(重复发现、计数不减少、或修复转移了问题)。向用户传递升级消息和发现 ID:这需要设计决策,而非更多轮次。halted—— 守护机制触发(作用域违规、未注册的新文件、审查者死亡或不可用、或最终检查失败)。传递violations/new_untracked_files中的路径、finalize_regressions中的站点以及说明。notes始终与结果一起传递 —— 显示它们;它们包含重大警告,例如“已初始化 git 仓库”。
升级后继续
循环在升级时按设计停止。当用户做出决定后,使用相同的 target 和 reviewer 启动新的运行,并加上:
{ "decision": "<用户的裁决,原样>" }
新运行重新加载磁盘上的记录,因此每个发现、拒绝和裁决都会延续 —— 轮次重新开始,但不会重复推导。
要停止正在运行的循环,请停止工作流任务(TaskStop);磁盘上的记录更新至最后一轮,重新运行会从中恢复。
何时不使用
- Claude Code 技能:使用
skill-improver入口 —— 它会连接正确的审查者 - 分支/拉取请求:使用
pr-improver入口 —— 它会从 diff 推导作用域 - 一次性审查:直接调用审查者;循环的价值在于迭代
- 快速单次修复:直接编辑文件