“Every time I have a question, I ask it to write an app for me. I’ve got about 100 utilities now — things that would have been a pain to do manually, and not enough of a pain to pay $25/month for a SaaS. Now I just have them in my local GitHub repo.” — Lou, 2026-04-02
Session context: 2026-04-02_Mastermind — Lou named the pattern out loud during the tiny-tools discussion, but the principle had been forming across three sessions: the LLM-as-UI architectural decision in 2026-02-26_Mastermind, Don Back’s voice-CRM build in 2026-03-12_Mastermind, and the 100-utility library quote in 2026-04-02.
Core Idea
For tools whose audience is one person (you), or a small group of sophisticated users (you and your team), the most durable architecture is the one that skips the UI entirely. The tool lives in a folder. You invoke it from the command line, from a chat window, or from a one-line script. There is no login screen, no dashboard, no settings panel, no responsive design, no auth layer, no hosting bill. There is only the function the tool exists to perform.
This is not a stylistic preference or a developer aesthetic. It is the consequence of the new economics: when AI can write a working tool in fifteen minutes, the cost of building one is no longer the constraint. The constraint is maintenance, distribution, and discoverability — and a UI is the single largest contributor to all three. Strip the UI, and the tool becomes nearly free to keep alive. Add a UI, and you have just signed up for browser-compatibility debugging, layout drift, and the slow accumulation of edge cases that turns yesterday’s solo hack into next year’s reluctant SaaS.
The CLI-first principle is what makes Lou’s “100 utilities” library possible. Each utility is a few hundred lines of code in a local GitHub repo. There is no app store, no React frontend, no deployment pipeline, no analytics dashboard. Each one was built in response to a single question — how do I do X? — and the answer was a small script Claude wrote to order. The tools accumulate because they are cheap to keep and trivial to find once you know they exist. A UI on each one would have killed the library before it crossed twenty entries.
This insight pairs with Insight - Use the LLM as the UI — Conversation as Interface for Internal Tools but is distinct from it: that insight covers the decision logic (when is conversational interface enough?). This insight owns the broader design principle — that for personal and small-team tools, the absence of a designed interface is a feature, not a missing piece. The CLI is not what you settle for when you cannot afford a UI. It is what you choose when you understand what a UI actually costs.
There are three reinforcing reasons CLI-first tools outperform UI-wrapped versions of the same functionality, at the personal-tool scale:
1. Composability. A CLI tool produces text. Text pipes into the next CLI tool. A UI tool produces a screen. Screens do not pipe. This is why Unix won and why Lou’s micro-apps stack instead of fragmenting — each one is a function in a larger ad-hoc pipeline that you assemble on the fly when you need it. The composability is invisible to a casual observer and load-bearing for the person who lives in the tools.
2. Zero maintenance surface. A CLI tool that worked last week works this week. A UI tool that worked last week may have broken because Chrome shipped, or because the framework you used dropped a dependency, or because a hosted service raised its prices. The maintenance surface of a CLI utility is the language runtime and the source file. The maintenance surface of a UI app is the language runtime, the source files, the framework, the build tooling, the hosting, the auth, the styles, and every browser the users might open it in. The asymmetry is enormous and accumulates.
3. AI-native invocation. This is the new reason and the most underappreciated one. CLI tools are how AI agents invoke functionality. A skill in Claude Code can call a script. A skill cannot call a UI. The moment your tool has a UI, it becomes invisible to the AI orchestration layer that the next era of personal computing is being built on. CLI-first is not nostalgia for the terminal — it is forward-compatibility with how agents will use your tools on your behalf. This is also why Don Back’s voice CRM (2026-03-12_Mastermind) works the way it does: the entire chain (Hey Siri → AppleScript → Custom GPT → Apps Script → Sheet) is CLI-shaped end to end. There is no UI in the loop because there cannot be one — the input is voice, the output is a row in a spreadsheet, and everything in between is a function call. That topology is the future of personal tooling, not an exotic edge case.
The principle has a clean test: if I told an AI agent to use this tool tomorrow, would it know how? A CLI utility exposes its entire interface in the script and a one-line description. A UI app does not. CLI-first is the architectural commitment to building tools that AI can invoke without a human in the loop — which, conveniently, is also what makes them invisible-friction for the human who built them.
Why This Matters for Sustainable Growth
The temptation for any knowledge entrepreneur with technical chops is to take a useful internal tool and turn it into a SaaS — wrap it in a UI, add billing, market it, scale it. This was the right move in the era when building software was expensive and distribution was hard. It is the wrong move now, for most internal tools, for two reasons.
First: the moment a tool becomes a SaaS, you have committed to maintaining it for everyone who depends on it, indefinitely, including the version of yourself who wanted a quick fix six months ago. The maintenance surface that was manageable when it was just your script becomes a part-time job when twenty people are paying you for it.
Second: the durable leverage now lives upstream of the tool, not downstream. Your eigenthinking, your codified judgment, your accumulated micro-utilities — these compound. Your SaaS does not compound; it depreciates the moment you stop maintaining it. The friction-fix-as-reusable-IP move (Insight - Build for Reuse — Architect Tools as Composable Components) is the publishing model that fits CLI-first tooling: extract the insight from the friction-fix and publish that, while keeping the tool itself private and CLI-shaped. You get the authority returns of the publishing without the maintenance returns of the SaaS.
For coaches and consultants whose business model is selling judgment, not software, this is liberating. You do not need to choose between “building tools” and “staying in your zone of genius.” You can have a hundred private tools and one business — and the tools amplify the business precisely because they were never trying to be the business.
Blind Spots and Pitfalls
- The “but my users aren’t technical” objection is mostly false at this scale. The audience of a personal tool is you. You are technical enough. The objection actually applies to the SaaS path you should not be on.
- CLI-first does not mean terminal-first. The interface can be a chat with Claude, a voice command, a browser bookmarklet, or a one-line script in a
.zshrc. What matters is that there is no designed visual interface — the invocation is text or voice, and the output is text or a side effect. Don Back’s voice CRM is CLI-first by this definition even though there is no actual command line in the user-facing chain. - Discoverability degrades past about 30 tools. Lou’s 100-utility library works because Lou knows what is in it. Once a CLI-first library crosses the limit of what one person can remember, you need a discovery layer (a skill that lists tools, an LLM that knows the inventory). Without that, the tools become invisible to their owner, which is the same as not having them.
- Some tools genuinely need a UI. Anything that needs to render a chart, manipulate an image visually, or be used by a non-technical client in real time is in UI-required territory. The principle is CLI-first as default, not CLI-only as dogma.
- Skill bloat. The CLI-first model encourages building a tool every time you have a question, which can create a sprawling, redundant collection. The hygiene move is periodic consolidation — merge related utilities, delete the ones you have not invoked in 90 days, and let the survivors mature.
Practical Application for PowerUp Clients
The CLI-First Audit — for anyone whose tooling has started to fragment across SaaS subscriptions:
- List your last 10 SaaS subscriptions paid for in the last year. For each, write the single function that justified the subscription. (“Reformat dates in a CSV.” “Generate a slug from a title.” “Convert markdown to PDF.”)
- Mark every function that is one prompt away from a script. If you can describe the input and the output in two sentences, Claude can write the script in fifteen minutes. Most of your list will qualify.
- Pick three. Build them this week. Use Claude Code or any code-capable AI. Save each one in a single folder —
~/tools/or~/utilities/, name does not matter. Aim for a single file per tool. No README required for the first version. - Cancel the corresponding SaaS subscriptions. This is the test step. If you cannot bring yourself to cancel because the SaaS does more than the script, that’s a real signal — keep the SaaS. If you can cancel, you have just converted recurring expense into permanent capability.
- Make the inventory legible. Write a one-line description of every tool in a top-level
INDEX.mdin the folder. This is the discoverability layer that prevents the library from collapsing under its own weight at 30+ entries.
Coaching prompt: “What is the smallest piece of friction in your week that you have been ignoring because it is not big enough to justify a real solution? Build the CLI-first version of that tool today. The tool you would never pay for is exactly the tool you should never not have.”
For Lou’s coaching practice: Demo the inventory move during onboarding for any client at Era 5 or above. The shift from “I buy SaaS” to “I have a folder of tools I built” is a tangible Era 6 marker — clients can see whether they are operating at the new abstraction layer or still living downstream of someone else’s product roadmap.
Related Insights
- Insight - Use the LLM as the UI — Conversation as Interface for Internal Tools — the closest sibling: that insight covers the decision logic (when is conversational interface enough?); this insight owns the broader design principle that the absence of a designed UI is a feature, not a gap
- Insight - Build Tiny Tools That Remove Real Friction — the meta-page hub for the tiny-tools cluster; CLI-first is the architectural posture that makes the tiny-tools strategy sustainable past 20 entries
- Insight - Decide the Abstraction Layer Before You Build — the layer-ladder discipline that prevents premature UI investment; CLI-first is the answer the layer ladder usually arrives at when applied honestly
- Insight - Design Tiny Tools for Maximum Composability — the composability mandate is what CLI-first delivers structurally; tools that produce text compose, tools that render screens do not
- Insight - Build for Reuse — Architect Tools as Composable Components — the publishing model that pairs cleanly with CLI-first private tooling: keep the tool, publish the insight
- Insight - Choose Your Abstraction Layer Before You Build — the canonical statement of the layer-decision discipline that CLI-first operationalises
- Insight - Skill Chaining — Build Modular AI Pipelines Instead of Monolithic Prompts — CLI-first tools are exactly the building blocks that skill chains compose; a skill chain can call a script, it cannot call a UI
Evolution Across Sessions
This insight crystallises a pattern that surfaced across three sessions without ever earning a dedicated page. The 2026-02-26 session (Insight - Use the LLM as the UI — Conversation as Interface for Internal Tools) introduced the decision logic — when conversational interface beats traditional UI for internal tools. The 2026-03-12 session demonstrated the frontier case — Don Back’s voice-driven CRM, which is CLI-first end to end (voice → AppleScript → Custom GPT → Apps Script → Sheet) with no traditional UI anywhere in the chain. The 2026-04-02 session named the accumulated practice — Lou’s “100 utilities in a local GitHub repo” quote, which is the lived demonstration of CLI-first as a mature personal architecture, not a proof-of-concept. Future sessions should test the discoverability ceiling: Lou is past 100 utilities and has not yet hit a wall; what is the actual limit, and what is the discovery layer that pushes past it?