production-audit 是一个面向 Claude Code 等编程智能体的产品审计技能,目标是把“我们检查过了”变成“我们已经收敛了”。它不满足于单次扫描后写一份安抚性总结,而是反复以不同视角扫描,直到不再发现新的高信号问题为止。
用途:对产品代码库做深度、迭代式的缺陷审计,覆盖从安全、认证、数据完整性到内容声明一致性的多个维度。它既用于发现阶段,也可用于修复后的验证阶段。
主要能力:
- 盘点(inventory):先枚举产品的所有表面,包括页面、路由、公开声明、后台任务、提示词、图标、邮件、本地化内容等,再基于盘点结果审计,因此不对架构做任何假设。
- 24 个审计视角:每次扫描只使用一个视角并覆盖全部盘点对象,视角的多样性让“已发现全部问题”更可信。另有三个仅用于修复后验证的视角:regression(回归)、fix-completeness(修复完整性)、over-reach(越界修改)。
- 两轮收敛循环:发现阶段只有在连续两次不同视角的扫描都没有新增行时才停止;修复阶段则要连续两次扫描没有 CRITICAL/HIGH 才停止。技能维护一份扫描台账(扫描序号、使用视角、新增发现数)。
- 声明与代码一致性验证:会验证公开声明(如安全页面文案)是否有对应实现代码,这是其他审计工具默认不做的。
- 默认逐条验证:每个候选发现都会在报告前对照真实代码验证,例如上游是否有防护、检查是否在别处强制执行、死代码是否真的不可达、测试是否通过。无法定位到 file:line 或 URL + selector 的发现会被丢弃。验证是收集证据,不是为发现开脱——已定位且未澄清的安全风险仍会报告。
- 发现格式:每一行都独立、可执行,包含严重级别、位置、缺陷与修复建议,并强制自身规则:无位置则丢弃、禁止“consider/might/could”等模糊措辞、不填充内容;若上下文耗尽会诚实标注 TRUNCATED AT ...,而不是伪造总结。
使用方式:
- Claude Code(最简单):作为插件安装。
- Claude Code(手动):复制技能文件夹。技能包含 production-audit/SKILL.md 及其引用文件,审计视角目录与分类按需加载。
- 其他环境(Cursor、Windsurf、Copilot、aider、原始 API):粘贴 PROMPT.md,同一套方法,单文件、零安装。
- 可按范围运行,例如 /production-audit src/billing 或 /production-audit security。
- 默认仅发现,只读不改;fix 模式才会修改,但每一轮都要求构建、类型检查、lint、测试全绿,并通过越界审查回退超出发现范围的改动。
- 抑制已知误报:在仓库根目录放置 .audit-ignore 文件,每行一条,格式为 path:line issue-tag # reason,reason 必填;审计只读取该文件,从不写入。
报告阅读:行按 CRITICAL → IMPROVEMENT 排序,同一严重级别内按区域分组(SECURITY、AUTH、DATA、PERF、CONTENT 等),便于团队自上而下逐行修复。
适用场景:
- 发布前的深度代码审计。
- 修复后的验证与收敛确认。
- 适用于任意技术栈:Web 应用、API、CLI、移动端、monorepo。不适用视角会被跳过(例如没有 LLM 功能时跳过 LLM 质量视角),其余视角全深度运行。
限制:
- 仅基于源码:读取代码、配置与文档,不分析二进制或容器,供应链覆盖仅到 lockfile 所揭示的范围。
- 非确定性:两次运行可能发现不同问题、在不同点停止,是审计辅助工具而非可复现的合规门禁。
- 成本与时间随仓库规模增长:大型产品完整收敛运行需数小时并消耗大量 token,不需要全量时应限定范围。
- 收敛只是有界启发式:两次安静扫描意味着这 24 个视角不再发现问题,不代表已无问题,并非数学证明。
- 技能会捕获测试难以发现的缺陷类型,例如非原子性兄弟写入、绕过门禁的错误、已标记但实际损坏的状态、没有代码支撑的声明等。
- 该项目基于真实产品的预发布审计提炼,采用 MIT 许可。