skills/cx-prd/SKILL.md
CX 工作流 — 需求收集与规模评估。当用户提到"新功能"、"需求"、"PRD"、 "我想做一个"、"帮我规划"、"收集需求"、"功能规划"时触发。 多轮对话收集需求,自动评估规模,保存到本地 开发文档/CX工作流/功能/{feature_title}/需求.md,并自动判断是否需要 Design。
npx skillsauth add m19803261706/cx-workflow cx-prdInstall 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.
把模糊想法收敛成可执行需求,并决定后续是否进入设计阶段。
先阅读:
${CLAUDE_PLUGIN_ROOT}/core/workflow/README.md${CLAUDE_PLUGIN_ROOT}/core/workflow/protocols/prd.md${CLAUDE_PLUGIN_ROOT}/references/templates/prd.md/cx:cx-prd {功能名}
/cx:cx-prd
所有文件读写必须使用绝对路径。 禁止使用 ../ 相对路径操作文件。先用 git rev-parse --show-toplevel 获取绝对路径,所有 Read/Write/Edit 操作基于该路径。
禁止跳过问答直接生成文档。 无论用户的需求描述多清晰、多完整,都必须(MUST):
需求.md违反这条规则的行为:
需求.md正确的行为:
| 借口 | 现实 | |------|------| | "用户需求已经很清晰了" | 再清晰也需要方案对比和确认 | | "这个功能很简单不需要问答" | 简单功能更容易遗漏边界条件 | | "先写文档再问也一样" | 文档先入为主会锚定思维 | | "多轮问答太慢了" | 2 轮问答 5 分钟,返工 2 小时 | | "我已经分析了代码知道该怎么做" | 分析代码 ≠ 理解用户意图 |
开发文档/CX工作流/配置.json 是运行时配置真相开发文档/CX工作流/功能/{title}/状态.json 中current_feature 指针已废弃,worktree CWD 即上下文slugcx-prd 负责需求收敛,不负责把流程做重cc 身份写共享状态;如果 feature 已由 codex 持有,先提示 handoff在 Step 0(scaffold)之前执行:
PROJECT_ROOT=$(git rev-parse --show-toplevel)
check_output=$(bash ${CLAUDE_PLUGIN_ROOT}/scripts/cx-worktree.sh check --project-root "$PROJECT_ROOT" 2>&1) || true
如果 on_main=true(在主分支上):
使用 AskUserQuestion 询问:
{
"questions": [{
"question": "当前在主分支上,需要为这个功能创建隔离工作区",
"header": "工作区选择",
"multiSelect": false,
"options": [
{ "label": "创建 Feature Worktree(推荐)", "description": "自动创建隔离分支和工作目录" },
{ "label": "在当前分支直接开始(--inline)", "description": "不隔离,适合极小改动" }
]
}]
}
用户选择创建 worktree 时:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/cx-worktree.sh create \
--feature "{feature-slug}" \
--runner cc \
--project-root "$PROJECT_ROOT"
然后 cd 到新 worktree 路径继续后续步骤。
用户选择 inline 时,继续在当前分支执行。
PROJECT_ROOT=$(git rev-parse --show-toplevel)
bash ${CLAUDE_PLUGIN_ROOT}/scripts/cx-workflow-prd.sh \
--project-root "$PROJECT_ROOT" \
--title "{功能标题}" \
--slug "{feature-slug}" \
--runner cc \
--session-id "{session-id}" \
--size "{S|M|L}" \
--needs-design "{true|false}" \
--question-mode checklist
这个 shared runner 负责确定性落盘:
开发文档/CX工作流/功能/{功能标题}/需求.md开发文档/CX工作流/功能/{功能标题}/状态.json.cx/core/features/{feature-slug}.json.cx/core/projects/project.json每次进入 PRD 时都执行,确保 dashboard 服务始终可用:
PROJECT_ROOT=$(git rev-parse --show-toplevel)
bash ${CLAUDE_PLUGIN_ROOT}/scripts/cx-dashboard-ensure.sh
bridge_output=$(bash ${CLAUDE_PLUGIN_ROOT}/scripts/cx-dashboard-bridge.sh \
--project-root “$PROJECT_ROOT” \
--display-name “$(basename “$PROJECT_ROOT”)”)
行为规则:
prompt_state=accepted(已启用):
cx-dashboard-ensure.sh)prompt_state=pending(从未被问过):
AskUserQuestion 询问是否启用全局面板--decision accept,启动服务--decision decline,本次跳过prompt_state=declined(曾经跳过):
runtime.json 中 last_checked_at:
服务重启后的行为:
cx-dashboard-ensure.sh 会检测 PID 是否存活~/.cx/dashboard/registry.json 中已注册的项目需求.md / 设计.md / 修复记录.md,只提炼与本次需求相关的部分PRD 阶段的所有用户交互 必须(MUST) 使用 AskUserQuestion 工具。
禁止用纯文字列选项或开放式盘问代替。每轮先复述当前理解,再用结构化问题追问缺口。
先根据用户描述和代码分析,主动提出 2-3 个可行的实现方向,让用户选择或补充:
{
“questions”: [
{
“question”: “基于你的描述和项目现状,我分析了几个可行方向,哪个最接近你的预期?”,
“header”: “实现方向”,
“multiSelect”: false,
“options”: [
{
“label”: “方案 A: {简要描述} (Recommended)”,
“description”: “{优势、适用场景、预估工作量}”
},
{
“label”: “方案 B: {简要描述}”,
“description”: “{优势、适用场景、预估工作量}”
},
{
“label”: “方案 C: {简要描述}”,
“description”: “{优势、适用场景、预估工作量}”
}
]
},
{
“question”: “这个功能会影响哪些层级?”,
“header”: “影响范围”,
“multiSelect”: true,
“options”: [
{ “label”: “前端 UI/交互”, “description”: “页面、组件、样式、路由” },
{ “label”: “后端 API/逻辑”, “description”: “接口、服务、中间件” },
{ “label”: “数据库/状态”, “description”: “表结构、状态机、缓存” },
{ “label”: “基础设施/部署”, “description”: “配置、CI/CD、环境变量” }
]
}
]
}
方案推荐规则:
(Recommended),附带理由根据 Round 1 的选择继续深入。可同时问 1-4 个问题:
{
“questions”: [
{
“question”: “需要支持哪些核心功能?”,
“header”: “核心功能”,
“multiSelect”: true,
“options”: [
{ “label”: “{功能点 A}”, “description”: “{说明}” },
{ “label”: “{功能点 B}”, “description”: “{说明}” },
{ “label”: “{功能点 C}”, “description”: “{说明}” },
{ “label”: “{功能点 D}”, “description”: “{说明}” }
]
},
{
“question”: “以下哪些属于本次范围外?”,
“header”: “Out of Scope”,
“multiSelect”: true,
“options”: [
{ “label”: “{排除项 A}”, “description”: “{为什么建议排除}” },
{ “label”: “{排除项 B}”, “description”: “{为什么建议排除}” }
]
}
]
}
{
“questions”: [
{
“question”: “以下验收标准是否完整?”,
“header”: “验收标准”,
“multiSelect”: true,
“options”: [
{ “label”: “{标准 1}”, “description”: “{可测试的具体条件}” },
{ “label”: “{标准 2}”, “description”: “{可测试的具体条件}” },
{ “label”: “{标准 3}”, “description”: “{可测试的具体条件}” }
]
},
{
“question”: “识别到以下潜在风险,需要特别关注哪些?”,
“header”: “风险”,
“multiSelect”: true,
“options”: [
{ “label”: “{风险 A}”, “description”: “{影响和缓解方案}” },
{ “label”: “{风险 B}”, “description”: “{影响和缓解方案}” }
]
}
]
}
在 shared runner 先完成最小落盘后,再把需求内容补充完整,而不是只停留在口头问答。
文档里至少包含:
根据分析结果给出建议,MUST 使用 AskUserQuestion 让用户最终确认:
{
“questions”: [
{
“question”: “需求已收敛完成。根据分析建议规模为 {S/M/L},接下来?”,
“header”: “下一步”,
“multiSelect”: false,
“options”: [
{
“label”: “{推荐路由} (Recommended)”,
“description”: “{推荐理由}”
},
{
“label”: “走完整流程(PRD → Design → Plan)”,
“description”: “即使是小功能也做完整设计,适合不确定性较高的场景”
},
{
“label”: “直接进入规划(PRD → Plan)”,
“description”: “跳过设计阶段,适合需求已经非常清晰的场景”
}
]
}
]
}
路由规则:
S:默认推荐 /cx:cx-planM:默认推荐 /cx:cx-designL:默认推荐 /cx:cx-design,并在重大架构决策时补 /cx:cx-adr只有在需求确实成熟后,才把 feature 状态从 drafting 推进到下一阶段。
开发文档/CX工作流/功能/{功能标题}/需求.md状态.json 更新 current_feature、features[slug].cx/core/features/{slug}.json 与 project.json/cx:cx-plan 或 /cx:cx-designtools
CX 工作流 — 汇总发布与闭环。手动触发或在所有任务完成后进入。 负责生成总结、同步 GitHub 镜像、清理当前 feature 指针。
tools
CX 工作流 — 进度查看。读取项目级配置和状态文件,展示当前功能、 当前任务、阻塞原因和最近修复记录。
tools
CX 工作流 — 项目蓝图探讨。当用户提到"蓝图"、"整体规划"、"项目范围"、 "scope"、"项目探讨"、"功能方案"时触发。多轮对话探讨项目或功能方案, 将结果保存到本地 `开发文档/CX工作流/功能/{功能标题}/范围.md`, 可选同步到 GitHub Issue(基于 config.github_sync 模式)。
tools
CX 工作流 — 任务规划与契约下沉。当用户提到"规划任务"、"制定计划"、 "plan"、"拆分任务"时触发。读取设计文档(小功能则读取 PRD), 生成任务分解,创建子任务文件并将契约下沉到任务中。 产物保存到本地 开发文档/CX工作流/功能/{feature_title}/任务/。