Release Notes Generator
Generate structured release notes from git commit history, organized by category and impact.
Arguments
since— Starting point: git tag, commit SHA, or relative date (e.g.,v0.1.0,abc1234,2 weeks ago). Defaults to latest tag or last 2 weeks.until— Ending point. Defaults to HEAD.format— Output format:markdown(default),slack,linkedin.
Process
Determine the commit range:
# If no `since` provided, find latest tag git describe --tags --abbrev=0 2>/dev/null || echo "No tags found" # Get commits in range git log --oneline --no-merges ${since}..${until:-HEAD}Parse commits by conventional commit prefix:
feat:/feat(scope):→ New Featuresfix:→ Bug Fixesrefactor:→ Improvementsperf:→ Performancedocs:→ Documentationchore:/ci:/build:→ Internal (omit from public notes)
For each feature/fix, read the changed files to understand the user-facing impact:
git diff --stat ${commit}^..${commit}Group by domain (detect from file paths):
convex/→ Backendpackages/ui/src/→ UIapps/web/→ Web Appapps/desktop/→ Desktop Appagent-service/oragent-worker/→ AI/Agent Systemsandbox-worker/→ Sandbox
Generate release notes in requested format.
Output Templates
Markdown (default)
# Release Notes — [version or date range]
## New Features
- **[Domain]**: Description of feature ([scope])
## Bug Fixes
- **[Domain]**: Description of fix
## Improvements
- **[Domain]**: Description of improvement
---
*N commits by N contributors over N days*
LinkedIn format
Focus on 2-3 headline features, business impact framing, no technical jargon. Keep under 1300 characters.
Slack format
Compact bullet list with emoji prefixes. Link to PR numbers.