返回博客2026年7月21日1 分钟阅读

to-spec:别让共识只留在对话里

摘要

上期用 grill-me 把“改造首页”拷问清楚了,可这份共识只存在于那段对话里 - 换个会话、第二天再开一个 agent,它就一无所知。Matt Pocock 的 to-spec 把已经聊清楚的东西合成成一份 spec,发到你的任务系统,agent 照着建。这篇聊聊它做什么、原理,以及接着改造首页真跑一遍。

上期我们用 grill-me 把“改造首页”这件事拷问了一遍,最后它列出一份共识小结:博客当主角、订阅放两处、大图锁最新长文。问题是,这份共识只存在于那段对话里 - 你换个会话、或者第二天再开一个 agent,它对这些一无所知,你又得从头解释一遍。对齐好的东西不落下来,等于没对齐。

这篇接着上期,聊 Matt Pocock 仓库里的另一个 skill - to-spec。它把刚聊清楚的东西,写成一份 spec,发到你的任务系统。我会聊聊它做什么、原理是什么、用它之前要配什么,再接着“改造首页”真跑一遍。这篇偏开发一点,面向用 AI 做真实项目的人。期望对大家有帮助。

它做什么:不问你,只写下来

to-spec 和 grill-me 正好相反。grill-me 是问你 - 一个问题一个问题把需求搞清楚;to-spec 不问,它假设对齐已经做完了,只负责把已知的东西合成成一份 spec,也就是规范文档,你可能管它叫 PRD。

它先扫一遍代码库,用你项目自己的术语写,写完发到任务系统。如果你用 GitHub,那就是创建一个 issue,再打上一个 ready-for-agent 标签 - 意思是:这份东西,可以交给 agent 直接实现了。

值得一提的是它的归类。Matt 把 grill-me 放在 productivity 目录,把 to-spec 放在了 engineering 目录 - 这是一个更偏工程开发的 skill。

to-spec 就在 mattpocock/skills 的 engineering 目录里

spec 里装了什么

一份 to-spec 的 spec,是固定几段:问题是什么、方案是什么、一长串 user story 穷尽这个功能要支持的行为、已经定下的实现决策、测试决策,还有明确的“不做什么”。

拿 user story 举个例。改造首页里有一条共识是:大图别顶早读日报。写进 spec,它就成了一条明确、能验收的行为 - 作为作者,当我只发了早读、没发长文,首页大图要保持上一篇长文,不被日报顶掉。它不是一句含糊的“首页要好看”,而是一条能拿去测、能对着验收的话。

还有一条设计值得说:它不写具体文件路径、不贴代码片段。因为这些东西过时最快 - 今天写死一个路径,明天一重构就错了。spec 记的是决策,不是实现细节。

最见功夫:接缝和深模块

真正让它不只是“把话整理一遍”的,是写 spec 之前那一步 - 它会先想:这个功能,要在哪测?

它把这个位置叫接缝,也就是 seam。举个对照:假设有一段逻辑,散在界面组件里、和渲染缠在一起 - 这种情况你没法单独测它,要测就得把整个页面渲出来。反过来,如果把这段逻辑抽成一个小小的、独立的函数,输入是数据、输出是该展示什么 - 这就是一个接缝,也是一个“深模块”:接口很小,后面藏着全部逻辑,你对着这一个函数就能测。

to-spec 的规矩是:接缝优先用已有的、用最高的那个,理想情况下整条改动只留一个。为什么这在 agent 时代格外重要?因为好接口给测试一个耐久的靶子 - 接口稳住了,底下代码不管被 agent 改写多少遍,测试都不用动。这正是让 agent 大胆改代码、又不容易出事的关键。

用它之前:一次性配置

不过 to-spec 真要跑起来,还有一个一次性的前置。它要把 spec 发到你的任务系统,可它怎么知道你用的是 GitHub 还是别的、issue 该怎么建?这得先配一次。

