要验证 SuperPowers 的 subagent-driven-development (SDD) 技能是否按预期工作,最直接的方法是运行其集成测试。仓库在 tests/subagent-driven-dev/ 目录下提供了两个开箱即用的样例:go-fractals(一个命令行分形生成器)和 svelte-todo(一个带持久化的待办事项应用)。通过执行 run-test.sh 脚本,你可以一键完成项目脚手架搭建、调用 Claude Code 执行实施计划,并生成带有时间戳的日志,从而系统性地观察 AI 代理如何分解并完成一个多任务开发计划。
使用 SuperPowers 自带样例测试 subagent-driven-development:Go Fractals 与 Svelte Todo
SuperPowers 的核心价值之一是通过结构化的技能(skills)来规范 AI 编码代理的行为。其中,subagent-driven-development 技能定义了代理应如何将一个大型实施计划拆解为独立任务,并为每个任务启动子代理来执行,最后进行两阶段审查。为了确保这个复杂流程的可靠性,仓库内建了完整的集成测试。本文将指导你如何使用这些现成样例进行实际测试。
测试框架与运行脚本
所有测试由统一的入口脚本 tests/subagent-driven-dev/run-test.sh 管理。其工作原理清晰明了:
- 接受参数:脚本需要一个测试名称作为第一个参数(例如
go-fractals或svelte-todo)。你可以通过--plugin-dir指定 Superpowers 技能的路径,默认会使用脚本所在的仓库根目录。 - 创建带时间戳的输出目录:测试结果不会污染项目源文件,而是在
/tmp/superpowers-tests/<timestamp>/subagent-driven-development/<test-name>下创建独立目录。 - 执行项目脚手架:调用对应测试目录下的
scaffold.sh,在输出目录中初始化一个干净的项目。 - 构造并执行提示:生成一个固定的 Claude Code 提示,该提示会命令代理使用
superpowers:subagent-driven-development技能来执行位于脚手架项目根目录下的plan.md文件。 - 记录流式输出:使用
claudeCLI 的--output-format stream-json参数运行,将详细的执行日志保存为 JSON 文件,便于后续分析 token 用量和执行过程。
运行命令示例:
# 进入 SuperPowers 仓库的测试目录
cd tests/subagent-driven-dev
# 运行 Go Fractals 样例测试
./run-test.sh go-fractals
# 或运行 Svelte Todo 样例测试(指定自定义插件路径)
./run-test.sh svelte-todo --plugin-dir /your/superpowers/path
脚本执行完毕后,会提示你项目目录、日志文件位置以及后续的验证命令(例如 go test ./... 或 npx playwright test)。
样例一:Go Fractals CLI
这个样例模拟了一个从零开始构建命令行工具的过程,重点验证 SDD 在结构化后端项目中的表现。
设计与计划要点:
- 目标:构建一个生成 ASCII 分形艺术的 CLI 工具,支持
sierpinski和mandelbrot两个子命令。 - 技术栈:Go 语言,使用 Cobra 库处理命令行界面。
- 任务分解:实施计划 (
plan.md) 将整个项目清晰地拆分为 10 个任务,从项目初始化 (Task 1: Project Setup) 到编写文档 (Task 10: README)。每个任务都包含明确的 Do(执行) 和 Verify(验证) 步骤。 - 验证关键点:计划中嵌入了具体的验证命令,例如:
go build ./cmd/fractals用于验证编译。./fractals --help用于验证帮助文本。go test ./internal/sierpinski/...和go test ./internal/mandelbrot/...用于验证算法单元测试。- 最终的集成验证要求
go test ./...全部通过。
脚手架 (scaffold.sh) 的作用:
在运行主测试前,scaffold.sh 会:
- 初始化一个全新的 Git 仓库 (
git init)。 - 复制设计文档 (
design.md) 和实施计划 (plan.md) 到项目根目录。 - 创建
.claude/settings.local.json配置文件,预先授权代理可以执行go:*、git:*等命令。 - 完成一次初始提交 (
git add . && git commit),确保代理在一个干净的、版本控制就绪的环境中开始工作。
这意味着 SDD 技能的执行代理拿到的是一个结构清晰、拥有完整设计输入和可执行计划的项目起点,这与其在实际工作流中的前置步骤(如头脑风暴和编写计划)是一致的。
样例二:Svelte Todo List
这个前端应用样例则侧重于测试 SDD 技能处理包含状态管理、组件化和端到端测试的现代 Web 开发任务的能力。
设计与计划要点:
- 目标:构建一个功能完整的待办事项应用,支持增删改查、过滤和本地持久化。
- 组件结构:设计文档 (
design.md) 明确定义了App.svelte、TodoInput.svelte、TodoList.svelte、TodoItem.svelte、FilterBar.svelte等组件,以及store.ts和storage.ts两个逻辑模块。 - 数据模型:使用 TypeScript 接口
Todo和类型Filter约束状态。 - 任务分解:计划 (
plan.md) 包含 12 个任务,覆盖了从脚手架创建到 Playwright 端到端测试的全过程。关键路径包括:- Task 2 & 3: 先建立状态管理 (
store.ts) 和持久化层 (storage.ts),遵循关注点分离。 - Task 4-7: 逐一构建独立的 UI 组件及其单元测试。
- Task 8: 在
App.svelte中集成所有组件。 - Task 11: 编写 Playwright 测试,覆盖用户主要操作流程。
- Task 2 & 3: 先建立状态管理 (
- 验证关键点:除了
npm run build和npm run test(单元测试),计划明确要求执行npx playwright test来运行端到端测试,确保应用在浏览器中的行为符合预期。
脚手架 (scaffold.sh) 的差异:
与 Go 样例类似,Svelte 的 scaffold.sh 同样执行 git init、复制设计计划、初始化 .claude/settings.local.json 并创建初始提交。其权限配置针对前端环境,预先允许了 npm:* 和 npx:* 命令。
通过测试观察 SDD 工作流
运行测试后,真正的验证在于审视生成的 stream-json 日志文件。你可以从中看到 subagent-driven-development 技能的实际行为模式:
- 计划解析:代理首先读取并理解
plan.md中的任务列表。 - 任务顺序执行:代理会按顺序(或根据依赖关系)执行任务。每个任务开始时,它可能会创建一个子代理上下文。
- 遵循 Do/Verify 步骤:对于每个任务,你会看到代理先执行计划中 “Do” 部分指定的创建文件、编写代码等操作。
- 运行验证命令:接着,代理会自动运行 “Verify” 部分的命令(如
go test,npm run build,npx playwright test)来验证任务是否成功完成。这是测试驱动开发精神在计划执行中的体现。 - 错误处理与调试:如果验证失败,日志将记录代理如何根据系统化调试技能尝试定位并修复问题。
- 任务完成与进度报告:成功完成一个任务后,代理会标记它并继续下一个,整个过程在日志中留下了完整的轨迹。
通过对比两个样例的日志,你可以评估 SDD 技能在不同类型项目(命令行 vs. 前端、无状态算法 vs. 有状态 UI)中的执行稳健性。日志中的 usage 字段(可通过 jq 提取)还能提供 token 消耗的量化数据。
总结
SuperPowers 自带的 go-fractals 和 svelte-todo 测试样例,是理解、验证和演示 subagent-driven-development 技能的最佳实践案例。它们提供了一个可控的、可重复的环境,让你能够观察 AI 代理如何将一个详细的实施计划逐步转化为通过测试的代码。无论是作为技能开发者的回归测试,还是作为学习者的工作流示例,运行这些测试都是掌握 SuperPowers SDD 流程不可或缺的一环。要深入了解该技能的内部机制,请参阅《subagent-driven-development 详解》。
FAQ
Q: 运行测试时提示找不到 claude 命令怎么办?
A: 你需要先安装 Claude Code CLI。请确保已按照官方文档完成安装,并将 claude 可执行文件添加到系统的 PATH 环境变量中。
Q: 测试中的 --dangerously-skip-permissions 参数安全吗?
A: 这是一个专门用于自动化测试的参数。在测试脚手架环境中(由 scaffold.sh 创建并已通过 .claude/settings.local.json 进行了受限授权),该参数允许代理无需交互确认即可执行必要的文件操作和命令,从而完成完整的测试流程。切勿在生产开发或非受控环境中使用此参数。