Skip to content
Agentmart
Submit a tool

clara-phone

Use when setting up, deploying, or debugging Clara's Twilio-based channels: voice (phone), SMS, and WhatsApp.

Skill by DevChiniwala

IndexedMIT★ 1
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/devchiniwala-clara-phone

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Use when setting up, deploying, or debugging Clara's Twilio-based channels: voice (phone), SMS, and WhatsApp. All three share one Twilio number, one webhook server, and one set of credentials under channels.twilio. Covers config schema, cloudflared named-tunnel setup, Twilio Console webhook wiring, `clara phone` CLI, `place_call` / `send_message` MCP tools, the WhatsApp Sandbox 24h customer-service window, and the shared TwilioWebhookServer's dedup + rate-limit middleware. Trigger on mentions of "phone", "call", "voice", "sms", "whatsapp", "twilio", "realtime", "media stream", "cloudflared", or when deploying Clara to a new machine and a Twilio surface needs to come up.

Use cases: backend, agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/clara-phone

What's inside

Skill name
clara-phone
Description
Use when setting up, deploying, or debugging Clara's Twilio-based channels: voice (phone), SMS, and WhatsApp. All three share one Twilio number, one webhook server, and one set of credentials under channels.twilio. Covers config schema, cloudflared named-tunnel setup, Twilio Console webhook wiring, `clara phone` CLI, `place_call` / `send_message` MCP tools, the WhatsApp Sandbox 24h customer-service window, and the shared TwilioWebhookServer's dedup + rate-limit middleware. Trigger on mentions of "phone", "call", "voice", "sms", "whatsapp", "twilio", "realtime", "media stream", "cloudflared", or when deploying Clara to a new machine and a Twilio surface needs to come up.
License
MIT
Instructions
288 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network

Files (1)

  • SKILL.md

SKILL.md (first lines)

## Overview

Three Twilio-based channels share one phone number, one webhook server,
and one set of credentials:

- **Phone** (`src/channels/phone/`) — voice via Twilio Programmable
  Voice + OpenAI Realtime. Inbound (caller dials) and outbound
  (`place_call` MCP tool / `clara phone call` CLI).
- **SMS** (`src/channels/sms.ts`) — Twilio Messaging on the same number.
  Inbound webhook → chat engine → REST reply. The reachability
  fallback when data is unavailable but cellular works.
- **WhatsApp** (`src/channels/whatsapp.ts`) — Twilio WhatsApp Sandbox
  by default; production WABA when policy permits. Enforces Meta's
  24-hour customer-service window — outside it, free-form replies are
  dropped (Twilio rejects without an approved template).

All three register routes on the shared `TwilioWebhookServer`
(`src/channels/twilio/server.ts`), which centralizes:

- `X-Twilio-Signature` HMAC-SHA1 validation
- `MessageSid` / `CallSid` deduplication (Twilio retries on 5xx/timeouts)
- Per-remote-number rate limiting (30/min default; owner exempt)
- `/healthz` and `/twilio/health` endpoints

Transcripts persist to the `messages` table with `channel='phone'`,
`'sms'`, or `'whatsapp'` and `room=<channel>-<callSid|E164>`.

## Configuration

Twilio creds + identity are shared across all three channels under
`channels.twilio`. Each channel has its own enable flag and channel-specific
config under `channels.{phone,sms,whatsapp}`.

```yaml
# ~/.heyclara/config.yaml
channels:
  twilio:
    sid: AC... # Account SID (or API Key SID SK…; Twilio resolves both)
    secret: ... # Auth Token if sid is AC…, API Key Secret if SK…
    auth_token: ... # Required when sid is SK… (signs webhooks). Omit if secret is the Auth Token.
    owner_number: "+91..." # Highest-trust caller/messenger
    allowlist: ["+12025550100"] # Extra allowed senders/callers (E.164)
    public_base_url: https://clara.example.com # No trailing slash
    port: 7079 # Local port the shared webhook server binds to

  phone:
    enabled: true
    from_number: "+13025480697" # Twilio number for voice
    openai_api_key: sk-proj-... # For the Realtime voice loop
    realtime_model: gpt-realtime
    voice: marin # marin | cedar | shimmer | coral | alloy | ash | …

  sms:
    enabled: true
    from_number: "+13025480697" # Defaults to phone.from_number if omitted

  whatsapp:
    enabled: true
    from_number: "+14155238886" # Twilio Sandbox shared number; replace once WABA is approved
```

Env overrides (use these if you'd rather keep secrets in `.env`):

```
TWILIO_SID, TWILIO_SECRET, TWILIO_AUTH_TOKEN
PRIMARY_PHONE_USER (owner), PHONE_ALLOWLIST (comma-separated)
PUBLIC_BASE_URL, PHONE_PORT
PHONE_FROM_NUMBER, OPENAI_API_KEY, PHONE_VOICE, PHONE_REALTIME_MODEL
SMS_FROM_NUMBER, WHATSAPP_FROM_NUMBER
```

**Backward compat:** the previous `channels.phone.{twilio_sid, twilio_secret,
twilio_auth_token, owner_number, allowlist, public_base_url, port}` shape
is still read as a fallback for one release cycle. Migrate when convenient.

`clara phone status` prints which fields are set across all three channels.

## Cloudflared named tunnel (production)

The ephemeral `trycloudflare.com` URL is fine for testing but dies on
restart. For a persistent deploy:

```bash
brew install cloudflared
cloudflared tunnel login                          # opens browser, writes cert.pem
cloudflared tunnel create clara-mac                 # creates the tunnel
cloudflared tunnel route dns clara-mac clara.example.com   # CNAME on a Cloudflare-managed domain
```

Keep clara's tunnel config in clara's home as a single flat file:
`~/.heyclara/cloudflared-config.yaml`. The cloudflared-internal artifacts
(`cert.pem`, the per-tunnel credentials JSON written by `tunnel create`)
stay where cloudflared put them — those are cloudflared's territory, not
clara's.

```yaml
# ~/.heyclara/cloudflared-config.yaml
tunnel: clara-mac
credentials-file: /Users/<you>/.cloudflared/<tunnel-id>.json

ingress:
  - hostname: clara.example.com
    service: http://localhost:7079
  - service: http_status:404
```

Install as a launchd service, pointing it at our config:

```bash
sudo cloudflared --config ~/.heyclara/cloudflared-config.yaml service install
```

If the generated plist at `/Library/LaunchDaemons/com.cloudflare.cloudflared.plist`
doesn't include the `--config` arg in `ProgramArguments`, edit it in, then:

```bash
sudo launchctl bootout system/com.cloudflare.cloudflared
sudo launchctl bootstrap system /Library/LaunchDaemons/com.cloudflare.cloudflared.plist
```

From DevChiniwala/HeyClara, MIT.

More from DevChiniwala/HeyClara

Signals

Stars
1
Forks
0
Open issues
0
Last commit (this folder)
Jul 8, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from DevChiniwala

Cite this page

clara-phone skill. Agent Mart. https://agentmart.dev/skills/devchiniwala-clara-phone (last updated 2026-10-24)