Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Full Signal messenger integration for OpenClaw agents. Send/receive text and voice messages via signal-cli with role-based permissions (owner/trusted/untrust...
Full Signal messenger integration for OpenClaw agents. Send/receive text and voice messages via signal-cli with role-based permissions (owner/trusted/untrust...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Complete Signal messenger integration with security-first contact management.
Text & voice messaging โ Send and receive text messages, voice notes, images, and attachments Role-based permissions โ Three-tier contact system (owner/trusted/untrusted) controls who can instruct your agent to execute commands, modify files, or access private information New contact triage โ Unknown senders are flagged for owner approval before the agent engages; prevents prompt injection via unsolicited messages Voice transcription โ Incoming voice messages transcribed via Whisper (or any STT engine) for processing Voice replies โ Generate spoken responses via TTS and send as audio attachments Conversation history โ Per-contact message logs with timestamps for context continuity Typing indicators โ Shows "typing..." in the recipient's Signal app before sending Read & viewed receipts โ Marks messages as read; sends "viewed" receipt for voice messages UUID contact support โ Handles both phone number and UUID-based Signal contacts Instant wake โ Triggers OpenClaw's /hooks/wake API on new messages for immediate response (no waiting for next heartbeat) Auto-logging โ All sent and received messages logged to conversation files
signal-cli (v0.13.x+): Java-based Signal client โ github.com/AsamK/signal-cli ffmpeg: Audio format conversion A phone number: For Signal registration (can be a VoIP number) OpenClaw hooks: For instant wake-on-message (optional but recommended)
Whisper (or whisper.cpp): Speech-to-text transcription TTS engine (Coqui, Piper, or OpenClaw's built-in tts tool): Text-to-speech for voice replies
# Download latest release SIGNAL_CLI_VERSION="0.13.12" curl -L "https://github.com/AsamK/signal-cli/releases/download/v${SIGNAL_CLI_VERSION}/signal-cli-${SIGNAL_CLI_VERSION}-Linux.tar.gz" | tar xz sudo mv signal-cli-${SIGNAL_CLI_VERSION}/bin/signal-cli /usr/local/bin/ sudo mv signal-cli-${SIGNAL_CLI_VERSION}/lib /usr/local/lib/signal-cli # Or install to user directory mv signal-cli-${SIGNAL_CLI_VERSION} ~/.local/share/signal-cli-install ln -s ~/.local/share/signal-cli-install/bin/signal-cli ~/.local/bin/signal-cli Requires Java 21+: sudo apt install openjdk-21-jre-headless
# Register with SMS verification signal-cli -a +YOUR_NUMBER register # Enter the verification code signal-cli -a +YOUR_NUMBER verify CODE # Set your profile name signal-cli -a +YOUR_NUMBER updateProfile --given-name "YourName" --family-name "Bot"
Edit scripts/signal-poll.sh and scripts/signal-send.sh: Set SIGNAL_NUMBER to your registered number Set SIGNAL_CLI to your signal-cli binary path Set STATE_DIR to your preferred state directory (default: ~/.signal-state) Add known contacts to ALLOWLIST and CONTACTS in signal-poll.sh
# Poll every minute crontab -e # Add: * * * * * /path/to/scripts/signal-poll.sh
Add to your openclaw.json config: { "hooks": { "wake": { "enabled": true, "token": "your-secret-token" } } } Then set the same token in signal-poll.sh (WAKE_TOKEN variable) and the OpenClaw URL (WAKE_URL).
signal-cli โโ signal-poll.sh (cron every 1min) โโโ Parses text + attachments โโโ Logs to conversations/<sender>.log โโโ Writes pending_wakes file โโโ POSTs to OpenClaw /hooks/wake API Agent (heartbeat/wake) โโโ Reads pending_wakes โโโ Reads conversation history for context โโโ Transcribes voice messages (Whisper) โโโ Generates reply (text or voice) โโโ Sends via signal-send.sh
# Text message scripts/signal-send.sh +1234567890 "Hello!" # With attachment signal-cli -a +YOUR_NUMBER send +RECIPIENT -m "Check this out" -a /path/to/file # Voice message (generate TTS then send as attachment) # 1. Generate audio (use your TTS engine) # 2. Convert to m4a: ffmpeg -i voice.wav -c:a aac -b:a 64k voice.m4a # 3. Send: signal-cli -a +YOUR_NUMBER send +RECIPIENT -m "" -a voice.m4a
The poll script handles receiving automatically. In your HEARTBEAT.md, add: ### Signal Messages (check first!) cat /path/to/.signal-state/pending_wakes 2>/dev/null When processing a wake: Read pending_wakes for new message summary Read conversations/<sender>.log for full context For voice messages: transcribe the attachment path with Whisper Respond via signal-send.sh or voice attachment Clear: > /path/to/.signal-state/pending_wakes
# Convert to WAV for Whisper ffmpeg -i /path/to/attachment.m4a -ar 16000 -ac 1 -c:a pcm_s16le /tmp/audio.wav -y # Transcribe (whisper.cpp server example) curl -s http://127.0.0.1:8080/inference -F "file=@/tmp/audio.wav" -F "language=en" # Or use OpenAI Whisper, faster-whisper, etc.
# 1. Generate speech (example with a local TTS server) curl -X POST http://127.0.0.1:5002/tts \ -H "Content-Type: application/json" \ -d '{"text": "Your message here", "language": "en"}' \ -o /tmp/voice.wav # 2. Convert to m4a for Signal ffmpeg -i /tmp/voice.wav -c:a aac -b:a 64k /tmp/voice.m4a -y # 3. Send as attachment signal-cli -a +YOUR_NUMBER send +RECIPIENT -m "" -a /tmp/voice.m4a
When someone new messages you, signal-cli may show them as a UUID (no phone number). The poll script handles both phone numbers and UUIDs. # Accept a message request signal-cli -a +YOUR_NUMBER sendMessageRequestResponse --type accept UUID_OR_NUMBER # List all known identities signal-cli -a +YOUR_NUMBER listIdentities
Unknown senders are logged to .signal-state/triage.log and flagged in pending_wakes with โ ๏ธ NEW CONTACT. The agent should: Notify the owner about the new contact Wait for approval before engaging Add approved contacts to ALLOWLIST in signal-poll.sh
The send script automatically shows a typing indicator before sending. The poll script sends read receipts and "viewed" receipts for voice messages.
scripts/signal-poll.sh โ Cron-based message receiver with wake integration scripts/signal-send.sh โ Send wrapper with typing indicator and conversation logging references/troubleshooting.md โ Common issues and fixes
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.