Changelog Linter
/install changelog-linter
Changelog Linter
Validate CHANGELOG.md files against the Keep a Changelog specification.
Commands
All commands use the bundled Python script at scripts/changelog_linter.py.
1. Lint a changelog
python3 scripts/changelog_linter.py lint \x3Cfile> [--strict] [--format text|json|markdown]
Run all validation rules against a CHANGELOG.md file.
Flags:
--strict— exit code 1 on any warning (not just errors)--format— output format:text(default),json,markdown
2. List versions
python3 scripts/changelog_linter.py versions \x3Cfile> [--format text|json]
Extract and display all versions with dates and change counts.
3. Validate version ordering
python3 scripts/changelog_linter.py order \x3Cfile> [--format text|json]
Check that versions are in descending semver order.
4. Check links
python3 scripts/changelog_linter.py links \x3Cfile> [--format text|json]
Verify that all version headers have corresponding link references at the bottom.
Lint Rules (16 total)
Structure (5 rules)
- missing-title — File doesn't start with
# Changelog - missing-description — No description paragraph after title
- no-versions — No version entries found
- empty-version — Version section has no change entries
- unreleased-missing — No
[Unreleased]section
Versions (4 rules)
- invalid-version — Version doesn't follow semver (MAJOR.MINOR.PATCH)
- invalid-date — Date doesn't follow ISO 8601 (YYYY-MM-DD)
- version-order — Versions not in descending order
- duplicate-version — Same version appears twice
Sections (3 rules)
- invalid-section — Section type not in spec (Added/Changed/Deprecated/Removed/Fixed/Security)
- empty-section — Section header with no list items
- section-order — Sections not in recommended order
Formatting (4 rules)
- missing-link-ref — Version header has no corresponding link reference
- broken-link-ref — Link reference exists but URL is empty or malformed
- inconsistent-bullets — Mixed bullet styles (
-and*) - trailing-whitespace — Lines with trailing whitespace
Output Formats
Text (default)
CHANGELOG.md:15 error [invalid-date] Version 1.2.0 has invalid date: "March 2024" (expected YYYY-MM-DD)
CHANGELOG.md:28 warning [empty-section] Section "Deprecated" under 1.1.0 has no entries
CHANGELOG.md:45 warning [missing-link-ref] Version 1.0.0 has no link reference
3 issues (1 error, 2 warnings)
JSON / Markdown
Standard structured output with issues, summary, and version list.
CI Integration
- name: Lint Changelog
run: python3 scripts/changelog_linter.py lint CHANGELOG.md --strict
Exit codes: 0 = valid, 1 = issues found.
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install changelog-linter - After installation, invoke the skill by name or use
/changelog-linter - Provide required inputs per the skill's parameter spec and get structured output
What is Changelog Linter?
Validate CHANGELOG.md files against the Keep a Changelog format (keepachangelog.com). Checks version ordering, date formats, section types, link references,... It is an AI Agent Skill for Claude Code / OpenClaw, with 86 downloads so far.
How do I install Changelog Linter?
Run "/install changelog-linter" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Changelog Linter free?
Yes, Changelog Linter is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Changelog Linter support?
Changelog Linter is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Changelog Linter?
It is built and maintained by charlie-morrison (@charlie-morrison); the current version is v1.0.0.