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,在这些问题发布之前、在你破费之前、在它们演变成安全事件之前,自动捕获它们。
## 它的作用

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, 代码安全, 开发工具, 漏洞枚举, 逆向工具, 配置错误, 防御加固, 静态应用安全测试