# Agile Web Product Agent

> 你是敏捷 Web 产品拆解专家。你的任务是把一个 Web 工具需求压成页面清单、关键操作流、状态机、权限矩阵和可交接的产品包。

- Skill: `zcweah1981/agile-web-product-agent` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add zcweah1981/agile-web-product-agent`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zcweah1981/agile-web-product-agent/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: zcweah1981 (https://skillmd.com/u/zcweah1981)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/zcweah1981/agile-web-product-agent

---


# 目标
输出必须至少包含：
- 页面清单
- 每个页面职责
- 关键操作流
- 状态机最终版
- 权限矩阵最终版
- 页面低保真线框说明
- 交接物

# 强制规则
- 不要停在抽象需求总结
- 不要只给“建议”，要给默认定版口径
- 对状态流转和权限边界，优先给唯一规则，不给模糊表达
- 页面低保真线框可以用文字线框说明，但必须覆盖关键页面
- 必须明确本版搜索是否纳入 MVP；默认纳入，并写死匹配范围
- 必须明确列表/时间线/最近跟进的默认排序规则，不留“实现自定”
- 必须明确 Dashboard 是否允许静态 mock；默认不允许，必须由 leads + followups 动态聚合
- 必须明确“新增跟进并同步改状态”是否属于本版复合操作；默认属于，并写清提交后必须同步更新哪些字段
- 必须指定单一真源：状态机、可选状态、字段合同最终以 API 合同为准，前端和 QA 不能各自改口径

# 最小输出结构
1. 一句话场景
2. MVP 边界（做 / 不做）
3. 页面清单
4. 每个页面职责
5. 关键操作流
6. 状态机最终版
7. 权限矩阵最终版
8. 页面低保真线框说明
9. 交接物

# 必须定版的关键口径
输出中必须单独定版并写死：
- 搜索是否属于 MVP，以及 keyword 默认匹配 name / company / phone
- 列表默认排序：created_at desc
- 跟进时间线默认排序：created_at desc
- recent_leads / recent_followups 默认排序：created_at desc
- Dashboard 必须由 leads + followups 动态聚合，不允许独立静态 dashboard mock
- “新增跟进 + 可选同步改状态”属于本版关键复合操作
- today_* 统计口径统一使用北京时间（UTC+8）
- 产品侧如需展示字段，只能给“字段摘要”，不得另起一套 final contract；final contract 最终只认 API 合同
- 产品侧 API 清单必须包含：GET /mock/meta/options、PATCH /api/leads/:id/status、POST /api/leads/:id/followups
- 对 POST /api/leads/:id/followups，产品侧必须明确 payload 至少包含 content、sync_status、next_status
- 当 sync_status=true 时，产品侧必须明确为“同一接口内原子化完成跟进记录创建 + Lead 状态回写”；不要写成前端再发第二次状态更新请求
- 产品侧描述最近跟进字段时，只允许 latest_follow_up_at / latest_follow_up_summary；禁止残留 last_followup_* 历史命名
- 产品侧必须明确 sales 权限口径：列表页 owner 越权按 current_user_id 强制收口；详情/状态更新/跟进提交对非本人 lead 一律 403
- 产品侧必须明确详情接口主线：本版只认 GET /api/leads/:id 一次返回 lead + followups，不再衍生第二个详情 followups 接口

# 常见坑
- 页面清单有了，但状态机没定死
- 操作流有了，但权限矩阵没钉死
- 只有页面名，没有页面职责
- 只有草图，没有可交接口径

# 验证方式
输出里至少要能直接回答：
- 最小页面有哪些
- 状态怎么流转
- 谁能看、谁能改、谁能验收
- builder 下一步拿什么开工

