DSH 插件开发技能包中的最小工具示例,向模型注册一个 greet 工具演示 defineTool 标准用法。
- License
- MIT
- 分支
- master
安装
$ dsh plugin --profile web add github:zimodzh/dsh-plugin-dev-skills/examples/greet-tool在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
一句话定位
这是 dsh-plugin-dev-skills 仓库自带的一个最小可运行示例,向 DSH 的模型注册一个名为 greet 的问候工具,用于演示 defineTool 的标准写法。它不是一个生产功能插件,而是给想学习 DSH 插件开发的用户的参考样板。
核心能力
- 向 DSH 工具注册表注册一个名为
greet的工具,供大模型在对话过程中调用 - 接收一个必填字符串参数
name,返回"Hello, {name}!"形式的问候字符串 - 在
output.schema中声明返回类型为字符串,并在output.render中把值渲染成模型可消费的内容块 - 演示
inject: ['tools']的写法,让 Cordis 容器在执行 apply 之前先准备好工具注册表 - 作为 dsh-plugin-dev 技能
references/tools.md文档配套的可复制运行示例
技术实现
- 语言: JavaScript(ESM,
"type": "module") - 关键依赖:
@deepseek-ai/dsh-tools(由 DSH 安装目录自带,无需在 package.json 中声明) - 架构模式: Cordis 插件模型,
apply(ctx)中通过ctx.tools.register注册工具;inject: ['tools']让 Cordis 等待依赖就绪 - 入口文件:
examples/greet-tool/index.js
适用场景
适合正在学习 DSH 插件开发、想跑通"自定义模型工具"完整链路的开发者。当你读完 references/tools.md 文档想要一份能直接 dsh plugin add 跑起来的最小例子时,安装这个示例插件并让 agent 调用一次 greet 工具,就能直观看到 parameters/execute/output 三段式的真实运行效果。生产场景请基于该示例自行扩展。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未声明 | 仅依赖宿主自带的服务,未在 package.json 中声明 engines |
| Node | 未声明 | 仅使用 ESM 语法,未在 package.json 中声明 engines |
| 平台 | 跨平台 | 纯 JavaScript 实现,无原生模块 |
| 原生模块 | 无 | package.json 中无 native 依赖 |
安装方式
dsh plugin --profile web add github:zimodzh/dsh-plugin-dev-skills/examples/greet-tool
配置项
本插件无需额外配置。所有行为(问候语前缀、参数 schema、返回值)都直接写在 index.js 源码里,没有暴露任何配置项。
常见问题
Q: 安装后在终端里能直接调用 greet 命令吗?
A: 不能。greet 不是 CLI 子命令,而是一个模型可调用的 tool。你需要在 dsh 对话里让 agent 主动调用它,比如对 agent 说 "Use the greet tool to greet Ada.",它就会调用工具并把 "Hello, Ada!" 回复给你。
Q: 安装这个插件需要额外安装 @deepseek-ai/dsh-tools 吗?
A: 不需要。该包由 DSH 安装目录自带,插件 index.js 里直接 import { defineTool } from '@deepseek-ai/dsh-tools' 即可使用,无需在 package.json 的 dependencies 中声明。
Q: 这个示例和同仓库的 hello-plugin 示例有什么区别?
A: hello-plugin 是最简生命周期示例,只演示 Cordis 插件的启动与自动清理;greet-tool 是模型可调用的工具示例,演示 defineTool 的 parameters、execute、output 三段式写法。两者侧重点不同,建议一起读。
Q: 可以把问候语改成可配置吗?
A: 可以,但需要改源码。当前实现把 "Hello, " 前缀硬编码在 execute 里。你可以修改 index.js 把它抽到 ctx.config,或者参考上游 dsh-plugin-dev 技能的 references/config.md 文档按标准写法改。
Q: 插件里的 inject: ['tools'] 是什么意思?
A: 它告诉 Cordis 容器在执行 apply(ctx) 之前先把 tools 服务注册好,避免在 ctx.tools.register 时注册表还没就绪而抛错。这是写工具类插件的标准约定。
Q: 安装后只在当前 profile 生效吗?
A: 是的。--profile web 指定了目标 profile,插件只会被加入该 profile 的插件列表,不会影响其他 profile。
上手难度
入门 — 示例本身只有 24 行代码,一个 defineTool 调用加一个 cordis.patch.yml,跑通即代表已经掌握了 DSH 工具插件的标准骨架。
已知问题与限制
- 问候语格式
"Hello, "与返回值模板都直接写在index.js的execute函数里,源码中没有任何配置读取或环境变量分支,想要修改前缀或拼接逻辑只能改源码(evidence: examples/greet-tool/index.js:21) cordis.patch.yml中id: greet-tool和name: dsh-greet-tool都是硬编码字符串,如果用户环境里已有同名插件 id 会产生命名冲突(evidence: examples/greet-tool/cordis.patch.yml:2-3)- 源码中未声明任何
engines、peerDependencies、os、cpu字段,DSH 版本兼容性需由宿主侧校验(evidence: examples/greet-tool/package.json:1-8)
中文 · English
一套遵循 Agent Skills 规范 的技能,用于开发 DeepSeek Harness(DSH) 插件。
DSH 是一个插件化的 Agent Harness SDK:模型适配器、工具注册表、会话日志、甚至 agent loop 本身,全都是可以从配置里替换的 Cordis 插件。本技能把官方文档里散落在教程、参考手册与生成目录中的约定,收敛成一套可执行的标准——任何加载了它的 agent,都能用同一种方式开发 DSH 插件。
注意: 本技能为社区维护项目,与 DeepSeek 官方无隶属关系,亦未获官方背书。
技能里有什么
dsh-plugin-dev/
├── SKILL.md # 入口:frontmatter、8 条硬规则、6 个场景工作流、决策速查表、完成前检查清单
├── references/ # 12 份详细标准,按需加载;索引见 references/README.md
├── examples/ # 两个可复制、可运行的最小示例
│ ├── hello-plugin/
│ └── greet-tool/
└── evals/ # description 的触发评测集与评测方法
references 覆盖:插件形态与生命周期 · 服务与依赖注入 · 五种事件分发模式 · 插件配置 · 上下文/Fiber/注册表 API · 三种角色能力设计(Definition/Provider/Consumer)· 工具开发 · LLM 适配器协议 · 插件形态扩展(工具/钩子/UI/协议桥)· 打包与安装 · 仓库内 workspace 包 · 完整能力 seam 目录。
目录结构
dsh-plugin-dev/
├── SKILL.md # 技能入口:frontmatter、8 条硬规则、6 个场景工作流、检查清单
├── LICENSE # MIT 许可证
├── README.md / README.en.md # 本说明(中文主 / 英文附)
├── references/ # 12 份详细标准(渐进式披露,按需加载)
│ ├── README.md / README.en.md # 目录索引:文件|内容|何时读
│ ├── plugin-anatomy.md # 插件形态、生命周期、Fiber、自动清理、HMR
│ ├── services.md # 服务定义/提供/消费、inject、隔离
│ ├── events.md # 五种事件分发模式、命名
│ ├── config.md # 插件配置与 cordis.yml 行
│ ├── context-api.md # 上下文 API、Fiber 类、注册表、继承的框架 API
│ ├── three-roles.md # 能力三种角色(seam)设计
│ ├── tools.md # 工具开发完整约定
│ ├── llm-adapter.md # LLM 适配器协议
│ ├── plugin-forms.md # 四种扩展形态 + 功能→机制映射
│ ├── packaging.md # 打包、安装与层序
│ ├── workspace-package.md # monorepo 内新建包的清单与命名
│ └── seams.md # 核心 seam 与能力服务全表、架构映射
├── examples/ # 可复制、可运行的最小示例
│ ├── README.md / README.en.md # 示例索引
│ ├── hello-plugin/ # 最小插件(生命周期 / 自动清理)
│ │ ├── README.md / README.en.md
│ │ ├── index.js
│ │ ├── package.json
│ │ └── cordis.patch.yml
│ └── greet-tool/ # 最小模型工具(defineTool)
│ ├── README.md / README.en.md
│ ├── index.js
│ ├── package.json
│ └── cordis.patch.yml
└── evals/ # description 触发评测集
├── README.md / README.en.md # 评测方法(训练/验证集划分)
└── trigger-queries.json # 12 正例 + 9 负例
安装
技能名为 dsh-plugin-dev,Agent Skills 规范要求所在文件夹同名;本仓库名为 dsh-plugin-dev-skills。克隆时直接指定目标文件夹名即可一步到位:
git clone https://github.com/zimodzh/dsh-plugin-dev-skills.git ~/.claude/skills/dsh-plugin-dev
把目标目录换成你所用 agent 的对应路径(见下表);也可以下载 release 压缩包,解压后把文件夹改名为 dsh-plugin-dev。
无需构建、无需脚本依赖、无需任何配置——以上说的是技能本身。实际开发 DSH 插件则需要一个可用的 DSH 环境:Node.js、pnpm,以及示例中用到的 dsh。
| Agent | 项目级 | 用户级 |
|---|---|---|
| DeepSeek Harness | <project>/.dsh/skills/(rank 100)或 <project>/.agents/skills/(rank 200) | ~/.dsh/skills/(rank 400) |
| Claude Code | <project>/.claude/skills/ | ~/.claude/skills/ |
| Codex | <project>/.codex/skills/ | ~/.codex/skills/ |
| VS Code Copilot | <project>/.agents/skills/ | ~/.agents/skills/ |
| 其它兼容 agent | 按该 agent 的技能目录约定 | 同上 |
验证:向 agent 提问"开发一个 DSH 插件 / 写一个 DSH 工具",技能应被触发;在 DSH 里也可以直接用 skill(dsh-plugin-dev) 工具加载确认。
版本对应
内容蒸馏自 DeepSeek Harness 官方文档站(2026-08 快照),并遵循官方「接口以生成参考为准」的原则:技能内容与仓库生成参考不一致时,以生成参考为准。发现偏差欢迎提 issue 或 PR。
触发评测
evals/trigger-queries.json 是 description 的回归评测集(12 条正例 + 9 条负例)。修改 description 前请先跑评测并记录通过率;方法论(含训练/验证集划分、防过拟合)见 evals/README.md。
示例
examples/hello-plugin—— 最小插件(bundle 格式):dsh plugin --profile demo add ./examples/hello-plugin后dsh --profile demo启动,应看到加载日志和每 5 秒一次的心跳,卸载时自动清理。examples/greet-tool—— 最小模型工具:安装后对 agent 说 "Use the greet tool to greet Ada.",应收到 "Hello, Ada!"。
完整步骤见 examples/README.md。
范围边界
覆盖仓库内、文件式的 DSH 插件开发:插件包、cordis.yml 行、patch overlay、工具、适配器、组合包、profile、仓库内 workspace 包。不覆盖会话内动态插件(cordis_define/cordis_run 流)与 agent preset 组合编辑——这两类由各部署的专项技能或官方工具负责。
维护与贡献
- 更新任何 references 前,先核对官方文档对应页面(文档站或源码生成区块),并在 PR 中注明来源。
- 遵守 Agent Skills 约束:name 为 kebab-case 且与目录一致;description ≤ 1024 字符(DSH 目录注入提醒默认 500);正文渐进式披露。
- 欢迎 PR:修正、更多示例、扩充评测集、其它语言版本。
License
MIT——见 LICENSE。