Release · Oh My Pi · can1357

Oh My Pi v18.14.2

What's new in Oh My Pi v18.14.2, released Oct 31, 2026 (). Newer: v18.18.0 (Nov 7, 2026)

Release notes

Oh My Pi v18.14.2

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

Added
  • The soft steering signal a tool sees as toolCall.steeringSignal now aborts with the source of the queued message ("user", "irc", …) as its reason, so a tool can yield only to the sources it should (#17537)
Fixed
  • Reject incomplete local compaction, turn-prefix, handoff, and branch summaries ending with stopReason: "length" instead of using truncated text as complete context. Omit incomplete display-only short summaries without discarding a completed full summary (#17499 by @Xytronix).

@oh-my-pi/pi-ai

Breaking Changes
  • Replaced isLoopGuardedModel with loopGuardLevel, which returns "off", "exact", or "semantic" from the model's thinking-loop-guard catalog rule
Added
  • Added disableServerSideFallback to FactoryDroidOptions and SimpleStreamOptions: a Factory Droid request leaves out the server-side refusal fallback chain and fails, before any of its content is streamed, if another model answers it (#12229 by @Xytronix)
Changed
  • DeepSeek and Grok models on Amazon Bedrock now get the same near-duplicate reasoning-loop checks as on other hosts
Fixed
  • Fixed Claude turns failing with "Thinking loop detected" when summarized thinking repeated a progress line such as "Still writing the parser..."; Claude models no longer run the loop guard
  • Fixed the loop guard discarding turns from other models whose reasoning summary repeats one status line a few times; whole-line repetition now has to cover about 1 KB before it counts as a loop
  • Fixed per-request OpenAI-compatible headers being combined with differently cased model headers instead of overriding them (#17513 by @jchanghong023)
  • Fixed a stalled Anthropic stream that keeps sending empty content deltas never timing out, because those deltas were treated as stream progress (#17484 by @jchanghong023)
  • Fixed Anthropic-compatible endpoints that put a thinking signature on the streamed content block losing it, so replayed reasoning keeps its signed block (#17483 by @jchanghong023)
  • Fixed AuthStorage.close() and replaceStore() losing a rotated OAuth refresh token when a refresh was still in flight, with or without durable refresh leases; the store now stays open until that token is saved, and new refreshes are refused (#17518)
  • Fixed /usage showing Cursor's "Other Models" meter as an inflated dollar amount; it now shows the percentage Cursor reports, like Cursor Models (#17462 by @eggpeat)
  • Fixed the omp auth-gateway Responses endpoint rejecting documented null values for temperature, top_p, output limits, reasoning, and reasoning summaries (#17466 by @Xytronix).
  • Fixed provider HTTP errors printing the response body twice when the thrown error already carried it, including responses with a retry header (#17503 by @metaphoric-dev)
  • Fixed Gemini tool calls through the omp auth-gateway chat-completions endpoint failing on the next turn: the gateway now returns each call's thought signature in extra_content and replays the one a client sends back (#17509 by @justdoGIT)

@oh-my-pi/pi-catalog

Breaking Changes
  • Removed thinkingLoopGuard from compat records; thinking-loop-guard is now a catalog axis that applies on every host, with "semantic" for Gemini, DeepSeek, and Grok and "off" for Claude
Fixed
  • Fixed GitHub Copilot Claude 5.x base models (claude-opus-5, claude-opus-5.5, claude-sonnet-5, claude-sonnet-5.5) reporting the 1M window of their -1m variants once the model list was read from cache; discovered limits now survive cached reads instead of reverting to bundled values (#17481)

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

Added
  • Added task.perCallModel (off by default, eval, on) so a task item or an eval agent()/workpool() call can run on one exact model the operator already names: a chat role from your own (non-project) settings, the selected agent's own model, or the parent's current model. Glob values (anthropic/*) never approve a model. task.perCallModelAllow narrows that list, task.maxEffort caps the worker's effort, and the worker never switches to another model. Project settings can only narrow this: they never turn it on or approve a model (#12229 by @Xytronix)
  • Added Settings.reloadFromDisk({ includeParents: true }), which reloads the persisted settings behind an overlay while keeping the overlay's own overrides (#12229 by @Xytronix)
Changed
  • model is now declared in every task schema: a task call, eval agent() or workpool() that passes a model the operator's configuration does not allow is refused with an error (#12229 by @Xytronix)
  • Viewing a subagent or returning to the main session no longer posts a "Viewing agent …" / "Returned to main session" status (a popup in Tern); the status line and Tern's composer already show which agent is in view
  • In a Tern pane, omp stats shows the dashboard in place of the block it runs in, with a Close button (or Esc, or Ctrl+C) that stops it and brings the terminal back, and /stats opens it in a browser block beside omp, instead of the system browser
  • bash tool commands now see PI_TOOL_CALL_ID, the id of the call running them, so a script the agent runs can point at that call in the session transcript (#17489 by @will-bogusz)
  • Native judgments with a configured fallback now move to it after a 3-second candidate deadline (configurable with judgment.attemptTimeoutMs) and briefly skip the timed-out route; without a configured fallback a slow judge is never cut off or replaced (#17465 by @Xytronix).
Fixed
  • Fixed a ! or $ command run while the agent works floating over the composer in Tern, where expanding its output covered the conversation; it now sits at the end of the conversation
  • Fixed out:// replies sent from an eval cell (tool.write to out://, or tool.bash with > out://) never appearing even though the write reported "Shown to the user."; they now draw as replies after the eval card, and are refused where nothing would show them (a backgrounded cell, a browser tab script)
  • Fixed a write to out:// (such as out://baselines.md) drawing as a Write card with line numbers instead of a reply streaming as prose
  • Fixed table charts drawing a ratio or speedup

…