前言¶
在 DeepSeek Harness(DSH)里做子智能体委派时,官方 out-of-process ACP 后端刻意是 local-only:session/new.cwd 只能是本机目录,也没有把远端工作区映射进来的机制。实际开发里常遇到另一类需求:父会话留在笔记本或桌面端,却把一段自包含任务放到另一台已装 DSH 的机器上跑——用那台机器的工具、工作区、模型和凭据,只把 closing message 带回本地对话。这和官方正在做的「从别的设备访问同一个本地会话」不是同一条路;后者是续聊同一会话,前者是跨机算力委派。
下面介绍社区插件 dsh-subagent-remote(维护者 endlass,分类为工作流):它在本地 DSH 与远端 DSH 的 acp profile 之间补一段 SSH 传输,并提供插件页配置 UI。
这是什么¶
dsh-subagent-remote 是 DSH 上的 Cordis 插件(npm 包名同为 dsh-subagent-remote,当前发布版本 0.9.2-rc.8,MIT 许可证)。本地会话发起委派后,插件经 SSH 在远端启动 DSH acp,在远端绝对路径上执行一次性子任务,远端 agent 结束后只把 closing message 返回父会话;本地会话内容不由该插件迁移或对外暴露。
兼容窗口为 DSH >=0.2.0-rc.2 <0.3.0、Node >=22。包体为 index.js 与 lib/*,无第三方运行时依赖;SSH 凭据不写入插件,走本机 ssh 配置与 agent。
核心功能¶
跨机一次性委派¶
模型侧推荐使用统一工具 remote_subagent,通过 host 参数选择目标机器;新增主机是改配置,而不是在工具列表里再占一行。也支持 legacy 模式:每台主机注册一行官方 @deepseek-ai/dsh-tool-subagent。
远端链路在 README 中概括为:本机通过 ssh 在远端执行 dsh --profile acp,再经 ACP 完成 initialize、session/new、session/prompt 与权限协商,最后取回 closing message。
多主机与配置 UI¶
Web/桌面端的插件页可列出主机、测试 SSH 连通性、编辑字段覆盖、设置或清除默认主机。页面写入落到 $DSH_HOME/subagent-remote.json(相对 profile patch 的 JSON overlay),热加载生效,一般无需因改配置而重启 DSH。会话内可用 /remote-host 列出主机并切换当前会话的默认目标。
省略 host 时的解析顺序为:会话选择(/remote-host)→ overlay 的 defaultHost → profile 的 defaultHost → 若仅配置一台主机则使用该主机。
权限与失败策略¶
每台主机可设 permission:read-only(默认)、ask、deny、auto。需要审批的远端工具调用在无人应答时拒绝,不默认放行。文档强调 read-only 是启发式分类,不是硬安全边界;对不可信远端应使用 deny 或远端沙箱,并把 closing message 当作不可信输入。
失败时提供结构化诊断(stage=、category= 等);本地 Host 重启时仍在进行的运行会记为 orphaned 并在插件页与会话头部可见,便于人工核对,不自动重试或续跑。
其他已文档化能力¶
- Windows 远端:远端
cwd为盘符路径时自动使用cmd.exe载体,不要求目标机安装 Git Bash。 - 会话头部运行指示器(Web/桌面):派发后显示远端主机、状态与耗时。
- 可向新会话注入「自动委托提示」系统提示词段落,便于模型自行选择
remote_subagent;可在插件页关闭注入,工具仍可用。 - 支持
local: true在本机再启一个acpprofile,用于不走 SSH 的同链路演练。
安装与启用¶
DSH 生态习惯「一切皆插件」;社区目录 SkillHub 是独立站点,与 DeepSeek / 幻方无官方从属关系,安装前请自行查阅 GitHub 仓库 源码与许可证。插件在 当前 DSH Host 进程权限 下加载,并会在你配置的远端机器上启动 DSH,仅应指向你信任的主机。
CLI(npm registry)¶
dsh plugin 会把参数转发给 profile 目录内的 pnpm,因此可使用任意 pnpm 包 spec:
dsh plugin --profile <profile> add dsh-subagent-remote # latest = 0.9.2-rc.8
# 或钉住版本
dsh plugin --profile <profile> add dsh-subagent-remote@0.9.2-rc.8
插件页(桌面/Web,文档推荐)¶
打开 插件 → 添加插件,输入 dsh-subagent-remote 并确认。安装后于 已安装插件 中打开 打开配置,添加远端主机。全新 bundle 安装默认零主机,在配置完成前不会派发任务。
安装、升级或修改 index.js / lib/** 后需重启 DSH Host;仅改 client 侧配置页资源时刷新页面即可。配置页仅对 bundle 安装提供;headless / ACP profile 无 UI 时仍可派发,只是没有图形配置与头部指示器。
典型用法¶
1. 在配置页或 patch 中定义主机¶
最小 SSH 主机需要 ssh 目标与远端绝对路径 cwd,例如文档中的 POSIX 示例结构(字段名须与官方 README 一致):
hosts:
- name: host-a
provider: remote-host-a
ssh: example-host
cwd: /srv/work
permission: read-only
Windows 远端示例:
- name: win
ssh: win-host
cwd: C:/Users/me/work
permission: read-only
常用主机字段还包括:timeoutMs(默认 600000)、remoteCommand / remoteArgs(默认 dsh 与 ['--profile','acp'])、remoteSession(close 或 keep)、sshArgs、scrubEnv 等;完整表格见仓库中文 README「配置」一节。
2. 在对话中委派¶
配置完成后,父会话中的模型可调用 remote_subagent(或 legacy 模式下各主机对应的官方 subagent 工具),在任务描述中说明要在哪台 host 上执行什么。插件页开启「自动委托提示」时,新会话系统提示词会列出已启用主机及使用时机,用户不必每次点名工具名。
会话内切换默认主机:
/remote-host
/remote-host mac
/remote-host reset
3. 连通性自检¶
在插件页对主机执行 测试连接:真实发起 ssh -T -o BatchMode=yes -o ConnectTimeout=10 探测(文档写明单次 25 秒超时、自动重试一次),避免把瞬时握手失败误判为不可达。
前置条件与适用场景¶
| 一侧 | 要求 |
|---|---|
| 本地 | DSH >=0.2.0-rc.2 <0.3.0,Node >=22;可选 Web/桌面 UI |
| 远端 | 已装 DSH 且暴露 acp profile;本机 SSH 可连;cwd 为远端已存在绝对路径 |
适合:需要把构建、平台相关命令或特定工作区操作放到远端 Linux/macOS/Windows DSH 上跑,同时本地 Lead 会话保持在当前设备。不适合:期望共享或迁移整个本地会话到其他客户端——那应关注官方远程/移动端访问能力。
注意:远端机器视为信任域;read-only 不能替代沙箱。调试时 DSH_SUBAGENT_REMOTE_DEBUG=1 会把远端原始输出带入父会话,仅应在受控环境短时开启。
结尾¶
dsh-subagent-remote 填补的是 DSH 官方 local-only ACP 子智能体与跨机一次性委派之间的空隙:一条 SSH、一个带 host 的 remote_subagent 工具,加上可热加载的多主机配置页。若你要在 DSH 工作流里把子任务安全地「丢」到另一台 DSH 上,可从社区目录与仓库文档对照安装与主机字段。