Release notes
Oh My Pi v18.12.3
@oh-my-pi/pi-agent-core
Added
AgentToolgained the optionalapprovalCacheTargetshook, which thealways-ask-cachedapproval mode uses to check and record per-file grants (#16049 by @Peribunt)
Changed
- Tools with
lenientArgValidationnow receive unknown root arguments that their closed schema would otherwise drop, so they can reject them (#16317)
@oh-my-pi/pi-ai
Added
- Added
validateToolArguments(tool, call, { keepUnknownRootKeys: true })to keep unknown root keys that a closed schema would otherwise drop during argument repair (#16317)
Fixed
- Fixed Claude streams that a gateway cut off before
message_deltafailing the turn instead of being retried (#16341 by @lz-lunzi) - Fixed Gemini pairing parallel same-name tool results with the wrong call when history stores them out of call order (sessions from before 18.4.2, SDK-built contexts) (#16259 by @will-bogusz)
- Fixed Factory Droid Gemini dropping calls to tools with names over 64 characters (most MCP tools) and their results from later requests, so the model called the tool again; such names now shorten to 64 characters (#16283 by @will-bogusz)
- Fixed Factory Droid Gemini requests failing with 400 "For schema with items, schema type should be ARRAY" when a tool parameter accepts a string or a list, as the default
tasktool'smodelfield does (#16249 by @will-bogusz) - Fixed
PI_REQ_DEBUG=1request dumps writing your API key, bearer token and response cookies to disk in plain text: credential headers now read[redacted], as in rejected-request dumps (#16293 by @will-bogusz) - Fixed finalized signed reasoning disappearing from displayed thinking when no deltas streamed (#16227)
@oh-my-pi/pi-catalog
Changed
- MiniMax
MiniMax-M3.1-Flash(the launch id) now gets the always-onlow–maxthinking the bundledMiniMax-M3.1-Flash-Previewrows have, and omits sampling params (temperature,top_p,top_k) it rejects (#16315 by @SaladDay)
Fixed
- Gemma 4 models on Google AI Studio (
google/gemma-4-31b-it,google/gemma-4-26b-a4b-it, …) no longer fail every request withThinking budget is not supported for this model; thinking is now toggled withthinkingLevel(on =high, off =minimal) (#16350)
@oh-my-pi/pi-coding-agent
Added
- Added the Ask and remember approval mode (
tools.approvalMode: always-ask-cached,--approval-mode always-ask-cached): it also asks before file reads, and file prompts can remember the folder or the file, for this session or across sessions, throughapproval-cache.db(#16049 by @Peribunt) - Added
/forget-approvalsto forget every file and folder approval Ask and remember has recorded (#16049 by @Peribunt) - Extension
ui.approve()hosts can render the newprompt.grantschoices and answer{ grant, always }; hosts that ignore them keep answeringonce/session/deny(#16049 by @Peribunt) - Extension and custom tools can declare
approvalCacheTargetsto take part in Ask and remember grants (#16049 by @Peribunt) - Added
proc://<id>/streamsfor bash jobs: it lists the command's pipes, andproc://<id>/streams/<n>shows what has crossed pipenso far, socmd | tail -5can be followed live without rerunningcmd - Background job widgets are designed per job by the new
widgetmodel role (resolves likesmoluntil you assign it): one request writes rules that read the job's output and its pipes (cmd | tailincluded), and every later update is computed locally with no further model calls or messages to the agent; a subagent gets a widget only once it says which output shows its progress, and a job with nothing worth charting gets none; turn them off withasync.widgets: false - Running subagents now show their current step, in their own words, on the task card; the periodic completion check also asks the subagent which output shows its progress, so the job widget knows what to chart
- The
waitcard shows the watched jobs as a row of tiles, each with its status, name (a subagent's in full), what it is doing, and its headline figure and live widget when it has one (a throughput chart with its target line, per-model bars, CI job status, trial progress), and a subagent's own completion estimate as a ring that turns from blue to green as it fills (hover the tile for the percentage); the HUD jobs pill shows the freshest job's headline and a mini chart, and hovering it opens a card with the running jobs as tiles; the jobs sheet shows the selected job's widget above its output, and the terminal status line appends the headline to the jobs count
Changed
- While a subagent is focused,
/model,/switch,/effort,Alt+P,Ctrl+P, andShift+Tabchange that subagent's model and thinking level (session-only) instead of telling you to return to the main session;/modelandAlt+Mopen the session-only picker there, since role assignments configure the main session
Fixed
- Fixed
omp skill listomitting skills from askills.customDirectoriesentry that starts with~; such an entry now resolves against your home directory, matching the skill loader (#16347 by @yuzu-octopus) - Fixed
greptreating a;-separated list of internal URLs (e.g.artifact://44;artifact://43) as one URI and refusing to search it; every listed resource is now searched (#14091) - Fixed
greprefusing a web URL that carries a:raw(or:conflicts) selector before the page was fetched; the selector now reaches the fetch, so:rawsearches the verbatim response body (#14092) - Fixed browser
role/<role>[name="…" exact]selectors in Chromium and Tern tabs matching nothing for many names copied fromobserve(); a button or link with visible text is no longer matched by itstitle(#16252 by @will-bogusz) - Fixed
/tanclones with Mnemopi auto-recall re-sending the parent's recalled memories as an extra system-prompt block, which duplicated them and missed the parent's prompt cache (#16337) - Fixed legacy pi extensions that import
contentTextfrom pi-ai orformatSkillsForPrompt
…