OpenClaw Agent Relay Plugin Fixes Telegram Delivery in Multi-Agent Setups

A developer has released openclaw-agent-relay, a plugin that solves the problem where sessions_send in multi-agent setups fails to deliver responses to Telegram users.
The Problem with sessions_send
When using sessions_send to pass messages between agents, the target agent's response goes to channel=webchat (an internal channel) instead of reaching the user on Telegram. This happens because sessions_send preserves session and conversation history but doesn't properly handle delivery. The issue is documented in closed ticket #13374 marked as NOT_PLANNED. Additionally, it can corrupt the session's delivery context, flipping it from telegram to webchat permanently (referenced in #44153 and #31671).
Existing Workarounds and Their Limitations
Developers have tried two main approaches:
- Explicit message tool usage: The target agent calls message with channel: "telegram" and explicit to/threadId, then returns ANNOUNCE_SKIP. This is documented in #47971 and #28603. Problems include needing to embed delivery instructions in every sessions_send payload and agents forgetting to use the workaround, especially in longer sessions.
- Relying on announce step: Using timeout=0 to get an announce step where the agent can write a user-facing response. However, models tend to return ANNOUNCE_SKIP instead of writing content (#43295). Announce delivery also has issues: drops threadId for Telegram topics (#47971, #45878), silently fails with multi-channel setups (#47524), and ANNOUNCE_SKIP text can leak to users (#45084).
The Solution: openclaw-agent-relay
The plugin bypasses both sessions_send and announce entirely. It uses the same gateway WebSocket RPC that subagents use internally (callGateway({ method: "agent" })) to trigger an agent turn in the existing session with deliver: true. The agent responds normally without special instructions, ANNOUNCE_SKIP, or message tool workarounds, and the response goes directly to Telegram.
How to Use It
Two methods are available:
- Tool wake_agent: Any agent can call it to wake another agent in their session:
wake_agent({ sessionKey: "agent:my-agent:telegram:direct:123456", message: "Hey, remind the client about the contract" }) - HTTP POST /notify: For cron jobs, scripts, or external triggers:
curl -X POST http://127.0.0.1:18790/notify \ -H "Authorization: Bearer your-secret-token" \ -H "Content-Type: application/json" \ -d '{"sessionKey":"agent:my-agent:telegram:direct:123456", "message":"Reminder: client asked for the contract"}'
Installation
Install with: openclaw plugins install openclaw-agent-relay
The developer notes that implementing the gateway RPC authentication involved working with Ed25519 device identity, challenge-response protocols, and undocumented protocol quirks.
📖 Read the full source: r/openclaw
👀 See Also

ModelFitAI: Deploy AI Agents Without VPS Setup, Built with Claude Code
ModelFitAI is a platform that lets developers deploy AI agents directly on its infrastructure, eliminating VPS setup, Docker configuration, and SSH sessions. The entire platform was built using Claude Code by a solo founder.

Four Free Claude Code Skills for Prompt Clarity, Tutorials, and Bug Hunting
Four Apache 2.0, no-paid-tier Claude Code skills: prompter (prompt rewriting), tutorial-creator (annotated code walkthroughs), bug-echo (post-fix anti-pattern sweep), and bug-prospector (pre-release audit with 7 analysis lenses).
Survey of Local-First Markdown Memory Servers for AI Agents: Mem0, Hindsight, Zep, and the Newcomer Engram
A user tested ~20 local agent memory systems for storing memories as editable files. Engram (by Obsidian68) was the only one that met all requirements: fully local, Markdown storage, smart dedup, importance decay, and standalone server.

read-once: A Claude Code Hook That Prevents Redundant File Reads
A developer built a PreToolUse hook called read-once that tracks files Claude Code has already read in a session, blocking re-reads of unchanged files and using diffs for changed files. The tool saves thousands of tokens per session by preventing Claude from repeatedly reading the same file content.