Signal
WednesdayAI connects to Signal via signal-cli, an external CLI tool that the gateway manages as a child process. You need a Signal-capable phone number (or a linked Signal account) to use this channel.Prerequisites
- signal-cli installed on the gateway host
- A phone number that can receive SMS (or Signal QR linking to an existing account)
- Java Runtime Environment (JRE 25+) if using the JVM build of signal-cli, or the native binary
Install signal-cli
Setup path A: Link existing Signal account (QR)
Use this if you want to connect your existing Signal account to the bot without registering a new number.Setup path B: Register a dedicated bot number (recommended)
Use a separate phone number for the bot — this avoids de-authenticating your personal Signal account.Access control
Using an external signal-cli daemon
If you prefer to manage signal-cli separately (not auto-spawned by the gateway):Receive mode
on-start (default) begins consuming the signal-cli event stream at gateway startup. manual defers stream consumption — useful when running signal-cli as a separate long-lived daemon and managing start/stop externally.
Message behavior
Reaction handling
Group message handling
Delivery receipts
Safety number changes
Delivery settings
| Key | Type | Default | Description |
|---|---|---|---|
textChunkLimit | integer | 4000 | Maximum characters per outbound message chunk |
chunkMode | string | "length" | length splits at character count; newline splits at paragraph boundaries |
chunkNewlinePacking | boolean | true | When chunkMode: "newline", packs multiple paragraphs into a single chunk up to the limit |
historyLimit | integer | 50 | Number of prior messages injected as group context (0 = disabled) |
dmHistoryLimit | integer | 0 | Number of prior messages injected as DM context (0 = disabled) |
reactionLevel | string | "minimal" | off | ack | minimal | extensive — controls how much the bot reacts to messages |
ignoreAttachments | boolean | false | When true, inbound attachments are ignored and not passed to the agent |
ignoreStories | boolean | false | When true, ignores inbound Signal story notifications |
startupTimeoutMs | integer | 30000 | Milliseconds to wait for signal-cli to start before treating it as a failure |
sendReadReceipts | boolean | true | Send Signal read receipts to message senders |
If
startupTimeoutMs is exceeded, the channel will fail to start and log a timeout error. Increase this value on slow systems or when using the JVM build of signal-cli.Troubleshooting
signal-cli not found
signal-cli not found
Check that
signal-cli is in PATH: which signal-cliUpdate cliPath in config if installed to a non-standard location:DMs ignored / no reply
DMs ignored / no reply
- Check pairing:
openclaw pairing list signal - Verify the account is registered:
signal-cli -a +15551234567 listIdentities - Check logs:
openclaw logs --follow | grep signal
Registration fails with captcha error
Registration fails with captcha error
Complete the captcha at https://signalcaptchas.org/registration/generate.html and pass the
signalcaptcha:// URL to the register command.Channel fails to start / timeout error in logs
Channel fails to start / timeout error in logs
signal-cli is taking longer than
startupTimeoutMs (default 30 000 ms) to become ready. This is common on slow systems or when using the JVM build. Increase the timeout: