Tel-Agent / Deep dive
01 / 18
Open-source / self-hosted / alpha

Give your phone line a brain.

Tel-Agent sits between a SIP phone line and an AI agent, so you can decide who gets through, which model answers, and where every conversation lives.

Real-time voiceBring your own keysAGPL-3.0
Start here

Think of it as a self-hosted receptionist — with an escape hatch.

It answers calls and messages in real time, but keeps the important decisions in your hands: routing, models, recordings, tools and credentials.

01 / ownership

Your line. Your keys. Your archive.

Run it on your own machine or LAN. Recordings and transcripts stay in the installation you control.

02 / flexibility

Swap providers behind interfaces.

STT, LLM and TTS are separate provider contracts, so the dashboard isn’t welded to one model vendor.

03 / reach

One agent, many channels.

Phone, web chat, SMS, email and social channels can reach the same conversation and memory layer.

The thesis
Closed products sell “AI receptionist”. Tel-Agent makes the control plane yours.
01Choose which callers reach an AI at all.
02Choose the model and voice stack that fits the job.
03Search the conversation archive instead of losing context.
Useful mental model

Tel-Agent owns the conversation surface. Integrations stay outside.

Rather than becoming a CRM or a workflow platform, it exposes webhooks and an HTTP tool so the agent can act on other systems.

Section 01

Read the system.

What the repository is actually building, where its boundaries sit, and why the hard part is not “just connect a phone”.

Architecture

A thin gateway, a serious conversation loop.

ChannelsPhone / web chat / SMS / email / WhatsApp / social
Inbound contextCaller ID, contact history, routing rules
Tel-Agent coreFastAPI + session lifecycle + rules + conversation archive
Voice pipelineLiveKit Agents · STT → LLM → TTS · barge-in
Agent surfaceNext.js dashboard + live transcript + operator intervention
Tools & integrationsTransfer, message, calendar, HTTP, knowledge search
Storage & opsSQLite/Postgres · Redis · Caddy · Docker Compose

The design decision that keeps scope finite: a channel is where the person talks; an integration is what the agent acts on.

Scope boundary

Its restraint is part of the product.

Tel-Agent owns

  • Telephony and SIP
  • Voice pipeline and turn-taking
  • Routing rules and failover
  • Conversation memory and transcripts
  • Tool execution and channel extensions

Tel-Agent does not own

  • General workflow automation
  • 400 SaaS integrations
  • A CRM or PBX replacement
  • Analog hardware support
  • Direct booking into a live calendar in v1

That “no” list is useful product strategy: reach everything else with webhooks or the generic HTTP tool.

Deep dive / real time

The call is a streaming system, not a chatbot with a microphone.

01SIP ingressProvider or PBX hands over the call.
→
02RoutePass, block, or hand to the agent.
→
03STTPartial and final transcript events.
→
04LLM + toolsStream tokens and actions.
→
05TTSStart speaking before the answer is finished.
Barge-in is non-negotiable.

When the caller interrupts, queued audio must be cancelled immediately. Otherwise the agent talks over the person and the whole product feels broken.

Measure the first audio out.

The repository’s target is under 800 ms from the end of caller speech to the first audio response.

Deep dive / abstraction

Provider interfaces make the model a replaceable part.

# One contract, many implementations
STTProvider → stream(audio) → partial / final transcripts
LLMProvider → stream(messages, tools) → tokens + tool calls
TTSProvider → stream(text) → audio chunks
TTSProvider → cancel() → stop instantly on barge-in
STT / speech recognitionDeepgram · v1

Partial results matter because endpointing and turn-taking determine how “alive” the call feels.

TTS / speech synthesisElevenLabs · v1

The first chunk should speak while later text is still being generated.

The repo names Ollama, Whisper and Piper as a later local-model path, with a GPU caveat for natural conversation.

Deep dive / action layer

Five precise tools beat twenty confusing ones.

transfer_call

Hand a conversation to a human.

take_message

Capture a structured message.

end_call

Close politely and cleanly.

send_notification

Notify Telegram or email.

http_request

Escape hatch for systems outside the core.

search_knowledge

Ground the agent in uploaded content.

check_calendar

Read availability with a safety boundary.

MCP endpoint

Expose a controlled tool surface to compatible clients.

Calendar rule: propose and confirm, or write to a review calendar. A wrong booking destroys trust faster than a missed call.

Project status / September 2026 snapshot

The phone is the hard case — and it comes after the foundations.

Milestone 0 · doneWeb chat proves the conversation loop.

Streaming, interruption, storage and a transcript are the product proof in a cheap environment.

