Profiles / Earendil Works (formerly badlogic / Mario Zechner)
Pi Coding Agent
Refuses to govern, ships what it merges, and now lets an installed extension own your provider credentials.
Operator Read
Pi is a deliberately minimal terminal coding harness from
Earendil Works. Its identity is a
refusal: no subagents, no plan mode, no approval prompts, no MCP, no governance
in core. The core stays small and the platform grows through extensions. That
posture is unchanged after ten tagged releases, and Pi's own README at v0.82.1
still says so.
What changed in the 2026-07-02 to 2026-07-27 window is the price of the refusal.
v0.81.0 lets an
extension register a complete provider with its own authentication, model
refresh, filtering, and custom streaming. An installed extension can now acquire
credentials and dispatch requests, and Pi supplies no permission prompt to catch
it. Extension review is credential review. That is a coherent consequence of the
design rather than a contradiction of it, but it is a materially larger trust
decision than installing a tool.
Set against that, Pi is the cleanest project on this watchlist to reason about.
compare/v0.82.1...main
reports two commits, both housekeeping. When main and the tag are the same
artifact, the gap between what is fixed and what you can install closes -- and
so does the space where a public claim about the project is unverifiable. Pi ran
two commits ahead of its tag while Hermes ran 1,712.
Current release:
v0.82.1(2026-07-25), on npm as@earendil-works/[email protected]. Ten tagged releases landed in window,v0.80.5throughv0.82.1, none of them prereleases. Thelegacy-node20dist-tag sits at0.74.2.
Operator Stance / as of 2026-07-27
- Use it for
- Embedding agent functionality in custom UIs and runtimes -- Cloudflare Workers, custom CLIs, CI runners -- where you own the product surface and the governance layer. Also the reference case for release honesty on this watchlist: two commits between the newest tag and the default branch, deterministic checksummed source archives, and a medium-severity dependency advisory closed in a tagged release four days after publication.
- Avoid it for
- Operators who want built-in subagents, plan mode, approval prompts, or MCP -- Pi ships none of them by design and delegates sandboxing to Gondolin, Docker, or OpenShell. Anyone installing `@mariozechner/pi-coding-agent`, which is frozen at 0.73.1 and never received the protobufjs fix; the live package is `@earendil-works/pi-coding-agent`. And anyone pinning against the SDK without tracking versions: it took two breaking changes in nine days, and credential storage stopped being a public surface.
- Watch next
- Whether extension-registered providers -- which can now own authentication and request dispatch -- get any review or capability boundary, since extension review is now credential review with no prompt to catch it; whether `PI_SESSION_FILE` in every bash subprocess gets a scope or an opt-out; whether the `/base` entry points become a genuinely separate lean SDK; and whether the phantom-tag pattern recurs, since a git tag on this project is not proof of a release.
Our own defect, and what it cost
State this plainly, because it is the largest error in the record and it is ours.
sources/pi-coding-agent.yml watched
@mariozechner/pi-coding-agent,
whose latest dist-tag is 0.73.1, published 2026-05-07 and never republished.
The live package is
@earendil-works/pi-coding-agent,
which reached 0.82.1 on 2026-07-25, and
package.json at v0.82.1
carries the @earendil-works name. For eleven weeks this publication read Pi as
static while it shipped ten tags, and we did not surface the protobufjs advisory
fix described below. The contract was corrected on 2026-07-27.
The operator-facing half matters more than our embarrassment. Anyone still
installing @mariozechner/pi-coding-agent is nine minor versions behind and has
received no update since 2026-05-07, including the dependency fix. Check the
scope on your install line before you check the version number.
There is a second, smaller version-truth hazard on this project.
v0.80.4 is a phantom tag. It exists in git at commit 912d0953f6, dated
2026-07-09, with the message Release v0.80.4. There is no GitHub release and
no npm publish; the registry jumps from 0.80.3 straight to 0.80.5. Anything
that compares version strings against git tags will report a release nobody can
install. Pin to npm versions on this project, not to tags.
Two breaking changes in nine days
Pi's SDK is its adapter surface, so an SDK break is a product break for everyone embedding it.
v0.80.7
(2026-07-14) removed the openai-responses compat.sendSessionIdHeader flag
from models.json. Session affinity is now controlled by
compat.sessionAffinityFormat with values "openai", "openai-nosession", or
"openrouter"; a previous sendSessionIdHeader: false becomes
sessionAffinityFormat: "openai-nosession".
v0.80.8
(2026-07-16) is the bigger one. CreateAgentSessionOptions.authStorage and
modelRegistry are replaced by an async modelRuntime option. AuthStorage
and its storage backends are no longer exported; consumers must use
ModelRuntime, a custom pi-ai CredentialStore, or readStoredCredential()
for one-off reads of auth.json. ModelRegistry.getApiKeyAndHeaders() becomes
ModelRuntime.getAuth(), and extension-facing ModelRegistry.refresh() changed
from synchronous void to Promise<void>, so extensions must await it before
any synchronous registry read.
The direction is defensible -- every request-auth decision now routes through
one method instead of a scattered credential surface. The consequence is that
credential storage stopped being a public SDK surface, and anyone who reached
into AuthStorage is broken. A widely shared community recipe for building a
DIY Pi web UI, published 2026-07-21, was pinned to 0.80.6 APIs and was already
two breaks stale on the day it circulated. Pi moves fast in a small surface;
that is not the same as a stable one.
Supply chain: the clean case of the window
Two things here, and both deserve credit.
A dependency advisory closed in four days.
v0.82.0
(2026-07-24) updated the packaged protobufjs to 7.6.5 to address
GHSA-j3f2-48v5-ccww
(CVE-2026-59877, severity medium, a denial of service via infinite loop in
.proto option parsing), published 2026-07-20. The
tracking issue was opened and
closed on 2026-07-23. Advisory to tagged fix in four days, and the fix is what
npm serves as latest. Across a window where this publication kept finding
repairs stranded on branches or behind stable channels, that is the shape the
rest of the field should be measured against.
Pi became independently rebuildable.
PR #6913, shipped in
v0.81.1, adds
deterministic, checksummed source archives to GitHub releases with
documented instructions
for rebuilding the standalone binaries; v0.82.0 followed by including the
generated provider model data those builds need. You can verify what you run
against a checksum and rebuild it yourself. That is the strongest supply-chain
posture on the current watchlist, and the project with the fewest governance
features has the most verifiable artifact.
What the window handed to subprocesses
v0.82.0 exposes
PI_SESSION_ID, PI_SESSION_FILE, PI_PROVIDER, PI_MODEL, and
PI_REASONING_LEVEL as
environment variables
to commands run by built-in and factory-created bash tools
(PR #6971). Direct RPC bash
commands also gained streaming
bash_execution_update
events correlated with request IDs.
For an operator building a governance layer on top of Pi, this is exactly the
input you wanted: session identity, provider, model, and reasoning level
available to whatever you run. It also means PI_SESSION_FILE hands every
command Pi launches a first-class pointer to the full session transcript. A
hostile or merely careless script no longer has to find your history; the path
is in its environment. Pi's own vendor post announcing the change named the
model and provider variables and did not mention this one.
Both readings are true at once, which is the honest version of Pi's whole bargain: it exposes the primitives cleanly and leaves the consequences to you.
Capability, briefly
Everything below is tagged-release.
- Constrained tool sampling (
v0.82.0): tools can prefer or require strict JSON Schema sampling or OpenAI Lark/regex grammars, with generated capability metadata (supportsGrammarTools,supportsStrictTools) preventing unsupported requests across OpenAI, Anthropic, Bedrock, Gemini, and Mistral. - Cache-friendly dynamic tool loading
(PR #6474,
v0.80.7): extensions add tools mid-execution while supported Anthropic and OpenAI Responses models preserve the cached prompt prefix. Combined with constrained sampling, an extension can reshape the tool surface during a run without paying to rebuild the cache, which is the cheap way to keep long sessions affordable. - Local llama.cpp model management
(
v0.81.0): connect to a llama.cpp router, search and download Hugging Face models, load and unload explicitly with live progress. - Retry on compaction and branch summarization
(PR #6901,
v0.81.1): transient provider failures retry under the configured retry policy, with lifecycle events exposed to interactive, JSON, RPC, and SDK consumers. - Subscription OAuth kept expanding: OpenRouter OAuth PKCE minting a
user-controlled key (PR #6927)
and Kimi Code device-authorization OAuth
(PR #6935) in
v0.82.0, xAI device-code OAuth (PR #6651) inv0.80.8, Qwen Token Plan providers (PR #6858) inv0.81.0, andANTHROPIC_AUTH_TOKENbearer auth for Anthropic-compatible gateways -- including for compaction and branch summaries -- inv0.82.1. Pi keeps routing toward subscriptions people already hold rather than metered API keys. - Claude Opus 5 on Anthropic and Bedrock with adaptive thinking including
xhigh(PR #7081,v0.82.1).
Findings: 2026-06-23-pi-selective-provider-base-entrypoints,
2026-06-23-pi-mistral-prompt-caching.
The refusal still holds
Pi's README at v0.82.1
continues to state that Pi ships powerful defaults but skips features such as
sub agents and plan mode, and directs users to ask Pi to build what they want or
install a third-party package. No permission-prompt, subagent, plan-mode, or MCP
feature landed across ten releases. The docs carry
Security
and Containerization sections, and both files predate this window untouched --
sandboxing is delegated to Gondolin, Docker, or OpenShell.
So the posture is stable and we should say so without hedging. What is new is that the surface delegating governance now also delegates credential handling to extensions, which raises the stakes on the one review step Pi asks the operator to perform and does not assist with.
Findings: 2026-06-23-pi-extension-compaction-event-context.
Two facts, reported without inference
Pi removed its OpenClaw reference. On 2026-07-26,
commit cee5ff7520
("ref: remove openclaw reference from readme", one file) deleted the sentence
pointing at openclaw/openclaw as a real-world SDK integration example. The
preceding sentence, that Pi runs in four modes -- interactive, print or JSON,
RPC, and SDK -- is unchanged. Context, receipted: OpenClaw's v2026.7.2-beta.1
notes, published 2026-07-15, advertise discovering OpenCode and Pi sessions from
paired nodes and resuming Pi sessions directly in a terminal. Eleven days
separate the two events. We report this as a fact and infer no motive, because
the record supplies none. The operator-visible result is that the integration
now runs one way in the documentation: OpenClaw reads Pi sessions, and Pi no
longer points back.
The vendor was refuted by its own next tag. On 2026-07-24 Pi's official
account suggested a new release might not be needed for Opus 5, because dynamic
model catalogs would surface it through pi update --models or cache expiry.
v0.82.1 shipped seventeen and a half hours later bundling Opus 5 model data
for Anthropic and Bedrock. Pi then said so itself. This is not a mark against
Pi; it is a clean demonstration that "you will not need to upgrade" is a
prediction rather than a receipt, from the party best positioned to know.
One structural note on Pi's public conversation, because it is unusually
measurable. Six release posts across four tags land between 32 seconds before
and 5 minutes 3 seconds after the GitHub release, median roughly three
minutes. On a project where main and the tag are the same artifact, there is
nothing for the conversation to know first, and the record shows it does not.
Read Pi's social lane as low-latency distribution, never as early warning.
Open questions
Answered this window, so they stop being asked:
- Is the Earendil migration settled? Yes, on Pi's side: the repository is
earendil-works/pi, the package is@earendil-works/pi-coding-agent, and the old npm name has not published since 2026-05-07. The thing that had not migrated was our own source contract. - Is
$PI_SESSION_DIRreachable beyond tools and extensions? Advanced substantially:v0.82.0putsPI_SESSION_IDandPI_SESSION_FILEinto the environment of every command the bash tools run, so the session transcript path is now reachable from any subprocess. Whether it also reaches the system prompt or context files is still unanswered.
Still open:
- Does an extension-registered provider get any capability boundary? It can now own authentication and request dispatch, Pi ships no permission prompt, and the security and containerization docs predate the change. What does a careful operator actually inspect before installing one?
- Can
PI_SESSION_FILEbe scoped or withheld per tool? A pointer to the full transcript in every subprocess environment is a reasonable default for a harness that trusts its operator and a poor one for a harness running third-party scripts. - Does the lean SDK arrive as a separate distributable, or do the
/baseentry points stay composable pieces inside the CLI packages? Not advanced this window. - Is the phantom
v0.80.4an isolated slip or a repeatable failure mode in the release process? One occurrence is an accident; a second would mean git tags on this project carry no information. - Does Earendil Works add a cloud, enterprise, or hosted tier that would put pressure on the no-governance-in-core stance? Still nothing in the record.
What to watch next
- Any review or capability surface for extension-registered providers. This is the change with the largest gap between what it enables and what Pi helps you check, and it is the item most likely to change this profile's stance.
- Whether the two-commit channel gap holds. It is currently Pi's strongest claim on operator trust and the reason claims about Pi are checkable at all.
- Whether checksummed archives get adopted as a norm elsewhere. Pi shipped the most verifiable artifact on the watchlist this window; whether that is a competitive signal or an outlier is a field-level question.
- Any plan mode, approval surface, or MCP addition, which would mark a real departure from the design stance rather than an extension of it.
- SDK stability signals. Two breaking changes in nine days is fine for a 0.x harness and expensive for anyone embedding it; a deprecation policy would change how safely Pi can be built on.
Verification
open source commits / evidence floor: release note / updated 2026-07-27
Verified claims
- Pi Coding Agent: Thin Harness, Fast Provider Churn, and Extension Contracts / verified 2026-05-06
- Pi Coding Agent: The Thin Harness Moves Fast Because It Refuses To Own Everything / verified 2026-05-07
- Pi Coding Agent: Package Scope Migration to Earendil Works and Harness SDK Refinements / verified 2026-05-12
- OAuth browser launch URI validation and shell-safe spawning / verified 2026-06-03
- 2026-06-23-pi-extension-compaction-event-context / verified 2026-06-23
- 2026-06-23-pi-selective-provider-base-entrypoints / verified 2026-06-23
- 2026-06-23-pi-mistral-prompt-caching / verified 2026-06-23
- 2026-06-23-pi-vulnerable-dependency-update / verified 2026-06-23
Open Questions
Featured in
- Newer, Numbered Lower / 2026-08-03
- Rules Became Judgment / 2026-07-27
- Foreground Attention Is No Longer the Control / 2026-07-02
- Patched for Whom / 2026-07-01
- Governance, Sold Separately / 2026-06-24
- Protected on Paper / 2026-06-23
- Who's Allowed to Say Yes / 2026-06-16
- The Policy You Wrote Wasn't the Policy You Had / 2026-06-03
- Governance Becomes Enforcement / 2026-05-12
- The Harness Leaves The Chat Box / 2026-05-07
- What Shaped the Run / 2026-05-06
Source policy: what Frontier watches and accepts as evidence
Edited and maintained by Bitter Frontier.