원클릭으로
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