5.1.32 is the release that 5.1.31 was meant to be: 5.1.31 never reached npm. Two checks in the release pipeline stopped it before any package was published, one on the macOS Intel desktop engine and one on the Linux musl builds. omo itself did not change between the two, so every entry below is new to anyone upgrading from 5.1.30. The notarization check now waits for Apple's ticket to reach Gatekeeper, and the musl smoke no longer reports an exited host supervisor as a leak. (#10081, #10082)
omo runs on senpi 2026.10.12, and long sessions stop growing with every shell command. A finished bash session used to keep its whole headless terminal screen (10,000 lines of scrollback plus replay history, about 20 MB for a 4,000-line output) until the 32-session limit evicted it, so a busy session or task host grew by that much per command; it now keeps only its final visible screen and its bounded output, and a live terminal's replay history is stored as flat strings instead of about 31 bytes per character. After an accepted compaction, prompts, retries and resumes use the compacted context, so a session that fits is no longer refused with "Context remains above the compaction threshold" or compacted twice. When one provider account runs out of quota, its other models are skipped, compaction runs on a model that can still answer, and the error names the provider, the reset time and the /model way out instead of raw 429 JSON. ChatGPT-subscription GPT-6.1 Sol, Fast and Ultrafast get a 500,000-token context window. Web search uses the active model's own server-side search first on routes where it was tested live, and falls back once to the standalone search if that fails. Prompt-cache prewarm is now opt-in (promptCache.keepAlive.enabled) and starts only on your first edit, never on session start or resume. RPC clients gain eval_cells.list/peek/stop, and a shared host that is shutting down refuses new sessions with host_stopping instead of adopting them. Thanks to @MoerAI and @Bearmancer. (senpi#3171, senpi#3170, senpi#3137, senpi#3062, senpi#3131, senpi#3150, senpi#3122, senpi#3140, senpi#3072, senpi#3059, senpi#3101, senpi#3055) (#10069)
The Recommended model profile is gone: with no model profile set, OmO starts on Daily · Normal. A fresh OmO Desktop or headless session with no model_profile applies Daily · Normal (Claude Opus 5.5, then Kimi K3, then GLM 5.3). If none of those is connected, it uses the first lane that is: Daily · Heavy, Geeky · Normal, then Geeky · Heavy, so a ChatGPT-only setup starts on Geeky · Normal. A config that still says model_profile: "recommended" gets the same default and one log line; it is never an error, and omo.json is not rewritten. A model_profiles.recommended you defined yourself still applies. The interactive TUI is unchanged. Requested by @code-yeongyu. (#10029)
Session tools find sessions kept in OpenCode's older storage, and show the real error instead of [object Object]. A session that exists only in OpenCode's legacy JSON storage is listed, but the SQLite server answers NotFoundError for it; session_search, session_list, session_read and session_info now read such a session from the older storage instead of failing. Any other error reads as its name and message, and when session_search or session_list (without a date filter) still cannot read a session, it skips it and names it at the end instead of failing the whole call. Thanks to @crazyrabbit0 for the reproduction. (#5854, #10041)
Ultrawork tracks task-owned worktrees and runtime caches when they are created. Cleanup guidance now scopes cache paths before task commands, requires path-specific todos and removal receipts, and preserves worktrees still needed by open PRs without wiping shared caches. Native full and compact directives, Codex, and OpenCode variants carry the same lifecycle; co-loaded workflows refer to it instead of repeating it. (#9951, #9953)
Computer use can list and choose menu commands on Linux. On X11 and Wayland, menus.items and menus.select walk a window's menu bar through AT-SPI and run the chosen item's own activation action, without focusing or raising the window. The request is bound to the exact window you named, so a same-titled sibling window of the same app is refused rather than used, and ambiguous, disabled or submenu labels are refused before anything runs. Selecting a menu command also no longer crashes GTK apps on Ubuntu 22.04. (#9651, #9994)
Computer use can take a screenshot and read a window's accessibility tree in one step. observe() on a window returns both together, and a failed or cancelled observation normally leaves the previous screenshot and accessibility references in place. (#9651)
Computer use can zoom into part of a screenshot at full detail without changing where clicks land. zoom(region) on the desktop, a window or a display captures that region again at native resolution, while later clicks and typing still use the coordinates of the last full screenshot. (#9651)
Computer use can list and choose menu commands on Windows. menus.items and menus.select read a window's classic menu bar directly, or its UI Automation menu when it has none, and run the chosen command without keyboard input. Elevated windows, ambiguous or disabled labels, submenus, and menus that change mid-request are refused before anything runs; apps that take focus while they act are refused in the background and work with delivery: "foreground". (#9651, #9991)
Computer use screenshots the monitor you are working on by default, and computer.display(id) reaches any other one. An unset computer.display now captures the active monitor, the one the focused window mostly sits on, instead of compositing every display; "all" and display ids work as before. computer.display("all" | "active" | id) gives a screenshot and input handle for one display without changing the session default, and computer.displays() lists every monitor. (#9651, #9995)
OpenCode requests now follow the selected model's live capabilities instead of a stale model cache. When OpenCode passes the live model to chat.params, its variants, thinking support, temperature support and output limit take precedence over the cached provider list, and the SDK's provider.info.id provider context is accepted alongside provider.id; calls that carry only model IDs keep the cached and bundled fallback. Thanks to @MoerAI. (#10001)
background_task.taskCleanupDelayMs now also sets how long finished background tasks stay retrievable. A delay longer than 30 minutes is no longer cut short; leaving it unset keeps the existing timing. Thanks to @imadal1n. (#9984)
The MCP OAuth callback server answers errors in plain text. Its not-found, provider-error and missing-parameter responses are now sent as text/plain; charset=utf-8 with X-Content-Type-Options: nosniff, so an error_description in the callback URL is shown as text and never rendered as HTML. MCP sign-in currently runs through a second callback server that never echoed that text, so nothing you see changes; consolidating the two is tracked separately. Thanks to @niStee. (#6464, #9979)
OpenCode task delegation and team creation now honor claude_code.agents: false, so disabled Claude Code agents fail fast instead of being selected. Thanks to @cynkai. (#8744, #8802)
Delegated OpenCode sessions show their task category in the title. Background, synchronous and fallback-created child sessions prefix the category while keeping the description and agent suffix; tasks without a category keep their existing title. (#6854, #7256)
OpenCode runtime fallback can switch models after a provider content-filter error. When fallback is enabled and alternate models are configured, a blocked response advances to a different model; the existing attempt limit and chain exhaustion still stop retries. (#6796, #7257)
Memory facts are extracted only after you type a prompt. Pending facts no longer start a model call when a session starts, rebinds, resumes or forks; extraction waits for a real prompt of yours in a top-level session. It runs on memory.facts.model, a configured quick chain or the session's own model, and with none of those available the queue stays pending without recording a failure. (#9922, #9954)
Naming a ulw-* skill no longer switches on ultrawork. ulw-plan, ulw-research, ulw-execute and ulw-loop in a prompt leave ultrawork off, while a bare ulw or ultrawork still turns it on. (#6876, #7255)
Tests now catch environment leaks at the file that causes them. A test file that leaves process.env changed fails with the names of the changed keys, and the next file starts from a clean environment. Thanks to @Dante-dan. (#9390, #9469)
- 269d219 Merge pull request #10083 from code-yeongyu/docs/changelog-5.1.32-carry-5.1.31
- f989a4b Merge pull request #10082 from code-yeongyu/fix/musl-smoke-zombie-supervisor
- d99043c Merge pull request #10081 from code-yeongyu/fix/10080-gatekeeper-poll
- 80a062a docs(changelog): carry the unpublished 5.1.31 notes into 5.1.32
- 0f06814 fix(release): reap the musl smoke container and count a zombie supervisor as exited
- ad2f9a3 fix(release): wait for Gatekeeper to see the notarization ticket after Accepted (#10080)
- b5a0888 Merge pull request #10077 from code-yeongyu/release/v5.1.31-source-state
- a59ed36 Merge pull request #10040 from code-yeongyu/feat/unset-profile-daily
- fdb728f Merge remote-tracking branch 'origin/dev' into feat/unset-profile-daily
- 7aaa357 Merge pull request #10041 from code-yeongyu/fix/5854-session-tool-errors
- 06a379c docs(changelog): scope the skipped-session wording to calls without a date filter (#5854)
- bce861b fix(session-manager): read legacy-storage sessions the SQLite server reports missing (#5854)
- 184f50a docs(changelog): note the session tool error fix (#5854)
- 7083c79 fix(session-manager): show the real error and skip unreadable sessions (#5854)
- 3050d72 Merge remote-tracking branch 'origin/dev' into feat/unset-profile-daily
- 7b44ad2 Merge pull request #9953 from code-yeongyu/docs/9951-task-runtime-cache-cleanup
- 6908c8b Merge remote-tracking branch 'origin/dev' into tmp/9953-m3
- bd1d4c1 Merge pull request #9994 from code-yeongyu/feat/cu-b4-linux-menus
- 2d2eac6 Merge remote-tracking branch 'origin/dev' into feat/cu-b4-linux-menus
- 2ea5817 Merge pull request #10011 from code-yeongyu/feat/cu-b8-atomic-observe
- 0a24703 fix(prompts): restore creation-time QA teardown tracking
- 384fe16 Merge branch 'dev' into feat/cu-b4-linux-menus
- 1417720 Merge branch 'dev' into feat/cu-b8-atomic-observe
- e50fc64 Merge pull request #10010 from code-yeongyu/feat/10009-dori-teaser
- 70a6fc6 Merge remote-tracking branch 'origin/dev' into feat/cu-b4-linux-menus
- bd87440 fix(desktop): replace only observe's ax field with [shown above]
- f102462 Merge remote-tracking branch 'origin/dev' into tmp/9953-m2
- dee3368 Merge branch 'dev' into feat/10009-dori-teaser
- 5814fdd Merge pull request #10007 from code-yeongyu/feat/cu-b7-region-zoom
- a613880 Merge remote-tracking branch 'origin/feat/cu-b7-region-zoom' into feat/cu-b8-atomic-observe
- 0e28f86 Merge remote-tracking branch 'origin/dev' into feat/cu-b4-linux-menus
- 4a32b69 Merge remote-tracking branch 'origin/dev' into feat/cu-b7-region-zoom
- 8d702e6 Merge remote-tracking branch 'origin/dev' into takeover/9953-devmerge-resume
- 72faaf1 Merge pull request #9991 from code-yeongyu/feat/cu-b3-win32-menus
- de733e3 fix(desktop): let a finished request beat a simultaneous cancel; show observe's AX once
- 880fa52 docs(changelog): note atomic window observe in [Unreleased]
- 8242abd Merge remote-tracking branch 'origin/feat/cu-b7-region-zoom' into feat/cu-b8-atomic-observe
- 85c6b60 feat(computer-use): add atomic window observe
- 694d746 feat(web): Dori teaser section at the bottom of the landing page
- 3462a88 Merge remote-tracking branch 'origin/dev' into feat/cu-b4-linux-menus
- 1e70c7a Merge remote-tracking branch 'origin/dev' into feat/cu-b3-win32-menus
- 9f09bee chore(desktop): regenerate the bunshin descriptor template for captureRegion
- 94e0350 test(codex): align inverse execution overlay anchors
- 203c398 Merge remote-tracking branch 'origin/dev' into feat/cu-b7-region-zoom
- ff3fc93 Merge pull request #9995 from code-yeongyu/feat/cu-b6-active-display
- c76fb17 Merge pull request #10002 from code-yeongyu/fix/9998-smoke-supervisor-wait
- d670089 test(desktop): refuse a zoom reply that omits its region too
- f303269 fix(codex): preserve cleanup guidance in execution overlay
- 9ba2bf2 docs(changelog): note task-owned cleanup guidance in Unreleased
- c76ac26 docs(cleanup): move resource ownership to creation-time guidance
- 64435bf Merge remote-tracking branch 'origin/dev' into fix/9998-smoke-supervisor-wait
- 7b80b9d Merge remote-tracking branch 'origin/feat/cu-b6-active-display' into feat/cu-b7-region-zoom
- abc08bc fix(desktop): require the full input frame in a zoom reply
- fa1cfed Merge remote-tracking branch 'origin/dev' into takeover/9953-cleanup
- 9f228af Merge remote-tracking branch 'origin/dev' into feat/cu-b4-linux-menus
- 4f55438 Merge remote-tracking branch 'origin/dev' into feat/cu-b6-active-display
- 8ecc3da Merge remote-tracking branch 'origin/dev' into feat/cu-b3-win32-menus
- e1e37b5 fix(desktop): keep screenshots working against engines that predate zoom
- 89b78d4 Merge pull request #9469 from Dante-dan/fix/9390-env-integrity
- 2dbeb4f docs(changelog): note region zoom in [Unreleased]
- 5df6ce0 Merge pull request #10001 from MoerAI/fix/live-chat-model-capabilities-20261011
- 4771323 fix(computer-use): preserve engine fixture mode
- 58af2de feat(computer-use): add native region zoom
- c179f7b docs(changelog): note the computer-use change in [Unreleased]
- 71ce5cc docs(changelog): note the computer-use change in [Unreleased]
- 0173cb8 docs(changelog): note the computer-use change in [Unreleased]
- 91228c0 Merge remote-tracking branch 'origin/dev' into feat/cu-b6-active-display
- c8359de Merge remote-tracking branch 'origin/dev' into feat/cu-b4-linux-menus
- 457ee04 Merge remote-tracking branch 'origin/dev' into feat/cu-b3-win32-menus
- 1f6bf92 Merge pull request #9997 from code-yeongyu/fix/pr-changelog-gate
- 1177ed9 fix(desktop): re-read the window list before acting on a menu command
- 1fa4626 test(qa): pin shared supervisor deadline and engine reserve parts
- c5a06ee refactor(desktop): pass foreground delivery as a flag to the Win32 menu path
- 6e9d706 fix(desktop): refuse a native menu window any frame read leaves unproven
- eb66308 Merge remote-tracking branch 'origin/dev' into feat/cu-b6-active-display
- 3129390 docs(changelog): drop a released entry the dev merge re-added
- ae5acf4 Merge remote-tracking branch 'up/dev' into fix/live-chat-model-capabilities-20261011
- 1257fd8 docs(changelog): credit #10001 live chat model capabilities
- 872d592 fix(qa): wait for observed supervisors within post-drain reserve
- db5256b fix(desktop): refuse only a submenu-only Win32 position style
- 5d88b74 fix(omo-opencode): honor live chat model capabilities
- c782173 fix(desktop): list every monitor for per-call display targets
- 44103b2 Merge remote-tracking branch 'up/dev' into fix/9390-env-integrity
- 002ca01 fix(desktop): require exactly one frame for a native menu window
- a103d40 Merge pull request #9954 from code-yeongyu/fix/9922-facts-user-turn
- e1f812e Merge pull request #9984 from imadal1n/fix/terminal-retention-cleanup-delay
- 3693bb8 fix(desktop): refuse disagreeing Win32 menu notification styles
- 7647647 fix(ci): recognize release changelog transitions and trim workflow tests
- c3483b1 fix(desktop): expose display targets and preserve capture semantics
- 5ee5b10 fix(ci): cover shipped payloads and preserve changelog gate checks
- 83243dd Merge remote-tracking branch 'up/dev' into fix/terminal-retention-cleanup-delay
- a0af5fc test(memory): clean engine fixture after runtime closes
- faab5f9 fix(desktop): bind Linux menu requests to the exact window
- 0af98e5 test(background): pin manager wiring behind terminal prune owner skips
- 3b41463 Merge remote-tracking branch 'up/dev' into fix/9390-env-integrity
- 9779a4e Merge pull request #6464 from niStee/fix/mcp-oauth-callback-xss
- b3fd85e fix(desktop): end a UIA menu walk on the walker's S_OK null result
- 91de130 fix(desktop): read AT-SPI action names one at a time
- a486870 fix(desktop): Win32 menu review fixes
- cc3676d Merge pull request #9990 from code-yeongyu/fix/fakeapi-no-proxy-leak
- f054c80 Merge remote-tracking branch 'origin/dev' into recover/9954-st12be5
- a64eb51 feat(desktop): capture the active display by default
- 12ef89f fix(desktop): refuse self-activating UIA menu providers in background
- cb9d877 Merge pull request #9986 from code-yeongyu/fix/9846-merge-test-teardown
- ee63ab0 feat(desktop): Linux menu listing and selection through AT-SPI
- cab67b6 docs(changelog): credit #6464 callback-server hardening
- 5804c82 test(service-auth): restore NO_PROXY once per test in fakeApi
- 7546f3d feat(desktop): Win32 menu listing and selection through HMENU and UI Automation
- f3ad742 fix(memory): preserve gated memory features
- 61f6ec9 Merge remote-tracking branch 'origin/dev' into maintainer/9469-env-fixups
- 38e5c29 test(isolation-core): the scenario regressions fail fast and pin the teardown order (#9846)
- 0bb64d3 Merge remote-tracking branch 'upstream/dev' into fix/mcp-oauth-callback-xss
- db802b1 test(isolation-core): prove the teardown owns the merges and never waits on a failed lock signal (#9846)
- 8ea026f test(build): skip POSIX cleanup assertion on Windows
- 8871dd9 Merge origin/dev into fix/9922-facts-user-turn
- 37eb07c test(background): cover terminal prune race with removal timer
- 379bc1f fix(background): never prune terminal records ahead of manager cleanup
- 8433925 Merge pull request #9930 from code-yeongyu/ci/ubuntu-2604
- ceb423c test(isolation-core): a timed-out concurrent-merge test no longer leaks git work into the next test (#9846)
- 5ba9e7b Merge origin/dev into fix/9922-facts-user-turn
- 429dd6d Merge remote-tracking branch 'origin/dev' into HEAD
- 8f2604c Merge pull request #9950 from code-yeongyu/ci/target-policy
- 4df7b5b Merge pull request #7257 from code-yeongyu/fix/bip-7023
- 7461bb5 Merge pull request #9966 from code-yeongyu/fix/9965-signin-origin
- 701bee8 Merge remote-tracking branch 'origin/dev' into sync/7257-20261011
- 8ea4742 Merge remote-tracking branch 'origin/dev' into HEAD
- a443fdb Merge remote-tracking branch 'origin/dev' into HEAD
- 1632f53 Merge remote-tracking branch 'origin/dev' into HEAD
- 5a97ece Merge pull request #9973 from code-yeongyu/fix/cu-b5b-followups
- 1224a4f Merge pull request #7256 from code-yeongyu/fix/bip-7028
- e8db3c6 Merge pull request #9980 from code-yeongyu/ci/label-trigger
- 5a2402b Merge pull request #9911 from code-yeongyu/ci/release-announce
- 349c893 Merge remote-tracking branch 'origin/dev' into sync/7257-20261011
- b2265c2 Merge pull request #7255 from code-yeongyu/fix/bip-7025
- 0d585f9 fix(runtime-fallback): classify content filters by error name
- 481267f Merge remote-tracking branch 'origin/dev' into sync/7256-20261011
- 2839c5c Merge pull request #8802 from cynkai/fix/8744-gate-claude-agents-in-delegate-resolver
- c689996 Merge remote-tracking branch 'origin/dev' into fix/cu-b5b-followups
- bf77bd7 Merge pull request #9925 from code-yeongyu/feat/cu-b5c-menus-foreground
- f685ffc docs(ci): clarify optional matrix checks and required reruns
- ad99c4b test(runtime-fallback): verify bounded content-filter recovery
- 169db46 Merge pull request #9975 from code-yeongyu/fix/9836-smoke-stop
- 1477b5a test(task): verify categorized titles after dev sync
- 4c3970b Merge remote-tracking branch 'origin/dev' into sync/7257-20261011
- 1347492 docs(changelog): credit Claude agent toggle fix
- d3dabd3 test(delegate-task): cover Claude agent flag wiring
- 049fe05 Merge remote-tracking branch 'origin/dev' into sync/7256-20261011
- c72a9ee docs(ci): explain the isolated full-matrix label caller
- 4a65db7 Merge remote-tracking branch 'origin/dev' into 8802-sync
- dcf1d0a test(ci): run the announce step without GNU timeout on macOS test runners
- a9a51cb Merge remote-tracking branch 'origin/dev' into fix/7255-sync
- 2fc35eb fix(background): pass cleanup delay to terminal pruning
- cf8dd05 fix(background): honor configured terminal record retention
- 34eaea4 Merge remote-tracking branch 'origin/dev' into feat/cu-b5c-menus-foreground
- 304bdca Merge remote-tracking branch 'origin/dev' into fix/cu-b5b-followups
- d8f3185 Merge pull request #9977 from code-yeongyu/release/v5.1.30-source-state
- 4d957d5 test(desktop): create the L3 revoke rejection on call so no unhandled rejection escapes (#9967)
- 1a0857e fix(ci): save first CLA signing comment without recheck
- 0b6dfe6 test(omo-native): use native temp directory for budget probes
- 85e747d Merge remote-tracking branch 'origin/dev' into fix/9965-signin-origin
- 44bbd95 Merge origin/dev into fix/9922-facts-user-turn
- abf3d7b fix(memory): preserve admitted recovery contracts (#9922)
- 5536065 fix(omo-native): stop smoke hosts after an unreachable status
- bde6d66 fix(ci): enforce trusted CLA and review claim execution
- 883a4ac fix(omo-native): align smoke shutdown with the engine stop budget
- fe8cb0a Merge remote-tracking branch 'origin/dev' into fix/cu-b5b-followups
- 358bc0a Merge remote-tracking branch 'origin/dev' into feat/cu-b5c-menus-foreground
- 1cea850 Merge remote-tracking branch 'origin/dev' into fix/9965-signin-origin
- 7712eda Merge remote-tracking branch 'origin/dev' into fix/9922-facts-user-turn
- cf564c7 Merge remote-tracking branch 'origin/dev' into fix/9922-facts-user-turn
- 853310e fix(ci): enforce announcement summaries and test real delivery failures
- 5b6bda0 fix(desktop): no handle-level path to control.grant; count only unrefused grants (#9967)
- a29c658 fix(ci): isolate announcement failures and gate on finalized releases
- 82d99f6 fix(cli): the --accounts help names the sign-in page origin (#9966)
- 75e0642 fix(ultrawork): share the keyword pattern with the model override so ulw-* skill names don't switch models
- 24e2c6f fix(cli): omo login defaults to https://signin.omo.dev (#9965)
- 8a0e60c fix(keyword-detector): ignore all ulw skill names
- 3bf95dd Merge origin/dev into fix/bip-7025
- 72f3213 Merge remote-tracking branch 'origin/dev' into ci/release-announce
- b3747df Merge remote-tracking branch 'origin/dev' into ci/release-announce
- 88213d0 fix(memory): drain inherited facts on the first user turn (#9922)
- b31113f Merge remote-tracking branch 'origin/dev' into ci/release-announce
- fc54f7a Merge remote-tracking branch 'origin/dev' into fix/9922-facts-user-turn
- c945763 fix(memory): defer facts extraction until user input (#9922)
- 584b00a docs(skills): include runtime caches in worktree cleanup
- c36b524 Merge remote-tracking branch 'origin/dev' into ci/release-announce
- 57e07df docs(ultrawork): scope runtime caches and track task cleanup
- 1248213 fix(ci): align migration with workflow gate contracts
- 3bed720 fix(ci): own ext4 fixture on Ubuntu 26.04
- 53771a4 fix(ci): preserve CLA base repository event metadata
- 0953b63 fix(desktop): preflight menus.select before foregrounding; doc and live-test fixes (#9888)
- 36c411e test(release): drain tag input before returning latest flag
- 17c6675 chore(desktop): regenerate the bunshin descriptor template for MenuSelectParams (#9888)
- c23b4e3 feat(desktop): menus.select foreground delivery behind the control grant (#9888)
- 185d5c6 test(desktop): menus.select foreground delivery behind the grant - RED (#9888)
- 16052b0 ci(release): do not announce a publish run a person cancelled; drop a local path from the docs
- cbfbd79 Merge remote-tracking branch 'origin/dev' into ci/release-announce
- 092674a ci(release): surface skipped posts and order announcements
- 6292b5f fix(release): skip beta announcements and preserve fenced paragraphs
- e74399b ci(release): announce only releases created by the current run
- c3c38f3 ci(release): call announcement workflow directly from publisher
- d44b055 ci(release): announce stable releases to Discord with fail-red probes
- cc8d88f Merge branch 'dev' into fix/9390-env-integrity
- e5ab650 Merge current dev into test environment integrity fix
- 29e3f48 WIP: preserve recovered dev merge for #9390 (validation incomplete)
- d39f81c Fix test bindings and restore absent Windows PATH keys
- 3606b48 Merge dev into fix/8744-gate-claude-agents-in-delegate-resolver
- af9a653 WIP: preserve dev sync for env-integrity recovery (#9390); QA incomplete
- 4fa4b2e WIP: preserve test environment isolation investigation (#9390)
- 7c030b7 fix(delegate-task): honor claude_code.agents=false in subagent resolver
- 2b3cba1 fix(mcp-oauth): add nosniff to OAuth error responses
- f2e3a2f test(mcp-oauth): cover callback response content types
- b4dd1e4 fix(mcp-oauth): set text/plain Content-Type on OAuth error responses
- 6c959b5 Merge branch 'dev' into fix/bip-7023
- 535d355 Merge branch 'dev' into fix/bip-7028
- 172ad25 Merge branch 'dev' into fix/bip-7025
- f66705a fix(keyword-detector): guard hyperplan-ultrawork combo against ulw-plan and ulw-research (review fix)
- 0f77985 fix(keyword-detector): ignore ulw skill names
- 038195b fix(delegate-task): show categories in delegated session titles
- 5277d1d fix(runtime-fallback): retry content filter errors
Thank you to 3 community contributors:
- @imadal1n:
- fix(background): honor configured terminal record retention
- fix(background): pass cleanup delay to terminal pruning
- fix(background): never prune terminal records ahead of manager cleanup
- test(background): cover terminal prune race with removal timer
- @niStee:
- Merge remote-tracking branch 'upstream/dev' into fix/mcp-oauth-callback-xss
- @MoerAI:
- fix(omo-opencode): honor live chat model capabilities
bun add -g omo-ai