- OpenClaw connects to Signal via signal-cli, running as a linked device — encryption stays intact throughout
- You need Java 17+, a dedicated phone number, and signal-cli v0.11+ before touching the OpenClaw config
- The channel type in your agent YAML is
signal— point it at your signal-cli socket path - One phone number = one Signal account = one agent channel; use multiple numbers for multiple agents
- Messages queued while signal-cli is offline are delivered when it reconnects — no messages are lost
Signal is the only mainstream messaging platform where privacy isn't a marketing claim — it's the architecture. When you pair it with an OpenClaw AI agent, you get a system where your conversations with an AI are encrypted end-to-end, your message history isn't stored on a third-party server, and no platform company can read what you're asking your agent. That combination is rare. Here's how to build it.
Why Signal Is the Right Channel for Private AI Agent Work
Every other messaging channel in OpenClaw's ecosystem involves a platform that holds your message data. Telegram stores messages on its servers. WhatsApp is owned by Meta. Slack keeps full history. Signal is architecturally different: messages exist only on sender and recipient devices. The Signal server never sees message content.
For AI agents handling sensitive workflows — legal research, medical information, financial analysis, private journaling — this distinction matters enormously. The agent sees your messages. Signal ensures no one else does.
As of early 2025, the OpenClaw Signal integration handles one-on-one chats, group message participation, and media attachments. Voice and video calls are not relayed — those remain phone-only. For text-based agent work, Signal is complete.
Don't link the Signal agent to your personal phone number. Get a VoIP number (Twilio, Google Voice, or similar) and register Signal on that. It keeps agent traffic separate from your personal messages and lets you decommission the agent without affecting your personal Signal account.
What You Need Before Starting
The Signal integration has more dependencies than other OpenClaw channels because it relies on signal-cli — an open-source Java application that implements the full Signal protocol. Check these off before proceeding:
- Java 17 or newer — signal-cli requires it. Run
java --versionto confirm. OpenJDK works fine. - signal-cli v0.11.6 or later — earlier versions have registration issues with the current Signal server API
- A phone number that can receive SMS or voice calls — needed for Signal registration verification
- OpenClaw gateway running and accessible — the Signal channel registers like any other channel
- Linux or macOS host — signal-cli's D-Bus mode works best on Linux; macOS users should use JSON-RPC mode instead
Sound familiar? This dependency stack is why most people give up on Signal agents. Don't. The setup is a one-time effort. Once signal-cli is running and registered, the connection is stable for months without maintenance.
Install and Configure signal-cli
Download the latest signal-cli release from GitHub. Extract it and place the binary in a location on your PATH.
# Download signal-cli (check GitHub for current version)
wget https://github.com/AsamK/signal-cli/releases/download/v0.11.6/signal-cli-0.11.6.tar.gz
tar xzf signal-cli-0.11.6.tar.gz
sudo cp -r signal-cli-0.11.6/. /opt/signal-cli/
sudo ln -s /opt/signal-cli/bin/signal-cli /usr/local/bin/signal-cli
# Verify installation
signal-cli --version
Next, register your dedicated phone number with Signal. You'll receive a verification code via SMS or voice call.
# Register the number (replace +15551234567 with your number)
signal-cli -u +15551234567 register
# Verify with the code you receive
signal-cli -u +15551234567 verify 123456
After verification, generate the trust store and keys. This creates the cryptographic material that makes Signal's encryption work on this device.
# Start signal-cli in daemon mode (JSON-RPC, recommended)
signal-cli -u +15551234567 daemon --json-rpc
Keep this process running. You'll connect OpenClaw to it. Use a process manager like systemd or supervisord to keep signal-cli alive through reboots and crashes.
Link as a Secondary Device (Alternative Registration)
If you already have Signal registered on a phone and want to link the agent as a secondary device rather than a standalone number, use the link flow instead of register.
# Generate a QR code link URI
signal-cli link -n "OpenClaw Agent"
This outputs a sgnl:// URI. Encode it as a QR code (any QR generator works), then scan it in your Signal app under Settings → Linked Devices. The device appears in your linked devices list and receives all your messages.
We'll get to the exact OpenClaw config in a moment — but first you need to understand why the mode you choose here determines how you configure the channel.
Standalone registration (register flow) gives the agent its own identity on the Signal network. Linked device (link flow) makes it a mirror of your personal account — it sees every message you send and receive. Choose standalone for dedicated agent use. Choose linked device only if you want the agent to observe your own Signal conversations.
If you link signal-cli as a secondary device on your personal Signal account, the agent receives every message from every conversation on your account — including private personal chats. Use standalone registration with a dedicated number unless you specifically want the agent to monitor your personal Signal.
OpenClaw Channel Configuration
With signal-cli running in daemon mode, add the Signal channel to your agent's configuration. Open your agent YAML file and add the channel block:
channels:
- type: signal
name: signal-private-agent
phone_number: "+15551234567"
signal_cli_socket: "/var/run/signal-cli/socket"
# For JSON-RPC mode, use the HTTP endpoint instead:
# signal_cli_url: "http://localhost:8080"
system_prompt: |
You are a private AI assistant. The user communicates with you via Signal.
Keep responses concise — Signal is a mobile interface.
max_tokens: 1024
temperature: 0.7
The type: signal tells OpenClaw which channel adapter to load. The phone_number must match the number registered with signal-cli exactly, including the country code. The socket path must match where signal-cli is listening — check your signal-cli daemon config if you're unsure.
Restart your agent after saving the config. Within a few seconds, the agent appears in your OpenClaw gateway's channel list. Send a test message from Signal to the registered number. You should get a response.
System Prompt Tuning for Signal
Signal users expect fast, mobile-friendly responses. Keep your system prompt tight. Instruct the agent to avoid markdown formatting (Signal doesn't render it). Short paragraphs, plain text, and direct answers work best. Save the detailed formatting for channels like Slack where it renders properly.
Common Mistakes That Break the Signal Integration
- Running signal-cli without a process manager — if signal-cli dies, the agent stops receiving messages silently. Always run it under systemd or supervisord with automatic restart.
- Using the wrong socket path — the socket file path in your OpenClaw config must exactly match where signal-cli is listening. A mismatch gives a cryptic connection error with no indication of the cause.
- Registering with a number that doesn't support SMS — some VoIP services block SMS from short codes, which Signal uses for verification. Test SMS reception before registering.
- Letting the registration expire — Signal accounts that go unused for extended periods can expire. Send a message through the agent at least once a month to keep the registration active.
- Forgetting to handle group message events — if your agent is added to a Signal group, it receives all group messages. Configure a group filter in the channel config if you want the agent to only respond to direct messages.
Frequently Asked Questions
Does OpenClaw Signal work with end-to-end encryption intact?
Yes. OpenClaw connects via signal-cli, which operates as a linked device using the full Signal protocol. Messages stay encrypted between your device and the agent's device. The agent decrypts locally — no plaintext ever leaves your own infrastructure unencrypted.
What is signal-cli and why does OpenClaw use it?
signal-cli is an open-source Java command-line Signal client that implements the full Signal protocol. OpenClaw uses it as the bridge to the Signal network. It handles device registration and exposes a local interface — D-Bus or JSON-RPC — that the OpenClaw channel adapter connects to.
Can I run multiple Signal agents with one phone number?
No. One Signal account maps to one phone number. For multiple agents, register separate numbers — VoIP numbers from Twilio or Google Voice work well. Each number needs its own signal-cli instance and its own OpenClaw channel configuration block.
What happens if signal-cli crashes — does the agent miss messages?
Messages sent while signal-cli is offline queue on the Signal server for several weeks. When signal-cli restarts, it fetches the backlog automatically. Configure a startup message in your agent so users know when it comes back online after a restart.
Is it legal to run a bot on Signal?
Signal's terms restrict automated accounts for mass messaging and commercial spam. Personal-use agents for your own workflows are generally acceptable. Always review Signal's current terms before deploying — they update periodically and enforcement approaches can shift.
How do I update the Signal channel config without restarting the whole gateway?
Edit the agent YAML and send a SIGHUP to the OpenClaw gateway process — it reloads channel configs without dropping connections. For signal-cli setting changes, a signal-cli restart is required, and the gateway reconnects within 30 seconds automatically.
J. Donovan has documented OpenClaw integrations across a dozen messaging platforms, with a focus on privacy-preserving architectures. Maintains personal Signal-based agent setups for legal research workflows and has tested signal-cli across Linux, macOS, and Docker environments.