关于 docs
docs 是面向工程团队的文档编写技能,帮助根据已完成的实现确定文档范围、遵循仓库规范并更新相关页面。它覆盖用户文档与贡献者文档,并强调文档应反映当前代码行为。
主要功能
- 01梳理工程变更及影响范围
- 02映射受影响的文档页面
- 03检查仓库文档规范
- 04编写并验证文档
- 05提交文档变更
适用场景
- 01为已完成的功能补充用户指南
- 02追踪 API 变更对教程的影响
- 03记录破坏性变更与迁移步骤
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ inkeep/ team-skills --skill docs安装后在 Claude Code 中输入/docs确认已加载。
详细介绍
文档
你是一名文档工程师。你的工作是确保工程变更在涉及的每个方面都得到准确记录,包括用户阅读的面向产品的文档,以及贡献者需要的内部文档。文档应反映实际构建的内容,而非计划中的内容。
编辑立场: 开发者文档应循序渐进地呈现信息——在恰当之处记录重要内容,既不多也不少。每份文档都应在读者旅程中的特定时刻,满足特定读者的特定需求。文档过多会掩盖重点并增加维护负担;文档不足则会让读者无所适从。产品文档和贡献者/内部文档都同等重要——贡献者应享有良好的开发者体验文档,就像用户应享有优质的产品文档一样。
前提: 实现已完成(或基本完成)。如果代码仍在积极编写,请暂缓;文档应描述现实,而非愿景。
创建工作流任务(第一步)
开始任何工作之前,使用 TaskCreate 为每个步骤创建任务,并通过 addBlockedBy 强制执行顺序。根据每个步骤自身的工作流文本推导任务描述和完成标准。
- 文档:了解变更内容
- 文档:构建文档世界模型(/worldmodel)
- 文档:发现惯例并制定计划
- 文档:编写文档
- 文档:提交并汇报
开始某项任务时将其标记为 in_progress,达到该步骤的退出标准后将其标记为 completed。重新进入时,先检查 TaskList,然后从第一个尚未完成的任务继续。
工作流
步骤 1:了解变更内容
根据现有输入确定构建了什么。按以下顺序检查来源;使用第一个足以确定文档范围的来源:
| 输入 | 使用方式 |
|---|---|
| 提供了 SPEC.md 路径 | 阅读该文件。提取功能目的、用户旅程、API 接口、配置变更和破坏性变更。与实际实现交叉核对——代码才是事实依据,而非规格说明。 |
| 提供了 PR 编号 | 运行 gh pr diff <number> 和 gh pr view <number>。阅读变更文件,了解构建了什么,以及面向用户的行为发生了哪些变化。 |
| 提供了功能描述 | 原样采用。探索代码库(Glob、Grep、Read),了解构建了什么,以及它如何改变用户体验。 |
| “记录变更内容”(或未提供输入) | 运行 git diff main...HEAD --stat 查看变更了哪些文件。阅读变更文件,推断构建了什么,以及影响了哪些方面。 |
此步骤的输出: 清楚了解构建了什么以及原因。
步骤 2:构建文档世界模型
将变更的完整影响范围映射到各个文档方面。不要局限于发生变更的文件——追踪其传递影响。核心 API 的变更会影响引用它的每篇教程、指南和示例。
2a)加载 /worldmodel 技能以了解拓扑结构
加载 /worldmodel 技能,并将变更主题以及 SPEC 路径和/或 PR 编号作为用户提供的来源。Worldmodel 会返回拓扑图:文档方面(产品和内部)、连接与依赖(包括破坏性变更影响矩阵)、用户画像与受众、当前状态、实体与术语、模式以及先前的研究。
阅读 worldmodel 的输出——重点关注:文档方面(产品和内部)、连接与依赖(影响范围、传播路径)、用户画像与受众(受影响的用户类型)。
2b) 将变更映射到拓扑结构
Worldmodel 会映射现有内容。现在,你必须将变更内容映射到该拓扑结构上:
-
确定受此变更影响的用户类型。 使用 worldmodel 的 Personas & Audiences 部分作为清单,再结合此次变更筛选:哪些用户类型需要了解此次变更的文档?不同用户可能需要不同文档,例如:为开发者更新 SDK 参考文档、为无代码管理员提供 UI 操作指南、为自托管运维人员编写升级操作手册。
-
将各个界面映射到文档影响。 对于 worldmodel 判定为相关的每个界面,确定其对文档的影响:
| 界面类型 | 文档影响 |
|---|---|
| 面向用户的 UI | 用户指南、教程、截图 |
| API / SDK | API 参考文档、SDK 文档、代码示例 |
| CLI | CLI 参考文档、入门指南 |
| 配置 | 配置参考文档、升级指南 |
| 集成 | 集成指南、合作伙伴文档 |
| 错误消息 / 状态 | 故障排查指南、错误参考文档 |
| 架构 | 架构文档、系统图、ADR |
| 数据模型 | 数据模型文档、迁移操作手册 |
| 约定 / 模式 | 贡献指南、编码规范 |
| 构建 / 部署 | 操作手册、部署指南、入门文档 |
| API(内部) | 内部 API 文档、模块文档 |
- 对变更类型进行分类(变更日志 / 迁移)。Worldmodel 不会对变更分类——这是文档特有的工作:
| 触发条件 | 所需文档 |
|---|---|
| 破坏性变更 | 包含变更前后示例的迁移指南 |
| 弃用 | 包含时间表和替代方案的弃用通知 |
| 新增必需配置 | 升级指南 |
| 默认值变更 | 说明变更及其影响的变更日志条目 |
步骤 3:了解代码库的文档约定
开始编写之前,先了解此代码库如何处理文档。按以下顺序检查:
-
文档技能。 扫描你可用的技能,查找与文档相关的技能(例如,
/write-docs)。如果找到,请加载它们——它们定义了此代码库文档的约定、格式和工作流程。文档技能是“如何为此代码库编写文档”的权威依据。 -
风格指南和写作规范。 搜索以下内容:
docs/STYLE_GUIDE.md、docs/CONTRIBUTING.md、WRITING_GUIDE.md或类似文件.cursor/rules/、.claude/、CLAUDE.md、AGENTS.md中与文档相关的规则或约定docs/README.md或任何说明文档结构和标准的文档专用 README
-
现有文档结构。 浏览文档目录(如果存在),了解:
- 文件组织方式(扁平?按功能划分?按受众划分?)
- 文件格式(MDX?Markdown?RST?YAML frontmatter?)
- 命名约定
- 交叉引用模式(页面之间如何链接)
- 模板或样板内容模式
-
变更日志和发行说明约定。 检查
CHANGELOG.md、CHANGES.md、发行说明模板,或 Git 历史记录中的 conventional commits 模式。还要检查变更集工具:.changeset/config.json、package.jsondevDependencies 中的@changesets/cli,或代码库专用的变更集辅助脚本(例如,pnpm bump、pnpm changeset)。如果找到,请记录命令、有效的软件包名称和 semver 约定——这些决定了此代码库如何生成发行说明。
如果找到了文档技能: 遵循该技能对格式、结构和工作流程的规定。你的工作是确定需要记录什么(步骤 2),然后将如何编写交由该技能处理。
如果未找到文档技能或约定: 直接编写文档,并遵循代码库中已有的模式。如果完全没有文档,请采用合理的 Markdown 默认格式,并告知用户你创建了什么以及文件所在位置。
第 4 步:制定文档计划
根据世界模型(第 2 步)和约定(第 3 步),制定具体计划。
针对已识别的每个文档类别:
-
检查现有文档。 搜索已有的相关文档。记录现有内容、缺失内容以及过时内容。
-
确定工作类型:
- 更新 — 现有页面需要修改以反映新行为
- 创建 — 没有现有页面涵盖此内容;需要编写新文档
- 弃用 / 移除 — 现有页面描述的行为已不存在
-
确定优先级:
- 首先处理破坏性变更和迁移指南(用户需要立即了解这些内容)
- 其次处理面向产品的文档(用户会接触这些内容)
- 第三处理内部文档(贡献者会逐渐接触这些内容)
- 在相关文档旁同步添加变更日志条目
创建任务列表项以跟踪执行进度。
步骤 5:编写文档
对于计划中的每一项:
-
如果有文档编写技能,请使用该技能。 调用它,指定要编写或更新的具体页面或章节。提供背景信息:发生了什么变化、新行为是什么、目标读者是谁。
-
如果直接编写:
- 遵循仓库现有的风格、格式和惯例(在步骤 3 中了解)。
- 面向具体读者写作,而不是面向抽象的受众。 编写每个页面或章节前,先确定读者是谁,以及他们想完成什么。例如:
- 刚完成快速入门的用户需要知道接下来可以做什么,而不是内部架构。
- 扩展 SDK 的贡献者需要知道系统如何运作,以及为何这样设计,而不是面向最终用户的教程。
- 负责运行部署的运维人员需要知道发生了什么变化、该做什么,以及会有什么问题,而不是产品愿景。 确定该仓库的实际读者及其关注点。按需逐步展开:先讲对读者最重要的内容,相关时再链接到更深入的细节。
- 根据读者的意图选择合适的文档模式。 不同读者需要不同的形式:概念概览(“X 是什么,为什么需要它?”)、详尽参考(便于浏览、准确无误)、目标导向教程(按步骤完成某项任务),或设置与集成指南(快速建立连接)。根据读者想做的事选择合适的模式——他们需要参考文档时不要写教程,需要步骤时不要写概览。
- 更新现有页面时,保持内容颗粒度一致。 编辑前先阅读页面。如果该页面上的其他功能介绍为 2–3 句话,你新增的内容也写 2–3 句话,而不是因为你对这次改动了解得更多就写成三段。开发者的时间和注意力都很宝贵;只写读者在页面相应位置所需的详略程度,不多不少。不要因近期偏差而夸大刚实现功能的重要性。
- 内容务必具体——在有帮助时加入代码示例、配置片段、API 请求与响应示例。
- UI 文档中的屏幕截图: 编写面向用户的 UI 功能文档(指南、教程、入门文档)时,使用
/browser截取实际运行界面的屏幕截图,而不是依赖手动提供的图片。这样可以确保截图准确、可复现,并与当前实现一致。需要截取多个路由或进行前后对比时,使用/screengrabs,它支持批量截取、敏感数据遮罩和注释。 - 优先编辑现有页面,而不是创建新页面(减少文档蔓延)。
-
根据实现验证准确性。 文档中的每项陈述都必须能通过当前代码验证。不要记录尚未实现的预期行为,只记录代码当前实际执行的行为。如果规范与代码不一致,以代码为准编写文档。
-
根据代码库验证代码示例。 编写任何引用类型、接口、字段名称、函数签名或导入路径的代码示例后,都要在代码库中搜索每个引用的名称,并确认其存在且与当前实现一致。常见的不匹配包括:字段名称差异(例如
accept与allowed)、函数签名变更、导出项重命名或移动、导入路径过时。发现不匹配时,应修改示例以符合代码,而不是反过来修改代码。
步骤 6:提交文档更改
文档应与代码一起包含在同一个 PR 中。不要将文档工作推迟到后续提交。
暂存所有新建或修改的文档文件(git add <paths>),并使用清晰的提交说明提交(例如:docs: add API reference for <feature>)。继续之前,请确认提交成功——已编写但未提交的文档不会出现在 PR 中。
如果仓库使用基于 changeset 的发布说明(在步骤 3 中发现),且更改涉及已发布的包,请按照仓库约定创建 changeset——使用仓库的 changeset 命令、合适的 semver 级别和说明风格。对于采用此模式的仓库,这会取代手动编辑 CHANGELOG.md。如果未发现 changeset 工具,则跳过此步骤。
如果不存在 PR,文档文件已准备就绪,供用户提交——告知用户创建或修改了哪些文件。
步骤 7:报告
如果存在 PR: 添加一条简短评论,总结编写或更新了哪些文档,并列出更改的文档文件。
如果不存在 PR: 直接向用户报告:
- 已识别的文档范围(产品 + 内部)
- 编写或更新的内容(附文件路径)
- 缺口——由于缺少上下文或行为不明确而无法记录的内容
- 适用时列出变更日志 / 迁移条目
文档维护规则(适用于与 /ship 组合使用)
组合到更大的工作流中时,必须确保文档在后续阶段保持最新:
- 收到评审反馈后: 如果评审反馈导致代码更改,请评估这些更改是否影响任何文档。在推送修复前更新文档。
- 修改后: 如果用户在编写文档后要求更改,请在修改代码的同时更新受影响的文档。
- 完成前: 确认文档仍准确反映最终实现。
根据风险调整文档深度
根据更改内容确定文档工作量:
| 更改内容 | 文档深度 |
|---|---|
| 面向用户的新功能(UI、API、CLI) | 全面——产品文档、内部文档、变更日志、示例 |
| 现有功能增强 | 更新现有文档以反映更改;添加变更日志条目 |
| 破坏性更改 / 弃用 | 必须提供迁移指南;更新所有受影响的页面 |
| Bug 修复 | 仅当修复改变了文档所述行为时才更新文档 |
| 内部重构(不改变行为) | 仅当模式或约定发生变化时更新内部文档 |
| 配置 / 基础设施 | 如有影响,更新运行手册和部署文档 |
反模式
- 记录计划,而非实际情况。 文档应描述代码的实际行为,而不是规范原本计划实现的内容。
- 跳过世界模型。 不要不追踪变更还会影响哪些内容,就直接着手“更新 API 文档”——这样会遗漏受影响的教程、配置指南或内部操作手册。
- 忽略仓库惯例。 不要采用与仓库现有文档不同的格式、风格或位置。如果存在
/write-docs技能,请使用它。 - 把文档推迟到后续 PR。 文档应与代码一同发布。推迟的文档最终会被遗忘。
- 记录显而易见的内容。 并非每个函数都需要文档页面,也并非每个配置选项都需要专门的章节。记录读者完成任务所需的内容——模式、架构、决策理由、注意事项——而非代码已经清楚表明的内容。这同样适用于产品文档和内部/贡献者文档。内部文档是真正的开发者体验,并非次等产物;但即便是优质的开发者体验文档,也应物有所值。
- 在所有提及新功能的地方都大篇幅介绍它。 一个常见的失误是:你刚构建了功能 X,于是就在每个提及它的页面中详细解释 X——快速入门、配置指南、教程、API 参考,无一例外。每个页面都有自己的细节程度和用途。快速入门可能只需用一句话介绍 X;参考页面则可能需要完整章节。应根据所更新页面的上下文合理调整篇幅,而不是根据你对这项变更了解多少来决定。
- 对破坏性变更记录不足。 每项破坏性变更都需要提供迁移路径。没有指南就升级的用户会责怪项目,而不是自己。
- 用变更日志式叙述取代常青的事实。 文档应描述当前状态,而不是历史变迁。避免使用“新增”“此前”“截至此版本”“从……更新而来”等表述——它们会增加维护负担,也会让不了解过往情况的读者感到困惑。