Pi since 0.87.1: catching up to 1.2.0
DAC's Pi facade pins 0.87.1 (see the baseline post). Since that pin, Pi shipped ten more releases and is now at 1.2.0. We have not moved the pin. This note groups what changed, so you know what is coming, and flags the parts that would touch the facade when we bump.
On npm Pi skipped 0.88 through 0.98 and jumped from 0.87.1 straight to 0.99.0 on 2026-09-29, then to 1.0.0 two days later. The ten releases run 0.99.0, 0.99.1, 0.99.2, 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.1.0, 1.2.0.
Codemode and MCP land (0.99.x)
The biggest change in the gap. Pi grew a codemode tool that runs model-written JavaScript
in a QuickJS sandbox, where a script can call Pi's tools in parallel, plus first-class MCP
support over stdio or streamable HTTP with OAuth, managed by /mcp and pi mcp. Around it
came a tool-exposure model (direct, model-only, codemode, deferred, hidden), a
system theme that inherits the terminal palette, Sign in with ChatGPT, and virtual and
classifier models. The build moved to TypeScript 7.0 targeting ES2024. 0.99.1 made GPT-6.1
Sol the Codex default. 0.99.2 kept MCP servers off the first prompt and added more auth
options.
Pi 1.0 (1.0.0)
The 1.0 mark stabilizes the 0.99 foundation rather than piling on features. The TUI goes
fullscreen by default; set tuiMode: "regular" to keep terminal scrollback. Codemode
prompts get about 40% leaner and its errors explain how to recover. Codemode can generate
images. /login gains Radius and an Anthropic copy-code path for headless machines. MCP
OAuth is hardened with RFC 9207 iss checks, per-server credentials, and step-up that
keeps granted scopes. Startup can be quieted to just the header.
The 1.0.x refinements
1.0.1 added a Nix flake, per-project MCP overrides via .pi/mcp.json, tool renderers for
not-yet-registered tools, and Cloudflare Clef classifiers. It pinned brace-expansion for
a security advisory and removed npm-shrinkwrap.json from the package. 1.0.2 added
per-thinking-level sampling parameters. 1.0.3 renamed the Azure provider from
azure-openai-responses to azure and added Foundry Chat Completions. 1.0.4 added *
patterns to --tools and --exclude-tools, and a --no-mcp flag.
1.1.0 and 1.2.0
1.1.0 added program-status reporting over OSC 7501, so terminals and dashboards can see
working, blocked, done, or failed. It also brought Claude Haiku 5.5, +name and -name
entries to adjust the default tool set, GPT-6 Luna as a classifier, and native llama.cpp
decision models. 1.2.0, the current release, added per-key OpenRouter model lists,
published JSON schemas for settings, models, keybindings and themes, remote-session
clipboard over OSC 52, and before_agent_start for extension-triggered runs. It also
removed the unreleased experimental server, client, and plugin stack.
What a bump would touch
The facade embeds Pi's SDK, so the items that matter are the ones that move SDK or event semantics.
- 1.2.0 turned
before_agent_startinto a union keyed onmessageType, made it fire fortriggerTurnruns as well, and made the session count as busy while a run starts, soctx.isIdle()is false andpi.sendMessage()queues instead of starting a second run. It also changed thepi mcp list --jsonshape. - 0.99.0 changed the
bashandpowershellstructured result shape to hold up to 1 MiB of output plustruncatedandfull_output_path, and renamed built-in extensions and tools tobuiltin:<name>. - 1.0.1 removed
npm-shrinkwrap.json, so npm installs no longer pin transitive dependencies; reproducible installs now go through the pi.dev installer. - 1.0.3 renamed the Azure provider, which is a config-level break.
The facade keeps a fact card for every upstream behavior it relies on, and the rule is to re-verify each entry and run a full-chain smoke before the pin moves. A bump to 1.2.0 is that whole exercise, so we schedule it deliberately rather than opportunistically.
Status
DAC still runs Pi 0.87.1 in production. This note is the map for the eventual bump. When the facade moves to a new pin, that version gets its own post in the series.