前言¶
在多台机器上跑 DeepSeek Harness(DSH)时,常见做法是 SSH 登录对端、手动同步工作区,或在聊天里反复粘贴命令。机器一多,「哪台在线、该把任务派给谁」会变成额外负担。DSH 社区把能力拆成插件;dsh-plugin-mesh(维护者 peng456)面向同一问题:让各台 DSH 在局域网里互相看见,并在侧栏提供对端操作页,支持把任务交给对端 agent 执行,也可反向回派。
这是什么¶
dsh-plugin-mesh 是 DSH 的 Mesh 工作流插件(npm 包名 dsh-plugin-mesh,当前版本 v0.3.35,MIT 许可证)。启动后会在同一网段自动发现其他 DSH 实例,展示在线状态与对端上报的能力;支持双向派发任务。不在同一网段时,可启用内置的用户态 Tailscale(tsnet)节点,在 tailnet 上与局域网发现到的机器出现在同一列表里,用法一致。
生态上,DSH 遵循「一切皆插件」;插件目录站 SkillHub 由社区维护,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
下面介绍插件在运行时的主要能力,均来自项目文档。
自动发现与在线状态¶
- 向 UDP 组播
239.255.42.99:45892周期性发送 JSON 心跳(默认间隔 5000 ms),并监听同一组。 - 在本机 TCP 45917 提供小型 HTTP 对端 API(可通过配置改
port)。 - 组播 TTL 为 1,仅在同一二层广播域有效;跨子网或组播被挡时,可依赖启动扫描与主动扫网段(
mesh_scan)兜底。 - 通过 ping 等探测维护对端在线状态。
文档强调零配置倾向:固定端口、自动扫描与 ping,装上后同网段实例可互相发现,不需要配对码(安全相关见下文「适用场景与注意」)。
侧栏 Mesh 页面¶
首次打开 Mesh 页面时,可为当前机器设置可读名称(默认可用主机名),其他机器通过该名称识别本机。页面用于查看对端列表、互联网组网(Tailscale)等操作;面向从零使用的说明见 展示页。
Agent 可调用的工具¶
插件向 agent 注册以下工具(参数与行为以仓库 llms.txt 为准):
| 工具 | 作用 |
|---|---|
mesh_peers |
列出已发现对端:在线状态、地址、系统、用户及能力等 |
mesh_scan |
主动扫描本网段,组播不可用时使用 |
mesh_run |
向指定对端派发任务(异步:成功表示已接受,不表示执行完毕) |
mesh_tasks |
查看近期收发的 mesh 任务 |
mesh_run 必填 peer(机器名、instance id 或 ip:port)与 task。同一项工作可复用 thread,对端会复用会话以节省上下文;纯确认类消息可用 noWake: true 避免唤醒对端 agent。
跨互联网组网(Tailscale / tsnet)¶
局域网发现依赖组播或可达网段扫描;跨互联网时插件可下载预编译 sidecar(约 9MB gzip,缓存在 ~/.dsh/mesh/bin/),运行用户态 Tailscale 节点。终端用户无需安装 Go 或 Tailscale 客户端。需在 Tailscale 侧准备可复用的 auth key,在 Mesh 面板或配置中填写一次;密钥等状态写入 ~/.dsh/mesh/state.json(权限 0600)。
安装与启用¶
安装后必须重启 DSH 宿主进程,插件在启动时加载。
DSH Desktop(desktop profile)请在 DSH Desktop 自带终端 中执行;其他 profile 可在普通终端安装:
dsh plugin add dsh-plugin-mesh
Web 等非 desktop profile:
dsh plugin --profile web add dsh-plugin-mesh
文档说明:dsh plugin --profile desktop ... 在普通终端会被 dsh 拒绝,desktop profile 由 Electron 应用独占管理;此时应使用应用内终端,或使用源码目录下的 ./install.sh(用户要求不从 git clone 起步时,以 npm 包安装为主)。
重启后可用本地健康检查确认服务已起来:
curl -s http://127.0.0.1:45917/mesh/v1/health
返回 JSON 中应包含 "app":"dsh-mesh" 及本机标识等字段。
典型用法¶
1、同网段:看对端并派发任务¶
在 agent 对话中,可先让 agent 调用 mesh_peers 查看谁在线,再调用 mesh_run。概念示例(具体 peer 名以你环境中的 mesh_peers 结果为准):
请调用 mesh_peers,然后把任务「在 peer 机器上执行 npm test」通过 mesh_run 派给名为 my-build-box 的对端,thread 设为 deploy-test。
派发是异步的;进度与结果需通过对端 agent 会话或 mesh_tasks 查看。
2、组播不可用:主动扫描¶
若交换机 IGMP、AP 隔离或 Windows 防火墙拦截 UDP 45892,对端可能迟迟不出现。可让 agent 执行 mesh_scan,或依赖配置中的启动扫描(scanOnStart 默认为 true)。
3、跨网段:启用 tsnet¶
在 Mesh 面板 tailnet 卡片填写 Tailscale 可复用 auth key,或在 profile 的 cordis.patch.yml 中配置(注意:config: 会被整段替换而非合并,改一项需保留其余需要的键):
- id: mesh
config:
tsnetEnabled: true
tsnetAuthKey: "tskey-auth-..."
启用后,tailnet 上的 DSH 与局域网发现的对端在同一列表中,mesh_run 用法相同。
适用场景与注意¶
适合谁:同一局域网或多台开发机、构建机、Termux 设备等,希望从一台 DSH 把「在对端执行」交给 agent,而不是自己 SSH 切来切去;需要跨公网时愿意用 Tailscale 账号做自组网。
权限与安全:
- 插件以当前 dsh 进程权限运行;安装前应阅读 GitHub 源码 与 MIT 许可证,确认符合你的环境策略。
- 默认
requirePairing为 false:任何能访问本机 TCP 45917 的主机都可能 POST 任务并唤醒 agent(使用permissionPreset,默认workspace-write)。在不可信网络应打开 Mesh 面板中的配对开关,或配置requirePairing: true并让双方共享密钥;文档说明配对 token 走明文 HTTP 头,主要防误连,不防嗅探。 - 组播心跳会在同一 L2 网段暴露机器卡片信息;共享密钥不会出现在组播内容中。
- Android / Termux 上 sidecar 与省电策略有关,长期后台需按 README 将 DSH 加入电池白名单,否则心跳与会话可能中断(插件会按设计重建会话,但调试噪声会增加)。
网络端口:TCP 45917(对端 HTTP)、UDP 45892(组播)。跨子网 LAN 发现可能需要在配置中补充扫描范围(详见完整 README)。
结尾¶
dsh-plugin-mesh 把「多机 DSH 互相可见 + 双向派任务」做成可安装的 Mesh 插件:局域网靠组播与扫描,远网靠内置 tsnet,侧栏与 agent 工具(mesh_peers / mesh_run 等)覆盖日常编排。更多设计取舍与排障见仓库中文 README 与 DESIGN.md。