# oh-my-openagent v5.0.0-beta.22 - Product: oh-my-openagent (https://whatsnew.fyi/product/oh-my-openagent) - Vendor: oh-my-openagent - Date: 2026-08-27 - Version: v5.0.0-beta.22 - Original notes: https://github.com/code-yeongyu/oh-my-openagent/releases/tag/v5.0.0-beta.22 - Permalink: https://whatsnew.fyi/product/oh-my-openagent/releases/v5.0.0-beta.22 - Labels: Pre-release What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **fixed** — Launcher no longer orphans engines by forwarding SIGTERM and SIGHUP signals and giving engines a bounded grace window to shut down cleanly - **added** — omo doctor command can find and clean up stale engine processes orphaned by earlier launcher versions - **added** — omo doctor --reap subcommand to explicitly remove orphaned interactive engine processes by pid - **fixed** — Launcher preflight now detects corrupt installs and fails fast with actionable diagnosis instead of raw stack traces - **fixed** — Home-directory config watching now works correctly by inspecting target globs to avoid protected agent-dir paths - **changed** — Senpi engine pinned version updated from 2026.8.26 to 2026.8.26-2 - **fixed** — DAG wait detaches by default and returns immediately instead of holding the tool call open for the entire run duration - **added** — Pass detach: false to dag wait to restore blocking semantics - **fixed** — Orphaned runs whose parent session is dead are now adopted and re-homed with the recovery journaled - **fixed** — RPC bridge attaches after paused runs recover so the first snapshot shows recovered state instead of stale paused state - **changed** — unspecified-high fallback chain rebuilt as opus-first: claude-opus-5 xhigh -> glm-5.3 max -> kimi-k3 max - **removed** — vercel provider leaves every builtin fallback lane and vercel-only minimax-m2.7-highspeed rung is dropped - **removed** — quotio-openai purged from chain sources - **added** — Telemetry vocabulary gains glm-5.3 entry for zai-coding-plan and opencode-go - **changed** — Dead-chain category alert changed from yellow warning to info-level notice #### OmO 5.0.0-beta.22 Release Summary This release rides on Senpi 2026.8.26-2 and focuses on process lifecycle correctness: the launcher no longer orphans engines, `omo doctor` can find and clean up the orphans older versions left behind, broken installs fail fast with a real diagnosis, and DAG runs survive session restarts instead of getting stuck. It also reworks the default model fallback lanes and fixes home-directory config watching. ##### Launcher and engine lifecycle (omo-native) ###### Signal forwarding: no more orphaned engines Previously, both launcher layers (`node bin/omo.js` -> engine, plus the bun re-exec in between) blocked in `spawnSync`, where no JavaScript handler can run. A `SIGTERM` killed the launcher on the spot and left the engine reparented to pid 1, still holding your terminal. Those orphans later showed up as stdin `EIO` crashes and engine processes lingering for days. Both layers now spawn asynchronously and: - forward `SIGTERM` and `SIGHUP` to the engine - give it a bounded grace window to shut down cleanly (10s, tunable via `OMO_SIGNAL_GRACE_MS`) - re-raise the signal on themselves if the child ignores it, so supervisors still see the death they asked for `SIGINT` (Ctrl-C) is deliberately not forwarded, since the terminal already delivers it to the whole foreground process group; the launcher just stops dying underneath the engine. Exit codes and signal-death status pass through unchanged. Windows installs no signal handlers. ###### `omo doctor` finds and reaps stale engines `omo doctor` now lists interactive engine processes that earlier launcher versions orphaned (reparented to pid 1), with pid, age, and tty. Cleanup is explicit and per-pid: ``` omo doctor --reap [pid...] ``` It re-checks the live process table and refuses any pid that isn't an orphaned interactive engine at that moment (live sessions, rpc/app-server engines, or non-engine processes are never touched). There's no pattern-matching kill. ###### Corrupt install diagnosis at launch A field report on Windows showed npm dying mid-install with EBUSY (a running engine locks native modules), leaving a tree with senpi's `dist/cli.js` intact but core modules missing. Launch then crashed with a raw `ERR_MODULE_NOT_FOUND` stack. The launcher preflight now verifies the brand contract module next to the CLI and, on a partial tree, fails fast with one actionable line: the missing file, the interrupted-upgrade diagnosis, and the reinstall command. On Windows it additionally explains that running omo/senpi processes cause exactly this partial state. ##### Senpi 2026.8.26-2 and the config-watch fix The pinned engine moves from 2026.8.26 to 2026.8.26-2 across the root workspace, `omo-ai` launcher, adapter, and task engine, aligned with the config-watch compatibility work (issue #7064, tracked by this worktree). Senpi's config-reload host rejects watch registrations that cover protected agent-dir paths (`auth.json`, `sessions/`, `logs/`) unless root-anchored filter globs prove each watched path avoids them. OmO previously dropped any target whose path merely contained a protected path, which silently killed home-directory config watching. The filter now inspects the target's globs: targets whose root-anchored globs provably avoid the protected paths are kept, so `~/.omo/omo.jsonc` changes are picked up live again, while unsafe targets are still never emitted. The user-config creation watch also derives its glob set from the actual config directory name instead of a hardcoded `/omo`. ##### DAG: detached waits and restart recovery - **Wait detaches by default.** A model-facing `dag` wait used to hold the tool call open until the run settled, freezing the session turn for the whole run (38+ minutes observed in the wild). It now returns immediately with a detached envelope and a live snapshot; node completions and the terminal run wake still reach the session through the idle coordinator. Pass `detach: false` to restore blocking. Th _[Truncated at 4000 characters — full notes: https://github.com/code-yeongyu/oh-my-openagent/releases/tag/v5.0.0-beta.22]_