<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Spec Coding on Tyritic</title>
        <link>https://Tyritic.github.io/tags/spec-coding/</link>
        <description>Recent content in Spec Coding on Tyritic</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>Tyritic</copyright>
        <lastBuildDate>Sun, 28 Jun 2026 16:27:00 +0000</lastBuildDate><atom:link href="https://Tyritic.github.io/tags/spec-coding/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>OpenSpec的概念与基本使用</title>
        <link>https://Tyritic.github.io/p/openspec%E7%9A%84%E6%A6%82%E5%BF%B5%E4%B8%8E%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</link>
        <pubDate>Sun, 28 Jun 2026 10:00:00 +0800</pubDate>
        
        <guid>https://Tyritic.github.io/p/openspec%E7%9A%84%E6%A6%82%E5%BF%B5%E4%B8%8E%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/</guid>
        <description>&lt;h2 id=&#34;-vibe-coding-的痛点和-spec-driven-development-的优势&#34;&gt;🧠 Vibe Coding 的痛点和 Spec-Driven Development 的优势
&lt;/h2&gt;&lt;p&gt;现在用 Cursor、Claude Code 这类 AI 编码助手已经是日常了。大家应该都有一个共同感受：AI 确实能写代码，但要让它持续、稳定地写出你想要的东西，没那么容易。
理想状态下，我们希望自己的角色能逐步转变——从纯粹的“代码执行者”，更多地转向“指挥者”和“把关人”：AI 负责具体的代码产出，人负责架构决策、逻辑审批和质量把关。
听起来很美好，对吧？但现实往往很骨感。如果在实际操作中缺乏规范，这种协作很容易退化成一种非常随意的状态，也就是现在常说的 &amp;ldquo;Vibe coding&amp;rdquo;（凭感觉编程）——脚踩西瓜皮，想到哪写到哪。人边想边写，AI 边猜边生成。这种缺乏约束的开发方式，很快就会暴露出几个致命痛点：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;痛点&lt;/th&gt;
					&lt;th&gt;具体表现&lt;/th&gt;
					&lt;th&gt;后果&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;上下文丢失&lt;/td&gt;
					&lt;td&gt;聊天记录太长，AI 开始&amp;quot;失忆&amp;quot;&lt;/td&gt;
					&lt;td&gt;反复解释同一件事，心智负担重&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AI 自由发挥&lt;/td&gt;
					&lt;td&gt;没有明确约束，AI 按自己的喜好补全&lt;/td&gt;
					&lt;td&gt;代码风格混乱，逻辑容易跑偏&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;需求偏移&lt;/td&gt;
					&lt;td&gt;边聊边做，缺乏锚点，做着做着就变形了&lt;/td&gt;
					&lt;td&gt;频繁返工、疯狂 debug&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;无法追溯&lt;/td&gt;
					&lt;td&gt;只有最终代码，不知道当初为什么这么设计&lt;/td&gt;
					&lt;td&gt;维护和交接都很困难&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;（Spec-Driven Development，规范驱动开发）的核心思想很简单：先写规范，再写代码，用规范约束 AI 的行为边界。&lt;/p&gt;
&lt;p&gt;更具体地说，两者的差异可以总结为下面这张表：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;传统 AI 编程 (Vibe Coding)&lt;/th&gt;
					&lt;th&gt;OpenSpec (SDD)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;核心驱动&lt;/td&gt;
					&lt;td&gt;基于对话和感觉&lt;/td&gt;
					&lt;td&gt;基于结构化规范文档&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;上下文管理&lt;/td&gt;
					&lt;td&gt;依赖聊天记录，易丢失&lt;/td&gt;
					&lt;td&gt;单一真相源 (Single Source of Truth)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;可追溯性&lt;/td&gt;
					&lt;td&gt;难以审计变更原因&lt;/td&gt;
					&lt;td&gt;完整的提案与决策日志&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;执行精度&lt;/td&gt;
					&lt;td&gt;AI 自由发挥空间大&lt;/td&gt;
					&lt;td&gt;严格按任务清单 (Tasks) 执行&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;用一个比喻来说：传统的 AI 编程像是&amp;quot;口头协议&amp;quot;——你说一句，AI 做一句，做完就忘；而 SDD 像是&amp;quot;签合同&amp;quot;——先把需求、设计、任务清单白纸黑字写下来，AI 严格按合同执行，执行完还要归档备查 。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-openspec-的核心定位与设计哲学&#34;&gt;🏗️ OpenSpec 的核心定位与设计哲学
&lt;/h2&gt;&lt;h3 id=&#34;-openspec是什么&#34;&gt;📖 OpenSpec是什么
&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Fission-AI/OpenSpec&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenSpec&lt;/a&gt; 是由 &lt;a class=&#34;link&#34; href=&#34;https://openspec.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Fission-AI&lt;/a&gt; 开源的一套 &lt;strong&gt;Spec-Driven Development 框架 + CLI 工具&lt;/strong&gt;。它形态非常轻量，它通过一套结构化的文件组织方式和指令系统，让 AI 编程助手（如 Codex、CodeBuddy、Claude）能够在明确的&amp;quot;合同&amp;quot;约束下工作。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一组本地 Markdown 文档（&lt;code&gt;openspec/specs/&lt;/code&gt; 与 &lt;code&gt;openspec/changes/&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;一组斜杠命令（&lt;code&gt;/opsx:propose&lt;/code&gt;、&lt;code&gt;/opsx:apply&lt;/code&gt;、&lt;code&gt;/opsx:archive&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;一个 npm 包：&lt;code&gt;@fission-ai/openspec&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;和 Spec Kit 相比，OpenSpec 没有&amp;quot;Constitution 强制条款&amp;quot;那一层；和 Kiro 相比，OpenSpec 不绑定特定 IDE。一句话——&lt;strong&gt;它只做&amp;quot;把变更规格化&amp;quot;这一件事，并把这件事做到极致轻量&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;-核心口号align-before-code&#34;&gt;🎯 核心口号：Align before code
&lt;/h3&gt;&lt;p&gt;OpenSpec 的官方口号是 &lt;strong&gt;&amp;ldquo;Align before code&amp;rdquo;（在写代码之前先对齐）&lt;/strong&gt;。它强调的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需求是合约，不是注释。&lt;/li&gt;
&lt;li&gt;规范是 AI 的上下文，不是给人看的文档。&lt;/li&gt;
&lt;li&gt;变更必须可追溯、可审计、可回放。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;整个工具的设计都围绕这一句话展开——&lt;strong&gt;所有功能都为了把&amp;quot;模糊意图&amp;quot;压缩成&amp;quot;AI 能直接消费的契约&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;-与其他-sdd-工具的对比&#34;&gt;⚖️ 与其他 SDD 工具的对比
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;OpenSpec&lt;/th&gt;
					&lt;th&gt;GitHub Spec Kit&lt;/th&gt;
					&lt;th&gt;AWS Kiro&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;形态&lt;/td&gt;
					&lt;td&gt;本地 CLI + Markdown&lt;/td&gt;
					&lt;td&gt;Python CLI + Markdown&lt;/td&gt;
					&lt;td&gt;IDE 内置（基于 Code OSS）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;工作流&lt;/td&gt;
					&lt;td&gt;propose → apply → archive&lt;/td&gt;
					&lt;td&gt;specify → plan → tasks → implement&lt;/td&gt;
					&lt;td&gt;requirements → design → tasks&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;产物&lt;/td&gt;
					&lt;td&gt;proposal / design / specs / tasks&lt;/td&gt;
					&lt;td&gt;spec / plan / tasks / constitution&lt;/td&gt;
					&lt;td&gt;requirements / design / tasks&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;强项&lt;/td&gt;
					&lt;td&gt;增量变更、归档&lt;/td&gt;
					&lt;td&gt;完整宪法、跨工具兼容&lt;/td&gt;
					&lt;td&gt;IDE 原生、EARS 格式、Agent Hooks&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;弱项&lt;/td&gt;
					&lt;td&gt;无项目级强制条款&lt;/td&gt;
					&lt;td&gt;流程相对重&lt;/td&gt;
					&lt;td&gt;绑死 IDE、生态封闭&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;适合&lt;/td&gt;
					&lt;td&gt;增量功能、长期维护&lt;/td&gt;
					&lt;td&gt;团队级、企业级&lt;/td&gt;
					&lt;td&gt;多人协作、复杂项目&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一句话选型：&lt;strong&gt;想轻、想快、想要变更可追溯，用 OpenSpec；想严肃、想统一、想给 AI 立宪法，用 Spec Kit；想 IDE 全家桶、用 Kiro&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-openspec-的安装和使用&#34;&gt;🛠️ OpenSpec 的安装和使用
