Reverb v0.1.0 just shipped.see what's new
Reverb
v0.1.0 · early access

Your AI CLI,
one message away.

Send a WhatsApp message from anywhere. Claude replies.Your Mac doesn't even need to be open.

Sending a prompt from WhatsApp, Claude replies. Mac is asleep the whole time.
The problem

Everything else had a catch.

Plugins die with Claude Code

Anthropic's WhatsApp plugin only lives inside Claude Code. Close the CLI and the bridge goes with it. Useless the moment you step away.

Docker is 4 GB of overkill

A full Linux VM running 24/7 just to relay a chat message. Wrong tool for a personal assistant.

Twilio bills you

A verified business number, API tokens, ongoing costs. Built for SaaS products, not a dev's daily driver.

Reverb is a separate process. It holds the WhatsApp socket alive and spawns claude --print per message. LaunchAgent-hosted, ~50 MB RAM, no cloud. Read the full writeup →

Features

Built to run unattended.

WhatsApp channel

Linked-device protocol via Baileys. No Business API, no phone number hosting, no cloud relay.

bash
$ npm run pair
→ QR in terminal
→ scan in WhatsApp

Persistent

LaunchAgent on macOS. Starts on boot, restarts on crash, reconnects on network drops.

Sandboxed

Claude runs inside a scoped working directory. Your $HOME is off-limits.

Rate-limited

Per-chat token bucket. Runaway loops won't burn your subscription.

Admin UI

Local dashboard at 127.0.0.1:3737. Pair your phone, edit config, read logs, kill the daemon.

url
http://127.0.0.1:3737/

Audit log

Every message logged. JIDs stored as SHA-256 hashes, not phone numbers.

How it works

Clone. Pair. Done.

  1. 01

    Install

    Clone the repo, build, and generate your LaunchAgent plist. One script. No Docker, no Twilio, no API keys.

    bash
    git clone https://github.com/eusougustavocesar/reverb.git
    cd reverb
    npm install && npm run build
    bash scripts/install.sh
  2. 02

    Pair your phone

    Scan a QR from your terminal. Reverb registers as a WhatsApp linked device, same protocol as WhatsApp Web. Auth survives reboots.

    bash
    npm run pair
    # → QR renders in terminal
    # → WhatsApp > Settings > Linked Devices > Link a Device
  3. 03

    Start the daemon, close your Mac.

    The LaunchAgent takes over. Starts on boot, reconnects on drops, restarts on crash. Message yourself on WhatsApp. Claude replies.

    bash
    launchctl bootstrap gui/$(id -u) \
      ~/Library/LaunchAgents/com.$(whoami).reverb.plist
    
    # Done. Message from anywhere.

The daemon and Claude Code run as independent processes. The WhatsApp socket stays alive for hours; each Claude invocation exits in seconds. That's why Reverb works when plugin-based bridges don't.

Prior art

Why not the alternatives?

Setup time (minutes, lower is better)

measured on a fresh macOS
Reverb1 script2m
Rich627 pluginbut dies w/ Claude Code3m
osisdie + Docker+ 2–4 GB RAM idle12m
n8n + webhookflow + auth + server25m
Twilio + API+ paid tokens45m
I wanted to use Claude Code from my phone. The official plugin died the moment I closed the CLI. Docker ate 4 GB of RAM for a chat bridge. Twilio wanted a business account.

So I wrote a ~300-line daemon. It spawns claude --print per message, runs as a LaunchAgent, and uses my existing subscription. Mac closed. Phone in pocket. Claude still replies.
Gustavo Cesar Fortkamp
Gustavo Cesar Fortkamp@eusougustavocesar · creator
Install

Clone to daemon in 5 minutes.

macOS · bash
git clone https://github.com/eusougustavocesar/reverb.git
cd reverb
npm install && npm run build

# 1. Scaffold LaunchAgent plist
bash scripts/install.sh

# 2. Pair your phone (scan QR)
npm run pair

# 3. Start the daemon
launchctl bootstrap gui/$(id -u) \
  ~/Library/LaunchAgents/com.$(whoami).reverb.plist

Boot it once. It handles the rest — starts on login, reconnects on network drops, restarts on crash. Message yourself on WhatsApp to verify.

FAQ

Questions you'd ask too.

Still have questions? Open an issue →