Use when managing CHANGELOG entries. Check for undocumented commits, format and apply new entries safely.
View on GitHubavifenesh/awesome-slash
sync-docs
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/avifenesh/awesome-slash/blob/main/plugins/sync-docs/skills/changelog-update/SKILL.md -a claude-code --skill changelog-updateInstallation paths:
.claude/skills/changelog-update/# changelog-update
Manage CHANGELOG.md updates for the repository.
## Input
Arguments: `check | apply <commits-json> | format <entry-json>`
### Commands
- **check**: Scan for undocumented commits
- **apply**: Add entries to CHANGELOG
- **format**: Format a single entry (dry-run)
## Check Mode
Scan recent commits and identify those missing from CHANGELOG.
```bash
# Get commits since last CHANGELOG update
git log --oneline --since="$(git log -1 --format=%ci CHANGELOG.md)" --no-merges
```
### Categorization
Commits are categorized by conventional commit prefix:
| Prefix | Category | CHANGELOG Section |
|--------|----------|-------------------|
| `feat:` | Feature | Added |
| `fix:` | Bug Fix | Fixed |
| `perf:` | Performance | Changed |
| `docs:` | Documentation | (skip) |
| `chore:` | Chore | (skip) |
| `refactor:` | Refactor | Changed |
| `breaking:` | Breaking | Breaking Changes |
### Output Format
```json
{
"changelogPath": "CHANGELOG.md",
"lastUpdateDate": "2024-01-15",
"undocumented": [
{
"sha": "abc1234",
"message": "feat: add user authentication",
"category": "Added",
"date": "2024-01-20"
},
{
"sha": "def5678",
"message": "fix: resolve memory leak in cache",
"category": "Fixed",
"date": "2024-01-18"
}
],
"documented": 12,
"status": "needs-update"
}
```
## Apply Mode
Add new entries to CHANGELOG.md.
### Input
```json
[
{
"sha": "abc1234",
"message": "feat: add user authentication",
"category": "Added"
}
]
```
### Process
1. Parse existing CHANGELOG structure
2. Find or create section for current version
3. Add entries under appropriate categories
4. Preserve existing formatting
```javascript
function applyEntries(changelogPath, entries) {
const content = fs.readFileSync(changelogPath, 'utf8');
const parsed = parseChangelog(content);
// Find unreleased section or create one
let unreleased = parsed.sections.find(s => s.title === 'Unreleased');