unstale

npm / @earendil-works/pi-coding-agent

@earendil-works/pi-coding-agent

What changed in @earendil-works/pi-coding-agent 0.78 to 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-19.

25 breaking5 security14 new APIs and options1 performance7 behavior and defaults3 tooling45 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli on npm

@earendil-works/pi-coding-agent 196 changes

Breaking changes 25

  • The unsupported off thinking level is no longer offered.

    1.3.0release notes

  • Uses OpenAI Chat Completions at the Kimi coding endpoint; models.json base URL overrides must include /v1.

    1.3.0release notes

  • Pi's Node.js is now only a fallback on PATH, so bash tool shells use the user's node/npm.

    1.3.0release notes

  • Moved to the opencode.ai/inference endpoints; OpenCode Go also gains Google Generative AI support.

    1.3.0release notes

  • Malformed final JSON arguments now fail validation and show the model the raw arguments instead of silently running with partial fields.

    1.3.0release notes

  • The models now expose only the off and high thinking levels, avoiding 400 errors at minimal.

    1.3.0release notes

  • An abort requested while a run is starting now aborts the run once it starts.

    1.2.0release notes

  • The event also fires for idle runs started with pi.sendMessage(..., { triggerTurn: true }); handlers receive a user or custom event, and handlers limited to prompts must check event.messageType === "user".

    1.2.0release notes

  • The event is now a union: user events carry prompt and images, while custom events carry the starting message and no prompt.

    1.2.0release notes

  • The unpublished experimental ./client export was removed.

    1.2.0release notes

  • Returns false while a run is starting, including during before_agent_start handlers.

    1.2.0release notes

  • The package used by the unreleased experimental stack was removed and is no longer released.

    1.2.0release notes

  • The package used by the unreleased experimental stack was removed and is no longer released.

    1.2.0release notes

  • The package used by the unreleased experimental stack was removed and is no longer released.

    1.2.0release notes

  • The unpublished experimental ./experimental/plugin export was removed.

    1.2.0release notes

  • OAuth sign-in now fails with an issuer mismatch when an authorization response includes an iss parameter that cannot be checked because server metadata was not discovered.

    1.2.0release notes

  • A // @options: line that is not the first script line now causes an error before execution instead of being silently ignored, preventing runs without the requested timeout.

    1.2.0release notes

  • Print mode now prints partial text, warns on stderr, and exits 1 when the final response is cut off at the model's output token limit.

    1.2.0release notes

  • The JSON output reports resources: true for servers offering resources instead of resource and resource-template counts.

    1.2.0release notes

  • When a run is starting, the session counts as busy and pi.sendMessage() queues into that run instead of trying to start a second run.

    1.2.0release notes

  • Calls made while a run is starting now require deliverAs.

    1.2.0release notes

  • MCP tool calls now handle structured content that is an array, null, or primitive; codemode types it as unknown when no output schema is declared.

    1.2.0release notes

  • The theme schema URL changed, and themes loaded at startup now receive the same schema validation as themes reloaded later.

    1.2.0release notes

  • The timeout now limits the whole sign-in, including requests to the authorization server, rather than only the wait for the browser.

    1.1.0release notes

  • Julia-1, Laya, Kev, lev, and OpenJev served by llama.cpp 0.6.0 or later run natively as classifiers rather than chat models.

    1.1.0release notes

Security 1

  • Models disabled by an organization owner are no longer listed.

    1.1.0release notes

