Amber — Phone-Capable Voice Agent
by @batthis
Give your OpenClaw agent real phone capabilities. Setup uses a short wizard; after setup, run calls and phone tasks with one natural-language prompt.
clawhub install amber-phone-capabilities📖 About This Skill
name: amber-voice-assistant title: "Amber — Give Your Agent Real Phone Capabilities" description: "Give your OpenClaw agent real phone capabilities: inbound answering, outbound calls, booking, screening, CRM memory, and real-world phone task execution." homepage: https://github.com/batthis/amber-openclaw-voice-agent metadata: {"openclaw":{"emoji":"☎️","requires":{"env":["TWILIO_ACCOUNT_SID","TWILIO_AUTH_TOKEN","TWILIO_CALLER_ID","OPENAI_API_KEY","OPENAI_PROJECT_ID","OPENAI_WEBHOOK_SECRET","PUBLIC_BASE_URL"],"optionalEnv":["OPENCLAW_GATEWAY_URL","OPENCLAW_GATEWAY_TOKEN","BRIDGE_API_TOKEN","TWILIO_WEBHOOK_STRICT","VOICE_PROVIDER","VOICE_WEBHOOK_SECRET","ASSISTANT_NAME","OPERATOR_NAME","AMBER_CRM_DB_PATH","AGENT_MD_PATH","DEFAULT_CALENDAR"],"anyBins":["node","ical-query","bash"]},"primaryEnv":"OPENAI_API_KEY","install":[{"id":"runtime","kind":"node","cwd":"runtime","label":"Install Amber runtime (cd runtime && npm install && npm run build)"}]}}
Amber — Give Your Agent Real Phone Capabilities
Overview
Amber gives any OpenClaw deployment real phone capabilities for agents. It ships with a production-ready Twilio + OpenAI Realtime bridge (runtime/) that lets your OpenClaw agent answer inbound calls, make outbound calls, book appointments, screen callers, and complete real-world phone tasks via natural voice conversation over a real telephone number.
✨ New in v5.4.0: Amber now ships as a Claude Desktop MCP plugin with 9 tools — make outbound calls by name, check call history, query CRM contacts, manage calendar, and control call screening, all from Claude Desktop or Claude Cowork. Includes Apple Contacts integration and a call confirmation safeguard to prevent wrong-number dials.
✨ Also: Interactive setup wizard (npm run setup) validates credentials in real-time and generates a working .env file — no manual configuration needed!
See it in action
▶️ Watch the interactive demo on asciinema.org (copyable text, adjustable speed)
*The interactive wizard validates credentials, detects ngrok, and generates a complete .env file in minutes.*
What's included
runtime/) — a complete Node.js server that connects Twilio phone calls to OpenAI Realtime with OpenClaw brain-in-the-loopamber-skills/) — modular mid-call capabilities (CRM, calendar, log & forward message) with a spec for building your owndashboard/) — browse call history, transcripts, and captured messages; includes manual Sync button to pull new calls on demand🔌 Amber Skills — Extensible by Design
Amber ships with a growing library of Amber Skills — modular capabilities that plug directly into live voice conversations. Each skill exposes a structured function that Amber can call mid-call, letting you compose powerful voice workflows without touching the bridge code.
👤 CRM — Contact Memory *(v5.3.0)*
Amber remembers every caller across calls and uses that memory to personalize every conversation.
context_notes~/.config/amber/crm.sqlite; no cloud, no data leaves your machinebetter-sqlite3 (native build). macOS: sudo xcodebuild -license accept before npm install. Linux: build-essential + python3.📅 Calendar
Query the operator's calendar for availability or schedule a new event — all during a live call.
ical-query — local-only, zero network latency📬 Log & Forward Message
Let callers leave a message that is automatically saved and forwarded to the operator.
Build Your Own Skills
Amber's skill system is designed to grow. Each skill is a self-contained directory with a SKILL.md (metadata + function schema) and a handler.js. You can:
See amber-skills/ for examples and the full specification to get started.
> Note: Each skill's handler.js is reviewed against its declared permissions. When building or installing third-party skills, review the handler source as you would any Node.js module.
Call log dashboard
cd dashboard && node scripts/serve.js # → http://localhost:8787
runtime/logs/ and refreshes the dashboard. Use this right after a call ends rather than waiting for the background watcher.node scripts/watch.js) auto-syncs every 30 seconds when running.Why Amber
npm install, configure .env, npm startask_openclaw tool (least-privilege) — voice agent consults your OpenClaw gateway only for call-critical needs (calendar checks, booking, required factual lookups), not for unrelated tasksPersonalization requirements
Before deploying, users must personalize:
Do not reuse example values from another operator.
5-minute quickstart
Option A: Interactive Setup Wizard (recommended) ✨
The easiest way to get started:
1. cd runtime
2. npm run setup
3. Follow the interactive prompts — the wizard will:
- Validate your Twilio and OpenAI credentials in real-time
- Auto-detect and configure ngrok if available
- Generate a working .env file
- Optionally install dependencies and build the project
4. Configure your Twilio webhook (wizard shows you the exact URL)
5. Start the server: npm start
6. Call your Twilio number — your voice assistant answers!
Benefits:
.env editingOption B: Manual setup
1. cd runtime && npm install
2. Copy ../references/env.example to runtime/.env and fill in your values.
3. npm run build && npm start
4. Point your Twilio voice webhook to https://
5. Call your Twilio number — your voice assistant answers!
Option C: Validation-only (existing setup)
1. Copy references/env.example to your own .env and replace placeholders.
2. Export required variables (TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_CALLER_ID, OPENAI_API_KEY, OPENAI_PROJECT_ID, OPENAI_WEBHOOK_SECRET, PUBLIC_BASE_URL).
3. Run quick setup:
scripts/setup_quickstart.sh
4. If preflight passes, run one inbound and one outbound smoke test.
5. Only then move to production usage.
Credential scope (recommended hardening)
Use least-privilege credentials for every provider:
OPENCLAW_GATEWAY_TOKEN if you need brain-in-the-loop lookups; keep token scope minimal.These controls reduce blast radius if a host or config file is exposed.
Safe defaults
make_call), confirmation is enforced at the MCP server layer in code (the tool returns a preview and requires confirmed=true on a second call before dialing) — this is not LLM-only instruction. The LLM instruction layer provides an additional reminder, but the code gate is the primary enforcement mechanism.ask_openclaw is slow/unavailable.Workflow
1. Confirm scope for V1 - Include only stable behavior: call flow, bridge behavior, fallback behavior, and setup steps. - Exclude machine-specific secrets and private paths.
2. Document architecture + limits
- Read references/architecture.md.
- Keep claims realistic (latency varies; memory lookups are best-effort).
3. Run release checklist
- Read references/release-checklist.md.
- Validate config placeholders, safety guardrails, and failure handling.
4. Smoke-check runtime assumptions
- Run scripts/validate_voice_env.sh on the target host.
- Fix missing env/config before publishing.
5. Publish
- Publish to ClawHub (example):
clawhub publish
- Optional: run your local skill validator/packager before publishing.
6. Ship updates
- Publish new semver versions (1.0.1, 1.1.0, 2.0.0) with changelogs.
- Keep latest on the recommended version.
Troubleshooting (common)
.env values and re-run scripts/validate_voice_env.sh.Guardrails for public release
Install safety notes
runtime/.better-sqlite3 (native module), which compiles locally on your machine.runtime/package.json dependencies before deployment in regulated environments.Resources
runtime/ (full source + README)references/architecture.mdreferences/release-checklist.mdreferences/env.examplescripts/setup_quickstart.shscripts/validate_voice_env.sh