SuperAPI AI 工具集

simplify-and-harden

编程与开发

查看项目

更新于 10-15 18:10

技能介绍

用途

Simplify & Harden 是一个面向编码智能体的完成后自审技能。其核心理念是:当编码智能体完成一项任务时,它对问题、解决方案以及过程中所做权衡仍保有最完整的上下文理解,而这种理解会随下一个任务立即消失。该技能利用这一「上下文峰值窗口」,在智能体继续下一步之前执行两轮聚焦的审查。

大多数智能体解决工单后就停止,该技能把「做完」变成「做好」。其运行哲学是在继续之前进行刻意的「全新视角」自审:仔细重读本次任务中所有新写的代码和修改过的既有代码,主动寻找明显缺陷、错误、令人困惑的逻辑、脆弱假设、命名问题以及遗漏的加固机会。目标不是扩大范围或重写方案,而是在智能体仍记得每处改动意图时,完成一次有纪律的首次审查。

与独立审查的关系

该技能是完成后自审,不能替代独立审查。推荐流程为:实现任务 → 运行 Simplify & Harden 进行清理、加固并记录非显而易见的决策 → 运行独立审查以获得按严重程度排序的发现 → 两轮都处理完毕后再合并。若两者结论冲突,以独立审查的发现作为外部关卡,修复或明确豁免。

触发条件

当以下条件全部满足时自动激活:智能体已完成主要编码任务;智能体发出任务完成信号(退出码 0、PR 就绪或等价信号);diff 包含非平凡代码改动;该技能尚未在此任务上运行过(避免重入循环)。

非平凡代码改动的定义:满足任一条件即视为非平凡——触及至少一个可执行源文件(如 .ts、.tsx、.js、.jsx、.py、.go、.rs、.java、.cs、.rb、.php、.swift、.kt、.scala、*.sh),且包含至少 10 行非注释、非空白的可执行源码改动,或至少一处高影响逻辑改动(认证/授权检查、输入校验、数据访问/查询逻辑、外部命令执行、文件路径处理、网络请求处理或并发控制);或者以可能改变谁可操作、执行什么、部署什么或适用哪些保护的方式修改配置、工作流、权限、部署或安全策略。

以下情况视为非平凡 = false:仅文档、低影响仅配置、仅注释、仅格式化、仅生成产物或仅测试。

技能不激活的情况:智能体失败或被中断;仅文档改动;仅测试改动;生成文件(锁文件、构建产物);用户通过 --no-review 或等价标志显式跳过。

范围约束

硬性规则:只触碰本次任务修改过的文件。智能体不得重构未修改的相邻代码、不得追求 diff 之外的「顺便改进」、不得引入新依赖或架构变更、不得基于别处注意到的模式做推测性修复。超出范围的关切应在摘要输出中标记,而非直接处理。

预算限制:最大额外改动为原始 diff 规模的 20%(按改动行数计);最大执行时间 60 秒(可配置)。任一限制触及时,智能体停止并输出已有结果,附带 budget_exceeded 标志。

第 1 轮:简化

目标:减少实现过程中引入的不必要复杂度。默认姿态是简化而非重构,主要目标是可证明保持行为的轻量清理,重构是例外而非常规。

强制要求「全新视角」起步:本轮任何编辑之前,先以全新视角重读本次任务新增或修改的全部代码,主动寻找明显缺陷、错误、困惑逻辑、脆弱假设、命名问题和遗漏的加固机会。

审查清单包括:死代码与脚手架(调试日志、注释掉的尝试、未使用导入、临时变量);命名清晰度;控制流(嵌套条件扁平化、提前返回、布尔表达式简化);API 表面(是否暴露过多、能否降低可见性);过度抽象(当前范围不合理的类、接口、包装函数);合并机会(逻辑是否分散在多个函数或文件中)。

简化动作分类:保持行为的修复(如移除可证明未使用的导入或任务产生的死代码)在预算内自动应用;可观察或不确定的改动(命名、控制流、可见性、API、策略、权限、部署或安全行为)即使 diff 很小也需人工批准;重构(合并、结构调整、抽象变更)仅在智能体判断确有必要或收益显著时提出,标准是「资深工程师是否会认为当前状态明显错误,而不只是不完美」。

重构停止钩子(强制):任何被归类为重构的改动都会触发交互式提示,智能体必须描述想改什么及原因、展示前后对比或结构变更的清晰描述、等待明确人工批准后再应用。重构提案不批量处理,每个单独呈现,供人工逐案批准、拒绝或修改。若人工选择跳过所有重构,智能体跳过剩余重构提案并进入加固轮,被跳过的重构仍以 skipped_by_user 状态出现在输出摘要中。只有被证明保持行为的改动不触发停止钩子;类别标签绝不覆盖可观察行为——重命名、分支重写或可见性降低可能具有外部意义,效果不确定时必须批准。

