The anti-feature list
Every coding agent ships the same roadmap — sub-agents, plan mode, sandboxes, a growing prompt that takes over your context window. Pi does the opposite. It gives the model four tools (read, write, edit, bash), a system prompt under ~1,000 tokens, and stops.
Missing a feature? That’s the point. You ask Pi to build it as an extension, or install a package that does it your way. The core stays minimal because it can.
Why that wins
A small tool surface means every decision the agent makes is visible. I can read the whole session, see which bash commands it ran, and trust the blast radius. There’s no permission system hiding what it’s about to do — which means I actually watch it work.
# provider-flexible: swap mid-session instead of changing tools
pi # interactive TUI
pi -p "run the test suite" # single-shot for scripts
Pi talks to 15+ providers and switches models mid-session, so a cheap model handles the boring turns and I escalate only when a task needs it. Running Grok or Codex through it costs me a fraction of a locked-in subscription.
The guardrails
- Point it at a feature branch and a repo checkout with no secrets.
- Treat
bashas the real attack surface; scope the working directory. - Require a human-reviewed diff before anything merges — the swarm moves fast, and you stay the review gate.
const agent = new CodingAgent({ tools: ["read", "grep"], provider: "openrouter" });
await agent.prompt("summarize the diff and flag risks");
Minimal doesn’t mean weak. It means you bring your own rails — and for once, you can actually see what you’re running.