Extendable API Gateway Written in Go
Dynamic .so plugin system in Go is a clever twist on standard gateway config.
A local event gateway for AI code agents. Capture lifecycle events from Claude Code, Gemini CLI, and more — fan them out to any HTTP endpoint, webhook, or device.
Replaces scattered per-project agent hooks with one global config and SSE fan-out.
Developers using Claude Code or Gemini CLI who want to integrate agent events with local dashboards, IoT devices, or custom webhooks.
n8n (event routing) · Zapier (fan-out automation)
So I built agent-pulse: a local gateway that captures AI agent lifecycle events and fans them out to registered clients.
You register clients once in a global YAML. Projects just call `agent-pulse hook --provider claude --event stop` from their hooks. The gateway handles routing, per-client filtering, and parallel dispatch. It auto-starts on the first event.
Two delivery modes: HTTP POST fan-out for webhooks and scripts, SSE stream (`GET /events/stream`) for dashboards and anything that can't expose an endpoint. You can also attach project metadata via `.agent-pulse.json` that travels with every event.
Single Go binary, zero runtime dependencies. Claude Code and Gemini CLI supported today, OpenCode and Codex CLI in progress.
Note: Claude Code recently added native HTTP hooks, so you can POST directly to an endpoint without any intermediary. agent-pulse is useful when you have multiple clients, need SSE, or want one config across projects.
Thanks!
Dynamic .so plugin system in Go is a clever twist on standard gateway config.
Self-hosted Restream alternative with GStreamer pipeline management in Rust.
Pusher clone on Cloudflare Workers charging per broadcast instead of per connection.
JSONL files you can tail -f beats complex Kafka setup for agent event streams.
TwiML polling trades latency for zero-dependency simplicity—no WebSocket server or external STT/TTS APIs.
CLI-driven streaming without gateway is clever, but Hermes itself is niche.