add-changelog
[ADD v0.11.0] Generate or refresh CHANGELOG.md from conventional commits
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
[ADD v0.11.0] Generate or refresh CHANGELOG.md from conventional commits
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
[ADD v0.11.0] Generate or sync a portable AGENTS.md from ADD project state — writes, checks drift, or merges with hand-curated content
[ADD v0.11.0] Declare absence — get autonomous work plan for the duration
[ADD v0.11.0] Return from absence — get briefing on autonomous work
[ADD v0.11.0] View project branding — accent color, palette, drift detection, image gen status
[ADD v0.11.0] Update project branding — new colors, fonts, tone, audit artifacts
[ADD v0.11.0] Plan and execute a work cycle — select features, assess parallelism, define validation
| name | add-changelog |
| description | [ADD v0.11.0] Generate or refresh CHANGELOG.md from conventional commits |
| argument-hint | [--from-scratch] |
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~/.codex/add/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 "..." |