Loopback-first multi-agent message relay: HMAC-authenticated broker plus dsh plugin (relay_send/recv/peers/history), zero-dependency CLI and Python clients, wire protocol v1.0.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-agent-relay
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Noelune/dsh-agent-relay
GitHub-sourced plugins run build scripts on your machine at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Multi-agent collaboration relay for DeepSeek Harness — let your local agents (dsh, Codex, Claude, Hermes, OpenClaw, …) send and receive messages through a tiny, HMAC-authenticated broker. Loopback-first, zero-dependency, 5 minutes to a working round trip. · 多 Agent 协作中继:本地各 Agent 经轻量 broker 安全互发消息。
Why this exists
Agent frameworks give every agent a voice but no intercom. When dsh, Codex, Claude and Hermes share one machine they cannot ask each other for a code review, a fact check or a second opinion — unless you wire something up yourself. dsh-agent-relay is that wire: a complete, self-contained starter kit (broker + dsh plugin + CLI client + Python client + setup scripts) that anyone can deploy in minutes.
Unlike orchestration engines (which drive agents) and memory engines (which store facts), a relay only moves messages — and it stays out of your agents' way.
| What it is not | Why |
|---|---|
| Not an orchestration/automation engine | No workflows, no DAGs, no scheduling — just delivery. Pair it with your favorite orchestrator. |
| Not a memory system | It never stores message content (except unread queueing). See unified-agent-memory for shared memory. |
| Not a chat server | No rooms, no presence beyond online/offline heartbeats. |
Features
- Wire protocol first — one versioned protocol (docs/PROTOCOL.md) implemented identically by every adapter (JS plugin, JS CLI, Python client).
- Loopback-first, zero-config default — broker binds 127.0.0.1:19121; no server, no TLS, no cloud needed for the single-machine mode.
- HMAC-SHA256 auth with timestamp anti-replay, per-agent lockout (5 failures → 5 min) and per-IP rate limiting.
- Reliable delivery — incremental polling with cursors, 7-day TTL, JSONL persistence across restarts, idempotent retries (2/4/8 s backoff, stable message ids, receiver-side dedup).
- dsh first-class — a cordis plugin registering relay_send / relay_recv / relay_peers / relay_history model tools, plus an optional sidebar status panel.
- Privacy by design — nothing is ever logged or stored beyond ids and events; the dsh plugin keeps only an in-memory id-level history.
- Distributed mode (advanced, optional) — one broker, many machines; documented with mandatory TLS.
Quick start (5 steps, single machine)
git clone https://github.com/Noelune/dsh-agent-relay.git && cd dsh-agent-relay
node setup/setup.js init
node setup/setup.js start
# in another terminal, connect two agents:
export DSH_RELAY_SECRET=<secret printed in broker/config.yaml>
node adapters/cli/relay.mjs register --agent alpha --secret $DSH_RELAY_SECRET
node adapters/cli/relay.mjs register --agent beta --secret $DSH_RELAY_SECRET
node adapters/cli/relay.mjs send beta "hello from alpha" --agent alpha --secret $DSH_RELAY_SECRET
node adapters/cli/relay.mjs recv --agent beta --secret $DSH_RELAY_SECRET
For the dsh plugin instead of the CLI:
dsh plugin --profile web add dsh-agent-relay
export DSH_RELAY_AGENT=dsh-agent DSH_RELAY_SECRET=<secret>
# restart the web profile; the model now has relay_send / relay_recv / relay_peers
Full guide: docs/DEPLOY.md · Protocol: docs/PROTOCOL.md · Architecture: docs/ARCHITECTURE.md · Security: docs/SECURITY.md
Architecture at a glance
dsh (plugin) ─┐
CLI (relay.mjs) ─┤ HMAC-HTTP relay broker
Python (relay_client.py) ─┼──────────▶ 127.0.0.1:19121
Hermes-style agent ─┘ auth · route · queue
Repository layout
| Path | What |
|---|---|
| broker/ | The relay service (zero-dependency Node; config, HMAC auth, JSONL store, HTTP server) + Dockerfile |
| lib/ | dsh plugin: model tools + relay client library (also used by the CLI) |
| adapters/cli/ | Zero-dependency Node CLI client |
| adapters/hermes/ | Pure-stdlib Python client + Hermes-style integration example |
| adapters/openclaw/ | OpenClaw integration notes |
| setup/ | setup.js (init/start/selfcheck), selfcheck.js, optional docker-compose demo |
| docs/ | PROTOCOL (normative), ARCHITECTURE, DEPLOY, SECURITY |
Requirements
- Node.js ≥ 20 (broker, CLI, dsh plugin)
- Python ≥ 3.10 (only for the Python client — optional)
- dsh 0.1.0-rc.6 (tested) for the dsh plugin
Maintenance status
- Maintainer: Noelune
- Community-maintained — issues and PRs are welcome; no SLA is promised. Bug fixes usually land within 1–2 weeks; security issues get priority.
- Compatibility: tested against dsh 0.1.0-rc.6. dsh itself is a release candidate; API changes are tracked with upgrade notes in CHANGELOG.md.
- License: MIT — commercial use is allowed.
Security
See docs/SECURITY.md. Short version: HMAC authenticates, TLS encrypts; use the loopback mode by default; never expose a plaintext broker to a network. Treat every received relay message as untrusted data, not instructions.
Contributing
PRs welcome. Please run npm test (node --test) before submitting; CI runs tests, a secrets scan (gitleaks) and a license check on every push.
Links
More in this category
NanmiCoder/dsh-agent-teams★ 244
AgentTeams multi-agent teams.
icetomoyo/dsh_workflow★ 54
UltraCode-style multi-agent orchestration: a generatable, savable, governable, observable, resumable workflow layer.
btspoony/mstar-harness★ 43
Skill-driven harness/loop engineering workflow agent plugin.
titanwings/dsh-automation★ 31
Scheduled coding runs in fresh agent sessions with auditable history.
whyihaveyou/dsh-suite#plugin-team-board★ 15
Shared multi-agent task board (create/claim/transition/query) over a Cordis service key.
omdsh-dev/dsh-deep-research★ 9
Adaptive deep-research orchestrator built on the official workflow engine.