Skip to main content

doc-weaver

项目文档编织器。基于lat.md格式规范,使用lat.md工具链,自动为项目生成覆盖所有模块的知识图谱文档到docs/目录,并用lat check做验证。当用户说'写文档'、'补充文档'、'生成项目文档'、'document this project'、'weave docs'时触发。文档主要供AI agent阅读,而非人类。

Ir a la instalación

Datos de origen

Repositorio
ID-VerNe/skill-forge
Última actividad en el origen
9 de agosto de 2026 a las 02:13
Idioma detectado de SKILL.md
chino
Estrellas
12
Forks
2

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Explorador de archivos
5 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
doc-weaver
version
2.1.0
description
项目文档编织器。基于lat.md格式规范,使用lat.md工具链,自动为项目生成覆盖所有模块的知识图谱文档到docs/目录,并用lat check做验证。当用户说'写文档'、'补充文档'、'生成项目文档'、'document this project'、'weave docs'时触发。文档主要供AI agent阅读,而非人类。
metadata
{"requires":["lat.md"]}
# doc-weaver v2.1 — 基于 lat.md 工具链的文档编织器 > **核心理念**: 使用 lat.md 的工具链,写文档到 `docs/` 目录,通过目录 junction/symlink 让 `lat.md/` → `docs/`,使 `lat check` 能直接验证文档。 ## 前置条件 目标项目必须已安装 `lat.md` CLI 并创建了 `lat.md/` → `docs/` 的目录 junction: ```bash npm install -g lat.md # 在项目根目录: mkdir -p docs lat init # 创建 lat.md/ 目录 mv lat.md/*.md docs/ # 把初始文件移到 docs/ rmdir lat.md # 删除原目录 # Windows: 创建 junction cmd.exe /c "mklink /J lat.md docs" # Linux/macOS: 创建 symlink ln -s docs lat.md ``` ## 文档格式规范(继承自 lat.md) 项目文档存放在 `docs/` 目录下,遵循 lat.md 的格式规范。 ### 目录结构 ``` docs/ lat.md # 根索引:所有文档的入口点 Project.md # [Tier 1] 入口文档:一句话描述 + 模块清单 Architecture.md # 架构总览:模块依赖关系、数据流向、技术选型 Glossary.md # 术语表:每个概念在项目中定义且仅定义一次 <module>.md # [Tier 2] 模块知识文档,每个模块一个文件 <module>/ # 子模块目录(可选) <submodule>.md schema/ # [Tier 3] 结构化数据(项目根目录,不是 docs/ 下) graph.json # 全模块依赖图(必需) <module>.schema.json # 模块结构化 schema(可选) ``` > **注意**: `schema/` 目录放在项目根目录,而非 `docs/` 下。因为 `lat check` 只接受 `lat.md/` 目录下的 `.md` 文件,JSON 文件放在 `docs/schema/` 会导致验证错误。 ### Section ID 每个 section 拥有层次化 ID:`file#Heading#Subheading#Subsubheading` - 第一段:项目根相对路径,**去掉 `.md` 扩展名** - 示例:`docs/backends#Supported Languages#Python` - 根标题(h1)在引用时可省略(解析器自动补全) - 源码引用:`[[lib.rs#GpuMode]]`(项目相对路径,不是 `src/` 前缀) ### Wiki Link 语法 ``` // @lat: [[lib.rs#GpuMode]] // TypeScript, JavaScript, Rust, Go, C # @lat: [[lib.rs#GpuMode]] // Python ``` `@lat` 注解的 section ID 使用**短格式**:`[[file.rs#SymbolName]]` 或 `[[file#Heading#Subheading]]`,不要使用完整层级路径 `[[lat.md/file#h1#h2#h3]]`。 ### 前文规则 每个 section **必须**有前导段落:紧跟在 heading 后的第一段文字,**≤250 字符**(不计 wiki link 语法),保证搜索摘要的简洁性。 **前导段落必须是有意义的描述,而非通用模板**。以下写法是禁止的: - ❌ `"Key concepts overview: ..."` — 无信息量 - ❌ `"Dependencies overview: ..."` — 无信息量 - ❌ `"Error conditions overview: ..."` — 无信息量 ✅ 正确写法:`"Core types shared across both binaries — GpuMode, Config, AppOverride, and Error — used by the CLI and GUI entry points."` ### Wiki Link 语法 | 语法 | 含义 | |------|------| | `[[target]]` | 链接到 `target.md` 文件的根 section | | `[[target#Heading]]` | 链接到 `target.md` 中的特定 heading | | `[[target\|alias]]` | 带别名的链接 | | `[[lib.rs#GpuMode]]` | 链接到源码符号(项目相对路径,无 `src/` 前缀) | **关键规则**:文档中的源码引用格式为 `[[path/to/file.rs#SymbolName]]`,**绝对禁止**使用 `[[src/path/to/file.rs#SymbolName]]`(`src/` 前缀会导致 `lat check` 报 `file not found` 错误)。 ### 源码注解 ``` // @lat: [[lib.rs#GpuMode]] // TypeScript, JavaScript, Rust, Go, C # @lat: [[lib.rs#GpuMode]] // Python ``` `@lat` 注解的 section ID 使用**短格式**:`[[file.rs#SymbolName]]` 或 `[[file#Heading#Subheading]]`,不要使用完整层级路径 `[[lat.md/file#h1#h2#h3]]`。 --- ## 核心工作流 整个流程分为 5 个阶段,按顺序执行。**Orchestrator agent 必须为每个 Phase 派出独立的子 agent 执行**,而非自己直接写文件。 ### 架构总览 ``` 你(主 agent) └── Orchestrator(子 agent) ├── Phase 0: 自己扫描项目 ├── Phase 1: 子 agent → 写 Tier 1 文档 │ └── 完成后跑 lat check → 不通过则修复重试 ├── Phase 2: 并行子 agent(每个模块一个) │ ├── agent → <module>.md │ ├── agent → <module>.md │ └── ... │ └── 完成后跑 lat check → 不通过则修复重试 ├── Phase 3: 子 agent → 生成结构化数据 │ └── 完成后跑 lat check → 不通过则修复重试 ├── Phase 4: 子 agent → 添加 @lat 注解 │ └── 完成后跑 lat check → 不通过则修复重试 └── Phase 5: 子 agent → 最终验证 └── 跑 lat check → 修复所有错误 → 报告结果 ``` ### Phase 0:项目扫描(Orchestrator 自己执行) 在开始写任何文档之前,**先扫描整个项目**收集上下文: 1. 读取 `package.json` / `Cargo.toml` / `pyproject.toml` / `go.mod` 获取项目元数据和技术栈 2. 读取 `README.md` / `CLAUDE.md` 获取现有项目描述 3. 扫描源码根目录,识别所有顶级模块/包 4. 对每个模块,快速扫描其 exports、关键 types/interfaces、外部依赖 5. 识别 entry points(main、HTTP handlers、CLI commands) **输出**:一份项目全景清单,包含模块列表、每个模块的关键符号、模块间依赖关系。 ### Phase 1:生成 Tier 1 入口文档 **派出一个子 agent**,生成 `docs/` 目录下的索引和入口文件: **`docs/lat.md`** — 根索引: ```markdown # docs - [[Project]] — 项目概述与模块清单 - [[Architecture]] — 架构设计与模块依赖 - [[Glossary]] — 术语表 - [[auth]] — 鉴权模块 - [[api]] — API 路由层 ``` **`docs/Project.md`** — 项目入口文档(Tier 1,~1K tokens): ```markdown # Project **Tech Stack**: TypeScript + Node.js + PostgreSQL + Redis **Architecture Pattern**: Clean Architecture ## Modules - [[auth]] — 用户鉴权,OAuth 2.0,JWT 管理 - [[api]] — HTTP API 路由与中间件 ## Dependency Graph 依赖关系见 [[Architecture#Module Dependencies]]。 ``` **`docs/Architecture.md`** — 架构总览 **`docs/Glossary.md`** — 术语表 **Phase 1 输出检查清单**(子 agent 必须遵守): - [ ] 每个文件有 `# Title` 根标题 - [ ] 每个 section 有 ≤250 字符的前导段落 - [ ] `lat.md` 包含了所有文档的 wiki link 条目 - [ ] 所有 wiki link 指向的文件将在 Phase 2 中创建 - [ ] 源码引用使用项目相对路径,**不加 `src/` 前缀** **完成后**:Orchestrator 跑 `lat check`,不通过则让子 agent 修复,通过后才进入 Phase 2。 ### Phase 2:生成 Tier 2 模块知识文档 **并行派出子 agent(每个模块一个)**,对 Phase 0 识别出的每个模块生成一个 markdown 文档到 `docs/` 下: 子 agent 的 prompt 模板(**必须包含以下约束**): ``` 你正在为 {module_name} 模块写文档。 输出文件:docs/{module_name}.md ## 结构要求 # {Module display name} 一句概述(≤250 字符):这个模块负责什么、为什么存在。 ## Key Concepts ### {概念名} 概念解释(≤250 字符)。内部机制概要。 Reference: [[file.rs#SymbolName]] (项目相对路径,不加 src/ 前缀) ### {概念名 2} ... ## Dependencies 列出该模块依赖的其他模块和外部 crate。**必须包含两项**: 1. 内部模块依赖(wiki link 链接到其他模块文档) 2. 外部 crate 依赖(列出 crate 名称和用途) ## Consumed By 哪些模块使用本模块: - [[other_module]] — 使用说明 ## Error Conditions 该模块特有的错误条件。**只列本模块产生的错误**,不要重复其他模块已列出的错误。 ## 关键规则(必须遵守) 1. 每个 section 必须有 ≤250 字符的前导段落,**且必须是有意义的描述**。禁止使用 `"Key concepts overview: ..."`、`"Dependencies overview: ..."` 等无信息量的通用模板。 2. 涉及其他模块的必须用 `[[wiki link]]` 3. 涉及源码符号的必须用 `[[file.rs#SymbolName]]`(项目相对路径,**不加 src/ 前缀**) 4. 不要创建重复的 section(检查是否有内容相同的 heading) 5. 一个概念只写一次,不要在不同 section 里重复描述 6. 对每个有文档价值的函数/结构体/枚举,在源码中找到对应位置并记录引用 7. 在 Dependencies 节中,**同时列出内部模块和外部 crate**,两者缺一不可 8. **源码引用格式必须是 `[[file.rs#SymbolName]]`**,绝对禁止 `[[src/file.rs#SymbolName]]` ``` **并行执行**: - 所有模块的 agent 同时启动(使用 Agent 工具,同一 turn 全部派出) - 每个 agent 独立写自己的文件,互不依赖 **完成后**:Orchestrator 跑 `lat check`,不通过则让对应模块的子 agent 修复,全部通过后才进入 Phase 3。 ### Phase 3:生成结构化数据(必需) **派出一个子 agent**,生成机器可读的 JSON 结构化数据到 `schema/`(项目根目录): **必须生成** `schema/graph.json` — 全模块依赖图: ```json { "modules": [ { "name": "auth", "dependsOn": ["database", "redis"], "usedBy": ["api", "worker"] }, { "name": "database", "dependsOn": [], "usedBy": ["auth", "api", "worker"] } ], "entryPoints": ["src/server.ts", "src/worker.ts"], "techStack": { "language": "TypeScript", "runtime": "Node.js" } } ``` **可选生成** `docs/schema/<module>.schema.json` — 各模块的 exports、dependencies、errors 等结构化描述。 **完成后**:Orchestrator 跑 `lat check`,不通过则修复,通过后才进入 Phase 4。 ### Phase 4:添加源码注解 **派出子 agent(每个模块一个,或所有模块合并到一个 agent)**,在源码中添加 `@lat:` 注解。规则: 1. 对 `docs/` 中每个描述了代码行为的 leaf section,在对应源码中添加 `# @lat: [[section-id]]` 或 `// @lat: [[section-id]]` 2. 放在对应的函数/类/测试前一行 3. 不要重复——每个 section 对应一个注释 4. 不要在简单 getter/setter 或明显无业务含义的代码上添加 5. 源码引用路径使用项目相对路径,**不加 `src/` 前缀** 6. 注意:Python 文件用 `# @lat:`,JavaScript/TypeScript/Rust/Go/C 文件用 `// @lat:` 7. **覆盖范围要求**:所有文档中提到的函数、结构体、枚举、常量都应有 `@lat` 注解。包括有文档价值的私有函数(如 `load_config()`、`save_state()` 等有业务含义的私有辅助函数)。 8. **`@lat` 注解格式**:使用短格式 `[[file.rs#SymbolName]]` 或 `[[file#Heading#Subheading]]`,**不要**使用完整层级路径如 `[[lat.md/file#h1#h2#h3]]`。`lat check` 接受的格式是 `[[file.rs#SymbolName]]`(文件引用符号)或 `[[file#Heading#Subheading]]`(文档引用)。 **完成后**:Orchestrator 跑 `lat check`,检查 `@lat:` 注解是否指向真实存在的 section。不通过则修复,通过后才进入 Phase 5。 ### Phase 5:最终验证 **派出一个子 agent**,执行最终验证。**该子 agent 的职责是运行 `lat check` 并修复所有错误**,直到全部通过。 ```bash # 从项目根目录运行 cd <project-root> lat check ``` #### 验证规则 `lat check` 自动检查: 1. **Wiki 链接完整性**:所有 `[[target]]` 引用是否指向真实存在的文件或 section 2. **源码引用完整性**:所有 `[[path/to/file#symbol]]` 引用是否指向真实存在的文件 3. **前导段落规则**:每个 section 是否有 ≤250 字符的前导段落 4. **根索引完整性**:根索引 (`lat.md`) 是否列出了所有文档 5. **代码引用检查**:`# @lat:` / `// @lat:` 注解是否指向真实存在的 section #### 修复策略 - 如果 `lat check` 报错,按错误信息逐条修复: - `broken link` → 修复 wiki link 路径或创建缺失的目标文件 - `no leading paragraph` → 在 heading 后添加前导段落 - `missing entries` → 在根索引中添加缺失的文档条目 - `file not found` → 修复源码引用路径(使用项目相对路径,不加 `src/` 前缀) - `code ref not found` → `@lat:` 注解指向的 section 不存在,修正注解或修正 section ID - `section not covered` → 文档中的 section 没有对应的 `@lat:` 注解,添加注解 - 修复后重新运行 `lat check` 直到全部通过 - **重复修复的次数上限为 5 轮**,超过后向用户报告剩余问题 --- ## 触发方式 | 你想干什么 | 怎么说 | |-----------|--------| | 🆕 首次生成文档 | `写文档` 或 `weave docs` | | 🔄 补充/更新文档 | `补充文档` 或 `update docs for <module>` | | ✅ 验证文档准确性 | `验证文档` 或 `verify docs` | | 🏗️ 为新模块写文档 | `给 <module> 写文档` | | 🔗 添加 wiki 引用 | `给 <module> 添加 cross-ref` | --- ## 关键规则 1. **Phase 0 必须先跑**:不要凭已有知识写文档,必须先扫描项目代码获取真实结构 2. **Phase 5 不可跳过**:所有文档生成/更新后,必须运行 `lat check` 做验证 3. **Phase 5 使用 `lat check` 而非自定义 agent**:利用 lat.md 工具链的机械验证能力,稳定且快速 4. **@lat: 注解不冗余**:一个 leaf section 对应一个 `@lat:` 注解,不重复 5. **@lat: 注解覆盖完整**:所有有文档价值的函数(包括私有辅助函数)都应有注解 6. **第一次运行覆盖所有模块**:后续运行只处理变更的模块 7. **Section ID 不可变**:一旦发布,不轻易修改 section ID(wiki link 会断) 8. **Project.md 是唯一入口**:AI agent 到达项目后首先读 Project.md,决定加载哪些模块文档 9. **源码引用不加 `src/` 前缀**:使用项目根相对路径,如 `[[lib.rs#GpuMode]]`。**绝对禁止** `[[src/lib.rs#GpuMode]]` 10. **永不自动 commit**:文档生成和验证完成后,将结果报告给用户,由用户决定何时、以什么 message 提交。不允许在流程末尾执行 `git add`、`git commit` 或 `git push` 11. **每个 Phase 完成后立即验证**:Orchestrator 在每个 Phase 完成后跑 `lat check`,不通过不进下一 Phase 12. **所有 Phase 需派出子 agent**:Phase 1-5 全部由独立的子 agent 执行,Orchestrator 只负责协调和验证 13. **Dependencies 节必须同时包含内部模块和外部 crate**:两者缺一不可,避免不同 agent 的粒度不一致 14. **禁止重复内容**:同一概念在整个文档集中只出现一次,子 agent 应先检查是否存在再写 15. **前导段落禁止通用模板**:禁止使用 `"Key concepts overview: ..."`、`"Dependencies overview: ..."` 等无信息量的写法。每个前导段落必须是有意义的描述 16. **`@lat` 注解使用短格式**:`[[file.rs#SymbolName]]` 或 `[[file#Heading#Subheading]]`,**不要**使用完整层级路径 `[[lat.md/file#h1#h2#h3]]` 17. **`schema/` 放在项目根目录**:非 `docs/schema/`,因为 `lat check` 只接受 `lat.md/` 下的 `.md` 文件,JSON 在 `docs/schema/` 会导致验证错误 --- ## 端到端示例:为 AI agent 准备一个完整的文档体验 编写完成后,项目的文档应该能让一个**从未看过源码的 AI agent** 在几分钟内准确回答以下所有问题。 ### 验证方法 1. 派出一个 Explore 类型的子 agent,只给它极模糊的提示词(如"帮我看下这个项目是干什么的、怎么用、实现原理"),不指定读什么文件 2. 检查 agent 的报告是否能准确回答: - 项目是做什么的(一句话总结) - 核心 CLI 用法和技术栈 - 模块划分和依赖关系 - 关键设计决策 3. 如果 agent 依赖了自己的知识而不是文档引用 → 文档不够,需要补 4. 如果 agent 漏掉了重要模块 → 文档索引不足,检查 wiki link 覆盖 5. 如果 agent 给出了错误理解 → 文档表述有歧义,需要修正 ### 成功指标 | 指标 | 达标标准 | |------|---------| | 项目概述 | Agent 能给出准确的一句话总结 | | CLI 用法 | Agent 能列出主要命令和参数 | | 架构理解 | Agent 能画出模块依赖关系图 | | 设计决策 | Agent 能列出 3+ 个关键设计决策 |
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub