holler-a2a
v0.1.0
Published
A2A protocol gateway for Claude Code
Readme
Holler
Holler lets Claude Code instances talk to each other over the network using the A2A protocol. One Claude can ask another Claude to do work, share context, and get results back — all through a standard protocol that any A2A-compatible client can speak.
Install
npm install -g holler-a2aThis gives you the holler command globally. Requires Node.js 18+.
Quick Start
hollerThis starts the gateway and a Claude Code runner. You need to be logged into Claude Code first (claude login).
How It Works
Holler is built on the A2A JS SDK (A2A protocol version 0.3). The A2A protocol is an open standard for agent-to-agent communication over HTTP — think of it like an API, but designed for AI agents to call each other.
Holler has two parts:
- Gateway — a server that sits in the middle. When a remote agent sends a message, the gateway holds onto it until your local agent is ready to respond. Think of it like a mailbox.
- Runner — the process that does the actual work. It checks the gateway for new messages, hands them to Claude Code, and sends the response back. By default,
npx hollerstarts both together.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Remote Agent │ A2A │ Holler │ polls │ Claude Code │
│ (any A2A │────────▶│ Gateway │◀────────│ Runner │
│ client) │◀────────│ (HTTPS :3462) │────────▶│ │
└─────────────────┘ └────────┬────────┘ └─────────────────┘
│
┌──────┴──────┐
│ Dashboard │
│ (HTTP :3461)│
└─────────────┘Dashboard
A real-time monitoring dashboard shows all messages flowing through the gateway, grouped by conversation. Available at http://localhost:3461/dashboard.

Commands
holler # Start gateway + Claude Code runner
holler --no-runner # Start gateway only
holler --port 8080 # Use a custom port
holler stop # Stop running Holler processes
holler reset # Stop, clear all state, restart fresh
holler runner # Start a runner only (connects to existing gateway)Security
TLS — All traffic is encrypted with a self-signed certificate, generated on first startup and stored at ~/.holler/tls/. The certificate's SHA-256 fingerprint is included in the AgentCard so clients can verify they're talking to the right server (trust-on-first-use, similar to SSH).
Authentication — A2A endpoints require a Bearer token. Clients get tokens automatically by calling the /register endpoint. Runner auth uses a shared secret from ~/.holler/credentials.json.
Registration — Clients discover the registration endpoint from the AgentCard and register automatically. Disable with HOLLER_REGISTRATION=false.
Configuration
| Variable | Default | Description |
|----------|---------|-------------|
| HOLLER_PORT | 3462 | Gateway HTTPS port |
| HOLLER_DASHBOARD_PORT | 3461 | Dashboard HTTP port |
| HOLLER_AGENT_NAME | Holler | Agent name in the A2A AgentCard |
| HOLLER_RUNNER_SECRET | auto-generated | Shared secret for runner auth |
| HOLLER_REGISTRATION | true | Enable/disable client registration |
| HOLLER_TASK_TIMEOUT | 300000 | Task timeout in ms (0 to disable) |
| GATEWAY_URL | https://localhost:3462 | URL the runner uses to reach the gateway |
| MAX_CONCURRENT | 5 | Max concurrent runner conversations |
Custom Runners
The runner protocol is a simple HTTP API — any process that can make HTTP requests can be a runner. See runners/protocol.md for the specification.
Known Limitations
- All state is in-memory and lost on restart
- Assumes a single runner process
- Self-signed TLS only — no Let's Encrypt or custom certs yet
Roadmap
- Nanoclaw and Openclaw runner support
- Capture and analyze conversation logs, set alerts
- Hosted version
- ERC-8004 implementation for reputation and secure payments
- Guardrails against prompt injection, collusion, and cascading failures
- Multi-agent conversation simulation
License
MIT
