一键导入
agent-sse-interop
Real-time SSE-based communication bus between Hermes and Leo/OpenClaw agents on port 18900
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Real-time SSE-based communication bus between Hermes and Leo/OpenClaw agents on port 18900
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Diagnose and fix Hermes messaging gateway connectivity issues (Telegram/Discord down, stale locks, PM2 problems)
Backup Hermes agent to GitHub and restore on a new VPS. Covers what to include/exclude, GitHub token requirements, and restore steps. Includes automated scripts.
GitHub auth setup: HTTPS tokens, SSH keys, gh CLI login.
Clone, create, fork, configure, and manage GitHub repositories. Manage remotes, secrets, releases, and workflows. Works with gh CLI or falls back to git + GitHub REST API via curl.
Fetch YouTube video transcripts and transform them into structured content (chapters, summaries, threads, blog posts). Use when the user shares a YouTube URL or video link, asks to summarize a video, requests a transcript, or wants to extract and reformat content from any YouTube video.
Manage Linear issues, projects, and teams via the GraphQL API. Create, update, search, and organize issues. Uses API key auth (no OAuth needed). All operations via curl — no dependencies.
| name | agent-sse-interop |
| description | Real-time SSE-based communication bus between Hermes and Leo/OpenClaw agents on port 18900 |
Real-time message bus between Hermes and Leo/OpenClaw using Server-Sent Events (SSE) via a shared HTTP server on port 18900. Enables push-based communication without polling.
┌─────────────────┐ SSEsubscribe ┌──────────────────────┐
│ Hermes Agent │◄───────────────────│ interop-server.py │
│ (SSE client) │ │ ThreadedHTTPServer │
└─────────────────┘ │ Port 18900 │
└──────────┬───────────┘
│ push
┌─────────────────┐ SSEsubscribe ┌──────────▼───────────┐
│ Leo/OpenClaw │◄──────────────────│ │
│ (SSE client) │ │ subscribers dict │
└─────────────────┘ │ queues dict │
└──────────────────────┘
GET /health — health check
GET /status — agents + queues + subscribers status
GET /subscribe?agent=<name> — SSE stream (long-lived connection)
GET /poll?agent=<name> — HTTP poll (returns + clears queue)
POST /broadcast?from=<name> — broadcast to OTHER agent
Without ThreadingMixIn, SSE connections block the entire server:
from socketserver import ThreadingMixIn
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
daemon_threads = True
allow_reuse_address = True
Each python3 interop-server.py process has its own queues dict. Broadcasts go to one process, SSE clients connect to another — they never meet.
Always kill ALL before restarting:
pkill -9 -f interop-server.py
sleep 2
ss -tlnp | grep 18900 || echo "port free"
When subscriber reconnects, flush pending messages:
q = queue.Queue()
while queues[agent]:
q.put_nowait(queues[agent].pop(0))
subscribers[agent] = q
self.wfile.write(b": keepalive\n\n")
try:
self.wfile.write(data)
except BrokenPipeError:
pass
/home/marco/hermes-commands/interop-server.py/home/marco/hermes-commands/hermes-sse-client.py/tmp/hermes-msg-pipe