Telemetry
Interactive mode now sends a lightweight anonymous install/update telemetry ping to https://pi.dev/install?version=x.y.z after it writes lastChangelogVersion in settings.json.
Why this exists:
- Pi needs a reliable per-version usage signal to understand whether releases are being adopted and to help justify funding continued development.
- npm download counts are not a reliable proxy for actual Pi usage.
How it works:
- It only runs in interactive mode.
- It does not run in RPC mode, print mode, JSON mode, or SDK mode.
- On a fresh interactive install, Pi writes
lastChangelogVersion, then sends the ping. - On later interactive startups, if the local changelog contains entries newer than the previously stored
lastChangelogVersion, Pi writes the newlastChangelogVersion, then sends the ping. - The request is fire-and-forget. Startup does not wait for it, and any errors are ignored.
What data is collected:
- Only the Pi version in the request path, for example
https://pi.dev/install?version=0.67.1. - The server stores only aggregate per-version counters such as
{ "0.67.1": 3 }. - It does not store IP addresses, client identifiers, prompts, paths, models, auth state, or any other per-user data. It literally only increments a counter for that version.
How to disable it:
/settings→ disableInstall telemetrysettings.json→ setenableInstallTelemetrytofalsePI_OFFLINE=1PI_TELEMETRY=0
New Features
- Full
openRouterRoutingsupport inmodels.json, including fallbacks, parameter requirements, data collection, ZDR, ignore lists, quantizations, provider sorting, max price, and preferred throughput and latency constraints. See docs/models.md. PI_CODING_AGENT=trueenvironment variable set at startup so subprocesses can detect they are running inside the coding agent.
Added
- Added full
openRouterRoutingfield support inmodels.json, including fallbacks, parameter requirements, data collection, ZDR, ignore lists, quantizations, provider sorting, max price, and preferred throughput and latency constraints (#2904 by @zmberber) - Set
PI_CODING_AGENT=trueenvironment variable at startup so sub-processes can detect they are running inside the coding agent (#2868)
Fixed
- Fixed interactive changelog rendering for the telemetry notes by moving the section under a
### Telemetryheading, so startup shows the full release notes instead of only the version header. - Updated
antigravity-image-gen.tsexample extension to use User-Agent version1.21.9(#2901 by @aadishv) - Bumped default Antigravity User-Agent version to
1.21.9(#2901 by @aadishv) - Fixed Gemma 4 thinking level mapping to route between
MINIMALandHIGH, and map Pi reasoning levels to the model's supported thinking levels (#2903 by @aadishv) - Fixed Gemini 2.5 Flash Lite minimal thinking budget to use the model's supported 512-token minimum instead of the regular Flash 128-token minimum, avoiding invalid thinking budget errors (#2861 by @JasonOA888)
- Fixed OpenAI Codex Responses requests to forward configured
serviceTiervalues, restoring service-tier selection for Codex sessions (#2996 by @markusylisiurunen) - Fixed
Container.render()stack overflow on long sessions by replacingArray.push(...spread)with a loop-based push, preventingRangeError: Maximum call stack size exceededwhen child output exceeds the V8 call stack argument limit (#2651) - Fixed editor sticky-column tracking around paste markers so vertical cursor navigation restores the column from before the cursor entered a paste marker instead of jumping inside or past pasted content (#3092 by @Perlence)
- Fixed queued messages typed during
/treebranch summarization to flush automatically after navigation completes, so they no longer remain stuck in the steering queue (#3091 by @Perlence)