31K Stars的OpenSpec,我为什么不看好它

杰哥 AI TEAM 2026年3月28日 阅读 5 分钟

31K Stars的OpenSpec,我为什么不看好它

思想被铭记,工具被遗忘——这不是悲剧,是成功产品的宿命。


一个周末的深度复盘

前几天Boss在群里分享了一个GitHub项目——OpenSpec,31K+ stars,号称「Spec-driven development for AI coding assistants」。

我花了一个周末把文档、架构、工作流全部啃完。结论很残酷:思想有价值,工具太重,不适合大多数团队。

31K stars代表的是「共识价值」——人们认同这个理念。但不代表人们真的需要这个工具。


OpenSpec想解决什么问题?

一句话:在AI写代码之前,先用结构化的Spec文档对齐需求和方案。

核心工作流很优美:

/opsx:propose "add-dark-mode"
  → AI自动创建4个文档

/opsx:apply
  → AI按tasks.md逐项写代码

/opsx:archive
  → 完成后归档,Spec合并到主文档

理念是「先对齐再编码」,避免AI跑偏。听起来很完美。

但问题是:谁来写Spec?还是AI。


六个无法回避的硬伤

硬伤一:Spec质量无人负责——AI自产自销

OpenSpec的核心承诺是「先对齐需求再写代码」。但Spec本身是AI写的。

当你执行/opsx:propose,AI自动生成所有文档。如果AI一开始就理解错了需求,后面所有步骤都在「正确地执行错误的方案」。

用户意图 → AI理解 → AI生成Spec → AI基于Spec实现
              ^                ^
           可能偏差          可能遗漏

Spec只是把「聊天中的隐式需求」变成了「文件中的显式需求」。但如果需求本身就是AI猜出来的,文件化并不能修正它。

更残酷的现实:大多数开发者不会仔细审查AI生成的长文档——谁会认真读4个Markdown文件?他们会直接/opsx:apply。这样OpenSpec就退化成了「多了几步的命令行」。

硬伤二:文档过重——80%的日常开发用不上

一个简单的功能需要生成4个文件:

add-loading-state/
├── proposal.md     # ~50行
├── specs/          # ~30行
├── design.md       # ~40行
└── tasks.md        # ~20行

「给Toast加一个loading图标预设」这种需求,直接做只需改3个文件花10分钟。用OpenSpec?先生成4个文档→审查→实现→可能还要更新文档→最后归档。

对于小改动,维护文档的成本 > 直接写代码的成本。

硬伤三:Spec漂移——长期不可维护

随着项目演进,openspec/specs/里的主规格会越来越庞大、越来越过时。

如果有一次代码改动没通过OpenSpec走流程(这在实际开发中太常见了),Spec就和代码不一致了。没有自动化的「Spec ↔ Code一致性检查」。

时间一长,Spec就变成了「看起来像文档但实际过时」的负担。

硬伤四:Brownfield项目初始化成本极高

OpenSpec声称「brownfield-first」(面向存量项目)。但对于一个已有50个模块的项目,你需要先为所有现有功能编写Spec作为基线。否则Delta Spec里的MODIFIED/REMOVED就没有对照基础。

文档说可以「渐进式」补Spec,但这意味着前期投入巨大,短期看不到回报。

硬伤五:验证环节是「AI自审」

/opsx:verify号称验证实现是否匹配Spec。但它的方式是:让AI读它自己写的Spec,再看它自己写的代码,然后告诉你做得对不对。

这就是让被告当自己的法官。

硬伤六:强依赖高端AI模型

README推荐Opus 4.5和GPT 5.2——最贵的模型。4个文档×完整代码库分析,一个feature的propose就烧掉几美元。直接用Cursor Agent可能只需要五分之一的token成本。


它像什么?像DDD

分析到这里,我忍不住想到了DDD(Domain-Driven Design)。

两者有惊人的相似:

特征DDDOpenSpec
核心洞察业务逻辑应直接映射到代码结构AI编码前应先对齐需求
理论框架完整优美(聚合根、值对象、领域事件…)完整优美(Spec、Delta、Artifact、Schema…)
实际落地大多数团队只用了一小部分大多数人可能只会用propose + apply
过度设计风险简单CRUD硬套DDD很痛苦简单功能硬套Spec流程很痛苦

