Pi — the harness that ships its refusals as extensions
Mario Zechner's Pi, published by Earendil Works and described on its own front page as "a minimal agent harness." The tagline is the design: "Adapt Pi to your workflows, not the other way around." Read from pi.dev and the repository on 2026-08-30.
The corpus has had Pi in view since June without ever paging it. oh-my-pi was ingested as "a fork of Mario Zechner's Pi," and agentic-coding-harness names "configurable harnesses like Pi" in passing. This is the upstream arriving in its own right.
The repository, measured
From the GitHub API on 2026-08-30 (earendil-works/pi):
| Stars / forks | 99,163 / 12,303 |
| Open issues | 138 |
| Language | TypeScript |
| Licence | MIT |
| Created | 2025-08-09 |
| Last push | 2026-08-29 |
| Description | "AI agent toolkit: unified LLM API, agent loop, TUI, coding agent CLI" |
Those are the largest counts of any harness in this spoke, by an order of magnitude, on a repository
just over a year old and pushed yesterday. Note the mismatch worth keeping: the repo sells a
toolkit (unified LLM API + agent loop + TUI + CLI), the website sells a minimal harness. The
CLI in packages/coding-agent is one package of several.
What it refuses, and what makes that different
The front page ends in a list of things Pi does not do. Each carries a stated alternative:
| Refused | Pi's answer |
|---|---|
| No MCP | build CLI tools with READMEs (i.e. skills), or write an extension that adds MCP |
| No sub-agents | spawn Pi instances via tmux, or an extension, or install a package |
| No permission popups | run in a container, or build your own confirmation flow |
| No plan mode | write plans to files, or build it |
| No built-in to-dos | use a TODO.md |
| No background bash | use tmux — "full observability, direct interaction" |
This is the second harness here defined by its removals, after KOT on 2026-08-23, and it
overlaps KOT on two of them (MCP, permission gates). The reasoning is opposite. KOT's removals
come with ten fixed built-in tools and no registry — a bet that built-in beats extensible. Pi's come
with the section heading "Primitives, not features" and a link to 50+ example extensions,
among which are subagent/, plan-mode/, permission-gate.ts, protected-paths.ts, sandbox/ and
MCP integration. Pi removes the features and ships them back as samples.
So the corpus now holds two harnesses that delete the same layers for contradictory reasons, and the generalization written from the first one — that a refusal implies a built-in bet — does not survive the second. See synthesis.
Extensibility as the product
- Extensions are TypeScript modules with access to tools, commands, keyboard shortcuts, events and the full TUI.
- Packages bundle extensions, skills, prompts and themes, installed from npm or git:
pi install npm:@foo/pi-tools,pi install git:github.com/badlogic/pi-doom. There is a package browser at pi.dev/packages. - Self-modification is the pitch, not a side effect. "If you need a command, tool, provider,
workflow, or UI tweak, just ask Pi to build it. It will customize itself on the fly… Have Pi
manipulate itself in place, hit
/reload, and keep going." A harness whose stated method of gaining a feature is asking the agent inside it to write one. - Third-party work exists:
@termdraw/piby Ben Vinegar, and a DOOM extension the site demonstrates.
The rest of the surface
Four modes — interactive TUI; print/JSON (pi -p "query", --mode json for event streams); RPC
over stdin/stdout for non-Node integrations; and an SDK for embedding, with OpenClaw
named as the real-world integration.
Providers: "15+ providers, hundreds of models" — Anthropic, OpenAI, Google, Azure, Bedrock,
Mistral, Groq, Cerebras, xAI, Hugging Face, Kimi For Coding, MiniMax, NVIDIA, OpenRouter, Ollama —
API keys or OAuth, switchable mid-session with /model, custom providers via models.json.
Sessions are trees. /tree navigates to any earlier point and continues from there, all branches
in one file, filterable and bookmarkable; /export to HTML, /share to a GitHub gist with a
rendering URL. The only harness here that treats a session as a branching structure rather than a
log.
Context engineering is the site's own term for the cluster: AGENTS.md loaded from ~/.pi/agent/,
parent directories and the cwd; SYSTEM.md to replace or append to the system prompt per project;
compaction that auto-summarizes older messages and is itself replaceable by extension (the docs
name topic-based compaction, code-aware summaries and a different summarization model as things you
would write); skills loaded on demand, described as "progressive disclosure without
busting the prompt cache"; prompt templates as markdown expanded by /name; and extensions that can
inject messages before each turn, filter history, or implement RAG.
Steering: Enter interrupts the running agent after the current tool; Alt+Enter queues a
follow-up for when it finishes.
What is not here
No benchmarks, no evaluation, and no comparison against any other harness — the site makes no performance claim at all, which is unusual enough in this corpus to be worth stating. The star and fork counts are adoption, not quality. Every capability above is the project's own description; the only figures independently obtained are the repository counts, and those come from GitHub rather than from anyone assessing the software.
Related
agentic-coding-harness · oh-my-pi · agentkot · claw-code · mario-zechner · earendil-works · agent-skills · model-context-protocol · openclaw · synthesis