{"id":"f8f18484-4cee-4bcf-baab-666177fe2c52","entityType":"agent","slug":"clawhub-skills-10madh-linkedin-dm","name":"linkedin-dm","canonicalUrl":"https://www.xpersona.co/agent/clawhub-skills-10madh-linkedin-dm","canonicalPath":"/agent/clawhub-skills-10madh-linkedin-dm","generatedAt":"2026-10-10T01:48:09.308Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks for outreach context/goal, generates a tailored message per person, and sends each one via browser automation. Handles message compose flow, character limits, and incremental status tracking. --- name: linkedin-dm description: Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.","installCommand":"clawhub skill install skills:10madh:linkedin-dm","sourceUrl":"https://github.com/openclaw/skills/tree/main/skills/10madh/linkedin-dm","homepage":null,"primaryLinks":[{"label":"View on ClawHub","url":"https://github.com/openclaw/skills/tree/main/skills/10madh/linkedin-dm","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":50,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn conn"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"create","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":2,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"create","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:create|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No source adoption metrics were available."},"stars":null,"forks":null,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-25T06:16:28.956Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-25T06:16:28.956Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-26T06:16:28.956Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install skills:10madh:linkedin-dm","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":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T01:48:09.307Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-dm/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":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"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":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"---\nname: linkedin-dm\ndescription: Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks for outreach context/goal, generates a tailored message per person, and sends each one via browser automation. Handles message compose flow, character limits, and incremental status tracking.\n---\n\n# LinkedIn DM\n\nSends personalized LinkedIn messages to existing 1st-degree connections. Each message has:\n- A **personalized opening** unique to each person (based on their profile + relationship to the sender)\n- A **consistent product/pitch section** confirmed once by the user and reused for all messages\n\n---\n\n## ⚠️ Pre-flight Checklist — Confirm Before Starting\n\n### 1. Connection List\nAsk the user for their data file or list. Must include (or be added):\n- **Person Name** — full name\n- **Company/Role** — their current company or role\n- **LinkedIn URL** — optional but helpful\n- **Message Status** — column for tracking (add if missing)\n\nIf only a plain list is provided, offer to convert to TSV.\n\n### 2. Read Sender's LinkedIn Profile (mandatory)\nBefore writing any messages, navigate to `/in/me/` and read the sender's profile:\n- **Name** and **current role/company**\n- **Career history** — companies, roles, years\n- **Education** — college, degree, batch years\n- **Location**\n\nStore these facts. They are used to identify relationship hooks with each connection.\n\n### 3. Confirm the Pitch (once, upfront)\nAsk the user:\n> *\"What's your pitch / product message? This will be the consistent part of every message. Describe it in 1–2 sentences.\"*\n\nThen draft a polished pitch section (2–4 sentences max, punchy and clear). Show it to the user and get explicit approval. **Do not start sending until the pitch is confirmed.**\n\nExample prompt: *\"Here's the pitch I'll use for everyone — confirm or edit:*\n> *'I'm building an AI calling agent — you give it a phone number + context, and it handles the call end-to-end. Think customer follow-ups, research calls, vendor coordination — anything phone-based that eats into your day. Happy to show you a demo if this sounds useful.'\"*\n\n### 4. Browser Setup\n- **Option A — Chrome Browser Relay** (`profile=\"chrome\"`): extension attached to LinkedIn tab (badge ON) — recommended for flagged accounts\n- **Option B — OpenClaw Isolated Browser** (`profile=\"openclaw\"`): openclaw-managed Chrome, LinkedIn logged in\n\n### 5. CRM Sheet\nAsk the user for a Google Sheet ID/URL to log outreach results. If they don't have one, offer to set one up (create tab + write headers). Confirm `gog` is authenticated (`gog auth list`).\n\nIf the user skips this, fall back to local `linkedin_dm_progress.json` but remind them the follow-up skill needs the sheet.\n\n### 6. Ready Check\nOnly proceed once:\n- ✅ List is ready\n- ✅ Sender profile has been read\n- ✅ Pitch is confirmed by user\n- ✅ Browser is open with LinkedIn logged in\n- ✅ Sheet ID confirmed (or sidecar fallback acknowledged)\n\n---\n\n## Relationship Analysis (per person)\n\nBefore writing a message, compare the connection's profile against the sender's profile to find the strongest hook. Use this hierarchy — pick the highest that applies:\n\n| Priority | Hook | Example opener |\n|---|---|---|\n| 1 | **Same company** (current or past) | \"You and I both spent time at CRED…\" |\n| 2 | **Same college + overlapping years** | \"Fellow BITS Goa 2018 batch here…\" |\n| 3 | **Same college** (different years) | \"BITS connect here — saw your journey from…\" |\n| 4 | **Same industry/function** | \"Both been in fintech/product for a while…\" |\n| 5 | **Mutual connection** | \"We're both connected to [Name]…\" |\n| 6 | **Their work context** (no personal hook) | \"Seen what you've built at [Company]…\" |\n\nCombine the hook with a line about **their current work** to show you know what they do.\n\n---\n\n## Message Structure\n\nSend as **two separate messages** per person, back to back:\n\n**Message 1 — Personalized opener** (unique per person)\n```\n[Relationship hook — 1 sentence]\n[Acknowledgement of their work/role — 1 sentence]\n```\nTarget: 100–180 chars. Feels like a genuine reach-out from someone who knows them.\n\n**Message 2 — Pitch** (identical for everyone, confirmed upfront)\n```\n[Product description — 1–2 sentences]\n[Relevant use case for their role — 1 sentence]\n[Soft CTA — 1 sentence]\n```\nTarget: 150–250 chars. Clear, punchy, no filler.\n\n**Why two messages?**\n- Opener lands first — they see it before the pitch, feels more personal\n- Pitch is clearly a separate thought, not buried at the end\n- Mirrors how a human would actually message a connection\n\n**Fallback:** If sending two messages is technically difficult (e.g. bubble re-focusing issues), use `Shift+Enter` twice between the opener and pitch to create a paragraph break within a single message.\n\n**Do not:**\n- Open with \"I hope you're well\" or \"I came across your profile\"\n- Use the same opening for multiple people\n- Change the pitch section per person\n\n---\n\n## Batch Preview Before Sending\n\nGenerate messages for the **entire list first**. Present them in a table:\n\n| Name | Company | Relationship Hook Used | Message Preview |\n|---|---|---|---|\n| Shorya Saini | Razorpay | Same BITS batch | Hey Shorya, BITS Goa 2018 batch… |\n\nGet user approval on the full batch before opening the browser. Allow edits per row.\n\n---\n\n## Sending Flow (Per Person)\n\n1. **Navigate to `/feed/`** — mandatory, no exceptions, no skipping\n2. **Wait 3–5 seconds**\n3. **Search connections** at `linkedin.com/mynetwork/invite-connect/connections/` — type name in \"Search by name\"\n4. **Handle results:**\n   - 1 match → confirm name + headline → click to open profile\n   - Multiple matches → show user, ask which one\n   - 0 matches → mark `Not a Connection`, skip\n5. **Read their profile** if not already done (for personalisation)\n6. **Click Message button** on their profile\n7. **Send Message 1** — personalized opener only, send it\n8. **Send Message 2** — pitch only, send it immediately after\n9. **Confirm both delivered**\n10. **Log to CRM sheet** — append row via `gog sheets append` with all fields (see CRM Tracking section)\n\nSee `references/browser-workflow.md` for exact browser automation steps.\n\n---\n\n## Status Values\n\n| Status | Meaning |\n|---|---|\n| `Sent` | Message delivered this session |\n| `Already Messaged` | Recent conversation exists — skip |\n| `Not a Connection` | No Message button or not in connections search |\n| `Profile Not Found` | Could not identify the right person |\n| `Skipped` | User chose to skip |\n| `Failed` | Browser error — retry next session |\n\n---\n\n## Anti-Detection Rules\n\n- `/feed/` before **every single profile** — non-negotiable\n- 3–5 second wait after feed loads\n- Max **15–20 messages per session**\n- Stop immediately if LinkedIn warns about messaging rate — tell the user\n\n---\n\n## CRM Tracking — Google Sheet\n\nAfter each message is sent, append a row to a Google Sheet. This sheet is the source of truth for all outreach — current session and future follow-up.\n\n### Sheet Setup\n\nAsk the user for a Google Sheet ID or URL at the start of the session (or offer to create a new one). The sheet should have a tab named `Outreach` with these columns:\n\n| Col | Field | Notes |\n|---|---|---|\n| A | Date Sent | ISO date, e.g. `2026-02-13` |\n| B | Person Name | Full name |\n| C | Role / Title | Their current headline from LinkedIn |\n| D | Company | Current company |\n| E | LinkedIn URL | Profile URL |\n| F | Relationship Hook | What hook was used (e.g. \"Same batch BITS Goa 2018\", \"Both at CRED 2022–23\") |\n| G | Opener Sent | Exact text of Message 1 |\n| H | Pitch Sent | Exact text of Message 2 |\n| I | Campaign | Short label for this batch (e.g. \"AI Calling - Feb 2026\") |\n| J | Status | Always `Sent` when first logged — updated by follow-up skill |\n| K | Notes | Anything notable (prior conversation, context, mutual connection used) |\n| L | Last Updated | Timestamp of last status change |\n\n**Column I (Status) lifecycle** — only `Sent` is written by this skill. The follow-up skill will update to:\n`Replied` · `Call Scheduled` · `Demo Done` · `Follow Up Sent` · `No Response` · `Closed Won` · `Closed Lost`\n\n### Appending a Row\n\nAfter each message pair is sent, run:\n\n```bash\ngog sheets append <SHEET_ID> \"Outreach!A:L\" \\\n  --values-json '[[\"<date>\",\"<name>\",\"<role>\",\"<company>\",\"<url>\",\"<hook>\",\"<opener>\",\"<pitch>\",\"<campaign>\",\"Sent\",\"<notes>\",\"<timestamp>\"]]' \\\n  --insert INSERT_ROWS\n```\n\n### First-Time Setup\n\nIf no sheet exists yet, tell the user:\n> \"I'll need a Google Sheet to track outreach. Share an existing sheet ID/URL, or I can create one with the right columns.\"\n\nTo create a new sheet, use Drive (or ask user to create one and share the ID). Then write the header row:\n\n```bash\ngog sheets update <SHEET_ID> \"Outreach!A1:L1\" \\\n  --values-json '[[\"Date Sent\",\"Person Name\",\"Role / Title\",\"Company\",\"LinkedIn URL\",\"Relationship Hook\",\"Opener Sent\",\"Pitch Sent\",\"Campaign\",\"Status\",\"Notes\",\"Last Updated\"]]' \\\n  --input USER_ENTERED\n```\n\n### Local Sidecar (fallback)\n\nIf Google Sheets is not set up, fall back to a local `linkedin_dm_progress.json`:\n```json\n{\n  \"campaign\": \"AI Calling - Feb 2026\",\n  \"pitch\": \"confirmed pitch text\",\n  \"rows\": [\n    {\n      \"date\": \"2026-02-13\",\n      \"name\": \"Shorya Saini\",\n      \"role\": \"Senior Analytics Specialist\",\n      \"company\": \"Razorpay\",\n      \"url\": \"https://linkedin.com/in/shorya-saini\",\n      \"hook\": \"Same batch BITS Goa 2018\",\n      \"opener\": \"Hey Shorya...\",\n      \"pitch\": \"I'm building...\",\n      \"status\": \"Sent\",\n      \"notes\": \"\"\n    }\n  ]\n}\n```\n","readmeExcerpt":"--- name: linkedin-dm description: Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"[Relationship hook — 1 sentence]\n[Acknowledgement of their work/role — 1 sentence]"},{"language":"text","snippet":"[Product description — 1–2 sentences]\n[Relevant use case for their role — 1 sentence]\n[Soft CTA — 1 sentence]"},{"language":"bash","snippet":"gog sheets append <SHEET_ID> \"Outreach!A:L\" \\\n  --values-json '[[\"<date>\",\"<name>\",\"<role>\",\"<company>\",\"<url>\",\"<hook>\",\"<opener>\",\"<pitch>\",\"<campaign>\",\"Sent\",\"<notes>\",\"<timestamp>\"]]' \\\n  --insert INSERT_ROWS"},{"language":"bash","snippet":"gog sheets update <SHEET_ID> \"Outreach!A1:L1\" \\\n  --values-json '[[\"Date Sent\",\"Person Name\",\"Role / Title\",\"Company\",\"LinkedIn URL\",\"Relationship Hook\",\"Opener Sent\",\"Pitch Sent\",\"Campaign\",\"Status\",\"Notes\",\"Last Updated\"]]' \\\n  --input USER_ENTERED"},{"language":"json","snippet":"{\n  \"campaign\": \"AI Calling - Feb 2026\",\n  \"pitch\": \"confirmed pitch text\",\n  \"rows\": [\n    {\n      \"date\": \"2026-02-13\",\n      \"name\": \"Shorya Saini\",\n      \"role\": \"Senior Analytics Specialist\",\n      \"company\": \"Razorpay\",\n      \"url\": \"https://linkedin.com/in/shorya-saini\",\n      \"hook\": \"Same batch BITS Goa 2018\",\n      \"opener\": \"Hey Shorya...\",\n      \"pitch\": \"I'm building...\",\n      \"status\": \"Sent\",\n      \"notes\": \"\"\n    }\n  ]\n}"}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"CLAWHUB","editorialOverview":"Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks for outreach context/goal, generates a tailored message per person, and sends each one via browser automation. Handles message compose flow, character limits, and incremental status tracking. --- name: linkedin-dm description: Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":437,"uniquenessScore":61,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","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-15T00:45:39.800Z","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-10T01:48:09.308Z","emptyReason":null},"items":[{"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-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"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":"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/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}