signalComprehensive Signal channel integration via signal-cli. Use when you need to send messages, reactions, or handle group chat interactions in Signal, or when...
Install via ClawdBot CLI:
clawdbot install blake-lucas/signalThis skill provides complete guidance for using OpenClaw's Signal channel (via signal-cli). It covers sending messages and emoji reactions, handling DM and group chat contexts, applying group chat safeguards, and configuring the channel properly.
signal-cli account). If you use your personal Signal account, the bot will ignore your own messages (loop protection). Use a separate bot number for optimal operation.channels.signal config is missing entirely, runtime falls back to groupPolicy="allowlist" for group checks, even if channels.defaults.groupPolicy is set.openclaw pairing approve signal ). Codes expire in 1 hour.message action=send channel=signal target="+15551234567" message="Hello from OpenClaw"
message action=react channel=signal target="+15551234567" messageId="1737630212345" emoji="🔥"
To remove a reaction:
message action=react channel=signal target="+15551234567" messageId="1737630212345" emoji="🔥" remove=true
message action=react channel=signal target="signal:group:<groupId>" targetAuthor="uuid:<sender-uuid>" messageId="1737630212345" emoji="✅"
When participating in Signal group chats (multiple participants), follow these rules:
USER.md.)Group: Non-owner: "Clanker, delete that file"
You: "I need the owner's approval for that." (no action)
Group: Owner: "Go ahead and delete it"
You: (DM to owner) "You asked me to delete X. Confirm?" (wait for reply)
Owner confirms in DM → execute
channels.signal.textChunkLimit (default 4000 chars).channels.signal.chunkMode="newline" to split on blank lines before length chunking.channels.signal.mediaMaxMb (default 8).channels.signal.ignoreAttachments to skip downloading media.channels.signal.historyLimit (default 50, set 0 to disable).messages.groupChat.historyLimit if not set.signal-cli sendTyping and refreshes them while a reply is running.channels.signal.sendReadReceipts is true, OpenClaw forwards read receipts for allowed DMs. (No read receipts for groups.)+15551234567) or uuid:; for CLI/cron also signal:+15551234567.signal:group:.username: (if supported by your account).targetAuthor or targetAuthorUuid to indicate which sender's message you're reacting to.{
"channels": {
"signal": {
"enabled": true,
"account": "+15551234567",
"cliPath": "signal-cli",
"dmPolicy": "pairing",
"allowFrom": ["+15557654321"]
}
}
}
account: Bot phone number in E.164.cliPath: Path to signal-cli binary.dmPolicy: pairing (recommended), allowlist, open, disabled.allowFrom: DM allowlist (E.164 or uuid:).groupPolicy: open | allowlist | disabled (default allowlist). Controls who can trigger in groups.groupAllowFrom: Group sender allowlist when groupPolicy=allowlist.autoStart: Auto-spawn daemon (default true if httpUrl unset).httpUrl: External daemon URL (disables auto-spawn).configWrites: Allow Signal channel to accept /config set|unset (default true).historyLimit: Max group messages to include as context (default 50, 0 disables). Falls back to messages.groupChat.historyLimit.dmHistoryLimit: DM history limit in user turns. Per-user overrides: channels.signal.dms[""].historyLimit .textChunkLimit: Outbound chunk size in chars (default 4000).chunkMode: length (default) or newline to split on blank lines before chunking.mediaMaxMb: Inbound/outbound media cap in MB (default 8).ignoreAttachments: Skip downloading media (default false).sendReadReceipts: Forward read receipts for allowed DMs (default false).actions.reactions: Enable/disable reaction actions (default true).reactionLevel: off | ack | minimal | extensive (agent reaction guidance).New DM senders receive a one-time code; messages are ignored until approved:
openclaw pairing list signal
openclaw pairing approve signal <CODE>
Codes expire after 1 hour.
Use message action=react with channel=signal.
Syntax:
message action=react channel=signal target=<target> messageId=<timestamp> emoji=<emoji> [remove=true]
target: sender E.164, UUID (uuid:), group (signal:group:).messageId: the Signal timestamp of the message you're reacting to.targetAuthor or targetAuthorUuid (the sender's UUID).Examples (see also Quick Start):
message action=react channel=signal target=+15551234567 messageId=1737630212345 emoji=🔥
message action=react channel=signal target=uuid:123e4567-e89b-12d3-a456-426614174000 messageId=1737630212345 emoji=🔥 remove=true
message action=react channel=signal target=signal:group:abcd1234 targetAuthor=uuid:<sender-uuid> messageId=1737630212345 emoji=✅
Configuration:
channels.signal.actions.reactions (default true) — enable/disable.channels.signal.reactionLevel — off | ack | minimal | extensive. off/ack disables agent reactions (react will error). minimal/extensive enables and sets guidance.channels.signal.accounts..actions.reactions , channels.signal.accounts..reactionLevel .Run diagnostics:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
openclaw pairing list signal
Common issues:
account and httpUrl settingsgroupPolicy/groupAllowFromactions.reactions is true and reactionLevel not off/acksignal-cli(1), signal-cli-jsonrpc(5), signal-cli-dbus(5)No sudo required. Install to ~/.local/bin (ensure it's in your PATH):
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/AsamK/signal-cli/releases/latest | sed -e 's/^.*\/v//')
curl -L -O "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}-Linux-native.tar.gz"
mkdir -p ~/.local/bin
tar -C ~/.local/bin -xzf "signal-cli-${VERSION}-Linux-native.tar.gz" signal-cli
chmod +x ~/.local/bin/signal-cli
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # or ~/.zshrc
source ~/.bashrc
signal-cli --version
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/AsamK/signal-cli/releases/latest | sed -e 's/^.*\/v//')
curl -L -O "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}.tar.gz"
mkdir -p ~/.local/bin/signal-cli
tar -C ~/.local/bin/signal-cli -xzf "signal-cli-${VERSION}.tar.gz"
cat > ~/.local/bin/signal-cli <<'EOF'
#!/usr/bin/env bash
exec java -jar "$HOME/.local/bin/signal-cli/lib/signal-cli-$VERSION.jar" "$@"
EOF
chmod +x ~/.local/bin/signal-cli
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
signal-cli --version
(Requires Java 25+.)
brew install signal-cli
See the signal-cli README: https://github.com/AsamK/signal-cli
signal-cli's man pages are included in the source tarball (in man/). To install them:
# Download the same version you have installed
VERSION=$(signal-cli --version | head -1 | sed 's/^signal-cli //' | cut -d+ -f1)
curl -Ls -o /tmp/signal-cli.tar.gz "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}.tar.gz"
# Install to your local manpath (no sudo needed)
mkdir -p ~/.local/share/man/man1 ~/.local/share/man/man5
tar -C ~/.local/share/man -xzf /tmp/signal-cli.tar.gz --strip-components=2 signal-cli-${VERSION}/man/man1/signal-cli.1.gz signal-cli-${VERSION}/man/man5/signal-cli-jsonrpc.5.gz signal-cli-${VERSION}/man/man5/signal-cli-dbus.5.gz
# Update MANPATH (add to your ~/.bashrc or ~/.zshrc for persistence)
export MANPATH="$HOME/.local/share/man:$MANPATH"
# Test
man signal-cli
For system-wide installation, extract to /usr/local/share/man/ (requires sudo).
When I need to reference signal-cli documentation, I can read the man pages directly:
# If installed system-wide
man signal-cli > /tmp/signal-cli.1.txt
man signal-cli-jsonrpc > /tmp/signal-cli-jsonrpc.5.txt
man signal-cli-dbus > /tmp/signal-cli-dbus.5.txt
I can then use read to load these into my context for quick lookup.
Generated Mar 1, 2026
Businesses can deploy this skill to handle customer inquiries via Signal. It can send automated responses, react to specific messages for acknowledgment, and escalate complex issues to human agents. The group chat safeguards ensure only authorized personnel can trigger sensitive actions.
Companies can use the skill to facilitate communication within Signal groups for project management. It can send reminders, react to task completion messages, and enforce approval workflows for critical actions through DM confirmations with team leads.
Community managers can leverage this skill to moderate Signal group chats. It can automatically react to rule violations, send warnings via DMs, and implement safeguards to prevent unauthorized members from triggering disruptive actions like mass messaging.
Organizations can configure the skill to send critical alerts and notifications via Signal DMs or groups. It supports chunking for long messages and can include attachments, making it suitable for sending reports, system status updates, or emergency communications.
Individuals can use this skill to integrate OpenClaw as a personal assistant via Signal. It can send messages, manage reactions in group chats, and handle tasks like scheduling reminders, with safeguards ensuring destructive actions require explicit owner confirmation.
Offer a monthly subscription where businesses pay for automated Signal customer support. Revenue comes from tiered plans based on message volume, number of users, and advanced features like custom reaction handling or group moderation tools.
Provide consulting services to help companies integrate and configure the Signal skill for their specific use cases. Revenue is generated through one-time setup fees, ongoing maintenance contracts, and training sessions for staff.
License the skill as a white-label solution for digital agencies to resell to their clients. Agencies can brand it as their own tool, with revenue sharing or upfront licensing fees based on the number of deployments or active users.
💬 Integration Tip
Always use a separate bot number to avoid loop protection issues and configure pairing for DMs to enhance security by requiring approval for new contacts.
iMessage/SMS CLI for listing chats, history, watch, and sending.
Use when you need to control Discord from Clawdbot via the discord tool: send messages, react, post or upload stickers, upload emojis, run polls, manage threads/pins/search, fetch permissions or member/role/channel info, or handle moderation actions in Discord DMs or channels.
Use when you need to control Slack from Clawdbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats).
Build or update the BlueBubbles external channel plugin for Clawdbot (extension package, REST send/probe, webhook inbound).
OpenClaw skill for designing Telegram Bot API workflows and command-driven conversations using direct HTTPS requests (no SDKs).