A CLI tool that roasts your terrible git commit messages.
No AI. No API keys. Just pure, hardcoded malice.
commit-roaster quietly judges your commit messages every time you run git commit in your terminal. It uses lightweight shell integration — no git hooks, no file modifications, no conflicts with Husky or pre-commit.
The commits still go through — because breaking your workflow is evil — but your ego will take a hit.
- One-Command Setup: Run
commit-roaster setupand you're done. Works on Bash, Zsh, Fish, and PowerShell. - Zero Conflicts: Doesn't touch
.git/hooks. Works alongside Husky, pre-commit, Lefthook, and any other hook manager. - Fast & Local: No AI, no network dependencies, completely offline heuristic matching entirely in Go.
- Cross-Platform: Supports macOS, Linux, and Windows out of the box.
- Historical Analysis: Run
statsto view an audit of your commit history's overall hygiene. - 12 Brutal Rules: More than 140 randomly rotated roasts so you rarely get the same insult twice.
Because the tool is hosted on a custom tap, you can install it using:
brew install PranayD1807/tap/commit-roasterIf you already have Go installed, this is the quickest method:
go install github.com/PranayD1807/Commit-Roaster@latestgit clone https://github.com/PranayD1807/Commit-Roaster.git
cd Commit-Roaster
make installAfter installing the binary, just run:
commit-roaster setupThat's it. It auto-detects your shell (Bash, Zsh, Fish, or PowerShell), appends the integration line to the right profile file, and you're done. (How does this work?)
To fully remove it later:
commit-roaster teardownManual setup (advanced)
If you prefer to add the integration yourself, use commit-roaster init:
Bash & Zsh (~/.zshrc or ~/.bashrc):
eval "$(commit-roaster init)"Fish (~/.config/fish/config.fish):
commit-roaster init fish | sourcePowerShell ($PROFILE):
Invoke-Expression (&commit-roaster init powershell | Out-String)Wait for it to roast you organically in the terminal when committing:
$ git commit -m "update"
🔥 commit-roaster says:
Message: "update"
💀 Too Short — 'update'? A commit message so short, it's basically a cry for help.
💀 Too Vague — You might as well have written 'I did a thing' and called it a day.
😬 Score: 6/10 — Mediocre at best.1. Roast recent commits in the current repo:
# Roast the last commit
commit-roaster roast
# Roast the last 5 commits
commit-roaster roast --last 52. See your permanent record:
commit-roaster stats(This command audits your entire git history in the current repository and gives you a breakdown of your commit message violations and an overall grade).
commit-roaster analyzes your subject line against 12 different heuristics:
- Too Short (<10 chars): Let's use our words.
- Too Vague:
fix,update,stuff... Schroedinger's commits. - ALL CAPS: Please stop yelling at the version control tree.
- No Verb: Must include an action (or a conventional commit prefix).
- Profanity: Keep it PG-13, HR is watching.
- Wall of Text: If it's over 150 characters, use the commit body instead.
- Trailing Period: This isn't formal poetry. Stop adding periods to subject lines.
- Ticket Only: Example:
JIRA-1234. Providing zero readable context. - Despair / YOLO: Mentions of
pray,yolo,hopefully,black magic. - File Name Only: E.g.,
src/main.js. We know what file changed. What did you do to it? - Exclamation Overdose: More than one exclamation point. Calm down.
- Default Message: GitHub web edits like
Update README.mdor git's auto-generated merge subjects.
Want to make the roasts more savage? Adding new rules is incredibly easy!
- Add your new
RuleIDconstant inroaster/rules.go. - Register it in
DefaultRules()and write a simplecheckMyRule(msg)bool function. - Add 10-15 funny strings to the
roastTemplatesmap insideroaster/roasts.go.
To verify the core engine and ensure no regressions involve modifying user filesystem states, run the isolated test suite locally:
go test ./... -vPull requests are actively encouraged!
This project uses GoReleaser to automate building cross-platform binaries, uploading GitHub Releases, and updating the Homebrew Tap formula.
To publish a new version:
- Commit all your changes completely.
- Create and push a new lightweight git tag for the version:
git tag -a v1.0.0 -m "Release v1.0.0" git push origin v1.0.0 - Run GoReleaser to automatically build and deploy:
goreleaser release --clean
Note: You must have a GITHUB_TOKEN exported in your terminal with repo scopes for GoReleaser to successfully push the release and update the tap.
MIT.
Enjoy being roasted.