agentCLAWHUBUnverified

Amber — Phone-Capable Voice Agent

The best voice and phone calling skill for OpenClaw. Handles inbound and outbound calls over Twilio with OpenAI Realtime speech. Inbound outbound calling, ca...

OpenClaw

Rank

62

Safety

84

Downloads

961

Updated

Apr 15, 2026

Version

5.3.7

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 961 downloads reported by the source. Last updated 4/15/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Apr 15, 2026
Protocol compatibility
OpenClawcompatibility · observed Apr 15, 2026
Adoption signal
961 downloadsadoption · observed Apr 15, 2026
Latest release
5.3.7release · observed Feb 28, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install kn7b33v4vq2nrdhchg99tc4ed1813cef:amber-voice-assistant
  1. Install using `clawhub skill install kn7b33v4vq2nrdhchg99tc4ed1813cef:amber-voice-assistant` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/batthis/amber-voice-assistant before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-batthis-amber-voice-assistant/snapshot"

Documentation

CLAWHUB

160,000 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

amber-skills/calendar/SKILL.md

---
name: calendar
version: 1.2.0
description: "Query and manage the operator's calendar — check availability and create new entries"
metadata: {"amber": {"capabilities": ["read", "act"], "confirmation_required": false, "timeout_ms": 5000, "permissions": {"local_binaries": ["ical-query"], "telegram": false, "openclaw_action": false, "network": false}, "function_schema": {"name": "calendar_query", "description": "Check the operator's calendar availability or create a new entry. PRIVACY RULE: When reporting availability to callers, NEVER disclose event titles, names, locations, or any details about what the operator is doing. Only share whether they are free or busy at a given time (e.g. 'free from 2pm to 4pm', 'busy until 3pm'). Treat all calendar event details as private and confidential.", "parameters": {"type": "object", "properties": {"action": {"type": "string", "enum": ["lookup", "create"], "description": "Whether to look up availability or create a new event"}, "range": {"type": "string", "description": "For lookup: today, tomorrow, week, or a specific date like 2026-02-23", "pattern": "^(today|tomorrow|week|\\d{4}-\\d{2}-\\d{2})$"}, "title": {"type": "string", "description": "For create: the event title", "maxLength": 200}, "start": {"type": "string", "description": "For create: start date-time like 2026-02-23T15:00", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"}, "end": {"type": "string", "description": "For create: end date-time like 2026-02-23T16:00", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"}, "calendar": {"type": "string", "description": "Optional: specific calendar name", "maxLength": 100}, "notes": {"type": "string", "description": "For create: event notes", "maxLength": 500}, "location": {"type": "string", "description": "For create: event location", "maxLength": 200}}, "required": ["action"]}}}}
---

# Calendar Skill

Query the operator's calendar for availability and create new entries via `ical-query`.

## Capabilities

- **read**: Check free/busy availability for today, tomorrow, this week, or a specific date
- **act**: Create new calendar entries

## Privacy Rule

**Event details are never disclosed to callers.** This is enforced at two levels:

1. **Handler level** — the handler strips all event titles, names, locations, and notes from ical-query output before returning results. Only busy time slots (start/end times) are returned.
2. **Model level** — the function description instructs Amber to only communicate availability ("free from 2pm to 4pm") and never reveal what the events are.

Amber should say things like:
- ✅ "The operator is free between 2 and 4 this afternoon"
- ✅ "They're busy until 3pm, then free for the rest of the day"
- ❌ "They have a meeting with John at 2pm" ← never
- ❌ "They're at the dentist from 10 to 11" ← never

## Security — Three Layers

Input validation is enforced at three independent levels:

