Trigger when the user wants to update CHANGELOG.md, bump version numbers, or document recent changes after editing code. Do NOT trigger for code reviews, style checks, test runs, or general questions about the project.
Maintain a project changelog, bump version numbers, and update user-facing documentation to reflect recent changes. This skill produces terse, timestamped entries — not prose.
If CHANGELOG.md does not exist, create it.
Before starting, check the environment variable AGENT_AUTONOMY_MODE via Bash (e.g. echo $AGENT_AUTONOMY_MODE) — compare case-insensitively. If it is set to yolo, this skill operates fully autonomously:
Collect the full picture of what changed:
git diff (unstaged) and (staged)git diff --stagedgit log --oneline -20 to see recent historygit branch --show-currentCHANGELOG.md exists, read it to find the most recent entry and its date/commit hashIf there are no uncommitted changes AND no new commits since the last changelog entry, inform the user there's nothing to log and stop immediately. Do not proceed to any further steps.
For each new commit and any uncommitted changes, classify the change:
Based on the classifications above, determine the appropriate semver bump:
breaking changes presentfeat changes present (and no breaking)fix changes present (and no feat/breaking)docs, refactor, style, test, or chore changesSearch for the version in common locations (check all, update all that exist):
package.json — "version" fieldVERSION fileVERSION = , version = , __version__)Cargo.toml — version fieldpyproject.toml — version fieldIf no version is tracked anywhere, skip version bumping entirely.
Draft a new entry for CHANGELOG.md following this format:
## [X.Y.Z] - YYYY-MM-DD
### Added
- terse description of new feature (commit hash)
### Fixed
- terse description of bug fix (commit hash)
### Changed
- terse description of change (commit hash)
### Removed
- terse description of removal (commit hash)
### Breaking
- terse description of breaking change (commit hash)
Rules:
CHANGELOG.md doesn't exist yet, create it with a header: # Changelog# Changelog headerCheck if any changes affect user-facing behavior. If so, identify what needs updating in README.md:
Keep README edits terse — document what changed, not prose. If no user-facing behavior changed, skip README updates.
Present the user with a summary of what will be written:
Ask the user to confirm. Offer options:
Wait for the user's reply before taking any action, unless this skill is running in an autonomous context or YOLO mode. In either case, proceed to apply all updates without asking.
In YOLO mode, skip this step entirely — apply all updates directly.
Apply the confirmed changes:
After applying, output a brief summary of what was updated.