前言¶
DeepSeek Harness (DSH) 采用插件化架构,智能体通常在会话中运行。在多智能体协作场景下,需要一种机制让不同会话中的智能体进行通信或传递指令。现有的做法往往依赖原始会话 ID 进行硬编码,缺乏管理性和稳定性。
dsh-agents-in-the-loop 插件解决了这个问题。它为 DSH 智能体提供了一个跨会话的“呼叫中心”功能,通过会话间消息传递和一个基于名称的联系人目录,实现了智能体间的标准化通信。
插件定位¶
- 名称:dsh-agents-in-the-loop
- 类型:工作流
- 所有者:markelayan
- 许可证:MIT
- 核心价值:跨会话消息投递与命名联系人目录管理。
核心功能¶
该插件提供了三个主要功能模块:
session_message工具:用于列出当前活跃的会话,并向已注册的联系人名称发送消息。contacts工具:维护一个基于会话 ID 的命名联系人目录。支持运行时添加、更新、重命名和删除联系人,无需重启 DSH。- HTTP API:提供仅限回环的 HTTP 接口,允许外部代理(如 Claude Code)向已注册联系人发送消息,同时也支持客户端面板读取联系人目录。
安装与启用¶
通过 npm 安装:
npm i dsh-agents-in-the-loop
安装后,需要在 DSH 的 cordis.patch.yml 配置文件中添加插件行,并重启 dsh web。配置示例:
- insert:
- id: dsh-agents-in-the-loop
name: dsh-agents-in-the-loop
config:
enabled: true
sessionMessage:
enabled: true # 开启 session_message 工具
contacts:
enabled: true # 开启 contacts 工具
典型用法¶
1. 使用工具发送消息¶
在 DSH 智能体中,可以使用以下指令:
- 列出活跃会话:
session_message { action: "list" }
- 发送消息:
session_message { action: "send", target: "dev-lead", message: "task done", wake: true, resumeIfDead: false }
* `target`:必须使用已注册的联系人名称(自 v1.4.2 起,原始会话 ID 被拒绝)。
* `wake`:默认为 true,唤醒空闲会话。
* `resumeIfDead`:默认为 false,尝试复活已死会话。
2. 管理联系人目录¶
- 添加联系人(仅名称即可自注册):
contacts { action: "add", name: "dev-lead" }
* 注:自注册不需要提供 sessionId。
- 更新联系人信息:
contacts { action: "update", name: "dev-lead", label: "Backend Lead", tags: ["senior", "python"] }
3. 外部 HTTP API 调用¶
外部脚本或 Claude Code 等非 DSH 环境的代理可以通过回环接口发送消息:
curl -s http://127.0.0.1:9001/api/agents-in-the-loop/message \
-H 'Content-Type: application/json' \
-d '{"from":"claude-code","contact":"dev-lead","message":"task done"}'
- 注意:API 仅支持回环访问(127.0.0.1),非回环请求会返回 403。
- 注意:外部 API 仅支持“发送”操作,不支持注册或接收消息。
注意事项¶
- 版本变更历史:该插件前身是
taskboard-flow。在 v1.0 版本中移除了看板引擎,v1.3 版本移除了 Web UI,当前版本专注于消息传递核心功能。 - 目标锁定规则(v1.4.2):
session_message send和contacts call只接受已注册的联系人名称作为目标。如果尝试使用原始会话 ID,会返回错误并提示使用list操作。 - 上下文卫生(v1.6.0):为了防止上下文膨胀,消息长度被限制在 8000 字符以内。如果发送长报告,建议通过文件路径发送。
- 配置与隐私:联系人存储基于文件(默认路径
~/.dsh/taskboard-flow-contacts.json),所有操作均为本地化,无遥测数据收集。
结语¶
dsh-agents-in-the-loop 为 DSH 插件生态提供了一个实用的跨会话通信层。它通过引入“联系人”概念替代了原始会话 ID,使得多智能体协作更加规范和可控。适合需要构建复杂工作流或多智能体系统的开发者使用。