配置也是仓库里的一个 skill,叫 setup-matt-pocock-skills。跑一次 /setup-matt-pocock-skills,它先扫一遍你的仓库,然后就几个决策,每个都先给推荐答案。我这个仓库的远端指向 GitHub,它就建议用 GitHub、走 gh 命令 - 我顺手验了一下 gh 能不能用,能列出、也能创建 issue,那就选 GitHub。triage 那个 skill 我没装,标签这一节它直接跳过;不是 monorepo,文档布局默认单上下文。最后它把配置写进 docs/agents/,还在 CLAUDE.md 里加一段说明。前面说的 ready-for-agent 标签、还有“发到任务系统”,to-spec 之所以知道该怎么做,靠的就是这份配置。这是跑一次的事。

装它、用它

装 to-spec 还是一行命令:

npx skills add mattpocock/skills --skill to-spec

用的时候,在对话里输入 /to-spec。和 grill-me 一样,它不会自己冒出来,得你对齐完、主动叫它。

我让它把改造首页写成 spec

还是接着上期那个“改造首页”。共识已经聊完了,我输入 /to-spec。

它没问我问题,而是先去翻代码。翻完发现两件事:首页现在把“选哪篇当大图、列哪几篇”这些逻辑,直接写在页面组件里、和渲染混在一起,没法单独测;而且整个仓库,一个测试都没有。

刚才讲的接缝,这下用上了。它提议:抽出一个纯函数,就叫 getHomepageContent,把“首页展示什么”全收进这一个接缝,页面只负责渲染它的返回值。我确认。然后它才开始写 spec:问题、方案、一串 user story,里头就有那条“大图要排除早读日报”;到测试这段,它写得很具体 - 测这个函数,喂它一组“最新几篇全是早读、更早一篇是长文”的输入,大图必须是那篇长文。

上期还只是聊天里的一份共识,现在成了任务系统上一份带验收标准、能交给 agent 直接实现的 spec。中间我一句都没有重新解释。

它在工程链里的位置

to-spec 不是孤立的,它是 Matt 一整条工程链里的一环:

grill-with-docs → to-spec → to-tickets → implement → code-review

先用 grill 把想法拷问清楚,to-spec 写成 spec,再用 to-tickets 把 spec 拆成一个个工单,交给 agent 实现、评审。所以下一篇,我打算接着这份 spec,聊 to-tickets - 怎么把它拆成 agent 能一个个接着做的工单。

你和 AI 对齐好的东西,别只留在脑子里、留在一段会话里。写成 spec、落到任务系统,它才不会随着上下文一起蒸发。

相关文章

2026年7月19日

grill-me:让 AI 反过来拷问你

我们让 AI 写东西,常常是它还没搞明白你要什么就动手,结果返工。Matt Pocock 那个 17 万星 skills 仓库里最受欢迎的 grill-me 把这件事掉了个头 - 让 AI 在动手之前,先一个问题一个问题地把你拷问一遍。这篇聊聊它是什么、原理、怎么装,再拿我自己两次真实使用走一遍。

最近一封 · Sample

OpenRig 冲上 Trending:把 Claude Code 和 Codex 编成一支队伍

“OpenRig 在 GitHub Trending Today 获得 622 个 stars 的窗口信号。它用可恢复的队列、席位与权限记录,把 Claude Code 和 Codex 放进同一套多 Agent 工程流程。”

—— william

Letters

来信

里面装的是

  • 新文章 — 写完一篇就寄一封,不攒货
  • 这周读到的、看到的、好用的工具
  • 正在折腾的实验,附带翻车记录

约莫 1–2 周一封 · 随时退订

合作伙伴

CompeteMap — 英国及爱尔兰学生竞赛一站式搜索

数学、编程、科学、写作等各类竞赛信息汇总,支持按年龄和科目筛选,再也不错过报名截止日。

准备开始了吗?

先简单说明目标,我会给出最合适的沟通方式。