kelam.sh

Voice AI agents from the terminal.

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
Installs the 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.
See the CLI Use it from your coding agent
Live demo

Talk to a Kelam agent right now

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.

Call +1 (620) 387-8062
Browser calls are the same kelam web path every agent gets — recorded, transcribed, and metered like any call. The demo is rate-limited.
Use cases

What people build with it

Anything that is "a phone line plus judgment" — inbound or outbound, voice and SMS on the same number, in English, Spanish, and French.

🛎️Front desk & reception

Answer the main line, explain what the business does, take messages, text back details — the Nousdata line above is exactly this, in production.

📅Reminders & confirmations

Call customers ahead of appointments, reschedule on the spot with a booking tool, follow up by SMS from the same number.

🎯Lead qualification

Dial a list, ask the qualifying questions, extract budget/timeline/contact into the transcript — kelam call -p steers each call, export collects the answers.

📋Surveys & follow-ups

Post-service check-ins and structured questionnaires; every call lands as a transcript plus derived metrics, ready for analysis.

🌙After-hours coverage

An agent that answers when nobody else can, hands off to a human number mid-call when it matters (transfer), and texts a summary.

📈Call-ops & analytics

Live-monitor any call from a link, queue batches safely past the concurrency cap, and track spend per provider on the usage dashboard.

Capabilities

What it does

A small, scriptable surface over a real voice pipeline — Deepgram → Claude → ElevenLabs over Twilio.

📞Phone calls

Outbound and inbound over a real number, with live transcript and recording.

🌐Browser calls

Talk to an agent over WebRTC with no phone number at all.

🗣️Multilingual

New agents speak English, Spanish, and French and switch mid-call when the caller does — start any language with --lang.

🤝Agent-to-agent

One agent can call another in-app — no number, $0 telephony — or hand a live call to a colleague with -t.

🎧Follow every call

kelam monitor gives a listen-in link for humans; --watch streams call events as JSONL for coding agents.

🎚️Sounds real

Ambient background noise it can change mid-call, touch-tone (DTMF) for IVR menus, and it screens who answered before it speaks.

💬Texting

Send SMS/MMS from the agent's number; threads are stored and replyable.

🧩Agents as files

agent.yaml + scenarios + tools, pushed git-style — every push is a new version.

📊Call data

kelam export / stats give transcripts plus derived metrics, ready to chart.

One client

Thin CLI — no heavy deps. Talks to your Kelam server over HTTP.

Interface

The CLI

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 +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 export  --since 7d           # call logs + derived metrics (jsonl/json/csv)
kelam createCreate an agent and pull it into a local folder (provisions a number unless --no-number).
kelam push / deployPush a new version, then assemble + cache the runtime.
kelam callCall a number — or another agent (kelam call bot other-bot, no phone needed). -p steers this one call, -t overrides the transfer (a number, or an agent that takes over mid-call), --wait streams the transcript.
kelam webOpen a browser test page and talk over WebRTC — no phone number.
kelam monitorListen in on any live call from a link — audio plus streaming transcript, invisible to both sides.
kelam queueSee (or cancel) calls parked behind the server's concurrency cap — batches drain themselves safely.
kelam text / texts / peersSend SMS/MMS from the agent's number; browse threads and recently active numbers.
kelam calls / transcriptList recent calls; fetch one call — or a number's full voice+text history.
kelam export / statsExport call logs with metrics; aggregate counts, durations, turns, and per-provider cost.
kelam skillThe operating guide for AI coding agents — print it, or --install it into a project (see below).
Coding agents

Built for Claude, Codex, Cursor & friends

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.mdThe 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.mdcA Cursor project rule, agent-requested via its description.
.github/copilot-instructions.mdVS 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:

🎛️kelam-operate

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 →

🛠️kelam-setup

Installs and configures the CLI end-to-end (also /kelam:setup). view SKILL.md →

📈kelam-viz

Turns kelam export / stats output into self-contained HTML dashboards. view SKILL.md →

Good to know

One thing to know

The CLI is a thin client — it talks to a Kelam server (the control plane + voice worker) that you run. Bring your own deployment, or ask the maintainers for access. Set KELAM_API_URL (and KELAM_PASSWORD if it uses shared-password auth) and you're connected.