Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

zzusp/doc-first-dev

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

33 Commits

Repository files navigation

Doc-First Dev

English: One living spec per module, decisions logged separately — Agent Skills that make doc-first delivery a habit, not a burden. Works with agents listed on the Agent Skills Directory (Claude Code, Cursor, Codex, and others that load skill folders).

中文: 每个模块一份活文档,spec 记现状、决策日志记理由——将文档先行固化成可安装的 Skills + 模板

Skill 名称(SKILL.md) 典型触发 一句话
spec-first /spec-first <需求或变更描述> 单模块全周期:匹配 spec → 更新方案 → 确认门 → 开发 → 验收 → 收尾
spec-multi /spec-multi <跨服务需求描述> 多服务协调:链路追踪 → 依赖编排 → 并行开发 → 集成验收(单服务 + E2E)
whylog-record 任务完成后主动记录 把决策与替代方案追加到 docs/decisions/log.md

许可证: MIT
源码: github.com/zzusp/doc-first-dev


核心设计

模块目录化

每个模块在 docs/plans/<module>/ 下独立存放,PROJECT.md 作为统一索引入口。

理念: 文档的最大死亡原因是膨胀。当所有模块挤在一个文件里,没有人愿意维护它——改动牵连面太大,搜索成本太高,最终沦为没人读的"历史遗迹"。模块化让每份文档只承载一个关注点,团队可以独立认领、独立归档,删一个模块不会波及其他人的工作。

单一活文档

每个模块只有一份 spec,就地更新,永远代表当前真实状态。

理念: 多版本文档是"文档腐败"的最常见形态:spec-v2-final-revised.md 出现的那一刻,整个系统就崩了——没有人知道该信哪个。历史版本交给 git 管,spec 本身只有一个身份:此刻这个模块应该是什么样子。Agent 读到它时不需要判断版本,开发者打开它时不需要找"最新的那个"。

spec / 决策分治

docs/plans/ 记录「是什么」,docs/decisions/log.md 记录「为什么」。

理念: 两者的读写模式根本不同。Spec 是随机读写——按模块定位,频繁更新;决策日志是顺序追加——时间线索,只增不改。混在一起的后果是:spec 越来越臃肿,充斥着"当时我们考虑过 X 但因为 Y 放弃了",而真正描述现状的内容反而被淹没。分治后,spec 保持精简可读,决策日志保留完整上下文,互不干扰。

确认门

Phase A(分析)结束后,必须经过用户显式确认,才能进入 Phase B(开发)。

理念: AI Agent 有一种内在偏向:一旦理解了需求,会倾向于立刻开始写代码。这在需求模糊或理解存在偏差时代价极高——改错方向的代码比没有代码更难处理,因为它制造了需要被推翻的"既成事实"。确认门把"分析"和"动手"强制解耦,把人放回决策节点,而不是只在事后 review 结果。

spec-first 目标项目落地后的结构示例:

your-project/ # 单服务项目
└── docs/
 ├── plans/
 │ ├── PROJECT.md # 模块索引(自动生成或手动维护)
 │ ├── user-auth/
 │ │ └── user-auth-spec.md # 用户认证模块 spec(唯一、就地更新)
 │ ├── order-service/
 │ │ └── order-spec.md
 │ └── payment/
 │ └── payment-spec.md
 └── decisions/
 ├── log.md # 当前活跃决策日志(所有模块共用)
 ├── log-2026-01.md # 归档:超过 150 条后自动轮转
 └── log-2025-12.md

spec-multi 目标项目落地后的结构示例:

workspace-root/ # 多服务 monorepo 或 workspace
├── frontend/ # 服务 A
│ └── src/
├── backend/ # 服务 B
│ └── src/
├── data-service/ # 服务 C
│ └── src/
├── docker-compose.yml # 集成启动(spec-multi C.1 优先使用)
└── docs/
 ├── plans/
 │ ├── SERVICES.md # 服务注册表(服务名、路径、端口、依赖关系)
 │ └── requirements/
 │ ├── export-feature.md # 需求文档(跨 backend + data-service)
 │ └── user-import.md # 需求文档(跨 frontend + backend)
 └── decisions/
 └── log.md

通过 skills.sh 安装(推荐)

官方 CLI 为 vercel-labs/skills(文档见 skills.sh/docs)。命令是 npx skills add(skillsadd 之间有空格),不是 skillsadd

# 安装到当前项目或交互选择 Agent(默认行为以 CLI 提示为准)
npx skills add zzusp/doc-first-dev
# 仅查看本仓库提供哪些 skill(不安装)
npx skills add zzusp/doc-first-dev --list
# 只装其中一个,并装到全局(示例:Claude Code)
npx skills add zzusp/doc-first-dev --skill spec-first -g -a claude-code -y

本仓库在 skills/ 下包含 spec-firstspec-multiwhylog-record 三个 skill,CLI 会分别安装到各 Agent 约定的 skills 目录。

「发布」到 skills.sh 榜单:你需要知道的事

没有单独的「提交上架」表单。 skills.sh 文档 说明:榜单依据 匿名安装统计(用户执行 npx skills add <owner/repo> 时由 CLI 上报,不收集个人信息)。因此「发布」= 保持 GitHub 仓库公开 + 把安装命令写进 README / 社交传播,让别人愿意安装;安装次数会反映在排行榜上。

建议顺带做的几件事:

  1. 推送最新代码到 main,保证 GitHub 上的 SKILL.md 与描述为当前版本。
  2. 在 GitHub 仓库 About 里加 Topics,例如:agent-skillsclaude-codecursordoc-firstskills,方便被发现。
  3. npx skills find <关键词> 的收录范围以 CLI 实现为准;新仓库可能需要一定传播与安装后才会在搜索里更容易看到。

