关于 ask-questions-if-underspecified
这项 Agent 技能适用于需求不明确的实现任务,帮助在动手前找出会阻碍正确实现的关键信息。它区分需要询问的范围与约束问题,以及可自行决定的实现细节,并用默认假设推动并行工作。
主要功能
- 01识别范围、约束和验收标准缺口
- 02提出最少量的澄清问题
- 03为问题提供具体默认假设
- 04区分待询问事项与自行决策事项
- 05在等待答复时按默认值推进工作
适用场景
- 01需求描述含糊、可能影响实现范围
- 02性能或安全要求尚未明确
- 03验收标准或优先级存在疑问
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill ask-questions-if-underspecified安装后在 Claude Code 中输入/ask-questions-if-underspecified确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
commands/ask-questions-if-underspecified.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/ask-questions-if-underspecified.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md详细介绍
需求不明确时先提问
需求不明确时先提问技能 - 在开始实现前,针对模糊或缺少关键信息的需求提出最少量的澄清问题 - 识别会妨碍正确实现的模糊或缺失需求 - 提出最少且可行的澄清问题,并给出具体的最佳猜测默认值 - 区分范围/约束问题(需要提问)与实现细节决策(自行决定) - 在等待答复的同时,按明确说明的默认值推进并行工作第 1 步:评估需求是否明确
找出不清楚或缺失的方面:
- 范围:具体应包含/排除哪些内容?
- 约束:性能目标、平台要求、安全规则?
- 验收标准:用户将如何判断是否成功?
- 优先级:存在冲突的选项中应优先考虑哪个?
不要询问可以通过阅读现有代码和惯例来确定的事项。
第 2 步:筛选问题
将每个候选问题归类:
| 类型 | 提问还是自行决定? |
|---|---|
| 范围边界(包含哪些内容) | 提问 |
| 非功能性要求(性能/安全目标) | 提问 |
| 验收标准 | 提问 |
| 实现方案 | 自行决定 |
| 代码风格/命名 | 自行决定(遵循现有模式) |
| 可有可无的润色 | 自行决定(采用合理默认值继续) |
第 3 步:简洁提问(最多 3 个问题)
针对每个阻塞性问题:
- 说明你的假设(最佳猜测默认值)
- 用一句话提出具体问题
- 适用时提供 2–3 个具体选项
格式:
I'll [proceed with X default assumption]. Quick questions before I start:
1. [Specific question]? (default: [assumption])
2. [Specific question]? (default: [assumption])
</execution_process>
<best_practices>
- 每个问题都提供默认值:始终说明你的最佳猜测,让用户只需确认,而不必从头作答
- 询问结果,而非实现方式:“是否应支持离线使用?”而不是“应使用 IndexedDB 还是 localStorage?”
- 先阅读代码库:许多看似模糊的问题都能通过现有模式解决——提问前先检查
- 将所有问题合并到一条消息中:不要一次问一个问题,等待答复后再问下一个
</best_practices>
**示例 — 需求不明确的功能请求:**用户:“为仪表板添加搜索功能”
好的回复:
I'll implement client-side search with debouncing and case-insensitive matching. Quick questions before I start:
1. Should search cover all columns or just the name/title column? (default: name/title only)
2. Should results filter in place or open in a new panel? (default: filter in place)
不好的回复:
Before I start, I need to know:
1. What search algorithm should I use?
2. Should it be case sensitive?
3. What debounce delay?
4. Should I use a library?
5. How many results to show?
</usage_example>
铁律
- 一次绝不提问超过 3 个问题——问题超过 3 个会让人难以决策;应严格筛选,其余问题自行决定。
- 每个问题都必须附带最佳猜测默认值——没有默认值的问题会迫使用户从头思考;附带默认值则只需一句话确认。
- 绝不询问你可以自行决定的实现细节——算法选择、代码结构、命名惯例和库的选择都由你决定,而非用户。
- 绝不因可有可无的需求而停滞——识别真正的阻塞项与可以采用合理默认值决定的事项;使用默认值继续推进,并说明你的假设。
- 提问前务必阅读现有代码——先检查现有模式、惯例和相关代码;查看现有内容通常就能解决大多数看似模糊的问题。
反模式
| 反模式 | 失败原因 | 正确做法 |
|---|---|---|
| 开始前提出 5 个以上问题 | 让用户无所适从;像是在盘问 | 最多筛选出 3 个阻塞性问题;其余自行决定 |
| 询问实现方式 | 这是 Agent 的工作,不是用户的 | 只询问范围、约束条件和验收标准 |
| 提问时不提供默认选项 | 用户必须从零开始思考;反馈周期更长 | 始终说明:“默认值:X——是否正确?” |
| 逐个提问(一次一个) | 造成缓慢的来回沟通 | 在一条消息中列出所有问题 |
| 询问代码库中显而易见的信息 | 显示出研究不够充分 | 提问前先阅读现有规范 |
记忆协议(强制)
开始之前:
cat .claude/context/memory/learnings.md
完成之后:
- 新模式 ->
.claude/context/memory/learnings.md - 发现问题 ->
.claude/context/memory/issues.md - 作出决策 ->
.claude/context/memory/decisions.md
假设工作会中断:你的上下文可能会重置。如果内容没有记录在记忆中,就等于没有发生。
评论
支持 Markdown