The CLI is Back
I love working on the command line. It’s 2026 and we have some of the best tools in the world for building amazing graphical user interfaces, but here I am at the command prompt like it’s 1983. The command line isn’t old, it’s eternal and has always been the most direct way to control a computer.
The command line is powerful, but it’s cumbersome. Many of the best CLI tools are open source or hobby projects where documentation is wildly inconsistent: nonexistent at worst, overwhelming and deeply technical at best. For something I use every day like git, that’s fine. But many CLI tools are purpose-built utilities that do a few things extremely well, and I don’t use them often enough to internalize their syntax.
Enter the LLM. My command line awakening has been using Claude Code as a front-end for my CLI tools. It turns out LLMs are uniquely well-suited for this. The major open source tools are well-documented in plain text — blog posts, Stack Overflow threads, GitHub pull requests, readme pages — all of it embedded in the model’s weights. And CLI syntax is predictable and structured in a way that natural language isn’t, with deterministic failure modes that give the LLM real-time feedback on what worked and what didn’t.
Managing Google Workspace is a perfect example. The admin interface is cumbersome and riddled with gotchas, and I’ve always avoided it for fear of breaking something. But running a growing company means you can’t ignore it. I found a tool called GAM, a command line utility that handles everything a Workspace admin needs (users, domains, aliases, groups) straight from the terminal. It’s remarkably well-documented. Though honestly, you don’t need to read any of it. That’s the whole point.
I’ve never learned a single GAM command, but I’m using it weekly to reset passwords, manage aliases, adjust settings, and handle the administrative work that used to eat up my afternoons.
Here’s a simple example of something I’d sent to Claude:
Hey Claude- could you reset the password for [email protected]?
A few seconds later:
Done. Password reset for someone@airmail:
- Temporary password: <a temp password here>
- Force change on next login: enabled — they'll be prompted to set a new password the first time they sign in.
That alone is worth it! No more navigating 12 clicks deep through the sluggish Google Admin website. But then Claude volunteered something I hadn’t thought to ask:
A couple of follow-ups worth considering:
- 2FA status — if they got locked out because they lost their 2FA device, the password reset alone won't help. Want me to check their 2FA enrollment? ./bin/gam info user [email protected] will show it.
- App passwords / active sessions — a password reset doesn't automatically sign them out of existing sessions or revoke app-specific passwords. If this reset is for a security reason (suspected compromise), let me know and I can also run gam user [email protected] signout to terminate active sessions.
That’s the part that hooks me. It’s not just executing commands … it’s bringing operational awareness I wouldn’t have had otherwise.
I’m also building my own CLI tools now (using Go with Cobra, Viper, and Charm) to manage my apps, services, and infrastructure. The interesting shift is that I’m designing them knowing Claude Code is the front-end. Clean help text, consistent output, predictable failure modes. Not optimized for a human memorizing flags, but for an LLM that will read the docs once and orchestrate from there. It’s a different way to think about tool design.
It’s a good time to be back at the terminal. ✌️