Generate commit messages on your coding plan, keep staging while it writes
I've never met anyone who likes writing commit messages. I find it a drag and wish I never had to do it again. So I built a tool for automating commit message generation using your existing CLI coding tool. It supports Claude Code, Codex, Antigravity, Cursor CLI, Opencode and Pi.dev so you can use your coding plan quota. It will never ask you for an API key or to authenticate, it leaves all that up to your coding agent tool.
After my first attempt building it I quickly realized I was hamstrung by the time it took to generate each commit. Since the request required a round-trip to the LLM, I had to stage my files, wait for the commit message to generate, then stage the next files and do it again. So I refined the tool to snapshot the staging area before each commit, allowing me to continue staging more files while it worked.
The result is Stagecoach, a standalone tool written in Go and designed to do one thing well.
Stage some files, run `stagecoach` and watch them get committed. Keep staging in the interim while the message generates, then run it again for the next commit.
And if you don't want to stage your files, stagecoach will separate them into multiple commits for you. Just run stagecoach and watch your work tree changes get grouped into separate conceptual commits.
By default, the commit format is whatever your repo already uses, but you can specify "conventional," "plain" or "gitmoji" format. You can specify the number of commits you want it to make, and different models and providers for different operations too.
It automatically detects the tools you have installed and writes your config files with examples for those tools, and integrates seamlessly with Lazygit as you see in the demo.
I use this tool heavily and find it saves me a lot of time and brain power so I decided to harden it to share with the community. There are similar tools out there like opencommit and aicommits, but they take a different philosophy toward commit generation, owning the entire request lifecycle and ignoring the blocking problem on a local machine. I didn't find them very friendly or beneficial to my workflow.
I built this with DX as a top priority, if you try it out please let me know what you think!
Full docs are available here.