第 2 轮:加固

目标:在智能体仍理解代码意图时关闭安全与韧性缺口。智能体自问:「如果有人恶意看待这段代码,会尝试什么?」

审查清单包括:输入校验(用户输入、API 参数、文件路径、环境变量在使用前是否校验,类型强制转换问题、缺失边界检查、未约束字符串长度);错误处理(catch 块是否具体、日志是否带上下文但不泄露敏感数据、是否有被吞掉的异常);注入向量(SQL 注入、XSS、命令注入、路径遍历、模板注入);认证与授权(新端点或函数是否强制认证、权限检查是否存在且正确、是否有权限提升风险);密钥与凭据(硬编码密钥、API key、token、密码,连接字符串是否参数化,日志输出中是否有凭据);数据暴露(错误输出、日志或 API 响应是否泄露内部状态、堆栈跟踪、数据库 schema 或 PII);依赖风险(是否引入新依赖,是否维护良好、版本正确、无已知漏洞);竞态条件与状态(并发代码共享资源是否正确同步、是否有 TOCTOU 漏洞)。

加固动作分类:补丁(添加校验检查、转义输出、移除硬编码密钥)仅在已批准的验收契约已要求且定向验证能证明结果时自动应用,否则请求人工批准;安全重构(重构认证流程、用新方法替换脆弱模式、改变数据处理架构)始终需要人工批准。简化轮的重构停止钩子同样适用,安全重构会附带严重程度与攻击向量上下文单独呈现。无法在无人工输入下安全修补的发现标记为 critical,非活跃漏洞的加固机会标记为 advisory。预算受限时,安全补丁优先于简化改动。

第 3 轮:文档(微环节)

目标:在智能体仍记得原因时捕获非显而易见的决策。这是刻意轻量的环节,不是文档冲刺,只是决策捕获。规则:任何需要超过 5 秒思考「为什么存在」的逻辑,添加单行注释解释决策;任何变通或 hack,添加带上下文的注释,最好附上移除条件的 TODO;任何性能敏感选择,注明为何选当前方案而非显而易见的替代方案。每任务最多添加 5 条注释。

第 4 轮:再验证

发出完成信号前必须再验证。若 Simplify & Harden 改动了任何文件,重新运行覆盖这些编辑的最小既有测试、检查、linter 或行为验收;若未做编辑,当紧邻的验证关卡证据仍覆盖所审查的 diff 时可复用;若验证失败,带诊断返回实现,不得发出成功完成;若不存在适用的验证,记录 not-run,设置 review_followup_required: true,且不得声称任务已完全验证。

输出结构

技能在任务输出后附加结构化摘要,包含:版本、任务 ID、执行信息(模式、模式来源、是否有人在场);范围(审查文件、原始 diff 行数、额外改动行数、是否超预算);简化结果(已应用、已标记、外观性应用,含文件、行号、类型、类别、批准状态、描述、置信度);加固结果(已应用、critical 标记、advisory 标记,含文件、类型、严重程度、描述);文档结果(添加注释数及位置);验证(命令、结果 pass/fail/not-run、证据);学习循环(目标技能、日志文件、候选模式、复发窗口天数、提升阈值);汇总统计(各计数、总额外行数、预算利用率)。

安装

gh skill install pskoett/pskoett-skills simplify-and-harden

仅 CI 执行时使用:

gh skill install pskoett/pskoett-skills simplify-and-harden-ci

使用 Agent Skills CLI 的备选方式:

npx skills add pskoett/pskoett-skills/skills/simplify-and-harden npx skills add pskoett/pskoett-skills/skills/simplify-and-harden-ci

元数据

技能 ID:simplify-and-harden;版本:0.1.0;触发方式:完成后钩子;作者:Peter Skøtt Pedersen;类别:代码质量 / 安全;优先级:推荐。

适用场景与限制

适用于编码智能体完成非平凡代码改动后的自审环节,尤其适合涉及认证授权、输入校验、数据访问、命令执行、路径处理、网络请求或并发控制等高影响逻辑的改动。限制包括:只处理本次任务修改的文件;额外改动不超过原始 diff 的 20%;执行时间默认上限 60 秒;重构与安全重构必须人工批准;不能替代独立审查;仅文档、仅测试、仅格式化或生成文件改动不触发。