# Add Changelog Entry

> Add a new version entry to CHANGELOG.md. Reads recent git commits since the last tag, groups them by type (Added / Changed / Fixed / Removed), and prepends a formatted entry following Keep a Changelog conventions.

- Skill: `kostiantyn-matsebora/add-changelog-entry` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add kostiantyn-matsebora/add-changelog-entry`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kostiantyn-matsebora/add-changelog-entry/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kostiantyn-matsebora (https://skillmd.com/u/kostiantyn-matsebora)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kostiantyn-matsebora/add-changelog-entry

---


> **Runtime required.** This skill uses Canopy tree notation; canopy-runtime must be active.
>
> **Detect canopy-runtime** — present if either:
> - `canopy-runtime/SKILL.md` exists under `.claude/skills/`, `.github/skills/`, or `.agents/skills/`, OR
> - a canopy-runtime marker block exists in `CLAUDE.md` or `.github/copilot-instructions.md`.
>
> **If neither is present** — install canopy-runtime first (see the `compatibility` field for the source and install options), then re-invoke this skill.
>
> Do not interpret the `## Tree` without canopy-runtime active.

Add changelog entry for version: $ARGUMENTS

---

## Tree

```
add-changelog-entry
├── Validate $ARGUMENTS is a valid semver string
├── IF << not valid semver
│   └── END $ARGUMENTS is not a valid semver string
├── IF << CHANGELOG.md does not exist
│   └── create CHANGELOG.md from `assets/templates/changelog.md`
├── COLLECT_COMMITS >> commits
├── Read `assets/constants/levels.md` for valid change categories
├── CLASSIFY_COMMITS << commits >> {added, changed, fixed, removed}
├── SHOW_PLAN >> version | date | added | changed | fixed | removed
├── ASK << Proceed? | Yes | No
├── IF << Yes
│   ├── Read `assets/policies/changelog-rules.md` for entry formatting rules
│   ├── PREPEND_ENTRY << version
│   └── VERIFY_EXPECTED << assets/verify/verify-expected.md
└── ELSE
    └── Cancelled by user.
```

---

## Rules

- Version must follow semver — validate strictly before proceeding

## Response: version | entry_line_count | commit_count_processed

