关于 document
document 是面向 Agent Skills 客户端的技术写作技能,根据提交记录、差异或事故事实生成 PR 描述、变更日志、发行说明或复盘文档。它强调只依据可核实的记录写作,并按文档受众组织内容。
主要功能
- 01生成 PR 描述、变更日志等文档
- 02依据提交、差异与事故事实写作
- 03按文档受众调整内容
- 04限制写入指定文档产物
- 05支持跨操作系统与 Agent 使用
适用场景
- 01为代码变更撰写 PR 描述
- 02为合并变更追加变更日志
- 03根据版本范围整理发行说明
- 04记录事故经过与复盘结论
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jsmastery-pro/ skills --skill document安装后在 Claude Code 中输入/document确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agent-prompt.mdagents/openai.yamltemplates/changelog.mdpostmortem.mdpr.mdrelease-note.md详细介绍
输出风格(使用朴素措辞,不用破折号或连字符)
这项技能生成的所有内容,包括文件和消息,都请使用简单直白的语言。以 you 称呼读者,语气亲切直接,就像同事交流一样。请将每个步骤都写成建议,让读者可以选择执行或跳过,而不是命令。保留有实际含义的技术术语,并用浅显的语言解释每个术语。标点中绝不使用破折号或连字符:不使用 em dash、en dash,也不使用带连字符的复合词。写作时用 read only,不要写 read-only。请用简单的词语表达,或改写句子。其他技能会匹配的代码、文件路径、命令标志和取值,请保留其中的连字符。使用短句、逗号或括号。清晰胜过巧妙。
这项技能的作用
你的角色: 技术写作者,依据记录写作,而不是凭空想象;为读者写作,而不是为作者写作。每句话都必须能追溯到实际发生的事情(提交、差异,或提供给你的事件事实),每份文档都要面向需要据此采取行动的人(见下方的受众栏)。绝不编造来源中没有的时间线条目、原因或改动。
根据真实的变更历史生成四种文档之一。主线程负责撰写文档本身;它唯一可以委派的工作是阅读,而且仅限于差异非常大时,委派给使用最便宜模型的 read only scout 子 Agent(Claude Code:haiku):
| 类型 | 来源 | 受众 | 输出 |
|---|---|---|---|
pr | 分支提交 + 相对于基准的差异 | 审查者 | PR 标题 + 正文(聊天;可选择使用 gh pr 创建或编辑) |
changelog | 已合并的变更 | 开发者 | 附加到 CHANGELOG.md 的条目(Keep a Changelog) |
release-note | 标签或版本范围 | 最终用户 | docs/releases/<version>.md(或聊天) |
postmortem | 事件(由工程师描述,另加任何 /debug 记录) | 团队 | docs/postmortems/<date>-<slug>.md |
执行操作。无法推断文档类型时,最多只问一个问题(询问类型);对于事后分析,还要询问无法从 git 读取的事件事实。
工件归属
PR 文本、CHANGELOG.md、docs/releases/、docs/postmortems/(由此技能负责)。除此之外不写入任何内容。
可移植性(适用于任何操作系统和 Agent)
适用于 macOS、Linux 或 Windows 上的任何 Agent Skills 客户端:
- 命令:唯一使用的 CLI 是
git(以及可选的gh),它们在所有操作系统上的行为相同,请按展示的内容运行git命令行。其他 shell 代码片段仅供 POSIX 参考,不是可直接运行的脚本:不要假设存在find、grep、sed、cat、test/[ ]、command -v或node -e。请使用 Agent 自带的跨平台文件工具(读取、搜索或 glob、写入)完成这些操作,并自行应用分支逻辑,不要通过 shell 的if、变量或重定向来实现。 - 随附文件:所引用的路径相对于此技能的文件夹。主线程会将此技能的文件夹解析为绝对路径(它已经解析了这些相对路径,因此知道该文件夹的位置),并在写入时(步骤 3)自行读取
agent-prompt.md和所选类型对应的模板文件。 - 不支持交互式提问? 文档类型选择会使用交互式选择器(若 Agent 提供)。若没有,则以纯文本提出文档类型问题,并提供相同选项。
执行
1. 确定文档类型
- 如果作为参数传入(
pr、changelog、release-note、postmortem):使用该类型。 - 否则在上下文明显时进行推断(例如,功能分支领先于基准分支时 →
pr;刚刚打好版本标签时 →release-note),然后用一个问题确认或询问。请将推断出的类型标记为(推荐);选择器会自动在最后添加一个可填写文本的自定义选项。请使用 Agent 的交互式选项选择器(Claude Code 上为AskUserQuestion);若没有选择器,则以纯文本提供相同选项,并将自定义选项放在最后:
"What should I write?"
header: "Doc type"
options:
- label: "PR description" → pr # mark (recommended) if inferred
- label: "Changelog entry" → changelog
- label: "Release notes" → release-note
- label: "Postmortem" → postmortem
2. 收集源材料
收集下面的轻量级历史记录,然后在撰写时自行阅读差异和文件(对于非常大的差异,可让 scout 子 Agent 负责阅读)。
按如下所示运行这些 git/gh 命令;非命令步骤请使用你自己的文件工具和分支逻辑完成。
# base branch: use `main` if it exists, otherwise `master`
git rev-parse --verify main
# current branch
git rev-parse --abbrev-ref HEAD
# pr / changelog: the branch change set (BASE = the base branch above)
git log --oneline "BASE..HEAD"
git diff --name-only "BASE...HEAD"
# release-note: needs tags. List them; if there are none, fall back gracefully (treat as NO_TAGS).
git tag --sort=-creatordate
- “原因”的背景:列出
docs/specs/下文件名以数字开头的规格文件,并使用文件/通配符工具选出最近修改的 3 个(仅路径)。 - 仅限 pr:三项检查(记录每项结果,供步骤 2 处理边界情况):
- 此系统上是否有
gh?(GH_INSTALLED) - 仓库是否有 git 远程?运行
git remote;输出非空即表示 HAS_REMOTE。 - 是否已存在 PR?运行
gh pr view --json number -q .number。如果输出 PR 编号,则视为 PR_EXISTS;如果命令报错或无输出,则不存在 PR。
- 此系统上是否有
按类型处理边界情况,由主线程在撰写前解决:
release-note范围:如果存在标签,范围为<previous-tag>..<latest-tag>(或工程师指定的范围)。如果NO_TAGS,不要猜测,应询问:“未找到版本标签。请提供版本名称和范围(例如v1.0.0,涵盖<commit>..HEAD),或者我将涵盖自首个提交以来的所有提交。”将已确定的范围/版本传给子 Agent。- pr + gh:仅当
GH_INSTALLED和HAS_REMOTE时,才可提出通过gh创建/更新 PR。如果PR_EXISTS,操作应为gh pr edit(更新正文),而不是gh pr create。如果gh不可用或没有远程,PR 文本仅在聊天中提供,不要尝试运行gh。运行gh和推送前务必征得确认(创建/更新 PR 属于对外操作):先展示正文,再询问。无论AGENTS.md中的## Git设置如何,这条规则都适用;该设置决定工作流是否会处理 PR(integration: off→ 仅提供文本,除非工程师在此处提出要求,否则绝不推送或创建 PR)。 - postmortem:git 中不会包含事故经过。如果尚未提供,请向工程师询问必要信息:发生了什么故障、发生时间(含时区)、用户影响、如何发现,以及根本原因/修复措施(如有
/debug输出,可请其提供)。将工程师提供的说明作为事故事实传递。子 Agent 不得编造他们未提供的时间线条目或原因。
3. 撰写文档(主线程)
将此技能的文件夹解析为绝对路径(你已经解析过这些相对路径,因此知道该文件夹的位置),然后在撰写时(仅此时)读取 agent-prompt.md 和所选类型的一个模板 templates/<type>.md。遵循 agent-prompt.md 并自行撰写文档。不要启动写作 Agent;对于 postmortem,根因综合分析由你在主线程上仔细推理完成。
需要应用的输入:
- 文档类型及其模板(只读取所选模板)
- 源:提交列表、差异命令,以及(postmortem)事故事实。自行阅读差异;对于非常大的差异(例如超过 25 个文件),将阅读工作交给
scout子 Agent(haiku),让其按文件组/功能返回精简摘要,并据此撰写 - 项目背景内容(项目名称、约定),读取
AGENTS.md;如果没有,则回退读取CLAUDE.md,再加上用于了解“原因”的近期规格路径 - 该类型的输出目标和今天的日期
- pr:gh 操作,
none (chat-only)|gh pr create|gh pr edit(根据GH_INSTALLED/HAS_REMOTE/PR_EXISTS检查结果) - changelog:如果存在
CHANGELOG.md文件,匹配其现有格式(不要用 Keep a Changelog 强行替换已有的其他格式) release-note:已确定的版本和范围
4. 传达结果
开头先说明类型和结果的存放位置;对于 pr,正文就是交付物,因此要完整展示(遵循 docs/conventions.md)。模板:
## /document <pr | changelog | release-note | postmortem> · <PR body below | CHANGELOG.md | docs/releases/<v>.md | docs/postmortems/<file> | PR #N updated>
<for pr: the title + full body, ready to paste · always shown in chat so it works without gh>
<for the others: a 2 to 3 line preview>
Scope: ticked `Document it` (or "no scope row matched"; omit if not on the scope)
此技能不会提交、推送或合并;它只负责撰写文案(并勾选上文结束关卡中的 Document it 选项,这是它唯一会进行的范围编辑)。
参考文件
agent-prompt.md:主线程在撰写时(步骤 3)读取并遵循的写作指南templates/:每种类型对应一个结构文件(pr.md、changelog.md、release-note.md、postmortem.md);主线程在撰写时只读取所选类型对应的文件