Connecting OpenClaw to Signal with signal-cli
Signal has no bot API, so your agent gets its own number. Dedicated number vs linked device, the registration steps, and the deauth trap to avoid.
OpenClaw talks to Signal through signal-cli — there’s no official bot API, so your agent needs a Signal account of its own. The clean setup is a dedicated phone number registered via signal-cli register (SMS-verified), with OpenClaw managing the daemon (transport.kind: "managed-native"). Privacy-wise it’s the best mainstream channel; setup-wise it’s the fiddliest of the big three.
How it works (and why a phone number is involved)
Signal has no bot platform — every participant is a phone-number account. OpenClaw doesn’t reimplement Signal’s protocol; it drives signal-cli over HTTP, either the native daemon or the community REST container. Two account strategies exist, and the choice matters:
- Dedicated bot number (recommended): a cheap second number, registered with
signal-cli registerand verified by SMS. Your agent is a normal contact, cleanly separate from you. - Linked device on your own account:
signal-cli link+ a QR scan, like Signal Desktop. Quicker — but the sharp edge is the reverse path: registering (not linking) a number that’s active in your Signal app can de-authenticate your main app session. If a number matters to you, link, don’t register.
The config, minimally
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
transport: { kind: "managed-native", cliPath: "signal-cli" },
dmPolicy: "pairing",
},
},
}managed-native means OpenClaw starts and supervises the signal-cli daemon itself; use external-native or container with a transport.url if you run it separately. Unknown senders get the standard pairing code (approve with openclaw pairing approve signal <CODE> within the hour), groups are allowlist-first, and mention-gating per group is available — the same access model as every other OpenClaw channel, which is exactly the point of the design.
Expectations worth setting
- Outbound text chunks at 4,000 characters; attachments default to an 8 MB cap — tighter than other channels, so file-heavy workflows may prefer a different channel.
- Read receipts only surface for DMs —
signal-clidoesn’t expose them for groups. - Registration sometimes demands a captcha URL; that’s normal, not a block.
Where Signal fits among the channels
Choose Signal when end-to-end encryption and metadata restraint are the point — it’s the channel we’d pick for an agent that discusses anything sensitive. Choose Telegram when you want the five-minute setup with a real bot API, or WhatsApp when that’s simply where your conversations already live. All three ride the same pairing and allowlist model underneath, so switching later costs a setup afternoon, not a migration.