Bb Spec
BB-Spec 开发纪律与 spec→plan→exec→review 工作流的 opencode 插件:26 个 skills、10 个编排 subagent、11 个 command、4 个流程守卫 hook。
5
441
近 7 天 30
42.6
生态多维模型
1 天前
2026-10-19
快速安装与配置
opencode.json写入当前项目的 opencode.json,只对这个仓库生效。
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-bb-spec@12.7.0"]
}写入 ~/.config/opencode/opencode.json,对所有项目生效。
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["opencode-bb-spec@12.7.0"]
}若你要在本地改造这个插件,先装到项目里再从本地路径引用。
shell
pnpm add -D opencode-bb-specOpenCode 启动时会通过内嵌运行时自动加载 npm 依赖并缓存至本地目录,无需手动在全局环境执行安装。
📐 BB-Spec
一条 PRD 驱动的 Claude Code 流水线,把模糊需求一路带到可交付的代码。
每个阶段可追溯、可断点恢复、经对抗验证 —— 辅以 Go / Vue + bun / TDD / Git 纪律的技术栈约束套件。
简体中文 · English · 繁體中文 · 日本語 · 한국어
快速开始 · 流水线 · 阶段一览 · 约束 Skills · 安装 · Hooks · 设计渊源
🚀 30 秒上手
/plugin marketplace add 0xBB2B/bb-spec
/plugin install bb-spec-core@0xbb2b
/plugin install bb-spec-workflow@0xbb2b
日常要手动敲的 5 条命令:
| 命令 | 做什么 | 何时用 |
|---|---|---|
/prd |
质疑→澄清→拆解,落盘 PRD + AGENTS.md 后请你读完确认一次,通过就自动跑 plan → exec → doc-update | 新需求开工、要改已合并功能的行为 |
/revise |
按根因诊断→定向修正→回归验证,修完自动跑 doc-update | 有 bug、结果和预期不符 |
/git-push |
pre-review 自查 + 推 + 开 PR | 准备提 PR |
/exec |
从断点接着执行 plan | 中断或 /clear 之后 |
/doc-update |
检查整个仓库的文档与代码是否一致 | 想把整个仓库查一遍时(/exec、/revise 收尾已自动查本分支范围) |
首次接入用 /git-clone(拉远程项目到本地 + 落 .bb-spec.yaml);可选命令:/test-webview / /test-api(前端 / 后端 e2e)。
🔁 核心流水线 prd → ship
(可选) /git-clone ──► 拉远程 + 落 .bb-spec.yaml
│
/prd ══► /plan ══► /exec ══► /doc-update ──► /git-push
做什么 怎么做 Red→Green 文档追平代码 pre-review+开 PR
(唯一一次批准) →Review
══► 自动衔接(仅新增第三方依赖或需设计裁决时停下)
──► 由你手动触发
(可选) /test-webview · /test-api — 提 PR 前多加一道检查:
前端 e2e / 后端 e2e,挂在 /doc-update 与 /git-push 之间
/revise(随时介入,按根因路由,修完自动跑 /doc-update)
PRD 缺陷 → 改本分支 PRD · 实现偏离 → TDD 修复 · 大的需求变更 → /prd
/doc-update(手动)— 扫整个仓库的文档与代码漂移 → 默认改文档,代码违反项目约束才停下问 → 挂 /revise
为什么这条流水线靠得住——每次交接物都是磁盘上的文档、不是会话里的临时记忆,这是它能断点续、能换 AI 接手、能逐级追溯的根本。
🎯 阶段一览
/git-clone— 一次性 onboarding:把远程仓库拉到本地、写好.bb-spec.yaml。- AskUserQuestion 两连:① 单 repo / 多 repo 工作区(决定目录结构) ②
base_dir(决定后续所有 bb-spec 交付物落点) - 多 repo 工作区建统一父目录 + 各成员仓库独立 clone(复原构建工具期待的相对布局),禁嵌套、禁覆盖
- 职责严格收敛:只拿代码 + 写
base_dir,不读代码、不装依赖
- AskUserQuestion 两连:① 单 repo / 多 repo 工作区(决定目录结构) ②
/prd— 新需求的唯一入口,回答**「做什么、为什么」**。要改已合并功能或老代码的行为时也从这里开始(再小也算,例如把超时从 120 秒改成 600 秒、把按钮文字从「提交」改成「保存」),新开一份 PRD 记下这次的取舍。- 质疑前置(允许结论是「不值得做」)→ 递进澄清 → 拆解,对齐阶段只读、不写文件;落盘 PRD 后弹窗请你读完确认,用户只批准这一次,通过后自动跑完
/plan→/exec→/doc-update - 落盘 PRD(
docs/prd/<日期>.<主题>/:背景、目标、非目标、用户故事、可测的约束与验收、决策记录)和 AGENTS.md(对整个项目生效的约束,如「禁止泛型」) - PRD 在本分支内可改(实施中发现方案问题直接改它),合并后冻结;代码是「现在做什么」的唯一来源,PRD 只回答「为什么」
- 之后每个 commit 带
Requirement: <PRD 目录名>标记:git log -L :函数:文件就能列出改过这个函数的需求,读对应 PRD 的决策记录就知道当时为什么这样设计 - 支持多仓库工作区(如
docs/与各服务是独立仓库):PRD 与 AGENTS.md 放在文档仓库,每个仓库的 commit 都带标记
- 质疑前置(允许结论是「不值得做」)→ 递进澄清 → 拆解,对齐阶段只读、不写文件;落盘 PRD 后弹窗请你读完确认,用户只批准这一次,通过后自动跑完
/plan— PRD → 自包含、函数级实施计划,回答**「怎么做」**。- 每文件一独立问题,详细到函数名与职责;声明式产物(DDL / API 契约 / 配置)直接内联最终成品,exec 原样落盘
- 由
/prd自动调用,产出后直接跑/exec;只有需要新增第三方依赖时才停下请用户同意,同意即视为 version-policy 要求的授权 - plan 只在执行期间存在,全部完成后由
/exec删除,避免和 PRD 重复
/exec— 三 Agent 隔离执行,核心反作弊设计。- Test Agent 只读 PRD 约束写失败测试(Red)
- Impl Agent 看不到 PRD,只看测试 + 函数清单写实现(Green),无法「照着意图作弊」;新增第三方库受 plan 已批依赖清单约束
- Review Agent 对照 PRD 验收与 AGENTS.md 检查并过一遍鲁棒性/安全视角,只读不写
- 每步进度写
PROGRESS.md,token 耗尽也能无损续接 - 实施中发现方案有问题,停下让你选:改代码 / 改本次 PRD / 暂停;小改就地改,大改回到
/prd重新批准 - 全部完成后自动跑
/doc-update收尾模式,让本次 PRD 和 README 等文档追平实际交付
/doc-update— 文档与代码一致性体检。- 四类发现:doc-stale(根文档过期)/ prd-stale(本分支 PRD 与交付不符)/ code-violation(代码违反 AGENTS.md)/ agents-conflict(项目约束互相矛盾)
- 代码是事实、文档追平代码;改代码一律先问、挂回
/revise走 TDD;已合并的 PRD 任何模式都不碰 - 维护项目根的 ARCHITECTURE.md 大纲(有哪些模块、各在哪、怎么协作,数据表与 API 只写概览):全仓模式没有时读代码起草,批准后落盘;收尾模式随本分支增删、搬迁模块或改动数据表、API 分组自动追平。AI 了解现状时先读它定位模块,再读代码
- 收尾模式(
--tail):/exec、/revise结束时自动调用,只处理本分支改动涉及的范围
/git-push— 用户触发的推送 + PR 流程(单 / 多仓库)。- 本机装了
ocr(open-code-review)时,rebase 后先跑一次ocr review:Claude 逐条读代码核实,按 🔴/🔶/🔷 列出建议修复项,你勾选后交给/revise修 - 存在 AGENTS.md、本分支 PRD 或本分支 commit 指向已合并 PRD 时先跑分支规范自查(pre-review):subagent 比对项目约束、PRD 与 commit 正文的改动说明 vs 分支 diff,违规循环修复
- PR 标题跟随仓库 commit 风格,描述带
Requirement:标记;仓库需只允许 squash 合并(GitHub 只勾「Allow squash merging」并把默认说明设为「Default to pull request title and description」,主分支规则集的「Allowed merge methods」也只留 Squash;GitLab 选「Fast-forward merge」,squash 设为「Require」,squash 说明模板填%{title}、空一行、%{description}),每个 PR 在主分支上只留一个 commit,说明就是 PR 标题和描述,开发中途推翻的 commit 不进主分支 - 起草 6 段 PR 描述(背景 / 需求 / 方案 / 结果 / 测试 / 规范,< 50 行)直接用作 PR body
- 本机装了
/revise— 随时介入的异常处理。- 先读代码确认现状、经
git log -L查回相关 PRD,再把偏差归因为三类:PRD 缺陷、实现偏离、需求变更 - 需求变了(PRD 缺陷、需求变更):只在本分支 PRD 上改,并记进它的决策记录;PRD 已合并或没有 PRD 时停下,转
/prd新开一份 - bug、安全、鲁棒性问题(实现偏离):已合并的 PRD 也在这里修,修订原因和取舍(选了什么、否掉了什么、为什么)写进 commit 正文
- 所有需修复的 review 发现都汇入此处
- 修完自动跑
/doc-update收尾模式
- 先读代码确认现状、经
/test-webview— (可选) 前端 / 网页项目的交互验收。- Docker 整栈拉起(首次确认后记住,跑完
down -v清理),浏览器 MCP 驱动真实浏览器 - 每个用例派隔离串行 subagent,几百用例也不爆主上下文;全程串行(浏览器单实例)
- 用例自动从本分支 PRD 的验收与验证路径归纳生成(不读已合并的历史 PRD);跑前覆盖对齐,缺口不静默漏测;失败转
/revise - 需浏览器 MCP(playwright / chrome-devtools)
- Docker 整栈拉起(首次确认后记住,跑完
/test-api— (可选) 后端接口 e2e。compose.e2e.yaml拉起整栈,md 用例机械渲染为单文件 Bun TS runner,bun run一次跑完- 零 subagent、零并发——HTTP 是确定性脚本,时钟共享禁并发
- 时间敏感规则(token 过期、订单超时、积分过期)经
/test/advance-time、/test/backdate、/test/trigger-job协议测 - 应用侧产双 image:test image 带
/test/*路由 +ENV TESTAPI=1;生产 image 物理排除/test/*源码;/test/healthz探测失败即中止、禁降级
附带产物
- 5 个编排 subagent(被上述环节驱动):
test-engineer/impl-engineer/prd-reviewer/webview-test-runner/pre-reviewer - 4 个被动 hook(自动生效):拦截 npm/yarn、拦截 main commit、依赖版本自检、Stop 四项自检
🧩 配套约束 Skills
向流水线灌入规则——只装你需要的层。
bb-spec-core — 通用纪律
tdd-workflow— Red-Green-Refactor 纪律,覆盖增 / 改 / 删三场景标准流程version-policy— 官方库 / 标准库优先,新增第三方库须经用户明确同意(/plan阶段用户同意的依赖清单视为已同意);钉版本前先查依赖官方最新版,禁凭训练记忆git-workflow— 分支决策、阶段性 commit、六段式 PR 描述、合并后清理
bb-spec-backend — 后端技术框架约束
golang-constraints— Go 全生命周期:三层架构、禁过度抽象、测试服从生产设计golang-testing— Go 测试组织:table-driven、subtests、benchmark、fuzzapi-design— REST 设计:资源命名、状态码、分页、A-BBB-CCCC结构化错误码database-constraints— 应用层 UUIDv7 主键、软删除 + 联合 UNIQUE、DB 管理时间戳、全链路 UTCauth-constraints— 认证(authN):双 token(JWT + 不透明 refresh)轮换 + 重放检测、滑动续期、argon2idauthz-constraints— 授权(authZ):默认拒绝、判定集中、粗粒度角色 + 细粒度资源 ownership 两级校验防 IDORobservability-constraints— 日志 / 链路 / 指标基于 OTel:一处装配、JSON 日志带稳定 trace_id、label 基数有限service-constraints— 运行时治理:env 注入密钥 fail-fast、优雅生命周期、写幂等、超时 + 安全重试config-constraints— 配置载体三分:env/secret 装启动必需且不热更、yaml/configmap 装可热更默认值、DB 装动态业务配置;核心凭据仅 secret/KMS,下沉 DB 须 envelope encryption
bb-spec-frontend — 前端技术框架约束
vue-constraints— Vue 3 + TypeScript + Vite + Tailwind + bun 技术栈强约束frontend-constraints— 工程约定:统一请求 client、错误码→UI 映射集中、路由守卫仅 UX、类型来自契约
📦 Claude Code 安装 / Install
BB-Spec 拆成四个可独立安装的子 plugin——只装你需要的约束层。
先添加一次 marketplace(在 Claude Code 里执行):
/plugin marketplace add 0xBB2B/bb-spec
再按需安装对应层:
| 子 plugin | 装了得到什么 | 安装命令 |
|---|---|---|
| bb-spec-core (推荐基座) | TDD / 版本策略 / Git 纪律 + 3 个被动 hook | /plugin install bb-spec-core@0xbb2b |
| bb-spec-workflow (核心功能) | prd → plan → exec → doc-update → revise → git-push(+ 可选 test-webview / test-api e2e)、git-clone 一次性初始化 + 5 个 subagent | /plugin install bb-spec-workflow@0xbb2b |
| bb-spec-backend | Go / REST API / 数据库 / 认证 / 授权 / 可观测性 / 服务治理 / 配置约束 | /plugin install bb-spec-backend@0xbb2b |
| bb-spec-frontend | Vue 3 + TS + Vite + Tailwind + bun 技术栈与工程约定(含 bun hook) | /plugin install bb-spec-frontend@0xbb2b |
按需取用——例如只要纪律与工作流、不要技术栈意见:装 bb-spec-core + bb-spec-workflow;想要全套:四个全装。
或手动添加到 ~/.claude/settings.json(只 enable 你想要的):
{
"extraKnownMarketplaces": {
"0xbb2b": {
"source": { "source": "github", "repo": "0xBB2B/bb-spec" }
}
},
"enabledPlugins": {
"bb-spec-core@0xbb2b": true,
"bb-spec-workflow@0xbb2b": true,
"bb-spec-backend@0xbb2b": false,
"bb-spec-frontend@0xbb2b": false
}
}
🔄 版本与更新 / Versioning
claude plugin update bb-spec-workflow@0xbb2b # 在终端里更新某个子 plugin
一次更新全部:在会话里运行 /plugin,到 Marketplaces 页选 0xbb2b,再选 Update marketplace。
四个子 plugin 共用同一条同步版本线。
从 13 及更早版本升级
不需要迁移。项目里旧的 .bb-spec/ 目录删掉或保留都行,升级后直接用 /prd 开始下一个需求。
保留旧目录时(下面的 .bb-spec/docs/ 是默认位置,在 .bb-spec.yaml 里改过 base_dir 的按你的配置):
- 旧的
.bb-spec/docs/spec/、.bb-spec/docs/prd/.archive/、.bb-spec/docs/plan/INDEX.md都不会被读取,也不会被修改。 - 还没有
.bb-spec/docs/prd/GLOSSARY.md时,/prd沿用.bb-spec/docs/spec/GLOSSARY.md里的术语;第一次登记术语时会整份复制到新位置,旧表不动。 - 13 版本没做完的 plan 不能接着执行,请用
/prd重新开始。plan/INDEX.md和其中登记的主题目录不再需要时,可以用git rm -r删掉。
接入前写的老代码,commit 里没有 Requirement: 标记,查不到对应的 PRD。修它的 bug 用 /revise,以你描述的期望行为为准;要改它的设计或行为,用 /prd 新开一份 PRD。
.bb-spec/ 以外有两处要手动处理:
- 装过
bb-spec-product的,运行/plugin uninstall bb-spec-product@0xbb2b卸载。/prd已经移到bb-spec-workflow里。 - 从旧的
CLAUDE.template.md复制过 CLAUDE.md 的(全局~/.claude/CLAUDE.md或项目根),把「任务分流」第 4 条的/spec → /plan → /exec改成/prd,第 3 条的「有现成 spec/plan/代码可对照」改成「有现成 PRD 或代码可对照」。
🪝 默认启用的 Hooks
每个 hook 随「负责该关注点的子 plugin」一起发布——装了对应 plugin 才有。
| Hook | 所属子 plugin | 触发时机 | 作用 |
|---|---|---|---|
block-non-bun-pm |
bb-spec-frontend | PreToolUse(Bash) | 拦截 npm / yarn / pnpm 的包管理动作,强制 bun;既有项目已存在匹配 lockfile(如 package-lock.json)时放行 |
git-workflow-guard |
bb-spec-core | PreToolUse(Bash) | 拦截 main / master 分支的 git commit;其余 git 流程动作(开分支 / push / worktree / merge / PR)放行并注入 git-workflow 纪律与实时 git 状态 |
dep-version-check |
bb-spec-core | PostToolUse(Write|Edit) | 编辑依赖文件后注入「先查官方最新版」自检提示 |
🧪 测试
bash tests/validate.sh
校验多 plugin 结构:marketplace.json 有效性与 plugin 条目一致性(每个 source 都指向真实存在、且 name 匹配的 plugin 目录)、各子 plugin 的 plugin.json 字段、agent frontmatter 完整性(必填字段、name 一致性、agent-type 合法值、安全基线段落)、skill SKILL.md 格式、hooks.json 有效性及脚本存在性、个人路径泄露检测。
CI 在 PR 和 push 到 main 时自动运行(.github/workflows/ci.yml)。
🛠️ 推荐配套
AGENTS.md:项目约束与查询规矩
/prd 把对整个项目生效的约束(如「禁止泛型」「SQL join 不超过 3 张表」)写进项目根的 AGENTS.md,只属于某个功能的约束写进 PRD,同一条约束不会写两处。AGENTS.md 里还有一节「查功能、查问题的规矩」:回答「系统现在怎么做」必须先读代码并给出 文件:行号;查「为什么」用 git log -L 找到改过该函数的需求再读 PRD;PRD 和代码不一致时以代码为准。Claude Code 只读 CLAUDE.md、不直接读 AGENTS.md,所以 /prd 会确保项目根 CLAUDE.md 含一行 @AGENTS.md 把它导入。
.bb-spec.yaml 项目配置
/prd 和 /plan 默认输出至 .bb-spec/docs/ 下(.bb-spec/docs/prd/、…/plan/);运行时瞬态产物(如 webview 截图)落在与之平级的 .bb-spec/.cache/(自动 gitignore)。在项目根创建 .bb-spec.yaml 可覆盖 bb-spec 根目录:
base_dir: my/bb # → my/bb/docs/{prd,plan,test}/ 与 my/bb/.cache/;填 ./ 则直接落项目根
参考模板:.bb-spec.template.yaml。
⚙️ Hook 开关速查
| 场景 | 开关 |
|---|---|
| 临时允许 npm / yarn / pnpm | 临时禁用 bb-spec-frontend |
| 临时允许 main commit | 临时禁用 bb-spec-core |
| 跳过 Stop 自检 | 当前无开关——这是核心铁律,不建议跳过 |
💡 设计渊源:借鉴与对比
BB-Spec 站在三个优秀项目的肩上。它们各自塑造了 BB-Spec 设计的不同部分——下表致谢其所长,并说明 BB-Spec 借鉴了什么、又把这个想法推进到了哪一步。
| 项目 | 它最擅长 | BB-Spec 借鉴并强化的点 |
|---|---|---|
| Superpowers(obra)—— 一套完整的编码代理方法论 | 端到端分阶段工作流、子代理驱动开发 + 分阶段审查、TDD 红-绿-重构、git worktree 隔离、苏格拉底式头脑风暴、可组合技能库 | 整条 prd → ship 流水线骨架、按角色拆分子 Agent 协作、强制 TDD、多阶段 / 对抗式审查、对话先行的需求澄清 |
| ECC(affaan-m)—— 一个 agent harness「操作系统」 | agents / skills / hooks / rules 的大规模分层体系、被动 hook 自动强制、规则即基础设施、跨会话记忆持久化 | 分层、可独立安装的子插件套件、用被动 hook 强制纪律、把工程规范沉淀为可加载的约束 skill |
| skills(mattpocock)——「Skills For Real Engineers」 | 直击真实失败模式(需求不对齐 / 冗长 / 质量 / 架构)、深度提问对齐意图、共享域语言、用户调用 vs 模型调用双形态 skill、垂直切片 | 质疑前置、动手前先对话锁定需求、双触发 skill(slash 命令 + 模型自动触发)、只留一份事实来源的极简组织 |
BB-Spec 自己的取舍——三者都未同时具备的差异化:
- 三 Agent 隔离执行——Impl Agent 物理上看不到 PRD,只看测试,无法「照着意图蒙混」;测试、实现、审查由互相看不见的三方分别完成。
- 磁盘文档作为唯一交接物——每阶段交接的是文件而非会话记忆,因此跨会话、
/clear乃至换一个模型接手都能无损续接。 - 代码 ⇄ PRD 经 git 双向可查——代码是唯一事实来源,PRD 只写为什么;每个 commit 带需求标记,从功能能找到代码,从函数能查回当时的需求与取舍,中间没有需要人工同步、会过时的规则文档。
📜 License
MIT —— 详见 LICENSE。
Built with ❤️ for the Claude Code community.
同类生态推荐
Cabbage
@devcxl/opencode-cabbage
OpenCode 全流程开发插件 — 需求→设计→任务→编码→测试→审查→自动合并,支持自动编排与并行 Subagent
Skilld
opencode-skilld
An OpenCode plugin that refreshes skills from GitHub repositories in the background
Scionwood
scionwood
Worktrees for opencode that pull down code you didn't write — each with its own index