HyperSpec
规格驱动 + 工程纪律的完整开发工作流。协调 OpenSpec(规格管理)和 Superpowers(TDD + 子代理审查),从需求到实现到归档一条流程走完。
OpenSpec 管「做什么和为什么」,Superpowers 管「怎么做和做得对不对」。HyperSpec 是纯编排层,只做状态检测、阶段路由、commit 纪律,不重写任何原生 skill 的功能。
编排协议
HyperSpec 是纯编排层,只做以下四件事:
- 项目感知 — 自动探测语言/框架/构建工具,生成
project_profile驱动后续阶段的自适应行为 - 状态检测 — 通过结构化状态文件 + 实际文件验证确定当前阶段和断点位置
- 阶段路由 — 加载对应 prompt 文件,按其中的流程调用原生 skill
- Commit 纪律 — 每个 task/fix 完成后自动 commit,编译前置,不做 push
HyperSpec 不做:
- 不手动创建 openspec artifacts(由
openspec-propose负责) - 不手动转 tasks → plan(由
superpowers:writing-plans负责) - 不手动执行归档操作(由
openspec-archive-change负责) - 不重申 TDD 规则(由
superpowers:subagent-driven-development负责) - 不重申审查规则(由
superpowers:requesting-code-review负责)
各阶段委托的原生 Skill
| 阶段 | 委托 Skill | 职责 |
|---|---|---|
| propose | openspec-propose |
通过 CLI 创建变更目录 + 生成所有 artifacts(proposal、design、specs、tasks) |
| propose | superpowers:writing-plans |
读取 openspec artifacts,生成 superpowers 格式实现计划 |
| apply | superpowers:subagent-driven-development 或 inline |
按计划执行实现,TDD + 子代理审查 |
| apply | superpowers:verification-before-completion |
全量验证 |
| apply | superpowers:requesting-code-review |
全局代码审查 |
| archive | openspec-archive-change |
通过 CLI 归档变更(含 spec sync) |
前提检查
触发后先检查两项:
检查1:Superpowers — 看 brainstorming 等 skill 是否可用。不可用则提示:/plugin install superpowers@claude-plugins-official
检查2:OpenSpec — 看项目根目录是否有 openspec/。没有则提示:npx @fission-ai/openspec init
注意:openspec init 除了创建 openspec/ 目录外,还会在 .claude/ 下生成配置文件和 slash commands。这些都是正常的副作用,不需要特别处理。
两项都通过后才继续。
项目分析器(Project Profiler)
前提检查通过后,在首次运行或状态文件不存在时,自动扫描项目生成 project_profile。结果保存到 .hyperspec-state.yaml 的 project_profile 字段。
检测逻辑
| 检测项 | 检测方式 | 默认值 |
|---|---|---|
| languages | 统计 src/、lib/、app/ 等源码目录下的文件扩展名,取占比最高的 1-2 种 |
[] |
| frameworks | 读取 package.json 的 dependencies/devDependencies、pom.xml 的 <dependencies>、go.mod 的 require 等提取关键框架名 |
[] |
| build_tool | 检测根目录配置文件:pom.xml → maven,build.gradle/build.gradle.kts → gradle,package.json → npm/yarn/pnpm(看 lock 文件),go.mod → go,Cargo.toml → cargo,pyproject.toml → python |
unknown |
| compile_command | 根据 build_tool 自动推导,见下方"构建命令映射" | null |
| test_command | 根据 build_tool + 测试目录推导,见下方"构建命令映射" | null |
| structure | 检查子目录模式:有 modules//packages//多个 pom.xml/go.work → monorepo;否则 → single-module |
single-module |
| has_ci | 检查 .github/workflows/、.gitlab-ci.yml、Jenkinsfile、azure-pipelines.yml 等 |
false |
构建命令映射
下表为默认推导值。项目分析器会在推导后执行运行时验证(见下方),根据实际环境校准命令。
| build_tool | compile_command(默认) | test_command(默认) |
|---|---|---|
| maven | mvn compile |
mvn test |
| gradle | ./gradlew compileJava |
./gradlew test |
| npm | npm run build(如果 script 存在) |
npm test(如果 script 存在) |
| go | go build ./... |
go test ./... |
| cargo | cargo build |
cargo test |
| python | null(跳过编译) |
pytest(如果安装了) |
| unknown | null |
null |
命令运行时验证
默认推导完成后,按以下顺序验证(先检测参数,再执行验证):
- 项目特有参数检测(在执行命令之前):检查项目配置文件中是否有需要额外传入的参数:
- Maven:检查根目录是否有
settings.xml,有则 compile_command 附加-gs ./settings.xml - Gradle:检查是否有自定义
gradle.properties或local.properties - npm:检查
.npmrc是否有 registry 配置
- Maven:检查根目录是否有
- 执行编译命令:运行调整后的 compile_command(如果非 null)
- 成功:确认命令可用,写入 project_profile
- 失败且为环境问题(JDK/Node 版本不匹配、依赖下载失败等):立即阻塞并报告,等待用户确认正确的命令
- 失败且为代码问题(已有代码编译错误):命令本身可用,写入 project_profile,编译错误留到 apply 阶段处理
- test_command:不强制运行(可能依赖外部服务),但检查 test framework 是否安装(如
which pytest、检查package.json的 devDependencies)
项目 profile 的传递方式
project_profile 不会直接传给 openspec-propose 或 writing-plans(它们有自己的上下文读取机制),但 HyperSpec 在调用它们之前,会将 profile 信息作为上下文前缀拼接到 args 中:
- 调用
openspec-propose时,在 description 前附加[项目: {languages} + {frameworks}, 构建: {build_tool}] - 调用
writing-plans时,在 args 中附加项目技术栈: {languages} + {frameworks},构建工具: {build_tool},测试框架: {test_command} - apply 阶段使用
compile_command和test_command驱动编译检查和验证
状态管理
状态文件:.hyperspec-state.yaml
位于项目根目录,HyperSpec 的快速路由入口。结构:
version: 1
active_change: add-user-auth
phase: propose | apply | archive
checkpoint: profiler-done | requirements-confirmed | openspec-generated | plan-generated | plan-generated-and-confirmed | task-N-complete | verified | reviewed | apply-done | consistency-verified | archived | done
project_profile:
languages: [java]
frameworks: [spring-boot]
build_tool: maven
compile_command: mvn compile
test_command: mvn test
structure: single-module
has_ci: true
安全策略:状态文件 vs 实际文件
状态文件用于快速路由(避免每次扫描所有目录),但在关键节点必须验证实际文件状态:
| 时机 | 验证内容 | 不一致处理 |
|---|---|---|
| 阶段入口 | 状态文件声称的 phase 对应的文件是否存在 | 修正状态文件,路由到实际状态对应的阶段 |
| 断点恢复 | checkpoint 声称的进度是否与实际文件一致 | 回退到最近一个确认一致的状态 |
| 阶段出口 | 出口条件对应的实际文件是否满足 | 不满足则不退出,继续当前阶段 |
原则:实际文件状态是 ground truth,状态文件只是缓存。两者冲突时,以实际文件为准并修正状态文件。
状态检测
检查 .hyperspec-state.yaml 和实际文件状态,确定应该进入哪个阶段:
Step 1:读取状态文件
- 状态文件不存在 → 这是首次运行,执行项目分析器,然后进入 propose 阶段
- 状态文件存在 → 读取 phase 和 checkpoint
Step 2:验证状态文件与实际文件一致性
根据状态文件中的 phase,验证对应的前提条件:
phase = propose 时验证:
openspec/changes/下是否有活跃(非 archive)变更目录? → 无则一致(propose 刚开始)- 通用规则(适用于所有 checkpoint):如果有活跃变更目录且
superpowers/plans/下有对应的计划文件(含<!-- hyperspec change: <active_change> -->),说明实际进度已进入 apply 阶段,修正phase: apply,根据 checkbox 状态判定 checkpoint - 如果有活跃变更目录但无计划文件:根据变更目录下 artifacts 的完整程度判定 checkpoint(artifacts 完整 →
openspec-generated,不完整 →requirements-confirmed) - 如果 checkpoint ≥
openspec-generated:变更目录下的 artifacts 是否存在且非空? → 有空文件则回退 checkpoint 到requirements-confirmed
phase = apply 时验证:
superpowers/plans/下是否有包含<!-- hyperspec change: <active_change> -->的计划文件? → 无则回退到 propose 阶段- 计划文件中是否至少有 1 个 checkbox? → 无则回退到 propose 阶段(plan 不完整)
- 如果 checkpoint 声称
task-N-complete:计划文件中对应的 checkbox 是否确实已勾选? → 未勾选则回退到上一个确认一致的 checkpoint
phase = archive 时验证:
- 所有计划 checkbox 是否已勾选? → 未全勾选则修正状态文件为
phase: apply, checkpoint: reviewed,路由到 apply - 如果 checkpoint ≥
consistency-verified:openspec/changes/archive/下是否有对应目录? → 无则回退到consistency-verified(重做归档) - 如果 checkpoint ≥
archived:openspec/changes/archive/下是否有对应目录? → 无则回退到consistency-verified(归档中断) - 注意:
.close-verification-done的存在性由 archive.md 内部处理(断点恢复表),SKILL.md 不据此覆盖 checkpoint,避免基于过期文件做错误路由
Step 3:路由
| 状态文件 phase | 验证结果 | 路由到 |
|---|---|---|
| propose | 一致 | propose 阶段(从 checkpoint 恢复) |
| propose | 不一致(artifacts 缺失) | propose 阶段(回退 checkpoint) |
| apply | 一致 | apply 阶段(从 checkpoint 恢复) |
| apply | plan 不存在或不完整 | propose 阶段 |
| archive | 一致 | archive 阶段(从 checkpoint 恢复) |
| archive | apply 未完成 | apply 阶段 |
Step 4:无状态文件时的降级检测
如果状态文件不存在(可能是旧项目或手动删除),降级为文件扫描检测:
| 检查项 | 怎么查 | 结果 |
|---|---|---|
| 有活跃变更? | openspec/changes/ 下是否有非 archive 子目录 |
有 → 继续检查 |
| 有多个活跃变更? | 活跃变更数量 > 1 | 是 → 让用户选择继续哪个 |
| 有计划文件? | superpowers/plans/ 下是否有与活跃变更对应的计划文件(文件含 <!-- hyperspec change: <name> -->) |
有 → 看实现状态 |
| 计划文件有效? | 计划文件中是否至少有 1 个 checkbox | 无 → propose 阶段 |
| checkbox 状态? | checkbox 全部未勾选 | → apply 阶段(全新执行) |
| checkbox 状态? | checkbox 部分已勾选 | → apply 阶段(断点恢复) |
| checkbox 状态? | checkbox 全部已勾选 | → apply 阶段(验证→审查→自动进入 archive) |
路由
根据检测结果,用 Read 工具加载对应文件并执行:
- propose 阶段 → 读取 skill 目录下的
propose.md,按其中流程执行 - apply 阶段 → 读取 skill 目录下的
apply.md,按其中流程执行 - archive 阶段 → 读取 skill 目录下的
archive.md,按其中流程执行
加载后严格按照文件中定义的流程、出口条件和硬门执行,不要跳步。
用户意图覆盖
如果用户明确指定了阶段(如「先做规格」「直接开始实现」「归档收尾」),以用户意图为准,跳过状态检测直接加载对应文件。但如果前置条件不满足(如用户说「直接实现」但 superpowers/plans/ 下没有计划文件),需要提醒用户先完成前置阶段。
状态文件更新时机
| 时机 | 更新内容 |
|---|---|
| 项目分析器完成 | 写入 project_profile,phase: propose,checkpoint: profiler-done |
| propose 阶段需求确认完成 | checkpoint: requirements-confirmed,active_change: <变更名> |
| openspec-propose 完成 | checkpoint: openspec-generated |
| writing-plans 完成 | checkpoint: plan-generated |
| propose 用户确认进入 apply | phase: apply,checkpoint: plan-generated-and-confirmed |
| apply 阶段每个 task 完成 | checkpoint: task-N-complete |
| apply 验证通过 | checkpoint: verified |
| apply 审查通过 | checkpoint: reviewed |
| apply 最终确认完成 | phase: archive,checkpoint: apply-done |
| archive 一致性验证通过 | checkpoint: consistency-verified |
| archive 归档完成 | checkpoint: archived |
| archive 全部完成 | checkpoint: done,删除状态文件 |
Source: wind7rui/HyperSpec — distributed by TomeVault.