安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add github:JohnXu22786/docgen
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
README
docgen — 文档工坊技能包
一组纯提示词(Agent Skills)形态的文档生成技能,为 dsh 等插件化 agent harness 提供四项能力:README 生成、PR 描述生成、changelog 生成、代码审查。所有技能遵循 Agent Skills 开放标准(SKILL.md + YAML frontmatter),自包含、无第三方依赖、离线可用。
包含的技能
| 技能 | 做什么 | 何时用 |
|---|---|---|
readme-forge |
从代码库生成/重写 README.md,只写有证据的内容 | 「给这个项目写个 README」 |
pr-dossier |
从 diff 与提交历史生成完整 PR 描述(变更档案) | 「为这次改动写 PR 描述」 |
changelog-curator |
从 git 历史分类、合并、改写生成 CHANGELOG | 「更新 changelog,准备发版」 |
diff-verdict |
输出结构化审查意见:结论 + 分级问题清单 + 亮点 | 「审查一下这个 PR」 |
每个技能都是自包含的单个 SKILL.md:正文包含输入收集指引、工作流程、输出模板与模板变量表、语言风格选项、输出质量检查清单、「不要做」清单与边界情况处理。
目录结构
docgen/
├── README.md # 本文档:安装、使用、接口说明
├── package.json # npm 清单:name(dsh-docgen)+ dsh.bundle
├── cordis.patch.yml # `dsh plugin` 安装时消费的 bundle 补丁
├── index.js # 技能挂载适配(把 skills/ 注册到 ctx.skills)
├── manifest.json # 插件清单(自描述元数据)
├── SKILLS.md # 入口索引文件
├── LICENSE # MIT 许可
├── skills/ # 技能根目录(接入时指向这里或拷贝其中条目)
│ ├── readme-forge/SKILL.md
│ ├── pr-dossier/SKILL.md
│ ├── changelog-curator/SKILL.md
│ └── diff-verdict/SKILL.md
├── examples/
│ ├── prompts.md # 每个技能的示例调用提示词
│ └── dsh-patch-enable-skills.yml # dsh 接入补丁示例(web profile 启用技能 + 登记目录)
├── scripts/
│ └── validate_skills.py # 技能包校验脚本(Python 标准库,无依赖)
└── tests/
├── test_validate_skills.py # 校验脚本的回归测试
└── index.test.mjs # 技能挂载适配的 node 冒烟测试
在 DSH 中安装
docgen 随包携带 dsh.bundle 清单,用插件加载器一条命令安装并启用:
dsh plugin --profile demo add github:JohnXu22786/docgen
bundle 会把插件行(id: docgen、name: dsh-docgen)插入 profile,解析本包入口
(index.js);其 apply(ctx) 扫描 skills/ 目录并把每个 SKILL.md 运行时注册到
ctx.skills——无需拷贝、无需额外配置。文件式接入方式仍然可用,适用于未加载
skills 服务或技能组件的 profile。
安装与接入 dsh
dsh 通过 skill-filesystem 提供方按技能根目录发现技能(一层深度:目录束 <root>/<name>/SKILL.md 或平铺文件 <root>/<name>.md)。接入本插件任选一种方式:
方式零:插件加载器(dsh.bundle,推荐)
dsh plugin --profile demo add github:JohnXu22786/docgen
bundle 入口(index.js)在加载时把 skills/ 下四个目录束注册到 ctx.skills。
这是单步接入;下述方式适用于手工或文件式集成。
方式一:项目级(零配置,不用插件加载器)
把 skills/ 下的四个技能目录(或整个 skills/)放进项目的技能根目录:
# 项目根目录(包含 .git 的最近祖先)任选其一:
# <project>/.dsh/skills/ 或 <project>/.agents/skills/
cp -r skills/* <project>/.dsh/skills/
方式二:用户级(所有项目可用)
# $DSH_HOME 默认 ~/.dsh;$DSH_AGENTS_HOME 默认 ~/.agents
cp -r skills/* ~/.dsh/skills/
方式三:自定义目录(插件原地接入,不拷贝)
通过配置给 skill-filesystem 提供方登记 customSkillDirs,例如用补丁文件(见 examples/dsh-patch-enable-skills.yml):
npx @deepseek-ai/dsh web --patch ./examples/dsh-patch-enable-skills.yml
注意:dsh 的
webprofile 默认关闭技能相关组件(skill-filesystem/tool-skill),需要补丁或 preset 启用;headlessprofile 默认开启。具体配置键路径以你所装版本的dsh --dump-config与官方文档为准。
验证安装
python scripts/validate_skills.py # 校验本包技能格式(全部通过则退出码 0)
python scripts/validate_skills.py --strict # 追加正文行数上限检查
python -m unittest discover -s tests -t . # 运行校验脚本自身的回归测试
npm test # 运行技能挂载适配的 node 冒烟测试
接入后在会话中直接以自然语言发起请求即可,模型会通过 skill 工具加载对应技能:
给这个项目写一个 README
为刚才的改动生成 PR 描述
根据 git 历史更新 changelog,准备发 1.2.0
帮我审查这个 PR
使用说明
- 触发:在提问中自然描述需求(见技能表「何时用」列),无需记住技能名;harness 依据
description/whenToUse自动路由。 - 风格选项:每个技能支持三种可覆盖维度——语言(默认跟随提问语言)、篇幅(精简/标准/详尽或完整)、语气/深度。以自然语言追加即可:
篇幅=精简、关注=安全、language=en。 - 输出形态:技能直接产出 markdown 文本;README/changelog 类技能会给出可直接保存为文件的完整内容,PR/审查类技能给出结构化描述或意见清单。
- 示例提示词:见 examples/prompts.md。
接口说明
技能接口(dsh 原生契约)
每个技能是一个目录束,SKILL.md 的 frontmatter 是 harness 读取的唯一契约:
| 字段 | 必填 | 约束 | 本包用法 |
|---|---|---|---|
name |
是 | kebab-case(小写字母/数字/连字符),≤64 字符,与所在目录名一致 | 见各技能 |
description |
是 | 非空,≤1024 字符,说明做什么 + 何时用 + 触发关键词 | 中文描述 + 英文关键词 |
whenToUse |
否 | 字符串,补充路由提示(社区确立的驼峰扩展字段) | 各技能均已提供 |
metadata |
否 | 字符串键值映射 | author / version / family |
license |
否 | 字符串 | MIT |
compatibility |
否 | 字符串,环境要求 | 纯提示词,无需网络 |
allowed-tools |
否 | 字符串,预先批准的工具清单(实验性) | 未使用 |
dsh 额外识别(本包不写、按默认处理):disable-model-invocation 与 user-invocable(缺省均开放)。注意:字段名必须按上表拼写——allowed-tools 含连字符、whenToUse 为既定驼峰拼写,拼写不一致(如写成 allowed_tools 或 when-to-use)会导致该字段不被识别;其中调用策略字段拼写或类型错误时,dsh 会丢弃整个技能(fail-closed)。
插件清单与入口
package.json+cordis.patch.yml:dsh plugin add消费的dsh.bundle清单。安装时 dsh 读取cordis.patch.yml插入docgen插件行并加载index.js——其apply(ctx)把技能注册到ctx.skills(name/description/whenToUse/content/metadata/source: bundled),返回的组合 disposer 在卸载时逆序注销全部注册。manifest.json:插件的自描述元数据(id / version / kind / entry / interface / skills / scripts)。dsh 的技能发现不读取它,它服务于人工查阅、发布流程与支持「入口文件」型加载器的 harness;interface字段声明了技能发现契约。SKILLS.md:入口索引,列出加载契约摘要与技能清单。
dsh 加载原理(摘要)
dsh 的技能能力由 skill(注册表)、skill-filesystem(本地发现)、tool-skill(模型目录与 skill 工具)三个插件协作提供:启动时按根目录扫描 frontmatter 生成目录(模型只看到 name + description);模型决定调用某技能时按名读取最新正文;正文中的相对引用以技能目录为基准。本包四个技能均为单文件自包含,不依赖相对资源。
开发与扩展
- 新增技能:在
skills/下新建目录 +SKILL.md(frontmatter 见上表),运行python scripts/validate_skills.py通过校验,并同步更新manifest.json与SKILLS.md。 - 修改技能:只编辑对应
SKILL.md,harness 下次加载即读到新内容(正文修改无需重启目录缓存)。 - 校验脚本:
scripts/validate_skills.py仅用 Python 标准库,可独立用于任何技能包;支持传任意目录/文件。解析范围是扁平 YAML 子集(顶层键值 +metadata缩进映射 + 引号/列表字面量),不含锚点、注释等完整 YAML 特性。
依赖与隐私
- 零第三方依赖:纯提示词 + Python 标准库脚本;
- 不发起网络请求,不收集任何数据;需要的能力仅为读取代码库文件与 git 历史(由 harness 提供);
- 许可证:MIT,见 LICENSE。
许可
MIT — 见 LICENSE。
常见问题
- web 界面看不到技能? dsh web profile 默认关闭技能组件,用方式三的补丁启用(或使用 CLI/headless profile)。
- 改了 SKILL.md 没生效? 技能正文按次读取,重发一次请求即可;若改的是 frontmatter 的
name/description,目录会随文件系统监听刷新。 - 技能与已有技能重名? dsh 按根目录优先级与层(layer)就近覆盖同名技能;本包技能名均为原创命名,冲突时优先检查是否已安装同名技能。