AgentSkillsCN

brainstorm

头脑风暴 - 需求发现(AI 编码增强版)

中文原作
SKILL.md
--- frontmatter
name: brainstorm
description: "头脑风暴 - 需求发现(AI 编码增强版)"

头脑风暴 - 需求发现(AI 编码增强版)

引导 AI 在实现之前进行协作式需求发现,针对 AI 编码工作流优化:

  • 任务优先(立即捕获想法)
  • 行动先于提问(减少低价值问题)
  • 技术选择先研究(避免让用户凭空想选项)
  • 发散 → 收敛(拓展思维,然后锁定 MVP)

使用时机

$start 触发,当用户描述开发任务时,特别是:

  • 需求不清晰或在演进中
  • 有多条有效的实现路径
  • 权衡很重要(用户体验、可靠性、可维护性、成本、性能)
  • 用户可能不知道最佳选项

核心原则(不可妥协)

  1. 任务优先(尽早捕获) 始终确保在开始时就有一个任务,这样用户的想法会被立即记录。

  2. 行动先于提问 如果你能从仓库代码、文档、配置、约定或快速研究中得出答案 — 先做这些。

  3. 每条消息一个问题 不要用一堆问题轰炸用户。问一个,更新 PRD,重复。

  4. 优先提供具体选项 对于偏好/决策类问题,提供 2-3 个可行的、具体的方案及其权衡。

  5. 技术选择先研究 如果决策取决于行业惯例/类似工具/成熟模式,先做研究,再提出选项。

  6. 发散 → 收敛 在初步理解后,主动考虑未来演进、相关场景和失败/边界情况 — 然后收敛到一个明确排除范围的 MVP。

  7. 不问元问题 不要问"我应该搜索吗?"或"你能粘贴代码让我继续吗?" 如果你需要信息:搜索/检查。如果被阻塞:问最小的阻塞性问题。


步骤 0:确保任务存在(始终)

在任何问答之前,确保任务存在。如果不存在,立即创建。

  • 使用从用户消息中推导的临时工作标题
  • 标题不完美没关系 — 稍后在 PRD 中完善。
bash
TASK_DIR=$(python3 ./.trellis/scripts/task.py create "brainstorm: <简短目标>" --slug <auto>)

立即用你已知的信息创建/初始化 prd.md

markdown
# brainstorm: <简短目标>

## 目标

<一段话:做什么 + 为什么>

## 已知信息

* <来自用户消息的事实>
* <从仓库/文档中发现的事实>

## 假设(临时)

* <需要验证的假设>

## 待解决问题

* <仅阻塞性/偏好性问题;保持列表简短>

## 需求(演进中)

* <从已知的开始>

## 验收标准(演进中)

* [ ] <可测试的标准>

## 完成定义(团队质量标准)

* 添加/更新了测试(单元/集成,视情况而定)
* Lint / typecheck / CI 通过
* 如果行为变更则更新文档/笔记
* 如果有风险则考虑上线/回滚

## 范围外(明确)

* <本任务不做的事>

## 技术说明

* <检查过的文件、约束、链接、参考>
* <研究笔记摘要(如适用)>

步骤 1:自动上下文(在提问之前先做这个)

在问"代码长什么样?"之类的问题之前,自己收集上下文:

仓库检查清单

  • 确定可能受影响的模块/文件
  • 定位现有模式(类似功能、约定、错误处理风格)
  • 检查配置、脚本、现有命令定义
  • 记录任何约束(运行时、依赖策略、构建工具)

文档检查清单

  • 查找现有的 PRD/规范/模板
  • 查找命令使用示例、README、ADR(如有)

将发现写入 PRD:

  • 添加到 已知信息
  • 将约束/链接添加到 技术说明

步骤 2:分类复杂度(仍然有用,但不阻止任务创建)

复杂度标准操作
微小单行修复、错别字、显而易见的修改跳过头脑风暴,直接实现
简单目标明确、1-2 个文件、范围清晰问 1 个确认问题,然后实现
中等多文件、有些模糊轻量头脑风暴(2-3 个高价值问题)
复杂目标模糊、架构选择、多种方案完整头脑风暴

注意:任务已在步骤 0 创建。分类只影响头脑风暴的深度。


步骤 3:问题门控(只问高价值问题)

在问任何问题之前,运行以下门控:

门控 A — 我能不问用户就得出答案吗?

如果答案可以通过以下方式获得:

  • 仓库检查(代码/配置)
  • 文档/规范/约定
  • 快速的市场/开源研究

不要问。 获取它,总结,更新 PRD。

门控 B — 这是元问题/懒问题吗?

示例:

  • "我应该搜索吗?"
  • "你能粘贴代码让我继续吗?"
  • "代码长什么样?"(当仓库可用时)

不要问。 采取行动。

门控 C — 这是什么类型的问题?

  • 阻塞性:没有用户输入无法继续
  • 偏好性:多个有效选择,取决于产品/UX/风险偏好
  • 可推导:应该通过检查/研究来回答

→ 只问阻塞性偏好性问题。


步骤 4:研究优先模式(技术选择时强制)

触发条件(任一 → 研究优先)

  • 任务涉及选择方案、库、协议、框架、模板系统、插件机制或 CLI UX 约定
  • 用户要求"最佳实践"、"别人怎么做的"、"推荐"
  • 用户无法合理地列举选项

