From add
Generates or refreshes CHANGELOG.md from conventional git commits in Keep a Changelog format. Incremental mode appends new commits; --from-scratch regenerates from tags/full history.
npx claudepluginhub mountainunicorn/add --plugin addThis skill is limited to using the following tools:
Generate or refresh the project's CHANGELOG.md from git history using conventional commit parsing. Follows the [Keep a Changelog](https://keepachangelog.com/) format.
Generates formatted CHANGELOG.md from git commit history by categorizing conventional commits into Added, Fixed, Changed, and Breaking sections using Keep a Changelog format.
Generates or updates CHANGELOG.md from conventional git commits, grouping feat/fix/etc. into Keep a Changelog categories like Added/Fixed. Auto-detects range or accepts git args.
Analyzes git commit history to generate changelogs with semantic versioning, conventional commit categorization, and formats like Keep a Changelog, Conventional, or GitHub. Use for CHANGELOG.md updates, release notes, and version bumps.
Share bugs, ideas, or general feedback.
Generate or refresh the project's CHANGELOG.md from git history using conventional commit parsing. Follows the Keep a Changelog format.
CHANGELOG.md exists in the project root${CLAUDE_PLUGIN_ROOT}/templates/changelog.md.template.add/config.json for changelog.lastProcessedCommit (may be null)--from-scratch flag means full regeneration; otherwise incrementalMap conventional commit prefixes to Keep a Changelog sections:
| Commit Prefix | Changelog Section |
|---|---|
| feat: | Added |
| fix: | Fixed |
| docs: | Documentation |
| refactor: | Changed |
| perf: | Changed |
| deprecate: | Deprecated |
| remove: | Removed |
| security: | Security |
| revert: | Fixed |
These are internal/maintenance commits and should be silently skipped:
chore:test:ci:style:build:Commits that do not match any conventional prefix are categorized under Changed with the full message as the entry text.
Skip merge commits entirely — they duplicate the content of the merged commits.
CHANGELOG.md to understand current state.add/config.json for changelog.lastProcessedCommitlastProcessedCommit is set:
git log --oneline --no-merges {lastProcessedCommit}..HEAD to get new commitslastProcessedCommit is null:
git log --oneline --no-merges to get all commits--from-scratch)git tag --sort=-version:refname to get all version tagsgit log --oneline --no-merges to get full commit history[Unreleased][tag] - date sections (use tag date)CHANGELOG.md entirely (preserve the header from template)For each commit message:
^(feat|fix|docs|refactor|perf|deprecate|remove|security|revert|chore|test|ci|style|build)(\(.+\))?!?:\s*(.+)$chore, test, ci, style, or build, skip this commit(#spec-slug) pattern in the message — preserve these as-is! is present after the scope (e.g., feat!:) or commit body contains BREAKING CHANGE:, prefix the entry with **BREAKING:** - {Sentence-cased description} [(#spec-slug)]
Examples:
feat: add OAuth2 login flow (#auth-oauth) becomes - Add OAuth2 login flow (#auth-oauth) under Addedfix: correct redirect URL becomes - Correct redirect URL under Fixedfeat!: redesign API response format becomes - **BREAKING:** Redesign API response format under AddedBefore adding any entry to the changelog:
CHANGELOG.md content[Unreleased]Within [Unreleased] (and each versioned section), order subsections as:
Only include subsections that have entries — do not write empty subsections.
CHANGELOG.md## [Unreleased] line[Unreleased] to merge with new entries[Unreleased] block[Unreleased] unchangedAfter writing, update .add/config.json:
changelog.lastProcessedCommit to the current HEAD commit hash (run git rev-parse HEAD)Display a summary of what was added:
Changelog updated.
NEW ENTRIES:
Added: {N} entries
Changed: {N} entries
Fixed: {N} entries
{other sections as applicable}
SKIPPED:
Excluded (chore/test/ci/style/build): {N} commits
Duplicates: {N} entries already present
Merge commits: {N} skipped
Total: {N} new entries added to [Unreleased]
Last processed commit: {short hash}
| Case | Behavior |
|---|---|
| No conventional prefix | Categorize under "Changed" with full message |
| Empty push (no new commits) | Exit early with "Changelog is up to date" |
| CHANGELOG.md missing | Create from template, then proceed |
.add/config.json missing | Process all commits (no lastProcessedCommit) |
Scoped commits (e.g., feat(auth):) | Strip scope along with prefix |
| Multiple spec references | Preserve all (#slug) references |
| Very long subject (>100 chars) | Truncate to 100 chars with "..." |