Release · Oh My Pi · can1357

Oh My Pi v18.12.3

What's new in Oh My Pi v18.12.3, released Oct 19, 2026 (). Newer: v18.12.6 (Oct 21, 2026)

Release notes

Oh My Pi v18.12.3

@oh-my-pi/pi-agent-core

Added
  • AgentTool gained the optional approvalCacheTargets hook, which the always-ask-cached approval mode uses to check and record per-file grants (#16049 by @Peribunt)
Changed
  • Tools with lenientArgValidation now 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_delta failing 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 task tool's model field does (#16249 by @will-bogusz)
  • Fixed PI_REQ_DEBUG=1 request 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-on low–max thinking the bundled MiniMax-M3.1-Flash-Preview rows 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 with Thinking budget is not supported for this model; thinking is now toggled with thinkingLevel (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, through approval-cache.db (#16049 by @Peribunt)
  • Added /forget-approvals to forget every file and folder approval Ask and remember has recorded (#16049 by @Peribunt)
  • Extension ui.approve() hosts can render the new prompt.grants choices and answer { grant, always }; hosts that ignore them keep answering once/session/deny (#16049 by @Peribunt)
  • Extension and custom tools can declare approvalCacheTargets to take part in Ask and remember grants (#16049 by @Peribunt)
  • Added proc://<id>/streams for bash jobs: it lists the command's pipes, and proc://<id>/streams/<n> shows what has crossed pipe n so far, so cmd | tail -5 can be followed live without rerunning cmd
  • Background job widgets are designed per job by the new widget model role (resolves like smol until you assign it): one request writes rules that read the job's output and its pipes (cmd | tail included), 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 with async.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 wait card 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, and Shift+Tab change that subagent's model and thinking level (session-only) instead of telling you to return to the main session; /model and Alt+M open the session-only picker there, since role assignments configure the main session
Fixed
  • Fixed omp skill list omitting skills from a skills.customDirectories entry that starts with ~; such an entry now resolves against your home directory, matching the skill loader (#16347 by @yuzu-octopus)
  • Fixed grep treating 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 grep refusing a web URL that carries a :raw (or :conflicts) selector before the page was fetched; the selector now reaches the fetch, so :raw searches the verbatim response body (#14092)
  • Fixed browser role/<role>[name="…" exact] selectors in Chromium and Tern tabs matching nothing for many names copied from observe(); a button or link with visible text is no longer matched by its title (#16252 by @will-bogusz)
  • Fixed /tan clones 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 contentText from pi-ai or formatSkillsForPrompt

…