# Docs Driven Workflow

> Use when starting or finishing any coding/editing task in a project that follows a documentation-first AI collaboration workflow — declare scope before editing, log every change afterward with a changelog entry, scaffold a brand-new project with this discipline (AGENTS.md/README/docs skeleton), or audit and reorganize a project's folder structure against its own documented conventions.（中文触发词：初始化新项目/搭 AGENTS.md 骨架、存量项目接入文档驱动规范、整理文件夹/文件归档、改动前声明范围、改动后写 CHANGELOG/留痕）

- Skill: `mnickz/docs-driven-workflow` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add mnickz/docs-driven-workflow`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mnickz/docs-driven-workflow/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: MNICKZ (https://skillmd.com/u/mnickz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/mnickz/docs-driven-workflow

---


# Docs-Driven Workflow

文档先行的 AI 协作纪律：改前声明范围，改后必须留痕，按需脚手架新项目或整理文件夹。提炼自两个项目实测过的 AGENTS.md 规则。

**本 skill 只有 `SKILL.md` 这一个文件，不允许有任何附属文件夹或模板文件。** 初始化模式需要的六个文件模板全部内嵌在下方「初始化模式」小节里，直接用当前环境提供的文件写入能力按模板内容建文件，不依赖外部骨架目录。

## 强制规则（三种模式共用，不可跳过）

**只要这次调用动过任何文件（代码/文档/资产），结束前必须在 CHANGELOG 追加一条记录。** 没有 CHANGELOG 就先创建一个，用下面「初始化模式」里 `CHANGELOG.md` 模板的格式。

唯一例外：这次调用完全没有修改任何文件、纯讨论/纯方案，此时不写 CHANGELOG，但必须显式声明"本次未修改文件，仅提供方案"——不能什么都不说就结束。

**留档不能事后补写**——必须在同一轮对话内完成，不能"先改完代码，回头再补文档"。用户确认"这次改动完成了"但对应文档没有同步更新，这次任务本身就要按"未完成"处理，不能因为对话已经过去几轮就当作已经交代过去了。

**文档里任何字段/占位符如果问不出来**（用户没提供，也无法从对话推断），必须显式写成 `TBD（原因：…）`，不能删掉整节，也不能编造内容顶替——空着的 TBD 是"需要去问"的信号，不是可以自由发挥的空白。

**决策/方案被后续推翻时，旧记录不删除、不改写**，标注"已被 {{日期}} 的新决策/新记录推翻，当前有效见……"，保留可追溯的完整历史，不能悄悄改写成好像从没犯过错。

| 借口 | 现实 |
|---|---|
| "改动太小，不值得记" | 可追溯性不看改动大小，看有没有改。一行也要记。 |
| "等任务全部做完再一起补" | 中途被打断或忘记，留痕就丢了。当场记，不拖到最后。 |
| "用户没要求写 changelog" | 这是本 skill 的强制规则，不需要用户每次重申。 |
| "用户已经说完成了/这轮对话快结束了" | 文档没同步，按规则就是没做完，需要主动说明或当场补上，不能揣着掖着。 |

## 三种模式

### 1. 初始化模式 — 脚手架新项目

触发：用户要新建一个应遵循文档驱动纪律的项目，或明确要求"初始化"。分两种场景：

**1a. 全新项目**（没有既存代码/历史决策）：

1. 在目标项目目录下建立空目录：`docs/`、`src/`、`assets/design/`、`assets/bug/`、`assets/reference/`、`notes/`、`archive/`（有 shell 的环境用 `mkdir -p` 一次性建好；没有的话在写文件时按路径带出目录即可）。
2. 依次用当前环境的文件写入能力，把下面六个「文件模板」的内容写到对应路径（`AGENTS.md`、`README.md`、`CHANGELOG.md`、`TODO.md`、`docs/decision-log.md`、`docs/project-context.md`），同时把其中 `{{占位符}}`（项目身份、目录规范细节、禁止事项清单等）结合与用户的对话内容改成真实内容，不能留着 `{{...}}` 交给用户；问不出来的按【强制规则】标 TBD，不编造。项目专属的"禁止事项清单"尤其重要——不要套用其他项目的清单，问用户这个项目具体不能做什么。填 `AGENTS.md` 时，还要问用户这个项目会不会有需要 AI 生成或人工审核的素材（图片/图标/插画等）：会的话保留并填实"素材流水线规则"小节；不会的话把整节删掉，不要留占位骨架。
3. 按【强制规则】写第一条 CHANGELOG：`项目初始化，创建 AGENTS.md / README.md / docs 骨架`。

**1b. 存量项目接入**（项目已有代码/文档/历史决策，只是还没有这套骨架）：

1. 步骤同 1a，六个模板照样建。
2. 唯一区别在 `docs/decision-log.md`：不要把项目过去的历史决策强行倒推重写成 ADR 格式，那样容易编造细节。改成在文件开头加一张"历史决策存档索引"表（列"决策项 / 结论 / 完整记录"，"完整记录"指向项目原有的设计文档、README 或其他能找到依据的地方），并注明"自 {{接入日期}} 起，新决策统一用本文件下方的 ADR 格式记录"。历史决策模糊不清的，标 TBD，不替项目编历史。
3. 按【强制规则】写第一条 CHANGELOG：`项目接入 docs-driven-workflow，创建 AGENTS.md / README.md / docs 骨架，decision-log.md 建历史决策索引`。

#### 文件模板：AGENTS.md

```markdown
# AGENTS.md — 开发 AI 工作指南

