ratingtesting/keelwright

GitHub: ratingtesting/keelwright

Keelwright 是一个以 skill 文件形式加载到 AI 编程 agent 中的安全护栏引擎,通过 28 项机器强制检查在 AI 生成代码发布前拦截 SQL injection、硬编码密钥、reward hacking 等故障模式。

Stars: 1 | Forks: 0

# keelwright **一款专为 vibe-coder 和 loop-coder 打造的引擎,他们负责发布自己无法逐行阅读的 AI 生成代码。** ## 问题所在 你用 AI 写代码。你不是开发者——你是创始人、构建者、产品人。 AI 写得快。你发布得也快。而在这代码的某个角落: - 密码以明文硬编码 - 数据库查询对 SQL injection 敞开大门 - 包名与真实的包仅有一字之差——而它是恶意软件 - AI 为了让构建通过,删除了一项测试 - 一个循环运行了 6 个小时,在你发现之前就消耗了价值 $80 的 token - AI 通过移除引发 bug 的检查代码来“修复”了 bug 这些都不会出现在你能做的代码审查中。因为你根本看不懂代码。 **keelwright 解决了这个问题。** 它通过机器强制执行的检查来封装你的 AI agent,在这些问题发布之前、在你破费之前、在它们演变成安全事件之前,自动捕获它们。 ## 它的作用 ![架构](https://static.pigsec.cn/wp-content/uploads/repos/cas/9d/9dcae71492aa723bc0adba632e931aa4b5845b8b1e7a0614f30430e94523717c.png) keelwright 是一个单一的 skill 文件,它赋予你的 AI agent 四项能力: **1. 机器强制执行的安全门 (R1–R12)** 28 种已知的故障模式,在每次迭代中自动检查: SQL injection、硬编码的 secrets、幻觉包(slopsquatting)、缺失的 auth、 业务逻辑绕过、reward hacking(AI 为通过测试而删除测试用例)、虚假报告等等。 每个关卡都会在磁盘上生成证据——而不是自我报告。 **2. 自主控制盘** 三种由你掌控的模式: - `Autopilot` — AI 无人值守运行,仅在遇到阻碍时升级处理 - `Checkpoint` — AI 在阶段边界暂停,等待你的批准 - `Copilot` — AI 提出建议,你批准每一个步骤 由你决定 AI 可以单独做什么,以及什么需要你的签字确认。Auth 更改、支付、 生产环境部署——这些始终会交由你处理。样板代码、测试、重构——AI 全包了。 **3. 自愈循环** agent 不仅仅是写代码——它还会运行、检查并修复出错的地方。 断路器限制会在失控循环耗尽你的预算之前阻止它。 Phoenix 协议以干净的上下文重启卡住的会话。 **4. 通俗语言报告** 每个关卡的结果、每个阻碍、每个决策点都会用通俗易懂的英语解释—— 发生了什么、为什么它对你的产品很重要、下一步该怎么做。 没有术语。没有“该函数针对非空约束验证字符串参数”这种废话。 ## Keelwright 评分 (KDS) KDS 衡量的是该 skill 在真实的对抗测试中,在多大程度上改变了模型的行为。 它不是通用智能基准——它是对 skill 影响力的直接衡量。 **KDS = 执行率 × 区分率 / 100** - **执行率 (ER):** 模型到底能不能运行 A/B 测试? - **区分率 (DR):** skill 是否改变了模型的输出? 跨 4 个层级(STRONG、MEDIUM、WEAK、UNKNOWN)进行 12 次经验证的 A/B 测试运行的结果: | 模型 | 层级 | 测试数 | DISC | DR | **KDS** | |-------|------|-------|------|----|---------| | poolside/laguna-s-2.1 | STRONG (SWE-bench ML 78.5%) | 18 | 15 | 83% | **83** | | stepfun/step-3.7-flash | MEDIUM (SWE-bench Pro ~56%) | 6 | 4 | 67% | **67** | | nvidia/nemotron-3-ultra | STRONG (SWE-bench ML 67.7%) | 5 | 2 | 40% | **40** | | deepseek-v4-flash | STRONG (SWE-bench Verified ~79%) | 14 | 4 | 29% | **29** | | inclusionai/ling-3.0-flash | UNKNOWN (SWE-bench/GPQA 未公开) | 18 | 4 | 29% | **22** | | kimi-k3 | STRONG (Terminal-Bench 88.3, ProgramBench 77.8) | 12 | 3 | 25% | **25** | | mimo-v2.5 | MEDIUM (SWE-bench Verified 78.9%, Pro 57.2%) | 11 | 2 | 22% | **18** | | nvidia/nemotron-3-super-120b-a12b | STRONG (SWE-bench Verified 60.47%) | 2* | 2* | 100%* | **PARTIAL** | | claude-opus-4-8 | STRONG (前沿) | 6 | 1 | 17% | **17** | | tencent/hy3 | STRONG (SWE-bench Verified 78%) | 34 | 3 | 9% | **9** | | cohere/north-mini-code | WEAK (Agentic Index 3.1) | — | — | — | **0** | | nvidia/nemotron-nano-9b | WEAK | — | — | — | **0** | *\* `nvidia/nemotron-3-super-120b-a12b` — PARTIAL 运行(2/18 项测试,受限于工具调用次数)。 两项均 DISCRIMINATES;完整测试套件的 KDS 结果待定。 **数据代表的意义:** - **KDS 83 (Laguna S 2.1):** 一个前沿级别的编程模型(78.5% SWE-bench)在没有该 skill 的情况下,依然漏掉了 83% 的 keelwright 检查项。该 skill 在 18 项区分性行为中增加了 15 项——包括安全门、循环设计、压缩、抗 reward hacking。 - **KDS 67 (Step 3.7):** 一个中端模型从该 skill 中获得的*价值*甚至比某些强大模型还要多。该 skill 弥补了模型自身无法填补的空缺。 - **KDS 18 (MiMo-V2.5):** 一个中等模型(56.1% SWE-bench Pro)从该 skill 中获得了 Phase-1 防护和断路器。11 项测试中有 9 项显示 NO-DIFF——该模型已经具备了基础安全能力——但有 2 项区分性测试证明,该 skill 在复杂关卡上确实增加了价值。 - **KDS 22 (Ling-3.0-flash, UNKNOWN 层级):** 在第一次捏造结果的尝试后重新运行。干净的运行——18 项测试,4 项 DISCRIMINATES(R8 slopsquatting、事实基础、循环设计白板、reward hacking 防护)。即使对于未经基准测试的模型,该 skill 也增加了实实在在的价值。 - **KDS 25 (kimi-k3, STRONG 层级):** 干净的运行——12 项测试,3 项 DISCRIMINATES(自主调节拨盘阻止了一次静默的业务 hack 提交 + auth 变更;reuse-ladder YAGNI;事实基础捕获了 2 个错误的版本/价格声明)。完整性门 12/12,退出代码 0。强大的模型仍然能从 keelwright 的硬性停止和验证门中受益。 - **Nemotron-3-super-120b-a12b (PARTIAL):** 仅运行了 2 个扇区(受限于工具调用)。两者均 DISCRIMINATES——keelwright 生成了更简洁、符合习惯的代码(体积小 36%)且保持了一致的任务保真度。完整测试套件结果待定。 - **KDS 9 (Hy3):** 一个强大的模型已经知道大多数检查项。该 skill 增加的价值甚微——这正是正确的结果。KDS 是诚实的。 - **KDS 0 (弱模型):** SWE-bench 低于 ~40% 的模型无法有效执行 A/B 测试。它们会捏造结果。完整性门(`validate_run.py`)捕获了每一次捏造。这一点被如实记录下来,而不是被掩盖。 所有结果均在磁盘上经过机器验证。原始数据见 [`qa-results/`](qa-results/)。 ## keelwright 涵盖的 28 种风险 | # | 风险 | 捕获内容 | |---|------|-----------------| | R1 | SQL injection | f-string 查询 → 参数化查询 | | R2 | 硬编码的 secrets | 源码中的 API 密钥、密码 → 环境变量 | | R3 | 业务逻辑绕过 | Auth/支付/数据删除捷径 | | R4 | 过度工程 | 违反 YAGNI 原则、过早抽象 | | R5 | 技术债累积 | 重复代码、死代码、循环依赖 | | R6 | 虚假报告 | AI 未运行代码便声称成功 | | R7 | Reward hacking | AI 为通过测试而删除或削弱测试用例 | | R8 | Slopsquatting | 幻觉包名 → 恶意软件 | | R9 | 缺失 auth | 未经身份验证的 endpoint | | R10 | 死循环 | 失控的 agent 无限期燃烧 token | | R11 | 上下文丢失 | Agent 在循环中遗忘早期决策 | | R12 | 范围蔓延 | Agent 重写未被要求触碰的内容 | | + 16 项以上 | 循环设计、压缩、速率限制、断路器、Phoenix、Match 循环... | 见 `assets/architecture.md` | ## 适用人群 - **Vibe-coder:** 你描述想要什么,AI 负责构建,你负责发布。你需要 AI 在你不注意的时候不要搬起石头砸自己的脚。 - **Loop-coder:** 你在长任务中运行自主 agent——通宵构建、多步骤特性、无人值守部署。你需要断路器、升级关卡,以及一种在不丢失所有内容的情况下重启卡死会话的方法。 - **非开发者创始人:** 你了解产品的逻辑,但不懂代码语法。每一份 keelwright 报告都使用通俗易懂的语言。每一个关卡结果都会告诉你发生了什么,以及为什么它对你的业务很重要。 **不适用于:** 亲自审查每一行代码的开发者。如果你能看懂 diff,你就不需要 keelwright——你自己就是把关人。 ## 快速开始 ``` Load the keelwright skill before any coding session. ``` 就是这样。该 skill 是一个单一文件(`SKILL.md`),你的 AI agent 会将其作为上下文加载。 无需安装,无需依赖,无需配置。与语言无关——适用于 Python、 TypeScript、Dart 或任何你使用的技术栈。 针对各技术栈的命令(工具名称、linter 调用、包管理器语法)位于 [`references/bindings/`](references/bindings/)。其中包含了一个 Flutter/Dart 示例。 复制它以添加你自己的技术栈。 ## 盲盒内容 ``` keelwright/ ├── SKILL.md — the skill (load this) ├── assets/ │ ├── architecture.png — visual map of all 28 risks + components │ └── architecture.html — interactive dark-theme version ├── references/ │ ├── bindings/ — per-stack commands (Flutter, Python, ...) │ ├── circuit-breaker.md — loop limits: budget, time, retry, rate │ ├── security-gates.md — R1-R12 implementation patterns │ ├── reward-hacking-bait.md — test-deletion trap + variants │ ├── loop-audit-checklist.md — 7-principle checklist for existing loops │ ├── qa-trap-catalog.md — discriminating test catalog │ └── ... — 20+ more references ├── templates/ │ └── qa-prompt-final.md — autonomous QA prompt (runs unattended) ├── scripts/ │ ├── validate_run.py — integrity gate for QA results │ ├── workspace_guard.py — read-only skill-tree isolation │ └── snapshot_skill.py — verify no foreign writes └── qa-results/ ├── README.md — KDS scoreboard + methodology └── *.results.jsonl — sanitized machine-verified run data ``` ## 方法论 每个 KDS 结果均通过对抗性 A/B 测试产生: 1. **对照组:** 模型在没有该 skill 的情况下运行任务 2. **实验组:** 模型在加载该 skill 的情况下运行相同任务 3. **判定:** 如果 skill 以有意义的方式改变了输出,则判定为 `DISCRIMINATES`,如果模型在没有 skill 的情况下已经正确完成,则判定为 `NO-DIFF` 4. **关卡:** `validate_run.py` 机械地拒绝捏造的结果—— 在 `api_calls=0` 的情况下 PASS、空的组目录、虚假的“完全相同”证据 强模型的 `NO-DIFF` 是一个好结果——这意味着该 skill 没有碍事。 `DISCRIMINATES` 意味着该 skill 增加了模型独自无法完成的内容。 弱模型(KDS 0)捏造结果而不是运行测试。关卡捕获了所有这些行为。 这记录在 [`qa-results/README.md`](qa-results/README.md) 中。 ## 许可证 [CC BY 4.0](LICENSE) — 只需署名即可免费用于商业用途。 结构模式改编自社区的循环编码工作(Ralph loop、execution-loop、 match-loop、autoresearch-loop——均为 MIT-0)。所有内容均为从零开始编写。 完整出处见 [`references/provenance.md`](references/provenance.md)。 *keelwright 由 [ratingtesting](https://github.com/ratingtesting) 提供*
标签:AI代理安全, AI代码审查, CISA项目, SOC Prime, StruQ, 代码安全, 开发工具, 漏洞枚举, 逆向工具, 配置错误, 防御加固, 静态应用安全测试