{
  "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": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/signal-messenger-standalone",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=signal-messenger-standalone",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/signal-poll.sh",
      "scripts/permissions.json.txt",
      "scripts/signal-send.sh",
      "references/troubleshooting.md",
      "references/permissions.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "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."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "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."
        },
        {
          "label": "Upgrade existing",
          "body": "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."
        }
      ]
    },
    "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."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/signal-messenger-standalone",
    "agentPageUrl": "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"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "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."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "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."
      },
      {
        "label": "Upgrade existing",
        "body": "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."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Signal Integration",
        "body": "Complete Signal messenger integration with security-first contact management."
      },
      {
        "title": "Feature Overview",
        "body": "Text & voice messaging — Send and receive text messages, voice notes, images, and attachments\nRole-based permissions — Three-tier contact system (owner/trusted/untrusted) controls who can instruct your agent to execute commands, modify files, or access private information\nNew contact triage — Unknown senders are flagged for owner approval before the agent engages; prevents prompt injection via unsolicited messages\nVoice transcription — Incoming voice messages transcribed via Whisper (or any STT engine) for processing\nVoice replies — Generate spoken responses via TTS and send as audio attachments\nConversation history — Per-contact message logs with timestamps for context continuity\nTyping indicators — Shows \"typing...\" in the recipient's Signal app before sending\nRead & viewed receipts — Marks messages as read; sends \"viewed\" receipt for voice messages\nUUID contact support — Handles both phone number and UUID-based Signal contacts\nInstant wake — Triggers OpenClaw's /hooks/wake API on new messages for immediate response (no waiting for next heartbeat)\nAuto-logging — All sent and received messages logged to conversation files"
      },
      {
        "title": "Prerequisites",
        "body": "signal-cli (v0.13.x+): Java-based Signal client — github.com/AsamK/signal-cli\nffmpeg: Audio format conversion\nA phone number: For Signal registration (can be a VoIP number)\nOpenClaw hooks: For instant wake-on-message (optional but recommended)"
      },
      {
        "title": "Optional (for voice messages)",
        "body": "Whisper (or whisper.cpp): Speech-to-text transcription\nTTS engine (Coqui, Piper, or OpenClaw's built-in tts tool): Text-to-speech for voice replies"
      },
      {
        "title": "1. Install signal-cli",
        "body": "# Download latest release\nSIGNAL_CLI_VERSION=\"0.13.12\"\ncurl -L \"https://github.com/AsamK/signal-cli/releases/download/v${SIGNAL_CLI_VERSION}/signal-cli-${SIGNAL_CLI_VERSION}-Linux.tar.gz\" | tar xz\nsudo mv signal-cli-${SIGNAL_CLI_VERSION}/bin/signal-cli /usr/local/bin/\nsudo mv signal-cli-${SIGNAL_CLI_VERSION}/lib /usr/local/lib/signal-cli\n\n# Or install to user directory\nmv signal-cli-${SIGNAL_CLI_VERSION} ~/.local/share/signal-cli-install\nln -s ~/.local/share/signal-cli-install/bin/signal-cli ~/.local/bin/signal-cli\n\nRequires Java 21+: sudo apt install openjdk-21-jre-headless"
      },
      {
        "title": "2. Register a number",
        "body": "# Register with SMS verification\nsignal-cli -a +YOUR_NUMBER register\n\n# Enter the verification code\nsignal-cli -a +YOUR_NUMBER verify CODE\n\n# Set your profile name\nsignal-cli -a +YOUR_NUMBER updateProfile --given-name \"YourName\" --family-name \"Bot\""
      },
      {
        "title": "3. Configure the scripts",
        "body": "Edit scripts/signal-poll.sh and scripts/signal-send.sh:\n\nSet SIGNAL_NUMBER to your registered number\nSet SIGNAL_CLI to your signal-cli binary path\nSet STATE_DIR to your preferred state directory (default: ~/.signal-state)\nAdd known contacts to ALLOWLIST and CONTACTS in signal-poll.sh"
      },
      {
        "title": "4. Set up cron polling",
        "body": "# Poll every minute\ncrontab -e\n# Add: * * * * * /path/to/scripts/signal-poll.sh"
      },
      {
        "title": "5. Configure OpenClaw wake hook (recommended)",
        "body": "Add to your openclaw.json config:\n\n{\n  \"hooks\": {\n    \"wake\": {\n      \"enabled\": true,\n      \"token\": \"your-secret-token\"\n    }\n  }\n}\n\nThen set the same token in signal-poll.sh (WAKE_TOKEN variable) and the OpenClaw URL (WAKE_URL)."
      },
      {
        "title": "Architecture",
        "body": "signal-cli ←→ signal-poll.sh (cron every 1min)\n                  ├── Parses text + attachments\n                  ├── Logs to conversations/<sender>.log\n                  ├── Writes pending_wakes file\n                  └── POSTs to OpenClaw /hooks/wake API\n                  \nAgent (heartbeat/wake)\n  ├── Reads pending_wakes\n  ├── Reads conversation history for context\n  ├── Transcribes voice messages (Whisper)\n  ├── Generates reply (text or voice)\n  └── Sends via signal-send.sh"
      },
      {
        "title": "Sending Messages",
        "body": "# Text message\nscripts/signal-send.sh +1234567890 \"Hello!\"\n\n# With attachment\nsignal-cli -a +YOUR_NUMBER send +RECIPIENT -m \"Check this out\" -a /path/to/file\n\n# Voice message (generate TTS then send as attachment)\n# 1. Generate audio (use your TTS engine)\n# 2. Convert to m4a: ffmpeg -i voice.wav -c:a aac -b:a 64k voice.m4a\n# 3. Send: signal-cli -a +YOUR_NUMBER send +RECIPIENT -m \"\" -a voice.m4a"
      },
      {
        "title": "Receiving Messages",
        "body": "The poll script handles receiving automatically. In your HEARTBEAT.md, add:\n\n### Signal Messages (check first!)\ncat /path/to/.signal-state/pending_wakes 2>/dev/null\n\nWhen processing a wake:\n\nRead pending_wakes for new message summary\nRead conversations/<sender>.log for full context\nFor voice messages: transcribe the attachment path with Whisper\nRespond via signal-send.sh or voice attachment\nClear: > /path/to/.signal-state/pending_wakes"
      },
      {
        "title": "Transcribing incoming voice messages",
        "body": "# Convert to WAV for Whisper\nffmpeg -i /path/to/attachment.m4a -ar 16000 -ac 1 -c:a pcm_s16le /tmp/audio.wav -y\n\n# Transcribe (whisper.cpp server example)\ncurl -s http://127.0.0.1:8080/inference -F \"file=@/tmp/audio.wav\" -F \"language=en\"\n\n# Or use OpenAI Whisper, faster-whisper, etc."
      },
      {
        "title": "Sending voice replies",
        "body": "# 1. Generate speech (example with a local TTS server)\ncurl -X POST http://127.0.0.1:5002/tts \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\": \"Your message here\", \"language\": \"en\"}' \\\n  -o /tmp/voice.wav\n\n# 2. Convert to m4a for Signal\nffmpeg -i /tmp/voice.wav -c:a aac -b:a 64k /tmp/voice.m4a -y\n\n# 3. Send as attachment\nsignal-cli -a +YOUR_NUMBER send +RECIPIENT -m \"\" -a /tmp/voice.m4a"
      },
      {
        "title": "New contacts (UUID-based)",
        "body": "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.\n\n# Accept a message request\nsignal-cli -a +YOUR_NUMBER sendMessageRequestResponse --type accept UUID_OR_NUMBER\n\n# List all known identities\nsignal-cli -a +YOUR_NUMBER listIdentities"
      },
      {
        "title": "Triage workflow",
        "body": "Unknown senders are logged to .signal-state/triage.log and flagged in pending_wakes with ⚠️ NEW CONTACT. The agent should:\n\nNotify the owner about the new contact\nWait for approval before engaging\nAdd approved contacts to ALLOWLIST in signal-poll.sh"
      },
      {
        "title": "Typing Indicators & Read Receipts",
        "body": "The send script automatically shows a typing indicator before sending. The poll script sends read receipts and \"viewed\" receipts for voice messages."
      },
      {
        "title": "File Reference",
        "body": "scripts/signal-poll.sh — Cron-based message receiver with wake integration\nscripts/signal-send.sh — Send wrapper with typing indicator and conversation logging\nreferences/troubleshooting.md — Common issues and fixes"
      }
    ],
    "body": "Signal Integration\n\nComplete Signal messenger integration with security-first contact management.\n\nFeature Overview\nText & voice messaging — Send and receive text messages, voice notes, images, and attachments\nRole-based permissions — Three-tier contact system (owner/trusted/untrusted) controls who can instruct your agent to execute commands, modify files, or access private information\nNew contact triage — Unknown senders are flagged for owner approval before the agent engages; prevents prompt injection via unsolicited messages\nVoice transcription — Incoming voice messages transcribed via Whisper (or any STT engine) for processing\nVoice replies — Generate spoken responses via TTS and send as audio attachments\nConversation history — Per-contact message logs with timestamps for context continuity\nTyping indicators — Shows \"typing...\" in the recipient's Signal app before sending\nRead & viewed receipts — Marks messages as read; sends \"viewed\" receipt for voice messages\nUUID contact support — Handles both phone number and UUID-based Signal contacts\nInstant wake — Triggers OpenClaw's /hooks/wake API on new messages for immediate response (no waiting for next heartbeat)\nAuto-logging — All sent and received messages logged to conversation files\nPrerequisites\nsignal-cli (v0.13.x+): Java-based Signal client — github.com/AsamK/signal-cli\nffmpeg: Audio format conversion\nA phone number: For Signal registration (can be a VoIP number)\nOpenClaw hooks: For instant wake-on-message (optional but recommended)\nOptional (for voice messages)\nWhisper (or whisper.cpp): Speech-to-text transcription\nTTS engine (Coqui, Piper, or OpenClaw's built-in tts tool): Text-to-speech for voice replies\nSetup\n1. Install signal-cli\n# Download latest release\nSIGNAL_CLI_VERSION=\"0.13.12\"\ncurl -L \"https://github.com/AsamK/signal-cli/releases/download/v${SIGNAL_CLI_VERSION}/signal-cli-${SIGNAL_CLI_VERSION}-Linux.tar.gz\" | tar xz\nsudo mv signal-cli-${SIGNAL_CLI_VERSION}/bin/signal-cli /usr/local/bin/\nsudo mv signal-cli-${SIGNAL_CLI_VERSION}/lib /usr/local/lib/signal-cli\n\n# Or install to user directory\nmv signal-cli-${SIGNAL_CLI_VERSION} ~/.local/share/signal-cli-install\nln -s ~/.local/share/signal-cli-install/bin/signal-cli ~/.local/bin/signal-cli\n\n\nRequires Java 21+: sudo apt install openjdk-21-jre-headless\n\n2. Register a number\n# Register with SMS verification\nsignal-cli -a +YOUR_NUMBER register\n\n# Enter the verification code\nsignal-cli -a +YOUR_NUMBER verify CODE\n\n# Set your profile name\nsignal-cli -a +YOUR_NUMBER updateProfile --given-name \"YourName\" --family-name \"Bot\"\n\n3. Configure the scripts\n\nEdit scripts/signal-poll.sh and scripts/signal-send.sh:\n\nSet SIGNAL_NUMBER to your registered number\nSet SIGNAL_CLI to your signal-cli binary path\nSet STATE_DIR to your preferred state directory (default: ~/.signal-state)\nAdd known contacts to ALLOWLIST and CONTACTS in signal-poll.sh\n4. Set up cron polling\n# Poll every minute\ncrontab -e\n# Add: * * * * * /path/to/scripts/signal-poll.sh\n\n5. Configure OpenClaw wake hook (recommended)\n\nAdd to your openclaw.json config:\n\n{\n  \"hooks\": {\n    \"wake\": {\n      \"enabled\": true,\n      \"token\": \"your-secret-token\"\n    }\n  }\n}\n\n\nThen set the same token in signal-poll.sh (WAKE_TOKEN variable) and the OpenClaw URL (WAKE_URL).\n\nArchitecture\nsignal-cli ←→ signal-poll.sh (cron every 1min)\n                  ├── Parses text + attachments\n                  ├── Logs to conversations/<sender>.log\n                  ├── Writes pending_wakes file\n                  └── POSTs to OpenClaw /hooks/wake API\n                  \nAgent (heartbeat/wake)\n  ├── Reads pending_wakes\n  ├── Reads conversation history for context\n  ├── Transcribes voice messages (Whisper)\n  ├── Generates reply (text or voice)\n  └── Sends via signal-send.sh\n\nSending Messages\n# Text message\nscripts/signal-send.sh +1234567890 \"Hello!\"\n\n# With attachment\nsignal-cli -a +YOUR_NUMBER send +RECIPIENT -m \"Check this out\" -a /path/to/file\n\n# Voice message (generate TTS then send as attachment)\n# 1. Generate audio (use your TTS engine)\n# 2. Convert to m4a: ffmpeg -i voice.wav -c:a aac -b:a 64k voice.m4a\n# 3. Send: signal-cli -a +YOUR_NUMBER send +RECIPIENT -m \"\" -a voice.m4a\n\nReceiving Messages\n\nThe poll script handles receiving automatically. In your HEARTBEAT.md, add:\n\n### Signal Messages (check first!)\ncat /path/to/.signal-state/pending_wakes 2>/dev/null\n\n\nWhen processing a wake:\n\nRead pending_wakes for new message summary\nRead conversations/<sender>.log for full context\nFor voice messages: transcribe the attachment path with Whisper\nRespond via signal-send.sh or voice attachment\nClear: > /path/to/.signal-state/pending_wakes\nVoice Message Handling\nTranscribing incoming voice messages\n# Convert to WAV for Whisper\nffmpeg -i /path/to/attachment.m4a -ar 16000 -ac 1 -c:a pcm_s16le /tmp/audio.wav -y\n\n# Transcribe (whisper.cpp server example)\ncurl -s http://127.0.0.1:8080/inference -F \"file=@/tmp/audio.wav\" -F \"language=en\"\n\n# Or use OpenAI Whisper, faster-whisper, etc.\n\nSending voice replies\n# 1. Generate speech (example with a local TTS server)\ncurl -X POST http://127.0.0.1:5002/tts \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\": \"Your message here\", \"language\": \"en\"}' \\\n  -o /tmp/voice.wav\n\n# 2. Convert to m4a for Signal\nffmpeg -i /tmp/voice.wav -c:a aac -b:a 64k /tmp/voice.m4a -y\n\n# 3. Send as attachment\nsignal-cli -a +YOUR_NUMBER send +RECIPIENT -m \"\" -a /tmp/voice.m4a\n\nContact Management\nNew contacts (UUID-based)\n\nWhen someone new messages you, signal-cli may show them as a UUID (no phone number). The poll script handles both phone numbers and UUIDs.\n\n# Accept a message request\nsignal-cli -a +YOUR_NUMBER sendMessageRequestResponse --type accept UUID_OR_NUMBER\n\n# List all known identities\nsignal-cli -a +YOUR_NUMBER listIdentities\n\nTriage workflow\n\nUnknown senders are logged to .signal-state/triage.log and flagged in pending_wakes with ⚠️ NEW CONTACT. The agent should:\n\nNotify the owner about the new contact\nWait for approval before engaging\nAdd approved contacts to ALLOWLIST in signal-poll.sh\nTyping Indicators & Read Receipts\n\nThe send script automatically shows a typing indicator before sending. The poll script sends read receipts and \"viewed\" receipts for voice messages.\n\nFile Reference\nscripts/signal-poll.sh — Cron-based message receiver with wake integration\nscripts/signal-send.sh — Send wrapper with typing indicator and conversation logging\nreferences/troubleshooting.md — Common issues and fixes"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/lucksus/signal-messenger-standalone",
    "publisherUrl": "https://clawhub.ai/lucksus/signal-messenger-standalone",
    "owner": "lucksus",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "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"
  }
}