# Send Signal messaging for standalone bots/accounts to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "signal-messenger-standalone",
    "name": "Signal messaging for standalone bots/accounts",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/lucksus/signal-messenger-standalone",
    "canonicalUrl": "https://clawhub.ai/lucksus/signal-messenger-standalone",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/signal-messenger-standalone",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=signal-messenger-standalone",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md",
      "scripts/signal-poll.sh",
      "scripts/permissions.json.txt",
      "scripts/signal-send.sh",
      "references/troubleshooting.md",
      "references/permissions.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/signal-messenger-standalone"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/signal-messenger-standalone",
    "downloadUrl": "https://openagent3.xyz/downloads/signal-messenger-standalone",
    "agentUrl": "https://openagent3.xyz/skills/signal-messenger-standalone/agent",
    "manifestUrl": "https://openagent3.xyz/skills/signal-messenger-standalone/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/signal-messenger-standalone/agent.md"
  }
}
```
## Documentation

### Signal Integration

Complete Signal messenger integration with security-first contact management.

### Feature Overview

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

### Prerequisites

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)

### Optional (for voice messages)

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

### 1. Install signal-cli

# 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

### 2. Register a number

# 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"

### 3. Configure the scripts

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

### 4. Set up cron polling

# Poll every minute
crontab -e
# Add: * * * * * /path/to/scripts/signal-poll.sh

### 5. Configure OpenClaw wake hook (recommended)

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).

### Architecture

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

### Sending Messages

# 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

### Receiving Messages

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

### Transcribing incoming voice messages

# 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.

### Sending voice replies

# 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

### New contacts (UUID-based)

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

### Triage workflow

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

### Typing Indicators & Read Receipts

The send script automatically shows a typing indicator before sending. The poll script sends read receipts and "viewed" receipts for voice messages.

### File Reference

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
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: lucksus
- Version: 1.0.0
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-05-07T17:22:31.273Z
- Expires at: 2026-05-14T17:22:31.273Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/signal-messenger-standalone)
- [Send to Agent page](https://openagent3.xyz/skills/signal-messenger-standalone/agent)
- [JSON manifest](https://openagent3.xyz/skills/signal-messenger-standalone/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/signal-messenger-standalone/agent.md)
- [Download page](https://openagent3.xyz/downloads/signal-messenger-standalone)