بنقرة واحدة
add-signal
Add Signal channel integration via signal-cli TCP daemon. Native adapter — no Chat SDK bridge.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Add Signal channel integration via signal-cli TCP daemon. Native adapter — no Chat SDK bridge.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Access comprehensive financial data - stocks, crypto, SEC filings, financial statements, and news via Financial Datasets API. Use for market research, fundamental analysis, and financial insights.
NanoClawd Wallet: self-custodial Solana wallet built into this agent. Every agent gets a unique keypair at birth, stored in its private workspace. Supports SOL transfers, SPL token balances, and token swaps via Jupiter v6. Use for on-chain payments, DeFi swaps, balance checks, and Solana interactions.
Add Bux browser agent to NanoClawd — gives a Clawd agent a real persistent Chromium session via Browser Use Cloud, plus agency Telegram action cards. Use when the user wants their agent to browse the web with a real browser (cookies persist, logins stick) or handle 2FA/CAPTCHA hand-off.
Integrate the OpenClawd Framework (sovereign lobster agents on Solana) into NanoClawd. Wires the Framework's pulse loop, identity, survival mechanics, and $CLAWD token payments into NanoClawd agent groups. Use when setting up a fully sovereign Clawd agent with on-chain identity, self-funding, and autonomous operation.
Launch an Upstash Box pre-packaged with NanoClawd and a Solana wallet at birth. Provisions a cloud box, clones NanoClawd, generates a Solana keypair, configures credentials, and starts the agent — wallet-at-birth, ready to be sovereign. Use when the user wants a one-command cloud NanoClawd deploy with on-chain identity from spawn.
Dark Ralph OODA Loop v0 — paper-trading, devnet-only, stdlib-Python agent that runs a safety-contract OODA cycle (Observe→Orient→Decide→Act) for Pump.fun bonding curves. Zero external deps, kill-switch on consecutive losses.
| name | add-signal |
| description | Add Signal channel integration via signal-cli TCP daemon. Native adapter — no Chat SDK bridge. |
Adds Signal messaging support via a native adapter that speaks JSON-RPC to a signal-cli TCP daemon. No Chat SDK bridge — only Node.js builtins (node:net, node:child_process, node:fs).
Unlike Telegram or Discord, Signal has no bot API. NanoClawd registers as a full Signal account on a dedicated phone number (recommended) or links as a secondary device on your existing number.
signal-cli requires Java 17+:
java -version
If missing:
brew install --cask temurin@17sudo apt-get install -y default-jresudo dnf install -y java-17-openjdkJava 17–25 all work.
brew install signal-cliSIGNAL_CLI_VERSION=$(curl -fsSL https://api.github.com/repos/AsamK/signal-cli/releases/latest | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'][1:])")
curl -fsSL "https://github.com/AsamK/signal-cli/releases/download/v${SIGNAL_CLI_VERSION}/signal-cli-${SIGNAL_CLI_VERSION}-Linux-native.tar.gz" \
| tar -xz -C ~/.local
ln -sf ~/.local/signal-cli ~/.local/bin/signal-cli
signal-cli --version
The Linux native tarball extracts a single binary directly to
~/.local/signal-cli(not into a subdirectory). The symlink above puts it on PATH.
Two paths. The new-number path is recommended and battle-tested.
Use a dedicated SIM or VoIP number. NanoClawd owns it entirely.
VoIP numbers: Signal requires SMS verification before voice. Some VoIP providers are blocked even for voice calls. If registration fails with an auth error, try a different provider or a physical SIM.
Step 1: Solve the CAPTCHA
Signal requires a CAPTCHA on first registration:
https://signalcaptchas.org/registration/generate.html in a browsersignalcaptcha:// — the token is everything after that prefixStep 2: Request SMS verification
signal-cli -a +1YOURNUMBER register --captcha "PASTE_TOKEN_HERE"
Step 3: Voice call fallback (if your number can't receive SMS)
Wait ~60 seconds after the SMS request, then:
signal-cli -a +1YOURNUMBER register --voice --captcha "SAME_TOKEN"
Signal calls your number and reads a 6-digit code. The same captcha token is reusable — no need to solve a new one.
You must request SMS first. Requesting voice immediately fails with
Invalid verification method: Before requesting voice verification…
Step 4: Verify
signal-cli -a +1YOURNUMBER verify CODE
No output = success.
Step 5: Set profile name (optional)
⚠ Stop NanoClawd before running signal-cli commands — the daemon holds an exclusive lock on its data directory while running.
# macOS
launchctl unload ~/Library/LaunchAgents/com.nanoclawd.plist
signal-cli -a +1YOURNUMBER updateProfile --name "YourBotName"
# optionally: --avatar /path/to/avatar.jpg
launchctl load ~/Library/LaunchAgents/com.nanoclawd.plist
# Linux
systemctl --user stop nanoclawd
signal-cli -a +1YOURNUMBER updateProfile --name "YourBotName"
systemctl --user start nanoclawd
Joins an existing Signal account as a secondary device. Simpler, but NanoClawd shares your personal number.
signal-cli -a +1YOURNUMBER link --name "NanoClawd"
This prints a tsdevice: URI. Scan it as a QR code on your phone: Settings → Linked Devices → Link New Device. QR codes expire in ~30 seconds — re-run if it expires.
Skip to Credentials if all of these are already in place:
src/channels/signal.ts and src/channels/signal.test.ts both existsrc/channels/index.ts contains import './signal.js';Otherwise continue. Every step below is safe to re-run.
git fetch origin channels
git show origin/channels:src/channels/signal.ts > src/channels/signal.ts
git show origin/channels:src/channels/signal.test.ts > src/channels/signal.test.ts
Append to src/channels/index.ts (skip if the line is already present):
import './signal.js';
pnpm run build
No npm packages to install — the adapter uses only Node.js builtins.
Add to .env:
SIGNAL_ACCOUNT=+1YOURNUMBER
# TCP daemon host and port (default: 127.0.0.1:7583)
SIGNAL_TCP_HOST=127.0.0.1
SIGNAL_TCP_PORT=7583
# Path to the signal-cli binary (default: resolved on PATH)
SIGNAL_CLI_PATH=/usr/local/bin/signal-cli
# Whether NanoClawd manages the daemon lifecycle (default: true).
# Set to false if you run signal-cli daemon externally.
SIGNAL_MANAGE_DAEMON=true
# signal-cli data directory (default: ~/.local/share/signal-cli)
SIGNAL_DATA_DIR=~/.local/share/signal-cli
Security note: keep the TCP host on 127.0.0.1. The daemon has no auth — binding it to a public interface would expose your full Signal account to the network.
Sync to container: mkdir -p data/env && cp .env data/env/env
# macOS
launchctl kickstart -k gui/$(id -u)/com.nanoclawd
# Linux
systemctl --user restart nanoclawd
After the service starts, send any message to the Signal number from your personal Signal app. The router auto-creates a messaging_groups row. Then:
pnpm exec tsx scripts/q.ts data/v2.db \
"SELECT id, platform_id FROM messaging_groups WHERE channel_type='signal' ORDER BY created_at DESC LIMIT 5"
Pass the id to /init-first-agent or /manage-channels to wire it to an agent group.
Add the Signal number to a group from your phone, send any message, then wire the resulting row the same way. For isolated per-group sessions:
NOW=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
pnpm exec tsx scripts/q.ts data/v2.db "
INSERT OR IGNORE INTO messaging_group_agents
(id, messaging_group_id, agent_group_id, session_mode, priority, created_at)
VALUES
('mga-'||hex(randomblob(8)), 'mg-GROUPID', 'ag-AGENTID', 'isolated', 0, '$NOW');
"
New Signal users (including the owner's Signal identity) are silently dropped with not_member until granted access. After the user's first message appears in messaging_groups:
NOW=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
pnpm exec tsx scripts/q.ts data/v2.db "
INSERT OR REPLACE INTO user_roles (user_id, role, agent_group_id, granted_by, granted_at)
VALUES ('signal:UUID', 'owner', NULL, 'system', '$NOW');
INSERT OR IGNORE INTO agent_group_members (user_id, agent_group_id, added_by, added_at)
VALUES ('signal:UUID', 'ag-AGENTID', 'system', '$NOW');
"
Find the UUID from messaging_groups.platform_id or the users table.
If you're in the middle of /setup, return to the setup flow now.
Otherwise, run /init-first-agent to create an agent and wire it to your Signal DM, or /manage-channels to wire this channel to an existing agent group.
signalsignal:{UUID} — sender's Signal UUID (ACI), not their phone numbersignal:{base64GroupId} — base64-encoded GroupV2 IDmessaging_groups as shown aboveisolated session mode**bold**, *italic* / _italic_, `code`, ```code fence```, ~~strike~~, ||spoiler|| (converted to Signal's offset-based text styles)replyTo* fields populated from Signal quotes(platformId, text) within a 10 s TTL to avoid syncMessage loopsisFromMe: true[Voice Message] placeholder text. Run /add-voice-transcription for local transcription via parakeet-mlxNot supported yet: outbound file attachments (logged and dropped), edit/delete messages, reactions.
grep "Signal" logs/nanoclawd.log | tail
If you see Signal daemon failed to start. Is signal-cli installed and your account linked?:
signal-cli is on PATH (or set SIGNAL_CLI_PATH)signal-cli -a +1YOURNUMBER listIdentities should succeed without promptingIf you see Signal daemon not reachable at 127.0.0.1:7583 and SIGNAL_MANAGE_DAEMON=false, start the daemon yourself: signal-cli -a +1YOURNUMBER daemon --tcp 127.0.0.1:7583.
grep "Signal channel connected" logs/nanoclawd.log | tail -1pnpm exec tsx scripts/q.ts data/v2.db "SELECT mg.platform_id, mg.name FROM messaging_groups mg JOIN messaging_group_agents mga ON mg.id = mga.messaging_group_id WHERE mg.channel_type='signal'"launchctl print gui/$(id -u)/com.nanoclawd (macOS) / systemctl --user status nanoclawd (Linux)logs/nanoclawd.error.log shows No adapter for channel type channelType="signal" despite the adapter starting, two NanoClawd processes are racing. See the /debug skill section "No adapter for channel type / Messages silently lost" for the full fix.Signal responses show platformMsgId=undefined in the main log. This means the delivery poll ran but found no adapter — likely a duplicate service instance issue (see above). Affected messages cannot be retried; the user must resend.
If you see Signal channel lost TCP connection to signal-cli daemon in the logs, the daemon dropped the connection. Restart the service to re-establish.
not_memberThe Signal user hasn't been granted membership. See "Grant user access" above. This affects every new Signal user, including the owner's Signal identity — which is a separate user record from their identity on other channels even if it's the same person.
Signal requires a captcha for new registrations. Go to https://signalcaptchas.org/registration/generate.html, solve it, right-click "Open Signal", copy the link, extract the token after signalcaptcha://.
Invalid verification method: Before requesting voice verification…You must request SMS first, wait ~60 seconds, then request voice. Both steps can use the same captcha token.
signal-cli holds an exclusive lock on its data directory while the daemon is running. Stop NanoClawd before running any signal-cli commands directly, then restart afterward.
Modern Signal groups use GroupV2. The adapter must extract the group ID from envelope?.dataMessage?.groupV2?.id — not groupInfo?.groupId, which is GroupV1/legacy. If group messages are routing as DMs, check src/channels/signal.ts and confirm the groupId extraction falls through to groupV2.id.
Install Java 17+ — see the Prerequisites section above.
QR codes expire in ~30 seconds. Re-run the link command to generate a new one.