{
  "schemaVersion": "1.0",
  "item": {
    "slug": "cold-email",
    "name": "MachFive Cold Email",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/Bluecraft-AI/cold-email",
    "canonicalUrl": "https://clawhub.ai/Bluecraft-AI/cold-email",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/cold-email",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cold-email",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.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-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-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/cold-email"
    },
    "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/cold-email",
    "agentPageUrl": "https://openagent3.xyz/skills/cold-email/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cold-email/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cold-email/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": "MachFive - AI Cold Email Generator",
        "body": "Generate personalized cold email sequences from lead data. MachFive uses AI to research prospects and craft unique, relevant outreach - not templates."
      },
      {
        "title": "Setup",
        "body": "Get your API key at https://app.machfive.io/settings (Integrations → API Keys)\nSet MACHFIVE_API_KEY in your environment"
      },
      {
        "title": "Campaign ID",
        "body": "Every generate request needs a campaign ID in the URL: /api/v1/campaigns/{campaign_id}/generate (or /generate-batch).\n\nIf the user has not provided a campaign name or ID: Call GET /api/v1/campaigns (see below) to list campaigns in their workspace, then ask them to pick one by name or ID before running generate.\nWhere to get it manually: https://app.machfive.io/campaigns → open a campaign → copy the ID from the URL or settings.\nNo default: The skill does not assume a campaign. The user (or agent config) must provide one. Agents can store a default campaign ID for the workspace if the user provides it (e.g. \"use campaign X for my requests\")."
      },
      {
        "title": "List Campaigns (discover before generate)",
        "body": "List campaigns in the workspace so the agent can ask the user which campaign to use when they haven't provided a name or ID.\n\nGET https://app.machfive.io/api/v1/campaigns\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\nOr use X-API-Key: {MACHFIVE_API_KEY} header.\n\nOptional query: ?q=search or ?name=search to filter by campaign name.\n\nResponse (200):\n\n{\n  \"campaigns\": [\n    { \"id\": \"cb1bbb14-e576-4d8f-a8f3-6fa929076fd8\", \"name\": \"SaaS Q1 Outreach\", \"created_at\": \"2025-01-15T12:00:00Z\" },\n    { \"id\": \"a1b2c3d4-...\", \"name\": \"Enterprise Leads\", \"created_at\": \"2025-01-10T08:00:00Z\" }\n  ]\n}\n\nIf no campaign name or ID was given, call this first, then ask the user: \"Which campaign should I use? [list names/IDs].\""
      },
      {
        "title": "Single Lead (Sync)",
        "body": "Generate an email sequence for one lead (3–5 emails per lead). Waits for completion, returns the sequence directly. The request can take 3–5 minutes (AI research + generation); use a client timeout of at least 300 seconds (5 min) or 600 seconds (10 min). Do not use a 120s timeout or the response will be cut off.\n\nPOST https://app.machfive.io/api/v1/campaigns/{campaign_id}/generate\nAuthorization: Bearer {MACHFIVE_API_KEY}\nContent-Type: application/json\n\nOr use X-API-Key: {MACHFIVE_API_KEY} header.\n\n{\n  \"lead\": {\n    \"name\": \"John Smith\",\n    \"title\": \"VP of Marketing\",\n    \"company\": \"Acme Corp\",\n    \"email\": \"john@acme.com\",\n    \"company_website\": \"https://acme.com\",\n    \"linkedin_url\": \"https://linkedin.com/in/johnsmith\"\n  },\n  \"options\": {\n    \"list_name\": \"Q1 Outreach\",\n    \"email_count\": 3,\n    \"email_signature\": \"Best,\\nYour Name\",\n    \"approved_ctas\": [\"Direct Meeting CTA\", \"Lead Magnet CTA\"]\n  }\n}\n\nResponse (200):\n\n{\n  \"lead_id\": \"lead_xyz789\",\n  \"list_id\": \"uuid\",\n  \"sequence\": [\n    { \"step\": 1, \"subject\": \"...\", \"body\": \"...\" },\n    { \"step\": 2, \"subject\": \"...\", \"body\": \"...\" },\n    { \"step\": 3, \"subject\": \"...\", \"body\": \"...\" }\n  ],\n  \"credits_remaining\": 94\n}\n\nRecovery: The response includes list_id. If the request times out or the response is truncated, you can still get the result: call GET /api/v1/lists/{list_id} to confirm status, then GET /api/v1/lists/{list_id}/export?format=json to retrieve the sequence."
      },
      {
        "title": "Batch (Async)",
        "body": "Generate email sequences for multiple leads (one list; each lead gets a sequence). Returns immediately (202) with list_id; processing runs in the background. To get results: poll list status, then call export.\n\nPOST https://app.machfive.io/api/v1/campaigns/{campaign_id}/generate-batch\nAuthorization: Bearer {MACHFIVE_API_KEY}\nContent-Type: application/json\n\nOr use X-API-Key: {MACHFIVE_API_KEY} header.\n\n{\n  \"leads\": [\n    { \"name\": \"John Smith\", \"email\": \"john@acme.com\", \"company\": \"Acme Corp\", \"title\": \"VP Marketing\" },\n    { \"name\": \"Jane Doe\", \"email\": \"jane@beta.com\", \"company\": \"Beta Inc\", \"title\": \"Director Sales\" }\n  ],\n  \"options\": {\n    \"list_name\": \"Q1 Outreach Batch\",\n    \"email_count\": 3\n  }\n}\n\nResponse (202):\n\n{\n  \"list_id\": \"uuid\",\n  \"status\": \"processing\",\n  \"leads_count\": 2,\n  \"message\": \"Batch accepted. Poll list status or open in UI.\"\n}"
      },
      {
        "title": "List lead lists",
        "body": "List lead lists in the workspace. Optional query: campaign_id, status (pending | processing | completed | failed), limit (default 50, max 100), offset.\n\nGET https://app.machfive.io/api/v1/lists\nGET https://app.machfive.io/api/v1/lists?campaign_id={campaign_id}&status=completed&limit=20\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\nResponse (200): { \"lists\": [ { \"id\", \"campaign_id\", \"custom_name\", \"processing_status\", \"created_at\", \"completed_at\" }, ... ] }. Order is created_at desc."
      },
      {
        "title": "List status (poll)",
        "body": "Poll until the list is done. Use the list_id from generate or generate-batch.\n\nGET https://app.machfive.io/api/v1/lists/{list_id}\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\nResponse (200): id, campaign_id, custom_name, processing_status (pending | processing | completed | failed), created_at, updated_at. When processing_status === 'completed': leads_count, emails_created, completed_at. When failed: failed_at. 404 if list not found or not in workspace.\n\nPoll every 10–30 seconds until processing_status === 'completed' or failed. If failed, the list cannot be exported; retry by submitting a new batch."
      },
      {
        "title": "List export (get results)",
        "body": "After status is completed, fetch the processed output. CSV (default) or JSON.\n\nGET https://app.machfive.io/api/v1/lists/{list_id}/export?format=csv\nGET https://app.machfive.io/api/v1/lists/{list_id}/export?format=json\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\nformat=csv (default): Returns the processed CSV (same as UI download), with Content-Disposition: attachment; filename=\"MachFive-{list_id}.csv\".\nformat=json: Returns { \"leads\": [ { \"email\": \"...\", \"sequence\": [ { \"step\": 1, \"subject\": \"...\", \"body\": \"...\" }, ... ] }, ... ] }. Each lead may include optional name, company, title when present, e.g. { \"email\": \"john@acme.com\", \"name\": \"John Smith\", \"company\": \"Acme Corp\", \"title\": \"VP Marketing\", \"sequence\": [ ... ] }.\n409 if list is not yet completed (poll GET /lists/:id first). 404 if list not found or not in workspace.\n\nBatch flow: POST generate-batch → 202 + list_id → poll GET /lists/:id until processing_status === 'completed' → GET /lists/:id/export?format=csv or json → return result to user."
      },
      {
        "title": "Lead Fields",
        "body": "Each lead must include a valid email; it is used to map the lead through processing and to match generated sequences back to the lead in exports (same as the app UI). All other fields are optional but improve personalization.\n\nFieldRequiredDescriptionemailYesLead's email address; used to map the lead through processing and in exportsnameNoFull name or first name (improves personalization)companyNoCompany name (improves personalization)titleNoJob title (improves personalization)company_websiteNoCompany URL for researchlinkedin_urlNoLinkedIn profile for deeper personalization"
      },
      {
        "title": "Options",
        "body": "OptionTypeDefaultDescriptionlist_namestringAutoDisplay name for this list in MachFive UIemail_countnumber3Emails per lead (1-5)email_signaturestringNoneSignature appended to emailscampaign_anglestringNoneContext for personalizationapproved_ctasarrayFrom campaignCTAs to use (omit to use campaign defaults)"
      },
      {
        "title": "Limits",
        "body": "Single lead (sync): Request can take 5–10 minutes; use a client timeout of at least 300s (5 min) or 600s (10 min).\nBatch (async): Returns 202 immediately; poll GET /api/v1/lists/{list_id} every 10–30s until processing_status is completed or failed. Workspaces have a concurrent batch limit; if you get 429, retry later.\nList lists: Query param limit default 50, max 100; offset for pagination."
      },
      {
        "title": "Errors",
        "body": "CodeErrorDescription400BAD_REQUESTInvalid JSON, missing lead/leads, or missing/invalid lead email; or campaign has no vector store401UNAUTHORIZEDInvalid or missing API key402INSUFFICIENT_CREDITSOut of credits403FORBIDDENCampaign not in your workspace404NOT_FOUNDCampaign or list doesn't exist409NOT_READYExport called before list completed (poll GET /lists/:id first)429WORKSPACE_LIMITToo many concurrent batch jobs; try again later"
      },
      {
        "title": "Usage Examples",
        "body": "\"Generate a cold email for the VP of Sales at Stripe\"\n\"Create outreach sequences for these 10 leads\"\n\"Write a 3-email sequence targeting marketing directors at SaaS companies\""
      },
      {
        "title": "Pricing",
        "body": "Free: 100 credits/month\nStarter: 2,000 credits/month\nGrowth: 5,000 credits/month\nEnterprise: Custom credits/month\n1 credit = 1 lead processed\n\nGet started: https://machfive.io"
      }
    ],
    "body": "MachFive - AI Cold Email Generator\n\nGenerate personalized cold email sequences from lead data. MachFive uses AI to research prospects and craft unique, relevant outreach - not templates.\n\nSetup\nGet your API key at https://app.machfive.io/settings (Integrations → API Keys)\nSet MACHFIVE_API_KEY in your environment\nCampaign ID\n\nEvery generate request needs a campaign ID in the URL: /api/v1/campaigns/{campaign_id}/generate (or /generate-batch).\n\nIf the user has not provided a campaign name or ID: Call GET /api/v1/campaigns (see below) to list campaigns in their workspace, then ask them to pick one by name or ID before running generate.\nWhere to get it manually: https://app.machfive.io/campaigns → open a campaign → copy the ID from the URL or settings.\nNo default: The skill does not assume a campaign. The user (or agent config) must provide one. Agents can store a default campaign ID for the workspace if the user provides it (e.g. \"use campaign X for my requests\").\nEndpoints\nList Campaigns (discover before generate)\n\nList campaigns in the workspace so the agent can ask the user which campaign to use when they haven't provided a name or ID.\n\nGET https://app.machfive.io/api/v1/campaigns\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\n\nOr use X-API-Key: {MACHFIVE_API_KEY} header.\n\nOptional query: ?q=search or ?name=search to filter by campaign name.\n\nResponse (200):\n\n{\n  \"campaigns\": [\n    { \"id\": \"cb1bbb14-e576-4d8f-a8f3-6fa929076fd8\", \"name\": \"SaaS Q1 Outreach\", \"created_at\": \"2025-01-15T12:00:00Z\" },\n    { \"id\": \"a1b2c3d4-...\", \"name\": \"Enterprise Leads\", \"created_at\": \"2025-01-10T08:00:00Z\" }\n  ]\n}\n\n\nIf no campaign name or ID was given, call this first, then ask the user: \"Which campaign should I use? [list names/IDs].\"\n\nSingle Lead (Sync)\n\nGenerate an email sequence for one lead (3–5 emails per lead). Waits for completion, returns the sequence directly. The request can take 3–5 minutes (AI research + generation); use a client timeout of at least 300 seconds (5 min) or 600 seconds (10 min). Do not use a 120s timeout or the response will be cut off.\n\nPOST https://app.machfive.io/api/v1/campaigns/{campaign_id}/generate\nAuthorization: Bearer {MACHFIVE_API_KEY}\nContent-Type: application/json\n\n\nOr use X-API-Key: {MACHFIVE_API_KEY} header.\n\n{\n  \"lead\": {\n    \"name\": \"John Smith\",\n    \"title\": \"VP of Marketing\",\n    \"company\": \"Acme Corp\",\n    \"email\": \"john@acme.com\",\n    \"company_website\": \"https://acme.com\",\n    \"linkedin_url\": \"https://linkedin.com/in/johnsmith\"\n  },\n  \"options\": {\n    \"list_name\": \"Q1 Outreach\",\n    \"email_count\": 3,\n    \"email_signature\": \"Best,\\nYour Name\",\n    \"approved_ctas\": [\"Direct Meeting CTA\", \"Lead Magnet CTA\"]\n  }\n}\n\n\nResponse (200):\n\n{\n  \"lead_id\": \"lead_xyz789\",\n  \"list_id\": \"uuid\",\n  \"sequence\": [\n    { \"step\": 1, \"subject\": \"...\", \"body\": \"...\" },\n    { \"step\": 2, \"subject\": \"...\", \"body\": \"...\" },\n    { \"step\": 3, \"subject\": \"...\", \"body\": \"...\" }\n  ],\n  \"credits_remaining\": 94\n}\n\n\nRecovery: The response includes list_id. If the request times out or the response is truncated, you can still get the result: call GET /api/v1/lists/{list_id} to confirm status, then GET /api/v1/lists/{list_id}/export?format=json to retrieve the sequence.\n\nBatch (Async)\n\nGenerate email sequences for multiple leads (one list; each lead gets a sequence). Returns immediately (202) with list_id; processing runs in the background. To get results: poll list status, then call export.\n\nPOST https://app.machfive.io/api/v1/campaigns/{campaign_id}/generate-batch\nAuthorization: Bearer {MACHFIVE_API_KEY}\nContent-Type: application/json\n\n\nOr use X-API-Key: {MACHFIVE_API_KEY} header.\n\n{\n  \"leads\": [\n    { \"name\": \"John Smith\", \"email\": \"john@acme.com\", \"company\": \"Acme Corp\", \"title\": \"VP Marketing\" },\n    { \"name\": \"Jane Doe\", \"email\": \"jane@beta.com\", \"company\": \"Beta Inc\", \"title\": \"Director Sales\" }\n  ],\n  \"options\": {\n    \"list_name\": \"Q1 Outreach Batch\",\n    \"email_count\": 3\n  }\n}\n\n\nResponse (202):\n\n{\n  \"list_id\": \"uuid\",\n  \"status\": \"processing\",\n  \"leads_count\": 2,\n  \"message\": \"Batch accepted. Poll list status or open in UI.\"\n}\n\nList lead lists\n\nList lead lists in the workspace. Optional query: campaign_id, status (pending | processing | completed | failed), limit (default 50, max 100), offset.\n\nGET https://app.machfive.io/api/v1/lists\nGET https://app.machfive.io/api/v1/lists?campaign_id={campaign_id}&status=completed&limit=20\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\n\nResponse (200): { \"lists\": [ { \"id\", \"campaign_id\", \"custom_name\", \"processing_status\", \"created_at\", \"completed_at\" }, ... ] }. Order is created_at desc.\n\nList status (poll)\n\nPoll until the list is done. Use the list_id from generate or generate-batch.\n\nGET https://app.machfive.io/api/v1/lists/{list_id}\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\n\nResponse (200): id, campaign_id, custom_name, processing_status (pending | processing | completed | failed), created_at, updated_at. When processing_status === 'completed': leads_count, emails_created, completed_at. When failed: failed_at. 404 if list not found or not in workspace.\n\nPoll every 10–30 seconds until processing_status === 'completed' or failed. If failed, the list cannot be exported; retry by submitting a new batch.\n\nList export (get results)\n\nAfter status is completed, fetch the processed output. CSV (default) or JSON.\n\nGET https://app.machfive.io/api/v1/lists/{list_id}/export?format=csv\nGET https://app.machfive.io/api/v1/lists/{list_id}/export?format=json\nAuthorization: Bearer {MACHFIVE_API_KEY}\n\nformat=csv (default): Returns the processed CSV (same as UI download), with Content-Disposition: attachment; filename=\"MachFive-{list_id}.csv\".\nformat=json: Returns { \"leads\": [ { \"email\": \"...\", \"sequence\": [ { \"step\": 1, \"subject\": \"...\", \"body\": \"...\" }, ... ] }, ... ] }. Each lead may include optional name, company, title when present, e.g. { \"email\": \"john@acme.com\", \"name\": \"John Smith\", \"company\": \"Acme Corp\", \"title\": \"VP Marketing\", \"sequence\": [ ... ] }.\n409 if list is not yet completed (poll GET /lists/:id first). 404 if list not found or not in workspace.\n\nBatch flow: POST generate-batch → 202 + list_id → poll GET /lists/:id until processing_status === 'completed' → GET /lists/:id/export?format=csv or json → return result to user.\n\nLead Fields\n\nEach lead must include a valid email; it is used to map the lead through processing and to match generated sequences back to the lead in exports (same as the app UI). All other fields are optional but improve personalization.\n\nField\tRequired\tDescription\nemail\tYes\tLead's email address; used to map the lead through processing and in exports\nname\tNo\tFull name or first name (improves personalization)\ncompany\tNo\tCompany name (improves personalization)\ntitle\tNo\tJob title (improves personalization)\ncompany_website\tNo\tCompany URL for research\nlinkedin_url\tNo\tLinkedIn profile for deeper personalization\nOptions\nOption\tType\tDefault\tDescription\nlist_name\tstring\tAuto\tDisplay name for this list in MachFive UI\nemail_count\tnumber\t3\tEmails per lead (1-5)\nemail_signature\tstring\tNone\tSignature appended to emails\ncampaign_angle\tstring\tNone\tContext for personalization\napproved_ctas\tarray\tFrom campaign\tCTAs to use (omit to use campaign defaults)\nLimits\nSingle lead (sync): Request can take 5–10 minutes; use a client timeout of at least 300s (5 min) or 600s (10 min).\nBatch (async): Returns 202 immediately; poll GET /api/v1/lists/{list_id} every 10–30s until processing_status is completed or failed. Workspaces have a concurrent batch limit; if you get 429, retry later.\nList lists: Query param limit default 50, max 100; offset for pagination.\nErrors\nCode\tError\tDescription\n400\tBAD_REQUEST\tInvalid JSON, missing lead/leads, or missing/invalid lead email; or campaign has no vector store\n401\tUNAUTHORIZED\tInvalid or missing API key\n402\tINSUFFICIENT_CREDITS\tOut of credits\n403\tFORBIDDEN\tCampaign not in your workspace\n404\tNOT_FOUND\tCampaign or list doesn't exist\n409\tNOT_READY\tExport called before list completed (poll GET /lists/:id first)\n429\tWORKSPACE_LIMIT\tToo many concurrent batch jobs; try again later\nUsage Examples\n\n\"Generate a cold email for the VP of Sales at Stripe\" \"Create outreach sequences for these 10 leads\" \"Write a 3-email sequence targeting marketing directors at SaaS companies\"\n\nPricing\nFree: 100 credits/month\nStarter: 2,000 credits/month\nGrowth: 5,000 credits/month\nEnterprise: Custom credits/month\n1 credit = 1 lead processed\n\nGet started: https://machfive.io"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Bluecraft-AI/cold-email",
    "publisherUrl": "https://clawhub.ai/Bluecraft-AI/cold-email",
    "owner": "Bluecraft-AI",
    "version": "1.0.5",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/cold-email",
    "downloadUrl": "https://openagent3.xyz/downloads/cold-email",
    "agentUrl": "https://openagent3.xyz/skills/cold-email/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cold-email/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cold-email/agent.md"
  }
}