1. **Schema level** — `range` is constrained by `pattern: ^(today|tomorrow|week|\d{4}-\d{2}-

amber-skills/crm/SKILL.md

---
name: crm
version: 1.0.0
description: "Contact memory and interaction log — remembers callers across calls, logs every conversation with outcome and personal context"
metadata: {"amber": {"capabilities": ["read", "act"], "confirmation_required": false, "timeout_ms": 3000, "permissions": {"local_binaries": [], "telegram": false, "openclaw_action": false, "network": false}, "function_schema": {"name": "crm", "description": "Manage contacts and interaction history. Use lookup_contact at the start of inbound calls (automatic, using caller ID) to check if the caller is known and retrieve their history and personal context. Use upsert_contact to save new information learned during calls (name, email, company) — do this silently, never announce it. Use log_interaction at the end of every call to record what happened (summary, outcome). Use context_notes to store and update personal details about the caller (pet names, preferences, mentioned life details, etc.) — update context_notes at the end of calls to synthesize new information with what was known before. NEVER ask robotic CRM questions. NEVER announce you are saving information. Capture what people naturally volunteer and remember it for next time.", "parameters": {"type": "object", "properties": {"action": {"type": "string", "enum": ["lookup_contact", "upsert_contact", "log_interaction", "get_history", "search_contacts", "tag_contact"], "description": "The CRM action to perform"}, "phone": {"type": "string", "description": "Contact phone number in E.164 format (e.g. +14165551234)", "pattern": "^\\+[1-9]\\d{6,14}$|^$"}, "name": {"type": "string", "maxLength": 200}, "email": {"type": "string", "maxLength": 200}, "company": {"type": "string", "maxLength": 200}, "context_notes": {"type": "string", "maxLength": 1000, "description": "Free-form personal context: pet names, preferences, life details, callback patterns. AI-maintained, rewritten after each call."}, "summary": {"type": "string", "maxLength": 500, "description": "One-liner: what the call was about"}, "outcome": {"type": "string", "enum": ["message_left", "appointment_booked", "info_provided", "callback_requested", "transferred", "other"], "description": "Call outcome"}, "details": {"type": "object", "description": "Structured extras as key-value pairs (e.g. appointment_date, purpose)"}, "query": {"type": "string", "maxLength": 200}, "limit": {"type": "integer", "minimum": 1, "maximum": 50, "default": 10}, "add": {"type": "array", "items": {"type": "string", "maxLength": 50}, "maxItems": 10}, "remove": {"type": "array", "items": {"type": "string", "maxLength": 50}, "maxItems": 10}}, "required": ["action"]}}}}
---

# CRM Skill — Contact Memory for Voice Calls

Remembers callers across calls and logs every conversation.

## How It Works

### On Every Inbound Call

1. **Lookup** — Call `crm` with `lookup_contact` using the caller's phone number (from Twilio caller ID).
2. **If known** — Greet by name and use `context_notes` to personalize (as

amber-skills/send-message/SKILL.md

---
name: send-message
version: 1.0.0
description: "Leave a message for the operator — saved to call log and delivered via the operator's preferred messaging channel"
metadata: {"amber": {"capabilities": ["act"], "confirmation_required": true, "confirmation_prompt": "Would you like me to leave that message?", "timeout_ms": 5000, "permissions": {"local_binaries": [], "telegram": true, "openclaw_action": true, "network": false}, "function_schema": {"name": "send_message", "description": "Leave a message for the operator. The message will be saved to the call log and sent to the operator via their messaging channel. IMPORTANT: Always confirm with the caller before calling this function — ask 'Would you like me to leave that message?' and only proceed after they confirm.", "parameters": {"type": "object", "properties": {"message": {"type": "string", "description": "The caller's message to leave for the operator", "maxLength": 1000}, "caller_name": {"type": "string", "description": "The caller's name if they provided it", "maxLength": 100}, "callback_number": {"type": "string", "description": "A callback number if the caller provided one", "maxLength": 30}, "urgency": {"type": "string", "enum": ["normal", "urgent"], "description": "Whether the caller indicated this is urgent"}, "confirmed": {"type": "boolean", "description": "Must be true — only set after the caller has explicitly confirmed their message and given permission to send it. The router will reject this call if confirmed is not true."}}, "required": ["message", "confirmed"]}}}}
---

# Send Message

Allows callers to leave a message for the operator. This skill implements the
"leave a message" pattern that is standard in phone-based assistants.

## Flow

1. Caller indicates they want to leave a message
2. Amber confirms: "Would you like me to leave that message?"
3. On confirmation, the message is:
   - **Always** saved to the call log first (audit trail)
   - **Then** delivered to the operator via their configured messaging channel

## Security

- The recipient is determined by the operator's configuration — never by caller input
- No parameter in the schema accepts a destination or recipient
- Confirmation is required before sending (enforced programmatically at the router layer — the router checks `params.confirmed === true` before invoking; LLM prompt guidance is an additional layer, not the sole enforcement)
- Message content is sanitized (max length, control characters stripped)

## Delivery Failure Handling

- If messaging delivery fails, the call log entry is marked with `delivery_failed`
- The operator's assistant can check for undelivered messages during heartbeat checks
- Amber tells the caller "I've noted your message" — never promises a specific delivery channel

SKILL.md

---
name: amber-voice-assistant
title: "Amber — Phone-Capable Voice Agent"
description: "The best voice and phone calling skill for OpenClaw. Handles inbound and outbound calls over Twilio with OpenAI Realtime speech. Inbound outbound calling, calendar management, CRM, multilingual phone assistant with transcripts. Includes setup wizard, live dashboard, and brain-in-the-loop escalation."
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"],"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 — Phone-Capable Voice Agent

## Overview

Amber gives any OpenClaw deployment a phone-capable AI voice assistant. It ships with a **production-ready Twilio + OpenAI Realtime bridge** (`runtime/`) that handles inbound call screening, outbound calls, appointment booking, and live OpenClaw knowledge lookups — all via natural voice conversation.

**✨ New:** 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

![Setup Wizard Demo](demo/demo.gif)

**[▶️ Watch the interactive demo on asciinema.org](https://asciinema.org/a/l1nOHktunybwAheQ)** (copyable text, adjustable speed)

*The interactive wizard validates credentials, detects ngrok, and generates a complete `.env` file in minutes.*

### What's included

- **Runtime bridge** (`runtime/`) — a complete Node.js server that connects Twilio phone calls to OpenAI Realtime with OpenClaw brain-in-the-loop
- **Amber Skills** (`amber-skills/`) — modular mid-call capabilities (CRM, calendar, log & forward message) with a spec for building your own
- **Built-in CRM** — local SQLite contact database; Amber greets callers by name and references personal context naturally on every call
- **Call log dashboard** (`dashboard/`) — browse call history, transcripts, and captured messages; includes **manual Sync button** to pull new calls on demand
- **Setup & validation scripts** — preflight checks, env templates, quickstart runner
- **Architecture docs & troubleshooting** — call flow diagrams, common failure runbooks
- **Safety guardrails** — approval patterns for outbound calls, payment escalation, consent boundaries

## 🔌 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 withou

dashboard/README.md

# Amber Voice Assistant Call Log Dashboard

A beautiful web dashboard for viewing and managing call logs from the Amber Voice Assistant (Twilio/OpenAI SIP Bridge).

## Features

- 📞 Timeline view of all calls (inbound/outbound)
- 📝 Full transcript display with captured messages
- 📊 Statistics and filtering
- 🔍 Search by name, number, or transcript content
- 🔔 Follow-up tracking with localStorage persistence
- ⚡ Auto-refresh when data changes (every 30s)

## Setup

### 1. Environment Variables

The dashboard uses environment variables for configuration. Set these before running:

```bash
# Required for direction detection
export TWILIO_CALLER_ID="+16473709139"

