Pi Has a New Home at Earendil
Pi now lives under the Earendil Works GitHub and npm organizations. The old @mariozechner packages are deprecated, and 0.74.0 is the first release from the new home. Read more.
Release notes, project updates, and announcements from the Pi team.
Pi now lives under the Earendil Works GitHub and npm organizations. The old @mariozechner packages are deprecated, and 0.74.0 is the first release from the new home. Read more.
New version of pi. Download from npm or view release on GitHub.
pi update --self now supports the upcoming package rename from @mariozechner/pi-coding-agent to @earendil-works/pi-coding-agent. After the new package is published, existing global installs can update through the normal self-update flow; pi will uninstall the old global package and install the package name returned by the version check endpoint./login, enabling provider-specific interactive authentication flows. See Providers.models.json parsing: models.json now allows comments and trailing commas, making custom provider and model configuration easier to maintain. See Providers and Custom Providers.pi update --self to honor the active package name returned by the Pi version check endpoint, defaulting to the current package when omitted and uninstalling the old global package before installing a renamed package.jiti 2.7 instead of the @mariozechner/jiti fork (#4244 by @pi0).models.json parsing to allow comments and trailing commas (#4162 by @julien-c).New version of pi. Download from npm or view release on GitHub.
xiaomi now uses API billing, with separate xiaomi-token-plan-{cn,ams,sgp} providers. See docs/providers.md#api-keys and README.md#providers--models. (#4112 by @Phoen1xCode)read output for Pi docs, context files, and skills is collapsed by default and shows selected line ranges.xiaomi provider from Token Plan AMS to Xiaomi's API billing endpoint, and renamed its /login display from "Xiaomi MiMo Token Plan" to "Xiaomi MiMo". XIAOMI_API_KEY now refers to the API billing key from platform.xiaomimimo.com. Users on Token Plan should switch to the appropriate xiaomi-token-plan-* provider and set the corresponding env var (#4112 by @Phoen1xCode)./login: xiaomi-token-plan-cn (XIAOMI_TOKEN_PLAN_CN_API_KEY), xiaomi-token-plan-ams (XIAOMI_TOKEN_PLAN_AMS_API_KEY), xiaomi-token-plan-sgp (XIAOMI_TOKEN_PLAN_SGP_API_KEY). Each defaults to mimo-v2.5-pro (#4112 by @Phoen1xCode).read tool rendering to collapse Pi documentation, AGENTS/CLAUDE context files, and SKILL.md contents by default in interactive output.New version of pi. Download from npm or view release on GitHub.
XIAOMI_API_KEY auth, default model (mimo-v2.5-pro), and /login display. See docs/providers.md. (#4005 by @Phoen1xCode).thinkingLevelMap, replacing the old reasoningEffortMap. See docs/models.md#thinking-level-map and docs/custom-provider.md. (#3208).pi.registerProvider() now respects per-model baseUrl settings. See docs/custom-provider.md. (#4063).shouldStopAfterTurn. See packages/agent/README.md.pi now correctly identifies and applies available updates. (#3942, #3980, #3922).compat.reasoningEffortMap in models.json and pi.registerProvider() model definitions with model-level thinkingLevelMap (#3208). Migration: move old mappings from compat.reasoningEffortMap to thinkingLevelMap. Use string values for provider-specific thinking values and null for unsupported pi levels that should be hidden and skipped by cycling. See docs/models.md#thinking-level-map and docs/custom-provider.md.XIAOMI_API_KEY, default model resolution, /login display support, and provider documentation (#4005 by @Phoen1xCode).thinkingLevelMap support in models.json and pi.registerProvider(), allowing models to expose only the thinking levels they actually support (#3208).shouldStopAfterTurn agent loop callback for post-turn stop control, inherited from @mariozechner/pi-agent-core. See packages/agent/README.md.New version of pi. Download from npm or view release on GitHub.
websocket-cached to the transport setting options for the OpenAI Codex provider used with ChatGPT subscription auth. This keeps the same WebSocket open for a session and, after the first request, sends only the new conversation items instead of resending the full chat history when possible.New version of pi. Download from npm or view release on GitHub.
CLOUDFLARE_API_KEY/CLOUDFLARE_ACCOUNT_ID/CLOUDFLARE_GATEWAY_ID, default model resolution, and /login display. See docs/providers.md#cloudflare-ai-gateway. (#3856 by @mchenco).MOONSHOT_API_KEY, default model resolution, and /login display.message_end messages, wrap custom editor factories via ctx.ui.getEditorComponent(), and observe thinking level changes. See docs/extensions.md#message_start--message_update--message_end, docs/extensions.md#widgets-status-and-footer, and docs/extensions.md#thinking_level_select.PI_CODING_AGENT_SESSION_DIR configures session storage from the environment. See docs/usage.md#environment-variables.CLOUDFLARE_API_KEY/CLOUDFLARE_ACCOUNT_ID/CLOUDFLARE_GATEWAY_ID setup, default model resolution, /login display support, and provider documentation (#3856 by @mchenco).MOONSHOT_API_KEY setup, default model resolution, and /login display support.@mariozechner/pi-ai (#4009 by @technocidal).PI_CODING_AGENT_SESSION_DIR as an environment equivalent to --session-dir (#4027).message_end extension result support for replacing finalized messages, enabling extensions to override assistant usage cost (#3982).name support to pi.registerProvider() so extension-registered providers can show a friendly name in /login (#3956).ctx.ui.getEditorComponent() so extensions can wrap the currently configured custom editor factory (#3935).thinking_level_select extension event for observing thinking level changes (#3888).New version of pi. Download from npm or view release on GitHub.
CLOUDFLARE_API_KEY/CLOUDFLARE_ACCOUNT_ID setup. See docs/providers.md#api-keys. (#3851 by @mchenco)pi.dev and identify Pi with a pi/<version> user agent. See docs/packages.md. (#3877 by @mitsuhiko)pi/<version> user agent (#3877 by @mitsuhiko).New version of pi. Download from npm or view release on GitHub.
pi update can now update pi itself in addition to installed pi packages. See docs/packages.md. (#3680 by @mitsuhiko)warnings.anthropicExtraUsage in /settings. See docs/settings.md. (#3808)ctx.ui.setWorkingVisible(), allowing extensions to hide the built-in loader row and render custom working state. See docs/extensions.md and examples/extensions/border-status-editor.ts. (#3674)pi update support for updating pi itself in addition to installed pi packages (#3680 by @mitsuhiko).warnings.anthropicExtraUsage and a /settings warnings submenu to suppress the Anthropic extra usage billing warning (#3808)ctx.ui.setWorkingVisible() so extensions can hide the built-in interactive working loader row without reserving layout space, plus a border-status editor example that moves working state into a custom editor border (#3674)New version of pi. Download from npm or view release on GitHub.
DEEPSEEK_API_KEY authentication. See README.md#providers--models and docs/providers.md#api-keys.retry.provider.{timeoutMs,maxRetries,maxRetryDelayMs}, useful for long-running local inference and provider SDK retry behavior. See docs/settings.md#retry. (#3627)New version of pi. Download from npm or view release on GitHub.
/login provider selector now supports fuzzy search/filtering, making it faster to find providers when many are configured. See docs/providers.md. (#3572 by @mitsuhiko)openai-codex/gpt-5.5 is available as a model option, including xhigh reasoning support and corrected priority-tier pricing.terminal.showTerminalProgress in /settings (#3588)--no-builtin-tools / createAgentSession({ noTools: "builtin" }) now correctly disables only built-in tools while keeping extension tools active. See docs/extensions.md and README.md (#3592)terminal.showTerminalProgress to true in /settings to re-enable (#3588)/login so provider entries can show when auth comes from --api-key, an environment variable, or custom provider fallback without exposing secrets.pi/command ctx and use withSession for post-replacement work.New version of pi. Download from npm or view release on GitHub.
ctx.ui.addAutocompleteProvider(...), allowing extensions to layer custom completion logic on top of built-in slash and path completion. See docs/extensions.md#autocomplete-providers and examples/extensions/github-issue-autocomplete.ts.terminate: true, allowing custom tools to end on a final tool call without paying for an automatic follow-up LLM turn. See docs/extensions.md and examples/extensions/structured-output.ts.@sinclair/typebox 0.34.x to typebox 1.x. New extensions, SDK integrations, and pi packages should depend on and import from typebox. Legacy extension loading still aliases the root @sinclair/typebox package, but @sinclair/typebox/compiler is no longer shimmed. This migration also picks up the new @mariozechner/pi-ai TypeBox-native validator path, so tool argument validation now works in eval-restricted runtimes such as Cloudflare Workers instead of being skipped (#3112)ctx.newSession(), ctx.fork(), and ctx.switchSession(). Old pi and command ctx references now throw instead of silently targeting the replaced session. Migration: if code needs to keep working in the replacement session after one of those calls, pass withSession to that same method and do the post-switch work there. In practice, move post-switch pi.sendUserMessage(), pi.sendMessage(), and command-ctx/session-manager access into withSession, and use only the ReplacedSessionContext passed to that callback for session-bound operations. Footguns: withSession runs after the old extension instance has already received session_shutdown, old cleanup may already have invalidated captured state, captured old pi / old command ctx are stale, and previously extracted raw objects such as const sm = ctx.sessionManager remain the caller's responsibility and must not be reused after the switch.terminate: true, allowing custom tools to end the current tool batch without an automatic follow-up LLM call, plus a structured-output.ts extension example and extension docs showing the pattern (#3525)ctx.ui.addAutocompleteProvider(...) for stacking extension autocomplete providers on top of the built-in slash/path provider, plus a github-issue-autocomplete.ts example and extension docs (#2983)New version of pi. Download from npm or view release on GitHub.
FIREWORKS_API_KEY auth. See README.md#providers--models and docs/providers.md.terminal.imageWidthCells in /settings. See docs/settings.md#terminal--images.FIREWORKS_API_KEY setup/docs and the default Fireworks model accounts/fireworks/models/kimi-k2p6 (#3519)New version of pi. Download from npm or view release on GitHub.
ctx.ui.setWorkingIndicator(), including animated, static, and hidden indicators. See docs/tui.md#working-indicator, docs/extensions.md, and examples/extensions/working-indicator.ts.before_agent_start now exposes systemPromptOptions (BuildSystemPromptOptions) so extensions can inspect the structured system-prompt inputs without re-discovering resources. See docs/extensions.md#before_agent_start and examples/extensions/prompt-customizer.ts./clone duplicates the current active branch into a new session, while extensions can choose whether to fork before or at an entry via ctx.fork(..., { position }). See README.md, docs/extensions.md, and docs/session.md.createAgentSession({ tools }) now expects string[] names such as "read" and "bash" instead of Tool[], --tools now allowlists built-in, extension, and custom tools by name, and --no-tools now disables all tools by default rather than only built-ins. Migrate SDK code from tools: [readTool, bashTool] to tools: ["read", "bash"] (#2835, #3452)@mariozechner/pi-coding-agent, including readTool, bashTool, editTool, writeTool, grepTool, findTool, lsTool, readOnlyTools, codingTools, and the corresponding *ToolDefinition values. Use the explicit factory exports instead, for example createReadTool(cwd), createBashTool(cwd), createCodingTools(cwd), and createReadToolDefinition(cwd) (#3452)process.cwd() / default agent-dir fallback behavior from public resource helpers. DefaultResourceLoader, loadProjectContextFiles(), and loadSkills() now require explicit cwd/agent-dir style inputs, and exported system-prompt option types now require an explicit cwd. Pass the session or project cwd explicitly instead of relying on process-global defaults (#3452)ctx.ui.setWorkingIndicator(), including custom animated frames, static indicators, hidden indicators, a new working-indicator.ts example extension, and updated extension/TUI/RPC docs (#3413)systemPromptOptions (BuildSystemPromptOptions) to before_agent_start extension events, so extensions can inspect the structured inputs used to build the current system prompt (#3473 by @dljsjr)/clone to duplicate the current active branch into a new session, while keeping /fork focused on forking from a previous user message (#2962)ctx.fork() support for position: "before" | "at" so extensions and integrations can branch before a user message or duplicate the current point in the conversation; the interactive clone/fork UX builds on that runtime support (#3431 by @mitsuhiko)keybindings.json (#3343 by @mpazik)PI_OAUTH_CALLBACK_HOST support for built-in OAuth login flows, allowing local callback servers used by pi auth to bind to a custom interface instead of hardcoded 127.0.0.1 (#3409 by @Michaelliv)reason and targetSessionFile metadata to session_shutdown extension events, so extensions can distinguish quit, reload, new-session, resume, and fork teardown paths (#2863)pi update to batch npm package updates per scope and run git package updates with bounded parallelism, reducing multi-package update time while preserving skip behavior for pinned and already-current packages (#2980)maxTokens when model token limits are unknown and to omit temperature when unset, letting Bedrock use provider defaults and avoid unnecessary TPM quota reservation (#3400 by @wirjo)New version of pi. Download from npm or view release on GitHub.
AWS_BEARER_TOKEN_BEDROCK, enabling Converse API access without local SigV4 credentials. See docs/providers.md#amazon-bedrock.New version of pi. Download from npm or view release on GitHub.
argument-hint frontmatter field that renders before the description in the / autocomplete dropdown, using <angle> for required and [square] for optional arguments. See docs/prompt-templates.md#argument-hints.after_provider_response extension hook lets extensions inspect provider HTTP status codes and headers immediately after each response is received and before stream consumption begins. See docs/extensions.md.Ctrl+O to toggle the expanded listing.argument-hint frontmatter field for prompt templates, displayed before the description in the autocomplete dropdown (#2780 by @andresvi94)after_provider_response extension hook so extensions can inspect provider HTTP status codes and headers after each provider response is received and before stream consumption begins (#3128)Ctrl+O to toggle the expanded listing (#3267)hyperlinks: false for unknown terminals and force it off under tmux/screen (including nested sessions), preventing markdown link URLs from disappearing on terminals that silently swallow OSC 8 sequences (#3248)New version of pi. Download from npm or view release on GitHub.
xhigh reasoning to provider-supported effort values (#3286 by @markusylisiurunen)Shift+Enter regressions by reverting the Zellij-specific Kitty keyboard query bypass and restoring the previous keyboard negotiation behavior (#3259)