本文件面向参与此项目的 AI 助手（Claude Code、Copilot、Cursor 等），说明工作区结构、开发规则与设计系统。

---

## 0. 项目边界与核心规则（Project Boundary Rules）

### Project Identity

This repository is only for **{{PROJECT_NAME}}**（{{PROJECT_NAME_CN}}）。

Do not use context from other projects unless the information exists inside this repository. 只读取、分析、修改当前工作区内的文件；不依赖聊天记忆或其他项目经验补设定。

### Source of Truth

> 列出本项目的唯一数据源 / 唯一显示系统 / 唯一权威文件等。例如："XXX.json 是唯一场景数据源，所有渲染/导出必须从它驱动"。

- {{...}}

### 修改前 / 修改后流程（强制）

每次改代码前，必须先输出：本次任务目标、将要读取的文件、将要修改的文件、不会触碰的文件、潜在风险。未经确认，不要大范围重写。

每次改完后，必须输出：修改文件列表、每个文件改了什么、是否删除 legacy 代码、是否更新 docs、构建是否通过、是否还有 known issues。同时更新 `CHANGELOG.md`（实际改动）与 `docs/decision-log.md`（架构决策，如涉及）。

### 禁止事项清单（项目自定义，必填）

> 列出本项目明确禁止 AI 做的事情（视觉风格 / 功能范围 / 技术选型等），不要留空。例如：
> - 改变整体配色 / Design Language
> - 新增未经确认的组件
> - {{...}}

---

## 1. 语言规则

{{回复语言规则，例如：所有回复、计划、说明文档均使用中文，技术术语保留英文原文。}}

---

## 2. 工作区结构

```
{{PROJECT_NAME}}/
├── src/            # 所有源代码、配置文件
├── docs/           # 正式文档：命名 YYYY-MM-DD_主题.md
├── assets/
│   ├── design/     # 效果图、UI 参考图
│   ├── bug/        # 测试报错截图
│   └── reference/  # 参考图、灵感收集
├── notes/          # 开发笔记：踩坑记录、技术方案
├── archive/        # 被替换/淘汰文件的归档（带日期或版本标记），不直接删除
├── AGENTS.md       # 本文件
├── CHANGELOG.md    # 实际改动记录（持续维护）
├── TODO.md         # 待办事项（持续维护）
└── README.md       # 项目概览
```

---

## 3. 各文件夹用途

| 文件夹 | 存放内容 | 不应存放 |
|--------|----------|----------|
| `src/` | 所有源代码、配置文件、package.json 等 | 文档、截图、笔记 |
| `docs/` | PRD、需求文档、架构决策记录 | 代码、截图 |
| `assets/design/` | UI 效果图、设计稿、组件样式参考 | 代码、文档 |
| `assets/bug/` | 复现问题的截图、录屏、错误日志截图 | 代码、文档 |
| `assets/reference/` | 行业参考、灵感图、竞品截图 | 代码、文档 |
| `notes/` | 技术笔记、踩坑总结、调研结论 | 代码、正式文档 |
| `archive/` | 被替换/淘汰的旧文件（带日期或版本标记） | 仍在使用的当前文件 |

---

## 4. 开发规则

### 代码区规则（src/）
- `src/` 是唯一代码区，所有可执行文件、配置文件、依赖声明必须在此目录内。
- 新建代码文件前，先确认是否已有同功能模块可复用。

### 文档规则（docs/）
- 所有正式产品文档必须放入 `docs/`，命名格式：`YYYY-MM-DD_主题.md`。
- **留档不能事后补写**：改动完成的同一轮对话内必须完成留档；用户确认"改动已完成"但文档未同步更新，视为任务未完成。

| 改动类型 | 留档要求 |
|---|---|
| 常规代码/文档改动（不涉及架构） | 追加一条 `CHANGELOG.md` |
| 新建/修改类型定义、数据结构字段 | 在 `docs/decision-log.md` 追加或新建一条 ADR |
| 重大架构调整 | 新建 `docs/decision-log.md` 条目，并同步更新 `docs/project-context.md`；如果导致旧文档的实现细节不再可信，在 `project-context.md`「关联文档索引」顶部显式声明哪些文档已过期，不要求删除旧文档本身 |
| 新增/修改目录结构或命名规则 | 同步更新本文件 §2/§3 |
| 新增 AI 协作规则或开发规则 | 在本文件对应章节追加 |

### 素材规则（assets/）
- 三个子目录各司其职，不混用；文件名清晰描述内容，避免 `截图1.png`、`image.jpg` 这类无意义命名。

### 素材流水线规则（可选——项目有 AI 生成或需要人工审核的素材时启用，没有就删掉本节）
- 素材生产与运行时使用分离：草稿/生成区（draft/staging）→ 人工审核（review）→ 唯一的正式入库步骤（accept）。
- 草稿区/staging 区的文件**不允许**被代码直接引用。
- 只有一个脚本/步骤能写正式素材目录，且必须同步更新素材清单（manifest）文件；其余环节只读或只写 staging。
- 每次素材从草稿区移入正式目录，必须同步更新 manifest。

### 冲突处理
- 如果需求与 `docs/` 文档冲突，**停止执行并询问用户**，不得自行决定或猜测未写明的规范。

---

## 5. 产品规格概要

> 完整需求见 `docs/`。在此摘录 AI 工作时须随时知道的核心约束与决策。

- {{...}}

---

## 6. 给 AI 的协作提示

- 阅读 `docs/` 下的文档了解功能背景，再开始实现。
- 不确定需求时，先提问，不要自行假设并写入代码。
- 修改代码时，只改动与当前任务直接相关的部分，避免无关重构。
```

#### 文件模板：README.md

```markdown
# {{PROJECT_NAME}}

{{一句话产品描述}}

## 先读哪个文档

| 我想了解… | 看这个文件 |
|---|---|
| 项目当前架构、数据流、进度阶段（最新状态） | [docs/project-context.md](docs/project-context.md) |
| 作为 AI 助手参与开发的规则与工作区结构（强制边界见 §0） | [AGENTS.md](AGENTS.md) |
| 历史架构决策 / 实际改动记录 / 待办 | [docs/decision-log.md](docs/decision-log.md) · [CHANGELOG.md](CHANGELOG.md) · [TODO.md](TODO.md) |

## 快速开始

```bash
{{安装/启动命令}}
```

## 目录结构

```
src/     {{一句话说明}}
docs/    设计决策、变更记录等文档
assets/  设计参考素材（非运行时资产）
```

架构边界规则详见 [AGENTS.md §0](AGENTS.md)。
```

#### 文件模板：CHANGELOG.md

```markdown
# CHANGELOG

