{
  "schemaVersion": "1.0",
  "item": {
    "slug": "release-tracker",
    "name": "Release Tracker",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jo9900/release-tracker",
    "canonicalUrl": "https://clawhub.ai/jo9900/release-tracker",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/release-tracker",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=release-tracker",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/config-examples.md",
      "scripts/setup.sh"
    ],
    "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-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/release-tracker"
    },
    "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/release-tracker",
    "agentPageUrl": "https://openagent3.xyz/skills/release-tracker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/release-tracker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/release-tracker/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": "Release Tracker",
        "body": "Monitor one or more GitHub repositories for new releases, generate prioritized summaries, and deliver them to configured channels."
      },
      {
        "title": "Prerequisites",
        "body": "gh CLI installed and authenticated (gh auth status)\nFor Discord delivery: Discord channel configured in OpenClaw"
      },
      {
        "title": "Single Repo Setup",
        "body": "Set up tracking for one repo with a cron job:\n\n1. Create a config file at <workspace>/release-tracker.json (see Configuration)\n2. Create a cron job (isolated, daily) that runs the check\n3. The cron reads config, checks GitHub, compares versions, posts if new"
      },
      {
        "title": "Multi-Repo Setup",
        "body": "Add multiple repos to the repos array in config. Each repo has independent version tracking and priority rules."
      },
      {
        "title": "Configuration",
        "body": "Store config at <workspace>/release-tracker.json:\n\n{\n  \"repos\": [\n    {\n      \"owner\": \"openclaw\",\n      \"repo\": \"openclaw\",\n      \"displayName\": \"OpenClaw\",\n      \"priorities\": [\"discord\", \"voice\", \"telegram\", \"cron\", \"agent\"],\n      \"outputChannel\": \"<your-discord-channel-id>\",\n      \"outputFormat\": \"discord-forum\",\n      \"language\": \"en\",\n      \"includePrerelease\": false\n    }\n  ],\n  \"versionStore\": \"release-tracker-state.json\",\n  \"schedule\": \"0 10 * * *\",\n  \"timezone\": \"UTC\"\n}"
      },
      {
        "title": "Config Fields",
        "body": "repos[].owner / repos[].repo — GitHub owner/repo\nrepos[].displayName — friendly name for output header\nrepos[].priorities — keywords to sort higher in summary (matched against changelog text)\nrepos[].outputChannel — Discord channel/forum ID for delivery\nrepos[].outputFormat — discord-forum | discord-channel | telegram | slack | text\n\ndiscord-forum: create a new forum post per release\ndiscord-channel: send a message to a Discord channel\ntelegram: send a message to a Telegram chat/channel/group\nslack: send a message to a Slack channel\ntext: return plain text (for piping to other tools)\n\n\nrepos[].language — zh | en (summary language)\nrepos[].includePrerelease — track pre-release/RC versions\nrepos[].filter — optional, stable | all (default: stable)\nversionStore — filename for tracking last-seen versions (relative to workspace)\nschedule — cron expression for check frequency\ntimezone — timezone for cron schedule"
      },
      {
        "title": "Check for New Releases",
        "body": "Read config from release-tracker.json\nRead version state from <versionStore>\nFor each repo:\ngh release list --repo <owner>/<repo> --limit 5 --json tagName,publishedAt,isPrerelease\n\n\nCompare latest tag against stored version\nIf new version found, proceed to summarize"
      },
      {
        "title": "Generate Summary",
        "body": "Fetch release content:\ngh release view <tag> --repo <owner>/<repo> --json body\n\n\nIf release body is sparse, also check local CHANGELOG if the package is installed:\ncat /opt/homebrew/lib/node_modules/<package>/CHANGELOG.md\n\n\nParse and categorize changes into sections:\n\nPriority items — lines matching any priorities keywords, shown first\nFeatures — new capabilities\nBreaking changes — marked with ⚠️\nFixes — bug fixes relevant to user (skip internal/CI fixes)\nSecurity — collapsed at bottom unless critical\nSkip: CI/test-only changes, dependency bumps, internal refactors"
      },
      {
        "title": "Prioritization Rules",
        "body": "Sort entries within each section:\n\nLines matching priorities keywords → top\nUser-facing changes → middle\nInternal/infrastructure → bottom\nOmit: trivial fixes, test-only changes, doc typos"
      },
      {
        "title": "Format Output",
        "body": "Discord Forum (discord-forum)\n\nTitle: 📦 v{version}\n\nBody:\n## {displayName} v{version}\n\n### ⭐ Key Features\n{priority matches + features, formatted as bold headers with descriptions}\n\n### ⚠️ Breaking Changes\n{breaking changes with migration notes}\n\n### 🔧 Fixes\n{relevant fixes, grouped by area}\n\n### 🛡️ Security\n{security fixes, brief}\n\nDiscord Channel (discord-channel)\n\nCompact single-message format, max 2000 chars.\n\nTelegram (telegram)\n\nSame structure as Discord Channel but respects Telegram formatting (markdown v2). Max 4096 chars.\n\nSlack (slack)\n\nSame structure, uses Slack mrkdwn formatting. Max 3000 chars.\n\nText (text)\n\nPlain markdown, no emoji headers."
      },
      {
        "title": "Deliver",
        "body": "Based on outputFormat:\n\ndiscord-forum: message(action=thread-create, channelId=<outputChannel>, threadName=<title>, message=<body>)\ndiscord-channel: message(action=send, channel=discord, target=<outputChannel>, message=<body>)\ntelegram: message(action=send, channel=telegram, target=<outputChannel>, message=<body>)\nslack: message(action=send, channel=slack, target=<outputChannel>, message=<body>)\ntext: return as tool result"
      },
      {
        "title": "Update State",
        "body": "After successful delivery, update version store:\n\n{\n  \"openclaw/openclaw\": {\n    \"lastVersion\": \"2026.2.22-2\",\n    \"lastCheckedAt\": \"2026-02-24T10:00:00+09:00\",\n    \"lastPublishedAt\": \"2026-02-22T...\"\n  }\n}"
      },
      {
        "title": "Cron Setup",
        "body": "Create the cron job for automated checking:\n\nName: release-tracker\nSchedule: {config.schedule} with tz {config.timezone}\nSession: isolated\nPayload: agentTurn with message referencing this skill\nDelivery: none (skill handles its own delivery)\n\nThe cron message should instruct the agent to:\n\nRead release-tracker.json for config\nRead release-tracker-state.json for last versions\nCheck each repo via gh release list\nIf new releases found, generate summaries and deliver\nUpdate state file"
      },
      {
        "title": "Manual Check",
        "body": "User can trigger manually: \"check for new releases\" or \"any updates on openclaw?\"\n\nThe agent should:\n\nLoad config\nRun the check workflow\nReport findings conversationally (not necessarily in forum format)"
      }
    ],
    "body": "Release Tracker\n\nMonitor one or more GitHub repositories for new releases, generate prioritized summaries, and deliver them to configured channels.\n\nPrerequisites\ngh CLI installed and authenticated (gh auth status)\nFor Discord delivery: Discord channel configured in OpenClaw\nQuick Start\nSingle Repo Setup\n\nSet up tracking for one repo with a cron job:\n\n1. Create a config file at <workspace>/release-tracker.json (see Configuration)\n2. Create a cron job (isolated, daily) that runs the check\n3. The cron reads config, checks GitHub, compares versions, posts if new\n\nMulti-Repo Setup\n\nAdd multiple repos to the repos array in config. Each repo has independent version tracking and priority rules.\n\nConfiguration\n\nStore config at <workspace>/release-tracker.json:\n\n{\n  \"repos\": [\n    {\n      \"owner\": \"openclaw\",\n      \"repo\": \"openclaw\",\n      \"displayName\": \"OpenClaw\",\n      \"priorities\": [\"discord\", \"voice\", \"telegram\", \"cron\", \"agent\"],\n      \"outputChannel\": \"<your-discord-channel-id>\",\n      \"outputFormat\": \"discord-forum\",\n      \"language\": \"en\",\n      \"includePrerelease\": false\n    }\n  ],\n  \"versionStore\": \"release-tracker-state.json\",\n  \"schedule\": \"0 10 * * *\",\n  \"timezone\": \"UTC\"\n}\n\nConfig Fields\nrepos[].owner / repos[].repo — GitHub owner/repo\nrepos[].displayName — friendly name for output header\nrepos[].priorities — keywords to sort higher in summary (matched against changelog text)\nrepos[].outputChannel — Discord channel/forum ID for delivery\nrepos[].outputFormat — discord-forum | discord-channel | telegram | slack | text\ndiscord-forum: create a new forum post per release\ndiscord-channel: send a message to a Discord channel\ntelegram: send a message to a Telegram chat/channel/group\nslack: send a message to a Slack channel\ntext: return plain text (for piping to other tools)\nrepos[].language — zh | en (summary language)\nrepos[].includePrerelease — track pre-release/RC versions\nrepos[].filter — optional, stable | all (default: stable)\nversionStore — filename for tracking last-seen versions (relative to workspace)\nschedule — cron expression for check frequency\ntimezone — timezone for cron schedule\nWorkflow\nCheck for New Releases\nRead config from release-tracker.json\nRead version state from <versionStore>\nFor each repo:\ngh release list --repo <owner>/<repo> --limit 5 --json tagName,publishedAt,isPrerelease\n\nCompare latest tag against stored version\nIf new version found, proceed to summarize\nGenerate Summary\nFetch release content:\ngh release view <tag> --repo <owner>/<repo> --json body\n\nIf release body is sparse, also check local CHANGELOG if the package is installed:\ncat /opt/homebrew/lib/node_modules/<package>/CHANGELOG.md\n\nParse and categorize changes into sections:\nPriority items — lines matching any priorities keywords, shown first\nFeatures — new capabilities\nBreaking changes — marked with ⚠️\nFixes — bug fixes relevant to user (skip internal/CI fixes)\nSecurity — collapsed at bottom unless critical\nSkip: CI/test-only changes, dependency bumps, internal refactors\nPrioritization Rules\n\nSort entries within each section:\n\nLines matching priorities keywords → top\nUser-facing changes → middle\nInternal/infrastructure → bottom\nOmit: trivial fixes, test-only changes, doc typos\nFormat Output\nDiscord Forum (discord-forum)\nTitle: 📦 v{version}\n\nBody:\n## {displayName} v{version}\n\n### ⭐ Key Features\n{priority matches + features, formatted as bold headers with descriptions}\n\n### ⚠️ Breaking Changes\n{breaking changes with migration notes}\n\n### 🔧 Fixes\n{relevant fixes, grouped by area}\n\n### 🛡️ Security\n{security fixes, brief}\n\nDiscord Channel (discord-channel)\n\nCompact single-message format, max 2000 chars.\n\nTelegram (telegram)\n\nSame structure as Discord Channel but respects Telegram formatting (markdown v2). Max 4096 chars.\n\nSlack (slack)\n\nSame structure, uses Slack mrkdwn formatting. Max 3000 chars.\n\nText (text)\n\nPlain markdown, no emoji headers.\n\nDeliver\n\nBased on outputFormat:\n\ndiscord-forum: message(action=thread-create, channelId=<outputChannel>, threadName=<title>, message=<body>)\ndiscord-channel: message(action=send, channel=discord, target=<outputChannel>, message=<body>)\ntelegram: message(action=send, channel=telegram, target=<outputChannel>, message=<body>)\nslack: message(action=send, channel=slack, target=<outputChannel>, message=<body>)\ntext: return as tool result\nUpdate State\n\nAfter successful delivery, update version store:\n\n{\n  \"openclaw/openclaw\": {\n    \"lastVersion\": \"2026.2.22-2\",\n    \"lastCheckedAt\": \"2026-02-24T10:00:00+09:00\",\n    \"lastPublishedAt\": \"2026-02-22T...\"\n  }\n}\n\nCron Setup\n\nCreate the cron job for automated checking:\n\nName: release-tracker\nSchedule: {config.schedule} with tz {config.timezone}\nSession: isolated\nPayload: agentTurn with message referencing this skill\nDelivery: none (skill handles its own delivery)\n\n\nThe cron message should instruct the agent to:\n\nRead release-tracker.json for config\nRead release-tracker-state.json for last versions\nCheck each repo via gh release list\nIf new releases found, generate summaries and deliver\nUpdate state file\nManual Check\n\nUser can trigger manually: \"check for new releases\" or \"any updates on openclaw?\"\n\nThe agent should:\n\nLoad config\nRun the check workflow\nReport findings conversationally (not necessarily in forum format)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jo9900/release-tracker",
    "publisherUrl": "https://clawhub.ai/jo9900/release-tracker",
    "owner": "jo9900",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/release-tracker",
    "downloadUrl": "https://openagent3.xyz/downloads/release-tracker",
    "agentUrl": "https://openagent3.xyz/skills/release-tracker/agent",
    "manifestUrl": "https://openagent3.xyz/skills/release-tracker/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/release-tracker/agent.md"
  }
}