
A logo that was completely generated with AI, like everything else in the project. (Source: ChatGPT)
I donāt mind the term āvibe codingā, when used correctly. A lot of people (at least on Reddit) seem to think it means āany time you code with AI.ā I prefer Andrej Karpathyās original definition: ā
Thereās a new kind of coding I call āvibe codingā, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. Itās possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. [ā¦] I ask for the dumbest things like ādecrease the padding on the sidebar by halfā because Iām too lazy to find it. I āAccept Allā always, I donāt read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, Iād have to really read through it for a while. Sometimes the LLMs canāt fix a bug so I just work around it or ask for random changes until it goes away. Itās not too bad for throwaway weekend projects.
Emphasis mine.
That last bit is key. For throwaway weekend projects, vibe coding is this magical state where you have an idea but absolutely no desire to setup boilerplate, read API documentation, or even want to deal with the plumbing. You just want the thing to exist.
A few evenings ago, I decided to put in a serious vibe coding session using one of my favorite tools, Claude Code via SSH through Blink on my iPhone (!), to create a CLI utility to help manage the endless number of branches I have on my machine, all because of our huge monorepo.
For reasons Iām not entirely sure about, I decided to use Python. A language I know approximately nothing about beyond āwhite-space mattersā, āthereās probably a library for that,ā and āprint("Hello, world!")
.ā
(Hey, Iād have to turn in my software engineering badge if I didnāt attempt to reinvent the wheel every so often)
So, picture this scenario: Iām staring at my terminal after I had just typed git branch
. Iām looking at a screen with about 37 branches in various states of decay. And of course there are numerous unhelpful branches with names like, daves/no-jira/hotfix
, daves/no-jira/hotfix-2
, daves/no-jira/hackweek-project-cool
. My terminal is just a wall of branch names, most of them mocking my organizational skills.
(By the way, what was hackweek-project-cool
? I donāt know⦠I never committed any code to it!)
I needed a better way to manage this chaos. So naturally, instead of cleaning up my branches like a responsible developer, I decided to build a tool. In a language I donāt know. Using only Claude Code. What could possibly go wrong?
Claude Code is great. It never gets tired. It never gets angry. Even if I kept asking questions and piling more features on top.
- āLetās make a shell script using Python to display Git branches.ā
- āOhhh, can we make it show which branches have uncommitted changes?ā
- āOh, oh! Add some colors, but tasteful colorsā¦ā
- āHey, there are a lot of branches here. What if pressing
shift
+d
deleted branches (but we should probably have a confirmationā¦)?ā - āYou know what it really needs now? A loading spinner!ā
After a few hours of asynchronous back and forth, we had a result! Git Branch Manager: a terminal UI that actually shows useful information at a glance. Navigate your branches with arrow keys, see visual indicators for everything important, and perform common operations without memorizing Git commands.

For me, those little indicators are game changers:
*
Current branch[modified]
Has uncommitted changes[unpushed]
Exists locally but not on remote[merged]
Already merged (why is this still here?)ā
Remote branch you havenāt checked out yet
One feature that I love: Smart stash management. When you try to switch branches with uncommitted changes, gbm
asks if you want to stash them. But hereās the cool part: it remembers which stashes it created and gives you a notification when you switch back. Press āSā and boom! Your changes are restored!
This process still blows my mind. I describe what I wanted in plain English, and Claude Code would translate these chaotic ideas into actual, working Python. āMake old branches look oldā turned into color-coding based on commit age. āIt should be smart about stashingā became an entire stash management system.
Installation is pretty simple, too. No pip, no dependencies, just curl and go:
# Quick install
sudo curl -L https://raw.githubusercontent.com/daveschumaker/gbm/main/git-branch-manager.py -o /usr/local/bin/git-bm
sudo chmod +x /usr/local/bin/git-bm
# Additionally, add as a git alias
git config --global alias.bm '!git-bm'
Now you can just type git bm
anywhere. Pretty neat!
Thereās also browser integration (press b
on any branch), worktree support, and a bunch of other features Iām proud of, err, creating, despite not having touched the code.
Hereās the thing about vibe coding with AI: it completely changes whatās possible for a weekend project. I built a legitimate, useful tool in a language I donāt know and using standard libraries Iād never heard of.
If you asked me 6 months ago if someone with no knowledge could build useful tools or websites using AI prompts only, I might have said no. āYou still need people who understand software engineering principles, who understand what the code is doing,ā Iād (not so) confidently say.
But now⦠itās getting crazy. Is this the future of programming? To be a glorified conductor who oversees an orchestra of AI agents? Maybe!
Bottom line: my Git branches have never looked better, and I didnāt have to spend six months learning Python to make it happen! So, if youāre buried in branches like I was, give gbm a shot: github.com/daveschumaker/gbm
Now if youāll excuse me, I need to go stare at my beautifully organized branch list again.
P.S. Yes, I realize I could have just cleaned up my branches manually in less time than it took to build this. But whereās the fun in that?