From release-automation
Generate changelog entries from commits for any project type
npx claudepluginhub jayteealao/agent-skills --plugin release-automationThis skill uses the workspace's default tool permissions.
Generates changelog entries from git commits, categorizes changes into Added/Changed/Fixed/Breaking sections following configurable changelog format (default: keep-a-changelog), and updates or creates the changelog file for any project type.
Verifies tests pass on completed feature branch, presents options to merge locally, create GitHub PR, keep as-is or discard; executes choice and cleans up worktree.
Guides root cause investigation for bugs, test failures, unexpected behavior, performance issues, and build failures before proposing fixes.
Writes implementation plans from specs for multi-step tasks, mapping files and breaking into TDD bite-sized steps before coding.
Generates changelog entries from git commits, categorizes changes into Added/Changed/Fixed/Breaking sections following configurable changelog format (default: keep-a-changelog), and updates or creates the changelog file for any project type.
Requires:
detect-project-type skillUse configuration from detect-project-type:
changelog_file - Path to changelog file (default: CHANGELOG.md)changelog_format - Format to use (default: keep-a-changelog)tag_pattern - For finding commits since last tagUse changelog_file from configuration:
changelog_file="CHANGELOG.md" # from config, can be:
# - CHANGELOG.md (standard)
# - HISTORY.md (alternative)
# - CHANGES.rst (Python projects)
# - NEWS.md (GNU projects)
# - {package}/CHANGELOG.md (monorepos)
Check if file exists. If not, create with initial structure based on format:
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/).
Get commits since last release tag:
if [ -n "$last_tag" ]; then
git log ${last_tag}..HEAD --oneline --no-merges
else
# First release - get all commits
git log --oneline --no-merges
fi
For monorepo projects, optionally filter commits by package directory:
# Filter commits that touched this package only
git log ${last_tag}..HEAD --oneline --no-merges -- packages/my-lib/
Parse each commit message and categorize:
Added (new features):
feat: or feat(scope):Changed (modifications to existing features):
refactor: prefixFixed (bug fixes):
fix: or fix(scope):Breaking Changes:
BREAKING CHANGE: in body! after type (e.g., feat!:)Uncategorized:
chore:, docs:, test:, style:) → skip or place in "Changed"Generate entry following this format:
## Version {version} - {date}
### Breaking Changes
- Description of breaking change 1
- Description of breaking change 2
### Added
- New feature description 1
- New feature description 2
### Changed
- Change description 1
- Change description 2
### Fixed
- Bug fix description 1
- Bug fix description 2
Formatting rules:
Read existing changelog file, parse structure, and insert new entry:
Create a commit message from the changelog content:
Release {scope} v{version}
{changelog-entry-body}
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Return:
{
"changelog_path": "plugins/daily-carry/CHANGELOG.md",
"new_entry": "## Version 1.2.0 - 2026-01-12\n\n### Added\n- New deployment skill\n\n### Fixed\n- Version detection logic",
"commit_message": "Release plugin:daily-carry v1.2.0\n\nAdded:\n- New deployment skill\n\nFixed:\n- Version detection logic\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
"categories": {
"added": 1,
"changed": 0,
"fixed": 1,
"breaking": 0
},
"file_created": false
}
Input:
plugin:daily-carry1.2.0daily-carry-v1.1.0Commits:
feat: add deploy-otterstack command
fix: correct git push error handling
docs: update README with examples
Generated Entry:
## Version 1.2.0 - 2026-01-12
### Added
- Add deploy-otterstack command
### Fixed
- Correct git push error handling
Output:
{
"changelog_path": "plugins/daily-carry/CHANGELOG.md",
"new_entry": "## Version 1.2.0 - 2026-01-12\n\n### Added\n- Add deploy-otterstack command\n\n### Fixed\n- Correct git push error handling",
"commit_message": "Release plugin:daily-carry v1.2.0\n\nAdded:\n- Add deploy-otterstack command\n\nFixed:\n- Correct git push error handling\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
"categories": {
"added": 1,
"changed": 0,
"fixed": 1,
"breaking": 0
},
"file_created": false
}
Input:
marketplace2.0.0Commits:
feat!: change marketplace schema structure
BREAKING CHANGE: marketplace.json now requires plugins array with explicit versions
Generated Entry:
## Version 2.0.0 - 2026-01-12
### Breaking Changes
- marketplace.json now requires plugins array with explicit versions
### Added
- Change marketplace schema structure
Input:
variants1.2.0Generated Entry:
## Version 1.2.0 - 2026-01-12
- Update Android and TypeScript variants with new git workflow patterns
Commit Message:
Release variants v1.2.0
Update Android and TypeScript variants with new git workflow patterns
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Input:
plugin:new-plugin1.0.0Generated Entry:
## Version 1.0.0 - 2026-01-12
### Added
- Initial release of new-plugin
This skill is invoked by the /release command in Phase 3. The command will: