Skip to content

About

Let your AI agent make and take calls on your real phone. A $15 USB Bluetooth dongle pairs with any phone; calls become LiveKit rooms. No Twilio, no SIP trunk.

Topics

Resources

Contributing

Stars

9 stars

Watchers

0 watching

Forks

Repository files navigation

Agent Bluetooth

Teach your agent to make phone calls for you. Plug a $15 Bluetooth dongle into your computer, pair a phone, and a LiveKit voice agent can call anyone from your real number: book a table, sit through a phone menu, chase a refund. No Twilio, no SIP trunk, no new number.

agent-bluetooth call +14155550142 --agent phone-agent \
  --task "Book a table for two tonight at 7, under Nikita"

The phone dials, the agent waits for someone to pick up, handles the conversation, hangs up, and saves the transcript.

Claude texting through agent-bluetooth Agent Phone for macOS

  • Calls, both ways. Your agent places calls and answers them. Each call is a LiveKit room with your phone in it as a SIP participant (DTMF included), so anything built for LiveKit telephony works unchanged.
  • Recording: one switch records every call, both sides in stereo.
  • Texts (Android): send, list, wait for a reply.
  • Contacts and call history, synced from the phone.
  • A CLI and HTTP API that print JSON, plus a Claude Code skill, so a coding agent can text and call too.
  • Agent Phone, a small macOS softphone (download).

You need

  • A USB Bluetooth dongle. Tested: TP-Link UB400.
  • A Mac or any Linux machine to plug it into.
  • Any phone that can connect to a Bluetooth headset.

Run it

brew install libusb livekit            # Linux: libusb-1.0-0 + livekit-server
git clone https://github.com/Hormold/agent-bluetooth && cd agent-bluetooth
uv tool install . && cp config.example.toml config.toml   # puts `agent-bluetooth` on PATH

livekit-server --dev --bind 127.0.0.1 --node-ip 127.0.0.1 &
agent-bluetooth serve config.toml

Pair your phone with Agent Bluetooth. If the dongle doesn't come up, agent-bluetooth status says why and what to do. More (Linux, systemd, call modes): docs/SETUP.md.

From an agent

agent-bluetooth sms +14155550142 "Running 10 min late"
agent-bluetooth wait sms.received --match sender=+14155550142
agent-bluetooth call +14155550142 && agent-bluetooth wait call.active
agent-bluetooth dtmf 1
agent-bluetooth contacts anna
agent-bluetooth debug                  # when something's off

Every command prints JSON. For Claude Code, copy the skill: cp -r skills/agent-bluetooth ~/.claude/skills/. Then just ask it to text or call someone. Full recipe: agent-bluetooth guide.

Your agent makes the call

examples/livekit-agent is a complete voice agent on LiveKit Agents: about 200 lines, one file, both directions.

cd examples/livekit-agent && cp .env.example .env    # add OPENAI_API_KEY
uv sync && uv run python agent.py                    # registers "phone-agent"

agent-bluetooth call +14155550142 --agent phone-agent --task "Ask if they're open Sunday"

Or start it the LiveKit way, exactly like LiveKit's outbound calls guide, just without a SIP trunk:

lk dispatch create --new-room --agent-name phone-agent \
  --metadata '{"phone_number": "+14155550142", "task": "Ask if they are open Sunday"}'

To have it answer your calls as well: agent-bluetooth settings set incoming=agent agent_name=phone-agent. How the phone shows up in the room: docs/LIVEKIT.md.

Why LiveKit

LiveKit is the open-source realtime stack this is built on: rooms, WebRTC, and Agents, the framework for voice agents with any STT, LLM and TTS (or a realtime model). livekit-server --dev runs it on your laptop; LiveKit Cloud hosts it when your agent needs to be reachable from anywhere. agent-bluetooth only adds the missing piece: a real phone line in the room.

Mac app

Recents Setup checklist Call settings

Download Agent Phone for macOS (signed and notarized, macOS 14+). Unzip, drag it to Applications, open.

Or build it yourself:

apps/AgentPhone/install.sh       # builds it and installs "Agent Phone" into /Applications

On first launch it checks everything it needs (the service, the dongle, the phone, LiveKit, microphone, notifications) and sets up what it can with one button: installs and starts the local service and LiveKit through Homebrew and uv, or connects LiveKit Cloud if you want hosted voice agents. Then it's a phone: recents, contacts, keypad, incoming call alerts, and a choice of what happens when someone calls.

Ideas

  • A phone in a drawer. Keep an old phone on the dongle at home. Forward your number to it (or give it out as your public number) and the agent answers, screens spam, and texts you what matters.
  • Calls on your real phone, through your agent. A small app that rings your own phone with the call your agent picked up, so it can hand a caller over to you. Next example.

Docs

Setup · LiveKit · Many phones · Troubleshooting · Changelog · Contributing

Inspired by an idea from Grigory Bakunov (@bobuk).

License

MIT.

About

Let your AI agent make and take calls on your real phone. A $15 USB Bluetooth dongle pairs with any phone; calls become LiveKit rooms. No Twilio, no SIP trunk.

Topics

Resources

Contributing

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages