前言¶
在 DeepSeek Harness(DSH)里跑 Web 会话、在 Codex CLI 里跑独立线程时,两边往往各自有一套工具与会话历史,缺少一条「可投递、可回溯、重启后仍有效」的通道。复制粘贴或临时脚本难以覆盖线程发现、委派任务回传等需求。Agent Relay 以 DSH bundle 形式提供中继服务:DSH 侧通过注册的 relay_send 工具(发送方取自 exec.agent),Codex 侧通过绑定成员的 stdio MCP 伴侣(发送方取自 bearer 凭证),实现持久、双向的消息交换。
这是什么¶
Agent Relay(npm 包名 dsh-agent-relay-plugin,当前版本 0.1.0)由维护者 lyuwen 发布,分类为工作流类 DSH 插件。它在 DSH 原生会话与 Codex 原生线程之间建立 durable messaging:支持 push 投递、线程发现(relay_threads)、以及委派工作回到发起对话的会话;中继自身的 ephemeral 线程不会进入用户可见历史。许可证为 MIT。
核心功能¶
以下能力均来自项目 README 与 package.json 说明,并已标注验证环境。
- 双向 push 投递:真实 DSH Web 会话与持久 Codex 线程可互相发消息;各端按各自 harness 的接入方式连到中继。
- DSH 侧工具:通过 Cordis 注册的
relay_send,发送身份来自 profile 的exec.agent。 - Codex 侧 MCP:捆绑的 MCP companion 提供
relay_send、relay_inbox、relay_members、relay_status等;外部成员(如自启 TUI)走 pull 路径,消息可排队并在relay_inbox一次性取走。 - 成员与寻址:
relay_members列出成员别名、标题、cwd;to可接受别名、唯一 id 前缀或完整 member id;歧义或未知名称会返回候选列表而非猜测。 - 可选会话创建:在配置
allowSessionCreation(及maxSpawnedMembers上限)时,成员可创建新会话。 - 默认运行参数:默认
teamId: relay,bridgePort: 33120;日志与状态位于$DSH_HOME/agent-relay/(含journal.jsonl);未配置 transport 时对 Codex daemon 默认 socket 做 lazy attach,daemon 晚于 host 启动时也会在出现后挂上。
兼容性(README 表格):
| 组件 | 已验证版本 |
|---|---|
| DeepSeek Harness | 0.2.0-rc.2;engines.dsh 为 >=0.2.0-rc.2 <0.3.0 |
| Codex CLI | 0.163.0(stdio / WebSocket app-server 及 daemon unix WebSocket);协议曾在 0.162.1 探测 |
| Node | >=22 |
安装与启用¶
Agent Relay 是 DSH bundle:安装后会在 profile 中增加一条默认 disabled 的 Host 行;仅在 profile 用户层启用后,每次 boot 该 profile 时才会启动中继。
安装 bundle(任选其一,命令来自官方 README):
# 预构建 tarball:无构建脚本、无额外网络
dsh plugin --profile web add ./dsh-agent-relay-plugin-0.1.0.tgz
# 或本地 checkout 路径:
dsh plugin --profile web add /path/to/dsh-agent-relay
# 或发布后:
dsh plugin --profile web add dsh-agent-relay-plugin
在 $DSH_HOME/profiles/web/cordis.patch.yml 顶层 YAML 数组中增加 enable 块。后续 layer 会整段替换某行的 config,因此需写全各键:
- id: agent-relay
disabled: false
config:
codexProxy: ~/.codex/app-server-control/app-server-control.sock
codexExecutable: /path/to/codex
allowSessionCreation: true
externalMembers:
- id: codex-tui
tokenFile: $DSH_HOME/agent-relay/codex-tui.token
重启 profile 后,中继随 profile 启动;Codex daemon 若晚于 host 出现,也会在 attach 时机连上。
卸载:
dsh plugin --profile web remove dsh-agent-relay-plugin
Codex 侧配置与 skill 安装¶
Codex 通过 bundle 内的 MCP companion 连到中继。在 ~/.codex/config.toml 中增加(token 与 external member 一致):
[mcp_servers.agent-relay]
command = "/path/to/node"
args = ["$DSH_HOME/profiles/web/node_modules/dsh-agent-relay-plugin/dist/mcp.mjs"]
default_tools_approval_mode = "approve"
[mcp_servers.agent-relay.env]
AGENT_RELAY_URL = "http://127.0.0.1:33120/relay"
AGENT_RELAY_TOKEN = "<the codex-tui member token>"
创建成员 token 目录并向两侧 harness 安装 skill:
mkdir -p "$DSH_HOME/agent-relay" && chmod 700 "$DSH_HOME/agent-relay"
printf '%s\n' "$TOKEN" > "$DSH_HOME/agent-relay/codex-tui.token"
chmod 600 "$DSH_HOME/agent-relay/codex-tui.token"
node "$DSH_HOME/profiles/web/node_modules/dsh-agent-relay-plugin/tools/install-skill.mjs" \
--dsh-home "$DSH_HOME" --codex-home "$HOME/.codex" --agents-home "$HOME/.agents"
在不 boot 的情况下检查 layer 是否合成正确,再重启 profile:
dsh --profile web --dump-config | grep -A4 'id: agent-relay'
自管 Codex 的 pull 路径¶
中继可驱动其托管的 Codex;若使用自启 TUI、IDE 会话或自有 daemon,则由 Codex 主动 pull。在 patch 中固定 bridgePort 与 externalMembers(token 与 Codex 环境变量一致),并在该 Codex 的 config.toml 中配置同一 MCP 与 AGENT_RELAY_URL / AGENT_RELAY_TOKEN。发往外部成员的消息保持 queued,不会注入 relay 未拥有的进程,且 survive relay 重启;relay_inbox 交付后 relay 记录 accepted,receipt.deliveredBy: "pull"。
开发与真实环境 profile(可选)¶
README 描述了隔离开发 home(relay-dev)与用户真实 ~/.dsh 下的 web-relay profile:前者不修改用户真实 profile;后者共享 storages/sessions,需注意同一 home 上多 host 并发时的 workspace/registry 编辑。若仅日常使用,按上文在 web profile 启用即可;开发 overlay 细节见 GitHub README 的 “How it is wired” 一节。
适用场景与注意¶
适合谁:需要在 DSH Web 会话与 Codex 线程之间做正式消息通道、线程发现或跨 harness 委派任务的开发者;已使用 DSH >=0.2.0-rc.2 且 Node >=22 的环境。
权限与安全:插件随当前 DSH profile 进程权限运行,会读写 $DSH_HOME/agent-relay/、接触 Codex socket 与 MCP 配置。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,自行评估 token、external member 与 allowSessionCreation 的风险。
生态说明:DSH 社区插件目录(如 SkillHub 上的 lyuwen/dsh-agent-relay)为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 package 元数据为准。
结尾¶
Agent Relay 把「DSH 原生会话 ↔ Codex 原生线程」之间的消息做成 bundle 级能力:安装后显式启用、配置 Codex MCP 与 token,即可在两侧 harness 各自原生接入方式下做持久双向 relay。进一步语义与验证证据见仓库 README。
- 目录页:https://www.skillhub.cn/plugins/lyuwen/dsh-agent-relay
- GitHub:https://github.com/lyuwen/dsh-agent-relay