dobbe

dobbe changelog gen

Generate a changelog between two git refs using AI-powered commit analysis.

Synopsis

dobbe changelog gen --from <ref> [OPTIONS]

Description

changelog gen analyzes the git history between two refs (tags, branches, or SHAs) and uses Claude AI to produce structured, human-readable release notes. Commits are classified into categories (features, fixes, breaking changes, etc.) and can be grouped by category or author. The command supports multiple output formats and optional Slack notification.

When --repo is omitted the command auto-detects the repository from the current working directory by reading the git remote.

Flowchart

┌─────────────────────────────────────────────┐
│  dobbe changelog gen --from v1.0 --to v1.1  │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Parse CLI args + merge config defaults      │
│  - format from --format or config            │
│  - repo from --repo or CWD auto-detect       │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Auto-detect repo (if --repo omitted)        │
│  Read git remote from CWD -> org/repo        │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Discover MCP servers + extra tools          │
│  (~/.claude/settings.json)                   │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Generate changelog via Claude               │
│  - Analyze git log from_ref..to_ref          │
│  - Classify commits into categories          │
│  - Optionally fetch PR numbers               │
│  - Group by category or author               │
│  Tools: [Bash, Read, Grep, Glob] + MCP       │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Save session (best-effort)                  │
│  Enables cross-command resume                │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Format output                               │
│  --format markdown (default)                 │
│  --format json                               │
│  --format conventional                       │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Render to stdout or --output file           │
└──────────────────────┬──────────────────────┘
                       │
                       v
┌─────────────────────────────────────────────┐
│  Optional: Notify                            │
│  --notify slack -> post to --channel         │
└─────────────────────────────────────────────┘

Options

Option Type Default Description
--repo / -r str - Repository (org/repo). Auto-detected from CWD if omitted.
--from str (required) Starting git ref (tag, branch, or SHA)
--to str HEAD Ending git ref
--format / -f str markdown Output format: markdown, json, conventional
--output str - Write output to file instead of stdout
--include-prs bool False Fetch associated PR numbers for each commit
--group-by str category Group entries by: category, author
--notify str - Send changelog to platform (slack)
--channel str - Notification channel (e.g., #releases)
--quiet / -q bool False Suppress progress output, only show final result

--from is required. All other options have sensible defaults.

CWD Auto-Detect

When --repo is omitted, dobbe reads the git remote from the current working directory and derives the org/repo slug automatically. This means you can run the command from inside a cloned repository without specifying --repo:

cd ~/projects/my-api
dobbe changelog gen --from v2.0.0

If the current directory is not a git repository or has no remote, the command will print an error and exit.

Output Formats

Markdown (default)

Produces release-notes style output with category headers (Features, Bug Fixes, Breaking Changes, etc.), PR references, and author attributions.

JSON

Outputs the full Changelog model as indented JSON, suitable for programmatic consumption or piping into other tools.

Conventional

Renders each entry in conventional-commits format (e.g., feat(#42): add user search endpoint), useful for feeding into other changelog tooling or CI pipelines.

Examples

Generate a changelog between two tags

dobbe changelog gen --repo acme/web-app --from v1.0.0 --to v1.1.0

Auto-detect repo from CWD

cd ~/projects/api
dobbe changelog gen --from v1.0.0

Include PR numbers and group by author

dobbe changelog gen --repo acme/web-app --from v1.0.0 --include-prs --group-by author

JSON output to file

dobbe changelog gen --repo acme/web-app --from v1.0.0 --format json --output changelog.json

Conventional-commits format

dobbe changelog gen --repo acme/web-app --from v1.0.0 --to v1.1.0 --format conventional

Send changelog to Slack

dobbe changelog gen --repo acme/web-app --from v1.0.0 --notify slack --channel "#releases"

Quiet mode for CI pipelines

dobbe changelog gen --repo acme/web-app --from v1.0.0 --format json --quiet --output changelog.json

Internal Architecture

Commit Classification

Claude analyzes each commit message (and optionally its diff) and assigns it to one of the following categories: feature, fix, breaking, deprecation, performance, documentation, chore, security. Each category maps to a human-readable header and a conventional-commits prefix.

Session Storage

After successful generation the changelog is saved to the session store (command: changelog_gen). This enables cross-command workflows where later commands can reference the previously generated changelog.

Slack Notification

When --notify slack is specified, the command renders the changelog as markdown and posts it to the target channel via the Slack MCP server. The channel can be specified with --channel or pulled from dobbe setup configuration. The Slack MCP must be available in ~/.claude/settings.json.

See Also