Claude Phone

January 23, 2026 · View on GitHub

Claude Phone

Claude Phone

Voice interface for Claude Code via SIP/3CX. Call your AI, and your AI can call you.

What is this?

Claude Phone gives your Claude Code installation a phone number. You can:

  • Inbound: Call an extension and talk to Claude - run commands, check status, ask questions
  • Outbound: Your server can call YOU with alerts, then have a conversation about what to do

Prerequisites

RequirementWhere to Get ItNotes
3CX Cloud Account3cx.comFree tier works
ElevenLabs API Keyelevenlabs.ioFor text-to-speech
OpenAI API Keyplatform.openai.comFor Whisper speech-to-text
Claude Code CLIclaude.ai/codeRequires Claude Max subscription

Platform Support

PlatformStatus
macOSFully supported
LinuxFully supported (including Raspberry Pi)
WindowsNot supported (may work with WSL)

Quick Start

1. Install

curl -sSL https://raw.githubusercontent.com/theNetworkChuck/claude-phone/main/install.sh | bash

The installer will:

  • Check for Node.js 18+, Docker, and git (offers to install if missing)
  • Clone the repository to ~/.claude-phone-cli
  • Install dependencies
  • Create the claude-phone command

2. Setup

claude-phone setup

The setup wizard asks what you're installing:

TypeUse CaseWhat It Configures
Voice ServerPi or dedicated voice boxDocker containers, connects to remote API server
API ServerMac/Linux with Claude CodeJust the Claude API wrapper
BothAll-in-one single machineEverything on one box

3. Start

claude-phone start

Deployment Modes

All-in-One (Single Machine)

Best for: Mac or Linux server that's always on and has Claude Code installed.

┌─────────────────────────────────────────────────────────────┐
│  Your Phone                                                  │
│      │                                                       │
│      ↓ Call extension 9000                                  │
│  ┌─────────────┐                                            │
│  │     3CX     │  ← Cloud PBX                               │
│  └──────┬──────┘                                            │
│         │                                                    │
│         ↓                                                    │
│  ┌─────────────────────────────────────────────┐           │
│  │     Single Server (Mac/Linux)                │           │
│  │  ┌───────────┐    ┌───────────────────┐    │           │
│  │  │ voice-app │ ←→ │ claude-api-server │    │           │
│  │  │ (Docker)  │    │ (Claude Code CLI) │    │           │
│  │  └───────────┘    └───────────────────┘    │           │
│  └─────────────────────────────────────────────┘           │
└─────────────────────────────────────────────────────────────┘

Setup:

claude-phone setup    # Select "Both"
claude-phone start    # Launches Docker + API server

Split Mode (Pi + API Server)

Best for: Dedicated Pi for voice services, Claude running on your main machine.

┌─────────────────────────────────────────────────────────────┐
│  Your Phone                                                  │
│      │                                                       │
│      ↓ Call extension 9000                                  │
│  ┌─────────────┐                                            │
│  │     3CX     │  ← Cloud PBX                               │
│  └──────┬──────┘                                            │
│         │                                                    │
│         ↓                                                    │
│  ┌─────────────┐         ┌─────────────────────┐           │
│  │ Raspberry Pi │   ←→   │ Mac/Linux with      │           │
│  │ (voice-app)  │  HTTP  │ Claude Code CLI     │           │
│  └─────────────┘         │ (claude-api-server) │           │
│                          └─────────────────────┘           │
└─────────────────────────────────────────────────────────────┘

On your Pi (Voice Server):

claude-phone setup    # Select "Voice Server", enter API server IP when prompted
claude-phone start    # Launches Docker containers

On your Mac/Linux (API Server):

claude-phone api-server    # Starts Claude API wrapper on port 3333

Note: On the API server machine, you don't need to run claude-phone setup first - the api-server command works standalone.

CLI Commands

CommandDescription
claude-phone setupInteractive configuration wizard
claude-phone startStart services based on installation type
claude-phone stopStop all services
claude-phone statusShow service status
claude-phone doctorHealth check for dependencies and services
claude-phone api-server [--port N]Start API server standalone (default: 3333)
claude-phone device addAdd a new device/extension
claude-phone device listList configured devices
claude-phone device remove <name>Remove a device
claude-phone logs [service]Tail logs (voice-app, drachtio, freeswitch)
claude-phone config showDisplay configuration (secrets redacted)
claude-phone config pathShow config file location
claude-phone config resetReset configuration
claude-phone backupCreate configuration backup
claude-phone restoreRestore from backup
claude-phone updateUpdate Claude Phone
claude-phone uninstallComplete removal

Device Personalities

Each SIP extension can have its own identity with a unique name, voice, and personality prompt:

claude-phone device add

Example devices:

  • Morpheus (ext 9000) - General assistant
  • Cephanie (ext 9002) - Storage monitoring bot

API Endpoints

The voice-app exposes these endpoints on port 3000:

MethodEndpointPurpose
POST/api/outbound-callInitiate an outbound call
GET/api/call/:callIdGet call status
GET/api/callsList active calls
POST/api/queryQuery a device programmatically
GET/api/devicesList configured devices

See Outbound API Reference for details.

Troubleshooting

Quick Diagnostics

claude-phone doctor    # Automated health checks
claude-phone status    # Service status
claude-phone logs      # View logs

Common Issues

ProblemLikely CauseSolution
Calls connect but no audioWrong external IPRe-run claude-phone setup, verify LAN IP
Extension not registering3CX SBC not runningCheck 3CX admin panel
"Sorry, something went wrong"API server unreachableCheck claude-phone status
Port conflict on startup3CX SBC using port 5060Setup auto-detects this; re-run setup

See Troubleshooting Guide for more.

Configuration

Configuration is stored in ~/.claude-phone/config.json with restricted permissions (chmod 600).

claude-phone config show    # View config (secrets redacted)
claude-phone config path    # Show file location

Development

# Run tests
npm test

# Lint
npm run lint
npm run lint:fix

Documentation

License

MIT