Install
openclaw skills install beeper-api-cliClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
Read and send messages via Beeper CLI. Supports WhatsApp, Telegram, Signal, Instagram, Twitter/X, LinkedIn, Facebook Messenger and more.
openclaw skills install beeper-api-cliLLM-friendly wrapper around the Beeper CLI for reading and sending messages across all connected chat networks.
🚨 NEVER SEND ANY MESSAGE WITHOUT EXPLICIT USER APPROVAL 🚨
MANDATORY PROTOCOL FOR ALL MESSAGING:
This rule is NON-NEGOTIABLE and applies to ALL beeper send commands.
1. Open Beeper Desktop
2. Settings → Advanced → API
3. Enable API access
4. Copy the Bearer token
# REQUIRED: Set your token
export BEEPER_TOKEN="paste-your-token-here"
# OPTIONAL: Override default localhost URL
export BEEPER_API_URL="http://[::1]:23373" # Default
# Use the skill wrapper (recommended)
~/clawd/skills/beeper-api-cli/beeper.sh chats list --output json
# Or use the binary directly
/Users/ashrafali/clawd/beeper-api-cli/beeper chats list --output json
⚠️ Important: Without setting BEEPER_TOKEN, all commands will fail with "Unauthorized" errors.
The CLI connects to Beeper Desktop's local API server.
⚠️ REQUIRED: You must configure the API token in Beeper Desktop first!
localhost (127.0.0.1 / ::1) is allowedYou must set the token before the CLI will work:
# REQUIRED: Set your token from Beeper Desktop
export BEEPER_TOKEN="your-token-from-beeper-settings"
# OPTIONAL: Override API URL (default: http://[::1]:23373)
export BEEPER_API_URL="http://[::1]:23373"
Where to get the token:
Important:
BEEPER_TOKENlocalhost (http://[::1]:23373)BEEPER_API_URL to use the correct host IP# JSON output (LLM-friendly)
~/clawd/skills/beeper-api-cli/beeper.sh chats list --output json
# Human-readable text
~/clawd/skills/beeper-api-cli/beeper.sh chats list --output text
# Markdown format
~/clawd/skills/beeper-api-cli/beeper.sh chats list --output markdown
Example JSON output:
[
{
"id": "!wcn4YMCOtKUEtxYXYAq1:beeper.local",
"title": "beeper-api-cli - Lion Bot",
"type": "group",
"network": "Telegram",
"unreadCount": 15
}
]
~/clawd/skills/beeper-api-cli/beeper.sh chats get <chat-id> --output json
# Get last 50 messages (default)
~/clawd/skills/beeper-api-cli/beeper.sh messages list --chat-id <chat-id>
# Get specific number of messages
~/clawd/skills/beeper-api-cli/beeper.sh messages list --chat-id <chat-id> --limit 20 --output json
Example JSON output:
[
{
"id": "42113",
"chatID": "!wcn4YMCOtKUEtxYXYAq1:beeper.local",
"senderName": "ClawdBot",
"text": "Hello world!",
"timestamp": "2026-01-19T22:17:38.000Z",
"isSender": true
}
]
# ⚠️ REQUIRES USER APPROVAL FIRST - see Message Sending Policy above
~/clawd/skills/beeper-api-cli/beeper.sh send --chat-id <chat-id> --message "Your message here"
Example output:
{
"success": true,
"message_id": "msg_123",
"chat_id": "!wcn4YMCOtKUEtxYXYAq1:beeper.local"
}
# Search across all chats
~/clawd/skills/beeper-api-cli/beeper.sh search --query "keyword" --limit 10 --output json
~/clawd/skills/beeper-api-cli/beeper.sh discover
# 1. List chats to find the right one
CHATS=$(~/clawd/skills/beeper-api-cli/beeper.sh chats list --output json)
# 2. Extract chat ID (using jq)
CHAT_ID=$(echo "$CHATS" | jq -r '.[] | select(.title | contains("Project")) | .id')
# 3. Send message
~/clawd/skills/beeper-api-cli/beeper.sh send --chat-id "$CHAT_ID" --message "Update ready!"
# Get recent messages for context
~/clawd/skills/beeper-api-cli/beeper.sh messages list --chat-id <chat-id> --limit 20 --output json | jq
# Get all chats with unread count
~/clawd/skills/beeper-api-cli/beeper.sh chats list --output json | jq '.[] | select(.unreadCount > 0) | {title, network, unread: .unreadCount}'
jq for filteringID: !wcn4YMCOtKUEtxYXYAq1:beeper.local
Title: beeper-api-cli - Lion Bot
Type: group
Network: Telegram
Unread: 15
## beeper-api-cli - Lion Bot
- **ID**: !wcn4YMCOtKUEtxYXYAq1:beeper.local
- **Type**: group
- **Network**: Telegram
- **Unread**: 15
Different networks use different ID formats:
!wcn4YMCOtKUEtxYXYAq1:beeper.local15551234567@s.whatsapp.net)+15551234567)Use chats list to discover the exact format for your chats.
You MUST set these environment variables before using the CLI:
export BEEPER_TOKEN="your-bearer-token-from-beeper-desktop"
How to get your token:
Without this token, the CLI will return "Unauthorized" errors.
export BEEPER_API_URL="http://[::1]:23373" # Default value
Default behavior:
http://[::1]:23373 (localhost on IPv6)When to change:
If running remotely:
BEEPER_API_URL to: http://<beeper-host-ip>:23373Example for remote access:
export BEEPER_API_URL="http://192.168.1.100:23373"
export BEEPER_TOKEN="your-token-here"
The skill wrapper (beeper.sh) will:
$BEEPER_TOKEN from environment (you must set this!)$BEEPER_API_URL to http://[::1]:23373 if not setBEEPER_TOKEN is not set# Check if Beeper Desktop is running
ps aux | grep -i beeper
# Start Beeper Desktop
open -a "Beeper Desktop" # macOS
This means you haven't set BEEPER_TOKEN or it's invalid.
Fix:
# 1. Check if token is set
echo $BEEPER_TOKEN
# If empty or wrong, get a new token from Beeper Desktop:
# - Open Beeper Desktop
# - Settings → Advanced → API
# - Enable API if not already enabled
# - Copy the Bearer token shown
# - Set it in your environment:
export BEEPER_TOKEN="paste-the-token-here"
# Test it works:
~/clawd/skills/beeper-api-cli/beeper.sh chats list
Important Notes:
# List all chats to find correct ID
~/clawd/skills/beeper-api-cli/beeper.sh chats list --output text | grep -i "search-term"
If you want to run the CLI from a different computer:
1. Configure Beeper Desktop to allow remote access:
- Open Beeper Desktop (on the machine running Beeper)
- Settings → Advanced → API
- Find the "Allowed IP Addresses" section
- Add the IP address of the machine running the CLI
- Example: 192.168.1.50
2. Set BEEPER_API_URL to point to the remote machine:
# On the machine running the CLI:
export BEEPER_API_URL="http://<beeper-desktop-ip>:23373"
export BEEPER_TOKEN="your-token"
# Example:
export BEEPER_API_URL="http://192.168.1.100:23373"
Default behavior (localhost only):
http://[::1]:23373 (IPv6 localhost)#!/bin/bash
BEEPER="$HOME/clawd/skills/beeper-api-cli/beeper.sh"
# Get chats with unread messages
$BEEPER chats list --output json | \
jq -r '.[] | select(.unreadCount > 0) | "\(.title) (\(.network)): \(.unreadCount) unread"'
#!/bin/bash
BEEPER="$HOME/clawd/skills/beeper-api-cli/beeper.sh"
CHAT_ID="!wcn4YMCOtKUEtxYXYAq1:beeper.local"
# Get last 10 messages in readable format
$BEEPER messages list --chat-id "$CHAT_ID" --limit 10 --output text
#!/bin/bash
BEEPER="$HOME/clawd/skills/beeper-api-cli/beeper.sh"
# Search for mentions
RESULTS=$($BEEPER search --query "@clawdbot" --limit 5 --output json)
# Process results and respond (LLM integration point)
echo "$RESULTS" | jq
When using from Clawdbot tools, the environment variables are already configured:
# Direct usage from exec tool
~/clawd/skills/beeper-api-cli/beeper.sh chats list --output json
The skill wrapper handles:
BEEPER_API_URL and BEEPER_TOKEN~/clawd/skills/beeper-api-cli/beeper.sh/Users/ashrafali/clawd/beeper-api-cli/beeper✅ Read-only and write operations (unlike other tools)
✅ LLM-optimized JSON output
✅ Human-readable text and markdown formats
✅ Auto-discovery of Beeper Desktop API
✅ Cross-platform binaries (macOS, Linux, Windows)
✅ Environment variable configuration
✅ Comprehensive error messages
✅ Unix pipeline friendly
Latest (dev build from source)