Release · Oh My Pi · can1357

Oh My Pi v18.12.2

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

Release notes

Oh My Pi v18.12.2

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

Changed
  • The failed-tool-call correction sent to DeepSeek models now also covers chat-template tool-call tokens written out as text, not only malformed DSML (#16216 by @H4vC)
Fixed
  • Fixed Ollama chat history estimates counting stripped native thinking and missing foreign thinking replayed as text, which skewed compaction after model switches (#16164)

@oh-my-pi/pi-ai

Added
  • Added nativeJudgmentImageBounds(): the image bounds a native judge enforces, its wire's transport limits tightened by the catalog's model bounds
  • Added Box judgment questions (BoxQuestion/BoxAnswer, TypeSafe Jev 1.14+ direct or through OpenRouter): each names the request image it searches by image index, and comes back as that image's edges as 0–1 fractions; text, OpenAI Decisions, and Workers AI judges reject them
Fixed
  • Fixed Muse Code usage going stale whenever its 5-hour window sits idle: the idle window now reports as unused, and weekly usage carries over from the last active window until its reset (#16193 by @eggpeat)
  • Fixed DeepSeek tool calls never running when the model writes them as chat-template tokens with _ in place of ▁, a missing |, or no per-call close (e.g. <|tool_calls_begin|>…<|tool_calls_end|>): they now run as tool calls, and any that still cannot be parsed are removed from history and reported to the model as a failed call (#16216 by @H4vC)

@oh-my-pi/browser-relay

Fixed
  • Fixed a relay tab close failing when Chrome refuses it for a moment (a tab being dragged); the extension retries it (#16119 by @will-bogusz)
  • Fixed tabs created for a relay request whose connection dropped mid-create staying open, and answers to such requests going to a later connection (#16119)
  • Fixed the relay resolving an old tab id to a different tab after a browser restart; the extension now reports each browser run (#16119)

@oh-my-pi/pi-catalog

Changed
  • Seeded TypeSafe jev-1.14.0 and OpenRouter typesafe/jev-1.14, and made them the judge role defaults and TypeSafe's default model; TypeSafe discovery keeps seeded ids its alias-only /v1/models listing omits

@oh-my-pi/pi-coding-agent

Added
  • Added computer.backgroundFallback (takeover by default, or refuse): when a computer window input call has no background route, the tool reruns that one call in takeover, hands focus back to your app and says so in its result; refuse fails the call instead and also refuses the agent's own foreground requests (takeover: true, raise(), an activating apps.open, desktop input, and on macOS menus and AXOpen) (#15191 by @will-bogusz)
  • Added DeepSeek as a web search engine (web/deepseek), using DeepSeek's new Search API with your existing DEEPSEEK_API_KEY or stored deepseek credential
  • Added el.selectText(text, { prefix?, suffix?, select? }) to the macOS computer tool: it selects text (or places a caret) in a background app's text field without taking focus, moving the pointer or sending keys, so typing into that field replaces it (#15175 by @will-bogusz)
  • Added { takeover: true } to computer-use win.move, so a hover that a window refuses in the background can be retried in the foreground (#15173 by @will-bogusz)
  • Added a menu option to the computer tool's win.click, el.click, el.press and el.perform, so on macOS the call that opens a menu also chooses its item, e.g. menu: ["Add to", "Fonts"] (#15185 by @will-bogusz)
  • Added el.type(text) and el.press(chord) to the computer tool, which send text and keys to that element instead of wherever its window's focus is; on macOS and Windows nothing is sent when the element cannot be addressed without taking your focus (#15563 by @will-bogusz)
  • Added: pressing Escape during takeover input now stops computer use for the rest of the turn, and that session's later computer calls are refused, unsent, until your next message (#15564 by @will-bogusz)
  • Added the computer tool's UserIntervened error on macOS: input into an app you have used since the agent last read its window fails without sending, and the agent is told to read the window again and keep your edits (#15562 by @will-bogusz)
  • Added tui.completeScrollback: rows a growing HUD or dialog pushes off screen go straight to scrollback instead of missing from it until it shrinks (#15692 by @Ilm-Alan)
Changed
  • The computer tool and its errors no longer tell the model to retry with takeover: true, and its instructions tell it never to call raise() or apps.open(…, { activate: true }) to make input work (#15191 by @will-bogusz)
  • Computer-use window input with takeover omitted now stays in the background after computer.control.acquire, so an acquired grant no longer activates the target app or moves the user's pointer; pass takeover: true for foreground input (#15173 by @will-bogusz)
  • Pressing Escape in your own app no longer stops the computer tool's background window input unless task control is held; Escape in omp still interrupts it, and physical Escape still stops takeover input (#15176 by @will-bogusz)
  • Added Box questions to ChainJudge: they go only to Jev judges that answer them, and the box edges measure the image you passed even when it was padded to fit Jev's size bounds
  • A relay browser.open without app.target now opens its own background tab instead of adopting the visible one (after reinstalling the relay extension; older ones select it), and browser.close closes it; app.target still borrows an existing tab (#16119 by @nnnnoel and @will-bogusz)
  • Computer-use win.menu.items now needs exec approval and is rejected in read_only runs, since on macOS it makes the window key in its own application before reading its menus (#15184 by @will-bogusz)
  • The computer

…