The Signal channel connects NullClaw to Signal Messenger using the signal-cli daemon’s HTTP/JSON-RPC API for maximum privacy and security.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/nullclaw/nullclaw/llms.txt
Use this file to discover all available pages before exploring further.
Features
- End-to-end encrypted messaging
- Group chat support
- Allowlist-based access control
- UUID and phone number support
- Configurable group policies
- Real-time message delivery via Server-Sent Events (SSE)
- Typing indicators
- Attachment handling
Prerequisites
You must have signal-cli installed and running in daemon mode:Configuration
Add Signal to yourconfig.json:
Configuration Options
Base URL of the signal-cli daemon (e.g.,
http://127.0.0.1:8080). Trailing slashes are automatically stripped.Your Signal account phone number in E.164 format (e.g.,
+1234567890)List of allowed senders (phone numbers or UUIDs). Empty list = deny all (secure by default).Formats:
- Phone:
"+1234567890" - UUID:
"uuid:a1b2c3d4-5678-90ab-cdef-1234567890ab" - Wildcard:
"*"(not recommended)
Senders allowed in group chats when
group_policy is "allowlist". If empty, falls back to allow_from.Group message handling:
"open"— Respond to all group messages"allowlist"— Only respond to senders ingroup_allow_from"disabled"— Ignore all group messages
Skip messages that contain only attachments with no text content
Ignore Signal story posts
Account identifier for multi-account setups
Setup Guide
Register Your Phone Number
Get Sender UUIDs or Phone Numbers
From your Signal app, share your contact information with someone who will send messages to the bot. You can use:
- Phone numbers (e.g.,
+1234567890) - UUIDs from signal-cli logs when messages arrive
Group Chat Support
NullClaw supports Signal group chats with configurable policies:Allowlist-Based Groups
Open Groups
Disabled Groups
UUID vs Phone Number
Signal supports both phone numbers and UUIDs for identification: Phone numbers (E.164 format):Message Limits
Signal has no strict character limit, but NullClaw chunks messages at 4096 characters for optimal UX.Attachment Handling
By default, NullClaw ignores attachment-only messages:false to process messages with attachments. Attachment content is not passed to the agent (only text).
Running as a System Service
systemd (Linux)
Create/etc/systemd/system/signal-cli.service:
launchd (macOS)
Create~/Library/LaunchAgents/com.signal-cli.daemon.plist:
Troubleshooting
Daemon Not Starting
- Verify signal-cli is installed:
signal-cli --version - Check that phone number is registered:
signal-cli -u +1234567890 listIdentities - Ensure port 8080 is not in use:
lsof -i :8080 - Check daemon logs for errors
Messages Not Received
- Verify daemon is running:
curl http://127.0.0.1:8080/api/v1/check - Check sender is in
allow_fromlist - Verify phone number format is E.164 (
+prefix, country code) - For groups, check
group_policyandgroup_allow_from - Review NullClaw logs:
nullclaw --log-level debug
Connection Refused
- Verify
http_urlmatches daemon address (default:http://127.0.0.1:8080) - Check firewall rules if daemon is on remote host
- Ensure daemon is listening on correct interface (not just localhost if remote)
UUID Mismatches
- UUIDs change when users reset their Signal account
- Check signal-cli logs for current sender UUIDs
- Update
allow_fromwith new UUIDs as needed
Source Code
Implementation:src/channels/signal.zig