communique
AI-generated release notes for people who read release notes.
communique turns your git history, pull requests, and repository context into
polished release notes. It can print notes locally, update CHANGELOG.md, or
publish directly to a GitHub Release.
Sponsors
communique is sponsored by entire.io and 37signals.
Install
Install with mise:
Or install with Cargo:
Pre-built binaries for macOS, Linux, and Windows are available on the GitHub releases page.
Setup
communique needs an LLM API key. Claude models use Anthropic; other models use the OpenAI-compatible provider path.
# Default Claude models
# OpenAI-compatible models
GitHub context and GitHub Release publishing also need a token:
Initialize a config file in your repository:
This creates communique.toml, where you can set the default model, repository,
style instructions, and project context.
Generate Release Notes
Generate notes for a tag:
communique automatically detects the previous tag. You can provide it explicitly when needed:
Preview without publishing or verifying links:
Write the output to a file:
Update GitHub Releases
Publish generated notes to an existing GitHub Release:
communique reads commits and pull requests, lets the model inspect relevant files and diffs, verifies links, then replaces the GitHub Release body with the finished notes.
Update CHANGELOG.md
Add or replace the version entry in CHANGELOG.md:
For release PRs, this keeps the [Unreleased] section in place and inserts the
new version entry immediately below it.
Use concise output when you do not want a full release narrative:
You can combine concise output with changelog updates:
Configuration
communique.toml supports project-level defaults and writing guidance:
= """
This is a Rust CLI used by platform engineers.
Call out breaking changes and migration steps clearly.
"""
= """
Write in a direct, practical tone.
Avoid marketing language.
"""
[]
= "claude-opus-4-8"
= "owner/repo"
= 4096
CLI flags override config defaults.
GitHub Actions
Use fetch-depth: 0 so communique can compare tags:
name: Release Notes
on:
push:
tags:
- v[0-9]+.*
permissions:
contents: write
jobs:
release-notes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: jdx/mise-action@v3
- run: mise use communique
- name: Generate release notes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: communique generate "${{ github.ref_name }}" --github-release
See the GitHub Actions guide for release-plz examples and release PR workflows.
Common Options
Troubleshooting
If PR details are missing, confirm GITHUB_TOKEN is set and can read the
repository.
If generation fails because tags cannot be compared, fetch full history and tags:
If CHANGELOG.md updates fail, make sure the file has an ## [Unreleased] or
## Unreleased section.