Shipping commitdog
commitdog is a clever little piece of software that makes me lazy… and I love being lazy. It reads your git diff, suggests smart conventional commit messages, and can push to GitHub — all from the terminal. Built in pure Go. Single binary. Zero bloat. Zero AI.
The problem that started it all
Recently I started shipping more stuff to the internet. Like any other dev, I use git and GitHub. But I was tired of writing commit messages every single time — especially when experimenting with features and having zero clue if they would work.
My old commit messages looked like this:
wipfixupdatemaybe this timeidk
One day I pushed a bunch of changes, checked the live site, and it was totally fucked. I had 8-9 commits with the exact same message. I panicked, started randomly reverting, and made things worse. Luckily I had a clean local copy.
That day I decided: this laziness is going to cause real trouble one day. So I built commitdog.
What is commitdog?
It started as a prototype using my Go knowledge and Claude. Now it's a fully offline, heuristic-based tool. No AI in the shipped version — just smart rules that actually work fast.
How to use commitdog
Install from AUR, Homebrew, curl, or build from source. Run commitdog setup once (provide your GitHub email and PAT).
Then:
commitdog init— initializes git, creates the repo on GitHub, sets up SSH, and does the first push. All in one command. No browser needed.commitdog— stages everything, suggests 3–4 good commit messages, you pick one, then push with Y/N.commitdog <file>— same but only for a specific file.
Full documentation is available with a nice desktop-like interface. Go check it out.
How it works under the hood
commitdog is a **single static ~3 MB binary** written in **pure Go** (stdlib only — zero external dependencies, zero AI, zero telemetry).
It shells out to the real `git` binary for diffs and operations. It parses the staged diff, runs a secret scan, uses simple heuristics to detect conventional commit type and scope, and generates 3–4 solid suggestions instantly.
Other cool parts:
commitdog initcreates repo + SSH setup automatically.- The
releasecommand handles versioning, multi-platform builds, changelog, tagging, and GitHub release — with full atomic rollback if anything fails.
Everything is deliberately clean and auditable. No magic. Just a sharp little git sidekick.
That’s pretty much the whole story
commitdog started as my own dumb fix for my own dumb habits. I just wanted to stay lazy and stop panicking every time I broke something in public.
If it saves you even one “oh shit” moment, then building this little tool was worth every second.
Thanks for reading this ridiculously long post. Respect if you made it this far.
K, bye. 🚀