What CallAgent is
CallAgent runs voice conversations between your customers and a language model, over the telephone network or a web page, and keeps everything that happened: the audio, the transcript, the timing of every stage, the tools that were called and what each of them cost. It is three products that share one database — a voice AI platform, a SIP PBX and a contact centre — because an AI call that cannot be escalated to a person is a demo, not a phone system.
The two planes
Browser / phone / SIP trunk
│
▼
Voice Gateway (TypeScript) Control plane (Laravel + Filament)
· media transport · assistants, tools, knowledge, squads
· STT → LLM → TTS pipeline · numbers, trunks, queues, operators
· barge-in and endpointing · calls, artifacts, billing ledger
· tool and MCP execution · REST API, webhooks, dashboard
│ ▲
└────────── NATS JetStream ──────────────┘The control plane owns configuration and history: it is where an assistant is edited, published and versioned, and where a finished call is stored. The gateway owns the milliseconds: once a call is live, no request to the control plane sits in the audio path.
They meet at @callagent/contracts, a zod-first package both planes import, so a shape cannot drift between them. Several of its enumerations are mirrored in PHP with a test that reads the PHP source and fails on disagreement — call states, event types and the redaction key list are all held together this way.
The primitives
| Primitive | What it is | Page |
|---|---|---|
| Assistant | A prompt, a transcriber, a model, a voice, and the plans that govern when it speaks and what it records. Versioned; a call pins the version it started with. | Assistants |
| Tool | A function the model may call mid-conversation — an HTTP request, a transfer, a handoff, a DTMF burst, a knowledge query. 25 types, one definition shape; five of them never reach a call. | Tools |
| MCP server | An external tool server, attached whole, with per-tool risk tiers. | MCP |
| Knowledge base | Documents chunked, embedded into pgvector and retrieved at conversation time. | Knowledge bases |
| Squad | Several assistants sharing one call, with explicit handoffs. | Squads |
| Phone number / SIP trunk | Where calls arrive from and leave through. | Telephony · SIP |
| Call | One conversation, and everything it produced. | Calls & artifacts |
| Queue / operator | The human half: where a call goes when the assistant hands over. | Contact centre |
| Campaign | Outbound at volume, with pacing and compliance controls. | Campaigns |
Three ways to drive it
# 305 endpoints under /api/v1, generated docs at /reference/api/
curl -X POST "$CALLAGENT_API_URL/calls" \
-H "Authorization: Bearer $CALLAGENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"assistant_id": "01JQ…", "to": "+40712345678", "phone_number_id": "01JQ…"}'# Assistants, tools, squads and knowledge bases as YAML in git
callagent validate
callagent plan # a field-level diff against the live organization
callagent applyThe Filament console at /{organization}/… covers every resource the API does,
plus the pieces that only make sense visually: the provider workbench, the
live-calls view, the wallboard, the IVR node editor and the call timeline.
It is also the only place an API key can be created.Two vocabularies, and they are not interchangeable
The REST API is mostly snake_case (first_message_mode) — except the telephony endpoints, which are camelCase (destinationType). @callagent/contracts and the CLI are camelCase with hyphenated enum values (assistant-speaks-first), and the control plane converts between them.
Where a page shows a request body, it shows the spelling that endpoint actually accepts. Where it shows YAML, that is the CLI's vocabulary.
What to read next
- Building something? Quickstart, then Assistants.
- Deciding whether it fits? How a call works and Turn taking & barge-in are where the engineering actually is.
- Integrating? Authentication, then the API conventions.
- Coming from a PBX? Coming from a PBX.
- Wondering what is real? What is not built first, then Implementation status.