Blog
Releases, design notes, and short reads on local-first developer tooling.
/blog/rss.xmlWhen the model won't return valid JSON: a recovery ladder, not a blind retry.
Prompt-only models break the JSON contract in three predictable ways — fenced JSON, prose, and truncation. How CommitBrief v1.13.0 recovers each one with fence salvage, a failure-mode-specific repair prompt, and a graceful degrade.
Proving the review happened: SOC2, audit chains, and the compliance angle of `--json`.
What auditors actually ask when they say 'every commit was reviewed,' and how CommitBrief's JSON output and cache-key design fit into an audit chain — without overpromising what an LLM review can be evidence of.
Multi-provider as an architecture decision: why locking to one LLM is a reliability problem.
Anthropic, OpenAI, Gemini, Ollama, claude-cli, gemini-cli — the provider abstraction in v1.0 and the manual-switch posture that keeps single-provider outages from breaking your workflow.
The cost of a junior waiting for a senior, and what an LLM can — and can't — do about it.
A junior's 30-minute change ties up six hours of a senior's time. The LLM isn't a mentor, but it can be the assistant that frees senior time for actual mentorship.
Onboarding through review rules: nobody reads CONTRIBUTING.md, but everyone reads their PR feedback.
A `COMMITBRIEF.md` your team has actually written becomes the most effective onboarding document for new hires — because it shows up where they're already paying attention.
Where your AI reviewer runs matters.
CodeRabbit, Greptile, Copilot review, and Bugbot compared with a local CLI: where each runs, who holds the key, what leaves your machine.
Blocking vs. nitpicking: shaping review tone with `OUTPUT.md`.
Encoding team norms into the review output. Severity scales, finding format, what gets surfaced and what gets quietly suppressed.
Cross-timezone review lag, and turning the reviewer from blocker into validator.
The hidden tax on async teams: a junior's PR waits for a reviewer who's asleep, then for one who's in a meeting. An LLM in the middle of that chain doesn't replace anyone — it changes what waiting means.
Signal from noise: the three-layer filter that keeps reviews readable.
Built-in defaults, `.commitbriefignore`, and `COMMITBRIEF.md` semantic filtering — how they compose, last-wins semantics, and how negative patterns revert a default.
Your diff should never leave your machine: the Ollama path for air-gapped repos.
How CommitBrief runs LLM code review with zero network egress. For SOC2-restricted repos, defense work, fintech and healthcare codebases — and an honest look at the quality trade-off.
The solo developer's missing second pair of eyes.
For OSS maintainers, indie hackers, side-project builders — there's no one to review your code. What an LLM fills in, and what it deliberately doesn't.
v1.13 → v1.15: replacing inference with evidence
Three releases that look unrelated — a JSON parser change, one config key, four new commands — and the single direction underneath them: every claim CommitBrief makes should be something it can show you, and the ones that don't need a model shouldn't call one.
`commitbrief compress`: an LLM rewriting another LLM's system prompt — and the discipline that keeps it safe.
Three compression levels, atomic apply, automatic backup, and the rule that refuses to shrink your rules file if the result isn't actually smaller.
`commitbrief doctor`: the diagnostic I wish more CLIs shipped.
Eight checks against the resolved environment, plus a per-provider connection ping — what doctor inspects, why warnings are non-blocking by design, and the CI pattern that gates merges on a clean health check.
How a single JSON schema survives four very different LLM providers.
Anthropic tools mode, OpenAI strict response_format, Gemini ResponseSchema, Ollama format:json — four mechanisms, one contract. How CommitBrief's findings schema v1 stays stable across them, and the retry-once-then-degrade fallback for when it doesn't.
Three flags into one subcommand: the `commitbrief diff` collapse and what it taught me about CLI surface area.
v0.9.0 retired --commit, --branch, and --pull-request in favour of a single 'diff' subcommand that pass-throughs to git diff. A note on why reinventing what git already does is the wrong shape.
Subprocess providers: reusing a subscription you're already paying for.
How claude-cli and gemini-cli wrap a host CLI as a subprocess instead of calling an API, what they give up to do that, and why stdin transport matters when the diff gets large.
Hooks that survive Tower, GitHub Desktop, and JetBrains.
Why git hooks installed from the command line silently fail when you commit from a GUI client — and the absolute-path embedding trick that makes commitbrief install-hook just work everywhere.
`--fail-on`: turning an LLM review into a CI gate without locking yourself in.
How severity-based exit codes work, why graceful degrade deliberately skips the gate, and what 'fail at critical or worse' actually means inside your pipeline.
Three guards before any token is spent.
The secret scanner, the cost preflight, and the .commitbrief/ guard — three pre-send checks that fire before CommitBrief talks to a provider, and why --yes deliberately doesn't bypass two of them anymore.
v1.0 is an API freeze: what `schema: v1` actually promises.
v1.0 isn't just a number. CLI flag surface, JSON schema v1, and the COMMITBRIEF.md / OUTPUT.md formats are under strict semver from here on. Here's what that buys you, and what it stops me from doing.
Why a CLI, not a GitHub App.
On trigger ownership when picking a code review tool. The design thinking behind CommitBrief as a CLI — and when that's the wrong choice.
Anatomy of a `COMMITBRIEF.md`: turning team tribal knowledge into a system prompt.
What a good rules file looks like, what doesn't belong in it, and why the LLM's effectiveness as a zeroth reviewer depends on the file being written well.
Review before the push: why the strongest review window is right before `git commit -m`.
Why CommitBrief defaults to --staged scope. Reviewing a change that hasn't entered history yet is always cheaper than patching it with a force-push.
LLM code review doesn't replace human review. It multiplies it.
The position paper that ships with v1.0 — what an LLM catches, what it doesn't, and why a human reviewer's job changes shape rather than disappearing.