Kelam is a CLI for building voice AI agents that make and answer real phone calls — describe an agent in a few files, push it, and call a number. Or talk in the browser, no number needed.
curl -fsSL https://kelam.sh | sh
kelam command via Homebrew / uv / pipx (re-running is a no-op; upgrade with kelam update). Also: brew install samsadsam/kelam/kelam. Prefer to read first? view install.sh.The Nousdata front desk runs on Kelam in production. Call it like anyone would — or talk to the same agent here in your browser over WebRTC, no phone needed. It answers in English and switches to Spanish or French mid-call when you do.
kelam web path every agent
gets — recorded, transcribed, and metered like any call. The demo is rate-limited.Anything that is "a phone line plus judgment" — inbound or outbound, voice and SMS on the same number, in English, Spanish, and French.
Answer the main line, explain what the business does, take messages, text back details — the Nousdata line above is exactly this, in production.
Call customers ahead of appointments, reschedule on the spot with a booking tool, follow up by SMS from the same number.
Dial a list, ask the qualifying questions, and capture budget/timeline/contact as typed fields with kelam call -e; export collects the answers.
Post-service check-ins and structured questionnaires; every call lands as a transcript plus derived metrics, ready for analysis.
An agent that answers when nobody else can, hands off to a human number mid-call when it matters (transfer), and texts a summary.
Live-monitor any call from a link, queue batches safely past the concurrency cap, and track spend per provider on the usage dashboard.
A small, scriptable surface over a real voice pipeline — Deepgram → Claude → ElevenLabs over Twilio.
Outbound and inbound over a real number, with live transcript and recording.
Talk to an agent over WebRTC with no phone number at all.
New agents speak English, Spanish, and French and switch mid-call when the caller does — start any language with --lang.
One agent can call another in-app — no number, $0 telephony — or hand a live call to a colleague with -t.
kelam monitor gives a listen-in link for humans; --watch streams call events as JSONL for coding agents.
Ambient background noise it can change mid-call, touch-tone (DTMF) for IVR menus, and it screens who answered before it speaks.
Send SMS/MMS from the agent's number; threads are stored and replyable.
Attach typed fields to a call with --extract; agents log values live, and kelam extract backfills existing calls.
agent.yaml + scenarios + tools, pushed git-style — every push is a new version.
kelam export / stats give transcripts plus derived metrics, ready to chart.
Thin CLI — no heavy deps. Talks to your Kelam server over HTTP.
After installing, connect to your server and go.
kelam login https://your-kelam-host # saves URL + password (once per machine) kelam create my-bot # scaffold an agent (+ provision a number) kelam deploy my-bot # assemble + cache the runtime, ready for calls kelam call my-bot +12065550123 --wait # real outbound call, transcript streamed live kelam call my-bot +12065550123 -e "price:number:quoted price in USD" # typed extraction kelam call my-bot +33612345678 --lang fr # start in another of the agent's languages kelam web my-bot # …or talk in the browser, no phone number kelam monitor # live calls, each with a listen-in link kelam extract my-bot -e "price:number:quoted price in USD" --since 7d # backfill existing calls kelam export --since 7d # call logs + derived metrics (jsonl/json/csv)
| kelam create | Create an agent and pull it into a local folder (provisions a number unless --no-number). |
| kelam push / deploy | Push a new version, then assemble + cache the runtime. |
| kelam call | Call a number — or another agent (kelam call bot other-bot, no phone needed). -p steers this one call, -e/--extract captures typed fields, -t overrides the transfer, and --wait streams the transcript. |
| kelam web | Open a browser test page and talk over WebRTC — no phone number. |
| kelam monitor | Listen in on any live call from a link — audio plus streaming transcript, invisible to both sides. |
| kelam queue | See (or cancel) calls parked behind the server's concurrency cap — batches drain themselves safely. |
| kelam text / texts / peers | Send SMS/MMS from the agent's number; browse threads and recently active numbers. |
| kelam calls / transcript | List recent calls; fetch one call — or a number's full voice+text history. |
| kelam extract | Run the same structured extraction over existing calls and persist values back onto each CallLog. |
| kelam export / stats | Export call logs with metrics; aggregate counts, durations, turns, and per-provider cost. |
| kelam skill | The operating guide for AI coding agents — print it, or --install it into a project (see below). |
Kelam is AI-agent-first: every command speaks JSON, live calls stream as JSONL watch files an agent can tail, and the CLI ships its own operating guide. One command teaches whatever coding agent you use to drive it:
kelam skill --install # run in your project; re-run after `kelam update`
That writes the guide everywhere your tools look for instructions — your own content in shared files is never touched:
| AGENTS.md | The cross-tool standard — read by Codex, Cursor, OpenCode, and GitHub Copilot. Kelam owns one marker-fenced block, nothing else. |
| .claude/skills/kelam/ | A Claude Code project skill that auto-triggers on kelam work. |
| .cursor/rules/kelam.mdc | A Cursor project rule, agent-requested via its description. |
| .github/copilot-instructions.md | VS Code Copilot chat instructions (marker-fenced block). |
On Claude Code you can go one step further — the Nousdata marketplace ships a kelam plugin that installs and drives the CLI for you:
/plugin marketplace add samsadsam/nousdata /plugin install kelam@nousdata
Then just tell Claude: please setup kelam.sh for me. The plugin bundles three skills:
Drives agents end to end — place and follow calls, batch-dial, extract results, text back (built on the same kelam skill guide). view SKILL.md →
Installs and configures the CLI end-to-end (also /kelam:setup). view SKILL.md →
Turns kelam export / stats output into self-contained HTML dashboards. view SKILL.md →
KELAM_API_URL (and KELAM_PASSWORD if it uses shared-password auth) and you're connected.