New APIs and options 14

  • Choose automatic, GitHub gist, or Radius uploads for /share.

    1.3.0release notes

  • Tool namespaces can define aliases, which codemode namespace descriptions and searchTools() namespace matching recognize; MCP namespaces use the server name.

    1.2.0release notes

  • Pi lists only chat models available to the configured OpenRouter key, with that key's model limits and prices, and saves the list for offline use.

    1.2.0release notes

  • Setting PI_CLIPBOARD_OSC52=1 sends copied text to the terminal after the local clipboard write, enabling copies to reach remote clients when Pi cannot detect the remote session.

    1.2.0release notes

  • Tool definitions can declare which other tools a call may reach, allowing the MCP extension to wait for needed servers and determine whether replacement tools can reach MCP tools.

    1.2.0release notes

  • Published schemas for settings, models, keybindings, and themes can be referenced from configuration files for editor validation and completion.

    1.2.0release notes

  • agent_settled session, extension, and JSON events include aborted so integrations can distinguish a cancelled run from a finished one.

    1.1.0release notes

  • Claude Haiku 5.5 is available with adaptive thinking up to xhigh/max effort and prompt caching on Bedrock.

    1.1.0release notes

  • OpenAI's GPT-6 Luna is available as a classifier model through the Decisions API.

    1.1.0release notes

  • Tool render context and tool_execution_end extension events include the recorded execution time of a final tool result.

    1.1.0release notes

  • The codemode classification context accepts images for classifiers that support them.

    1.1.0release notes

  • Pi reports whether it is working, blocked on a dialog or login, done, or failed to terminals and dashboards that support OSC 7501.

    1.1.0release notes

  • Overrides detection of program status reporting with a value of 1 or 0.

    1.1.0release notes

  • Entries such as +codemode and -write adjust the default tool selection instead of replacing it.

    1.1.0release notes

Performance 1

  • Joining output items is no longer quadratic, preventing long process-blocking delays for scripts with many text() calls.

    1.2.0release notes

Behavior and default changes 7

  • K3, K3-256K, and Kimi For Coding accept tools added mid-conversation without invalidating the prompt cache.

    1.3.0release notes

  • Thinking blocks from earlier assistant messages produced by another model are dropped instead of being sent as plain text.

    1.3.0release notes

  • Changing the thinking level mid-session with an API key keeps the prompt cache.

    1.3.0release notes

  • Conversation serialization for compaction, branch summaries, and bug reports omits thinking blocks to avoid oversized summarization requests.

    1.2.0release notes

  • When enabled, the setting uses only the terminal cursor instead of also drawing Pi's reverse-video cursor.

    1.2.0release notes

  • Reusable theme colors should be defined under vars when updating themes for the published schema.

    1.2.0release notes

  • The tool render context includes outputPad, which now also applies to ! command output, tool output, and summary blocks.

    1.1.0release notes

Tooling 3

  • Tool declarations expose input constraints as @ tags on property comments, so scripts can see constraints without repeating them in descriptions.

    1.2.0release notes

  • Codemode tool rows show elapsed time while a script runs and total time when it finishes.

    1.2.0release notes

  • Codemode declarations spell out MCP result fields instead of referring to an undefined CallToolResult<T> type, and no longer include shared MCP types.

    1.2.0release notes

