Install
openclaw skills install changelog-weaverGenerate polished changelogs and release notes from git history, PRs, and issues — auto-categorize features, fixes, and breaking changes
openclaw skills install changelog-weaverTransform git history into polished, human-readable changelogs and release notes. Parse Conventional Commits, auto-categorize changes by type, deduplicate similar commits, and generate output in multiple formats — from CHANGELOG.md to messaging-platform announcements.
# 1. Collect commits since your last git tag
python3 scripts/weaver.py collect --from-latest-tag -o commits.json
# 2. Generate a CHANGELOG.md
python3 scripts/weaver.py generate -i commits.json -f changelog
# 3. That's it — a structured changelog ready for review
To add AI-powered semantic rewriting (human-readable descriptions instead of raw commit messages), load commits.json into chat and say: "Rewrite all commit descriptions to be user-facing" — copy the ai_rewrites back into the JSON, then regenerate.
Decide what to include in the changelog:
# Between two tags
weaver.py collect --from v2.3.0 --to v2.4.0 -o changes.json
# Since the latest tag (auto-detected)
weaver.py collect --from-latest-tag -o changes.json
# By date range
weaver.py collect --since "2026-06-01" --until "2026-06-15" -o changes.json
# All commits on a branch
weaver.py collect --from main --to feature/big-refactor -o changes.json
The script reads git log, filters merge commits by default, and outputs structured JSON.
If PR/issue data is available (GitHub/GitLab), the AI can enrich the changelog with PR titles and linked issue numbers. Mention this in your prompt.
The script automatically classifies every commit by Conventional Commits type:
| Prefix | Category | Example |
|---|---|---|
feat: | Features | feat(auth): add OAuth2 login |
fix: | Bug Fixes | fix: resolve race condition in cache |
docs: | Documentation | docs: update API reference |
chore: | Chores | chore: bump dependencies |
refactor: | Refactoring | refactor: extract payment module |
perf: | Performance | perf: optimize query planner |
test: | Tests | test: add integration tests |
build: | Build System | build: migrate to vite |
ci: | CI/CD | ci: add deploy workflow |
revert: | Reverts | revert: rollback auth changes |
security: | Security | security: patch XSS vector |
deps: | Dependencies | deps: update react to 19.0 |
Commits that don't follow the convention are grouped under other — the AI can still reclassify them by analyzing the commit message content.
Load the generated JSON into chat for the AI to perform semantic rewriting:
Prompt: "I have a changelog JSON at
commits.json. Rewrite all commit descriptions to be user-facing, replace technical jargon with plain language, and suggest category corrections for any misclassified commits. Output asai_rewritesmapping."
The AI will:
fix: resolve race condition in user auth token refresh → "Fixed login sessions expiring prematurely during token refresh"Copy the ai_rewrites object back into the JSON under the top-level key "ai_rewrites", then regenerate.
The script merges adjacent commits of the same type with ≥70% description token overlap. For manual merging, tell the AI:
Prompt: "Merge any commits in
commits.jsonthat clearly belong to the same feature or fix. Update thecountfield."
The AI will identify related commits (e.g., 3 commits all fixing the same date-picker bug) and consolidate them.
Breaking changes are detected automatically via:
! suffix: feat(api)!: remove deprecated endpointBREAKING CHANGE: drops support for Node 16The AI also scans other commits for breaking-change language:
Prompt: "Scan all commit descriptions in
commits.jsonfor breaking changes not marked with ! or BREAKING CHANGE footer. Addbreaking: trueand abreaking_detailfor each."
Once the JSON is ready (with optional AI rewrites), generate output in any format:
# Keep a Changelog format (CHANGELOG.md)
weaver.py generate -i commits.json -f changelog -o CHANGELOG.md
# GitHub Release body
weaver.py generate -i commits.json -f release -o RELEASE_NOTES.md
# Plain text for 飞书/钉钉
weaver.py generate -i commits.json -f plain -p feishu -o announcement.txt
# JSON for CI/CD pipelines
weaver.py generate -i commits.json -f json -o changelog.json
Before publishing, run a quality pass:
Prompt: "Review
CHANGELOG.mdfor issues: missing entries (compare to git diff --stat), broken links, misclassified items, entries that need human confirmation. Output a QA checklist."
Key checks:
Write the final output:
# Write to project root
cp CHANGELOG.md /path/to/project/CHANGELOG.md
# Or prepend to existing changelog (keep history)
cat CHANGELOG.md <(tail -n +2 /path/to/project/CHANGELOG.md) > /tmp/merged.md
For CI/CD integration, consume the JSON output:
# GitHub Actions example
- name: Generate Changelog
run: |
python3 scripts/weaver.py collect --from-latest-tag -o changelog.json
python3 scripts/weaver.py generate -i changelog.json -f release >> $GITHUB_STEP_SUMMARY
"Generate a changelog for the v2.4.0 release from git history since v2.3.0. Use Keep a Changelog format. Our project is at ~/projects/myapp."
What the skill does: Runs collect, loads JSON, suggests rewrites, generates CHANGELOG.md.
"Generate a weekly summary of changes to the
backendrepo since last Monday. Format as a plain text message for DingTalk — Chinese, concise, grouped by feature/fix/chore."
What the skill does: Runs collect --since "last Monday", generates plain -p dingtalk, AI rewrites descriptions in Chinese.
"Collect all commits since v1.5.0 in ~/projects/api-server. Rewrite every description to be user-facing. Generate a GitHub Release body with contributor shoutouts. Add a 'What's New' highlight section at the top."
What the skill does: Collects commits, AI rewrites descriptions, generates release format with highlights.
"Scan commits between v3.0.0 and v3.1.0 for breaking changes — both marked and unmarked. Generate a migration guide section in the changelog."
What the skill does: Collects commits, AI scans for breaking changes, adds migration notes.
"Generate a changelog from git history, but also pull PR titles from GitHub for the
myorg/myrepoproject. Match commits to PRs by branch name and reference numbers. Use PR titles for the changelog entries instead of commit messages."
What the skill does: Collects commits, AI cross-references with GitHub PR API, uses PR titles.
Scenario: You maintain react-data-grid and are releasing v4.2.0. The repo uses Conventional Commits. You need a professional CHANGELOG.md following Keep a Changelog format.
Input:
python3 scripts/weaver.py collect \
--repo ~/projects/react-data-grid \
--from v4.1.0 --to v4.2.0 \
-o v4.2.0-commits.json
The JSON contains 47 commits: 12 feat, 18 fix, 5 docs, 4 chore, 3 refactor, 2 perf, 1 breaking, 2 other.
AI Prompt: "Load v4.2.0-commits.json. Rewrite all descriptions to be concise and user-facing. The audience is React developers. Merge the 3 commits about 'column resize' into one entry. Flag the breaking change for prominent display."
Output (CHANGELOG.md excerpt):
# Changelog
## [4.2.0] - 2026-06-15
### ⚠️ Breaking Changes
- Removed `legacyRowRenderer` prop — migrate to `rowRenderer` with the new `RowConfig` interface (#892)
### ✨ Features
- Column resize handles: drag to resize any column, double-click to auto-fit (#845, #867, #881) — @sarahchen
- Virtual scrolling for 100K+ row datasets with <50ms render time (#878) — @mikez
- Multi-select cells with Shift+Click and Ctrl+Click (#903) — @alexk
### 🐛 Bug Fixes
- Fixed date filter not respecting custom timezone (#890) — @jamesw
- Fixed column reorder breaking when a column is hidden (#895) — @linday
### 🙏 Contributors
@alexk, @jamesw, @linday, @mikez, @sarahchen
Scenario: Every Friday, the platform team sends a summary of the week's changes to the company-wide 飞书 group. The repo (~/projects/platform) has 30-50 commits per week with mixed commit quality.
Input:
python3 scripts/weaver.py collect \
--repo ~/projects/platform \
--since "2026-06-08" --until "2026-06-15" \
-o weekly-2026-06-15.json
AI Prompt: "Load weekly-2026-06-15.json. Rewrite all descriptions in Chinese, grouping by feature/fix/infra. Focus on business impact. Generate plain text for 飞书, limit to top 10 entries."
Output (announcement.txt):
📦 平台周报 (2026-06-08 ~ 2026-06-15)
【新功能】
• 用户画像页新增「活跃度趋势」图表,支持按周/月切换
• 数据导出支持自定义字段选择,减少导出体积 60%
【问题修复】
• 修复 Safari 浏览器下 Dashboard 加载白屏问题(影响约 5% 用户)
• 修复大文件上传偶发超时,现在支持 500MB 以下文件稳定上传
• 修复深夜时段定时任务漏执行的问题
【基础设施】
• CI 构建时间从 12 分钟优化到 6 分钟
• 升级 Redis 集群至 7.2,内存使用降低 30%
👥 本周贡献者: 张三, 李四, 王五, 赵六
Scenario: Your API server v3.0 introduces several breaking changes. The changelog must include a detailed migration guide for downstream consumers.
Input:
python3 scripts/weaver.py collect \
--repo ~/projects/api-server \
--from v2.9.0 --to v3.0.0 \
-o v3.0.0-commits.json
AI Prompt: "This is a major version bump. Scan all commits for breaking changes — both marked and unmarked. For each breaking change, write a migration note with 'Before' and 'After' code snippets. Generate the changelog with a prominent 'Migration Guide' section at the top."
Output (CHANGELOG.md excerpt):
## [3.0.0] - 2026-06-15
### 📋 Migration Guide
#### 1. `/api/v1/users` → `/api/v2/users`
**Before:**
```http
GET /api/v1/users?role=admin
After:
GET /api/v2/users?filter[role]=admin
Before: Authorization: Token abc123
After: Authorization: Bearer abc123
The event.data field is now always an object (was sometimes a string). Update your webhook handlers to expect typeof event.data === 'object'.
event.data is always an object (#1215)
## Requirements
- **Python 3.9+** — standard library only (no pip dependencies)
- **git** — available on `$PATH`
## Safety
- All processing is local — no git history is sent to external services
- The script runs read-only git commands (`git log`, `git describe`)
- AI rewriting happens in-chat with explicit user review before final output
- No destructive operations — output files are written to specified paths only
## Compare with Related Skills
| Skill | Focus | How Changelog Weaver Differs |
|-------|-------|------------------------------|
| **Release Guard** | Pre-release quality checks (files, secrets, scripts) | Changelog Weaver **generates the changelog content**, not checks |
| **Git Blame Auditor** | Code attribution, contributor stats, tech debt | Changelog Weaver summarizes **what changed**, not who wrote what |
| **Doc Weaver** | Markdown → Word/PDF with templates | Changelog Weaver is **git-aware**, specialized for changelogs |
These skills are **complementary**: use Release Guard to validate a release, Changelog Weaver to document it, and Doc Weaver to format it into a polished PDF.