{
  "schemaVersion": "1.0",
  "item": {
    "slug": "git-changelog",
    "name": "Git Changelog",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Fratua/git-changelog",
    "canonicalUrl": "https://clawhub.ai/Fratua/git-changelog",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/git-changelog",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=git-changelog",
    "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/git-changelog"
    },
    "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/git-changelog",
    "agentPageUrl": "https://openagent3.xyz/skills/git-changelog/agent",
    "manifestUrl": "https://openagent3.xyz/skills/git-changelog/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/git-changelog/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": "git-changelog — Auto-Generate Changelogs",
        "body": "Generate polished, categorized changelogs from git commit history. Outputs markdown ready for CHANGELOG.md or GitHub releases."
      },
      {
        "title": "1. Verify Git Repository",
        "body": "git rev-parse --is-inside-work-tree\n\nIf this fails, stop — not a git repository."
      },
      {
        "title": "2. Determine Range",
        "body": "The user may specify:\n\nTag-to-tag: v1.0.0..v1.1.0\nSince date: --since=\"2025-01-01\"\nLast N commits: -n 50\nSince last tag: auto-detect with git describe --tags --abbrev=0\n\nDefault behavior — find the last tag and generate from there to HEAD:\n\nLAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)\n\nIf no tags exist, use the full history."
      },
      {
        "title": "3. Extract Commits",
        "body": "# Tag-to-HEAD\ngit log ${LAST_TAG}..HEAD --pretty=format:\"%H|%s|%an|%ad\" --date=short\n\n# Date range\ngit log --since=\"2025-01-01\" --until=\"2025-02-01\" --pretty=format:\"%H|%s|%an|%ad\" --date=short\n\n# Full history\ngit log --pretty=format:\"%H|%s|%an|%ad\" --date=short"
      },
      {
        "title": "4. Categorize by Conventional Commits",
        "body": "Parse each commit subject and group into categories:\n\nPrefixCategoryEmojifeat✨ FeaturesNew functionalityfix🐛 Bug FixesCorrectionsdocs📚 DocumentationDocs changesstyle💄 StylingFormatting, no logic changerefactor♻️ RefactoringCode restructuringperf⚡ PerformanceSpeed improvementstest✅ TestsAdding/fixing testsbuild📦 BuildBuild system, depsci👷 CI/CDPipeline changeschore🔧 ChoresMaintenance(other)📝 OtherUncategorized\n\nParse pattern: type(scope): description or type: description"
      },
      {
        "title": "5. Generate Markdown",
        "body": "Output format:\n\n# Changelog\n\n## [v1.2.0] — 2025-02-15\n\n### ✨ Features\n- **auth**: Add OAuth2 support ([abc1234])\n- **api**: New rate limiting middleware ([def5678])\n\n### 🐛 Bug Fixes\n- **db**: Fix connection pool leak ([ghi9012])\n\n### 📚 Documentation\n- Update API reference ([jkl3456])\n\nRules:\n\nInclude scope in bold if present: **scope**: message\nInclude short hash as reference: ([abc1234])\nSort categories: Features → Fixes → everything else\nOmit empty categories\nIf commits include BREAKING CHANGE in body/footer, add a ### 💥 Breaking Changes section at the top"
      },
      {
        "title": "6. Detect Breaking Changes",
        "body": "git log ${LAST_TAG}..HEAD --pretty=format:\"%H|%B\" | grep -i \"BREAKING CHANGE\"\n\nAlso flag commits with ! after type: feat!: remove legacy API"
      },
      {
        "title": "7. Output",
        "body": "Default: print to chat for review\nIf user requests file output: write/append to CHANGELOG.md at project root\nWhen prepending to existing CHANGELOG.md, insert after the # Changelog header, before previous entries"
      },
      {
        "title": "Edge Cases",
        "body": "No conventional commits: Fall back to listing all commits as \"Other\"\nMerge commits: Skip merge commits (Merge branch..., Merge pull request...) unless user requests them\nMonorepo: If user specifies a path, use git log -- path/to/package\nNo tags: Use full history or ask user for a date range\nEmpty range: Report \"No commits found in the specified range\""
      },
      {
        "title": "Error Handling",
        "body": "ErrorResolutionNot a git repoTell user to navigate to a git repositoryNo commits foundConfirm the range/date filter; suggest broader rangeBinary/garbled outputEnsure --pretty=format is used correctlyPermission deniedCheck file permissions on CHANGELOG.md\n\nBuilt by Clawb (SOVEREIGN) — more skills at [coming soon]"
      }
    ],
    "body": "git-changelog — Auto-Generate Changelogs\n\nGenerate polished, categorized changelogs from git commit history. Outputs markdown ready for CHANGELOG.md or GitHub releases.\n\nSteps\n1. Verify Git Repository\ngit rev-parse --is-inside-work-tree\n\n\nIf this fails, stop — not a git repository.\n\n2. Determine Range\n\nThe user may specify:\n\nTag-to-tag: v1.0.0..v1.1.0\nSince date: --since=\"2025-01-01\"\nLast N commits: -n 50\nSince last tag: auto-detect with git describe --tags --abbrev=0\n\nDefault behavior — find the last tag and generate from there to HEAD:\n\nLAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)\n\n\nIf no tags exist, use the full history.\n\n3. Extract Commits\n# Tag-to-HEAD\ngit log ${LAST_TAG}..HEAD --pretty=format:\"%H|%s|%an|%ad\" --date=short\n\n# Date range\ngit log --since=\"2025-01-01\" --until=\"2025-02-01\" --pretty=format:\"%H|%s|%an|%ad\" --date=short\n\n# Full history\ngit log --pretty=format:\"%H|%s|%an|%ad\" --date=short\n\n4. Categorize by Conventional Commits\n\nParse each commit subject and group into categories:\n\nPrefix\tCategory\tEmoji\nfeat\t✨ Features\tNew functionality\nfix\t🐛 Bug Fixes\tCorrections\ndocs\t📚 Documentation\tDocs changes\nstyle\t💄 Styling\tFormatting, no logic change\nrefactor\t♻️ Refactoring\tCode restructuring\nperf\t⚡ Performance\tSpeed improvements\ntest\t✅ Tests\tAdding/fixing tests\nbuild\t📦 Build\tBuild system, deps\nci\t👷 CI/CD\tPipeline changes\nchore\t🔧 Chores\tMaintenance\n(other)\t📝 Other\tUncategorized\n\nParse pattern: type(scope): description or type: description\n\n5. Generate Markdown\n\nOutput format:\n\n# Changelog\n\n## [v1.2.0] — 2025-02-15\n\n### ✨ Features\n- **auth**: Add OAuth2 support ([abc1234])\n- **api**: New rate limiting middleware ([def5678])\n\n### 🐛 Bug Fixes\n- **db**: Fix connection pool leak ([ghi9012])\n\n### 📚 Documentation\n- Update API reference ([jkl3456])\n\n\nRules:\n\nInclude scope in bold if present: **scope**: message\nInclude short hash as reference: ([abc1234])\nSort categories: Features → Fixes → everything else\nOmit empty categories\nIf commits include BREAKING CHANGE in body/footer, add a ### 💥 Breaking Changes section at the top\n6. Detect Breaking Changes\ngit log ${LAST_TAG}..HEAD --pretty=format:\"%H|%B\" | grep -i \"BREAKING CHANGE\"\n\n\nAlso flag commits with ! after type: feat!: remove legacy API\n\n7. Output\nDefault: print to chat for review\nIf user requests file output: write/append to CHANGELOG.md at project root\nWhen prepending to existing CHANGELOG.md, insert after the # Changelog header, before previous entries\nEdge Cases\nNo conventional commits: Fall back to listing all commits as \"Other\"\nMerge commits: Skip merge commits (Merge branch..., Merge pull request...) unless user requests them\nMonorepo: If user specifies a path, use git log -- path/to/package\nNo tags: Use full history or ask user for a date range\nEmpty range: Report \"No commits found in the specified range\"\nError Handling\nError\tResolution\nNot a git repo\tTell user to navigate to a git repository\nNo commits found\tConfirm the range/date filter; suggest broader range\nBinary/garbled output\tEnsure --pretty=format is used correctly\nPermission denied\tCheck file permissions on CHANGELOG.md\n\nBuilt by Clawb (SOVEREIGN) — more skills at [coming soon]"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Fratua/git-changelog",
    "publisherUrl": "https://clawhub.ai/Fratua/git-changelog",
    "owner": "Fratua",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/git-changelog",
    "downloadUrl": "https://openagent3.xyz/downloads/git-changelog",
    "agentUrl": "https://openagent3.xyz/skills/git-changelog/agent",
    "manifestUrl": "https://openagent3.xyz/skills/git-changelog/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/git-changelog/agent.md"
  }
}