Fixes and other changes 45

  • Requests with images in an error tool result no longer fail with a 400; images are sent after the turn's tool results.

    1.3.0release notes

  • Retries now trigger for gateway upstream-stream forwarding errors and temporary service-unavailable errors.

    1.3.0release notes

  • Stopping a script or reaching its deadline no longer waits for a non-interruptible built-in to return on Bun.

    1.3.0release notes

  • Live workers are limited to two across sessions, with cancelled workers counted until they exit.

    1.3.0release notes

  • Calling done() on a custom overlay closes that overlay rather than the topmost overlay.

    1.3.0release notes

  • Adds a model for each provider that offers it and warns when the match is ambiguous.

    1.3.0release notes

  • Vertex requests no longer fail with an unsupported thinking-budget error, and the thinking level is honored on the Gemini API.

    1.3.0release notes

  • When several providers offer a model match, Pi prefers the provider with credentials and otherwise reports the ambiguity.

    1.3.0release notes

  • Adds a model for each provider that offers it and warns when the match is ambiguous.

    1.3.0release notes

  • Uses a 500K context window instead of 272K.

    1.3.0release notes

  • Thinking no longer appears after the answer when a proxy sends reasoning and content in the same stream chunk.

    1.3.0release notes

  • Uses the Anthropic Messages API for MiniMax M2.7, fixing the unsupported protocol error.

    1.3.0release notes

  • Empty quoted arguments are preserved, so later positional arguments are not shifted and positional defaults can apply.

    1.3.0release notes

  • Fixed labels for numeric-string or null arguments in the TUI, session tree, and HTML exports.

    1.3.0release notes

  • Resume restores the session's active tools, with --tools +name/-name entries applied on top unless tool selection is explicit.

    1.3.0release notes

  • Parsing no longer drops fields when a string contains an invalid Unicode escape.

    1.3.0release notes

  • A symlinked AGENTS.md in a git worktree nested inside its main repository no longer prevents project context from loading.

    1.2.0release notes

  • When Anthropic rejects strict tools due to grammar size, tool count, or union limits, Pi retries once with preferred tools non-strict.

    1.2.0release notes

  • On Windows, Pi briefly retries reads or writes when a previous lock folder is still being deleted, rather than failing immediately with EPERM.

    1.2.0release notes

  • Codemode no longer fails with a broken bridge when Pi runs under node --watch on Node 24 or 26.

    1.2.0release notes

  • Tilde expansion now works in !pattern, +path, and -path entries for the extensions, skills, prompts, and themes settings.

    1.2.0release notes

  • Pi no longer lists resources while connecting, so servers with resources can register tools without waiting for resource enumeration.

    1.2.0release notes

  • Cancelled or timed-out MCP calls waiting for an OAuth refresh are no longer sent to the server after the refresh finishes.

    1.2.0release notes

  • The request timeout now applies only while waiting for response headers, preventing streams from being aborted mid-generation.

    1.2.0release notes

  • Negative placeholder prices from OpenRouter are treated as zero, avoiding extreme negative cost displays for router models.

    1.2.0release notes

  • The timeout limits the entire sign-in, not only the wait for the browser.

    1.2.0release notes

  • Runs started with pi.sendMessage(..., { triggerTurn: true }) no longer remove sections added by before_agent_start after the first tool call.

    1.2.0release notes

  • A tool declaring an output schema resolves with its value on failure too, rather than rejecting every failed tool call.

    1.2.0release notes

  • “The upstream provider returned an error” is now retried as a transient provider error.

    1.2.0release notes

  • Login falls back to a free loopback port when port 53692 is reserved or in use.

    1.1.0release notes

  • Clipboard paste works in Termux, and failed copies include the Termux:API install hint.

    1.1.0release notes

  • Text outputs are separated with numbered markers, and console calls appear after other output in one block with one line per call.

    1.1.0release notes

  • Input is estimated at 3.5 characters per token instead of 4 when calculating output limits, reducing context-limit request failures.

    1.1.0release notes

  • Standalone binaries load .env, .env.local, and .env.development from the launch directory into Pi's environment.

    1.1.0release notes

  • Mistral responses ending with finish_reason: error are retried.

    1.1.0release notes

  • The manager opens without waiting for all servers to connect and remains usable while servers are enabled, reconnected, or disabled.

    1.1.0release notes

  • Sign-ins can be cancelled with Esc at every step, session shutdown aborts a running sign-in, and authorization-server requests time out after 15 seconds.

    1.1.0release notes

  • Model headers now override the originator and User-Agent headers of Codex requests.

    1.1.0release notes

  • Images are no longer dropped as “could not be resized” on Node 24.19+ and 26.x because of Node messages on the image resize worker channel.

    1.1.0release notes

  • Bedrock OpenAI models now honor the configured thinking level instead of always using Bedrock's default reasoning effort.

    1.1.0release notes

  • Managed installs now keep only the new release and the release it updated from.

    1.1.0release notes

  • The codemode description now marks searchTools(), describeTool(), and describeNamespace() as async, preventing models from serializing unawaited promises as {}.

    1.1.0release notes

  • Provider busy errors are retried rather than ending the turn.

    1.1.0release notes

  • Costs no longer undercount long prompts on models with prompt-length pricing tiers across the listed providers.

    1.1.0release notes

  • Bash and PowerShell results retain Took after session reloads, and live results show recorded execution time instead of wall-clock steps.

    1.1.0release notes

@earendil-works/pi-coding-agent 0.791 changes

Security 1

@earendil-works/pi-coding-agent 0.783 changes

Security 3

  • Pi Agent: Potential XSS in HTML session exports via Markdown URL sanitization bypass

    0.78.1security advisory

  • Pi Agent: Predictable temporary extension install paths allow local privilege escalation on shared Linux hosts

    0.78.1security advisory

  • Pi Agent: Race condition in Pi auth.json writes could expose stored credentials

    0.78.1security advisory