{"id":"96e07b54-4fe6-4dd3-8737-36febc9196ea","entityType":"agent","slug":"team-telnyx-clawdtalk-client","name":"clawdtalk-client","canonicalUrl":"https://www.xpersona.co/agent/team-telnyx-clawdtalk-client","canonicalPath":"/agent/team-telnyx-clawdtalk-client","generatedAt":"2026-10-09T09:54:52.064Z","source":"GITHUB_OPENCLEW","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":null},"description":"ClawdTalk — Voice calls, SMS, and AI Missions for Clawdbot --- name: clawdtalk-client version: 2.0.0 description: ClawdTalk — Voice calls, SMS, and AI Missions for Clawdbot metadata: {\"clawdbot\":{\"emoji\":\"📞\",\"requires\":{\"bins\":[\"bash\",\"node\",\"jq\",\"python3\"]}}} --- ClawdTalk Voice calling, SMS messaging, and AI Missions for Clawdbot. Call your bot by phone, send texts, or run autonomous multi-step outreach campaigns — powered by ClawdTalk. --- ⚠️ CRITICAL: SLUG CONSISTENCY i","descriptionLabel":"Technical summary","evidenceSummary":"Published capability contract available. No trust telemetry is available yet. 19 GitHub stars reported by the source. Last updated 4/15/2026.","installCommand":"git clone https://github.com/team-telnyx/clawdtalk-client.git","sourceUrl":"https://github.com/team-telnyx/clawdtalk-client","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/team-telnyx/clawdtalk-client","kind":"source"}],"safetyScore":98,"overallRank":35.815000000000005,"popularityScore":33,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"ClawdTalk — Voice calls, SMS, and AI Missions for Clawdbot --- name: clawdtalk-client version: 2.0.0 description: ClawdTalk — Voice calls, SMS, and AI Missions "},"coverage":{"evidence":{"source":"capability-contract + public-profile","verified":true,"confidence":"high","updatedAt":"2026-02-24T19:47:36.106Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"update","status":"self-declared"},{"label":"multiple","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"update","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"multiple","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:update|supported|profile capability:multiple|supported|profile"}},"adoption":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"medium","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":null},"stars":19,"forks":5,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":"19 GitHub stars"},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-22T17:44:47.346Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T05:21:22.124Z","lastCrawledAt":"2026-02-22T17:44:47.346Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-23T17:44:47.346Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"capability-contract","verified":true,"confidence":"high","updatedAt":"2026-02-24T19:47:36.106Z","emptyReason":null},"installCommand":"git clone https://github.com/team-telnyx/clawdtalk-client.git","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"ready","authModes":["api_key"],"requires":["openclew","lang:typescript"],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":"https://github.com/team-telnyx/clawdtalk-client#input","outputSchemaRef":"https://github.com/team-telnyx/clawdtalk-client#output","dataRegion":"global","contractUpdatedAt":"2026-02-24T19:47:36.106Z","sourceUpdatedAt":"2026-02-24T19:47:36.106Z","freshnessSeconds":19577235},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_OPENCLEW","generatedAt":"2026-10-09T09:54:52.064Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/team-telnyx-clawdtalk-client/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":[],"safeUseWhen":["Contract is available with explicit auth and schema references.","Trust confidence is not low and verification freshness is acceptable."],"riskFlags":["trust_data_unavailable"],"operationalConfidence":"medium"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"high","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":null},"readme":"---\nname: clawdtalk-client\nversion: 2.0.0\ndescription: ClawdTalk — Voice calls, SMS, and AI Missions for Clawdbot\nmetadata: {\"clawdbot\":{\"emoji\":\"📞\",\"requires\":{\"bins\":[\"bash\",\"node\",\"jq\",\"python3\"]}}}\n---\n\n# ClawdTalk\n\nVoice calling, SMS messaging, and AI Missions for Clawdbot. Call your bot by phone, send texts, or run autonomous multi-step outreach campaigns — powered by ClawdTalk.\n\n---\n\n# ⚠️ CRITICAL: SLUG CONSISTENCY\n\n`init` auto-generates a slug from the mission name (lowercased, spaces → hyphens).\n**Every command that takes a slug (`setup-agent`, `save-memory`, `complete`) MUST use the EXACT same slug.**\n\nMismatched slugs = agent not linked = scheduled events invisible on the frontend.\n\n```bash\n# After init, ALWAYS confirm the slug:\npython scripts/telnyx_api.py list-state\n# Output: find-window-washing-contractors: Find window washing contractors [running]\n#         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ COPY-PASTE THIS. NEVER ABBREVIATE.\n```\n\n---\n\n# ⚠️ CRITICAL: YOU OWN THE MISSION LIFECYCLE\n\n**The server does NOT automatically update plan steps or mission status.** That is YOUR job as the bot. If you don't update steps and complete the mission, the UI will show \"Running\" forever with all steps \"Pending\".\n\n## Your Responsibilities\n\nFor every mission, YOU must:\n1. **Update plan steps** — mark each step `in_progress` → `completed` (or `failed`)\n2. **Log events** — after every significant action\n3. **Poll for completion** — check if scheduled calls/SMS finished\n4. **Complete the mission** — mark the run as `succeeded` or `failed`\n5. **Clean up** — remove any polling cron jobs when the mission ends\n\nThe UI reflects exactly what you tell it. No updates from you = no updates on screen.\n\n---\n\n# 🚨 MANDATORY: SAVE TO MEMORY AFTER EVERY ACTION\n\n**Every significant action MUST be persisted using `save-memory` or `append-memory` IMMEDIATELY after the action succeeds.** The frontend reads from server memory. If you don't save it, it doesn't show up. `log-event` alone is NOT enough.\n\n> **Rule: If you did something, save it to memory. No exceptions. No \"I'll do it later.\" Do it NOW.**\n\nExample (scheduling an SMS):\n```bash\n# 1. Schedule it\npython scripts/telnyx_api.py schedule-sms $AID \"$TO\" \"$FROM\" \"$DATETIME\" \"$MESSAGE\" $MID $RID $STEP_ID\n\n# 2. IMMEDIATELY save to memory\npython scripts/telnyx_api.py append-memory \"$SLUG\" \"scheduled_events\" \\\n  '{\"event_id\": \"<id>\", \"type\": \"sms\", \"to\": \"<to>\", \"message\": \"<msg>\", \"scheduled_at\": \"<dt>\", \"step_id\": \"<step>\"}'\n\n# 3. Then log the event\npython scripts/telnyx_api.py log-event $MID $RID custom \"Scheduled SMS event_id=<id>\" $STEP_ID\n```\n\n**Skipping step 2 is the #1 cause of \"nothing shows on the frontend\" bugs.**\n\n---\n\n# 🚨 MANDATORY: CHECK MISSION STATUS AFTER EVERY STEP\n\n**After completing or failing ANY step, you MUST check whether the mission should be completed or failed.** Never leave a mission in \"running\" state when it's actually done or dead.\n\n> **Rule: After every step change, ask yourself: is this mission finished?**\n\n### Decision tree (run after EVERY step):\n\n```\nStep finished →\n  ├── Succeeded?\n  │     ├── All steps done? → COMPLETE MISSION (update-run succeeded)\n  │     ├── More steps remain? → Continue to next step\n  │     └── Only verify left? → Set up polling cron\n  └── Failed?\n        ├── Recoverable (retry/reschedule)? → Retry\n        └── Unrecoverable? → FAIL MISSION NOW:\n              1. update-step <step_id> failed\n              2. log-event error \"Failed: <reason>\" <step_id>\n              3. save-memory \"$SLUG\" \"error_<step_id>\" '{\"error\": \"...\", \"recoverable\": false}'\n              4. update-run $MID $RID failed\n              5. save-memory \"$SLUG\" \"result\" '{\"status\": \"failed\", \"reason\": \"...\", \"failed_step\": \"...\"}'\n              6. Clean up any polling cron jobs\n```\n\n**A mission stuck in \"running\" when it's actually done or dead is a bug. The user sees it and thinks work is still happening.**\n\n---\n\n# Architecture Overview\n\n## How It Fits Together\n\n```\n┌──────────────┐     ┌──────────────────┐     ┌──────────────┐\n│  You (Bot)   │────▶│  ClawdTalk Server │────▶│  Telnyx API  │\n│              │     │  (dev/prod)       │     │  (cloud)     │\n│ telnyx_api.py│     │  Local DB + proxy │     │  Executes    │\n│              │     │  to Telnyx        │     │  calls/SMS   │\n└──────────────┘     └──────────────────┘     └──────────────┘\n```\n\n- **telnyx_api.py** — Python CLI script. Every command you run goes through this. It talks to the ClawdTalk server, never directly to Telnyx.\n- **ClawdTalk Server** — Node.js backend. Stores missions, assistants, and events in a local Postgres DB. Proxies requests to the Telnyx API.\n- **Telnyx API** — Cloud service. Actually makes the calls and sends the SMS at the scheduled time.\n\n## Key Files\n\n| File | Purpose |\n|---|---|\n| `scripts/telnyx_api.py` | CLI tool for all mission/assistant/event operations |\n| `scripts/connect.sh` | WebSocket client for inbound voice call routing |\n| `skill-config.json` | API key and server URL |\n| `.missions_state.json` | Local state tracking for active missions |\n| `.connect.log` | WebSocket connection logs |\n\n## Two Sets of IDs\n\nEvery entity exists in two places with different IDs:\n- **Local DB ID** — what the ClawdTalk server returns (e.g. `3df24dde-...`)\n- **Telnyx ID** — what the Telnyx API uses internally\n\nThe script always works with local IDs. You don't need to worry about Telnyx IDs.\n\n---\n\n## Quick Start\n\n1. **Sign up** at [clawdtalk.com](https://clawdtalk.com)\n2. **Add your phone** in Settings\n3. **Get API key** from Dashboard\n4. **Run setup**: `./setup.sh`\n5. **Start connection**: `./scripts/connect.sh start`\n\n## Voice Calls\n\nThe WebSocket client routes calls to your gateway's main agent session, giving full access to memory, tools, and context.\n\n```bash\n./scripts/connect.sh start     # Start connection\n./scripts/connect.sh stop      # Stop\n./scripts/connect.sh status    # Check status\n```\n\n### Outbound Calls\n\nHave the bot call you or others:\n\n```bash\n./scripts/call.sh                              # Call your phone\n./scripts/call.sh \"Hey, what's up?\"            # Call with greeting\n./scripts/call.sh --to +15551234567            # Call external number*\n./scripts/call.sh --to +15551234567 \"Hello!\"   # External with greeting\n./scripts/call.sh status <call_id>             # Check call status\n./scripts/call.sh end <call_id>                # End call\n```\n\n*External calls require a paid account with a dedicated number. The AI will operate in privacy mode when calling external numbers (won't reveal your private info).\n\n## SMS\n\nSend and receive text messages:\n\n```bash\n./scripts/sms.sh send +15551234567 \"Hello!\"\n./scripts/sms.sh list\n./scripts/sms.sh conversations\n```\n\n## AI Missions (Full Tracking via Python)\n\nFor complex, multi-step missions with full tracking, state persistence, retries, and conversation insights, use the Python-based missions API.\n\n**Required**: Python 3.7+, `CLAWDTALK_API_KEY` environment variable. Optionally set `CLAWDTALK_API_URL` to override the default endpoint (defaults to `https://clawdtalk.com/v1`).\n\n```bash\npython scripts/telnyx_api.py check-key    # Verify setup\n```\n\n# CRITICAL: SAVE STATE FREQUENTLY\n\n**You MUST save your progress after EVERY significant action.** If the session crashes or restarts, unsaved work is LOST.\n\n## Two-Layer Persistence: Memory + Events\n\nAlways save to BOTH:\n1. **Local Memory** (`.missions_state.json`) - Fast, survives restarts\n2. **Events API** (cloud) - Permanent audit trail, survives local file loss\n\n## When to Save (After EVERY action!)\n\n| Action | Save Memory | Log Event |\n|--------|-------------|-----------|\n| Web search returns results | append-memory | log-event (tool_call) |\n| Found a contractor/lead | append-memory | log-event (custom) |\n| Created assistant | save-memory | log-event (custom) |\n| Assigned phone number | save-memory | log-event (custom) |\n| Scheduled a call/SMS | append-memory | log-event (custom) |\n| Call completed | save-memory | log-event (custom) |\n| Got quote/insight | save-memory | log-event (custom) |\n| Made a decision | save-memory | log-event (message) |\n| Step started | save-memory | update-step (in_progress) + log-event (step_started) |\n| Step completed | save-memory | update-step (completed) + log-event (step_completed) |\n| Step failed | save-memory | update-step (failed) + log-event (error) |\n| Error occurred | save-memory | log-event (error) |\n\n## Memory Commands (Local Backup)\n\n```bash\n# Save a single value\npython scripts/telnyx_api.py save-memory \"<slug>\" \"key\" '{\"data\": \"value\"}'\n\n# Append to a list (great for collecting multiple items)\npython scripts/telnyx_api.py append-memory \"<slug>\" \"contractors\" '{\"name\": \"ABC Co\", \"phone\": \"+1234567890\"}'\n\n# Retrieve memory\npython scripts/telnyx_api.py get-memory \"<slug>\"           # Get all memory\npython scripts/telnyx_api.py get-memory \"<slug>\" \"key\"     # Get specific key\n```\n\n## Event Commands (Cloud Backup)\n\n```bash\n# Log an event (step_id is REQUIRED - links event to a plan step)\npython scripts/telnyx_api.py log-event <mission_id> <run_id> <type> \"<summary>\" <step_id> '[payload_json]'\n\n# Event types: tool_call, custom, message, error, step_started, step_completed\n# step_id: Use the step_id from your plan (e.g., \"research\", \"setup\", \"calls\")\n#          Use \"-\" if event doesn't belong to a specific step\n```\n\n---\n\n## When to Use Missions\n\nThis skill has two modes: **full missions** (tracked, multi-step) and **simple calls** (one-off, no mission overhead). Pick the right one.\n\n### Use a Full Mission When:\n- The task involves **multiple calls or SMS** (batch outreach, surveys, sweeps)\n- You need a **complete audit trail** with events, plans, and state tracking\n- The task is **multi-step** and takes significant effort across phases\n- **Retries and failure tracking** matter\n- You need to **compare results** across multiple calls\n\nExamples:\n- \"Find me window washing contractors in Chicago, call them and negotiate rates\"\n- \"Contact all leads in this list and schedule demos\"\n- \"Call 10 weather stations and find the hottest one\"\n\n### Do NOT Use a Mission When:\n- The task is a **single outbound call** — just create an assistant (or reuse one) and schedule the call directly\n- It's a **one-off SMS** — schedule it and done\n- The task doesn't need tracking, plans, or state recovery\n- You'd be creating a mission with one step and one call — that's overengineering\n\n**For simple calls, just:**\n```bash\n# Reuse or create an assistant\npython scripts/telnyx_api.py list-assistants --name=<relevant>\n# Schedule the call\npython scripts/telnyx_api.py schedule-call <assistant_id> <to> <from> <datetime> <mission_id> <run_id>\n# Poll for completion\npython scripts/telnyx_api.py get-event <assistant_id> <event_id>\n# Get insights\npython scripts/telnyx_api.py get-insights <conversation_id>\n```\n\nNo mission, no run, no plan. Keep it simple.\n\n## State Persistence\n\nThe script automatically manages state in `.missions_state.json`. This survives restarts and supports multiple concurrent missions.\n\n```bash\npython scripts/telnyx_api.py list-state                              # List all active missions\npython scripts/telnyx_api.py get-state \"find-window-washing-contractors\"  # Get state for specific mission\npython scripts/telnyx_api.py remove-state \"find-window-washing-contractors\" # Remove mission from state\n```\n\n---\n\n# Core Workflow\n\n## Phase 1: Initialize Tracking\n\n### Step 1.1: Create a Mission\n\n```bash\npython scripts/telnyx_api.py create-mission \"Brief descriptive name\" \"Full description of the task\"\n```\n\n**Save the returned `mission_id`** - you'll need it for all subsequent calls.\n\n### Step 1.2: Start a Run\n\n```bash\npython scripts/telnyx_api.py create-run <mission_id> '{\"original_request\": \"The exact user request\", \"context\": \"Any relevant context\"}'\n```\n\n**Save the returned `run_id`**.\n\n### Step 1.3: Create a Plan\n\nBefore executing, outline your plan:\n\n```bash\npython scripts/telnyx_api.py create-plan <mission_id> <run_id> '[\n  {\"step_id\": \"step_1\", \"description\": \"Research contractors online\", \"sequence\": 1},\n  {\"step_id\": \"step_2\", \"description\": \"Create voice agent for calls\", \"sequence\": 2},\n  {\"step_id\": \"step_3\", \"description\": \"Schedule calls to each contractor\", \"sequence\": 3},\n  {\"step_id\": \"step_4\", \"description\": \"Monitor call completions\", \"sequence\": 4},\n  {\"step_id\": \"step_5\", \"description\": \"Analyze results and select best options\", \"sequence\": 5}\n]'\n```\n\n### Step 1.4: Set Run to Running\n\n```bash\npython scripts/telnyx_api.py update-run <mission_id> <run_id> running\n```\n\n### High-Level Alternative: Initialize Everything at Once\n\nUse the `init` command to create mission, run, plan, and set status in one step:\n\n```bash\npython scripts/telnyx_api.py init \"Find window washing contractors\" \"Find contractors in Chicago, call them, negotiate rates\" \"User wants window washing quotes\" '[\n  {\"step_id\": \"research\", \"description\": \"Find contractors online\", \"sequence\": 1},\n  {\"step_id\": \"setup\", \"description\": \"Create voice agent\", \"sequence\": 2},\n  {\"step_id\": \"calls\", \"description\": \"Schedule and make calls\", \"sequence\": 3},\n  {\"step_id\": \"analyze\", \"description\": \"Analyze results\", \"sequence\": 4}\n]'\n```\n\nThis also automatically resumes if a mission with the same name already exists.\n\n**⚠️ Immediately after `init`, run `list-state` and copy the exact slug. Use it for ALL subsequent commands.**\n\n---\n\n## Phase 2: Voice/SMS Agent Setup\n\nWhen your task requires making calls or sending SMS, create an AI assistant first.\n\n### Step 2.1: Create a Voice/SMS Assistant\n\n**For phone calls:**\n```bash\npython scripts/telnyx_api.py create-assistant \"Contractor Outreach Agent\" \"You are calling on behalf of [COMPANY]. Your goal is to [SPECIFIC GOAL]. Be professional and concise. Collect: [WHAT TO COLLECT]. If they cannot talk now, ask for a good callback time.\" \"Hi, this is an AI assistant calling on behalf of [COMPANY]. Is this [BUSINESS NAME]? I am calling to inquire about your services. Do you have a moment?\" '[\"telephony\", \"messaging\"]'\n```\n\n**For SMS:**\n```bash\npython scripts/telnyx_api.py create-assistant \"SMS Outreach Agent\" \"You send SMS messages to collect information. Keep messages brief and professional.\" \"Hi! I am reaching out on behalf of [COMPANY] regarding [PURPOSE]. Could you please reply with [REQUESTED INFO]?\" '[\"telephony\", \"messaging\"]'\n```\n\n**Save the returned `assistant_id`**.\n\n### Step 2.2: Find and Assign a Phone Number\n\n```bash\npython scripts/telnyx_api.py get-available-phone                          # Get first available\npython scripts/telnyx_api.py get-connection-id <assistant_id> telephony   # Get connection ID\npython scripts/telnyx_api.py assign-phone <phone_number_id> <connection_id> voice  # Assign\n```\n\n### High-Level Alternative: Setup Agent in One Step\n\n```bash\npython scripts/telnyx_api.py setup-agent \"find-window-washing-contractors\" \"Contractor Caller\" \"You are calling to get quotes for commercial window washing. Ask about: rates per floor, availability, insurance. Be professional.\" \"Hi, I am calling to inquire about your commercial window washing services. Do you have a moment to discuss rates?\"\n```\n\nThis automatically creates the assistant, links it to the mission run, finds an available phone number, assigns it, and saves all IDs to the state file.\n\n**⚠️ The slug MUST match what `init` created. If it doesn't, the agent won't be linked and scheduled events won't appear on the frontend.**\n\n**Verify linking worked immediately after:**\n```bash\npython scripts/telnyx_api.py list-linked-agents <mission_id> <run_id>\n# Must show your assistant_id. If empty → slug was wrong. Fix with:\npython scripts/telnyx_api.py link-agent <mission_id> <run_id> <assistant_id>\n```\n\n### Step 2.3: Link Agent to Mission Run\n\n**If using `setup-agent`**: Linking is done automatically (only if slug matches `init`).\n\n**If setting up manually**:\n```bash\npython scripts/telnyx_api.py link-agent <mission_id> <run_id> <assistant_id>\npython scripts/telnyx_api.py list-linked-agents <mission_id> <run_id>\npython scripts/telnyx_api.py unlink-agent <mission_id> <run_id> <assistant_id>\n```\n\n---\n\n## Phase 3: Scheduling Calls/SMS\n\n### Business Hours Consideration\n\n**CRITICAL**: Before scheduling calls, consider business hours (9 AM - 5 PM local time). `scheduled_at` must be in the future (at least 1 minute from now).\n\n```bash\npython scripts/telnyx_api.py schedule-call <assistant_id> \"+15551234567\" \"+15559876543\" \"2024-12-01T14:30:00Z\" <mission_id> <run_id>\npython scripts/telnyx_api.py schedule-sms <assistant_id> \"+15551234567\" \"+15559876543\" \"2024-12-01T14:30:00Z\" \"Your message here\"\n```\n\n**Save the returned event `id`**.\n\n---\n\n## Phase 4: Monitoring Call Completion\n\n### ⚠️ THIS IS THE MOST IMPORTANT PART\n\nAfter scheduling a call or SMS, **Telnyx executes it autonomously** at the scheduled time. You need to **poll** to find out when it's done, then update the mission accordingly.\n\n### Check Scheduled Event Status\n\n```bash\npython scripts/telnyx_api.py get-event <assistant_id> <event_id>\n```\n\n### Use Cron Jobs to Poll\n\nUse your bot's cron system to schedule polling. **Do NOT block the main session waiting.** Match the poll interval to the expected wait time:\n\n| Expected completion | Poll interval | Example |\n|---|---|---|\n| < 5 minutes | Every 30 seconds | SMS sent 1 min from now |\n| 5–30 minutes | Every 2–5 minutes | Call scheduled in 15 min |\n| 1–24 hours | Every 15–30 minutes | Call scheduled for tonight |\n| Days/weeks | Every 4–8 hours | Call scheduled for next week |\n\n**If you know the exact scheduled time**, don't start polling until after that time. Schedule your first poll for `scheduled_time + 2 minutes`.\n\n### Cron Job Pattern\n\nWhen you schedule a call/SMS, create a cron job to poll for it:\n\n```\nCreate cron: poll at appropriate interval\n  → Run get-event <assistant_id> <event_id>\n  → If completed: update step, log event, complete mission if last step, DELETE THIS CRON\n  → If failed: update step as failed, log error, DELETE THIS CRON\n  → If pending/in_progress: do nothing, cron runs again at next interval\n```\n\n**⚠️ ALWAYS clean up cron jobs when a mission reaches a terminal state (completed, failed, cancelled). Never leave polling crons running after a mission ends.**\n\n### Adjusting Poll Frequency\n\nYou can update the cron interval as circumstances change:\n- Scheduled for 2 weeks from now? Start with 8-hour polling.\n- As the scheduled time approaches (within 1 hour), tighten to 5-minute intervals.\n- After the scheduled time passes, tighten to 30-second intervals.\n\n### Event Status Values\n\n| Status | Meaning | Action |\n|--------|---------|--------|\n| `pending` | Waiting for scheduled time | Keep polling |\n| `in_progress` | Call/SMS in progress | Keep polling |\n| `completed` | Finished successfully | Update step, get insights if call |\n| `failed` | Failed after retries | Update step as failed, consider retry |\n\n### Call Status Values (Phone Calls Only)\n\n| call_status | Meaning | Action |\n|-------------|---------|--------|\n| `ringing` | Phone is ringing | Poll again in 1-2 minutes |\n| `in-progress` | Call is active | Poll again in 2-3 minutes |\n| `completed` | Call finished normally | Get insights |\n| `no-answer` | Nobody picked up | **Retryable** — reschedule |\n| `busy` | Line is busy | **Retryable** — retry in 10-15 min |\n| `canceled` | Call was canceled | Check if intentional |\n| `failed` | Network/system error | **Retryable** — retry in 5-10 min |\n\n---\n\n## Phase 5: Getting Conversation Insights\n\nOnce a call completes with a `conversation_id`, retrieve insights. **Poll until status is \"completed\"** (wait 10 seconds between retries).\n\n```bash\npython scripts/telnyx_api.py get-insights <conversation_id>\n```\n\nTelnyx automatically creates default insight templates when an assistant is created. You don't need to manage these — just read the results.\n\n---\n\n## Phase 6: Complete the Mission\n\n```bash\npython scripts/telnyx_api.py update-run <mission_id> <run_id> succeeded\n\n# Or with full results:\npython scripts/telnyx_api.py complete \"find-window-washing-contractors\" <mission_id> <run_id> \"Summary of results\" '{\"key\": \"payload\"}'\n```\n\n---\n\n# Event Logging Reference\n\n**Log EVERY action as an event.** Always update step status via `update-step` AND log corresponding events.\n\n```bash\n# When STARTING a step:\npython scripts/telnyx_api.py update-step \"$MISSION_ID\" \"$RUN_ID\" \"research\" \"in_progress\"\npython scripts/telnyx_api.py log-event \"$MISSION_ID\" \"$RUN_ID\" step_started \"Starting: Research\" \"research\"\n\n# When COMPLETING a step:\npython scripts/telnyx_api.py update-step \"$MISSION_ID\" \"$RUN_ID\" \"research\" \"completed\"\npython scripts/telnyx_api.py log-event \"$MISSION_ID\" \"$RUN_ID\" step_completed \"Completed: Research\" \"research\"\n\n# When a step FAILS:\npython scripts/telnyx_api.py update-step \"$MISSION_ID\" \"$RUN_ID\" \"calls\" \"failed\"\npython scripts/telnyx_api.py log-event \"$MISSION_ID\" \"$RUN_ID\" error \"Failed: Could not reach contractors\" \"calls\"\n```\n\n---\n\n# Quick Reference: All Python Commands\n\n```bash\n# Check setup\npython scripts/telnyx_api.py check-key\n\n# Missions\npython scripts/telnyx_api.py create-mission <name> <instructions>\npython scripts/telnyx_api.py get-mission <mission_id>\npython scripts/telnyx_api.py list-missions\n\n# Runs\npython scripts/telnyx_api.py create-run <mission_id> <input_json>\npython scripts/telnyx_api.py get-run <mission_id> <run_id>\npython scripts/telnyx_api.py update-run <mission_id> <run_id> <status>\npython scripts/telnyx_api.py list-runs <mission_id>\n\n# Plan\npython scripts/telnyx_api.py create-plan <mission_id> <run_id> <steps_json>\npython scripts/telnyx_api.py get-plan <mission_id> <run_id>\npython scripts/telnyx_api.py update-step <mission_id> <run_id> <step_id> <status>\n\n# Events\npython scripts/telnyx_api.py log-event <mission_id> <run_id> <type> <summary> <step_id> [payload_json]\npython scripts/telnyx_api.py list-events <mission_id> <run_id>\n\n# Assistants\npython scripts/telnyx_api.py list-assistants [--name=<filter>] [--page=<n>] [--size=<n>]\npython scripts/telnyx_api.py create-assistant <name> <instructions> <greeting> [options_json]\npython scripts/telnyx_api.py get-assistant <assistant_id>\npython scripts/telnyx_api.py update-assistant <assistant_id> <updates_json>\npython scripts/telnyx_api.py get-connection-id <assistant_id> [telephony|messaging]\n\n# Phone Numbers\npython scripts/telnyx_api.py list-phones [--available]\npython scripts/telnyx_api.py get-available-phone\npython scripts/telnyx_api.py assign-phone <phone_id> <connection_id> [voice|sms]\n\n# Scheduled Events\npython scripts/telnyx_api.py schedule-call <assistant_id> <to> <from> <datetime> <mission_id> <run_id>\npython scripts/telnyx_api.py schedule-sms <assistant_id> <to> <from> <datetime> <text>\npython scripts/telnyx_api.py get-event <assistant_id> <event_id>\npython scripts/telnyx_api.py cancel-scheduled-event <assistant_id> <event_id>\npython scripts/telnyx_api.py list-events-assistant <assistant_id>\n\n# Insights\npython scripts/telnyx_api.py get-insights <conversation_id>\n\n# Mission Run Agents\npython scripts/telnyx_api.py link-agent <mission_id> <run_id> <telnyx_agent_id>\npython scripts/telnyx_api.py list-linked-agents <mission_id> <run_id>\npython scripts/telnyx_api.py unlink-agent <mission_id> <run_id> <telnyx_agent_id>\n\n# State Management\npython scripts/telnyx_api.py list-state\npython scripts/telnyx_api.py get-state <slug>\npython scripts/telnyx_api.py remove-state <slug>\n\n# Memory\npython scripts/telnyx_api.py save-memory <slug> <key> <value_json>\npython scripts/telnyx_api.py get-memory <slug> [key]\npython scripts/telnyx_api.py append-memory <slug> <key> <item_json>\n\n# High-Level Workflows\npython scripts/telnyx_api.py init <name> <instructions> <request> [steps_json]\npython scripts/telnyx_api.py setup-agent <slug> <name> <instructions> <greeting>\npython scripts/telnyx_api.py complete <slug> <mission_id> <run_id> <summary> [payload_json]\n```\n\n---\n\n# Complete Example: SMS Mission with Cron Polling\n\nHere's the full flow for an SMS mission with proper lifecycle tracking and cron-based polling:\n\n```bash\n# 1. Init mission\npython scripts/telnyx_api.py init \"SMS Test 003\" \\\n  \"Send a test SMS to +13322200013\" \\\n  \"SMS test with full tracking\" \\\n  '[{\"step_id\": \"setup\", \"description\": \"Create SMS agent\", \"sequence\": 1},\n    {\"step_id\": \"sms\", \"description\": \"Schedule SMS\", \"sequence\": 2},\n    {\"step_id\": \"verify\", \"description\": \"Verify delivery\", \"sequence\": 3}]'\n# Save: mission_id, run_id\n\n# 2. Step 1: Setup agent\npython scripts/telnyx_api.py update-step $MISSION_ID $RUN_ID setup in_progress\npython scripts/telnyx_api.py log-event $MISSION_ID $RUN_ID step_started \"Starting: Create SMS agent\" setup\n\npython scripts/telnyx_api.py setup-agent \"sms-test-003\" \"SMS Agent\" \"Send test messages\" \"Test from bot\"\n# Save: assistant_id, phone_number\n\npython scripts/telnyx_api.py update-step $MISSION_ID $RUN_ID setup completed\npython scripts/telnyx_api.py log-event $MISSION_ID $RUN_ID step_completed \"Completed: Created assistant $ASSISTANT_ID\" setup\n\n# 3. Step 2: Schedule SMS\npython scripts/telnyx_api.py update-step $MISSION_ID $RUN_ID sms in_progress\npython scripts/telnyx_api.py log-event $MISSION_ID $RUN_ID step_started \"Starting: Schedule SMS\" sms\n\npython scripts/telnyx_api.py schedule-sms $ASSISTANT_ID \"+13322200013\" \"$PHONE\" \"2026-02-19T18:43:00Z\" \\\n  \"What do you call a bear with no teeth? A gummy bear!\" \\\n  $MISSION_ID $RUN_ID sms\n# Save: event_id\n\npython scripts/telnyx_api.py update-step $MISSION_ID $RUN_ID sms completed\npython scripts/telnyx_api.py log-event $MISSION_ID $RUN_ID step_completed \"Completed: SMS scheduled\" sms\n\n# 4. Step 3: Verify delivery — CREATE A CRON JOB TO POLL\npython scripts/telnyx_api.py update-step $MISSION_ID $RUN_ID verify in_progress\npython scripts/telnyx_api.py log-event $MISSION_ID $RUN_ID step_started \"Starting: Poll for delivery\" verify\n\n# >>> Create a cron job that fires AFTER the scheduled time <<<\n# >>> Cron runs: get-event $ASSISTANT_ID $EVENT_ID <<<\n# >>> On completed: update-step verify completed, log-event, update-run succeeded, DELETE CRON <<<\n# >>> On failed: update-step verify failed, log-event, update-run failed, DELETE CRON <<<\n# >>> On pending/in_progress: do nothing, cron fires again next interval <<<\n\n# 5. (Cron fires, detects completion)\npython scripts/telnyx_api.py update-step $MISSION_ID $RUN_ID verify completed\npython scripts/telnyx_api.py log-event $MISSION_ID $RUN_ID step_completed \"Completed: SMS delivered\" verify\npython scripts/telnyx_api.py update-run $MISSION_ID $RUN_ID succeeded\n# DELETE the polling cron job!\n```\n\n---\n\n# Mission Classes\n\nNot all missions are the same. Identify which class before planning.\n\n```\nDoes call N depend on results of call N-1?\n  YES -> Is it negotiation (leveraging previous results)?\n    YES -> Class 3: Sequential Negotiation\n    NO  -> Does it have distinct rounds with human approval?\n      YES -> Class 4: Multi-Round / Follow-up\n      NO  -> Class 5: Information Gathering -> Action\n  NO  -> Do you need structured scoring/ranking?\n    YES -> Class 2: Parallel Screening with Rubric\n    NO  -> Class 1: Parallel Sweep\n```\n\n## Class 1: Parallel Sweep\nFan out calls in parallel batches. Same question to many targets. Schedule all calls in one batch (stagger by 1-2 min). Analysis happens after ALL calls complete.\n\n## Class 2: Parallel Screening with Rubric\nFan out calls in parallel with structured scoring criteria. Results are ranked post-hoc via insights.\n\n## Class 3: Sequential Negotiation\nCalls MUST run serially. Each call's strategy depends on previous results. Use `update-assistant` between calls to inject context. **Never parallelize these.**\n\n## Class 4: Multi-Round / Follow-up\nTwo or more distinct phases. Round 1 is broad outreach, human approval gate, then Round 2 targets a subset.\n\n## Class 5: Information Gathering -> Action\nCall to find something, then act on it. Early termination when goal is met — cancel remaining calls.\n\n---\n\n# Operational Guide\n\n## Default Tools\nThe `send_dtmf` tool is included by default. Most outbound calls hit an IVR first.\n\n## IVR Navigation\nExpect IVRs even when calling businesses. Instruct the assistant to press 0 or say 'representative'.\n\n## Call Limits and Throttling\nStagger calls in batches of 5-10, space scheduled times 1-2 minutes apart, monitor for 429 errors.\n\n## Answering Machine Detection (AMD)\n- **Enable** for human contacts (leave voicemail or skip machines)\n- **Disable** for IVR systems, businesses with phone trees — set action to `continue_assistant`\n\n## Polling for Results: Use Cron Jobs\nAfter scheduling calls, set up a cron job to poll periodically. Don't block the main session.\n\n## Retry Strategy\nTrack every number's status in mission memory. Retry based on recipient type:\n- **Automated systems**: retry in 5-15 min, up to 3 times\n- **Service industry**: retry in 30 min - 2 hours, avoid peak hours\n- **Professionals**: retry next business day, leave one voicemail max\n\n---\n\n## Approval Requests (Sensitive Actions)\n\nFor destructive or sensitive actions during voice calls, request user approval first:\n\n```bash\n./scripts/approval.sh request \"Delete GitHub repo myproject\"\n./scripts/approval.sh request \"Send $500 to John\" --biometric\n./scripts/approval.sh request \"Post tweet about X\" --details \"Full text: ...\"\n```\n\n**When to request approval:**\n- Deleting repos, files, or data\n- Sending money or making purchases\n- Posting to social media\n- Sending emails/messages to others\n- Any irreversible action\n\n**Response values:**\n- `approved` → Execute the action, confirm completion\n- `denied` → Tell user \"Okay, I won't do that\"\n- `timeout` → \"I didn't get a response, should I try again?\"\n- `no_devices` → Skip approval, action not executed (no mobile app)\n\n**Example flow in voice call:**\n1. User: \"Delete my test-repo on GitHub\"\n2. You: \"I'll need your approval for that. Check your phone.\"\n3. Run: `approval.sh request \"Delete GitHub repo test-repo\"`\n4. If approved: Delete the repo, then say \"Done, test-repo has been deleted\"\n5. If denied: \"Got it, I won't delete it\"\n\n## Gateway Requirements\n\nVoice calls route requests to the main agent via `sessions_send`. This tool is **blocked by default** on the Gateway HTTP tools API. You must explicitly allow it:\n\n```json5\n// In openclaw.json → gateway.tools\n{\n  \"gateway\": {\n    \"tools\": {\n      \"allow\": [\"sessions_send\"]\n    }\n  }\n}\n```\n\nOr via CLI: `openclaw config patch '{\"gateway\":{\"tools\":{\"allow\":[\"sessions_send\"]}}}'`\n\nWithout this, voice calls will connect but the agent won't be able to process any requests (deep tool calls return 404).\n\n> ⚠️ **WARNING:** This MUST go under `gateway.tools.allow`, NOT top-level `tools.allow`. The top-level `tools.allow` is the agent's tool allowlist — putting `sessions_send` there will restrict your agent to ONLY that tool, breaking everything. If you accidentally did this, remove the top-level `tools.allow` entry and restart.\n\n## ❌ Common Pitfalls\n\n| Mistake | Symptom | Fix |\n|---------|---------|-----|\n| Different slug for `init` vs `setup-agent` | Scheduled events missing from frontend | `list-state` after `init`, copy-paste slug |\n| Forgetting `save-memory` after actions | Frontend shows nothing | Save immediately after every action |\n| Not checking mission status after step changes | Mission stuck \"running\" forever | Run decision tree after every step |\n| Leaving polling crons running | Wasted resources, stale polls | Delete cron on any terminal state |\n| Not verifying `list-linked-agents` after `setup-agent` | Agent not linked, events invisible | Always verify, fix with `link-agent` |\n\n## Configuration\n\nEdit `skill-config.json`:\n\n| Option | Description |\n|--------|-------------|\n| `api_key` | API key from clawdtalk.com |\n| `server` | Server URL (default: `https://clawdtalk.com`) |\n| `owner_name` | Your name (auto-detected from USER.md) |\n| `agent_name` | Agent name (auto-detected from IDENTITY.md) |\n| `greeting` | Custom greeting for inbound calls |\n\nEnvironment variables for the Python missions API:\n- `CLAWDTALK_API_KEY` — your ClawdTalk API key (required for missions)\n- `CLAWDTALK_API_URL` — override the API endpoint (default: `https://clawdtalk.com/v1`)\n\n## Troubleshooting\n\n- **Auth failed**: Regenerate API key at clawdtalk.com\n- **Empty responses**: Run `./setup.sh` and restart gateway\n- **Slow responses**: Try a faster model in your gateway config\n- **Debug mode**: `DEBUG=1 ./scripts/connect.sh restart`\n- **Missions API key**: Run `python scripts/telnyx_api.py check-key` to verify\n- **JSON parsing errors**: Use single quotes around JSON arguments\n","readmeExcerpt":"--- name: clawdtalk-client version: 2.0.0 description: ClawdTalk — Voice calls, SMS, and AI Missions for Clawdbot metadata: {\"clawdbot\":{\"emoji\":\"📞\",\"requires\":{\"bins\":[\"bash\",\"node\",\"jq\",\"python3\"]}}} --- ClawdTalk Voice calling, SMS messaging, and AI Missions for Clawdbot. Call your bot by phone, send texts, or run autonomous multi-step outreach campaigns — powered by ClawdTalk. --- ⚠️ CRITICAL: SLUG CONSISTENCY i","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# After init, ALWAYS confirm the slug:\npython scripts/telnyx_api.py list-state\n# Output: find-window-washing-contractors: Find window washing contractors [running]\n#         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ COPY-PASTE THIS. NEVER ABBREVIATE."},{"language":"bash","snippet":"# 1. Schedule it\npython scripts/telnyx_api.py schedule-sms $AID \"$TO\" \"$FROM\" \"$DATETIME\" \"$MESSAGE\" $MID $RID $STEP_ID\n\n# 2. IMMEDIATELY save to memory\npython scripts/telnyx_api.py append-memory \"$SLUG\" \"scheduled_events\" \\\n  '{\"event_id\": \"<id>\", \"type\": \"sms\", \"to\": \"<to>\", \"message\": \"<msg>\", \"scheduled_at\": \"<dt>\", \"step_id\": \"<step>\"}'\n\n# 3. Then log the event\npython scripts/telnyx_api.py log-event $MID $RID custom \"Scheduled SMS event_id=<id>\" $STEP_ID"},{"language":"text","snippet":"Step finished →\n  ├── Succeeded?\n  │     ├── All steps done? → COMPLETE MISSION (update-run succeeded)\n  │     ├── More steps remain? → Continue to next step\n  │     └── Only verify left? → Set up polling cron\n  └── Failed?\n        ├── Recoverable (retry/reschedule)? → Retry\n        └── Unrecoverable? → FAIL MISSION NOW:\n              1. update-step <step_id> failed\n              2. log-event error \"Failed: <reason>\" <step_id>\n              3. save-memory \"$SLUG\" \"error_<step_id>\" '{\"error\": \"...\", \"recoverable\": false}'\n              4. update-run $MID $RID failed\n              5. save-memory \"$SLUG\" \"result\" '{\"status\": \"failed\", \"reason\": \"...\", \"failed_step\": \"...\"}'\n              6. Clean up any polling cron jobs"},{"language":"text","snippet":"┌──────────────┐     ┌──────────────────┐     ┌──────────────┐\n│  You (Bot)   │────▶│  ClawdTalk Server │────▶│  Telnyx API  │\n│              │     │  (dev/prod)       │     │  (cloud)     │\n│ telnyx_api.py│     │  Local DB + proxy │     │  Executes    │\n│              │     │  to Telnyx        │     │  calls/SMS   │\n└──────────────┘     └──────────────────┘     └──────────────┘"},{"language":"bash","snippet":"./scripts/connect.sh start     # Start connection\n./scripts/connect.sh stop      # Stop\n./scripts/connect.sh status    # Check status"},{"language":"bash","snippet":"./scripts/call.sh                              # Call your phone\n./scripts/call.sh \"Hey, what's up?\"            # Call with greeting\n./scripts/call.sh --to +15551234567            # Call external number*\n./scripts/call.sh --to +15551234567 \"Hello!\"   # External with greeting\n./scripts/call.sh status <call_id>             # Check call status\n./scripts/call.sh end <call_id>                # End call"}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"GITHUB OPENCLEW","editorialOverview":"ClawdTalk — Voice calls, SMS, and AI Missions for Clawdbot --- name: clawdtalk-client version: 2.0.0 description: ClawdTalk — Voice calls, SMS, and AI Missions for Clawdbot metadata: {\"clawdbot\":{\"emoji\":\"📞\",\"requires\":{\"bins\":[\"bash\",\"node\",\"jq\",\"python3\"]}}} --- ClawdTalk Voice calling, SMS messaging, and AI Missions for Clawdbot. Call your bot by phone, send texts, or run autonomous multi-step outreach campaigns — powered by ClawdTalk. --- ⚠️ CRITICAL: SLUG CONSISTENCY i","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":363,"uniquenessScore":66,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T09:54:52.064Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/github_openclew","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}