changelog

Generate or update CHANGELOG.md from git commits using semantic versioning. Use when the user says "/changelog", wants to update the changelog, or asks to generate release notes.

Best use case

changelog is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Generate or update CHANGELOG.md from git commits using semantic versioning. Use when the user says "/changelog", wants to update the changelog, or asks to generate release notes.

Teams using changelog should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/changelog/SKILL.md --create-dirs "https://raw.githubusercontent.com/Charlieverse-ai/charlieverse/main/.charlie/tricks/changelog/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/changelog/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How changelog Compares

Feature / AgentchangelogStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Generate or update CHANGELOG.md from git commits using semantic versioning. Use when the user says "/changelog", wants to update the changelog, or asks to generate release notes.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

## What this skill does

Reviews commits since the last version tag, determines the version bump, and updates CHANGELOG.md.

## Steps

### 1. Find the latest version

```bash
git tag --sort=-v:refname | head -5
```

If no tags exist, the starting version is `v1.0.0` and all commits are included.

### 2. Get commits since last version

```bash
git log <last-tag>..HEAD --oneline --no-merges
```

If no tag, use all commits:
```bash
git log --oneline --no-merges
```

### 3. Check if the latest tag has been pushed

```bash
git log origin/main..HEAD --oneline 2>/dev/null
```

If the latest version tag exists only locally (i.e. the tagged commit appears in the `origin/main..HEAD` range), then this version has NOT been pushed yet. In that case:
1. Delete the existing local tag: `git tag -d <latest-tag>`
2. Merge the new commits into the EXISTING changelog entry for that version (update the entry in place, don't create a new one)
3. Re-tag the new changelog commit with the same version
4. Do NOT bump the version number — keep the same version

Only create a new version bump when the latest tag has already been pushed to origin.

### 3b. Determine version bump (only if bumping)

If `$ARGUMENTS` specifies `patch`, `minor`, or `major`, use that.

Otherwise, analyze the commits:
- **major**: breaking changes, architecture rewrites, API changes
- **minor**: new features, new commands, new skills, new integrations
- **patch**: bug fixes, config tweaks, documentation, refactors

### 4. Generate changelog entry

Read existing `CHANGELOG.md` if it exists. Prepend the new version entry at the top.

Format:
```markdown
## [vX.Y.Z] - YYYY-MM-DD

### Added
- New features, skills, commands

### Changed
- Modifications to existing behavior

### Fixed
- Bug fixes

### Removed
- Removed features or deprecated code
```

Group commits by category. Write concise human-readable descriptions (not raw commit messages). Skip empty categories.

**Filter out noise.** Do NOT include trivial commits that don't matter to someone reading a changelog:
- Formatting fixes (missing newlines, whitespace, trailing commas)
- Lockfile updates (`uv.lock`, `package-lock.json`)
- Version bumps that are just the changelog commit itself
- Typo fixes in non-user-facing files

Only include changes that affect functionality, behavior, or developer experience.

### 5. Commit the changelog

Update the version in pyproject.toml and uv.lock
Then commit all the files for the version bump.

```bash
charlie-commit -m "Update CHANGELOG for vX.Y.Z

Charlie 🐕 <charlie@charlieverse.ai>"
```

### 6. Tag the version

```bash
git tag vX.Y.Z
```

### 7. Build the wheel and create a GitHub release

Build the distributable wheel with all bundled assets:

```bash
cd web && npm run build && cd ..
rm -rf dist/
uv build --wheel
```

Create a GitHub release with the wheel attached. Use the changelog entry for this version as the release notes — extract the `## [vX.Y.Z]` section from CHANGELOG.md and pass it as `--notes`:

```bash
gh release create vX.Y.Z dist/*.whl --title "vX.Y.Z" --notes "$(changelog_entry)"
```

Where `changelog_entry` is the markdown content between the `## [vX.Y.Z]` header and the next `## [` header (or end of file). Do NOT use a lazy "See CHANGELOG.md for details" — the release notes should contain the full changelog entry.

Report the new version, summary of changes, and the release URL.

Related Skills

trick

6
from Charlieverse-ai/charlieverse

Run Charlie tricks by name or path. Use when the user says "/trick", wants to run a trick, list available tricks, or execute a skill file. Also trigger when the user mentions running a specific trick by name (e.g., "run the session-save trick", "run ship", "do the commit trick").

research

6
from Charlieverse-ai/charlieverse

Research a topic and save findings to Charlieverse knowledge. Use whenever the user wants to research something, look up documentation, investigate a library or tool, explore a concept, or asks "what do you know about X". Also trigger when the user says "/research", wants to build up knowledge about a subject, or asks you to "look into" something — even if they don't use the word "research" explicitly.

copilot

6
from Charlieverse-ai/charlieverse

Run a task through GitHub Copilot CLI. Use when the user says "/copilot", wants to delegate work to Copilot, or mentions running something through Copilot. Also trigger when the user wants to use Copilot for a task.

codex

6
from Charlieverse-ai/charlieverse

Run a task through OpenAI Codex CLI. Use when the user says "/codex", wants to delegate work to Codex, or mentions running something through Codex. Also trigger when the user wants to use an OpenAI model for a task.

session-save

6
from Charlieverse-ai/charlieverse

Save or update the current session. Use this skill when asked to handoff, save session, update session, start a new chat, etc. Always call this before using the `update_session` MCP tool directly.

charlie-import

6
from Charlieverse-ai/charlieverse

Import conversation history from AI providers (Claude, Copilot, Codex, Cursor) and generate stories from the imported data. Use on first session to bootstrap memory from existing conversations, or anytime the person wants to import history from another provider/machine.

typo-check

6
from Charlieverse-ai/charlieverse

Find typos, grammar errors, punctuation/capitalization mistakes, and banned-phrase voice slips in prose and code comments. Use when the user says "/typo-check", wants to scan for typos, or before shipping user-facing text. Reports findings and confirms before fixing.

test-coverage

6
from Charlieverse-ai/charlieverse

Evaluate the test coverage

ship

6
from Charlieverse-ai/charlieverse

Commit, docs, changelog, and push in one go. Use when the user says "/ship", wants to ship their changes, or asks to commit and push everything.

qc

6
from Charlieverse-ai/charlieverse

Run quality control checks on the codebase — type checking, linting, tests, and server smoke test. Use when the user says "/qc", wants to verify code quality, or after making significant changes.

docs

6
from Charlieverse-ai/charlieverse

Generate or update public documentation from source code. Use when the user says "/docs", wants to update docs, or asks to generate documentation for the project.

commit

6
from Charlieverse-ai/charlieverse

Review repo changes and create logical atomic commits. Use when the user says "/commit", wants to commit their work, or asks to break changes into commits.