前言¶
DeepSeek Harness(DSH)默认会把本机所有 skill、所有 MCP 服务的完整工具定义——名称、描述、参数 schema——推进每一次请求。skill 和 MCP 装得越多,每轮对话消耗的 token 越大,模型在工具列表里「挑错工具」的噪声也越高。常见做法是少装、手动关服务,但能力和上下文体积往往绑在一起,很难在「功能齐全」和「请求够小」之间折中。
dsh-lazy-toolbox 由社区维护者 anyi-520 发布,在 SkillHub 插件目录 中归类为「工作流」。下面介绍它如何改 DSH 加载 skill / MCP 的方式,以及安装与典型用法。
这是什么¶
一句话:dsh-lazy-toolbox 是 DSH 插件,把 skill 与 MCP 从「每轮都塞进工具定义」改成「系统提示里只留目录,用时再注入、用完可卸载」。
安装后,全局工具表里通常只保留一个常驻入口 toolbox;skill 与 MCP 在系统提示中分开列出,每条仅有一句话用途,不含调用参数。模型需要某项能力时调用 toolbox 的 load,把定义注册进当前会话(agent.ctx 作用域);用完 unload 或依赖回合结束自动卸载,后续请求体积立刻回落。
核心功能¶
资料中归纳的三件事如下。
1. 搬走:从全局工具定义里撤下 skill 与 MCP¶
安装并完成迁移后,本机 skill 目录、profile 里的 mcp-client 配置会整体迁入插件库,DSH 不再把它们放进全局工具定义。卸载时按原文原位置还原。
2. 留目录:系统提示里只有清单¶
系统提示增加「懒工具箱」段落:skills 与 mcp 分列,每条一行用途说明;已加载项可标 [已加载],仅作本会话状态提示。
3. 热加载:会话级注入与卸载¶
toolbox { action: "load", ids: ["skill:<名字>" | "mcp:<服务>" | "mcp:<服务>:<工具>"] }:把对应定义注入当前会话。toolbox { action: "unload", ids: [...] }或all: true:撤掉注入,缩小后续请求。toolbox { action: "list", ids: [...] }:查看目录;对某个mcp:<服务>可展开工具清单。
此外,插件还为新会话注册运行时上下文提醒(systemPrompt.context),避免模型因工具列表里看不到 skill/MCP 而跳过或凭记忆作答;加载过内容后该提醒变为空串并被过滤。默认配置 autoUnloadOnTurnEnd: true 时,每个新用户回合会再次提醒按需 load。
skill 大纲与按需取节¶
体积较大的 skill 在 load 时不整篇注入,而是给出大纲;需要某一节时用 toolbox { action: "skill", id: "skill:<名字>", section: "<节号>" },section: "all" 才取全文。可在 store.json 为单个 skill 设 loadMode: "full",或全局 skillInjectMode: full。
插件工具托管¶
其他插件可通过全局桥把成组工具交给懒工具箱托管,启动时不注册,用时 load 组 id(如 group:memstudio)。未安装本插件时,接入方可回退为照旧 ctx.tools.register。
设置页与开关¶
DSH 内「设置 → 懒工具箱」提供懒加载、工具、关于等标签:可按条目选择懒加载或跳过;关闭的 skill/MCP 不出现在目录里,load 会被拒绝,文件与配置仍保留。外部工具链检测与安装已拆到独立插件 dsh-toolchain,本插件 toolbox 不再提供 requirements / install。
其他 toolbox 动作(节选)¶
资料中的动作表还包括:status、add_skill、add_mcp、remove、enable / disable、mode、update(云更新)、code(内置代码编辑器)、discover(扫描已装插件自带 skill/MCP)等。云更新针对本仓库 GitHub Release,安装后需手动重启 DSH。
安装与启用¶
DSH 生态采用「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看 GitHub 仓库 源码与 MIT 许可证;插件以当前 DSH 进程权限运行,迁移会改动本机 skill 与 MCP 配置位置,生产环境请先备份 profile。
环境要求(来自 package.json):Node.js >= 20。包版本以仓库发布为准(资料中 package.json 示例为 0.7.3)。DSH 需 0.7.1+ 才能识别包内 dsh.bundle 声明;0.7.0 及更早安装器会报「没有声明组合包」。
从图形界面安装¶
在 DSH 中选择「插件 → 添加插件」,填写本地解压目录路径或 npm 包名。包内 cordis.patch.yml 会由 DSH 处理依赖、bundles 与配置行,重启后生效。
从 npm 安装¶
npm i -g dsh-lazy-toolbox
dsh-lazy-toolbox wire-profile
npm 发布后也可通过 DSH 插件管理器执行:
dsh plugin add dsh-lazy-toolbox
(以 README 原文为准。)
从本地目录接入(开发 / 自用)¶
将插件接到 profile 并写入配置(幂等):
node dsh-lazy-toolbox/bin/cli.mjs wire-profile
或安装全局 CLI 后:
dsh-lazy-toolbox wire-profile
然后重启 DSH;插件首次启动会自动迁移本机 skill 与 MCP 配置。
也可手动编辑 profile,例如在 package.json 中 link 依赖并在 cordis.patch.yml 末尾插入:
- insert:
- id: lazy-toolbox
name: dsh-lazy-toolbox
inject: [systemPrompt, tools]
config:
autoImport: true
autoUnloadOnTurnEnd: true
Release 附件解压后,同样执行 wire-profile 一类命令即可(见仓库 README 安装说明)。
典型用法¶
模型侧:先 load 再调用 MCP¶
系统提示中会说明:需要 GitHub MCP 时,先加载服务,再使用 mcp__github__* 类工具;用完卸载。
{ "action": "load", "ids": ["mcp:github"] }
{ "action": "unload", "ids": ["mcp:github"] }
或回合结束时依赖 autoUnloadOnTurnEnd 自动清理。
导入 skill / MCP¶
用户要求安装新能力时,模型可调用:
{ "action": "add_skill", "summary": "一句话用途", "...": "路径或 URL 等参数见工具 schema" }
{ "action": "add_mcp", "summary": "一句话用途", "...": "连接参数见工具 schema" }
add_mcp 会先连一次验证,失败自动回滚。
查看状态与目录¶
{ "action": "status" }
{ "action": "list" }
对某个 MCP 服务展开工具名:
{ "action": "list", "ids": ["mcp:github"] }
命令行(云更新示例)¶
dsh-lazy-toolbox update check
dsh-lazy-toolbox update download
dsh-lazy-toolbox update install
安装覆盖后按提示关闭并重新打开 DSH。
适用场景与注意¶
适合谁:本机已装多个 skill 或多个 MCP,希望默认对话请求保持较小工具定义;又希望在需要时仍能按需加载完整能力。也适合其他插件作者把成组工具改为懒加载托管。
注意:
- 迁移与还原涉及文件与 profile 配置,卸载前确认插件文档中的还原行为。
- 设置页关闭的条目不会出现在目录中,模型不应再尝试
load。 - 内置「不做懒加载」名单(如部分破甲类插件名模式)不会进目录,仅影响接管策略,不删除文件。
- 云更新、内置代码编辑器、
discover等能力均以 README 与docs/为准,升级后留意 CHANGELOG。
结尾¶
dsh-lazy-toolbox 把 DSH 里 skill、MCP 以及可选的插件工具组,从「每轮全量工具定义」改为「目录 + 会话内热加载」,用常驻的 toolbox 统一入口,配合上下文提醒与回合结束卸载,减轻 token 与工具噪声问题。