mcpField
D
documentation-writer

documentation-writer

github.com/xgent-ai文档处理199 次安装今天更新
代码仓库

关于 documentation-writer

documentation-writer 是一项依据仓库事实编写和更新技术文档的 skill,面向文档作者和编码 Agent。它涵盖文档类型选择、事实核查、写作、绘图与交付检查。

主要功能

  1. 01选择文档类型与读者
  2. 02核查仓库事实和证据
  3. 03覆盖 README、API、架构和指南
  4. 04支持绘图与文档审查

适用场景

  1. 01撰写仓库 README 或 API 参考
  2. 02为维护者或 Agent 绘制代码库说明
  3. 03根据代码变更更新文档

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/xgent-ai/skills --skill documentation-writer

安装后在 Claude Code 中输入/documentation-writer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/templates/
ARCHITECTURE.md
CONCERNS.md
CONVENTIONS.md
FEATURES.md
INTEGRATIONS.md
STACK.md
STRUCTURE.md
TESTING.md
references/
api-docs.md
architecture.md
codebase-map.md
inquiry-checkpoints.md
readme.md
stack-detection.md
user-manual.md
writing-style.md
scripts/
check_doc.py
scan.py

详细介绍

来自项目 README

documentation-writer · 基于代码事实的技术文档

路径约定:references/、scripts/、assets/ 都相对于本 SKILL.md 所在目录。运行脚本前先设 SKILL_DIR="<本 SKILL.md 所在目录>";文档路径、仓库根等参数按目标仓填写。

这份 skill 要的文档有三个特点:说的都是仓库里真实存在的东西;读者拿到就能用(命令能跑、例子能抄、图能看懂);读起来像熟悉这套代码的工程师写的,不像模型生成的。三者冲突时,准确优先。

选文档类型

用户要的读者先读默认位置(仓库已有约定时从约定)
README:新建、补全、按代码变更同步第一次接触项目的人references/readme.md仓库根或子包根的 README.md
API 文档:HTTP 接口、OpenAPI、库 / SDK 参考调用方开发者references/api-docs.mddocs/api/ 或服务目录下 docs/
架构文档:系统怎么搭起来、为什么这样搭新加入的工程师、评审者references/architecture.mddocs/architecture.md 或 ARCHITECTURE.md
代码库说明:成套的结构、约定、功能、测试、风险文档日常改代码的人和 AI agentreferences/codebase-map.mddocs/codebase/
用户手册、教程、操作指南、运维手册最终用户、运营、运维references/user-manual.mddocs/user-guide/ 或 docs/manual/

架构文档和代码库说明容易混。用户要一份能从头读到尾的「系统是怎么工作的」,走架构文档;要一套放在仓库里、按主题随查随用的参考(技术栈、目录、约定、功能清单、测试、风险),或者明确说「代码库说明 / 功能说明 / map this codebase」,走代码库说明。拿不准时问一句,问不了就写架构文档,并在交付说明里提一句另一种选择。

一个请求涉及多类文档(比如「给这个服务写 README 和接口文档」),按类型分别读对应参考,各写各的,互相链接,不要把 API 参考塞进 README。

不归本 skill 管:只改代码注释或 docstring、写 commit message、写 PRD(用 prd skill)、写开发计划(用 dev-plan skill)、制定迁移或现代化方案。

通用流程

每类文档都走这六步,差别在参考文件里。

1. 定读者、目的和范围

先弄清三件事:谁读、读完要能做什么、覆盖哪些不覆盖哪些。按 Diátaxis 分清这份文档属于哪一类,四类写法不同,不要混在一起:

  • 教程:带新手完整做成一件事,一步一个结果,不讲原理。
  • 操作指南:解决一个具体问题,假设读者已经会基本操作。
  • 参考:准确、完整、结构统一,像字典,不讲故事。
  • 解释:讲清楚为什么这样设计、有哪些取舍。

能从请求和仓库推断出来的,不要问。真正缺的信息一次问完。新写大文档(架构文档、用户手册、代码库说明)时,先把大纲给用户看:章节、每节一句话、打算画哪几张图,确认后再写。用户已经给了结构、说了「直接写」,或者当前环境没法提问,就把假设写进交付说明,直接写。

输出语言:目标仓已有文档用什么语言就用什么语言;仓库没有文档时用对话的语言。目标仓的 AGENTS.md / CLAUDE.md / CONTRIBUTING.md 里有文档约定(位置、格式、术语)的,照约定来。

2. 摸清事实(本地优先)

文档描述的是眼前这份代码,所以事实从本地 checkout 里取,不从记忆、网络或远端仓库取。

  1. 锚定快照:git remote -v、git branch --show-current、git log -1 --format='%h %ad %s' --date=short。架构文档和代码库说明要把这三项写进文档,读者才知道描述的是哪个版本。remote URL 里如果带了凭据(https://<token>@host/...),写进文档前删掉。

  2. 读真实的清单文件:package.json、go.mod、pyproject.toml、Cargo.toml、pom.xml 这类 manifest,Makefile 或其他任务脚本,CI 配置,.env.example,已有的 README / docs/。技术栈和命令以这些文件为准,不以你对框架的印象为准。栈不明确时读 references/stack-detection.md。

  3. 仓库大或者陌生时先扫一遍:在目标目录下跑

    python3 "$SKILL_DIR/scripts/scan.py" --output /tmp/codebase-scan.txt
    

    会输出目录树、manifest、入口、lint 配置、环境变量模板、TODO、近期提交、高频改动文件、CI、容器、代码量。monorepo 里只写一个子包时,在子包目录里跑。扫描结果是线索,结论仍要回到源文件确认。

  4. 已有文档是意图,不是事实。README 常常写的是「打算怎么做」。和代码对不上时以代码为准,把分歧记下来,交付时告诉用户。

  5. 只写源码,不写产物。dist/、build/、generated/、.next/、__pycache__/、node_modules/ 里的东西不当作项目约定。

找不到答案的,网络查询是最后手段,只在事实确实影响文档、又无法从本地确定时用,而且要标 [UNVERIFIED] 说明来源。

3. 写

按对应参考文件的结构写。贯穿所有类型的规矩见下文「证据纪律」和「写作风格」。

4. 出图

见下文「出图:archify 优先,Mermaid 兜底」。

5. 自检

写完先跑检查脚本,它会核对文中引用的路径是否存在、行号是否越界,扫出凭据、没填的模板占位、AI 腔词汇和破折号密度:

python3 "$SKILL_DIR/scripts/check_doc.py" <文档路径...> --repo-root <仓库根>

脚本报「路径不存在」的逐条修掉;报 AI 腔的逐条看,确属术语或引用原文的可以保留。然后人工过一遍:

  • 写到的命令都在 manifest / 任务脚本 / CI 里出现过;没亲自跑过、又有疑问的,标出来
  • 例子里的字段名、取值形状来自 schema、测试或 seed,不是编的;密钥、token 用占位符
  • 数量写具体数字(「13 个路由文件」),不写「很多」
  • 不确定的地方都打了标记
  • 图的文件存在,链接能点开
  • 按 references/writing-style.md 的清单去一遍 AI 腔
6. 交付说明

回复用户时说清:

  • 新建或改动了哪些文件(路径)
  • 图用了 archify 还是 Mermaid;用 archify 的,列出每张图的 HTML 路径、deliver 结果和 visual-check 状态(通过 / 失败 / 跳过),不要把没做过的检查说成做过
  • 所有 [ASK USER] 问题,编号列出
  • 文档和代码对不上的地方(README 说 A,代码是 B)
  • 写作时做的假设

证据纪律

文档的价值在于读者可以直接信,不用自己再核一遍。所以:

  • 非显而易见的结论都要有出处。架构文档、代码库说明、API 文档里,用相对仓库根的路径加行号引用:apps/api/src/index.ts:42 或 src/routes/users.ts#L10-L35。引用了哪一行,就要真的读过那一行。README 和用户手册面向的读者不看源码,正文不放行号引用,但写之前同样要核实。

  • 统一用这四个标记,含义不同,不要混用:

    标记用在
    [INFERRED]从代码推理出来的,但没有哪里直接写明
    [UNVERIFIED]转述了别处的说法,自己没核实(例如文档里写的构建耗时、CI 是否是必需检查)
    [TODO]仓库里查不到,需要后续补
    [ASK USER]取决于团队意图,只有人能回答

    标记用英文原样,中文文档也一样,方便 grep。

  • 矛盾要裁定,不要转述。两个来源说法不同(manifest 写的版本和代码里的常量不一致),去读代码,给出结论,并写一句「已核对:X 写的是 A,实际生效的是 B,因为……」。

  • 能数就数。「共 73 个 service 包」读起来是核实过的,「有很多服务」读起来是猜的。

  • 诚实的空白比虚假的完整有用。写不出来的部分标 [TODO],不要用泛泛之词填满。

出图:archify 优先,Mermaid 兜底

先想清楚要不要画

图用来表达文字说不清的东西:组件之间怎么连、请求怎么穿过系统、状态怎么流转。三步以内的线性流程,用一句话或编号列表就够了。一份文档通常一到四张图,每张图正文里要有一句话说明它在讲什么、读者该看哪里。

探测 archify

由 Agent 自行检查当前环境的可用 skill 列表;列表中未找到或列表未提供时,直接查找本 skill 同级目录及当前环境的项目级、用户级 skill 目录中的 archify/SKILL.md。找到后加载或读取它,按其流程出图;没有安装时用 Mermaid。不新增或调用 archify 安装检测脚本,不自动安装 skill。

用 archify 出图

怎么写 JSON、怎么校验、怎么修布局,全按 archify 自己的 SKILL.md 来,这里不复述。本 skill 只约定和文档衔接的部分:

类型对应

文档里的图archify 类型
系统上下文图、容器图、部署拓扑、模块依赖architecture
请求链路、接口调用时序、鉴权 / token 交换握手sequence
业务流程、审批流、CI/CD、操作步骤workflow
数据管道、ETL、数据血缘、事件流dataflow
状态机、订单或任务的状态流转、重试与终态lifecycle

文件放在哪:在文档所在目录下建 diagrams/,源文件和产物同名:docs/diagrams/system-context.json 和 docs/diagrams/system-context.html。源 JSON 要留着,以后改图从它改。

图里的文字和文档同语言,中文文档设 meta.locale: "zh-CN"。节点名、接口路径、命令等标识符保持原样。

在 Markdown 里怎么放:先跑 archify 的 deliver,再跑 visual-check(需要本机有 Chrome / Chromium)。visual-check 成功时会在 HTML 旁边留下截图 <名字>.visual-check.1440x900.light.png,把它嵌进正文,下面给出交互版链接:

![系统上下文图](diagrams/system-context.visual-check.1440x900.light.png)

交互版:[diagrams/system-context.html](diagrams/system-context.html),用浏览器打开,可缩放、搜索、追踪调用链。

visual-check 失败或被跳过时,只放交互版链接,并在交付说明里写明截图没有生成。同一张图不再另画一份 Mermaid,两份会各改各的,最后对不上。

只留三个文件:每张图在仓库里保留 <名字>.json(源)、<名字>.html(交互版)和正文嵌入的 <名字>.visual-check.1440x900.light.png。visual-check 另外生成的深色和 2048 尺寸截图、<名字>.visual-check.html 汇总页、<名字>.visual-check.json 回执都是检查证据,把检查结果写进交付说明后删掉,不然一张图会在 diagrams/ 里留下八个文件。

修不好就退回:某张图按 archify 的修复流程连续两轮没有改善,这一张改用 Mermaid,交付说明里写清楚原因和 archify 的报错。

用 Mermaid 出图
  • 类型:结构用 flowchart,时序用 sequenceDiagram,状态用 stateDiagram-v2。
  • 一张图不超过 12 个节点,超了就拆成两张,或者只画主干。
  • 节点标签用读者认识的名字(服务名、模块名),不用内部变量名。
  • 在紧挨着图的正文里写一句这张图在说什么。
  • 交付说明里提一句:装了 archify 可以得到可交互、可导出的图(仓库地址 https://github.com/tt-a1i/archify)。只提一次,不要反复推销。

写作风格

技术文档去 AI 味,靠的是具体、直接、可核对,不靠加个性。完整清单和中英文例子在 references/writing-style.md,写完对照检查。最常见的几条:

  • 开头直接说是什么、给谁用、能做什么。不写「在当今……的背景下」「随着……的快速发展」。
  • 删空话:赋能、助力、打造、一站式、全方位、无缝、强大的、极致、深度融合、值得注意的是、综上所述;英文的 delve、leverage、seamless、robust、comprehensive、cutting-edge。删掉之后句子不成立,说明原来就没有内容,换成具体事实(数字、名称、行为)。
  • 不给标题和列表加 emoji,不写「性能: 性能得到提升」这种加粗小标题列表。参考类文档里「术语:定义」的格式是正常的,可以用。
  • 术语前后一致。同一个东西第一次叫「租户」,后面就一直叫「租户」,不要换成「组织」「空间」「团队」轮着用。
  • 不写总结、展望式结尾。文档讲完就停。
  • 参考文档保持中性,不加第一人称和观点。教程和 README 可以用「你」直接跟读者说话,可以写真实踩过的坑(「第一次跑 db:migrate 会失败,因为 Redis 还没起」),这是技术文档里合适的「人味」。
  • 更新已有文档时沿用它的风格:标题层级、术语、emoji 习惯、中英文混排方式都照旧,只保证你新增和改动的部分没有 AI 腔。

更新已有文档

用户说「同步一下文档」「README 过时了」「接口改了,更新文档」时:

  1. 先通读现有文档,再看代码变更(git diff、git log -p -- <路径>,或用户描述的改动)。
  2. 列出文档里和现状不符的地方,逐条对应到要改的段落。代码变更和文档章节的对应关系见 references/readme.md 的「变更映射」。
  3. 只改需要改的段落,结构、语气、格式保持不变。不借机重写整篇。
  4. 删掉已经不存在的功能、参数、命令,不要只加不减。
  5. 交付说明里列出改了哪几处、为什么。

参考文件索引

文件什么时候读
references/readme.md写或更新 README
references/api-docs.md写 HTTP 接口文档、OpenAPI、库 / SDK 参考
references/architecture.md写架构文档、系统设计说明
references/codebase-map.md写 docs/codebase/ 成套说明
references/inquiry-checkpoints.md写代码库说明时,每份文档要回答的问题
references/user-manual.md写用户手册、教程、操作指南、运维手册
references/writing-style.md每次交付前,去 AI 味
references/stack-detection.md技术栈不明确、多种 manifest 并存时
assets/templates/*.md代码库说明的八份模板
scripts/scan.py大仓或陌生仓,动笔前扫描
scripts/check_doc.py交付前自检

评论

支持 Markdown