前言¶
DeepSeek Harness(DSH)采用「一切皆插件」的架构,工具一多,单次会话里模型每轮都要带上大量工具的完整 JSON schema。已抓取资料里提到:重度配置下工具 schema alone 可占约 73.3K token,甚至超过会话里所有文本内容的一半;token 消耗上升,模型选错工具的概率也会跟着上去。
下面介绍社区插件 dsh-loadout(维护者 YongjianWan,分类 admin-security)。它把工具分成常驻、按需组、观察区与长尾几档,默认只暴露一小撮核心工具,其余按组隐藏,需要时用一句话激活;并提供搜索与代理调用,兼顾准确性与安全边界。社区目录页在 skillhub.cn,源码与说明在 GitHub。目录站为独立社区站点,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-loadout 是按需加载工具组的 DSH 插件:保留常驻核心,其余工具按组默认隐藏,需要时激活;并配合模式切换、读外网后切断外联等机制,减轻上下文膨胀、降低误调与外发风险。
2026-10-28 起,控制面主工具由 toolctl 更名为 loadout,配置文件与统计文件同步改为 loadout-*.json;旧文件在首次启动时会自动迁移,不丢配置与历史统计。
解决什么问题¶
插件把可见工具大致分为四档(资料原文表述):
- 常驻:文件读写、bash、搜索、skill、记忆读取等几乎每轮都会用的工具。
- 按需组:浏览器、办公、邮件、SSH、B 站、团队协作等,默认隐藏,通过
loadout activate一句话放出。 - 观察区(trial):启动快照之后才出现的未认领工具,默认隐藏;调用满配置次数(默认 3 次)自动转正回可见。
- 长尾:没被任何规则认领的工具保持可见,用
tools_search查找、tools_call代理调用。
横切能力还包括:模式切换(如 coding / 写材料 / 运维 / 只读审阅,可在 config.modes 扩展);读外网切断外联——浏览器或网页读取类工具一调用,当轮可自动隐藏发邮件、ssh、发消息等外发组(默认关闭,需 cut: true 或面板开启),下一轮或满足条件后恢复,紧急可用 loadout {"action":"release"} 人工解除。
边界原则(资料强调):只藏「有人认领」的工具;隐藏必须由显式规则声明,未命中规则的一律可见,避免控制面工具被误藏导致无法解套。
核心工具¶
| 工具 | 作用 |
|---|---|
loadout |
list 看状态;activate / deactivate 开关组;mode / release 模式与切断;stats 调用频率;review 分档建议 |
tools_search |
按关键词搜工具并返回完整 schema,支持中文(内置中英同义词桥接) |
tools_call |
按名字代理调用;外发、远程执行、删除类一律拒绝 |
browser |
浏览器门面(navigate / click / type 等十二个动作);chrome-devtools 组未激活时的兜底入口 |
安装与启用¶
安装命令以 README 为准:
dsh plugin add dsh-loadout
也可在 DSH 插件管理器中安装。插件以当前 dsh 进程权限运行,安装前建议自行查看 仓库源码 与 MIT 许可证。
配置要点¶
配置文件路径:~/.dsh/loadout-config.json。面板修改即写该文件,保存后立即重新分组,不必重启。
最小示例(字段含义见 README 表格):
{
"groups": [
{ "name": "email", "desc": "邮件:列信、读信、发送…", "prefixes": ["email_"] },
{ "name": "ops", "desc": "宿主运维", "names": ["present", "workflow"] },
{ "name": "goal", "desc": "长目标", "patterns": ["^(create|update|get)_goal$"] }
],
"neverHide": ["loadout", "tools_search", "tools_call"],
"hiddenGroups": null,
"idleCalls": 30
}
groups 为 null 时使用插件内置规则;hiddenGroups 为 null 表示新会话默认隐藏全部按需组,写成数组后不在数组里的组默认可见。MCP 工具(mcp__<server>__<tool>)默认按 server 名自动成组,可用 mcpGroups: false 关闭。
插件管理器 → 本插件详情页 → 配置,提供分组、规则、会话、调用频率四个页签,可视化编辑规则与会话级开关。
典型用法¶
查看当前负载状态:
loadout {"action":"list"}
激活某一工具组(例如邮件):
loadout {"action":"activate","group":"email"}
切换内置模式之一(示例为写代码模式):
loadout {"action":"mode","mode":"coding"}
查看 schema 体量与调用统计(验收用):
loadout {"action":"stats"}
长尾工具可先 tools_search 再 tools_call;组内工具在隐藏状态下若误调,插件会在 UNKNOWN_TOOL 路径上给出自愈引导(仅对已归组且当前隐藏的工具)。
工作机制(摘要)¶
- 启动时从
ctx.tools.schemas()枚举注册表并归组;新 agent 创建时通过ctx.tools.restrict({ deny })隐藏整组,dispose 后恢复。 - 注册表变动(热装插件、MCP 重连)监听
tools/change重新归组。 - 一组激活后,连续
idleCalls次工具调用未碰到组内工具则自动收回。 - 全程 fail-open:异常路径优先解除全部隐藏,避免停在半隐藏状态。
gatedGroups中的组(默认含 ssh / email / kimi-cu)激活需用户确认,模型需带confirm:true重试;面板上的用户操作不受此闸。
资料中的本机实测(2026-10-27,252 个工具同注册表):顶层会话可见 schema 约 2410 token(deny 210),子代理全量可见约 40053 token,约 16.6 : 1。子代理默认不隐藏(hideInSubagents: false),可按需改为 true。
适用场景与注意¶
适合: DSH 工具数量到百级、希望压缩每轮 schema、又需要按任务临时放开浏览器 / 邮件 / SSH 等能力的工作流;重视读外网后自动收外发组的安全习惯的用户。
注意:
restrict管不到 agent 自身作用域注册的工具(如部分团队工具),它们会保持可见。- 改
hiddenGroups只影响新会话,已建 agent 的隐藏状态不会因此重算。 - 面板 state/config 端点要求本机回环与自定义头,经 remote-web-ui 隧道可能无法打开面板。
- 已知限制与测试命令见 README:
node tests/test-grouping.mjs、node tests/smoke.mjs等。
结尾¶
dsh-loadout 用分组隐藏、激活、搜索与代理调用,把「全量工具 schema 每轮进上下文」压到可管理的规模,并在 admin-security 方向提供 gated 组、读外网切断外联等可选防线。需要细节时以仓库 README 与 docs/PRD.md 的产品行为规范为准。