skills/analyze-requirements/SKILL.md
--- name: analyze-requirements description: Transform vague intent or incomplete requirements into validated, testable requirements through diagnostic state progression and structured dialogue. Use when user has an idea, feature request, problem statement, or existing requirements document that needs clarification or validation before design or implementation. description_zh: 通过诊断状态推进与结构化对话,将模糊意图或不完整需求转为可验证、可测试的需求。 tags: [writing, documentation] version: 3.0.0 license: MIT recommended_scope: bot
npx skillsauth add nesnilnehc/ai-cortex skills/analyze-requirementsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
诊断需求层面的问题,将模糊的意图转化为有效的、可测试的需求。引导开发人员从“我想构建 X”到明确的问题陈述、优先需求、明确的约束和有限的范围——所有这些都在任何设计或实施开始之前。
首要目标:生成一份已验证的需求文档,其中每个需求都是可测试的、范围明确的并且以实际问题为基础。
成功标准(必须满足所有要求):
docs/ARTIFACT_NORMS.md 写入 docs/requirements-planning/<topic>.md 并提交验收测试:不熟悉该项目的人是否可以阅读需求文档并理解问题,谁有它,“完成”是什么样的,以及什么超出了范围 - 而无需提出澄清问题?
本技能负责:
本技能不负责:
转交点:当需求已验证(满足所有成功标准)时,移交给“设计解决方案”进行设计探索,如果设计很琐碎,则移交给实施计划。
按 specs/artifact-contract.md §8 Runtime Norms Resolution Protocol 实现:
requirements artifact_type 的 path_pattern(默认:docs/requirements/{slug}.md;项目可覆盖为任意自定义路径,如聚合式 work/{parent_slug}/requirement.md)upstream_ref:在产出制品的 frontmatter emit parent: <upstream_ref>DO NOT propose architecture, choose technologies, create designs,
or write code until requirements are validated.
Requirements describe PROBLEMS and NEEDS, not SOLUTIONS.
If a requirement mentions technology, it is a solution in disguise.
开始时宣布:“我正在使用分析需求技能在任何设计或实施之前验证需求。”
对输入执行快速质量评估:
| 维度 | 股份范围 |检查什么 | | :--- | :--- | :--- | | 清晰度 | 0–100% |有没有一个明确的解释?术语有定义吗? | | 特异性 | 0–100% |是否提供了上下文?是否提到了成功标准?范围有限制吗? | | 完整性 | 0–100% |是否提供了所有必要的信息?是否提到了限制条件? |
决策矩阵:
|总分|行动| | :--- | :--- | | < 40% |从状态 RA0 开始(问题发现) | | 40–70% |确定最早的问题状态并从那里开始 | | > 70% |快速验证并关注差距 |
按顺序进展状态。不要跳过状态——如果问题不清楚,不要讨论需求。
症状:从解决方案开始(“我想构建 X”);功能列表无接地问题; “每个人都需要这个”推理;无法明确谁有什么问题。
关键问题(一次问一个):
干预:
退出标准:存在未提及任何解决方案或技术的问题陈述。
症状:问题清晰之前的技术选择(“需要数据库”、“应该使用 React”); 需求描述的是实施而不是需求;不参考技术就无法解释需求。
关键问题:
干预:
退出标准:每个需求都描述了需求,而不是实现。技术参考要么被删除,要么被明确记录为真正的约束。
症状:无法描述“完成”是什么样子;基于形容词的需求(“快速”、“简单”、“直观”); 无法测试的需求; “用户应该能够……”没有具体说明。
关键问题:
干预:
退出标准:每个要求都有接受标准。不再有仅形容词的需求。
症状:意外依赖性出现较晚;没有明确的约束库存;假设被视为事实;在讨论中发现阻碍因素。
关键问题:
干预:
退出标准:存在约束清单,明确区分实际约束与假设。
症状:每个功能都感觉同样重要;无V1边界; “当我们这样做时……”补充; 需求的增长速度快于他们的满足程度。
关键问题:
干预:
退出标准:V1 边界明确。延迟项目与触发器一起列出。对于范围内的内容没有任何含糊之处。
指标:
下一步:将已验证的需求文档移交给“设计解决方案”。
docs/requirements-planning/<topic>.mddocs/需求/<topic>.md 的现有项目可能会暂时保留该路径# [Topic] Requirements
**Date:** YYYY-MM-DD
**Status:** Validated
**Approved by:** [User name or "User"]
## Problem Statement
[Who has what problem and why it matters. No solution or technology references.]
## Need Hierarchy
### Must Have (V1)
| ID | Need | Acceptance Criteria | Status |
| :--- | :--- | :--- | :--- |
| R-01 | [Testable need] | Given [X], when [Y], then [Z] | Validated |
| R-02 | [Testable need] | [Measurable criterion] | Validated |
### Should Have (V1 if time permits)
| ID | Need | Acceptance Criteria | Status |
| :--- | :--- | :--- | :--- |
| R-03 | [Testable need] | [Criterion] | Validated |
### Could Have (Post-V1)
| ID | Need | Trigger to reconsider | Status |
| :--- | :--- | :--- | :--- |
| R-04 | [Deferred need] | [When to revisit] | Deferred |
## Constraint Inventory
### Real Constraints (Validated)
- [Budget, time, skills, dependencies, integrations]
### Assumptions (Unvalidated)
- [Assumptions that need validation, with plan to validate]
## Scope Definition
- **In scope (V1):** [Explicit list]
- **Out of scope:** [Explicit list]
- **Walking skeleton:** [Thinnest useful version]
## Open Questions
- [Any remaining unknowns with plan to resolve]
该技能生成的每个需求条目初始状态应设为 Validated(已验证)或 Deferred(已推迟)。
下游执行、计划或开发流程(例如 breakdown-tasks 和执行 Agent)负责在实施期间更新文档中这些需求的状态(例如更新为 In Progress、Implemented、Dropped 等)。本技能不负责此后的状态更新。
|转到文件|保持对话状态 | | :--- | :--- | |问题陈述|五个为什么探索 | |需要具有验收标准的层次结构|优先讨论 | |限制库存|假设发现对话| |范围定义 |削减/保留谈判 | |验证需求 |澄清问题|
不要做这些(其他技能可以处理它们):
review-coderefine-skill-design何时停止并交接:
Validated),并在输出中包含状态列docs/requirements-planning/<topic>.md并提交在声明需求已验证之前,问问自己:
不熟悉该项目的人是否可以阅读需求文档并理解问题、谁有这个问题、“完成”是什么样子以及什么超出了范围——而不需要提出澄清问题?
如果否:要求不完整。返回到最早未解决的状态。
如果是:要求已验证。坚持并移交给“设计解决方案”。
用户:“我想构建一个静态站点生成器。”
代理宣布:“在任何设计或实施之前,我正在使用分析需求技能来验证需求。”
分类:清晰度 30%,特异性 10%,完整性 10%。从 RA0 开始。
RA0 — 问题发现:
代理:“现有静态站点生成器的具体挫败感导致了这个想法?”
用户:“我厌倦了复杂性。我只想编写 Markdown 并获取 HTML。”
特工:“你今天做什么?”
用户:“我使用 Hugo,但调试配置的时间比编写内容的时间多。”
捕获的问题陈述:“单独的内容创建者浪费时间调试 SSG 配置而不是编写。需要从 Markdown 到 HTML 的零配置路径。”
RA1 — 解决方案优先检查:
代理:“您提到了 Hugo - 有什么关于 Hugo 的具体内容是您需要保留的吗?或者无论使用什么工具,“Markdown → HTML”都是核心需求吗?”
用户:“只是 Markdown 到 HTML。我不在乎如何。”
退出 RA1:需要在没有技术锁定的情况下确认。
RA2 — 特异性:
特工:“最简单有用的版本‘完成’会是什么样子?”
用户:“我将其指向 .md 文件的文件夹,然后获取具有基本样式的 .html 文件的文件夹。”
特工:“你怎么知道输出是正确的?”
用户:“每个 .md 文件都会生成一个 .html 文件。页面之间的链接有效。它在移动设备上看起来可读。”
捕获的验收标准:
.md文件→一个.html文件(1:1映射)RA3 — 限制:
特工:“你有什么时间和技能来做这件事?”
用户:“晚上和周末,每周大概 10 个小时。我很了解 JavaScript。”
限制库存: 时间:10 小时/周;技能:JavaScript熟练程度;依赖性:未确定。
RA4 — 范围:
代理:“如果你只能发布 3 个功能,那它们是什么?”
用户:“Markdown 到 HTML、基本 CSS 和具有实时重新加载功能的开发服务器。”
范围定义:
.md 文件转换为 .html 的 CLIRA5 — 已验证:代理提供摘要,用户说“看起来不错”。写入“docs/requirements-planning/static-site-generator.md”的文档。
用户:“我需要一个带有 PostgreSQL 数据库、GraphQL API 和 Redis 缓存的 React 应用程序。”
代理宣布:“在任何设计或实施之前,我正在使用分析需求技能来验证需求。”
分类:清晰度 60%(明确的技术),特异性 20%(没有说明问题),完整性 15%。从 RA0 开始。
RA0 — 问题发现:
特工:“这些都是技术选择。你想解决什么问题?谁有问题?”
用户:“哦......我需要跟踪我的小型企业的库存。我目前使用电子表格并不断丢失数据。”
问题陈述:“小企业主由于电子表格的限制而丢失库存数据。需要可靠的库存跟踪。”
RA1 — 解决方案优先清理:
Agent:“让我们在没有技术的情况下重写需求。‘React、PostgreSQL、GraphQL、Redis’都是解决方案。它们代表什么需求?”
重写:
代理:“‘快速加载’可以测试吗?多快可以接受?”
用户:“库存列表页面不到 2 秒。”
退出 RA1:根据需要重写需求。技术选择推迟到设计阶段。
RA2–RA5:继续穿过各州。最终文档在没有技术假设的情况下捕获需求,允许“设计解决方案”探索正确的解决方案(这可能是一个简单的电子表格替代方案,而不是全栈应用程序)。
用户:“我们开始构建一个待办事项应用程序,但现在它需要日历集成、团队协作、文件附件和人工智能驱动的任务建议。我们落后了 3 周。”
代理宣布:“在扩大范围之前,我正在使用分析需求技能来验证需求。”
分类:清晰度 50%,特异性 40%,完整性 30%。范围蔓延症状——从 RA4 开始(早期的状态可能会在 3 周后得到解决,但需要验证)。
快速 RA0 检查:“这个待办事项应用程序解决的原始问题是什么?”
用户:“我需要停止忘记我的自由项目的任务和截止日期。”
问题已确认 — 继续进行 RA4。
RA4 — 范围蔓延干预:
代理:“如果你只能从完整列表中提供 3 个功能,哪 3 个可以解决不忘记任务的核心问题?”
用户:“基本任务列表、带提醒的截止日期,以及……现在就这些了。”
代理:“所以日历集成、团队协作、文件附件和人工智能建议都是核心问题之外的附加内容。我们应该推迟它们吗?”
范围重新定义:
RA5 — 已验证:要求重新聚焦。 3 周的延迟变得可以控制。文档已更新。
问题:需求描述的是实现,而不是需求。 “系统应使用 PostgreSQL”不是必需的; “数据必须在服务器重新启动后继续存在”。
修复:对于每个要求,询问“是否可以通过不同的方式来满足?”如果是,您捕获的是实现,而不是需求。
问题:开发人员想象需求而不是发现需求。 “用户会想要……”没有证据。
修复:如果您是用户,请诚实地表达您的需求。如果是为他人构建,请与他们交谈或引用类似的证据。不要发明用户。
问题:需求不断增长,但没有划分优先级。一切都同等重要。
修复:强制等级。如果你只能运送一件东西,那是什么?然后是两个?这揭示了实际的优先事项。
问题:指定尚不重要的细节。在验证任何人想要通知之前设计通知首选项。
修复:用“[X]已验证后待定”对不确定区域进行存根。精准聚焦 V1 Must 项目。
问题:没有清点真正的约束,然后在构建过程中解决它们。
修复:在最终确定需求之前明确限制库存。
|来源 |当 |它提供什么 | | :--- | :--- | :--- | |用户请求|新项目或功能创意 |原始意图分析| |现有文档|项目中期验证 |部分需求诊断 |
|目标技能|当 |它收到什么 |
| :--- | :--- | :--- |
| 设计解决方案 |要求已验证 |验证需求文档作为设计输入 |
|实施规划|设计很琐碎|经验证的需求范围和限制 |
本技能产出 Validated Requirements Document:
| 元素 | 格式 | 必填字段 | 路径模式 | | :--- | :--- | :--- | :--- | | 文档主体 | Markdown | front-matter(artifact_type=requirements / created_by=analyze-requirements / lifecycle=snapshot / created_at;upstream_ref 提供时含 parent 字段);章节:问题陈述 / 需求层级 / 验收标准 / 约束清单 / 范围边界 / 集成地图 | norms-resolved 路径(默认 docs/requirements/<slug>.md) | | 需求条目 | 列表项或表格 | id / statement / acceptance_criteria(可观察、可测试)/ priority(must/should/could/won-t) | 「需求层级」节 | | 约束清单 | 列表项 | type(technical / business / regulatory)/ description / source | 「约束清单」节 | | 集成地图 | 表格 | upstream sources、downstream skills、handoff fields(供 design-solution 消费) | 「集成地图」节 |
development
Generate an LLM agent test suite (golden cases, mock-LLM unit tests, evaluator harness) from an agent implementation and its agent-test contract. Use when an agent has no tests, or a contract exists but the test code is missing.
development
After code changes, auto-detect the project's build system and local deployment method for a given directory, then build the project and restart its locally-deployed environment (Docker Compose / systemd / process manager). Never assumes — asks only when detection is ambiguous. Caches detected commands per project in .cortex/redeploy-local.yaml; re-invocations on the same project skip re-scanning until signal files change, the cache expires (30 days), or the skill version bumps.
tools
Publish a NATS message conforming to a cross-team contract, using NATS MCP tools. Authors the contract on first use if missing. Reads project-level cache (.cortex/nats.yaml) to avoid re-prompting basics across sessions.
tools
Drain pending NATS messages from a producer contract via NATS MCP tools (default batch / drain-style). Applies Tolerant Reader semantics and per-message ack/nak/term, returning aggregated stats. Reads project-level cache (.cortex/nats.yaml) to avoid re-prompting.