DeepSeek Harness (DSH) 生态强调模块化与权限隔离。在多智能体协作场景下,如何复用特定能力的智能体并严格控制其权限,是一个常见需求。dsh-preset-agent-manager 插件将「预设智能体」提升为 DSH 的一等公民。它提供了一个可视化的侧边栏管理面板,并提供了 preset_agent_dispatch 工具,允许主智能体在对话中委派任务。每个预设智能体拥有独立的插件白名单和工具白名单,子会话在隔离环境中运行,确保主会话安全。
核心功能¶
- 侧边栏管理面板:位于 DSH 侧边栏底部,提供全屏管理界面。支持创建、编辑和删除预设智能体。删除操作需二次确认并显示当前活跃的子会话数。
- 严格的白名单机制:支持插件白名单与工具白名单。白名单逻辑分为两层:继承层掩码(
toolFilter.allow)和自身层 guard(tools.guard),确保子会话只能调用被明确勾选的工具。 - 模型工具:
preset_agent_dispatch(agent_id, task):主智能体调用此工具将任务委派给预设智能体。preset_agent_admin(action, …):用于管理预设智能体的操作。
- 持久化存储:配置数据保存在
$DSH_HOME/data/dsh-preset-agent-manager/agents.json。文件采用「临时文件 + rename」的原子写入方式,损坏的文件会被自动旁置为.corrupt后缀。
安装与启用¶
方式一:标准安装(需要 pnpm)¶
本插件声明了 dsh.bundle.patch,安装成功后会自动加入 profile 的 dsh.profile.bundles 配置。
dsh plugin --profile web add file:$env:USERPROFILE\.dsh\plugins\dsh-preset-agent-manager
注意:
dsh plugin是一个 pnpm 薄转发器。若提示pnpm not found on PATH,请先执行corepack enable pnpm或全局安装 pnpm。修改 profile 配置后需要重启 profile 生效。
方式二:手工安装(不依赖 pnpm)¶
若环境无 pnpm,需手动将插件文件放入 profile 的解析路径,并追加 patch 层配置。
# 1. 放入 profile 的解析路径(Node 从 profile 目录向上查找 node_modules)
$dst = "$env:DSH_HOME\profiles\web\node_modules\dsh-preset-agent-manager"
New-Item -ItemType Directory -Force $dst | Out-Null
Copy-Item "$env:USERPROFILE\.dsh\plugins\dsh-preset-agent-manager\*" $dst -Recurse -Force
# 2. 激活:把下面 4 行追加到 profile 的 patch 层
# (该 profile 声明了 patchReload: live,正常情况无需重启)
- insert:
- id: preset-agent-manager
name: 'dsh-preset-agent-manager'
config:
rev: '16'
使用方法¶
- 打开面板:在 DSH 侧边栏底部点击 ⚉ 预设智能体 打开管理面板。面板支持视口自适应。
- 创建预设智能体:填写 id、名称、描述(触发域)和 persona。勾选允许使用的插件(插件白名单)和工具(工具白名单)。保存后即可使用。
- 任务委派:主智能体在对话中调用
preset_agent_dispatch工具。
{ "agent_id": "log-tracer", "task": "自包含的任务描述" }
调用返回包含 status(success / partial / failed)、output、tool_allow、warnings、error、startup_ms、duration_ms、session_id 等字段。
机制与限制¶
- 委派深度限制:插件设置了
maxDepth: 1,即预设智能体无法再次委派其他智能体,防止无限递归。白名单与作用域 guard 是额外的安全保证。 - 白名单执行逻辑:
- 继承层掩码:
toolFilter.allow过滤子会话继承的工具(全局层 + 父层),只保留白名单内的工具。 - 自身层 guard:由于子会话自身的 scope 可能包含
subagent等特殊工具,主机半在子会话发布后立即注册tools.guard,拦截不在白名单内的工具调用。
- 继承层掩码:
- 并发安全:
preset_agent_dispatch声明了isConcurrencySafe: () => true,同一预设智能体的多次委派会独立运行、互不干扰。 - 已知限制:没有 pnpm 无法使用
dsh plugin add的裸包名形式;预设智能体不是 agent preset,不能继承 preset 行独有的工具。
数据格式¶
预设智能体的配置保存在 $DSH_HOME/data/dsh-preset-agent-manager/agents.json,结构如下:
{
"version": 1,
"agents": [
{
"id": "log-tracer",
"name": "日志追踪器",
"description": "排查日志、慢查询、错误堆栈",
"persona": "你是一个专业的日志分析专家……",
"pluginWhitelist": ["@deepseek-ai/dsh-tool-fs"],
"toolWhitelist": ["read", "grep"],
"createdAt": "2026-09-15T10:00:00.000Z",
"updatedAt": "2026-09-15T10:00:00.000Z"
}
]
}
总结¶
dsh-preset-agent-manager 通过可视化的侧边栏和严格的工具/插件白名单,解决了 DSH 中智能体委派时的权限控制与复用问题。开发者可以通过简单的 JSON 调用实现任务分流,同时保持主智能体环境的隔离与安全。
- 插件目录:https://www.skillhub.cn/plugins/qingli-sketch/dsh-preset-agent-manager
- GitHub 仓库:https://github.com/qingli-sketch/dsh-preset-agent-manager