mcpField
D
docster

docster

github.com/atinux文档处理3849 次安装4 周前更新
代码仓库

关于 docster

docster 是面向技术写作者和编辑的文档编写技能,指导文档撰写、编辑与审阅,并遵循仓库约定及当前代码库。它会区分 Comark 与纯 Markdown 项目,提供相应规范。

主要功能

  1. 01识别 Comark 或纯 Markdown
  2. 02检查仓库级约定
  3. 03指导文档撰写、编辑与审阅
  4. 04规定风格、结构和语法
  5. 05提供代码示例与图表指导

适用场景

  1. 01为代码仓库起草文档
  2. 02检查文档的清晰度与一致性
  3. 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 阶段:准备

修改任何文档之前,先彻底调查请求及其上下文。

  1. 明确需求: 确定目标读者、他们的目标、前置条件和变更范围。区分编写新内容和编辑现有内容。如果请求含糊不清(例如“修复文档”),请先询问以明确需求。
  2. 调查: 检查相关源代码以确保准确性。如果行为不一致或异常难以说明,请报告差异,而不是编造理由或绕开问题来编写文档。
  3. 审查: 阅读相关文档文件的最新版本。
  4. 关联: 如果要更改行为,找出所有引用该行为的页面。检查是否需要更新网站导航、交叉链接和可能的入口页面(具体取决于项目,可能包括 .navigation.yml 文件、数字文件名前缀或侧边栏配置)。
  5. 规划: 编辑前,制定逐步计划,说明如何完成最小且连贯的变更并验证结果。

第 3 阶段:执行

使用适当的文件系统工具,按照计划更新现有文件或创建新文件。小幅修改应针对具体位置编辑;新建文件或大规模重写则应完整写入。

编辑现有文档

如果被要求审查或更新现有文档,请遵循以下额外步骤。

  • 缺漏: 找出文档不完整或已不再符合现有代码的部分。
  • 结构: 向现有页面添加新章节时,遵循“结构”规则。
  • 标题: 如果修改标题,请检查是否有链接指向该标题,并相应更新链接。
  • 语气: 确保语气主动、引人入胜。使用“你”以及缩写形式。
  • 清晰度: 修正措辞不自然、拼写错误和语法问题。改写句子,让用户更容易理解。
  • 一致性: 检查所有编辑文档中的术语和风格是否一致(参见“一个术语,一种含义”)。
  • 重复内容: 合并重复或重叠的说明;如果这样做不会妨碍读者完成任务,也可以链接到权威来源。

阶段 4:验证与收尾

进行最终质量检查,确保所有更改的格式正确且所有链接均可正常访问。

  1. 准确性: 确保内容准确反映实现和技术行为。
  2. 自我审查: 站在只了解所述前置条件的读者角度,重新阅读更改内容。检查格式、正确性、理解难度、易浏览性和行文流畅度。
  3. 句子检查: 拆分超过“句子级限制”的句子。确认所有已编辑文件中的每个概念都使用同一术语。
  4. 图表检查: 确认每个图表都能正常呈现、与当前代码一致、使用与正文相同的术语,并且有引导句。
  5. 覆盖范围: 确认更改完整覆盖声明的范围,并回答目标读者可能提出的问题。明确说明任何有意留出的缺口。
  6. 链接检查: 验证所有指向或来自已修改页面的新旧链接。如果更改了标题,确保更新所有指向该标题的链接。
  7. 格式: 如果项目定义了格式化或 lint 命令(检查 package.json 脚本),请在所有更改完成后询问是否运行一次。如果用户确认,请执行该命令。

评论

支持 Markdown