Signal (signal-cli)
Status: external CLI integration. Gateway talks tosignal-cli over HTTP JSON-RPC + SSE.
What it is
- Signal provider via
signal-cli(not embedded libsignal). - Deterministic routing: replies always go back to Signal.
- DMs share the agent’s main session; groups are isolated (
signal:group:<groupId>).
The number model (important)
- The gateway connects to a Signal device (the
signal-cliaccount). - If you run the bot on your personal Signal account, it will ignore your own messages (loop protection).
- For “I text the bot and it replies,” use a separate bot number.
Setup (fast path)
- Install
signal-cli(Java required). - Link a bot account:
signal-cli link -n "Clawdbot"then scan the QR in Signal.
- Configure Signal and start the gateway.
signal.accounts with per-account config and optional name. See gateway/configuration for the shared pattern.
Access control (DMs + groups)
DMs:- Default:
signal.dmPolicy = "pairing". - Unknown senders receive a pairing code; messages are ignored until approved (codes expire after 1 hour).
- Approve via:
clawdbot pairing list --provider signalclawdbot pairing approve --provider signal <CODE>
- Pairing is the default token exchange for Signal DMs. Details: Pairing
- UUID-only senders (from
sourceUuid) are stored asuuid:<id>insignal.allowFrom.
signal.groupPolicy = open | allowlist | disabled.signal.groupAllowFromcontrols who can trigger in groups whenallowlistis set.
How it works (behavior)
signal-cliruns as a daemon; the gateway reads events via SSE.- Inbound messages are normalized into the shared provider envelope.
- Replies always route back to the same number or group.
Media + limits
- Outbound text is chunked to
signal.textChunkLimit(default 4000). - Attachments supported (base64 fetched from
signal-cli). - Default media cap:
signal.mediaMaxMb(default 8). - Use
signal.ignoreAttachmentsto skip downloading media.
Delivery targets (CLI/cron)
- DMs:
signal:+15551234567(or plain E.164). - Groups:
signal:group:<groupId>. - Usernames:
username:<name>(if supported by your Signal account).
Configuration reference (Signal)
Full configuration: Configuration Provider options:signal.enabled: enable/disable provider startup.signal.account: E.164 for the bot account.signal.cliPath: path tosignal-cli.signal.httpUrl: full daemon URL (overrides host/port).signal.httpHost,signal.httpPort: daemon bind (default 127.0.0.1:8080).signal.autoStart: auto-spawn daemon (default true ifhttpUrlunset).signal.receiveMode:on-start | manual.signal.ignoreAttachments: skip attachment downloads.signal.ignoreStories: ignore stories from the daemon.signal.sendReadReceipts: forward read receipts.signal.dmPolicy:pairing | allowlist | open | disabled(default: pairing).signal.allowFrom: DM allowlist (E.164 oruuid:<id>).openrequires"*".signal.groupPolicy:open | allowlist | disabled(default: open).signal.groupAllowFrom: group sender allowlist.signal.textChunkLimit: outbound chunk size (chars).signal.mediaMaxMb: inbound/outbound media cap (MB).
routing.groupChat.mentionPatterns(Signal does not support native mentions).- Multi-agent override:
routing.agents.<agentId>.mentionPatternstakes precedence. messages.responsePrefix.