{
  "schemaVersion": "1.0",
  "item": {
    "slug": "cron-retry",
    "name": "Cron Retry",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jrbobbyhansen-pixel/cron-retry",
    "canonicalUrl": "https://clawhub.ai/jrbobbyhansen-pixel/cron-retry",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/cron-retry",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cron-retry",
    "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/cron-retry"
    },
    "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/cron-retry",
    "agentPageUrl": "https://openagent3.xyz/skills/cron-retry/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cron-retry/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cron-retry/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": "Cron Retry Skill",
        "body": "Automatically detect and retry cron jobs that failed due to network/connection errors."
      },
      {
        "title": "Quick Start (Heartbeat Integration)",
        "body": "Add this to your HEARTBEAT.md:\n\n## Cron Recovery Check\nCheck for cron jobs with lastStatus: \"error\". If the error matches network patterns (connection error, sendMessage failed, fetch failed, ETIMEDOUT, ECONNREFUSED), retry the job using cron tool with action: \"run\" and the job ID. Report what was recovered.\n\nThat's it. On each heartbeat, failed network jobs get retried automatically."
      },
      {
        "title": "How It Works",
        "body": "On heartbeat, check all cron jobs via cron list\nFilter for jobs where lastStatus = \"error\" and enabled = true\nCheck if lastError matches network-related patterns\nRe-run eligible jobs via cron run\nReport results"
      },
      {
        "title": "Network Error Patterns (Retryable)",
        "body": "These errors indicate transient network issues worth retrying:\n\nNetwork request.*failed\nConnection error\nECONNREFUSED\nETIMEDOUT\nENOTFOUND\nsendMessage.*failed\nfetch failed\nsocket hang up"
      },
      {
        "title": "What Gets Retried vs Skipped",
        "body": "Retried:\n\nNetwork timeouts\nConnection refused\nMessage send failures\nDNS lookup failures\n\nSkipped (not retried):\n\nLogic errors (bad config, missing data)\nAuth failures\nDisabled jobs\nJobs that just ran successfully"
      },
      {
        "title": "Manual Recovery Check",
        "body": "To check and retry failed jobs manually:\n\n# List all jobs and their status\nclawdbot cron list\n\n# Find failed jobs\nclawdbot cron list | jq '.jobs[] | select(.state.lastStatus == \"error\") | {name, error: .state.lastError}'\n\n# Retry a specific job\nclawdbot cron run --id <JOB_ID>"
      },
      {
        "title": "Agent Implementation",
        "body": "When implementing the heartbeat check:\n\n1. Call cron tool with action: \"list\"\n2. For each job in response.jobs:\n   - Skip if job.enabled !== true\n   - Skip if job.state.lastStatus !== \"error\"\n   - Check if job.state.lastError matches network patterns\n   - If retryable: call cron tool with action: \"run\", jobId: job.id\n3. Report: \"Recovered X jobs\" or \"No failed jobs to recover\""
      },
      {
        "title": "Example Scenario",
        "body": "7:00 PM — Evening briefing cron fires\nNetwork hiccup — Telegram send fails\nJob marked lastStatus: \"error\", lastError: \"Network request for 'sendMessage' failed!\"\n7:15 PM — Connection restored, heartbeat runs\nSkill detects the failed job, sees it's a network error\nRetries the job → briefing delivered\nReports: \"Recovered 1 job: evening-wrap-briefing\""
      },
      {
        "title": "Safety",
        "body": "Only retries transient network errors\nRespects job enabled state\nWon't create retry loops (checks lastRunAtMs)\nReports all recovery attempts"
      }
    ],
    "body": "Cron Retry Skill\n\nAutomatically detect and retry cron jobs that failed due to network/connection errors.\n\nQuick Start (Heartbeat Integration)\n\nAdd this to your HEARTBEAT.md:\n\n## Cron Recovery Check\nCheck for cron jobs with lastStatus: \"error\". If the error matches network patterns (connection error, sendMessage failed, fetch failed, ETIMEDOUT, ECONNREFUSED), retry the job using cron tool with action: \"run\" and the job ID. Report what was recovered.\n\n\nThat's it. On each heartbeat, failed network jobs get retried automatically.\n\nHow It Works\nOn heartbeat, check all cron jobs via cron list\nFilter for jobs where lastStatus = \"error\" and enabled = true\nCheck if lastError matches network-related patterns\nRe-run eligible jobs via cron run\nReport results\nNetwork Error Patterns (Retryable)\n\nThese errors indicate transient network issues worth retrying:\n\nNetwork request.*failed\nConnection error\nECONNREFUSED\nETIMEDOUT\nENOTFOUND\nsendMessage.*failed\nfetch failed\nsocket hang up\nWhat Gets Retried vs Skipped\n\nRetried:\n\nNetwork timeouts\nConnection refused\nMessage send failures\nDNS lookup failures\n\nSkipped (not retried):\n\nLogic errors (bad config, missing data)\nAuth failures\nDisabled jobs\nJobs that just ran successfully\nManual Recovery Check\n\nTo check and retry failed jobs manually:\n\n# List all jobs and their status\nclawdbot cron list\n\n# Find failed jobs\nclawdbot cron list | jq '.jobs[] | select(.state.lastStatus == \"error\") | {name, error: .state.lastError}'\n\n# Retry a specific job\nclawdbot cron run --id <JOB_ID>\n\nAgent Implementation\n\nWhen implementing the heartbeat check:\n\n1. Call cron tool with action: \"list\"\n2. For each job in response.jobs:\n   - Skip if job.enabled !== true\n   - Skip if job.state.lastStatus !== \"error\"\n   - Check if job.state.lastError matches network patterns\n   - If retryable: call cron tool with action: \"run\", jobId: job.id\n3. Report: \"Recovered X jobs\" or \"No failed jobs to recover\"\n\nExample Scenario\n7:00 PM — Evening briefing cron fires\nNetwork hiccup — Telegram send fails\nJob marked lastStatus: \"error\", lastError: \"Network request for 'sendMessage' failed!\"\n7:15 PM — Connection restored, heartbeat runs\nSkill detects the failed job, sees it's a network error\nRetries the job → briefing delivered\nReports: \"Recovered 1 job: evening-wrap-briefing\"\nSafety\nOnly retries transient network errors\nRespects job enabled state\nWon't create retry loops (checks lastRunAtMs)\nReports all recovery attempts"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jrbobbyhansen-pixel/cron-retry",
    "publisherUrl": "https://clawhub.ai/jrbobbyhansen-pixel/cron-retry",
    "owner": "jrbobbyhansen-pixel",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/cron-retry",
    "downloadUrl": "https://openagent3.xyz/downloads/cron-retry",
    "agentUrl": "https://openagent3.xyz/skills/cron-retry/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cron-retry/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cron-retry/agent.md"
  }
}