> The agent shell
— forge team
The agent boom shipped the wrong shape.
What we got: monoliths. A chatbox in a tab. Copy from your editor, paste into the tab, copy the reply back. Re-prompt. Lose the thread. Open another tab. The agent is a destination — go visit it, please.
What Unix taught us, in 1978: do one thing well, expect your output to become someone else's input, prefer text streams. That's McIlroy's four-line memo, and forty-eight years later we're still living off it. grep does not know what awk is. They don't need to. The pipe is the API.
An agent should be the same shape. Small. Composable. Pipeable. Not a portal.
What that looks like, in the wild
Aider is the cleanest existing example. It's a terminal program that pair-programs against your local git repo. No dashboard. It edits files on disk and makes one atomic commit per change with an LLM-written message. Your editor picks up the diff through normal file-watching — Vim shortcuts still work, git hooks still fire. The project reports 44K GitHub stars, 6.8M pip installs, ~15B tokens consumed weekly, and says 88% of new code in the latest release was written by Aider itself. Whatever you think of those numbers, the design move is the load-bearing part: Aider does one thing — edit code via the LLM — and gets out of the way of every other tool you already had.
Simon Willison's llm CLI goes further on the pipe end. It is, in his own words, designed "with the Unix philosophy of composable tools in mind." cat myfile.py | llm -s "explain this" does what you'd hope. The 0.26 release (May 27, 2025) added tool-calling — meaning the model can now execute "any tool that you can represent as a Python function" — across OpenAI, Anthropic, Gemini, and local Ollama, behind the same CLI. Apache-2.0. A plugin system for new models, new tools, new fragment loaders. The whole thing is a power tool, not a product.
These two are not isolated. Eficode — among others — has been arguing that small atomic agents that do one thing well are the path forward for agentic AI: composition, not consolidation. The bet: a thousand tiny tools, glued by text streams and small models, will beat one mega-agent that needs its own UI.
Why the monolith keeps winning anyway
Because the monolith is easier to sell. A chatbox has a logo, a pricing page, a brand. A pipe doesn't. SaaS likes the chatbox. VCs like the chatbox. The chatbox can have a referral program. xargs cannot.
So we get the form factor that maximises reach and minimises composability — and we call it the future. Meanwhile the builders quietly run llm, aider, gh, jq, fzf together in a tmux pane and ship.
The stance
forge is built for the second group.
One binary. Reads stdin. Writes stdout. Honours your shell, your aliases, your env. If you want a dashboard, run another binary; we'll be in the pipe. The agent is not a destination. It is a verb in your shell, between | and |, and it does its part and exits — like everything else that ever earned a spot in /usr/local/bin.
Do one thing. Compose. Pipe. Exit.
Sources
- Aider — AI pair programming in your terminal — project home page, the canonical reference for Aider's design and adoption numbers.
- GitHub: simonw/llm — repository for the
llmCLI, Apache-2.0, with the composable-tools framing in its README. - Simon Willison: Large Language Models can run tools in your terminal with LLM 0.26 — release post, tool-calling across OpenAI / Anthropic / Gemini / Ollama.
- Wikipedia: Unix philosophy — Doug McIlroy's 1978 formulation: do one thing well, work together, handle text streams.
- Eficode: Unix principles guiding agentic AI — argues small atomic agents that "do one thing well" are the right path for agentic AI.