> 每次改动后追加一条记录，无论大小。格式：`YYYY-MM-DD — 做了什么（影响的文件/模块）`。不允许事后批量补写——改动完成的同一轮对话内必须记录。如果本次改动中顺手发现并修复了请求范围外的问题，单独写一行说明，不要混进主线描述里。

- {{YYYY-MM-DD}} — 项目初始化，创建 AGENTS.md / README.md / docs 骨架
```

#### 文件模板：TODO.md

```markdown
# TODO

> 开发过程中发现的待办、遗留问题，任务完成后同步更新。不想做/做不了的待办不要直接删掉，用下面的状态词标注原因。

**状态词汇表**（可选，用于标注"暂时不做"的原因，避免和"就是漏掉了"混淆）：

| 状态 | 含义 |
|---|---|
| 已知悉，不修 | 已经评估过，有明确理由不修，如实记录理由 |
| 待用户确认 | 需要人工实测或视觉判断，AI 无法自行决定 |
| 待排期 | 需要用户决定是否值得投入，不是技术阻塞 |

- [ ] {{待办项}}（可选：Blocked by {{原因}}）
```

#### 文件模板：docs/decision-log.md

```markdown
# 架构决策记录（Decision Log）

> 记录架构、类型定义、数据结构相关的重大决策，ADR 格式。改动完成的同一轮对话内必须补齐，不能事后补写。决策被后续新决策推翻时，旧条目不删除、不改写，在旧条目下补一行"已被 {{日期}} 条目推翻，当前有效见……"。

## {{YYYY-MM-DD}} — {{决策标题}}

**背景**：{{为什么需要这个决策}}

**决策**：{{结论}}

**影响**：{{受影响的文件/模块}}

**Affected files**：{{这条决策约束/影响的具体文件路径}}
```

#### 文件模板：docs/project-context.md

```markdown
# 项目上下文（持续维护）

> 当前架构、数据流、进度阶段的最新摘要，供 AI 快速上手时读取。每次架构性改动后同步更新本文件。

## 当前阶段

{{...}}

## 核心架构

{{...}}

## 已知问题

{{...}}

## 关联文档索引

> 列出项目里所有相关文档，标注状态，防止 AI 误信仓库里仍存在但已过期的设计文档。架构大重写后，在本节顶部补一句声明，例如"{{日期}} 起，不要参照 {{旧文档}} 的实现细节，仅供历史参考"。

| 文档 | 状态 |
|---|---|
| {{...}} | 有效 / 历史 / 持续维护 |

## 已确认决策（不得推翻，除非用户明确重新讨论）

| 决策项 | 结论 |
|---|---|
| {{...}} | {{...}} |

## 待定事项（遇到相关任务时必须先提示用户确认方向，不得自行假设）

| 待定项 | 现状 / 建议方向 |
|---|---|
| {{...}} | {{...}} |
```

### 2. 任务纪律模式（默认）

触发：在已有项目里改代码/改文档，且没有更具体的模式匹配。

1. 动手前必须先完整读一遍项目 `docs/` 目录（至少 README 导航表列出的每一份文档）和 `AGENTS.md`，不能跳过文档直接开发；涉及产品需求、设计、架构、素材整理的任务尤其不能省略这一步。
2. **改动前**输出声明：目标 / 将读取的文件 / 将修改的文件 / 不会触碰的文件 / 潜在风险。未经用户确认，不做大范围重写。
3. 遇到需求与已有文档冲突 → 停下来问用户，不自行假设。
4. **改完后**输出结构化汇报：完成内容 / 修改与新增文件（每个改了什么，**顺手发现并修复的范围外问题要单独列出**，不要混进主线描述）/ 是否删除 legacy 代码 / 构建或测试是否通过 / **影响范围**（这次改动波及哪些模块/页面/后续任务）/ **范围核对**（改动前声明过的"不会触碰的文件"或计划里的某部分，事后发现不需要动/没有动，要说清楚，不能因为最终没做就当没声明过）/ 未完成内容与 known issues / 下一步建议。
5. 任务过程中如果发现了范围外的改进机会，不要擅自实现，也不要只丢一句模糊的"建议以后做 X"——在汇报里列成并列的"提案菜单"（每条标注为什么现在不做、大致优先级），交给用户挑选。
6. 按【强制规则】更新对应文档，触发条件：

   | 改动类型 | 留档要求 |
   |---|---|
   | 常规代码/文档改动（不涉及架构） | 追加一条 `CHANGELOG.md` |
   | 新建/修改类型定义、数据结构字段 | 在 `docs/decision-log.md` 追加或新建一条 ADR（背景/决策/影响/Affected files） |
   | 重大架构调整 | 新建 `docs/decision-log.md` 条目，并同步更新 `docs/project-context.md`；旧文档因此不再可信的，在「关联文档索引」顶部显式声明，不要求删除旧文档 |
   | 新增/修改目录结构或命名规则 | 同步更新 `AGENTS.md` §2/§3 |
   | 新增 AI 协作规则或开发规则 | 在 `AGENTS.md` 对应章节追加 |

   出现新的待办则同时更新 `TODO.md`；决策/方案被本次改动推翻的，按【强制规则】在旧记录上标注"已被推翻"，不删除不改写。

### 3. 整理模式 — 文件夹审计与重组

触发："整理一下文件夹""检查文件有没有放对地方"之类的请求。

1. 找依据：项目自己 `AGENTS.md` 里的目录用途表（如果有）；没有就用默认约定——`src/` 代码、`docs/` 正式文档（命名 `YYYY-MM-DD_主题.md`）、`assets/{design,bug,reference}` 素材分类、`notes/` 非正式笔记、`archive/` 被替换/淘汰文件的归档。
2. 扫描并列出问题：放错目录的文件、无意义命名（如 `截图1.png`、`image.jpg`）、根目录堆积的临时文件、`docs/` 里没被 README 导航表引用的孤儿文档。输出一份整理清单（问题 / 当前位置 / 建议操作 / 依据）。**不要直接移动文件**——移动/重命名是有一定破坏性的操作。
3. **不删除已有目录结构或文件**——哪怕看起来是空目录/没被引用，整理模式只负责"挪位置"，删除需要用户在清单确认时额外明确同意，不能顺手当成整理的一部分执行。需要替换/升级一个已有文件时，优先把旧版本移到 `archive/` 目录（带日期或版本标记命名），而不是直接覆盖或删除，保留可回滚性。
4. 用户确认清单后再执行：git 仓库优先 `git mv`（保留历史），否则普通移动/重命名。
5. 按【强制规则】写 CHANGELOG，记录整理了什么、移动了哪些文件。

## 快速参考

| 用户说 | 触发模式 |
|---|---|
| "初始化一个新项目""搭个 AGENTS.md 骨架" | 初始化模式 |
| （日常改代码/改文档，无特别说明） | 任务纪律模式（默认） |
| "整理一下文件夹""这些文件放得对不对" | 整理模式 |

## Common Mistakes

- 只在对话里口头总结改了什么，没有真的写进 CHANGELOG 文件——汇报和留痕是两件事，都要做。
- 整理模式擅自 `mv`/删除文件后才汇报——必须先出清单，用户确认后再动手。
- 把某个项目专属的"禁止事项"写死进这个通用 skill——那部分永远留给项目自己的 `AGENTS.md`，本 skill 只提供占位结构，内容按当次项目现填。
- 把骨架内容放进独立的模板文件/文件夹——这个 skill 不允许有 `SKILL.md` 以外的任何文件或文件夹，所有模板内容必须内嵌在 `SKILL.md` 里。
- 整理模式或任务纪律模式里顺手删除了看起来没用的目录/文件——删除必须经用户额外明确同意，"反正是空的/没人用"不是删除的理由。
- 占位符问不出来就编个内容顶替，或者干脆删掉那一节——必须显式标 TBD，留一个"需要去问"的信号。
- 决策/方案被后续推翻后，直接删除或悄悄改写旧的 decision-log/change-log 条目——必须保留旧记录并标注"已被推翻"，历史要能追溯。