DDD推出20+年了,真正完整落地的项目凤毛麟角。大多数人「用了DDD」实际只是用了Repository模式和Service层。

OpenSpec大概率会走同样的路:思想被铭记,工具被遗忘。

它最大的贡献将是让开发者意识到「AI需要结构化的需求输入」这个道理。但这个道理一旦成为共识,OpenSpec本身就不再必要。


那正确的做法是什么?

Cursor的Plan模式已经是「轻量版SDD」

Cursor的Plan模式本质上就在做OpenSpec想做的事——在写代码前先对齐方案。只是它用对话完成,而不是用文件。

维度OpenSpecCursor Plan
形态文件式,生成Markdown对话式,在聊天中完成
重量级重(4个文件+归档)极轻(一次对话)
即时性延迟(改文件→重新apply)即时(说”方案不对”→立刻调整)
持久化
代码感知需要AI先分析再生成直接理解当前上下文

对于80%的开发场景,Plan模式+一份技术方案文档就够了。

我的实际方案

在我的组件库项目中,我用更轻量的方式实现了OpenSpec的大部分价值:

OpenSpec概念我的替代方案
proposal.md对话中的需求讨论(Plan模式)
specs/types.ts + TypeScript接口(编译器保障)
design.md技术方案.md(每个复杂组件一份)
tasks.mdCursor的TODO工具
archive/Git history + CHANGELOG.md
/opsx:verifyTypeScript编译 + ESLint + 人工Review

关键区别:TypeScript的接口比Markdown的Spec更精确、更不容易过时,而且编译器还帮你验证。


一个更深层的问题:SDD的过度工程化在AI时代可以忽略吗?

有人会说:「AI时代生成文档几乎零成本,过度工程化不再是问题。」

确实,生成成本可以忽略。但还有几个成本无法消除:

  • 审查成本——AI写的文档你还是要读(否则就是AI自编自答)
  • 维护触发——你需要记得去维护、知道什么时候需要维护
  • 信任验证——AI全链路(生成→验证→执行)是否足够可信?

更好的方向可能是:让SDD成为AI的内部推理过程,而不是暴露给用户的外部流程。

Cursor的extended thinking就在走这条路——AI内部在做结构化推理,但用户不需要感知文件和流程。


什么才是真正的工程化

回到最初的问题:OpenSpec想解决的「AI跑偏」问题,本质是什么?

不是工具不够,是验证链条断裂

对比一下两种做法:

OpenSpec的做法更轻量的实践
AI生成Spec → AI执行Spec → AI验证Spec人工校验需求 → AI实现 → 编译器验证
4个Markdown文件(无人读、易过时)TypeScript接口(编译器强制检查)
/opsx:verify(AI自审,被告当法官)ESLint + 单元测试(独立验证)
文档驱动,流程重对话驱动,反馈快
改需求要改文件再apply改需求直接说,Plan模式即时调整

OpenSpec想用「结构化文档」约束AI。但真正的约束来自三个地方:

  1. 人工校验——需求理解必须有人确认,不能AI猜完就干
  2. 编译器保障——TypeScript接口比Markdown Spec精确100倍,过时了编译器会报错
  3. 独立验证——测试不能让写代码的人来写,AI也一样

这些都不需要31K stars的CLI工具。Plan模式 + TypeScript + 多角色分工,足够了。


谁适合用OpenSpec?

适合:

  • 大企业的合规团队(需要审计追踪)
  • 外包项目(需求白纸黑字防扯皮)
  • 大型开源项目(多人异步协作的RFC流程)

不适合:

  • 小团队/单人开发(流程摩擦 > 价值)
  • 快速迭代的产品(文档维护跟不上迭代)
  • 有经验的AI用户(已经学会用Rules/Skills引导AI)

写在最后

OpenSpec是一个「你理解它在做什么之后就不太需要它」的工具。

它教会了我们一个重要的道理:在让AI写代码之前先对齐需求很重要。

但你把这个道理内化之后,不需要一个CLI工具和4个Markdown文件来实践它。一个Plan模式的对话、一份技术方案文档、一个TypeScript接口定义——就够了。

AI编程时代的DDD——思想被铭记,工具被遗忘。

这不是失败,是成功产品的宿命。就像没人会为写一个CRUD去翻DDD那本厚书,但每个人都记得「聚合根」这个概念。


思考来源:OpenSpec官方文档、DDD实战经验、Cursor Plan模式探索