In particular, even though users could choose an AI provider, there was still no strong way to adjust the language or writing style of the generated CHANGELOG.md for each project.
For example, there was no good way to pass project-specific rules such as:
Specifies the language of the generated CHANGELOG.md
--instructions
Passes inline instructions to the AI
--instructions-file
Passes instructions to the AI from a file
For example, if you want to generate a changelog in Dutch, you can write:
changelog-bot \--provider gemini \--release-tag HEAD \--release-name 0.3.0 \--languagenl\--instructions"Schrijf kort en duidelijk in het Nederlands. Groepeer interne wijzigingen onder Chore."\--dry-run
You can also define project-specific rules in a file.
changelog-bot \--provider openai \--release-tag HEAD \--release-name 0.3.0 \--languagenl\--instructions-file .github/changelog-instructions.md \--dry-run
For example, .github/changelog-instructions.md can contain rules like this:
Write concise release notes in Dutch.
Rules:
- Focus on user-facing changes.
- Group internal refactors under Chore.
- Group dependency updates together.
- Avoid mentioning commit hashes.
With this, changelog-bot is no longer just "a tool that generates changelogs with AI."
It is moving toward:
A tool that can generate a CHANGELOG.md that feels right for each project.
Also, when customization is enabled, changelog-bot does not simply use GitHub Release Notes as-is, even if they exist.
Instead, it passes them to the model and lets the model rewrite them.
This means GitHub Release Notes can still be used as source material, while the final output reflects the specified language and instructions.
🥌 Roadmap toward v1
With customization added in v0.3, the shape of v1 is becoming much clearer.
Here are the main things I want to add before v1.
1. Config file support
Passing CLI options every time is annoying, so I want to support config files.
Releases should feel exciting, not tedious
@nyaomaru/changelog-bot 🤖 turns your Git history and release notes into a polished changelog entry (and optional PR) in a single run. Drop it into CI, run it locally, or hand it to your release captain—either way, you ship with a crisp changelog and zero copy-paste fatigue.
Why changelog-bot?
Automated storytelling: Combines commit history, PR titles, and release notes to produce human-ready changelog sections.
LLM superpowers (optional): Connect OpenAI or Anthropic for tone-aware summaries or skip API keys entirely and rely on a robust heuristic fallback.
PR-ready output: Can open a pull request with updated changelog, compare links, and release notes already wired up.
Safe defaults: Detects duplicate versions, keeps compare links current, and won’t fail a release if AI is down.
CI-native: Works as a GitHub Action, reusable workflow, or plain CLI—no fragile scripting required.
changelog-bot solves the downstream half well. The upstream half is where the AI-triage value compounds: whether the input PR descriptions contain the "why."
What changed is easy to derive from git. Why it changed (the alternative considered, the constraint that ruled out the obvious approach, the failure mode being defended against) lives in PR descriptions, and even good projects let those decay over time. The auto-generator preserves what's in the inputs, no more.
The ceiling for the Dependabot + Claude Code use case you opened with isn't set by how well the tool rewrites sections. It's set by PR description discipline upstream. Possibly a v1 angle: detect releases whose PR descriptions are thin and downgrade the AI-triage confidence on those entries.
I agree that extracting the "why" is the hard part.
In my experience, that context is often not fully written in PR descriptions. It may live in code comments, review discussions, issue threads, or only in the author’s head.
So I really like your point about treating input quality as part of the AI-triage confidence.
Instead of only rewriting changelog sections, changelog-bot could detect when the upstream context is thin and mark those entries as lower confidence.
The main concern I have is token usage. If a release has many PRs, pulling in descriptions, comments, linked issues, and code context can become expensive quickly.
But I think this is a very interesting v1 direction.
Thanks a lot for your thoughtful feedback. I’ll explore this for the v1 roadmap 🚀
Top comments (3)
changelog-bot solves the downstream half well. The upstream half is where the AI-triage value compounds: whether the input PR descriptions contain the "why."
What changed is easy to derive from git. Why it changed (the alternative considered, the constraint that ruled out the obvious approach, the failure mode being defended against) lives in PR descriptions, and even good projects let those decay over time. The auto-generator preserves what's in the inputs, no more.
The ceiling for the Dependabot + Claude Code use case you opened with isn't set by how well the tool rewrites sections. It's set by PR description discipline upstream. Possibly a v1 angle: detect releases whose PR descriptions are thin and downgrade the AI-triage confidence on those entries.
Thank you for your comment! 😺
I agree that extracting the "why" is the hard part.
In my experience, that context is often not fully written in PR descriptions. It may live in code comments, review discussions, issue threads, or only in the author’s head.
So I really like your point about treating input quality as part of the AI-triage confidence.
Instead of only rewriting changelog sections, changelog-bot could detect when the upstream context is thin and mark those entries as lower confidence.
The main concern I have is token usage. If a release has many PRs, pulling in descriptions, comments, linked issues, and code context can become expensive quickly.
But I think this is a very interesting v1 direction.
Thanks a lot for your thoughtful feedback. I’ll explore this for the v1 roadmap 🚀
Hey! 😸
I support WHY extraction from v0.6.0 🚀
github.com/nyaomaru/changelog-bot
Below is real OSS project sample.
github.com/nyaomaru/is-kit/pull/21...
Let's try 👍