手动安装(任意 Agent)

将本仓库的 skills/ 下各 skill 目录复制到 Agent 的全局或项目 skills 目录(例如 Claude Code 常用 ~/.claude/skills/;Cursor 等以各产品文档为准)。

# macOS / Linux
cp -r skills/* ~/.claude/skills/
# Windows PowerShell(在 clone 后的仓库根目录的上一级执行,或把路径改成你的本地根目录)
git clone https://github.com/zzusp/doc-first-dev.git
Copy-Item -Path ".\doc-first-dev\skills\*" -Destination "$env:USERPROFILE\.claude\skills\" -Recurse -Force

安装后在业务项目根目录使用 /spec-first ...(或当前产品约定的 skill 调用方式)。


仓库里有什么

doc-first-dev/
├── README.md
├── CLAUDE.md # 维护本仓库时的规则(给 AI agent 看)
├── LICENSE
├── skills/
│ ├── spec-first/ ★ 单模块文档驱动全周期
│ │ ├── SKILL.md # 入口、进度 Checklist、前置检查
│ │ ├── init.md # 无 PROJECT.md 时初始化索引
│ │ ├── step0.md
│ │ ├── phase-a.md ... phase-d.md
│ │ ├── error-handling.md
│ │ ├── assets/ # claude-md-snippet、project-index、spec/API 模板
│ │ └── evals/ # 评测场景(3 个主要路径)
│ ├── spec-multi/ ★ 多服务并行开发
│ │ ├── SKILL.md # 入口、触发条件、关键约定
│ │ ├── init.md # 无 SERVICES.md 时注册服务清单
│ │ ├── step0.md
│ │ ├── phase-a.md ... phase-d.md
│ │ ├── error-handling.md
│ │ ├── assets/ # 需求文档模板、服务索引模板
│ │ └── evals/ # 评测场景(跨服务、接口漂移、部分服务变更)
│ └── whylog-record/ ★ 决策记录
│ ├── SKILL.md
│ └── evals/ # 评测场景(记录 vs 跳过 边界)
└── reference/
 └── best-practices.md # Skill 编写参考,修改 skill 前必读

三个 Skill 的分工

维度 spec-first spec-multi whylog-record
适用场景 单模块日常迭代 跨多个服务/项目的需求 任务完成后记录决策
回答的问题 这个模块现在应该怎样 多个服务如何协调变更 我们是如何走到这一步
主要产出 docs/plans/ 下的 spec docs/plans/requirements/ 下的需求文档 docs/decisions/log.md
核心机制 状态驱动阶段路由、单模块 subagent 隔离 链路追踪、依赖编排、单服务 + E2E 集成验收 顺序追加、只增不改

三者一起用:spec-first / spec-multi 管「做什么」,whylog-record 管「为什么这样做」。


新项目最小落地

  1. 安装 skills(见上节)。
  2. 在目标项目中准备 docs/plans/(若缺失,部分流程会先由 init.md 生成 PROJECT.md,仍建议目录预先存在)。
  3. spec-first/assets/claude-md-snippet.md 合并进项目 CLAUDE.md,填好构建启动/认证等与 Phase B.4、C.1 相关的段落。
  4. 验证:/spec-first + 一句测试需求,应出现文档匹配或初始化提示。

日常流程(概览)

触发 spec-first 后应维护 开发周期进度 Checklist;阶段细节以仓库内 step0.mdphase-a.mdphase-d.md 为准。

/spec-first <需求描述>
 ├─ 前置:无 PROJECT.md → init → Step 0
 ├─ Step 0:文档匹配(选择器 + Other / 新建)
 ├─ Step 1:判定 A/B/C/D → 读取对应 phase 文档
 ├─ Phase A:分析并更新 spec → 确认门
 ├─ Phase B:计划与实现 → 构建验证(CLAUDE.md)
 ├─ Phase C:启动/认证 → 验收项
 └─ Phase D:一致性 → 交付简报

新建模块:/spec-first 中选「Other → 新建文档」,或复制 assets/tech-spec-blank.mddocs/plans/<module>/


流程健康度自检(建议)

  • 新需求是否在 未确认 spec 前不擅自改代码?
  • 用户补充需求后,是否 回到分析并再次确认?
  • 是否在 明确确认通过 后才进入开发与任务执行?

更细场景见 skills/spec-first/evals/


FAQ

Q:还依赖 PreToolUse hook 吗?
A:默认不启用;以 skill 内阶段与确认门为主,需要时可自行在 .claude/settings 等配置中恢复 hook。

Q:monorepo 多包怎么用?
A:每个子项目根目录各自维护 docs/plans/ 即可。

Q:spec-firstspec-multi 怎么选?
A:需求只涉及一个模块/服务用 spec-first;需求跨多个服务同时变更(前端+后端、后端+数据服务等)用 spec-multi

Q:构建/启动命令从哪里来?
A:spec-first 的 B.4 / C.1 会读项目 CLAUDE.md 中由片段模板约定的章节。

Q:模块索引文件叫什么?
A:默认识别 docs/plans/PROJECT.md;若你在 CLAUDE.md 里约定了别的索引路径,以约定为准。

Q:和 skills.sh 上其他 skill 的关系?
A:本仓库专注 doc-first 交付与决策记录;可与目录中的其他能力(测试、设计系统等)并列安装,由 Agent 按描述与上下文选用。

About

Agent Skills for doc-first delivery — one living spec per module, decisions logged separately.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /