Earendil's Pi is a minimal coding agent that ships primitives instead of features — deferring MCP, sub-agents, and plan mode to you, your extensions, and the tools you already run.
Most coding agents are racing in the same direction: more built-in tools, more modes, more automation baked into the core. Pi, a coding agent from Earendil Inc, runs the other way. Its pitch isn't a longer feature list — it's a shorter one, held together by a single idea: give developers primitives, not features, and defer everything else to them. As the homepage puts it, "There are many agent harnesses, but this one is yours."
A harness that says no
Pi is a minimal, extensible CLI agent that deliberately leaves a lot out. There's no MCP support, no built-in sub-agents, no permission pop-ups, no plan mode, no built-in to-do tracking, and no background bash execution. For a tool in this category, that list of omissions reads almost like a manifesto. The point isn't that those capabilities are bad — it's that the core shouldn't decide them for you. Pi stays "small at the core" and lets the rest be assembled.
"Primitives, not features"
Instead of shipping opinionated features, Pi ships building blocks and a way to compose them. Extensions are TypeScript modules that add tools, slash commands, event handlers, and even custom UI. Skills are reusable, on-demand capabilities. Prompt templates, themes, and shareable "pi packages" round it out. You can ask Pi to build a feature, reload it instantly, and publish it over npm or git. The philosophy the site leads with — "Adapt Pi to your workflows, not the other way around" — is the whole product in one line.
Deferring the hard parts to you
This is where "defers, on purpose" earns its name. The capabilities Pi omits aren't dead ends — they're handed back to the developer and to the wider tooling ecosystem:
- Sub-agents aren't a core abstraction. Want parallel agents? Spawn Pi instances via
tmux, or build your own orchestration with an extension. - MCP, plan mode, to-dos, and approval gates become extensions you opt into, not weight you carry by default.
- Other tools and harnesses stay first-class neighbors. Pi exposes an RPC mode (JSONL over stdin/stdout) and an SDK to embed it in Node.js apps, so it can sit inside another workflow — or shell out to the CLIs you already trust — rather than trying to replace them.
The result is a harness comfortable being one part of a toolchain instead of the whole thing.
Bring your own model — and your own everything
Under the minimalism, Pi is genuinely capable. It supports 15+ providers — Anthropic, OpenAI, Google, Azure, Bedrock, Mistral, Groq and more — with the ability to switch models mid-session. It runs in four modes: an interactive TUI with slash commands, a print mode that emits a JSON event stream, an RPC mode for integration, and an SDK for embedding. Context is engineered, not assumed: AGENTS.md carries project instructions, SYSTEM.md customizes the system prompt, and auto-compaction keeps long sessions in budget. History is a branching tree you can navigate, export to HTML, or share as a gist.
Why "defers" is the point
It's tempting to read Pi's omissions as gaps. They're closer to a thesis. Sealed, feature-maximal agents ask you to adopt their model of how work should happen. Pi inverts that: it ships the smallest dependable core it can, then defers the opinionated parts to your extensions, your context files, and the tools already in your terminal. It's MIT-licensed and installable in one line (curl -fsSL https://pi.dev/install.sh | sh), which fits the ethos — take it, bend it, make it yours.
In a market measuring agents by what they bundle, Pi is making a quieter bet: that the most useful harness is the one that gets out of your way and lets you build the rest.
Source: pi.dev · github.com/earendil-works/pi