Maintains capability vision documents in `.codestable/requirements/` with three modes: draft for future capabilities, backfill for undocumented existing ones, and update for changes. Gets triggered during feature design to capture vision, or during acceptance to upgrade draft requirements to current status once implemented. The docs answer "what capability and why" in plain language, not "how to build it" (that's architecture's job). Enforces single file per run because AI loves to batch generate requirements nobody reviews. The pitch field has to work as marketing copy, user stories need concrete scenarios, and you're not allowed to stuff implementation details in. Watch out for the temptation to write PRD-style field dumps or explain like you're teaching a class.
npx -y skills add liuzhengdongfortest/codestable --skill cs-req --agent claude-codeInstalls into .claude/skills of the current project.
开始任何判断或动作前,先读取 .codestable/attention.md;缺失则视为骨架不完整,提示先补齐或运行 cs-onboard,不要回退到外部 AI 入口文件。
.codestable/requirements/ 是项目的"能力清单"——每份描述一个能力因什么问题而产生、怎么解决、边界在哪,写成人话非技术读者也能看懂。架构文档讲"怎么搭",需求文档讲"为什么要有"。
req 是系统的能力愿景层——描述"用户需要什么、系统提供什么能力来满足"。三层时间深度用一个 status 字段区分:
draft:用户有这个需要,系统还没实现(未来愿景)current:系统正在满足(现在的能力)outdated:曾经满足过,现已移除或不再维护(过去的痕迹)draft req 可以独立于实现存在——用户说"我想要 X 能力"但还没想好什么时候做,可以先落一份 status: draft 的 req 把愿景定下来,后续 roadmap 排期、design 对齐时都有稳定参考。不做 roadmap 规划不等于不该有愿景文档。
draft → current 的主路径是 feature-acceptance:能力实现完成、验收通过后,acceptance 触发 cs-req update 把 status 从 draft 改为 current,同时按实际实现刷新用户故事 / 边界(保留原始愿景不被覆盖,只在文末加变更日志)。
backfill 路径保留:已经在跑但从没写过 req 的能力,走 backfill 直接落 status: current。
不记"怎么分步实现"——那是 cs-roadmap 的事。req 只回答"要什么、为什么",不回答"第几个 sprint 做、拆成几个子 feature"。
需求文档价值在扫一眼就抓到重点——用户故事在最前、痛点和解法各一段短的、边界用列表。AI 容易破坏这个特性的几种问题:
共享路径与命名约定看
.codestable/reference/shared-conventions.md。一份样例看.codestable/reference/requirement-example.md——起草前读一遍对齐语气。
draft 起草愿景落 status: draft,后续 design 和 roadmap 都有稳定对齐基准draft 起草愿景(用户故事 / 痛点 / 解法 / 边界),落 status: draftupdate 升级为 current(保留愿景,追加变更日志);从未写过 req 的已存在能力 → backfill 直接落 current;已有 current req 的能力改了边界 / 用户故事 / pitch → update 刷新backfill)update)draft req 把定位定下来不适用:要写"技术上怎么搭" → cs-arch;写单次 feature 方案 → cs-feat-design;拍板长期规约 → cs-decide;写外部"怎么用" → cs-guide;大需求拆几轮做 → cs-roadmap。
每次只动一份文档:
status: draftstatus: current为什么不允许多份?req 价值在每份都被读过——一次吐多份用户没精力逐份 review,最后要么粗糙合入要么放着不看。
纯内部重构 / 技术债清理 / 工具链改造不新增用户可感能力的 feature 不强制要 req。feature-design 标"本次不新增能力"即可,不要为凑一份硬写。
模式 + 目标文档 + 范围。
draft 模式:能力还没实现,凭用户素材(口述 / 产品想法 / 用户反馈)起草愿景。用户故事和痛点要真切,边界要写清楚"不管什么"——愿景的价值正在于把"要做什么"和"不做什么"的线画清楚。
一份 req 描述一个能力。用户说"把这模块的需求全写了"先问清:模块对外提供几个独立能力?每个独立能力一份不要塞一起。
共同必读:VISION.md(需求中心索引)+ requirements/ 下其他 req(判断要不要互引、有没有重复)+ 用户素材(口述 / 产品想法 / 用户反馈 / 已有 feature 散落需求描述)。
按情况读:可能承载这能力的 architecture doc(用于 implemented_by);相关已有 feature 方案;compound 沉淀(python .codestable/tools/search-yaml.py --dir .codestable/compound --query "{能力关键词}")。
draft 额外:和 roadmap 对一眼——如果已经有 roadmap 提到了这个能力,读一下了解预期的拆解方向,但 req 本身不绑定 roadmap 条目。
update 额外:当前文档全文 + last_reviewed 之后相关实现的变化(git log 粗扫 implemented_by 对应的代码模块)。
按下文"文档结构"写完整初稿不分批。用户故事 / 痛点 / 解法 / 边界四块经常有跨块矛盾(用户故事描述的场景和解法描述的路径对不上),只有放在一起才看得出来。
review 前自跑一遍。每条针对一种 AI 默认会犯的错:
自查结果简短汇报——发现问题就说怎么处理(删 / 改 / 补),不走过场。
完整初稿贴给用户。改到用户明确"可以了"。
requirements/{slug}.md,status: draft、last_reviewed 当天requirements/{slug}.md,status: current、last_reviewed 当天last_reviewed 当天;结构性改动大则文末 变更日志 加一条;draft → current 的状态升级是结构性改动,必须加变更日志requirements/VISION.md——按 status 分组列出所有 req,每条带 pitch 一句话和 status 标记---
doc_type: requirement
slug: {英文连字符;和文件名一致}
pitch: {一句话去技术化说清楚这能力,可直接当宣传素材}
status: current | draft | outdated
last_reviewed: YYYY-MM-DD
implemented_by: [] # 承载的 architecture doc slug 列表,可空
tags: []
---
# {标题 — 直接平铺说这能力是什么,不玩比喻}
## 用户故事
- 作为 {具体角色 / 处境},我希望 {能做什么},而不是 {现在怎么难受}
- ...(2-4 条,每条一行)
## 为什么需要
一段短的,讲这能力不存在时的痛点。非技术读者也能读懂。直接当宣传素材——痛点描述得越真切,对外讲这系统解决什么问题时就越有抓手。
## 怎么解决
一段短的,讲这能力大概怎么工作。**不写实现细节**——不提模块名 / 接口 / 算法。讲"用户体验上发生了什么"就够。
## 边界
- 它不管什么(哪些事情看起来相关但它不负责)
- 什么情况下别用它
- 用的前提(用户需要先做什么)
## 变更日志
- YYYY-MM-DD:{一句话描述}
doc_type: requirement / pitch / status / last_reviewed)pitch 读起来能直接当宣传词,draft 也能直接当宣传词(愿景也需要卖得出去)变更日志(含 draft → current 状态升级)| 方向 | 关系 |
|---|---|
cs-arch 配合 | req 写"为什么要有"、architecture 写"怎么搭";arch doc frontmatter 用 implements: [req-slug] 反向链 |
cs-brainstorm 可触发 | 磋商后愿景清晰时可触发 draft 模式起草愿景 req |
cs-feat-design 可写 | design 读已有 req 对齐用户故事和边界;新能力首次设计方案化时触发 draft 模式起草愿景 req |
cs-feat-accept 主路径 | 验收统一处理 req 落档:draft req 对应的能力实现完成触发 update(draft → current,保留愿景追加变更日志);从未写过 req 的能力触发 backfill(直接落 current);已有 current req 的能力改变触发 update 刷新 |
cs-roadmap 配合 | req 记"要什么、为什么"、roadmap 记"怎么分步实现"。roadmap 条目可关联 req slug,但 req 不绑定具体 roadmap。draft req 不给 roadmap 压力——愿景可以先于排期存在 |
cs-onboard 创建者 | onboard 建 requirements/ 空目录 + VISION.md 空骨架 |
status: current,或编造了解法细节假装已存在pitch 塞了技术黑话——宣传时抽不出来用juliusbrussee/caveman
mattpocock/skills
shadcn/improve
obra/superpowers
forrestchang/andrej-karpathy-skills
vercel-labs/skills