keel: A DSH plugin that makes agents define specs before writing code

前言

用 dsh(DeepSeek Harness)这类“一切皆插件”的 harness 跑编码任务时,常见的问题不是模型不会写代码,而是它拿到需求就直接开写:需求模糊时实现方向跑偏,返工成本最高;“我假设”被当成事实,方案建立在流沙上;实现阶段做得太多,或者范围越滑越远。把规范写进系统提示词是一种做法,但约束停留在“自觉”层面,缺一道硬性门禁。

keel(龙骨)的思路是:先写规格、先验证假设,规格通过门禁之前不动手实现;实现中用规则防过度工程、用变更请求防范围蔓延;交付前逐条审计验收标准。纪律由技能约束 agent 行为、由工具做确定性检查,不依赖人的自觉。

下面介绍这个插件的构成、安装和用法。

这是什么

keel 是一个规格驱动开发(spec-driven)纪律技能包,由 GitHub 用户 JohnXu22786 维护,MIT 许可证,当前版本 1.0.0。它以技能 + 工具 + 模板的形式约束 agent 编码行为,为 dsh 等插件化 harness 提供自包含接入,也可以脱离 harness 用裸 CLI 独立使用。仓库关键词:dsh-plugin、spec-driven、spec-first、skill-pack、keel。

五步纪律循环

keel 的核心是一个五步循环,每步由一个技能约束,并各带一个门禁:

步骤 技能 动作 产物 门禁
1 Anchor keel-anchor 三个边界问题:做什么、不做什么、成功长什么样 三句话 三句均可验证
2 Spec keel-spec 按任务规模选模板,生成规格 SPEC.md keel_review 零错误
3 Probe keel-probe 登记假设、标记风险、优先验证高风险 ASSUMPTIONS.md 所有 [High] 假设已解决(KEEL-0303 强制)
4 Build keel-build 按规格实现,遵循十条规则与范围护栏 代码 规格冻结,变更走变更请求
5 Audit keel-audit 逐条核对验收标准、记录偏差与复盘 AUDIT.md 无未处理 ❌(KEEL-0403 强制)

失败复盘遵循同一纪律:先写失败原因规格、验证假设,再修复。

三个工具与六个模板

加载后模型获得三个工具:

  • keel_catalog:列出技能与模板,是路由入口;
  • keel_spec:从模板生成规格类文件,参数为 template/path/fields,任一字段缺失即拒绝整个调用;
  • keel_review:审查 SPEC/ASSUMPTIONS/AUDIT 文件,输出带规则 ID 与行号的报告。

模板共六个(含变体),按任务规模选:

  • spec.minimal:微型任务;
  • spec:标准任务;
  • spec.feature:大型任务;
  • assumptions:假设登记,含风险等级与验证结论;
  • audit:验收审计表,含结果、证据、偏差、复盘;
  • change-request:规格冻结后范围变更的唯一入口。

安装与启用

keel 自带 dsh.bundle 清单(cordis.patch.yml,由 package.json 的 dsh.bundle.patch 字段引用),一条命令即可安装并激活:

dsh plugin --profile demo add github:JohnXu22786/spec-driven

bundler 会向 profile 插入插件行(name: keel),dsh 解析包入口 src/index.ts,加载时注册三个工具与五个技能。

也可以不走 bundle,手动通过 cordis.yml patch 本地加载:把插件目录放入项目或复制到任意位置,创建 patch 指向插件入口(可复制仓库根目录的 cordis.example.yml 修改):

- insert:
    - id: keel
      name: '/absolute/path/spec-driven/src/index.ts'

然后启动 harness 并加载 patch:

dsh web --patch ./cordis.yml

更多集成细节(加载、注册接口、三种加载技能方式、卸载与重载)见仓库的 docs/INTEGRATION.md。

配置

配置经宿主 patch line 的 config 字段传入,无 harness 时使用默认值。三个配置项:

  • strictness:relaxed | strict,strict 将警告升级为错误;
  • requireAssumptions:审查 spec 时要求同目录存在 ASSUMPTIONS*.md;
  • maxFindings:每份审查报告的 findings 上限,取值 1–1000。

非法配置在加载时失败,错误信息包含修复指引。各配置项的默认值在资料中未列出,接入前以仓库文档为准。

裸 CLI:脱离 harness 使用

没有 harness 也能用,直接以 Node 运行:

node src/cli.ts catalog
node src/cli.ts scaffold spec SPEC.md "--title=Example" "--goal=Goal" "--in_scope=- behavior" "--out_of_scope=- not doing" "--requirements=- R-01" "--acceptance=- AC-01" "--verification=command"
node src/cli.ts review SPEC.md

三个子命令分别是:catalog 列出技能与模板,scaffold spec 从模板生成规格文件,review 审查规格文件。含空格的取值必须加引号(如上)。

review 无错误时退出码 0,有错误时退出码 1,因此可以直接用作 CI 门禁。

开发与自检

npm test          # node --test 全部测试(零测试依赖)
npm run typecheck # tsc --noEmit
npm run cli       # 裸 CLI

keel 零运行时依赖,npm install 只安装开发期类型包(typescript、@types/node)。运行测试与类型检查需要 Node ≥ 22.18(package.json 的 engines 字段要求 node >=22.18.0)。

文档与示例

  • docs/METHODOLOGY.md:方法论、十条反过度工程规则、范围蔓延护栏、KEEL-* 审查规则清单;
  • docs/INTEGRATION.md:dsh 集成细节;
  • docs/PLANNING_BRIDGE.md:向规划/任务拆解技能桥接;
  • examples/:正反例,演示审查引擎的 findings。

适用场景与注意

适合谁:

  • 在 dsh 等插件化 harness 里跑编码任务,希望 agent 先立规格、验证假设,而不是直接开写;
  • 想约束 agent 的过度工程与范围蔓延,且不满足于只靠提示词约束;
  • 需要把规格审查接进 CI(review 的退出码可作门禁);
  • 任务规模从微型到大型都有对应模板可选。

注意:

1、运行环境需要 Node ≥ 22.18;
2、插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证(MIT,见仓库 LICENSE 文件);
3、安装命令中的 –profile demo 按你的实际 profile 替换;
4、keel 约束的是流程与规格质量,写出来的代码仍按常规做评审。

结尾

keel 把“先写规格、再写代码”从口号落成技能、工具与门禁:五步循环约束 agent 行为,keel_review 提供带规则 ID 与行号的确定性审查,规格冻结后的变更收口到 change-request。如果你在 dsh 里跑编码任务、苦于方向跑偏与范围蔓延,可以按上面的命令接入试试。

  • 目录页:https://www.skillhub.cn/plugins/JohnXu22786/spec-driven
  • GitHub:https://github.com/JohnXu22786/spec-driven
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye