Vercel-update-docs:把”文档同步”从口头约定变成工程流程

代码和文档不同步,大概是开源项目里最普遍的慢性病。API 改了签名,文档还停在三个月前;组件加了新 prop,示例代码还是旧的。小项目可以靠维护者记性好,但 Next.js 这种几千个文件的仓库,靠记性早就崩了。

Vercel 的做法是把这个流程塞进 Agent 里。next.js 仓库的 .agents/skills 目录下维护着一个官方 skill,叫 update-docs。维护者审查 PR 时,让 AI 顺着代码变更找出受影响的文档,逐个确认修改,甚至从零搭建新功能的文档骨架。

Vercel-update-docs:把"文档同步"从口头约定变成工程流程

这个 skill 跟市面上大多数文档生成类工具不是一个路子。它不追求”一句话生成一篇文档”,而是把”文档审查”这个动作拆成可执行的步骤,每一步都要求人工确认。第一次看到它的工作流时我有点意外,一个官方 skill 居然主动放弃全自动。

这篇拆解它的三条工作流、两个 reference 文件,再聊聊一个反直觉的设计选择:Vercel 为什么要让这个 skill 保留人工环节。如果你在维护自己的开源项目,或者在做 Agent 技能开发,这套设计值得抄的地方不少。

使用场景

先看它解决什么问题。Next.js 每天都有大量 PR 合入 canary 分支,其中相当一部分改了公共 API。维护者审查每个 PR 时都得回答一个问题:这次改动影响哪些文档?以前这是纯人肉活,diff 代码、翻 docs 目录、对照 API 参考,一趟下来小半天。

skill 的触发条件写得非常直白。description 里列了一长串触发词,覆盖了各种文档维护意图:

  • “update documentation for my changes”
  • “check docs for this PR”
  • “what docs need updating”
  • “sync docs with code”
  • “scaffold docs for this feature”
  • “review docs completeness”

除了这些句子,路径和格式关键词也能触发它:

  • “docs/” 目录路径
  • “MDX” 文件格式
  • “API reference” 常用短语

这种”句子加路径词”双通道的触发设计,让它在自然对话和文件操作场景里都能被命中。

安装方式很常规,一条命令的事。它发布在 Smithery 上,作者是 Vercel 官方,归类在 Writing 分类下,源码就放在 next.js 仓库里:

npx skills add https://smithery.ai/skills/vercel/update-docs

整体结构见下图。skill 的核心是三条平行的工作流:分析代码变更、更新已有文档、搭建新功能文档,外加两个 reference 文件做支撑,最后统一用 lint 收尾。

Vercel-update-docs:把"文档同步"从口头约定变成工程流程

注意它跟普通文档生成器的定位差异。普通工具的目标是”写出一篇好读的文档”,update-docs 的目标是”文档与代码保持同步”。这两个目标导向的工作流完全不同,前者重生成,后者重比对和确认。这个定位差异贯穿了它的所有设计。

还有个容易被忽略的点:这个 skill 是 Vercel 自己在日常工作流里真实使用的,不是摆出来做样子的。next.js 仓库的每个 PR 审查都可能触发它,它经受的是真实开源项目的检验。市面上很多文档工具是 demo 级的,跑通一个示例就完事,而 update-docs 需要处理真实 PR 里千奇百怪的改动,这个差距是设计出来的。

操作流程

三条工作流可以按需触发。审查一个 PR 时通常按”分析、更新、搭建”的顺序走,但也可以单独调用其中一条。下面拆开看。

分析代码变更的第一步是拿 diff。skill 默认你从 canary 分支切出来,所以命令是 git diff canary…HEAD –stat,先看整体改了哪些文件,再针对特定目录深入:

# 看整个分支改了什么
git diff canary...HEAD --stat

# 聚焦某个区域
git diff canary...HEAD -- packages/next/src/

拿到 diff 之后不是所有改动都要写文档。skill 给了一套粗粒度的映射思路:client/components 下的改动通常影响组件 API 参考,src/server 影响函数 API 参考,build 目录影响配置文档。先按这个筛一遍,再落到具体文件。

真正把”某个源码文件对应哪篇文档”讲清楚的,是 references/CODE-TO-DOCS-MAPPING.md。比如 image.tsx 对应 docs/01-app/03-api-reference/02-components/image.mdx,config-shared.ts 对应 next-config-js 配置文档。这张表让 Agent 不用在几千个文件里猜,直接定位:

Vercel-update-docs:把"文档同步"从口头约定变成工程流程

除了映射表,references 下还有一份 DOC-CONVENTIONS.md,是文档的风格规范和规则手册。MDX 怎么写、示例代码块用什么格式、标题怎么分层,都写在这份文件里。两份 reference 的分工很清晰:映射表解决”改哪个文件”,规范文件解决”改成什么样”。对 Agent 来说,这比在 prompt 里堆规则可靠得多,因为文件可以随时更新,不需要重新生成 skill。

更新已有文档的流程最有意思。skill 要求先读现有文档,理解结构和 frontmatter 字段,再列出需要改的点。常见的更新类型被归成四类:

  • 新增 props 或选项:补进 props 表格,并新写一段说明用法
  • 行为变化:更新描述文字和示例代码
  • 废弃功能:加废弃提示和迁移指引
  • 新示例:按文档既有约定补代码块

列完清单后逐个修改,每个变更都要先展示给用户、等确认、再落笔。这一步是整套流程里最像”工程”的地方,它把 AI 的角色牢牢钉在”助手”而不是”执行者”上。

Next.js 文档有个特殊结构:App Router 和 Pages Router 两套文档部分内容共享,通过 frontmatter 的 source 字段引用。skill 特意写明:遇到这种文件,要改的是 source 指向的源文件,不是引用它的那份。这个细节不写清楚,Agent 大概率改错文件。

第三条工作流负责从零搭建新功能的文档,这块最容易踩坑,因为新文档没有参照物。skill 的做法是先按功能类型定目录和模板:新组件进 API reference 的 components 目录,新函数进 functions 目录,新配置项进 config 目录,概念类指南进 guides。类型决定位置,位置决定模板。

文件命名也有硬约定,kebab-case 加数字前缀,保证目录排序稳定:

  • 组件文档:docs/01-app/03-api-reference/02-components/
  • 函数文档:docs/01-app/03-api-reference/04-functions/
  • 配置文档:docs/01-app/03-api-reference/05-config/
  • 概念指南:docs/01-app/02-guides/

模板自带标准骨架。API reference 模板包含 title、description 的 frontmatter 和 Props 表格结构,guide 模板包含 Prerequisites 和分步骤说明。写完还要在 frontmatter 里补 related 链接,把新文档接进整个知识网络,不然它就是个孤岛。

所有修改完成后用 pnpm lint 检查格式,pnpm prettier-fix 自动修。文档是代码库的一部分,格式不过关过不了 CI。整个更新流程见下图:

Vercel-update-docs:把"文档同步"从口头约定变成工程流程

洞察与反思

第一个值得抄的设计:把”代码到文档的映射”写成显式的 reference 文件,而不是让 Agent 自己摸索。这个思路的本质是给 Agent 建索引。大模型的优势在理解和生成,但定位类任务靠记忆不靠谱,一张准确的映射表胜过十段 prompt 提示。

第二个设计取舍更反直觉:文档修改强制人工确认。原因不难猜,文档是面向用户的公共资产,改错一个 prop 说明,影响的是整个生态的开发者。Vercel 宁可让流程慢一点,也不让 Agent 放开手脚直接改。这个克制放在今天一堆追求全自动的 skill 里,反而显得稀缺。

有个细节挺有意思。2026 年 3 月 Vercel 给仓库里 12 个 .agents/skills 全部加上了 metadata.internal: true,外部执行 npx skills add 时这些框架开发技能不再出现在列表里,只保留 next-compile。但 update-docs 本身通过 Smithery 分发,依然可以直接安装。这说明它既是内部工作流,也刻意对外输出。

它的局限也很明显:深度绑定 Next.js。docs/01-app、docs/02-pages 的目录结构,MDX 文件格式,source 字段共享模式,canary 分支假设,全是这个仓库特有的。换到别的项目,映射表和模板基本要重写。它本质上是”为 Next.js 定制的文档审查流水线”,不是通用文档工具。

但模式可以平移。任何维护大型项目的团队,都能照着这个结构做一个自己的文档 skill:把代码到文档的映射写进 reference 文件,把审查流程固化成确认式工作流,用 lint 做最后的把关。这比让 AI 自由发挥可靠得多。

资源地址

资源 链接
Smithery 页面 https://smithery.ai/skills/vercel/update-docs
GitHub 源码 https://github.com/vercel/next.js/tree/canary/.agents/skills/update-docs
SkillSafe 快照 https://skillsafe.ai/skill/@vercel/update-docs

总结

update-docs 的价值不在”AI 自动写文档”,而在把文档审查这个高频低效的流程工程化。拆开看,每个环节都在回答同一个问题:怎么让 Agent 可靠地维护公共文档。

  • 显式映射:用 reference 文件替代 Agent 的猜测
  • 逐条确认:公共产物的每次修改都留人工确认点
  • 模板脚手架:新文档按模板生成,保证结构一致
  • lint 收尾:格式问题交给工具兜底

这四个环节单独拿出来都不稀奇,组合在一起就是一个可靠的文档审查流水线。

对做 Agent 技能开发的人,最有启发的是两条:

一是用 reference 文件给 Agent 建外部知识库,把”猜”变成”查”;

二是划清自动与确认的边界,生成类步骤可以放手,涉及公共产物的修改必须留人工环节。

如果你在维护自己的开源项目,照着这个结构做一个文档同步 skill,成本不高。映射表写清楚,工作流拆到位,剩下的交给 Agent。文档与代码同步这件事,不该靠记性。

skills资源

OpenAI 官方 imagegen:把图像生成变成一条可控、可复现的流水线

2026-8-21 14:13:09

实战分享

官方手册:元宝派「养虾」常见问题答疑

2026-3-26 13:47:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