I don’t get these kind of tools. A commit should be the why of a change, not a summary of what it is, anyone can either get that themselves or just read the code if they desire. What you can not get from the code is the _why_ which only you as the author can put.
I often start a change by having Cursor read the Slack thread (via MCP) that is motivating the change. In the same Cursor thread, after making the change, it has fairly good context on the _why_ and writes a helpful commit message.
While I’m deeply skeptical of any attempt to define a commit message from the diff, if the context and motivation is truly captured in the Slack thread or other prior documents and available for summarization, then how many neurons are you really using on rewording what you already hashed out? Especially if someone would otherwise perhaps skip a message or write a poor one, this sounds like a great approach to get at least a first pass to further modify.
I do often ask Claude Code or Gemini CLI to write commits. I agree with you on why being important. Majority of these being bug fixes accompanied tests where the why is easily inferred from the change/newly added tests and their comments.
There's three types of people: those who already write excellent commit messages explaining the why, those who write decent ones explaining the what, and those who write garbage commit messages. Empirically, the first set is small. This tool will help the middle type be more efficient, and help the last type drastically.
Thanks! Can definitely do that, but GAC is faster than calling claude or another agent as they will take multiple api calls to look at git status, git diffs, etc. vs a single api call with GAC. Plus, GAC won't eat up your weekly limits! ;)
Hey all - disclaimer I'm one of Cell's friends and encouraged them to release their utility on Pypi for others. It quickly became one of my favorite tools that I use every day.
Maybe it's because these days I use perforce more than git but I tend to find myself writing 80% of my commit message before I write any code and touch it up a little at the end.
I like that you’ve added secret detection and multi-provider support — that’s something most LLM commit tools miss.
Have you benchmarked latency differences between local models (like Ollama) and OpenAI/Anthropic? Would be interesting to see a speed comparison.
Oh nice. Man I hate filling out all that stuff. And getting the LLM to do it without freestyling and hallucinating is a pain. Kinda wish it were an MCP so I can shove it in my CLI or maybe the hooks for git...
side-eye "anyone can read the code" -- usually the first words of someone who writes unreadable code.
perl -e'$_=q/dk|jk`%fdk%w`da%qm`%fja`/;s/./chr(ord($&)^5)/seg;print'
I don’t get these kind of tools. A commit should be the why of a change, not a summary of what it is, anyone can either get that themselves or just read the code if they desire. What you can not get from the code is the _why_ which only you as the author can put.
I often start a change by having Cursor read the Slack thread (via MCP) that is motivating the change. In the same Cursor thread, after making the change, it has fairly good context on the _why_ and writes a helpful commit message.
Very nice, the fewer neurons you use the better. In biology they call it use it and lose it if my memory serves me correctly.
Neurons that fire together, fry together.
While I’m deeply skeptical of any attempt to define a commit message from the diff, if the context and motivation is truly captured in the Slack thread or other prior documents and available for summarization, then how many neurons are you really using on rewording what you already hashed out? Especially if someone would otherwise perhaps skip a message or write a poor one, this sounds like a great approach to get at least a first pass to further modify.
I do often ask Claude Code or Gemini CLI to write commits. I agree with you on why being important. Majority of these being bug fixes accompanied tests where the why is easily inferred from the change/newly added tests and their comments.
There's three types of people: those who already write excellent commit messages explaining the why, those who write decent ones explaining the what, and those who write garbage commit messages. Empirically, the first set is small. This tool will help the middle type be more efficient, and help the last type drastically.
Well done OP.
Neat project. If you're looking for something simpler just to use w/ Claude Code, a simple call to "claude -p" can work: https://github.com/nicksergeant/dotfiles/blob/master/zshrc#L...
Thanks! Can definitely do that, but GAC is faster than calling claude or another agent as they will take multiple api calls to look at git status, git diffs, etc. vs a single api call with GAC. Plus, GAC won't eat up your weekly limits! ;)
Oh I just pipe the diff into the Claude prompt, so it's only the one call.
Chiming in with my alternative, like others' but uses simonw's `llm`:
However, in practice, I notice the generated messages focus more on the what than the why. So it's rare I use them verbatim.I've been using LMStudio to run a local LLM (Qwen3-4B) to generate commit messages using this command:
```
git diff --staged --diff-filter=ACMRTUXB | jq -Rs --arg prompt 'You are an assistant that writes concise, conventional commit messages. Always start with one of these verbs: feat, fix, chore, docs, style, refactor, test, perf. Write a short!! message describing the following diff:' '{model:"qwen/qwen3-4b-2507", input:($prompt + "\n\n" + .)}' | curl -s http://localhost:1234/v1/responses -H "Content-Type: application/json" -d @- | jq -r ".output[0].content[0].text"
```
Hey all - disclaimer I'm one of Cell's friends and encouraged them to release their utility on Pypi for others. It quickly became one of my favorite tools that I use every day.
`git commit` is gone, `uvx gac` is in!
> Automatic secret detection: Scans for API keys, passwords, and tokens before committing
Surely this is done on-device right? Or is the prompt asking the LLM if there are secrets in the changes.
Arguably I trust Github / Gitlab / etc more than OpenAI / Anthropic / etc
The scanning is done on-device. I should've worded it better and said that it scans before any API calls. Too late to edit the post, unfortunately.
Maybe it's because these days I use perforce more than git but I tend to find myself writing 80% of my commit message before I write any code and touch it up a little at the end.
"gac" is giving me PTSD flashbacks from having to deal with the "Global Assembly Cache" aeons ago.
I like the lazycommit+lazygit combo.
https://github.com/m7medVision/lazycommit
I like that you’ve added secret detection and multi-provider support — that’s something most LLM commit tools miss. Have you benchmarked latency differences between local models (like Ollama) and OpenAI/Anthropic? Would be interesting to see a speed comparison.
Hate writing commit messages.
Just installed gac; they nailed the UI/UX.
And so far, it works quite well.
Thank you! I used a combination of the questionary and click python libraries for the ui/ux.
Oh nice. Man I hate filling out all that stuff. And getting the LLM to do it without freestyling and hallucinating is a pain. Kinda wish it were an MCP so I can shove it in my CLI or maybe the hooks for git...
I'm considering making it optionally work as an MCP server!
Very neat little project, I look forward to trying this
aicommit2 works great: https://github.com/tak-bro/aicommit2
Getting started is as easy as installing claude/codex/gemini: npm install -g aicommit2
I'm excited to give gac a try and see how it stacks up! The steering hints with gac might give it an edge.
Your scientists were so preoccupied with whether or not they could, they didn't stop to think if they should.
Omit internet tropes.
https://news.ycombinator.com/newsguidelines.html
This misses the point of what a good commit message is so much that it could be a delightful satire.
Yeah - if these are better than your current commit messages, just don't write commit messages. Anyone can read the code.
side-eye "anyone can read the code" -- usually the first words of someone who writes unreadable code. perl -e'$_=q/dk|jk`%fdk%w`da%qm`%fja`/;s/./chr(ord($&)^5)/seg;print'