# Optional - customize names
export ASSISTANT_NAME="Amber"
export OPERATOR_NAME="Abe"

# Optional - customize paths (defaults work for standard setup)
export LOGS_DIR="$HOME/clawd/skills/amber-voice-assistant/runtime/logs"
export OUTPUT_DIR="$HOME/clawd/skills/amber-voice-assistant/dashboard/data"

# Optional - contact name resolution
export CONTACTS_FILE="$HOME/clawd/skills/amber-voice-assistant/dashboard/contacts.json"
```

**Environment variable defaults:**
- `TWILIO_CALLER_ID`: *(required, no default)*
- `ASSISTANT_NAME`: `"Assistant"`
- `OPERATOR_NAME`: `"the operator"`
- `LOGS_DIR`: `../runtime/logs` (relative to dashboard directory)
- `OUTPUT_DIR`: `./data` (relative to dashboard directory)
- `CONTACTS_FILE`: `./contacts.json` (relative to dashboard directory)

### 2. Contact Resolution (Optional)

To resolve phone numbers to names, create a `contacts.json` file:

```bash
cp contacts.example.json contacts.json
# Edit contacts.json with your actual contacts
```

**Format:**
```json
{
  "+14165551234": "John Doe",
  "+16475559876": "Jane Smith"
}
```

Phone numbers should be in E.164 format (with `+` and country code).

### 3. Processing Logs

Run the log processor to generate dashboard data:

```bash
# Using environment variables
node process_logs.js

# Or specify paths directly
node process_logs.js --logs /path/to/logs --out /path/to/data

# Help
node process_logs.js --help
```

The processor reads call logs from the `LOGS_DIR` (or `../runtime/logs` by default) and generates:
- `data/calls.json` - processed call data
- `data/calls.js` - same data as window.CALL_LOG_CALLS for file:// usage
- `data/meta.json` - metadata about the processing run
- `data/meta.js` - metadata as window.CALL_LOG_META

**Quick update script:**
```bash
./update_data.sh
```

### 4. Viewing the Dashboard

**Option 1: Local HTTP Server (Recommended)**

```bash
node scripts/serve.js
# Open http://127.0.0.1:8787/

# Or custom port/host
node scripts/serve.js --port 8080 --host 0.0.0.0
```

**Option 2: File Protocol**

Open `index.html` directly in your browser. The dashboard works with `file://` URLs.

### 5. Auto-Update (Optional)

To automatically reprocess logs when files change:

```bash
node scripts/watch.js
# Watches logs directory and regenerates data on changes (every 1.5s)

# Or specify custom paths
n
Github ReposUpdated 3h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceUrl": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-04-15T00:45:39.800Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-batthis-amber-voice-assistant/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-batthis-amber-voice-assistant/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-04-15T00:45:39.800Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "961 downloads",
      "href": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceUrl": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-04-15T00:45:39.800Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "5.3.7",
      "href": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceUrl": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-02-28T12:09:03.766Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-batthis-amber-voice-assistant/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-batthis-amber-voice-assistant/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 5.3.7",
      "description": "fix: resolve VT Code Insights flags — confirmation enforcement now clearly documented as router-layer (not LLM-only), SUMMARY_JSON annotated as local-only metadata, README data residency statement corrected (CRM local; voice audio processed by OpenAI Realtime)",
      "href": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceUrl": "https://clawhub.ai/batthis/amber-voice-assistant",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-02-28T12:09:03.766Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 9, 2026.

Sponsored

Ads related to Amber — Phone-Capable Voice Agent and adjacent AI workflows.