# CommitBrief v0.9.0

> CLI-as-provider (claude-cli, gemini-cli), `commitbrief diff` subcommand, per-finding suggestions, progress UI.

Released May 24, 2026

Canonical URL: https://commitbrief.com/changelog/v0.9.0/

---

## ⚠️ Breaking

- **Scope flags collapsed into `commitbrief diff <args...>`.**
  `--commit <hash>`, `--branch <name>`, and `--pull-request <range>`
  are gone. Replacement table:

  | v0.x                                       | v0.9                              |
  |--------------------------------------------|-----------------------------------|
  | `commitbrief --commit HEAD~1`              | `commitbrief diff HEAD~1`         |
  | `commitbrief --branch main`                | `commitbrief diff main`           |
  | `commitbrief --pull-request main...x`      | `commitbrief diff main...x`       |

  `--staged` and `--unstaged` unchanged. The `diff` subcommand
  forwards verbatim to `git diff <args>`, so any range git
  understands works.

- **Single-path `--file` scope flag** replaced by the repeatable
  global `--file`/`--dir` filter pair.

- **`Provider.ReviewStream` removed from the provider interface.**
  Streaming has been dead since ADR-0014 took the review path off
  it in v0.6.0; the plumbing is now gone. Third-party packages
  importing `Provider` need to drop the field.

## Added

- **CLI-tool-backed providers — `claude-cli`, `gemini-cli`** (experimental).
  Drive the user's locally-installed Claude Code or Gemini CLI as
  the review backend via subprocess. No API key when the host CLI
  is already authenticated. Cost is whatever the user's CLI
  subscription bills. Cache key includes the host CLI version so
  upgrades cleanly invalidate prior entries.

- **Per-finding `suggestion` field — required actionable remediation.**
  Every finding carries a 2–3 sentence concrete fix recommendation
  alongside title/description. Rendered in Cards (chevron-prefixed
  paragraph), OUTPUT.md (`→ {{ .Suggestion }}` block), JSON
  (`"suggestion"`, required), and the `--copy` clipboard payload.

- **`commitbrief diff <args...>` subcommand** — git-diff passthrough
  for arbitrary historic ranges. Args forwarded verbatim to
  `git diff --no-color --no-ext-diff`.

- **Global `--file` / `-f` and `--dir` / `-d` flags** — path filters
  applied post-parse, repeatable, work on any scope.

- **`commitbrief cache prune` subcommand.** Bounded cleanup with
  defaults `--keep-last 500 --older-than 7d`; both windows must be
  satisfied for an entry to survive. `--provider`/`--model` narrow
  the candidate pool.

- **Multi-line findings via `line_end` (schema-additive).** Finding
  payloads can carry `line_end` alongside `line` to mark spans;
  renderers show `file:start-end` instead of `file:start`.
  Backward-compatible.

- **`--copy` flag** — pushes a plain-text summary of the findings
  onto the system clipboard via OSC 52 escape (works over SSH) and
  native shellout (pbcopy / wl-copy / xclip / xsel / clip.exe).

- **Progress animation during the review pipeline** — four-stage
  tree with breathing-dot animation. Three operating modes:
  animated (TTY + colors), plain (CI logs), silent (`--quiet`).

## Changed

- **Tightened snippet contract** in the system prompt so findings
  stop showing invented code excerpts — max 6 lines, verbatim from
  the diff, no hunk headers, omit when not materially clarifying.
- **Severity chip glyphs swapped to emoji** for stronger visual
  cues: `💥 CRITICAL`, `🚨 HIGH`, `⚡ MEDIUM`, `📌 LOW`, `💡 INFO`.
- **Diff aggregate caching** — `Diff.AddedLines()` /
  `DeletedLines()` switched to O(1) memoized reads.