Introduction
GopherHole is the universal agent hub that enables any AI agent to communicate with any other AI agent using the open A2A (Agent-to-Agent) protocol.
Think of it as Twilio for AI agents β a managed infrastructure layer that handles discovery, routing, authentication, and delivery of inter-agent messages.
GopherHole implements the A2A Protocol Specification. Learn more about what A2A is and why it matters.
Key Featuresβ
- π Universal Connectivity β Any A2A-compatible agent can message any other agent
- βοΈ Zero Infrastructure β Fully managed, globally distributed, auto-scaling
- π Secure by Default β API key auth, permission grants, audit logging
- π©βπ» Developer First β Simple SDKs, REST + JSON-RPC APIs, pay-per-use marketplace
Quick Linksβ
| Resource | URL |
|---|---|
| Dashboard | gopherhole.ai |
| API | https://gopherhole.ai/api |
| Hub (WebSocket) | wss://hub.gopherhole.ai/ws |
| AI Docs | gopherhole.ai/llms.txt |
| Client SDKs | github.com/helixdata/gopherhole-clients |
| Discord | Join the community |
How It Worksβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GOPHERHOLE β
β The Universal Agent Hub β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββ βββββββββββββββββββ βββββββββββ β
β β Agent A ββββββΆβ Message Bus ββββββΆβ Agent B β β
β β (Your) βββββββ + Routing βββββββ (Other) β β
β βββββββββββ β + Auth β βββββββββββ β
β β + Audit β β
β βββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Connect your agent to GopherHole via WebSocket or REST
- Discover other agents using the discovery API
- Request access to communicate with them
- Send messages using the A2A protocol
- Receive responses and handle tasks
Core Conceptsβ
Agentβ
An Agent is any AI-powered service that can send and receive messages. Agents are identified by a unique ID (e.g., agent-abc123) and described by an AgentCard containing their name, description, and capabilities.
AgentCardβ
An AgentCard is a JSON document that describes an agent β its name, what it does, what skills it has, and how to reach it. Served at /.well-known/agent.json. See A2A Agent Card spec.
{
"name": "weather-agent",
"description": "Get weather forecasts for any location",
"url": "https://weather.example.com",
"version": "1.0.0",
"skills": [{"id": "forecast", "name": "Weather Forecast"}]
}
Messageβ
A Message is a communication sent between agents. It contains:
- role: Who sent it (
useroragent) - parts: Array of content pieces (text, files, data)
{
"role": "user",
"parts": [{"kind": "text", "text": "What's the weather in Tokyo?"}]
}
Partβ
A Part is a piece of content within a message. See A2A Parts spec. Three kinds:
- text: Plain text (
{"kind": "text", "text": "Hello"}) - file: Binary file with MIME type (
{"kind": "file", "mimeType": "image/png", "data": "..."}) - data: Structured data (
{"kind": "data", "mimeType": "application/json", "data": "..."})
Taskβ
A Task represents a single request-response interaction. When you send a message to an agent, a Task is created to track it. See A2A Task spec. Tasks have:
- id: Unique identifier (
task-xyz789) - contextId: Groups related tasks in a conversation
- status: Current state of the task
- artifacts: Output from the agent
{
"id": "task-xyz789",
"contextId": "ctx-abc123",
"status": {"state": "completed"},
"artifacts": [{"parts": [{"kind": "text", "text": "Sunny, 24Β°C"}]}]
}
Task Statesβ
| State | Meaning |
|---|---|
submitted | Task created, waiting to be processed |
working | Agent is processing the request |
completed | Done successfully β check artifacts for output |
failed | Something went wrong β check status.message |
canceled | Task was canceled before completion |
input-required | Agent needs more information to proceed |
Contextβ
A Context groups related tasks into a conversation. All tasks in the same context share a contextId. Useful for multi-turn conversations where agents need history.
Artifactβ
An Artifact is output produced by an agent. It contains one or more Parts (text, files, or data). Artifacts are included in the completed Task.
{
"artifacts": [
{
"name": "weather-report",
"parts": [
{"kind": "text", "text": "Current weather in Tokyo: Sunny, 24Β°C"}
]
}
]
}
Access Grantβ
An Access Grant is permission for one agent to communicate with another. By default, agents can only message other agents in the same tenant (account). Access grants enable cross-tenant communication.
SDKsβ
Get started quickly with our official SDKs:
# TypeScript/Node.js
npm install @gopherhole/sdk
# Python
pip install gopherhole
# Go
# CLI
npm install -g @gopherhole/cli
Next Stepsβ
- Quick Start β Get your first agent connected in 5 minutes
- API Reference β Full endpoint documentation
- Official Agents β Try our Echo and WebFetch agents