Milestone 3 · current focusMessaging channels widen reach.

Web chat, WhatsApp, Telegram, Messenger, Instagram, Discord, Slack, email and SMS are wired in the current roadmap snapshot.

Milestone 11 · phoneLiveKit Cloud SIP carries the first call path.

Phone transport is proven ahead of its milestone; the repository still treats SIP, latency and barge-in as the hard case.

Why this order works

“Every interface built before phone must still be shaped for streaming.”

Text-channel comfort is not evidence that a call will feel natural. The latency budget is written down early, even when it is measured later.

Trust surface

Self-hosting only matters if the defaults are safe.

◆
Local by default

Ports bind to loopback. Reach the installation through a private network, VPN or TLS reverse proxy.

◆
Secrets stay masked

API keys are encrypted at rest and never returned in full after saving.

◆
No silent recording

Recording announcements are on by default; human takeover does not make the legal obligation disappear.

◆
Health is a requirement

Monitor SIP registration, provider reachability, database state and per-call telemetry.

Operational question

Would you know a dead phone service before the next caller does?

The repo’s answer is an explicit health endpoint, immediate alerting and an unmistakable dashboard status.

/health → SIP · providers · DB
/api/settings → recording · retention · export
Section 02

Make it real.

A deterministic path from clone to first answered conversation, followed by the SIP step that turns a demo into a phone service.

How-to / 01

Start with the local stack.

The fastest proof is a running dashboard and a streamed conversation. Don’t begin by designing the whole phone system.

# 1. Clone and enter
git clone https://github.com/Dpro-at/Tel-Agent.git
cd Tel-Agent

# 2. Create secrets
cp .env.example .env
openssl rand -hex 32 # set as ENCRYPTION_KEY

# 3. Run the release-grade local stack
docker compose up -d --build
Dashboard

Open localhost:38471. First visit creates the administrator; there are no default credentials.

API docs

Inspect the generated API at localhost:38472/docs.

Data

Conversations live in the tel-agent-data volume by default.

How-to / 02

Then prove telephony before writing agent code.

01Bring a number

Buy or use a number from Twilio, Telnyx or an equivalent SIP provider.

02Point it at LiveKit

Create an inbound SIP trunk and dispatch rule. Keep the E.164 number and credentials handy.

03Verify in the console

Call from a mobile. Confirm the provider sees the call reach the trunk before debugging your own code.

04Record caller ID

Test forwarding too. Make sure routing rules see the number you think they will see.

Machine checklist

Python 3.11+ · ffmpeg · outbound internet · Deepgram key · cloud LLM key · ElevenLabs key · G.711 codec on the trunk

How-to / 03

Build in proof gates, not feature piles.

01The number reaches us

Provider console shows the inbound call at the trunk.

02Answer the call

It stops ringing. Silence is acceptable at this stage.

03Speak fixed text

A hardcoded greeting proves the audio path.

04Hear the caller

The caller’s words appear as text in the terminal.

The product moment

You speak → the LLM replies → you hear it.

Only after this full loop works should you add routing, dashboards, second providers or MCP.

Measure from call one

End of speech → first audio out.

Track STT final, LLM first token, TTS first chunk, interruption count and language accuracy.

Where it earns its keep

Best when the call is valuable, repetitive, and yours to control.

Small clinic / workshop

Triage routine calls, route the exceptions.

Answer opening hours, collect the reason for calling, search a knowledge base, then hand off when a person should take over.

Human escalation
Solo operator

Own the inbox without being always on.

Take messages, check availability, notify Telegram or email, and keep the transcript searchable across channels.

Self-hosted privacy
Agent platform builder

Use the phone as one more channel.

Reuse the same agent, tools and memory for web chat, SMS, email, social messaging and phone.

Channel contract
Decision guide

Powerful for the right operator. Not magic, not turnkey.

Good fit if you need

  • Control over recordings, models and credentials
  • Routing rules before an AI sees a caller
  • One agent surface across phone and messaging
  • Open-source extensibility and self-hosting

Think twice if you need

  • A fully managed receptionist with zero setup
  • Built-in CRM or broad workflow automation
  • Analog phone support without an ATA
  • Production-grade maturity today: the repo labels itself alpha

My read: Tel-Agent is most interesting as an agent-controlled communications layer, not as a replacement for every business system around it.

Sources / current repository snapshot

Go to the source.

The deck reflects the public README and repository documents available on 20 September 2026. Status and milestones can change.

Built as a self-contained interactive HTML deck. Use the index or arrow keys to move through it.
← → navigate · O overview · F fullscreen