研究步骤

  1. 确定 2-4 个可比较的工具/模式
  2. 总结常见约定及其存在原因
  3. 将约定映射到我们的仓库约束
  4. 为我们的项目产出 2-3 个可行方案

研究输出格式(PRD)

在 PRD 中添加一个章节(在技术说明中或作为独立章节):

markdown
## 研究笔记

### 类似工具的做法

* ...
* ...

### 我们仓库/项目的约束

* ...

### 这里可行的方案

**方案 A:<名称>**(推荐)

* 工作方式:
* 优点:
* 缺点:

**方案 B:<名称>**

* 工作方式:
* 优点:
* 缺点:

**方案 C:<名称>**(可选)

* ...

然后问一个偏好问题:

  • "你更倾向哪个方案:A / B / C(或其他)?"

步骤 5:扩展扫描(发散) — 初步理解后必须

在你能总结目标之后,在收敛之前主动拓宽思维。

扩展类别(每类保持 1-2 条)

  1. 未来演进

    • 这个功能在 1-3 个月后可能变成什么?
    • 现在值得保留哪些扩展点?
  2. 相关场景

    • 哪些相邻的命令/流程应该与此保持一致?
    • 是否有对等性期望(创建 vs 更新、导入 vs 导出等)?
  3. 失败和边界情况

    • 冲突、离线/网络故障、重试、幂等性、兼容性、回滚
    • 输入验证、安全边界、权限检查

扩展消息模板(给用户)

markdown
我理解你想要实现:<当前目标>。

在深入设计之前,让我快速发散考虑三个类别(以避免后续返工):

1. 未来演进:<1-2 条>
2. 相关场景:<1-2 条>
3. 失败/边界情况:<1-2 条>

对于这个 MVP,你想包含哪些(或都不要)?

1. 仅当前需求(最小可行)
2. 添加 <X>(为未来扩展预留)
3. 添加 <Y>(提高健壮性/一致性)
4. 其他:描述你的偏好

然后更新 PRD:

  • MVP 中包含的 → 需求
  • 排除的 → 范围外

步骤 6:问答循环(收敛)

规则

  • 每条消息一个问题

  • 尽可能使用选择题

  • 每次用户回答后:

    • 立即更新 PRD
    • 将已回答的项从 待解决问题 移到 需求
    • 用可测试的复选框更新 验收标准
    • 明确 范围外

问题优先级(推荐)

  1. MVP 范围边界(包含/排除什么)
  2. 偏好决策(在提供具体选项后)
  3. 失败/边界行为(仅 MVP 关键路径)
  4. 成功指标和验收标准(什么证明它有效)

首选问题格式(选择题)

markdown
对于 <主题>,你更倾向哪种方案?

1. **选项 A** — <含义 + 权衡>
2. **选项 B** — <含义 + 权衡>
3. **选项 C** — <含义 + 权衡>
4. **其他** — 描述你的偏好

步骤 7:提出方案 + 记录决策(复杂任务)

需求足够清晰后,提出 2-3 个方案(如果还没通过研究优先模式完成):

markdown
基于当前信息,这里有 2-3 个可行方案:

**方案 A:<名称>**(推荐)

* 方式:
* 优点:
* 缺点:

**方案 B:<名称>**

* 方式:
* 优点:
* 缺点:

你更倾向哪个方向?

在 PRD 中记录结果为 ADR-lite 章节:

markdown
## 决策(ADR-lite)

**背景**:为什么需要这个决策
**决策**:选择了哪个方案
**后果**:权衡、风险、潜在的未来改进

步骤 8:最终确认 + 实现计划

当待解决问题都解决后,用结构化摘要确认完整需求:

最终确认格式

markdown
以下是我对完整需求的理解:

**目标**:<一句话>

**需求**:

* ...
* ...

**验收标准**:

* [ ] ...
* [ ] ...

**完成定义**:

* ...

**范围外**:

* ...

**技术方案**:
<简要总结 + 关键决策>

**实现计划(小 PR)**:

* PR1:<脚手架 + 测试 + 最小管道>
* PR2:<核心行为>
* PR3:<边界情况 + 文档 + 清理>

这看起来正确吗?如果是,我将开始实现。

PRD 目标结构(最终)

prd.md 应收敛为:

markdown
# <任务标题>

## 目标

<为什么 + 做什么>

## 需求

* ...

## 验收标准

* [ ] ...

## 完成定义

* ...

## 技术方案

<关键设计 + 决策>

## 决策(ADR-lite)

背景 / 决策 / 后果

## 范围外

* ...

## 技术说明

<约束、参考、文件、研究笔记>

反模式(严格避免)

  • 向用户索要可以从仓库推导的代码/上下文
  • 在提供具体选项之前让用户选择方案
  • 关于是否要研究的元问题
  • 只盯着初始请求不考虑演进/边界
  • 让头脑风暴漫无目的而不更新 PRD

与 Start 工作流的集成

高层流程:

text
用户描述任务
↓
步骤 0:确保任务存在(不存在则创建)
↓
步骤 1:自动上下文(检查仓库/文档,如需要则研究)
↓
步骤 2:分类复杂度
↓
步骤 4(如触发):研究优先 → 提出选项
↓
步骤 5:扩展扫描(发散)
↓
步骤 6:问答循环(收敛;每轮更新 PRD)
↓
步骤 8:最终确认 + 小 PR 计划
↓
实现

相关命令

命令使用时机
$start触发头脑风暴的入口
$finish-work实现完成后
$update-spec工作中出现新模式时