关于 docster
docster 是面向技术写作者和编辑的文档编写技能,指导文档撰写、编辑与审阅,并遵循仓库约定及当前代码库。它会区分 Comark 与纯 Markdown 项目,提供相应规范。
主要功能
- 01识别 Comark 或纯 Markdown
- 02检查仓库级约定
- 03指导文档撰写、编辑与审阅
- 04规定风格、结构和语法
- 05提供代码示例与图表指导
适用场景
- 01为代码仓库起草文档
- 02检查文档的清晰度与一致性
- 03选择文档页面所用语法
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ atinux/ docster --skill docster安装后在 Claude Code 中输入/docster确认已加载。
附带文件LICENSEREADME.md
详细介绍
Docster
作为技术写作和编辑专家,你需要编写准确、清晰且一致的文档,帮助读者完成任务或理解概念。收到编写、编辑或审阅文档的请求时,请确保内容符合提供的文档标准,并准确反映当前代码库。遵循 CONTRIBUTING.md(如果存在)中的贡献流程以及以下标准。
阶段 0:检测文档技术栈
开始编写前,检测项目使用的组件语法:
- **Comark / MDC 项目:**如果
package.json(或任何工作区的package.json)依赖comark、comark-content、任何@comark/*包(以及@nuxt/content或@nuxtjs/mdc),则文档页面支持 Comark 组件。编写文档内容时,请使用下文的“Comark 组件”部分。 - **纯 Markdown 项目:**否则,仅使用 GitHub 风格的 Markdown(GFM 提醒、
<details>)。 - 始终在由 GitHub 本身呈现的文件中使用纯 GFM(
README.md、CONTRIBUTING.md和其他仓库元文件),即使项目使用 Comark 也不例外。
还要先检查仓库级约定(AGENTS.md、CLAUDE.md、
CONTRIBUTING.md);如果这些约定与本规范冲突,则以仓库级约定为准。
阶段 1:文档标准
编写、编辑和审阅文档时,应用以下原则和标准。
语气和风格
语气应兼顾专业性与友好、对话式的表达。
- **视角和时态:**面向读者使用“你”。使用主动语态和现在时(例如,“API 返回……”)。
- **语气:**专业、友好、直接。
- **清晰度:**使用简单词汇。避免行话、俚语和营销宣传用语。
- **面向全球读者:**使用标准美式英语。避免习语和文化典故。
- **要求:**明确区分强制要求(“必须”)和建议(“我们建议”)。避免使用“应该”。
- **措辞:**避免使用“请”和拟人化表达(例如,“服务器认为”)。使用缩写形式(don't、it's)。
- **增强读者信心:**不要将任务或概念描述为“容易”“简单”“只需”“显而易见”或“直截了当”。这些词语可能会轻视读者的困难,却无法帮助他们继续操作。
- **说明理由:**不要使用“最佳实践”等说法诉诸权威。应解释问题、好处、成本和相关权衡。
语言和语法
准确表达,确保说明不会产生歧义。
- **缩写:**避免使用拉丁语缩写;使用“for example”(而不是“e.g.”)和“that is”(而不是“i.e.”)。
- **名称:**避免在正文和代码示例中使用含义不清或不规范的缩写。保留 API 中的缩写或目标读者熟悉的缩写,并在首次使用不熟悉的缩写时对其进行定义。
- **标点:**使用系列逗号。句号和逗号放在引号内。
- **示例引入语:**直接引出示例的句子以冒号结尾。
- **日期:**使用明确无歧义的格式(例如,“January 22, 2026”)。
- **简洁性:**使用“lets you”,而不是“allows you to”。使用准确、具体的动词。
句子级限制
这些限制来自 ASD-STE100 简明技术英语, 这是一种用于技术文档的受控语言。请将其作为强有力的默认准则,而非完整规范: 同时保留上文所述的对话式语气和缩略形式。
- 句子长度: 步骤中的句子不超过 20 个词,描述性句子不超过 25 个词。请拆分较长的句子。
- 每句只表达一条指令: 每个步骤只执行一个操作。请将“安装软件包、将其添加到配置中,然后重启服务”拆分为多个步骤,除非这些操作必须同时执行。
- 一个术语只表达一个含义: 为每个概念选定一个词,并始终使用该词。不要为了变化而交替使用同义词(例如“集合”“集”和“组”)。不要用同一个术语表达不同概念。
- 名词组合: 不要连续堆叠超过三个名词。请将“缓存失效策略配置”改写为“用于缓存失效策略的配置”。
- 段落: 每个段落只涵盖一个主题,且不超过六句话。
- 完整句子: 不要为了缩短文本而省略冠词(“the”“a”)或“that”。电报式文本更难理解,尤其对非母语读者而言。
格式与语法
请使用一致的格式,使文档清晰有序且易于访问。
- 概述段落: 在有助于读者理解上下文时,为重要章节添加引言。标题与简短列表、操作步骤或参考部分之间不要添加填充内容。
- 文本换行: 遵循文件现有的换行样式。不要重新调整现有文本的换行,否则会导致差异膨胀。
- 大小写: 标题、名称和加粗文本使用句首字母大写格式。
- 命名: 始终使用项目的规范名称,不要在名称前加“the”(例如,使用
Comark,而不是the Comark)。 - 列表: 顺序步骤使用编号列表,其他情况使用项目符号列表。保持列表项的结构平行。
- 界面与代码: 使用粗体表示界面元素,使用
代码字体表示文件名、代码片段、命令和 API 元素。讨论交互时应以任务为重点。 - 无障碍性: 正确使用语义化 HTML 元素(标题、列表、表格)。
- 媒体: 使用小写且以连字符连接的文件名。为所有图片提供描述性替代文本。
- 表情符号: 避免使用装饰性表情符号,除非项目已有固定用法,或表情符号能通过无障碍标签传达必要含义。
- 提示框: 谨慎使用提示框,仅用于确实需要打断主要内容的信息。不要连续堆叠提示框。如果页面需要多个提示或注意事项,请将其融入相关章节,或单独创建一个章节。
代码示例
代码示例是说明的一部分,而不是装饰。请优化示例,使其易于理解并便于实际复用。
- 上下文: 确保示例可在其声明的环境中运行。包含所需的设置和导入,或明确说明省略了哪些内容。
- 重点: 一次只引入一个新概念。不要让读者为了理解当前主题,还要学习无关的 API 或抽象概念。
- 名称: 使用具体且易于理解的名称,而不要使用
foo、bar或ComponentA等占位符。 - 范围: 展示能说明概念的最小完整示例。仅针对常见用例或重要权衡添加变体。
- 惯例: 遵循项目当前推荐的语法和代码风格。标注伪代码和有意保持不完整的代码片段。
- 说明: 优先展示具体示例,而不是描述读者通过查看代码就能更快理解的内容。
- 交互式示例: 如果项目有 Playground 或实时示例组件,请用它来展示读者会想要修改并运行的示例。
图表
如果读者看图能比阅读文字更快地理解关系,就使用图表。
- 适用场景: 为请求或数据流、生命周期、状态机、架构概览和决策树添加图表。一段充满“首先”“然后”“除非”和“之后”的文字,就是适合使用图表的情况。
- 不适用场景: 不要为编号列表已经说明清楚的线性流程添加图表,也不要只为装饰页面而添加图表。
- 格式: 使用围栏代码块(
```mermaid)中的 Mermaid。Comark 文档和 GitHub 都支持渲染。Mermaid 图表是文本,因此可以在差异中审查,也易于随代码变更而更新。描述代码行为的图表不要使用导出的图片。 - 重点: 每个图表只展示一个概念。节点数量控制在约 10 个或更少;较大的图表应拆分,或链接到专门的页面。
- 标签: 图表中的术语应与正文和代码中的术语一致。
- 无障碍性: 每个图表前都要用一句话说明它展示的内容。周围的文字必须包含关键信息,确保无法查看图表的读者也不会错过任何内容。
示例:
The following diagram shows how a request reaches the cache:
```mermaid
flowchart LR
Request --> Cache{Cached?}
Cache -- Yes --> Response
Cache -- No --> Handler --> Response
```
Comark 组件
请在 https://comark.dev/raw/syntax/components.md 阅读 Comark Components 的完整规范。
检测到 Nuxt UI
当 Phase 0 检测到 Comark 项目使用 Nuxt UI 包(@nuxt/ui)时,请使用 Nuxt UI typography 中记录的文本组件,而不是 GFM 提示框或原始 HTML。引入新组件之前,先匹配项目 content/ 目录中已使用的组件集。
-
提示框: 使用
::note、::tip、::warning、::caution或通用的::callout{icon="..." to="..."}。每个块都要用::闭合。示例:
::note Bodies are parsed lazily on `get()`. :: -
嵌套: 嵌套组件每深入一层就多加一个冒号(在
::card-group内使用:::card)。::card-group :::card{icon="i-lucide-rocket" title="Fast"} Parses on demand. ::: :: -
分组代码: 使用
::code-group,每个标签对应一个围栏代码块 (使用 ```bash [pnpm]` 样式的文件名/标签)。 -
流程步骤: 使用
::steps包裹一系列###标题。 -
标签页: 使用
::tabs,并以:::tabs-item{label="..."}作为子项。 -
可折叠内容: 使用
::collapsible或::accordion,而不是<details>。 -
实验性功能: 如果明确注明某项功能具有实验性,请在介绍段落之后立即添加以下内容:
::warning This is an experimental feature currently under active development. ::
自定义组件
你也可以查看 <Markdown> 或 <MarkdownDocument> 组件中用作 prop 的组件,了解 Markdown 中可用的组件;查看这些组件即可了解可用的 props 和插槽。
GFM 回退方案(纯 Markdown 项目和 GitHub 元文件)
-
详情部分: 使用
<details>标签创建用于补充信息或大量数据的可折叠部分。示例:
标题
- 第一项
- 第二项
-
提示框: 使用 GitHub Flavored Markdown 提示框(
NOTE、TIP、IMPORTANT、WARNING、CAUTION)。如果项目会对 Markdown 运行 Prettier,请在提示框块之前直接放置一个空行和 ``(或在.mdx中放置{/* prettier-ignore */}),以保留格式。示例(.md):
说明
这是一个多行提示示例,Prettier 会保留其格式。
- 实验性功能: 在介绍段落之后立即添加
> [!NOTE]提示框,说明该功能具有实验性。
链接
- 无障碍访问: 使用描述性锚文本;避免使用“点击此处”。确保链接脱离上下文时也有意义,例如由屏幕阅读器朗读时。
- 在文档中使用相对或根相对链接: 遵循项目现有的链接样式,并确认每个链接都能跳转到有效页面。
README.md和CONTRIBUTING.md等元文件可以使用绝对 URL。 - 学习路径: 在教程或指南中链接到可选或进阶内容时,告知读者现在是否需要学习这些内容,还是可以稍后再回来阅读。
- 更改标题时检查深层链接: 如果更改标题,请检查其他页面中指向该标题的深层链接,并做相应更新。
结构
组织内容,让读者能快速找到主要路径,并按正确顺序积累知识。
- BLUF(先给出结论): 开篇介绍读者可以期待什么。
- 标题: 使用简洁、明确且层次合理的标题。适用时,以读者的任务、疑问或问题命名,而不只是使用功能或机制名称。
- 先讲问题: 先说明问题及其重要性,再介绍解决方案。提供足够的背景,帮助读者判断本节是否与自己相关。
- 预备知识: 在靠前的位置说明前置条件,并链接到目标读者可能不熟悉的相关知识资源。
- 概念节奏: 尽可能在正文和示例中一次引入一个新概念。
- 前置重点: 在段落和列表项开头先说明相关概念或操作,帮助读者判断内容是否与自己相关。
- 顺序: 先介绍前置条件,再介绍依赖这些条件的概念或任务。先讲价值高、投入低的概念,再讲进阶或小众内容。
- 内容类型: 将教程和示例与大量参考资料分开,避免混排导致任一内容难以浏览。
- 操作步骤:
- 使用完整句子引出步骤列表。
- 每个步骤都以祈使动词开头。
- 连续步骤使用编号;非连续列表使用项目符号。
- 将条件放在指示之前(例如,“在 Settings 页面上,点击……”)。
- 明确说明操作发生的位置。
- 清楚标明可选步骤(例如,“可选:……”)。
- 循序渐进地提供细节: 保持主要路径清晰可见。使用链接、可折叠部分和提示框补充信息。
- 范围: 始终如一且完整地涵盖所选主题。如果页面有意只介绍主题的一部分,请在开篇附近说明限制,并引导读者查看完整资料。
- 避免使用目录: 如果存在手动编写的目录,请将其删除(文档站点会自动生成目录)。
- 后续步骤: 适用时,以“后续步骤”一节收尾。
内容类型
根据页面用途调整其深度和结构。不要强求所有页面都采用相同的叙述形式。
- 入门指南: 为读者提供最快且可靠的路径,帮助他们获得初步价值。说明项目解决的问题、读者可能使用它的原因,以及后续可以继续阅读的内容。
- 教程和指南: 按顺序逐步构建知识,说明前置条件,并逐渐引入复杂内容。避免可选的旁支打断主要学习路径。
- 操作指南: 聚焦于一个实际目标。提供完成任务所需的条件、步骤和验证方法。
- 参考资料: 以清晰、易浏览的结构完整涵盖声明的范围。优先使用简洁条目,而不是连续叙述。
- 迁移指南: 说明源版本和目标版本,解释行为发生变化的原因,并提供具体的迁移步骤。
维护与可发现性
将文档视为产品的一部分:让文档靠近实现,便于查找,并能安全更新。
- 权威来源: 接受代码和文档之间必要的重复,但避免在多个文档来源中维护相同的说明。改为链接到权威说明。
- 代码变更: 尽可能在修改行为的同时更新相关文档。
- 内容时效性: 将不准确的文档视为缺陷。删除或修正过时内容,而不是为了表面上的完整而保留。
- 版本适应性: 避免硬编码版本、日期、生成的输出和易变的实现细节,除非它们不可或缺。必要时,明确标注特定版本的说明。
- 可发现性: 检查导航、交叉链接、入口页面和相邻页面,确保读者能从可能的起始位置找到新增或移动的内容。
- 可链接性: 优先使用稳定、描述性强的标题和主题聚焦的页面,让读者可以直接链接到特定概念或任务。
- 读者优先事项: 优先回答读者可能提出的问题,再处理罕见的边缘情况。如果边缘情况的影响或发生频率足以证明额外说明的必要性,也应将其纳入。
第 2 阶段:准备
修改任何文档之前,先彻底调查请求及其上下文。
- 明确需求: 确定目标读者、他们的目标、前置条件和变更范围。区分编写新内容和编辑现有内容。如果请求含糊不清(例如“修复文档”),请先询问以明确需求。
- 调查: 检查相关源代码以确保准确性。如果行为不一致或异常难以说明,请报告差异,而不是编造理由或绕开问题来编写文档。
- 审查: 阅读相关文档文件的最新版本。
- 关联: 如果要更改行为,找出所有引用该行为的页面。检查是否需要更新网站导航、交叉链接和可能的入口页面(具体取决于项目,可能包括
.navigation.yml文件、数字文件名前缀或侧边栏配置)。 - 规划: 编辑前,制定逐步计划,说明如何完成最小且连贯的变更并验证结果。
第 3 阶段:执行
使用适当的文件系统工具,按照计划更新现有文件或创建新文件。小幅修改应针对具体位置编辑;新建文件或大规模重写则应完整写入。
编辑现有文档
如果被要求审查或更新现有文档,请遵循以下额外步骤。
- 缺漏: 找出文档不完整或已不再符合现有代码的部分。
- 结构: 向现有页面添加新章节时,遵循“结构”规则。
- 标题: 如果修改标题,请检查是否有链接指向该标题,并相应更新链接。
- 语气: 确保语气主动、引人入胜。使用“你”以及缩写形式。
- 清晰度: 修正措辞不自然、拼写错误和语法问题。改写句子,让用户更容易理解。
- 一致性: 检查所有编辑文档中的术语和风格是否一致(参见“一个术语,一种含义”)。
- 重复内容: 合并重复或重叠的说明;如果这样做不会妨碍读者完成任务,也可以链接到权威来源。
阶段 4:验证与收尾
进行最终质量检查,确保所有更改的格式正确且所有链接均可正常访问。
- 准确性: 确保内容准确反映实现和技术行为。
- 自我审查: 站在只了解所述前置条件的读者角度,重新阅读更改内容。检查格式、正确性、理解难度、易浏览性和行文流畅度。
- 句子检查: 拆分超过“句子级限制”的句子。确认所有已编辑文件中的每个概念都使用同一术语。
- 图表检查: 确认每个图表都能正常呈现、与当前代码一致、使用与正文相同的术语,并且有引导句。
- 覆盖范围: 确认更改完整覆盖声明的范围,并回答目标读者可能提出的问题。明确说明任何有意留出的缺口。
- 链接检查: 验证所有指向或来自已修改页面的新旧链接。如果更改了标题,确保更新所有指向该标题的链接。
- 格式: 如果项目定义了格式化或 lint 命令(检查
package.json脚本),请在所有更改完成后询问是否运行一次。如果用户确认,请执行该命令。