Repository navigation
chore(deps): update dependency @earendil-works/pi-coding-agent to v0.99.2 - #14
Merged
furedea-agent[bot] merged 3 commits intoOct 17, 2026
Merged
Conversation
renovate
Bot
force-pushed
the
renovate/earendil-works-pi-coding-agent-0.x
branch
from
October 7, 2026 00:33
6ae169c to
1a81cc4
Compare
renovate
Bot
force-pushed
the
renovate/earendil-works-pi-coding-agent-0.x
branch
from
October 7, 2026 20:53
1a81cc4 to
4411060
Compare
renovate
Bot
force-pushed
the
renovate/earendil-works-pi-coding-agent-0.x
branch
from
October 17, 2026 08:32
4411060 to
57a9f20
Compare
renovate
Bot
force-pushed
the
renovate/earendil-works-pi-coding-agent-0.x
branch
from
October 17, 2026 08:36
57a9f20 to
ac34db0
Compare
Pi 0.99 adds a deferred stop reason, which the trace records as aborted like other non-final turns. The smoke test now honors tool results that report isError instead of throwing, and calls emitBeforeAgentStart with its new three-argument signature. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pi 0.99.2 pins undici 8.10.2, which has no known advisory, so the override no longer matches any package. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
furedea-agent
Bot
deleted the
renovate/earendil-works-pi-coding-agent-0.x
branch
October 17, 2026 08:47
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
0.83.0→0.99.2Release Notes
earendil-works/pi (@earendil-works/pi-coding-agent)
v0.99.2Compare Source
New Features
codemodeexposure are no longer listed in thecodemodedescription and no longer block the first prompt. They appear in a short system prompt section, and scripts find their tools withsearchTools()anddescribeNamespace(). See Control tool exposure.oauth.clientNamefor servers that only accept known OAuth clients, and"auth": { "provider": "<provider>" }to authenticate HTTP servers with a provider's/logintoken. See Authenticate with OAuth./reloadenables tools newly added to thedefaultToolssetting. See Tools.Added
descriptionfield for MCP servers (pi mcp add --description), shown with the server in the system prompt and used to rank its tools in tool search, and adescribeNamespace(name)codemode helper that returns a namespace's instructions and tool names.describeNamespace()andsearchTools()accept a namespace asmcp__dev-radius,mcp__dev_radius,dev-radius, ordev_radius.oauth.clientNamesetting for MCP servers (pi mcp add --oauth-client-name) to change the client name sent during OAuth client registration, for servers that only accept known clients (#10226)."auth": { "provider": "<provider>" }for HTTP MCP servers to send a provider's current/logintoken as the bearer token instead of using MCP OAuth. The token is read on every request, so provider refreshes apply. Only allowed in the globalmcp.jsonand from extensions, and requires https except on loopback hosts.ANTHROPIC_FEDERATION_RULE_ID,ANTHROPIC_ORGANIZATION_ID, andANTHROPIC_IDENTITY_TOKEN_FILEenvironment variables (see Providers) (#10177, #10242 by @philfreo)./reloadnow enables tools newly added to thedefaultToolssetting. Tools removed from it stay enabled, tools turned off during the session stay off unless newly added, and--tools,--no-tools, and--no-builtin-toolsstill override the setting (#10245).Changed
codemodeexposure no longer appear in thecodemodedescription; scripts find them withsearchTools().codemode-deferredis now an alias forcodemode. Usedirectexposure for tools the model should see without searching (#10212).codemodedescription no longer includes deferred tools, tool counts, or MCP server instructions, so it no longer changes when MCP servers connect or change their tools. Thetool_searchdescription no longer lists the servers whose tools it can load, for the same reason. Servers are listed instead in anmcp_serverssystem prompt section with a one-line summary, updated at the start of each prompt; a changed section is appended to the conversation. Scripts read server instructions withdescribeNamespace()(#10212).directtools. They connect in the background and are waited for when a codemode script names them, a script searches tools, ortool_searchruns (#10212).Fixed
/mcpsign-in URL not being clickable when it wraps across lines, by emitting it as a terminal hyperlink with aCmd/Ctrl+click to openline like/login(#10186).image()accepting malformed base64 data or unsupported image types, which persisted an invalid image block that made every later provider request fail with HTTP 400 (#10215).built-in-tool-renderer.tsandminimal-mode.tsextension examples removing the built-in tools' summaries and guidelines from the system prompt (#10072, #10193 by @christianklotz).Prompt exceeds max lengtherrors (#10208).minimum/maximum; such tools are now sent non-strict (#9953).Retry-Afterheader contains an unparseable date; they now use exponential backoff (#9571)./; the extension now fails to load with an error instead (#10054).codemodeand MCP tool results filling the screen when the output is one long line, such as minified JSON. Like bash output, the preview is now limited to wrapped lines instead of logical lines.codemode.mode: "only"listingread,bash,edit, andwritein the system prompt's tool list although requests only declarecodemode(#10192).-and_, such asread-fileandread_file. Like in Codex, MCP tool and namespace names now replace-with_(mcp__my-server__xis nowmcp__my_server__x), colliding tools of a server all get a hash suffix, and server names that differ only in-and_are rejected (#10239).v0.99.1Compare Source
New Features
Added
gpt-6.1-sol) to the OpenAI, Azure OpenAI Responses, and OpenAI Codex providers.Changed
gpt-6.1-sol).Fixed
/loginwith OpenAI failing in the bundled release with a missingopenai-chatgpt.jsmodule error.v0.99.0Compare Source
New Features
/login openai. See Authenticate interactively.Added
codemodetool runs model-written JavaScript in a QuickJS sandbox that calls pi's tools; enable it withdefaultToolsor--toolsand configure it withcodemode.modeandcodemode.inlineBudget.tool_searchfinds tools that are not declared to the model and declares them. MCP servers over stdio or streamable HTTP, with OAuth, come frommcp.json(global, or per project once trusted) orpi.registerMcpServer()and are managed with/mcpandpi mcp add|remove|list|login|logout. See MCP Servers and Enable codemode (#10040).exposure(direct,model-only,codemode,deferred, orhidden),namespace,annotations,outputSchemawithstructuredContent,isErrorresults,prepareLoadout(), andctx.executeTool()for nested tool calls, which emit events withparentToolCallIdand are recorded as boundednestedCallson the calling tool's result. See Tool exposure.pi.registerVirtualModel()and pick a physical model and thinking level for each request. The footer shows the routed model,/sessionlists cost per physical model, andexamples/extensions/jev-router.tsroutes with the Jev classifier. See Virtual Models./login, which uses a ChatGPT subscription with the OpenAI API. Pi stores a stabledeviceIdin the global settings for this login and omits it from bug reports.systemtheme, now the default, which derives pi's colors from the terminal's reported foreground, background, and ANSI palette and rebuilds them when the terminal switches between light and dark. See Use your terminal's colors.#rgb,oklch(), andokhsl()colors and an optionalappearancefield to theme files, andtheme.style(),theme.colors, andtheme.appearancefor extensions. See Themes and TUI.fullscreenWheelScrollLinessetting and/settingsentry for fullscreen mouse-wheel scrolling. The default"auto"accelerates fast wheel spins outside local macOS terminals (#9758).prompt,steer, andfollow_upresponses,AgentSession.steer()/followUp(), andRpcClient.prompt()/steer()/followUp();RpcClient.prompt()also acceptsstreamingBehavior(#9098, #9803).ModelRuntime:generateImages()with runtime-resolved auth (stored credentials, OAuth, runtime API keys,models.jsonheaders), plusgetModelsOfType(),getModelOfType(),getAvailableOfType(),getAllModels(), andgetAllAvailable(). OpenRouter image models are listed under theopenrouterprovider and share its credential; an upstream ID can have separate chat and image entries.models.jsonproviders and extension registrations without a model list keep built-in image generation. Extension model lists can include discriminated chat, image, and classifier entries with operation implementations; when supplied, they replace the provider catalog across every operation. Chat-facing reads (getModels(),getAvailableSnapshot(), the model picker) are unchanged.ModelRuntime, includingclassify(), classifier model accessors, runtime-resolved authentication, and the built-in TypeSafejev-latestmodel.types=chat,image,classifierto pi.dev model catalog requests so remote refreshes overlay every supported model type; entries of unknown model types are ignored.provider_stream_eventextension event for observing parsed provider events before normalization, with an opt-in/debug-providerexample viewer (#9784, #9901 by @davidbrai).H) in HTML exports for custom messages markeddisplay: false. Messages remain hidden by default and can also be revealed from the sidebar (#8896, #10020 by @rwachtler).pi configto disable the built-inmcp,llama.cpp,codemode, andtool-searchextensions globally or per project, stored as-builtin:<name>in theextensionssetting. SDK inline extensions opt in withbuiltin: true.+nameand-nameentries to thedefaultToolssetting to add or remove tools without repeating the defaults, for example"defaultTools": ["+codemode"]. Project entries of this form apply on top of the user setting. Documented how to enablecodemodewithout MCP and how to use classifier models such as Jev from codemode scripts.models.classify()calls to the codemode tool result, so they count toward the session cost; the codemode result shows each call's cost.Changed
tsxwith Node's built-in type stripping for running from source (#9965).[Themes]section from the startup banner. Custom themes remain available in/settings, and theme conflicts are still reported.darkandlightthemes to the revised pi colors, written in OKHSL.COLORFGBG. The first-time setup no longer shows the detected appearance.TERM=*-directas truecolor.builtin:<name>(for examplebuiltin:mcpandbuiltin:read) in errors, diagnostics, RPC source info, and bug reports, instead of<inline:name>and<builtin:name>. Their slash commands no longer carry a[t]autocomplete tag.--no-extensionsalso disables the built-in extensions, including the llama.cpp provider. Load one explicitly with-e builtin:<name>, for examplepi -ne -e builtin:mcp.key=valuepairs on the title line when collapsed and onekey: valueline per argument when expanded. MCP calls are titledserver/tooland their results collapse to 5 lines.bashandpowershellstructured results, which codemode scripts receive, now hold up to 1 MiB of output instead of the model-facing 2000 lines or 50KB, and addtruncatedandfull_output_path. Longer output keeps its first and last 512 KiB. Empty output is""instead of(no output).Fixed
dependencies(#9863).-econtinuing to use the first downloaded commit after the ref changes (#9982).RpcClientskipping the next event listener when a listener unsubscribes while handling an event, which could makewaitForIdle()time out aftercollectEvents()(#9990).readcalls rendering as:1when models sendnullfor omittedoffsetandlimit(#9996).terminal.trueColorand other terminal capability overrides and rendering with 256 colors (#9973, #10039 by @christianklotz).sanitizeBinaryOutput()no longer splits output into per-character arrays.ctx.executeTool(), for example from codemode scripts, being dropped from the session cost; it is now added to the calling tool's result usage./skillautocomplete appearing empty when loaded skill names did not contain the letters inskill(#9944).@autocomplete not working after opening wrappers such as(,[,{,<, or a backtick./settingssubmenu closed it.samplingParamsbeing dropped by directstream()/complete()calls on OpenAI-compatible APIs (#9506).qwen3.8-flashthinking being replayed as plain text on later turns (#10047).output_index, such as llama.cpp, running mixed-up tool calls; such streams now end with an error (#9974).v0.87.1Compare Source
New Features
Added
Changed
Fixed
--modevalues being silently ignored instead of reporting an error and exiting with a nonzero status (#9045).v0.87.0Compare Source
New Features
context_with_systemfor per-request system-message transformations. Seecontext_with_system.read, and tool-result images. See Image Input Limits.Breaking Changes
shouldStopAfterTurnagent option. UsefinishTurnand return{ action: "end" }instead.finishTurnruns beforeturn_endbut applies the decision afterward, and it also receives error and aborted responses; migrate normal-response predicates by returningundefinedfor those hard exits. See the@earendil-works/pi-agent-corechangelog for a complete before-and-after example.ContextEditEntryto the exportedSessionEntryunion. TypeScript consumers with exhaustive entry switches must handlecontext_edit; usereplacement: nullfor omission and a content replacement otherwise.SessionManagercanonical forAgentSessionprovider context. Assigningsession.agent.state.messagesno longer replaces future request history; restore withSessionManager.inMemory(cwd, { id }, entries), navigate withsession.navigateTree(), or append throughsession.sessionManagerand callsession.refreshContext().TurnEndEventwith required boundary fields and addedAgentBeforeSettleEventto the exportedExtensionEventunion. Consumers constructing events or exhaustively switching onExtensionEventmust handle the new shapes.ExtensionRunner.emit()no longer acceptsturn_end; host integrations dispatch actionable boundaries withemitBoundary(baseEvent, buildContext).agent_settledhandlers until all settled handlers finish. Handlers still observectx.isIdle() === true, but no longer see a reentrantagent_startduring the same notification dispatch.Added
sessionManager.appendContextEdit(entryId, null)omits one message from future provider context without changing raw history, usage, or UI history.turn_endandagent_before_settleextension boundaries. Return{ entries: [...event.entries, draft], continue: true }to persist structural entries in order and ensure one next provider request without changing steering or follow-up scheduling.sessionManager.appendCompaction(summary, null, tokensBefore)stores the compaction's own ID as its kept boundary.context_with_systemextension event, which runs aftercontexthandlers on the full transcript including system messages and sends its result verbatim. Seecontext_with_system.inputLimits.images.resizeinmodels.json, applied to file attachments, image reads, and tool-result images (#9631).Fixed
contexthandlers that filter or slice messages dropping the prompt and tool declarations, which after extension-driven compaction left requests without built-in tools or made Codex emit raw tool-call text. Handlers no longer see system messages; Pi restores the prompt and tool state after they run. Seecontext(#9789, #9822)./bugallowing uploads in offline mode while preserving local zip exports (#9841 by @christianklotz).GIFbeing misclassified as images and omitted fromreadand CLI@fileinput (#9755).v0.86.1Compare Source
New Features
/login metaor useMETA_API_KEYto access Muse Spark models. See Meta (Muse subscription).Added
/login metawith automatic Model API key refresh, plusMETA_API_KEYsupport (#9096 by @xl0).Changed
Fixed
/bugdescriptions dropping line breaks from pasted diagnostics./bughints appearing for user cancellations and retryable provider failures such as service unavailability.Prompt too longerrors not being recognized as context overflow (#9805).v0.86.0Compare Source
New Features
/bugusing redacted diagnostics, optional transcripts, or exported ZIP archives. See Reporting Bugs.before_agent_start.Breaking Changes
Contextto normalizedTranscriptContextvalues. Custom providers must read system prompts and tool declarations fromcontext.messageswithgetCurrentSystemPrompt()andgetCurrentTools(). See Custom Streaming API.ToolCall.argumentsandToolResultMessage.detailsto JSON-compatible values, changedToolResultMessageinto a conditional type, and madeJsonValuearrays readonly.user_bashnow fails closed: errors or invalid defined results abort the command without invoking later handlers or executing locally. Returnundefinedto continue propagation; otherwise return{ operations }or{ result }(#9068).Added
before_agent_startand Entry Types (#9548).ToolSearchortool_searchas the loader name for prompt-prefix deferral (#9323).ctx.modelRegistry.stream()andstreamSimple()for extension model calls through configured providers with resolved authentication (#8964).reserveTokensandkeepRecentTokenssettings throughcompaction.modelOverrides, with ordinary compaction settings as fallback (#8133).compat.allowedFallbackModelsconfiguration for overriding or disabling Anthropic server-side fallback models (#9294).pi.on()so extensions can drop event handlers. Handlers added or removed during a dispatch apply to later dispatches, not the current one (#8967)./bug [description]to report a bug to the Pi developers. The report bundles environment, model, provider, extension, and settings metadata (secrets redacted), assistant message diagnostics from the session, optionally the session transcript, or a model-written summary of what went wrong instead. It is uploaded to Radius (no login required; attributed when logged in) or exported as a zip archive, and the report id is recorded in the session as api.bug-reportentry. Crashes are recorded in~/.pi/agent/crashes.json, announced once on the next start, and attached to the next report; unexplained errors and exhausted retries point at/bugonce per session./sessiondiagnostics, transcript notices, and thecache_warming_decisionextension event. See Cache Warming (#9668).Changed
--resumesession results appear progressively, using file modification times to prioritize all-folder loading and cancelling outstanding transcript reads after selection.--continuestartup time by checking candidate session headers in modification-time order and stopping after the newest matching session.read,bash,powershell,edit, andwritetools, without requiringPI_EXPERIMENTAL. Extensions can re-register tool definitions withconstrainedSampling: false.Fixed
EventStreamevents (#9055).reasoning_effortfor all reasoning-capablemistral-medium-*model IDs instead of the unsupportedprompt_mode(#8700).x-opencode-sessionfromsessionIdacross all supported API adapters (#9326).x-session-idfromsessionIdfor Chat Completions and Anthropic Messages models when prompt caching is enabled (#9102).deepseek-flashfor DeepSeek V4.1 Flash instead of retired Flash aliases, and refreshed DeepSeek pricing metadata (#9423).reasoning_effortinstead of the ignoredprompt_mode(#9375).sessionIdfor automatic prompt-cache routing (#9629).retry.maxAgentDelayMs(60s by default) so long retry runs stay responsive during prolonged transient outages (#8826).steerandfollow_upcommands bypassing extensioninputhandlers (#8718).balanced, falling back to the first available Radius model when needed.before_agent_starthandlers returningsystemPrompt(andforceSystemPrompt) on models with mid-conversation system messages: the forced prompt is now sent as the provider's leading system prompt instead of being appended as a section patch after the original prompt.enable_thinkingchat templates ignoring Pi's thinking level (#9528).skill:prefix instead of the bare skill name (#9120 by @yearth).caseslayouts around surrounding equations, and vertically laid out unsupported and nested display scripts (#8827, #9564, #7929).Removed
v0.85.1Compare Source
New Features
Added
Fixed
clientandexperimental/pluginsubpaths and server/client commands are now source-only throughpi-test.sh; the supported local SDK and stdio RPC API are unchanged (#9132).prompt_cache_options.ttl: "30m"instead ofprompt_cache_retention: "24h".v0.85.0Compare Source
New Features
Added
SessionManager.inMemory()support for restoring externally managed session entries (#8980 by @y-nk).vllmPriorityandsupportsMaxOutputTokensmodel settings for vLLM scheduler priority and OpenAI Responses output-token limits (#9004 by @AppleDannyClegg, #8941 by @scturtle).tui.altScreen.bottomshortcut to the fullscreen transcript while it is scrolled up (#9080 by @rwachtler)./login metawith automatic Model API key refresh, plusMETA_API_KEYsupport.Changed
Fixed
fdand ripgrep downloads on Linux musl systems (#9070 by @Charlie0113-T)./model(#9093 by @Jaaneek).@earendil-works/pi-coding-agent/clientcompatibility entry point.NO_PROXYmatching for root domains and subdomains (#8737 by @MeiSiristhebest).bash,edit,find,grep,ls,read, andwritetools ignoringctx.cwd(#8627 by @vmizg).SIGWINCHself-signal ([#&#Configuration
📅 Schedule: (UTC)
* 0-3 * * 1)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.