From sundial-org-awesome-openclaw-skills-4
Integrates Beeper Desktop API to send messages, search chats, add reactions, set reminders, handle attachments, and mark as read across WhatsApp, Telegram, Signal, Discord, Slack, Instagram, iMessage, and more.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-2 --plugin sundial-org-awesome-openclaw-skills-4This skill uses the workspace's default tool permissions.
---
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Your lobster just got a Beeper.
Finally, your Clawdbot can reach you (and everyone else) across every chat platform. WhatsApp? Telegram? Signal? Discord? Slack? Instagram DMs? LinkedIn? iMessage? All of them. One skill. One claw.
Powered by Beeper - the app that unifies all your chats.
๐ Search Everything - "What did Sarah say about the project last week?" Your lobster will dig through all your Beeper chats instantly.
๐ฌ Send Messages Anywhere - "Tell Mom I'll be late" - and it goes to WhatsApp. "Message the team on Slack" - done. No app switching.
๐ Summarize Your Inbox - "What did I miss?" Get a digest of unread messages across all your Beeper networks.
๐ Set Reminders - "Remind me to reply to this chat tomorrow" - your lobster remembers so you don't have to.
๐ Grab Attachments - Download files, images, and media from any Beeper conversation.
๐ React to Messages - Add emoji reactions to any message across any Beeper network.
โ Mark as Read - Keep your Beeper inbox tidy by marking conversations as read.
Your Clawdbot can reach you on any platform Beeper supports:
| Platform | Status |
|---|---|
| โ Full Support | |
| Telegram | โ Full Support |
| Signal | โ Full Support |
| Discord | โ Full Support |
| Slack | โ Full Support |
| Instagram DMs | โ Full Support |
| Facebook Messenger | โ Full Support |
| LinkedIn Messages | โ Full Support |
| X (Twitter) DMs | โ Full Support |
| Google Messages | โ Full Support |
| Google Chat | โ Full Support |
| iMessage | โ macOS only |
One skill. Twelve platforms. Infinite possibilities.
Don't have Beeper yet? Download it free - it's the app that brings all your chats together.
Open Beeper Desktop โ Settings โ Developers โ Toggle "Beeper Desktop API" ON
That's it. Your lobster now has a direct line to all your chats.
For smoother automation, grab an access token:
~/.clawdbot/clawdbot.json:{
"skills": {
"entries": {
"claw-me-maybe": {
"enabled": true,
"env": {
"BEEPER_ACCESS_TOKEN": "your-token-here"
}
}
}
}
}
Note: BEEPER_API_URL defaults to http://localhost:23373 - no need to set it unless you're running Beeper on a different port.
Once set up, just ask naturally:
"Show me my unread messages in Beeper"
"Search my Beeper chats for messages about dinner plans"
"Send a WhatsApp message to John saying I'm on my way"
"What's the latest in my Signal group chat?"
"Message the #general channel on Slack: standup in 5 minutes"
"Find all messages from Lisa in the last week"
"React with ๐ to that last message"
"Mark my Discord chats as read"
Your lobster handles the rest through Beeper.
(For those who like to peek under the shell)
Base URL: http://localhost:23373 (Beeper Desktop must be running)
# Auth header (when using a token)
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
See all connected platforms in your Beeper:
curl -s "${BEEPER_API_URL}/v1/accounts" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
Example Response:
[
{
"id": "whatsapp-abc123",
"service": "whatsapp",
"displayName": "+1 555-123-4567",
"connected": true
},
{
"id": "telegram-xyz789",
"service": "telegram",
"displayName": "@myusername",
"connected": true
},
{
"id": "signal-def456",
"service": "signal",
"displayName": "+1 555-987-6543",
"connected": true
}
]
curl -s "${BEEPER_API_URL}/v1/chats" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
Example Response:
[
{
"id": "chat-abc123",
"name": "Family Group",
"service": "whatsapp",
"unreadCount": 5,
"lastMessage": {
"text": "See you at dinner!",
"timestamp": "2026-01-23T15:30:00Z"
}
},
{
"id": "chat-xyz789",
"name": "Work Team",
"service": "slack",
"unreadCount": 0,
"lastMessage": {
"text": "Meeting moved to 3pm",
"timestamp": "2026-01-23T14:00:00Z"
}
}
]
curl -s "${BEEPER_API_URL}/v1/chats/search?q=project+meeting" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
curl -s "${BEEPER_API_URL}/v1/chats/{chatID}" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
Example Response:
{
"id": "chat-abc123",
"name": "Family Group",
"service": "whatsapp",
"unreadCount": 5,
"participants": [
{"id": "user-1", "name": "Mom", "phone": "+15551234567"},
{"id": "user-2", "name": "Dad", "phone": "+15559876543"},
{"id": "user-3", "name": "You", "phone": "+15555555555"}
],
"archived": false,
"muted": false
}
curl -X POST "${BEEPER_API_URL}/v1/chats" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"accountID": "whatsapp-abc123",
"participants": ["+1234567890"]
}'
curl -X POST "${BEEPER_API_URL}/v1/chats/{chatID}/archive" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"archived": true}'
curl -s "${BEEPER_API_URL}/v1/chats/{chatID}/messages" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
Example Response:
[
{
"id": "msg-001",
"chatID": "chat-abc123",
"sender": {"id": "user-1", "name": "Mom"},
"text": "Don't forget to call grandma!",
"timestamp": "2026-01-23T15:30:00Z",
"reactions": [
{"emoji": "๐", "user": {"id": "user-2", "name": "Dad"}}
]
},
{
"id": "msg-002",
"chatID": "chat-abc123",
"sender": {"id": "user-2", "name": "Dad"},
"text": "See you at dinner!",
"timestamp": "2026-01-23T15:25:00Z",
"reactions": []
}
]
curl -s "${BEEPER_API_URL}/v1/messages/search?q=dinner+plans" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
Example Response:
{
"results": [
{
"id": "msg-xyz",
"chatID": "chat-abc123",
"chatName": "Family Group",
"service": "whatsapp",
"text": "What are the dinner plans for tonight?",
"sender": {"name": "Mom"},
"timestamp": "2026-01-23T12:00:00Z"
}
],
"total": 1
}
curl -X POST "${BEEPER_API_URL}/v1/chats/{chatID}/messages" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"text": "Hello from my lobster! ๐ฆ"}'
Example Response:
{
"id": "msg-new123",
"chatID": "chat-abc123",
"text": "Hello from my lobster! ๐ฆ",
"timestamp": "2026-01-23T16:00:00Z",
"status": "sent"
}
curl -X POST "${BEEPER_API_URL}/v1/chats/{chatID}/messages" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"text": "Sounds good!",
"replyTo": "msg-001"
}'
curl -X POST "${BEEPER_API_URL}/v1/chats/{chatID}/read" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"upToMessageID": "msg-001"}'
curl -X POST "${BEEPER_API_URL}/v1/chats/{chatID}/messages/{messageID}/reactions" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"emoji": "๐"}'
curl -X DELETE "${BEEPER_API_URL}/v1/chats/{chatID}/messages/{messageID}/reactions" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"emoji": "๐"}'
curl -s "${BEEPER_API_URL}/v1/accounts/{accountID}/contacts?q=john" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
Example Response:
[
{
"id": "contact-123",
"name": "John Smith",
"phone": "+15551234567",
"avatar": "https://..."
},
{
"id": "contact-456",
"name": "Johnny Appleseed",
"phone": "+15559876543",
"avatar": "https://..."
}
]
Set a reminder for a chat:
curl -X POST "${BEEPER_API_URL}/v1/chats/{chatID}/reminders" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"remindAt": "2026-01-25T10:00:00Z"}'
curl -X DELETE "${BEEPER_API_URL}/v1/chats/{chatID}/reminders" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
curl -X POST "${BEEPER_API_URL}/v1/assets/download" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"assetID": "asset-id-here"}' \
--output attachment.file
curl -s "${BEEPER_API_URL}/v1/chats?unreadOnly=true" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" | \
jq '.[] | "[\(.service)] \(.name): \(.unreadCount) unread"'
Example Output:
[whatsapp] Family Group: 5 unread
[slack] Work Team: 12 unread
[signal] Best Friend: 2 unread
# Get your WhatsApp account ID from Beeper
WHATSAPP=$(curl -s "${BEEPER_API_URL}/v1/accounts" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" | \
jq -r '.[] | select(.service == "whatsapp") | .id')
# Search for a contact
curl -s "${BEEPER_API_URL}/v1/chats/search?q=Mom" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
for chatID in $(curl -s "${BEEPER_API_URL}/v1/chats?unreadOnly=true" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" | jq -r '.[].id'); do
curl -X POST "${BEEPER_API_URL}/v1/chats/${chatID}/read" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
echo "Marked ${chatID} as read"
done
# Get the last message ID from a chat
LAST_MSG=$(curl -s "${BEEPER_API_URL}/v1/chats/{chatID}/messages?limit=1" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" | jq -r '.[0].id')
# React with thumbs up
curl -X POST "${BEEPER_API_URL}/v1/chats/{chatID}/messages/${LAST_MSG}/reactions" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"emoji": "๐"}'
curl -s --connect-timeout 2 "${BEEPER_API_URL:-http://localhost:23373}/health" && echo "Beeper is ready!"
YESTERDAY=$(date -u -v-1d +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -u -d "1 day ago" +"%Y-%m-%dT%H:%M:%SZ")
curl -s "${BEEPER_API_URL}/v1/messages/search?after=${YESTERDAY}" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}"
# Get only Signal chats
curl -s "${BEEPER_API_URL}/v1/chats" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" | \
jq '[.[] | select(.service == "signal")]'
# Get only Slack chats
curl -s "${BEEPER_API_URL}/v1/chats" \
-H "Authorization: Bearer ${BEEPER_ACCESS_TOKEN}" | \
jq '[.[] | select(.service == "slack")]'
Beeper Desktop must be running - The API lives inside Beeper Desktop. No Beeper = no connection.
It's local & private - The Beeper API runs entirely on your machine. Your messages never touch external servers through this skill.
Respect the networks - This is for personal use. Sending too many messages might trigger rate limits on WhatsApp, etc.
iMessage needs macOS - Apple gonna Apple.
Reactions vary by network - Not all platforms support all emoji. Beeper handles the translation.
curl http://localhost:23373/healthSome networks have limited emoji support. Try a more common emoji like ๐ โค๏ธ ๐ ๐ฎ ๐ข ๐ก
Built with ๐ฆ by @nickhamze and the Clawdbot community.
Powered by Beeper - One app for all your chats.
Claw Me Maybe - because your lobster should be able to reach you anywhere.