&lt;/h2&gt;&lt;p&gt;环境要求:OpenSpec 基于 Node.js 开发，安装前请确保你的环境满足：Node.js：版本 &amp;gt;= 20.19&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. 全局安装最新版&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @fission-ai/openspec@latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. 验证安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openspec --version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 3. 进入你的项目目录，初始化 OpenSpec&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /path/to/your/python/project
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openspec init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 4. 在交互式菜单中选择你使用的编辑器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;-openspec-工作目录&#34;&gt;🧩 OpenSpec 工作目录
&lt;/h2&gt;&lt;h3 id=&#34;-整体结构&#34;&gt;🗂️ 整体结构
&lt;/h3&gt;&lt;p&gt;这是理解 OpenSpec 的关键部分。用下面这张图来展示整体架构：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;ea52e0ee389511f1b9b8260bb3baec80.png&#34; alt=&#34;OpenSpec 工作目录&#34; width=&#34;82%&#34;&gt;
&lt;/div&gt;
执行 openspec init 后，会在项目根目录创建 openspec/ 文件夹，这是整个框架的&#34;大本营&#34;：
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openspec/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── config.yaml          ← 🌐 全局配置（影响所有新变更，归档不动它）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── specs/               ← 📚 主规范库（真相源，已归档的功能规范）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── changes/             ← 🔥 活跃变更区
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── my-feature/      ← 当前正在开发的变更
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   ├── .openspec.yaml   ← 变更元数据（schema + 创建日期）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   ├── proposal.md      ← 为什么做（背景/目标）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   ├── design.md        ← 怎么做（技术方案）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   ├── tasks.md         ← 任务清单（To-Do）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    │   └── specs/           ← 增量规范（Delta Specs）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── archive/         ← 📦 归档区
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        └── 2026-04-07-my-feature/  ← 归档后的变更（整个目录原封不动搬过来）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;用一张表把这三个区域的分工与状态总结一下：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;区域&lt;/th&gt;
					&lt;th&gt;路径&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
					&lt;th&gt;状态&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;真相源&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;specs/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;存放已归档、稳定的功能规范&lt;/td&gt;
					&lt;td&gt;🟢 稳定&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;活跃变更区&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;changes/xxx/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;正在开发的功能提案&lt;/td&gt;
					&lt;td&gt;🟠 活跃&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;归档区&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;changes/archive/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;已完成变更的历史记录&lt;/td&gt;
					&lt;td&gt;⚪ 历史&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这一设计借鉴了传统软件工程里的&amp;quot;&lt;strong&gt;主干 + 变更集&lt;/strong&gt;&amp;ldquo;思想：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;specs/&lt;/code&gt; 是已经定稿的规范库，是 AI 读&amp;quot;系统当前是什么&amp;quot;的入口。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;changes/&lt;/code&gt; 是正在进行的&amp;quot;草稿区&amp;rdquo;，每一个子目录代表一个待合并的变更。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;新功能先在 &lt;code&gt;changes/&lt;/code&gt; 里起草，完工后通过 &lt;code&gt;/opsx:archive&lt;/code&gt; 合并到 &lt;code&gt;specs/&lt;/code&gt;，&lt;strong&gt;整个生命周期都有完整的文件留痕&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;-核心工件&#34;&gt;🧾 核心工件
&lt;/h3&gt;&lt;p&gt;在 OpenSpec 工作流的语境中，Artifact（工件）是指在一个变更（Change）推进过程中，按步骤依次创建的结构化文档或文件。&lt;/p&gt;
&lt;p&gt;每个变更包含 四个核心工件，我把它们比作&amp;quot;合同的四个章节&amp;quot;：四个文件各司其职：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style=&#34;text-align: left&#34;&gt;工件&lt;/th&gt;
					&lt;th&gt;文件&lt;/th&gt;
					&lt;th&gt;回答的问题&lt;/th&gt;
					&lt;th&gt;谁来读&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;提案&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;proposal.md&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;为什么要做？影响哪些模块？&lt;/td&gt;
					&lt;td&gt;人 + AI&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;设计&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;design.md&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;用什么技术方案？关键决策是什么？&lt;/td&gt;
					&lt;td&gt;人 + AI&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;规范&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;specs/*.md&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;具体怎么做&lt;/td&gt;
					&lt;td&gt;AI 实现时对齐&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;任务&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;tasks.md&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;具体要做哪些事？&lt;/td&gt;
					&lt;td&gt;AI 实施时逐项打勾&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;一个常见的反模式是把 &lt;code&gt;proposal.md&lt;/code&gt; 写得很长、&lt;code&gt;spec.md&lt;/code&gt; 写得很短。事实上 &lt;strong&gt;&lt;code&gt;spec.md&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;才是 AI 实现时的&amp;quot;事实来源&amp;quot;&lt;/strong&gt;——它写得越具体，AI 跑偏的概率越低。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;-变更的delta思想&#34;&gt;➕ 变更的&amp;quot;delta&amp;quot;思想
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;specs/&lt;/code&gt; 下的子目录是按&amp;quot;能力（capability）&amp;ldquo;组织的，例如 &lt;code&gt;auth/spec.md&lt;/code&gt;、&lt;code&gt;billing/spec.md&lt;/code&gt;。一次新变更只会产生&amp;quot;差异（delta）&amp;quot;——只描述**新增（ADDED）、修改（MODIFIED）、删除（REMOVED）**的能力，不重写整个文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openspec/changes/add-oauth-login/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── specs/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── auth/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        └── spec.md   # 只描述 ADDED Requirements: OAuth 登录相关
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;归档时 OpenSpec 会自动把这些 delta 合并到 &lt;code&gt;openspec/specs/auth/spec.md&lt;/code&gt;，&lt;strong&gt;形成活文档&lt;/strong&gt;。这样既保留了变更历史，又让 &lt;code&gt;specs/&lt;/code&gt; 始终是当前系统的真实写照。&lt;/p&gt;
&lt;h2 id=&#34;-核心工作流propose--apply--archive&#34;&gt;🔄 核心工作流：Propose → Apply → Archive
&lt;/h2&gt;&lt;h3 id=&#34;-三个核心命令&#34;&gt;⌨️ 三个核心命令
&lt;/h3&gt;&lt;p&gt;OpenSpec 默认是 &lt;strong&gt;Core 模式&lt;/strong&gt;，只有三个核心命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:propose  →  /opsx:apply  →  /opsx:archive
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/opsx:propose &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/strong&gt;：根据自然语言需求，一键生成 &lt;code&gt;proposal.md&lt;/code&gt; + &lt;code&gt;design.md&lt;/code&gt; + &lt;code&gt;specs/&lt;/code&gt; + &lt;code&gt;tasks.md&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/opsx:apply&lt;/code&gt;&lt;/strong&gt;：按 &lt;code&gt;tasks.md&lt;/code&gt; 逐项实现，每完成一项打勾。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/opsx:archive &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/strong&gt;：把变更归档，delta 合并到 &lt;code&gt;specs/&lt;/code&gt;，整个目录从 &lt;code&gt;changes/&lt;/code&gt; 移除。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;三个命令的边界极其清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;propose&lt;/code&gt; 阶段只动 Markdown，不动代码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apply&lt;/code&gt; 阶段才真正写代码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;archive&lt;/code&gt; 阶段关闭变更，留下审计痕迹。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-探索模式-opsxexplore&#34;&gt;🔍 探索模式 /opsx:explore
&lt;/h3&gt;&lt;p&gt;需求不清时还有 &lt;code&gt;/opsx:explore&lt;/code&gt; 兜底。它和 &lt;code&gt;propose&lt;/code&gt; 的区别是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;propose&lt;/code&gt; 会&lt;strong&gt;生成正式文档&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;explore&lt;/code&gt; &lt;strong&gt;不产生产物&lt;/strong&gt;，只和 AI 一起梳理思路，把模糊意图问清楚。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;实操经验：拿到一个不清晰的需求时，先 &lt;code&gt;/opsx:explore&lt;/code&gt; 把问题问透；等需求清晰、边界明确后，再 &lt;code&gt;/opsx:propose&lt;/code&gt; 生成正式规范。&lt;strong&gt;避免边探索边写规范，导致 spec 反复返工&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;-完整生命周期&#34;&gt;🪞 完整生命周期
&lt;/h3&gt;&lt;p&gt;一个 OpenSpec 变更的完整生命周期是这样的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;需求提出
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:explore（可选，需求不清时）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:propose &amp;lt;name&amp;gt;     → 生成 proposal / design / specs / tasks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;人工 review + 修订规范
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:apply              → 按 tasks 逐项实现
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;测试与验证
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:archive &amp;lt;name&amp;gt;     → 合并 delta 到 specs/，删除 changes/&amp;lt;name&amp;gt;/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个流程里有两个**人在环路（Human-in-the-Loop）**的检查点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;propose&lt;/code&gt; 之后必须 review 规范。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;archive&lt;/code&gt; 之前必须验证实现。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;跳过任何一个检查点，OpenSpec 就退化为&amp;quot;自动写代码的脚手架&amp;rdquo;，失去意义。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-安装与初始化&#34;&gt;💻 安装与初始化
&lt;/h2&gt;&lt;h3 id=&#34;-前置要求&#34;&gt;📦 前置要求
&lt;/h3&gt;&lt;p&gt;OpenSpec 的安装门槛非常低：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js 18+&lt;/li&gt;
&lt;li&gt;任意一个支持的 AI 工具（Claude Code、Cursor、Codex、Copilot、Windsurf、Gemini CLI、Cline、Trae 等 25+ 工具）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-项目初始化&#34;&gt;⚙️ 项目初始化
&lt;/h3&gt;&lt;p&gt;在项目根目录运行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 全局安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @fission-ai/openspec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 初始化（按提示选择 AI 工具）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; your-project
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openspec init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;openspec init&lt;/code&gt; 会做三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建 &lt;code&gt;openspec/&lt;/code&gt; 目录。&lt;/li&gt;
&lt;li&gt;在所选 AI 工具的配置目录（如 &lt;code&gt;.claude/commands/opsx/&lt;/code&gt;）写入斜杠命令定义。&lt;/li&gt;
&lt;li&gt;生成一份默认的 &lt;code&gt;AGENTS.md&lt;/code&gt; 提示词（告诉 AI 如何使用 OpenSpec）。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;提示：如果想用非交互式初始化，可以直接指定工具：&lt;code&gt;openspec init --tools claude&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;-切换工作模式&#34;&gt;🎛️ 切换工作模式
&lt;/h3&gt;&lt;p&gt;OpenSpec 提供两种工作模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Core 模式&lt;/strong&gt;（默认）：3 个核心命令够用，适合大多数项目。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expanded 模式&lt;/strong&gt;：解锁更多细粒度命令（&lt;code&gt;/opsx:new&lt;/code&gt;、&lt;code&gt;/opsx:continue&lt;/code&gt;、&lt;code&gt;/opsx:ff&lt;/code&gt;、&lt;code&gt;/opsx:verify&lt;/code&gt;、&lt;code&gt;/opsx:bulk-archive&lt;/code&gt;、&lt;code&gt;/opsx:onboard&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;切换方法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查看当前配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openspec config profile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 勾选需要的命令（例如 new、continue、ff、verify、bulk-archive、onboard）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 然后让 AI 重新识别&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openspec update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;经验之谈&lt;/strong&gt;：除非项目特别复杂，否则 &lt;strong&gt;Core 模式完全够用&lt;/strong&gt;。命令越多，记忆负担越大，反而拖慢节奏。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-基本使用一个最小例子&#34;&gt;🧪 基本使用：一个最小例子
&lt;/h2&gt;&lt;p&gt;下面用一个最小例子把整套流程跑通。需求是&amp;quot;做一个 CLI 工具，能把文本按行编号输出&amp;quot;。&lt;/p&gt;
&lt;h3 id=&#34;-需求描述&#34;&gt;💡 需求描述
&lt;/h3&gt;&lt;p&gt;在 Claude Code 对话框里输入：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;帮我用 OpenSpec 写一个 CLI 工具，名字叫 &lt;code&gt;linenumber&lt;/code&gt;，支持读取文件路径参数，把每一行加上行号后输出到标准输出。要求：空行也要编号；如果不传文件参数，从 stdin 读取。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;-step-1发起提案&#34;&gt;📋 Step 1：发起提案
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:propose linenumber
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;OpenSpec 会在 &lt;code&gt;openspec/changes/linenumber/&lt;/code&gt; 下生成四个文件。其中 &lt;code&gt;tasks.md&lt;/code&gt; 大致长这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 1. 工程初始化
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 1.1 初始化 Node.js 项目（package.json、bin 入口）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 1.2 解析命令行参数（支持文件路径或 stdin）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 2. 核心逻辑
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 2.1 实现 &lt;span class=&#34;sb&#34;&gt;`numberLines(input: string): string`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 2.2 处理 stdin / 文件两种输入源
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 2.3 空行也要带行号
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 3. 测试
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 3.1 单元测试：numberLines 在空字符串、普通文本、含空行文本下的输出
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 3.2 集成测试：从文件读入、从 stdin 读入
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 4. 文档
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; 4.1 写 README，给出 &lt;span class=&#34;sb&#34;&gt;`linenumber file.txt`&lt;/span&gt; 和 &lt;span class=&#34;sb&#34;&gt;`cat file.txt | linenumber`&lt;/span&gt; 两个示例
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;specs/cli/linenumber/spec.md&lt;/code&gt; 会长这样（节选）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# Capability: linenumber
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## ADDED Requirements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### Requirement: 给文本按行编号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;系统 SHALL 读取输入文本（来自文件参数或 stdin），对每一行加上&amp;#34;行号 + 跳格 + 内容&amp;#34;格式的前缀，并把结果输出到 stdout。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;#### Scenario: 来自文件的普通文本
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; WHEN 用户执行 &lt;span class=&#34;sb&#34;&gt;`linenumber sample.txt`&lt;/span&gt;，且 &lt;span class=&#34;sb&#34;&gt;`sample.txt`&lt;/span&gt; 包含 3 行文本
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; THEN stdout 输出形如 &lt;span class=&#34;sb&#34;&gt;`1\t第一行\n2\t第二行\n3\t第三行`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;#### Scenario: 空行也要带行号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; WHEN 输入包含空行
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; THEN 空行也以行号占位（不跳过）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;关键动作：在这个阶段，&lt;strong&gt;仔细 review 每一个 Scenario&lt;/strong&gt;。如果验收条件不严密，AI 在 apply 阶段就会跑偏。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;-step-2执行实现&#34;&gt;🔧 Step 2：执行实现
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:apply
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;AI 会按 &lt;code&gt;tasks.md&lt;/code&gt; 逐项推进，每完成一项就勾掉一项。期间你也可以随时打断，要求它重写或调整。&lt;/p&gt;
&lt;p&gt;如果你有 TDD 习惯，可以叠加 Superpowers 的 &lt;code&gt;test-driven-development&lt;/code&gt; 技能：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/superpowers:test-driven-development
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;它会强制 AI 走&amp;quot;红-绿-重构&amp;quot;循环，&lt;strong&gt;先写失败测试，再写最小实现&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;-step-3归档变更&#34;&gt;🗃️ Step 3：归档变更
&lt;/h3&gt;&lt;p&gt;实现完成、测试通过后：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opsx:archive linenumber
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;OpenSpec 会自动：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把 &lt;code&gt;changes/linenumber/specs/cli/linenumber/spec.md&lt;/code&gt; 中的 ADDED Requirements 合并到 &lt;code&gt;openspec/specs/cli/linenumber/spec.md&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;删除 &lt;code&gt;openspec/changes/linenumber/&lt;/code&gt; 目录。&lt;/li&gt;
&lt;li&gt;留下一条归档记录，方便日后回溯。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此时 &lt;code&gt;openspec/specs/&lt;/code&gt; 就成了&lt;strong&gt;这个 CLI 工具的活文档&lt;/strong&gt;——任何人 onboarding 都可以直接读 &lt;code&gt;spec.md&lt;/code&gt; 了解这个工具的全部行为。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-命令速查表&#34;&gt;📚 命令速查表
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;命令&lt;/th&gt;
					&lt;th&gt;阶段&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
					&lt;th&gt;是否动代码&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;openspec init&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;初始化&lt;/td&gt;
					&lt;td&gt;初始化 OpenSpec，写入 AI 工具命令&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;openspec config profile&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;配置&lt;/td&gt;
					&lt;td&gt;查看/切换工作模式&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;openspec update&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;配置&lt;/td&gt;
					&lt;td&gt;让 AI 重新识别命令&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:explore&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;设计前&lt;/td&gt;
					&lt;td&gt;与 AI 梳理思路，不产生产物&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:propose &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;设计&lt;/td&gt;
					&lt;td&gt;生成 proposal / design / specs / tasks&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:apply&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;实施&lt;/td&gt;
					&lt;td&gt;按 tasks.md 逐项实现&lt;/td&gt;
					&lt;td&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:archive &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;归档&lt;/td&gt;
					&lt;td&gt;合并 delta 到 specs/，删除变更目录&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:bulk-archive&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;归档&lt;/td&gt;
					&lt;td&gt;一次性归档多个已完成变更&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:onboard&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;学习&lt;/td&gt;
					&lt;td&gt;把现有代码反向生成 specs/ 草稿&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:ff&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;实施&lt;/td&gt;
					&lt;td&gt;Fast Forward，跳过部分审批&lt;/td&gt;
					&lt;td&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/opsx:verify&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;验证&lt;/td&gt;
					&lt;td&gt;让 AI 自检当前实现是否符合 spec&lt;/td&gt;
					&lt;td&gt;✗&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;表中 &lt;code&gt;openspec&lt;/code&gt; 前缀的是 CLI 命令（在终端跑），&lt;code&gt;/opsx:&lt;/code&gt; 前缀的是 Skill 命令（在 AI 对话框里跑）。&lt;strong&gt;别把它们搞混&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-适用场景与局限&#34;&gt;⚠️ 适用场景与局限
&lt;/h2&gt;&lt;h3 id=&#34;-适合用-openspec-的场景&#34;&gt;✅ 适合用 OpenSpec 的场景
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;长期维护的项目&lt;/strong&gt;：规范合并到 &lt;code&gt;specs/&lt;/code&gt; 后就是活文档，新成员 onboarding 直接读 spec 即可。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;需要审计的变更&lt;/strong&gt;：每次新功能都有完整的 &lt;code&gt;proposal.md&lt;/code&gt; + &lt;code&gt;specs/&lt;/code&gt; + &lt;code&gt;tasks.md&lt;/code&gt; 留痕。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多 Agent 协作&lt;/strong&gt;：把 OpenSpec 仓库和任务交给多个 AI 工具，它们读同一份 &lt;code&gt;specs/&lt;/code&gt;，行为是一致的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨会话延续&lt;/strong&gt;：规范是文件系统级的，&lt;strong&gt;新开会话也能立刻接上&lt;/strong&gt;——不依赖对话历史。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-不适合用-openspec-的场景&#34;&gt;❌ 不适合用 OpenSpec 的场景
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;小修小补&lt;/strong&gt;：改文案、修样式、hot fix 走完整流程反而拖慢节奏（参考 [Spec Coding 的踩坑实录](../Spec Coding的踩坑实录/index.zh-cn.md)）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;探索性 PoC&lt;/strong&gt;：需求还没定型，频繁改 spec 成本太高。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只有一两人的小项目&lt;/strong&gt;：维护 spec 的边际收益可能不够抵消写作成本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;强实时性的项目&lt;/strong&gt;：spec 写完到代码合入有延迟，不适合需要快速响应的场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-几条经验&#34;&gt;💎 几条经验
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;propose 的输入质量决定产物质量&lt;/strong&gt;：需求描述越具体，生成的 spec 越准；模糊的输入会产生模糊的 spec。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;apply 之前一定要 review spec&lt;/strong&gt;：设计阶段返工成本低，实现阶段返工成本高 10 倍。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;archive 之前一定要 verify&lt;/strong&gt;：跑测试、对照 spec 逐条勾选验收条件，别让&amp;quot;看起来对&amp;quot;变成&amp;quot;实际对&amp;quot;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;保持 spec 文件的精简&lt;/strong&gt;：每个 Scenario 描述一个具体行为，&lt;strong&gt;不要把 spec 写成&amp;quot;伪代码&amp;quot;&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;配合 TDD 纪律使用&lt;/strong&gt;：OpenSpec 管&amp;quot;做什么&amp;quot;，TDD 管&amp;quot;做得对不对&amp;quot;，两者缺一不可。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&#34;-参考资料&#34;&gt;📖 参考资料
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;OpenSpec 官方仓库：&lt;a class=&#34;link&#34; href=&#34;https://github.com/Fission-AI/OpenSpec&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/Fission-AI/OpenSpec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenSpec 官网：&lt;a class=&#34;link&#34; href=&#34;https://openspec.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://openspec.dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub Spec Kit：&lt;a class=&#34;link&#34; href=&#34;https://github.com/github/spec-kit&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/github/spec-kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AWS Kiro：&lt;a class=&#34;link&#34; href=&#34;https://kiro.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kiro.dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fission-AI 组织：&lt;a class=&#34;link&#34; href=&#34;https://github.com/Fission-AI&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/Fission-AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Spec Coding的踩坑实录</title>
        <link>https://Tyritic.github.io/p/spec-coding%E7%9A%84%E8%B8%A9%E5%9D%91%E5%AE%9E%E5%BD%95/</link>
        <pubDate>Sat, 27 Jun 2026 20:45:00 +0800</pubDate>
        
        <guid>https://Tyritic.github.io/p/spec-coding%E7%9A%84%E8%B8%A9%E5%9D%91%E5%AE%9E%E5%BD%95/</guid>
        <description>&lt;h2 id=&#34;-目前的落地方式&#34;&gt;🛠️ 目前的落地方式
&lt;/h2&gt;&lt;p&gt;SDD（Spec-Driven Development）可以先简单理解成：先写一份“规格说明书”，再让 AI 按照说明书写代码。类比盖房子，就是先画图纸，再让施工队施工。&lt;/p&gt;
&lt;p&gt;目前采用的是 OpenSpec + Superpowers 的融合方案。OpenSpec 负责定义“做什么”（What），产出 proposal、spec、design 等结构化文档；Superpowers 负责“怎么做”（How），用 Skills 推着 AI 走 brainstorming、writing-plans、TDD、code review 这条执行链路。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;ee0c481c-64c6-11f1-8b2b-360751745e63.png&#34; alt=&#34;完整协作流程&#34; width=&#34;78%&#34; /&gt;
&lt;/div&gt;
&lt;p&gt;一开始想得很理想：OpenSpec 像图纸，Superpowers 像施工队，各管一段。但真正跑起来以后，我们发现两套工具不是简单拼起来就能协作，很多地方反而互相抢活。最明显的冲突有三个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Superpowers 的 brainstorming 也会产出 design doc，和 OpenSpec 的 design 职责重叠。&lt;/li&gt;
&lt;li&gt;OpenSpec 里的验收标准，后面又会被 Superpowers 的 TDD plan 转成 test case，原来的 spec 反而不再是主要验证手段。&lt;/li&gt;
&lt;li&gt;两层审批互不信任，开发者经常不知道到底该以哪一层为准。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-不是所有需求都需要-spec-coding有的时候-plan-mode-就足够&#34;&gt;⚖️ 不是所有需求都需要 Spec Coding，有的时候 Plan Mode 就足够
&lt;/h2&gt;&lt;p&gt;业界常说 Spec Coding 有三条铁律：No Spec, No Code；Spec is Truth；Reverse Sync。听起来很合理，实践里却很容易变成误区。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No Spec, No Code。如果需求本身是“一个人半天能搞定”的小任务，写 spec 的时间可能已经超过直接改代码的时间。这时候坚持 no spec no code，最后就变成了为了流程而流程。&lt;/li&gt;
&lt;li&gt;Spec is Truth。Spec 是自然语言写的，AI 再按自己的理解生成代码。中间至少经历两次翻译：人把意图翻译成 spec，AI 把 spec 翻译成 code。每一层都会丢信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;真正能代表系统状态的，不是 spec，而是跑得通、测得过、能在线上工作的代码。&lt;/p&gt;
&lt;h3 id=&#34;-损耗发生在哪里&#34;&gt;📉 损耗发生在哪里
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;第一层损耗：意图 → spec。很多隐性知识很难完整写出来。比如你觉得“余额不能为负”显而易见，但如果没有写进约束里，AI 未必会自动补上。&lt;/li&gt;
&lt;li&gt;第二层损耗：spec → code。AI 对同一段 spec 的理解并不完全稳定。通常能遵循 70%—90%，但复杂需求里，总会有一部分需要人工改。&lt;/li&gt;
&lt;li&gt;两层叠加后，差距会被放大。如果每层损失 20% 信息，最终保真度大概是 0.8 × 0.8 ≈ 64%。这和我们在复杂需求里的体感很接近：生成代码经常需要改 30%—40%。&lt;/li&gt;
&lt;/ul&gt;
&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;31242d5464c711f19b2b9e8f68088af4.png&#34; alt=&#34;完整协作流程&#34; width=&#34;78%&#34; /&gt;
&lt;/div&gt;
相比之下，Plan Mode 是“意图 → 代码”一步到位。人在交互过程中可以随时补充遗漏细节，用即时反馈替代静态文档。对简单任务来说，这种方式的对齐度反而更高。
&lt;p&gt;因此建议做出以下调整&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spec 不追求绝对精确。写得越像代码，成本越接近代码本身。&lt;/li&gt;
&lt;li&gt;Spec 更适合作为“验收基准”，不是“生成蓝图”。它应该回答怎么判断对不对，而不是要求 AI 一比一照抄。&lt;/li&gt;
&lt;li&gt;简单任务优先 Plan Mode，不是偷懒，而是减少中间损耗。&lt;/li&gt;
&lt;li&gt;Code 才是最终事实依据。Spec 更像脚手架，帮 AI 生成第一版，后续真正被维护的是代码和测试。&lt;/li&gt;
&lt;li&gt;过时的 spec 不只是没用，还可能误导 Agent。留在仓库里的错误前提，会变成下一次生成代码时的噪音。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-业界主流-spec-框架不一定适配模型能力&#34;&gt;⚠️ 业界主流 Spec 框架不一定适配模型能力
&lt;/h2&gt;&lt;p&gt;这个坑来自时间错配：工具的默认流程，往往跟不上模型能力的变化。Superpowers、Spec Kit、Kiro 等 SDD 工具，大多是在 2024—2025 年形成的。那时模型还没现在强，确实需要更细的 spec 才能生成可用代码。到了 2026 年，强模型在很多单模块任务里，已经能根据很短的意图描述生成 80% 以上可用代码。&lt;/p&gt;
&lt;p&gt;问题是，很多工具的默认流程还停留在旧假设里：先写大段 spec，再写 design，再写 tasks，再审批，再执行。模型变强后，这套流程的边际收益变低，但写作、阅读、审批、维护成本仍然存在。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;OpenAI Codex 团队（Harness Engineering，2026.02）。他们更强调四象限轻量 prompt：Goal、Context、Constraints、Done-When，再配合 AGENTS.md 约束项目边界。架构一致性靠 linter、structural test 和 CI 守住，而不是靠人反复 review spec。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Anthropic Claude Code 团队。CLAUDE.md 控制在较短篇幅，每个需求主要写验收标准和关键约束，而不是把完整实现方案写成蓝图。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个趋势很明显：模型越强，spec 越薄。真正需要补足的不是流程控制，而是上下文、边界和验证。&lt;/p&gt;
&lt;p&gt;换句话说，更应该追求 More Context, Less Control。Context 是信息，能帮助模型做判断；Control 是流程约束，过多时会变成负担。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-不是只有独立的-spec-文件才是-sdd&#34;&gt;📚 不是只有独立的 Spec 文件才是 SDD
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;实践&lt;/th&gt;
					&lt;th&gt;是不是 Spec&lt;/th&gt;
					&lt;th&gt;为什么&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;OpenSpec 的 &lt;code&gt;spec.md&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;是&lt;/td&gt;
					&lt;td&gt;显式描述 What 的结构化文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Superpowers 的 &lt;code&gt;design doc&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;是&lt;/td&gt;
					&lt;td&gt;描述 What + How 的设计边界&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Plan Mode 的 prompt&lt;/td&gt;
					&lt;td&gt;是&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;先调研、给方案、确认后再写代码&amp;quot;本身就是轻量 spec&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; / &lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;是&lt;/td&gt;
					&lt;td&gt;项目级约束，是持久化的 spec&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;验收测试&lt;/td&gt;
					&lt;td&gt;是&lt;/td&gt;
					&lt;td&gt;可执行的 spec，也是最强的约束形式&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;一句话口头意图&lt;/td&gt;
					&lt;td&gt;边界形态&lt;/td&gt;
					&lt;td&gt;很轻，但仍然在约束实现空间。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;经常有人说：“Plan Mode 不算 SDD，因为它没有写 spec 文件。”也有人说：“Superpowers 才是正统 SDD，因为它有 design doc。”这些说法背后有一个默认前提：只有独立的 spec 文件，才算 Spec-Driven。&lt;/p&gt;
&lt;p&gt;实际上Spec 是一个光谱，不是某一种固定格式。从一句口头意图，到 AGENTS.md，再到验收测试，都是不同浓度的 spec。重新定义 SDD 的成功标准，也许更合理：不是“有没有写 spec 文件”，而是“AI 是否在正确的约束空间内工作”。例如&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Plan Mode 不是没有 spec，而是 spec 和执行发生在同一条交互链里。&lt;/li&gt;
&lt;li&gt;AGENTS.md 不是普通配置文件，它记录的是项目级行为边界。&lt;/li&gt;
&lt;li&gt;TDD 的测试不只是测试，它也是最严格、最可执行的 spec。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-不需要-100-走-spec-流程&#34;&gt;🎯 不需要 100% 走 Spec 流程
&lt;/h2&gt;&lt;p&gt;最开始，默认所有需求都走 Superpowers 完整流程。结果连改一行文案，也要先brainstorming，再生成 design doc，再 review，再写 plan，再 TDD，再执行，再code review。&lt;/p&gt;
&lt;p&gt;对于“一个人半天能搞定”的小需求。它们走完整流程时，brainstorming + design 的时间约等于编码时间的 60%—80%，端到端反而更慢，也就是说，超过一半需求被套上了过重流程。&lt;/p&gt;
&lt;p&gt;更合理的分流方式应该是&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;档位&lt;/th&gt;
					&lt;th&gt;示例&lt;/th&gt;
					&lt;th&gt;更适合的方式&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;零 spec&lt;/td&gt;
					&lt;td&gt;改文案、修样式、hot fix&lt;/td&gt;
					&lt;td&gt;直接改代码&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;轻 spec&lt;/td&gt;
					&lt;td&gt;加筛选项、改接口参数&lt;/td&gt;
					&lt;td&gt;Plan Mode + 一句话意图&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;中 spec&lt;/td&gt;
					&lt;td&gt;新增业务模块、跨人协作&lt;/td&gt;
					&lt;td&gt;验收标准 + 关键约束&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;重 spec&lt;/td&gt;
					&lt;td&gt;架构重构、新系统设计&lt;/td&gt;
					&lt;td&gt;OpenSpec + Superpowers 全流程&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
</description>
        </item>
        <item>
        <title>Spec Coding 的实践指南</title>
        <link>https://Tyritic.github.io/p/spec-coding-%E7%9A%84%E5%AE%9E%E8%B7%B5%E6%8C%87%E5%8D%97/</link>
        <pubDate>Sat, 27 Jun 2026 20:30:00 +0800</pubDate>
        
        <guid>https://Tyritic.github.io/p/spec-coding-%E7%9A%84%E5%AE%9E%E8%B7%B5%E6%8C%87%E5%8D%97/</guid>
        <description>&lt;h2 id=&#34;-让-ai-基础建设&#34;&gt;🏗️ 让 AI 基础建设
&lt;/h2&gt;&lt;h3 id=&#34;-项目背景和环境准备&#34;&gt;🗂️ 项目背景和环境准备
&lt;/h3&gt;&lt;h4 id=&#34;-项目背景&#34;&gt;📖 项目背景
&lt;/h4&gt;&lt;p&gt;本文假设你已经有一个需求，需要使用 Spec Coding 来实现。这个系统引入AI coding的目标很直接:让AI熟知所有规则和业务背景，独立完成从需求分析到代码实现的全流程，人只做设计审核和最终决策。但由于这个系统历史悠久，存在许多历史包袱，并且各个模块开发时间不同，人工编写的代码又缺乏强力的规范，又没有文档传承。人为理解已经是困难至极。
现在最大的难点更在于:如何让AI理解这个系统的复杂业务逻辑，以及各种历史包袱代码。&lt;/p&gt;
&lt;h4 id=&#34;-环境准备&#34;&gt;⚙️ 环境准备
&lt;/h4&gt;&lt;p&gt;本文采用Claude Code作为Agent，Spec Coding 框架选择OpenSpec。同时通过SuperPowers遵循TDD原则，即先写测试，再写实现。&lt;/p&gt;
&lt;h3 id=&#34;-构建ai-coding的背景上下文&#34;&gt;🧱 构建AI Coding的背景上下文
&lt;/h3&gt;&lt;p&gt;在让 AI 接手开发之前，需要完成三项基础建设。这三项工作非常重要，直接影响AI生成的代码质量和准确性。三项工作都可以让 AI 来做初版，然后人工修正，再反过来用修正结果改进代码。&lt;/p&gt;
&lt;h4 id=&#34;-生成项目级claudemd的初稿&#34;&gt;📄 生成项目级CLAUDE.md的初稿
&lt;/h4&gt;&lt;p&gt;使用/init命令生成项目级的CLAUDE.md文件。执行上述命令 Claude Code 会阅读项目源码，输出它理解到的架构约定和模式。这一步通常只能覆盖一部分规则，比如模块结构、包命名、错误处理方式等从代码里就能读出来。&lt;/p&gt;
&lt;h4 id=&#34;-人工补充隐形业务规则&#34;&gt;🧠 人工补充隐形业务规则
&lt;/h4&gt;&lt;p&gt;AI 生成的 CLAUDE.md 初始稿通常只能覆盖一部分业务规则，比如模块结构、包命名、错误处理方式等从代码里就能读出来。人工补充这些规则，是确保 AI 能够正确理解业务逻辑的关键。这些规则需要人工根据业务背景，拆分到规则文件中。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── CLAUDE.md                    # 主入口，指向各规则文件
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── rules/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── code-style.md            # 命名、日志格式、错误处理
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── pipeline-architecture.md # 并发管道约束、统计规范、反模式禁止
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── commands.md              # 子命令基线、共享参数约束、日期默认值规则
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── database-access.md       # 数据库访问规范
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;规则内容必须足够的具体，可映射到真实代码路径，避免写成&amp;quot;要注意性能&amp;quot;这种模凌两可的描述，AI无法执行这种口号。&lt;/p&gt;
&lt;p&gt;最后还要告诉AI要保持维护所有Rules，比如我会在CLAUDE.md中增加以下指令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 更新对应模块代码时同步更新对应的规则文件。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 更新各个模块代码时，必须同步更新对应的文档目录下的文档，以及集成测试目录下的测试用例。       
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;-让ai反向review历史代码&#34;&gt;🔍 让AI反向Review历史代码
&lt;/h4&gt;&lt;p&gt;规则完善后，就可以让 Claude Code 用这套规则扫描所有存量代码，找出不符合规则的地方。此时只需要告诉claude code修复这些问题，它就会触发superpowers的skill自行修复&lt;/p&gt;
&lt;h3 id=&#34;-让ai理解设计理念和业务逻辑&#34;&gt;💡 让AI理解设计理念和业务逻辑
&lt;/h3&gt;&lt;p&gt;规则约束的是&amp;quot;怎么写代码&amp;quot;，但 AI 还需要理解&amp;quot;为什么这样设计&amp;quot;，才能在新需求时做出正确的架构决策。&lt;/p&gt;
&lt;h4 id=&#34;-让ai根据代码生成初版设计文档&#34;&gt;📚 让AI根据代码生成初版设计文档
&lt;/h4&gt;&lt;p&gt;让 Claude Code 阅读模块的所有代码实现，生成三份文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;design.md: 代码架构设计文档，描述当前代码实现下的数据流、预处理规则、退款处理、消费摊销、汇总口径与校验规则，不展开命令行操作说明。&lt;/li&gt;
&lt;li&gt;readme.md: 模块使用说明文档，只描述如何使用此模块的可执行命令，各个功能和参数说明，不涉及业务逻辑。&lt;/li&gt;
&lt;li&gt;user-guide.md: 业务指南文档，用于描述纯粹的业务逻辑，不展开代码细节。
在系统中每个模块都编写对应的三份文档，确保 AI 能够正确理解业务逻辑。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── design.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── readme.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── user-guide.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;-人工审核和修正设计文档&#34;&gt;🛠️ 人工审核和修正设计文档
&lt;/h4&gt;&lt;p&gt;代码里体现不出来的业务背景需要手动补充&lt;/p&gt;
&lt;h4 id=&#34;-让ai根据设计文档再次review代码&#34;&gt;🔁 让AI根据设计文档再次Review代码
&lt;/h4&gt;&lt;p&gt;文档补充完整后，让 AI 对照文档检查代码实现，找出&amp;quot;文档说是这样，代码不是这样&amp;quot;的地方。&lt;/p&gt;
&lt;h3 id=&#34;-补充单元测试和集成测试&#34;&gt;🧪 补充单元测试和集成测试
&lt;/h3&gt;&lt;h4 id=&#34;-让ai-根据代码和文档生成初版单元测试集成测试&#34;&gt;📋 让AI 根据代码和文档生成初版单元测试/集成测试
&lt;/h4&gt;&lt;p&gt;直接对claude code下达指令：
参考提示词如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;根据当前模块的文档和代码，生成单元测试，要求代码覆盖率必须至少达到80%。单元测试中如果遇到需要依赖第三方接口服务或者数据库的情况，统一用mock代替。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;集成测试要分开生成：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;根据当前模块的文档和代码，生成集成测试用例。尽可能覆盖更多的测试场景，设想更多的业务场景。允许你使用xxx数据库地址作为测试库，生成所需的测试数据。所有的测试场景和用例都要落实到文档中记录。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;-人工补充测试场景&#34;&gt;✏️ 人工补充测试场景
&lt;/h4&gt;&lt;p&gt;AI 首次生成的测试用例通常不够完备，同样需要人工review和补充测试用例。但你不需要手动去改代码，你只需要直接告诉claude code补充哪些场景的测试，或者修改测试文档即可。&lt;/p&gt;
&lt;h4 id=&#34;-ai-用测试反向-review-代码&#34;&gt;🎯 AI 用测试反向 review 代码
&lt;/h4&gt;&lt;p&gt;测试跑起来之后，让 AI 分析覆盖率，找出测试暴露的逻辑分支问题，修复后再回归。关键前提：先有充分的设计文档和规则，AI 才能生成高质量测试——知道&amp;quot;这个字段应该是什么值&amp;quot;，而不是只生成结构正确但断言空洞的空壳测试。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-ai-coding实践&#34;&gt;🚀 AI Coding实践
&lt;/h2&gt;&lt;p&gt;完成了规则、文档、测试这三块基础建设，AI大模型基本上已经完全熟悉整个项目了。接下来就可以让 AI 真正接管开发流程了。开发过程中我们主要使用openspec的指令作为入口即可，superpowers的skills集合是在各个阶段自动触发的，无需手动调用。&lt;/p&gt;
&lt;h3 id=&#34;-使用openspec提案&#34;&gt;📝 使用OpenSpec提案
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;命令： /opsx:propose&lt;/li&gt;
&lt;li&gt;关键技巧：/opsx:propose 的输入质量直接决定生成工件的质量。模糊输入和具体输入的差距很大：一定要注意需求描述要足够具体，openspec 就能一次生成完整的文档，否则可能需要多次来回的沟通调整。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-人工审核提案&#34;&gt;🧐 人工审核提案
&lt;/h3&gt;&lt;p&gt;在上一步产生的文档经过人工审核通过之后，接下来就是实施阶段。在执行 /opsx:apply 之前，必须认真审读 design.md和各个spec.md文档，给claude code提出反馈。
这一步非常关键：设计阶段发现的问题，改起来通常只需要更新文档。但如果实现到一半才发现设计有缺陷，代价高出一个数量级。&lt;/p&gt;
&lt;h3 id=&#34;-创建worktree执行-apply&#34;&gt;🌿 创建worktree，执行 apply
&lt;/h3&gt;&lt;p&gt;在启动 Claude Code 时通过 &amp;ndash;worktree 创建隔离工作区，或使用 superpowers:using-git-worktrees skill：
参考提示词&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 方式一：启动时创建 worktree
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude --worktree
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 方式二：在 Claude Code 中使用 skill
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# /superpowers:using-git-worktrees
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;工作区隔离后，使用类似以下Prompt执行&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;开始实施，整体流程使用`openspec-apply-change` skill，写代码时使用`subagent-driven-development`这个skill
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;此举触发superpowers的相关skills，开始执行任务。比如 subagent-driven-development 会创建多个子agent开始并行执行不同任务。&lt;/p&gt;
&lt;h3 id=&#34;-subagent-driven-development-的工作机制&#34;&gt;🤖 subagent-driven-development 的工作机制
&lt;/h3&gt;&lt;p&gt;对每个任务，superpowers skill 会依次循环三层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implementer subagent（内嵌 TDD）:每个任务派遣一个独立的 Implementer subagent，它内部强制执行红绿重构循环：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Step 1: 写一个失败的测试（RED）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Step 2: 运行测试，确认失败（必须看到失败，不能跳过）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Step 3: 写最小实现代码（GREEN）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Step 4: 运行测试，确认通过
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Step 5: 重构，保持绿色
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Step 6: 提交，报告状态（DONE / NEEDS_CONTEXT / BLOCKED）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Spec Reviewer subagent: Implementer 完成后，派遣 Spec Reviewer 独立读代码，逐行对比 spec 和实现，验证&amp;quot;构建了被要求的（不多不少）&amp;quot;。这个 reviewer 不信任 Implementer 的声明，自己读代码验证。&lt;/li&gt;
&lt;li&gt;Code Quality Reviewer subagent: Spec 审核通过后，派遣 Code Quality Reviewer，验证是否&amp;quot;构建足够得好&amp;quot;：
&lt;ul&gt;
&lt;li&gt;文件职责清晰，可以独立理解&lt;/li&gt;
&lt;li&gt;测试测的是真实代码而非 mock&lt;/li&gt;
&lt;li&gt;没有创建不必要的巨型文件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;任一审核不通过 → Implementer 修复 → 重新审核，直到两层都通过。&lt;/p&gt;
&lt;h3 id=&#34;-完成验证&#34;&gt;✅ 完成验证
&lt;/h3&gt;&lt;p&gt;所有任务完成后，superpowers的verification-before-completion skill 会开始介入，要求：运行完整测试套件，贴出实际输出，才能做&amp;quot;完成&amp;quot;声明。&lt;/p&gt;
&lt;h3 id=&#34;-归档&#34;&gt;📦 归档
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;命令:/opsx:archive
完成代码验收之后将 openspec 文档（proposal design specs / tasks）提交到 master 分支，形成可回溯的变更记录。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-完整协作流程&#34;&gt;🔄 完整协作流程
&lt;/h2&gt;&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;bf13394c2d1411f1861d42619244becf.png&#34; alt=&#34;完整协作流程&#34; width=&#34;78%&#34; /&gt;
&lt;/div&gt;
&lt;p&gt;蓝色节点是 openspec 指令，绿色节点是 superpowers skill 自动触发点。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Spec Coding 的定义</title>
        <link>https://Tyritic.github.io/p/spec-coding-%E7%9A%84%E5%AE%9A%E4%B9%89/</link>
        <pubDate>Sat, 27 Jun 2026 20:00:00 +0800</pubDate>
        
        <guid>https://Tyritic.github.io/p/spec-coding-%E7%9A%84%E5%AE%9A%E4%B9%89/</guid>
        <description>&lt;h2 id=&#34;-写在前面ai-编程缺的不是模型是图纸&#34;&gt;🧠 写在前面：AI 编程缺的不是模型，是图纸
&lt;/h2&gt;&lt;p&gt;2024 年到 2026 年这两年，我用 Claude Code、Cursor、Copilot 写过的代码比过去十年加起来都多。但越用越清楚地意识到一件事：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI 不缺写代码的能力，缺的是一张&amp;rsquo;图纸&amp;rsquo;。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vibe Coding 的爽感我们都体会过——敲一句&amp;quot;做个登录页&amp;quot;，五秒钟出 HTML。Demo 截图发到群里人人点赞。但只要把这段代码接进真实项目，问题就接踵而至：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;上下文漂移&lt;/strong&gt;：改了一个文件，三处不相关的代码跟着坏。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;需求漂移&lt;/strong&gt;：你说&amp;quot;登录支持手机号&amp;quot;，AI 默认走了 OAuth 流程。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识孤岛&lt;/strong&gt;：昨天为什么这么设计，没人记得——AI 不记得，你自己也不记得。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;质量不稳&lt;/strong&gt;：同样的需求，时好时坏，全看模型心情。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;协作断点&lt;/strong&gt;：同事接手时只能对着代码反推意图，最后的结论往往是&amp;quot;别动这段&amp;quot;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些痛点指向同一个结论：&lt;strong&gt;AI 编程的下一个瓶颈不是模型能力，而是&amp;quot;人机协作的工程方法论&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.blog/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub&lt;/a&gt; 在 2025 年正式把这套方法论命名为 &lt;strong&gt;Spec-Driven Development（SDD）&lt;/strong&gt;，社区里更口语化的叫法是 &lt;strong&gt;Spec Coding&lt;/strong&gt;——用规格驱动编码。&lt;/p&gt;
&lt;p&gt;这篇文章是我对 Spec Coding 的一份系统化实践笔记，重点不在某一个具体工具，而在&lt;strong&gt;它作为一种开发范式，到底解决了什么、要怎么落地、有什么坑&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-什么是-spec-coding&#34;&gt;⚖️ 什么是 Spec Coding
&lt;/h2&gt;&lt;h3 id=&#34;-定义与定位&#34;&gt;📖 定义与定位
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Spec Coding&lt;/strong&gt;（或 SDD, Spec-Driven Development）是一种&lt;strong&gt;把&amp;quot;可执行的规格&amp;quot;置于软件开发生命周期中心&lt;/strong&gt;的工程实践。它借鉴了传统软件工程中&amp;quot;契约优先&amp;quot;（Contract-First）的思想，但做了关键升级：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;规格不再是静态文档&lt;/strong&gt;，而是与代码一同演进、版本化、可被 AI 直接消费的活工件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码不再是 Source of Truth&lt;/strong&gt;，而是规格的&amp;quot;最后一公里输出&amp;quot;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 不是替代者&lt;/strong&gt;，而是被规格约束的&amp;quot;高级实现者&amp;quot;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一句话概括：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;过去是先写代码再补文档；现在反过来——先写规格，代码只是规格的编译产物。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;-spec-coding-vs-vibe-coding&#34;&gt;🔍 Spec Coding vs Vibe Coding
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Vibe Coding&lt;/th&gt;
					&lt;th&gt;Spec Coding&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;核心信念&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;AI 心领神会&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;规格是契约&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;输入形态&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;自然语言提示&lt;/td&gt;
					&lt;td&gt;结构化规格文档&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;上下文管理&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;靠对话历史&lt;/td&gt;
					&lt;td&gt;靠版本化的文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;决策可追溯&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;不可追溯&lt;/td&gt;
					&lt;td&gt;每个决策都有据可查&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;变更成本&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;改一处牵全身&lt;/td&gt;
					&lt;td&gt;改规格 → 重新生成&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;适合场景&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Demo、探索、PoC&lt;/td&gt;
					&lt;td&gt;真实项目、长期维护、协作&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;典型代表&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Cursor 自由对话&lt;/td&gt;
					&lt;td&gt;Spec Kit / Kiro / OpenSpec&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;它们不是对立关系，是不同阶段的工具&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想快速验证一个想法 → Vibe Coding 更轻。&lt;/li&gt;
&lt;li&gt;想把想法变成可交付、可维护的产品 → Spec Coding 更稳。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;社区里越来越多人把 Spec Coding 视为 Vibe Coding 的&amp;quot;工业化升级版&amp;quot;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-核心工作流specify--plan--tasks--implement&#34;&gt;🔄 核心工作流：Specify → Plan → Tasks → Implement
&lt;/h2&gt;&lt;p&gt;主流 SDD 框架（GitHub Spec Kit、AWS Kiro、OpenSpec）虽然在命令名上略有差异，但底层都收敛到了同一个四阶段工作流：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Specify  →  Plan  →  Tasks  →  Implement
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;（定目标）  （定方案）  （拆任务）  （按规格实现）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;每一个阶段都遵循**人在环路（Human-in-the-Loop）**原则：必须由人审阅、批准，才进入下一阶段。&lt;/p&gt;
&lt;h3 id=&#34;-阶段一specify定目标&#34;&gt;🛠️ 阶段一：Specify（定目标）
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;回答的问题&lt;/strong&gt;：我们要解决什么问题？给谁用？成功的标准是什么？&lt;/p&gt;
&lt;p&gt;这一阶段&lt;strong&gt;不涉及任何技术选型&lt;/strong&gt;，只关注：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户故事（User Story）&lt;/li&gt;
&lt;li&gt;业务目标（Goal）&lt;/li&gt;
&lt;li&gt;验收标准（Acceptance Criteria）&lt;/li&gt;
&lt;li&gt;边界条件与异常场景&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;输出通常是一份 &lt;code&gt;spec.md&lt;/code&gt;，语言要&amp;quot;无歧义、可测试&amp;quot;。AWS Kiro 在这一步使用 &lt;a class=&#34;link&#34; href=&#34;https://alistairmavin.com/ears/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;EARS&lt;/a&gt;（Easy Approach to Requirements Syntax）格式，能让 AI 自动生成覆盖边角情况的验收条件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Feature: 用户注册
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### US-1 注册新账号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; WHEN 用户提交合法的邮箱与密码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; THEN 系统创建账号并发送验证邮件
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; AND 5 秒内返回 201
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### 边界情况
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; WHEN 邮箱已被注册
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; THEN 返回 409 Conflict
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; AND 提示&amp;#34;该邮箱已注册&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-阶段二plan定方案&#34;&gt;🧩 阶段二：Plan（定方案）
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;回答的问题&lt;/strong&gt;：在已知的约束下，怎么实现？&lt;/p&gt;
&lt;p&gt;这一阶段把&amp;quot;业务目标&amp;quot;翻译成&amp;quot;技术决策&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;技术栈（语言、框架、数据库）&lt;/li&gt;
&lt;li&gt;架构风格（单体 / 微服务 / Serverless）&lt;/li&gt;
&lt;li&gt;关键依赖（第三方服务、合规要求）&lt;/li&gt;
&lt;li&gt;性能与安全目标&lt;/li&gt;
&lt;li&gt;风险点与备选方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;输出通常是 &lt;code&gt;plan.md&lt;/code&gt;，可以&lt;strong&gt;并列多个方案&lt;/strong&gt;让 AI 比较。比如：&amp;ldquo;用 Postgres 全文检索 vs. 用 ElasticSearch&amp;rdquo;——AI 会根据 Spec 给出权衡分析。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 技术方案
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 框架：Go 1.22 + Gin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 数据库：PostgreSQL 16
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 缓存：Redis
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 部署：Docker + Kubernetes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 鉴权：JWT + Refresh Token
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 关键风险：邮件发送失败的重试策略
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-阶段三tasks拆任务&#34;&gt;⚙️ 阶段三：Tasks（拆任务）
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;回答的问题&lt;/strong&gt;：怎么把方案变成可执行、可验收的小步骤？&lt;/p&gt;
&lt;p&gt;这一阶段&lt;strong&gt;不写代码&lt;/strong&gt;，只生成任务清单。Spec Kit / Kiro 在这一步生成的 &lt;code&gt;tasks.md&lt;/code&gt; 通常长这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T001 创建数据库表 &lt;span class=&#34;sb&#34;&gt;`users`&lt;/span&gt;（含唯一索引）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T002 实现 &lt;span class=&#34;sb&#34;&gt;`POST /api/v1/register`&lt;/span&gt; 路由
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T003 集成邮件服务（带重试）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T004 写单元测试（密码强度校验）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T005 写集成测试（注册 → 验证 → 登录）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T006 在 staging 环境跑一遍 e2e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;关键纪律&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个任务 2~5 分钟可以完成&lt;/li&gt;
&lt;li&gt;任务之间有清晰依赖&lt;/li&gt;
&lt;li&gt;每个任务有明确&amp;quot;完成&amp;quot;的定义（DoD）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不写代码&lt;/strong&gt;——代码是下一阶段的事&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-阶段四implement按规格实现&#34;&gt;🚀 阶段四：Implement（按规格实现）
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;回答的问题&lt;/strong&gt;：让 AI 在规格约束下，把任务逐个变成代码。&lt;/p&gt;
&lt;p&gt;这一阶段 AI 才真正开始写代码，但它会&lt;strong&gt;严格对照前面的 Spec/Plan/Tasks&lt;/strong&gt;。如果发现实现与规格冲突，应该回头改规格，而不是偷偷改逻辑。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一个常见的纪律：&lt;strong&gt;任何偏离 Spec 的实现，都必须先回退到 Spec 修改并重新走批准流程&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;实践上还可以叠加 TDD、子代理并行、Code Review 等纪律——这部分可以参考 &lt;a class=&#34;link&#34; href=&#34;../Superpowers%e4%b8%8eOpenSpec%e7%9a%84%e9%85%8d%e5%90%88%e4%bd%bf%e7%94%a8/index.zh-cn.md&#34; &gt;Superpowers 与 OpenSpec 的配合使用&lt;/a&gt; 一文。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-实践示例做一个-cli-todo-应用&#34;&gt;🧪 实践示例：做一个 CLI Todo 应用
&lt;/h2&gt;&lt;p&gt;把上面四阶段跑一遍。需求是&amp;quot;做一个命令行 Todo 工具，支持增删改查与本地持久化&amp;quot;。&lt;/p&gt;
&lt;h3 id=&#34;-step-1明确业务目标&#34;&gt;💡 Step 1：明确业务目标
&lt;/h3&gt;&lt;p&gt;先用一句话把目标写清楚：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;给我做一个 CLI 工具，名字叫 &lt;code&gt;todo&lt;/code&gt;，支持添加、列出、完成、删除 Todo，数据存本地 JSON 文件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后让 AI 协助扩成结构化的 &lt;code&gt;spec.md&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## 功能需求
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### US-1 添加 Todo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; WHEN 用户运行 &lt;span class=&#34;sb&#34;&gt;`todo add &amp;#34;买牛奶&amp;#34;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; THEN 在 todos.json 中追加一条 &lt;span class=&#34;sb&#34;&gt;`{id, content, done=false, created_at}`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; AND 输出 &amp;#34;已添加 &lt;span class=&#34;ni&#34;&gt;#1:&lt;/span&gt; 买牛奶&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### US-2 列出 Todo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; WHEN 用户运行 &lt;span class=&#34;sb&#34;&gt;`todo list`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; THEN 按 id 升序列出所有未完成 Todo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; AND 每行格式 &lt;span class=&#34;sb&#34;&gt;`[#id] [ ] content`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### US-3 标记完成
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; WHEN 用户运行 &lt;span class=&#34;sb&#34;&gt;`todo done 1`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; THEN 把 id=1 的 Todo 标记为 done
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; AND 输出 &amp;#34;已完成 &lt;span class=&#34;ni&#34;&gt;#1:&lt;/span&gt; 买牛奶&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### 边界情况
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 当 todos.json 不存在时，自动创建
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 当 id 不存在时，提示 &amp;#34;未找到该 Todo&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 当 JSON 损坏时，备份原文件并重新创建
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-step-2编写规格&#34;&gt;🔹 Step 2：编写规格
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;plan.md&lt;/code&gt;（技术方案）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 语言：Go 1.22
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 第三方依赖：仅 &lt;span class=&#34;sb&#34;&gt;`spf13/cobra`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 存储：本地 JSON 文件，路径 &lt;span class=&#34;sb&#34;&gt;`~/.todo/todos.json`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 并发：单进程，不需要锁
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; 测试：表格驱动 + golden file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-step-3拆解任务&#34;&gt;📐 Step 3：拆解任务
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;tasks.md&lt;/code&gt;（任务清单）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T001 初始化 Go module 与 cobra 骨架
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T002 实现 &lt;span class=&#34;sb&#34;&gt;`add`&lt;/span&gt; 子命令
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T003 实现 &lt;span class=&#34;sb&#34;&gt;`list`&lt;/span&gt; 子命令
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T004 实现 &lt;span class=&#34;sb&#34;&gt;`done`&lt;/span&gt; 子命令
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T005 实现 &lt;span class=&#34;sb&#34;&gt;`del`&lt;/span&gt; 子命令
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T006 实现 storage 层（load/save/append）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T007 写单测覆盖所有命令
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; T008 跑 go vet / go test / go build
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-step-4交付与验证&#34;&gt;✅ Step 4：交付与验证
&lt;/h3&gt;&lt;p&gt;把四份文档喂给 Claude Code，让它按 &lt;code&gt;tasks.md&lt;/code&gt; 逐项实现，每个任务完成后自动跑测试：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 提示词示例（使用 Claude Code + Spec Kit）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$spec&lt;/span&gt;-kit implement
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;AI 写完一个任务，会自检：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是不是严格按 &lt;code&gt;spec.md&lt;/code&gt; 实现？&lt;/li&gt;
&lt;li&gt;单测是否覆盖了所有验收条件？&lt;/li&gt;
&lt;li&gt;是否触犯了 &lt;code&gt;plan.md&lt;/code&gt; 中的&amp;quot;约束清单&amp;quot;？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果发现规格本身漏了边界情况（比如&amp;quot;删除已完成的 Todo 要二次确认&amp;quot;），就&lt;strong&gt;回头改 Spec&lt;/strong&gt;，让规格成为唯一真相。&lt;/p&gt;
&lt;p&gt;最终交付物：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 份 Markdown 文档（spec / plan / tasks / constitution）&lt;/li&gt;
&lt;li&gt;一个可用的二进制 &lt;code&gt;todo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;一份与 Spec 一一对应的测试报告&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-工具链速览&#34;&gt;💻 工具链速览
&lt;/h2&gt;&lt;p&gt;SDD 在 2025-2026 年迎来了一波工具爆发。这里按定位简单梳理：&lt;/p&gt;
&lt;h3 id=&#34;-github-spec-kit&#34;&gt;🎯 GitHub Spec Kit
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;当前最主流的开源 SDD 框架&lt;/strong&gt;。Python CLI 工具，原生支持 GitHub Copilot，兼容 Claude Code、Gemini CLI、Amazon Q 等 30+ AI 编码代理。&lt;/p&gt;
&lt;p&gt;四阶段流程：&lt;strong&gt;Specify → Plan → Tasks → Implement&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;最独特的设计是 &lt;strong&gt;Constitution（宪法）&lt;/strong&gt;——一份放在项目根目录的长效文档，定义架构原则、编码规范、安全要求。AI 每次开发都必须遵守。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool install spec-kit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;specify init my-project
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;适合：想入门 SDD 的团队，已有 IDE 体系，不想切换工具链。&lt;/p&gt;
&lt;h3 id=&#34;-aws-kiro&#34;&gt;🤝 AWS Kiro
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;最&amp;quot;原生&amp;quot;的规格驱动 AI IDE&lt;/strong&gt;。基于 Code OSS（VS Code 同源）构建，但要求开发者先正式定义需求，再进入开发。&lt;/p&gt;
&lt;p&gt;三阶段流程：&lt;strong&gt;Requirements → Design → Tasks&lt;/strong&gt;，每阶段用 EARS 格式描述，自动生成用户故事、验收条件、边界场景。&lt;/p&gt;
&lt;p&gt;独有 &lt;strong&gt;Agent Hooks&lt;/strong&gt;——事件驱动的自动化系统，保存文件后自动跑测试、刷新 README、执行安全扫描。&lt;/p&gt;
&lt;p&gt;适合：企业级团队，需要正式 SDD 流程，多人协作的复杂项目。&lt;/p&gt;
&lt;h3 id=&#34;-bmad-method&#34;&gt;🏗️ BMAD-METHOD
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;最&amp;quot;团队化&amp;quot;的多 Agent 开发框架&lt;/strong&gt;。MIT 开源，内部编排 12+ AI 角色（产品经理、架构师、UX、Developer、QA、Scrum Master），Agent 之间通过文件&amp;quot;交接棒&amp;quot;完成交付。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;需求 → 设计 → 开发 → 测试 → 交付
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;适合：大型团队，多角色协作，需要严格流程的组织。&lt;/p&gt;
&lt;h3 id=&#34;-其他值得关注的工具&#34;&gt;📚 其他值得关注的工具
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;工具&lt;/th&gt;
					&lt;th&gt;定位&lt;/th&gt;
					&lt;th&gt;一句话总结&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;OpenSpec&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;变更管理专家&lt;/td&gt;
					&lt;td&gt;提案式流程，&lt;code&gt;ADDED/MODIFIED/REMOVED&lt;/code&gt; 增量标记&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Augment Code&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;大规模代码上下文&lt;/td&gt;
					&lt;td&gt;Context Engine 维护 40 万+ 文件级架构理解&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;TaskFlow&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;任务编排&lt;/td&gt;
					&lt;td&gt;把 Spec 拆成 DAG，让多个 AI Worker 并行执行&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Claude Code Spec Mode&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;轻量级 Spec&lt;/td&gt;
					&lt;td&gt;内置于 Claude Code，适合个人开发者&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;工具只是手段，不是目的。&lt;strong&gt;先想清楚你的 Spec 应该长什么样，再选工具&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-常见陷阱与最佳实践&#34;&gt;⚠️ 常见陷阱与最佳实践
&lt;/h2&gt;&lt;p&gt;Spec Coding 不是银弹。方法论选错了，文档反而比代码更难维护。&lt;/p&gt;
&lt;h3 id=&#34;-陷阱一把-spec-写成伪代码&#34;&gt;❌ 陷阱一：把 Spec 写成&amp;quot;伪代码&amp;quot;
&lt;/h3&gt;&lt;p&gt;最常见的失败模式是——Spec 写得太细，直接写 SQL、建表语句、函数签名。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# 错误示例
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;function register(email, password) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  const hash = bcrypt(password, 10);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  return db.query(&lt;span class=&#34;sb&#34;&gt;`INSERT INTO users ...`&lt;/span&gt;, [email, hash]);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;为什么有问题&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spec 变成了&amp;quot;另一种代码&amp;quot;，AI 写代码时直接照抄，失去意义。&lt;/li&gt;
&lt;li&gt;改业务逻辑要改两份（Spec + 实现），维护成本反而更高。&lt;/li&gt;
&lt;li&gt;评审 Spec 等于评审代码，门槛变高，参与人变少。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：Spec 关注&lt;strong&gt;意图与验收条件&lt;/strong&gt;，不关注实现细节。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# 正确示例
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WHEN 用户提交合法邮箱与密码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;THEN 系统创建账号并发送验证邮件
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AND 5 秒内返回 201
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;-陷阱二跳过-plan-直接写代码&#34;&gt;🔁 陷阱二：跳过 Plan 直接写代码
&lt;/h3&gt;&lt;p&gt;很多人写完 Spec 就急着让 AI 写代码，跳过 Plan 阶段。结果：AI 自由发挥，技术栈与项目现状脱节。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：Plan 阶段是&amp;quot;防 AI 跑偏&amp;quot;的最后一道闸。再小的项目，也要回答三个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;技术栈是什么？&lt;/li&gt;
&lt;li&gt;有没有不能用的依赖？&lt;/li&gt;
&lt;li&gt;性能/安全底线是什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;-最佳实践总结&#34;&gt;💎 最佳实践总结
&lt;/h3&gt;&lt;p&gt;最后是几条在真实项目里验证过的经验：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spec 写在版本控制里&lt;/strong&gt;：与代码同仓库，PR 时一起 Review。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constitution 是项目宪法&lt;/strong&gt;：定义&amp;quot;AI 永远不能违反的规则&amp;quot;，比如&amp;quot;不允许用 &lt;code&gt;any&lt;/code&gt;&amp;quot;、&amp;ldquo;不允许直接 &lt;code&gt;rm -rf&lt;/code&gt;&amp;quot;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务粒度 2~5 分钟&lt;/strong&gt;：太大的任务 AI 容易跑偏；太小又失去意义。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;规格变了，先 PR Spec&lt;/strong&gt;：实现跟着 Spec 走，不要反过来。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spec 也是产品文档&lt;/strong&gt;：业务方、PM、QA 都能看懂同一份 Spec。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不要追求&amp;quot;完整 Spec&amp;rdquo;&lt;/strong&gt;：80% 的清晰度已经能换来 80% 的可靠性，最后 20% 让实现阶段补。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vibe Coding 与 Spec Coding 混用&lt;/strong&gt;：探索阶段用 Vibe，确定方案后切到 Spec。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-总结&#34;&gt;📝 总结
&lt;/h2&gt;&lt;p&gt;回到开头那句话：&lt;strong&gt;AI 编程缺的不是模型，是图纸&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Spec Coding 不是要取代 Vibe Coding，而是给&amp;quot;自由探索&amp;quot;配上一条&amp;quot;工业化产线&amp;quot;。当你有了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一份清晰的 Spec（业务目标）&lt;/li&gt;
&lt;li&gt;一份严谨的 Plan（技术方案）&lt;/li&gt;
&lt;li&gt;一份可验证的 Tasks（任务清单）&lt;/li&gt;
&lt;li&gt;一份长效的 Constitution（项目宪法）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI 就不再是&amp;quot;凭感觉的代码打字机&amp;quot;，而是一个&lt;strong&gt;严格按图纸施工的工程师&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;未来一两年，随着模型能力的进一步提升，&lt;strong&gt;瓶颈会更集中在 Spec 的质量上&lt;/strong&gt;。会写 Spec 的开发者，会比会写代码的开发者更稀缺。&lt;/p&gt;
&lt;p&gt;如果你还没试过，可以从一个小工具开始：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;找一个本周要做的小功能&lt;/li&gt;
&lt;li&gt;花 20 分钟写一份 Spec&lt;/li&gt;
&lt;li&gt;让 Claude Code 按 Spec 实现&lt;/li&gt;
&lt;li&gt;体会一下&amp;quot;几乎一次跑通&amp;quot;的感觉&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;你会发现，&lt;strong&gt;写 Spec 的过程本身，就是一次深度思考&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;延伸阅读：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;../Superpowers%e4%b8%8eOpenSpec%e7%9a%84%e9%85%8d%e5%90%88%e4%bd%bf%e7%94%a8/index.zh-cn.md&#34; &gt;Superpowers 与 OpenSpec 的配合使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Claude Code 最佳实践](../Claude Code最佳实践/index.zh-cn.md)&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/github/spec-kit&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub Spec Kit 官方仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://kiro.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AWS Kiro 官方介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://alistairmavin.com/ears/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;EARS 需求描述规范&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
