From doc-smith
Generates and updates structured documentation from project data sources into a git-managed .aigne/doc-smith/ workspace with YAML schemas and HTML output. Use for creating, generating, updating, or modifying docs.
npx claudepluginhub aigne-io/doc-smith-skills --plugin doc-smithThis skill uses the workspace's default tool permissions.
从工作区数据源生成和更新结构化文档。所有输出创建在 `.aigne/doc-smith/` workspace 中。
Generates documentation for codebases—from file references and feature guides to full sites. Detects and adapts to frameworks like Fumadocs, Nextra, Docusaurus.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Share bugs, ideas, or general feedback.
从工作区数据源生成和更新结构化文档。所有输出创建在 .aigne/doc-smith/ workspace 中。
以下约束在任何操作中都必须满足。
.aigne/doc-smith/ 下执行mkdir -p .aigne/doc-smith/{intent,planning,docs,assets,cache}cd .aigne/doc-smith && git initconfig.yaml schema:
workspaceVersion: "1.0"
createdAt: "2025-01-13T10:00:00Z" # ISO 8601
projectName: "my-project"
projectDesc: "项目描述"
locale: "zh" # 输出语言代码,初始化时必须向用户确认
projectLogo: ""
translateLanguages: []
sources:
- type: local-path
path: "../../" # 相对于 workspace
url: "" # 可选: git remote URL
branch: "" # 可选: 当前分支
commit: "" # 可选: 当前 commit
locale 确认规则:初始化 workspace 时,若用户未明确指定语言,必须用 AskUserQuestion 确认输出语言(如 zh、en、ja),不得默认写入。
document-structure.yaml 必须符合下方 schema/doc-smith-check --structurenode skills/doc-smith-build/scripts/build.mjs --nav --workspace .aigne/doc-smith --output .aigne/doc-smith/distdocument-structure.yaml schema:
project:
title: "项目名称"
description: "项目概述"
documents:
- title: "文档标题"
description: "简要摘要"
path: "/filename" # 必须以 / 开头
sourcePaths: ["src/main.py"] # 源文件路径(无 workspace: 前缀)
icon: "lucide:book-open" # 仅顶层文档必需
children: # 可选:嵌套文档
- title: "子文档"
description: "详细信息"
path: "/section/nested"
sourcePaths: ["src/utils.py"]
docs/{path}/.meta.yaml(kind: doc, source, default)dist/{lang}/docs/{path}.htmldocs/ 目录中不得残留 .md 文件(构建后删除)/overview/doc-gen),build.mjs 自动转换为相对 HTML 路径/assets/xxx 绝对路径格式(build.mjs 自动转换为相对路径)Task 使用后台执行模式(run_in_background: true),执行日志不会回流到主 agent 上下文。主 agent 通过信号文件(.status)获取结果。
实践规则:
ls/Glob)评估项目规模,再决定结构规划方式:
Task 类型:
document-structure.yaml 草稿分发规则:
run_in_background: true,避免执行日志回流到主 agent 上下文Glob: **/*.{png,jpg,jpeg,gif,svg,mp4,webp}(排除 .aigne/ 和 node_modules/),将结果作为 mediaFiles 传递给每个 Task信号文件机制:
.aigne/doc-smith/cache/task-status/ 写入 {slug}.status 文件/ 前缀后以 - 替换 /(如 /api/overview → api-overview)/overview: 成功 | HTML ✓ | .meta.yaml ✓).status 文件判断 Task 是否完成(见"批次执行流程")/doc-smith-check --structure 通过/doc-smith-check --content 通过dist/ 目录包含所有文档的 HTMLnav.js 包含所有文档条目.aigne/doc-smith/ 目录下)| 场景 | 判断条件 | 行为 |
|---|---|---|
| 首次生成 | docs/ 不存在或用户明确要求 | 完整流程:意图 → 结构 → 生成 |
| 修改已有文档 | docs/ 已存在 | AI 理解修改请求,直接修改,满足约束即可 |
修改场景不需要 changeset/PATCH 机制。用户用自然语言描述修改需求,AI 执行并满足约束。
文件:.aigne/doc-smith/intent/user-intent.md
基于项目 README 和目录结构(ls/Glob)推断目标用户、使用场景、文档侧重点。生成后用 AskUserQuestion 确认。
# 用户意图
## 目标用户
[主要受众是谁]
## 使用场景
- [场景 1]
- [场景 2]
## 文档侧重点
本文档采用**[文档类型]**的形式:
- [侧重点 1]
- [侧重点 2]
主 agent 生成 user-intent.md 并经用户确认后,根据项目规模选择结构规划方式:
document-structure.yamldocument-structure.yaml 草稿,Task 返回文件路径 + 结构摘要(≤ 10 行)生成后用 AskUserQuestion 向用户确认,展示文档总数、层次、每个文档的标题和描述。
node skills/doc-smith-build/scripts/build.mjs \
--nav --workspace .aigne/doc-smith --output .aigne/doc-smith/dist
在分发内容生成 Task 之前,主 agent 执行一次图片后端检测,确定可用后端。后台 Task 无法与用户交互,因此必须在前台完成检测。
检测逻辑与 doc-smith-images 的「后端检测」部分相同:
GEMINI_API_KEY 是否已设置 → 选定 gemini-sdkafs-cli检测结果记为 {IMAGE_BACKEND}(值为 gemini-sdk、afs-cli 或 skip),传入每个 Task 的 prompt 模板。只有用户明确选择跳过时才可设为 skip。
若 {IMAGE_BACKEND} 为 gemini-sdk,还需确保依赖已安装:
ls <skill-directory>/scripts/node_modules/@google/genai 2>/dev/null || (cd <skill-directory>/scripts && npm install)
每篇文档使用单独的 Task tool 生成(≤ 5 篇并行,> 5 篇分批)。必须使用 run_in_background: true 分发 Task。必须使用以下模板构造 Task prompt,不得自行概括 content.md 内容:
你是文档内容生成代理。请先用 Read 工具读取 {CONTENT_MD_PATH} 作为你的完整工作流程,然后严格按照其中的步骤执行。
参数:
- 文档路径:{docPath}
- workspace:{WORKSPACE_PATH}
- 可链接文档列表:{LINKABLE_DOCS}
- mediaFiles:{MEDIA_FILES}
- 用户意图摘要:{INTENT_SUMMARY}
- 状态文件路径:{STATUS_FILE_PATH}
- 图片后端:{IMAGE_BACKEND}
关键工具说明:
- 使用 Skill 工具调用 /doc-smith-images 生成图片(步骤 5.5),必须传入 --backend {IMAGE_BACKEND}
- 使用 Skill 工具调用 /doc-smith-check 校验文档(步骤 7)
完成检查清单(必须在写入状态文件前逐项确认):
□ 步骤 5 图片使用:文档中已按需添加图片引用
□ 步骤 5.5 图片生成:已扫描并处理所有 /assets/{key}/images/ 引用
□ 步骤 6.5 HTML 构建:已执行 build.mjs --doc 并确认 HTML 生成
□ 步骤 7 校验:已调用 /doc-smith-check --content --path {docPath}
□ 状态文件:已将 1 行摘要写入 {STATUS_FILE_PATH}
模板变量说明:
{CONTENT_MD_PATH}:references/content.md 的绝对路径{WORKSPACE_PATH}:.aigne/doc-smith 的绝对路径{docPath}:文档路径,如 /overview{LINKABLE_DOCS}:所有文档路径列表(从 document-structure.yaml 提取){MEDIA_FILES}:媒体资源扫描结果{INTENT_SUMMARY}:user-intent.md 的 2-3 句话摘要{STATUS_FILE_PATH}:.aigne/doc-smith/cache/task-status/{slug}.status{IMAGE_BACKEND}:图片后端检测结果(gemini-sdk、afs-cli 或 skip)分发第一个 Task 前:
rm -rf .aigne/doc-smith/cache/task-status && mkdir -p .aigne/doc-smith/cache/task-status(重建目录,清空旧状态)每个 Task 使用 run_in_background: true 分发。批次内所有 Task 同时启动。
每 15 秒检查 .status 文件数量:
find .aigne/doc-smith/cache/task-status -name '*.status' | wc -l
.status 文件find .aigne/doc-smith/cache/task-status -name '*.status' -exec cat {} +
每个文件 1 行,所有文档摘要汇总后通常不超过 20 行。
.status 内容以"失败"开头 → 记录失败原因,不阻塞后续批次.status → 标记为超时,在最终报告中提示用户重试构建完成后,读取 dist/ 中生成的 HTML 文件(每种语言各抽查 1-2 个页面),检查输出是否符合预期。如有问题直接修改 HTML 文件修复。
cd .aigne/doc-smith && git add . && git commit -m "docsmith: xxx"
所有文档生成并校验通过后,向用户展示生成摘要,并提示:
文档已生成完毕,可使用
/doc-smith-publish将文档发布到线上预览。
.aigne/doc-smith/
├── config.yaml
├── intent/user-intent.md
├── planning/document-structure.yaml
├── docs/{path}/.meta.yaml
├── dist/
│ ├── index.html
│ ├── {lang}/docs/{path}.html
│ └── assets/nav.js, docsmith.css, theme.css
├── assets/{key}/.meta.yaml, images/{lang}.png
├── glossary.yaml # 可选
└── cache/
├── translation-cache.yaml # 发布用
└── task-status/{slug}.status # Task 完成信号文件