Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Telnyx: TELNYX_API_KEY env var, or falls back to ~/.claude.json (already configured)
Twilio: TWILIO_ACCOUNT_SID + TWILIO_AUTH_TOKEN env vars, or falls back to hardcoded defaults
Quick Start
# Send a text
python3 ~/.claude/skills/sms/scripts/sms_send.py "+19175551234""Hello from Claude"# Read recent messages
python3 ~/.claude/skills/sms/scripts/sms_read.py -n 10
# View conversation with someone
python3 ~/.claude/skills/sms/scripts/sms_conversation.py "+19175551234"
python3 ~/.claude/skills/sms/scripts/sms_numbers.py
python3 ~/.claude/skills/sms/scripts/sms_listen.py --
python3 ~/.claude/skills/sms/scripts/sms_inbox.py
# List all available numbers
# Start real-time listener (background)
bg
# Check inbound messages
Available Scripts
1. sms_send.py — Send SMS/MMS
python3 ~/.claude/skills/sms/scripts/sms_send.py TO "MESSAGE" [OPTIONS]
Flag
Description
--from NUMBER
Send from a specific number (auto-detects provider)
--provider telnyx|twilio
Force a specific provider
--media URL
Attach media for MMS
Examples:
# Send via Telnyx (default)
python3 ~/.claude/skills/sms/scripts/sms_send.py "+19175551234""Meeting at 3pm"# Send from a Twilio number
python3 ~/.claude/skills/sms/scripts/sms_send.py "+19175551234""Hello" --from "+18508058037"# Send MMS with image
python3 ~/.claude/skills/sms/scripts/sms_send.py "+19175551234""Check this" --media "https://example.com/photo.jpg"
# Read last 10 messages (Twilio recommended for reads)
python3 ~/.claude/skills/sms/scripts/sms_read.py -n 10 --provider twilio
# Messages to a specific number
python3 ~/.claude/skills/sms/scripts/sms_read.py --to "+18508058037" --provider twilio
# Only inbound messages
python3 ~/.claude/skills/sms/scripts/sms_read.py --direction inbound --provider twilio
# Query both providers
python3 ~/.claude/skills/sms/scripts/sms_read.py --all-providers -n 20
3. sms_conversation.py — View Conversation Thread
python3 ~/.claude/skills/sms/scripts/sms_conversation.py NUMBER [OPTIONS]
Flag
Description
-n/--limit NUM
Max messages per direction (default: 20)
--our-number NUMBER
Filter to a specific one of our numbers
--provider telnyx|twilio
Query specific provider
--all-providers
Query both providers
Examples:
# View conversation with a number
python3 ~/.claude/skills/sms/scripts/sms_conversation.py "+19175551234" --provider twilio
# Limit to last 10 messages per direction
python3 ~/.claude/skills/sms/scripts/sms_conversation.py "+19175551234" -n 10 --provider twilio
# Filter to a specific one of our numbers
python3 ~/.claude/skills/sms/scripts/sms_conversation.py "+19175551234" --our-number "+18508058037"
# List all 8 numbers
python3 ~/.claude/skills/sms/scripts/sms_numbers.py
# Twilio numbers only
python3 ~/.claude/skills/sms/scripts/sms_numbers.py --provider twilio
# Live API status check
python3 ~/.claude/skills/sms/scripts/sms_numbers.py --live
5. sms_listen.py — Real-Time Inbound Listener
Background daemon that polls Twilio for new inbound messages and runs a webhook server for Telnyx inbound. Messages are written to data/inbox.jsonl.
# Start listener in background
python3 ~/.claude/skills/sms/scripts/sms_listen.py --bg# Check status
python3 ~/.claude/skills/sms/scripts/sms_listen.py --status
# Stop listener
python3 ~/.claude/skills/sms/scripts/sms_listen.py --stop
# Monitor only the Aldea production number, poll every 5s
python3 ~/.claude/skills/sms/scripts/sms_listen.py --bg --numbers +18557066006 --interval 5
# Telnyx webhook only (no Twilio polling)
python3 ~/.claude/skills/sms/scripts/sms_listen.py --bg --no-twilio
Telnyx webhook setup: Point your Telnyx Messaging Profile webhook URL to http://localhost:9147/telnyx. For remote access, use ngrok or similar tunnel.
6. Auto-Reply — Two Modes
Mode A: /sms-respond Slash Command (Interactive)
Process unhandled SMS using the current Claude Code session as the LLM. No subprocess needed—follows the same pattern as /slack-respond.
/sms-respond # Process all unhandled messages
/sms-respond 2 # Process only message #2 from inbox
The slash command loads inbox, soul.md, and memory context dynamically, then walks through a 6-step cognitive pipeline (internal monologue → external dialogue → user model check → user model update → soul state check → soul state update). Replies are sent via sms_send.py and all memory layers are updated.
The command also starts a background watcher (sms_watch.py) after processing, which polls for new inbound messages every 5 seconds and notifies the session when one arrives—creating a continuous two-way SMS loop.
Use this when: You're in an active Claude Code session and want to reply to SMS.
Mode B: sms_respond.py Daemon (Standalone)
Standalone daemon for Mac Mini or headless deployment. Uses claude -p subprocess to generate responses. Does not work from within a running Claude Code session (subprocess nesting conflict).
Use this when: Running headless on Mac Mini or outside Claude Code.
Shared Infrastructure
Both modes require sms_listen.py running to feed inbox.jsonl.
Memory: 3-tier SQLite at data/sms_memory.db:
Working memory — per-conversation message history + cognitive outputs
User models — per-phone-number personality profiles
Soul memory — cross-conversation soul state
7. sms_watch.py — Background Watcher for Claude Code
Polls inbox.jsonl for new unhandled messages. Designed as a run_in_background bash task—exits when a new message is detected, printing a structured line for Claude Code to parse.
On detect, also print sender's memory context (user model, soul state, recent conversation)
Output on detect: {"event": "NEW_SMS", "id": "...", "from": "...", "to": "...", "body": "..."}Output on detect with --enrich: Same JSON line, followed by ---MEMORY_CONTEXT--- and the sender's user model, soul state, and recent conversation history.
Output on timeout/kill: NO_NEW_SMS
Examples:
# Start watcher (run as background task in Claude Code)
python3 ~/.claude/skills/sms/scripts/sms_watch.py
# Enriched mode — pre-loads memory context for faster processing
python3 ~/.claude/skills/sms/scripts/sms_watch.py --enrich
# Faster polling
python3 ~/.claude/skills/sms/scripts/sms_watch.py --interval 3
8. sms_process_reply.py — Batch Reply Processor
Sends SMS reply and performs all 9 memory operations in a single call. Replaces the 9 separate python3 -c invocations from the /sms-respond pipeline.
# Show unhandled messages
python3 ~/.claude/skills/sms/scripts/sms_inbox.py
# Show last 5 messages from a specific sender
python3 ~/.claude/skills/sms/scripts/sms_inbox.py --from "+17327595647" -n 5
# Mark all as read
python3 ~/.claude/skills/sms/scripts/sms_inbox.py --mark-all-read
Configuration
Provider Auto-Detection
When you use --from, the skill detects the provider by matching against known numbers:
All sent messages are automatically logged to ~/.claude/skills/sms/data/messages.jsonl (JSONL format). This enables:
Telnyx conversation history: Since Telnyx is send-only (no REST API for reading messages), the local log provides the only record of Telnyx messages.
Offline message browsing: Read/conversation scripts automatically fall back to the local log when Telnyx API returns 404.
Per-number history: Filter by any phone number to see all correspondences.
The log grows with each sent message. To reset, delete data/messages.jsonl.
Known Limitations
Telnyx is send-only: Telnyx has no GET /v2/messages endpoint — message receiving is webhook-based only. Sent messages are tracked via the local log. For full read/conversation capability, use --provider twilio or --all-providers.