v5.0.0-beta.34
Pre-releaseOMO v5.0.0-beta.34 + senpi v2026.9.2
This release rolls up everything since beta.30. beta.31, beta.32 and beta.33 were published to npm but never announced, and beta.32/33 shipped a broken LazyCodex install (every lazycodex-ai install died in sync:skills with an ENOENT on the ultrawork prompt). beta.34 is the one to upgrade to. If you're on beta.30, this is a big jump; if you're on 31/32/33, the Codex installer is fixed and the engine moved to senpi 2026.9.2.
Why the last three betas were silent
Each one was killed by a different release-pipeline defect, not by the product. beta.31 shipped with a recall file-mode pin that broke on win32. beta.32 fixed that but the Windows legacy-daemon fixture blew its readiness budget and the omo-native staging build skipped prebuilt inputs under --ignore-scripts. beta.33 fixed those but the published tarball was missing the prompts-core Codex prompt. beta.34 fixes the last link: the Codex installer flattens the plugin into <CODEX_HOME>/plugins/cache/sisyphuslabs/omo/<version>, and the ultrawork prompt was resolved repo-relative, so it was never there. Every fix landed with a failing-first regression, and the final smoke was replayed against the real published beta.33 tarball (exit 0, ultrawork SKILL.md carries the canonical body).
🔧 Codex / LazyCodex: the installer works again
npx -y lazycodex-ai@5.0.0-beta.34 installcompletes. The installer now materializes the prompts-core ultrawork directive inside the cached plugin root, andsync:skillsresolves it checkout-first, plugin-internal second.- The ultrawork directive is single-sourced from prompts-core with a bundled runtime export, so Codex and omo-senpi ship the same text.
- The unavailable codegraph stub stays alive on the Codex host instead of idling out and dropping the tool.
🧠 Memory: the memorian gate and recall
- Recall is now a two-step loop. At settle, omo collects recall candidates from your committed memory and launches a fire-and-forget "memorian" judge child. On your next turn, whatever the judge picked arrives as one hidden recall message with one sourced
<recalled-memory source="[[path]]">block per nudge, so the agent can open the file for detail. Your current turn pays nothing for it. - Nudges are stamped with the compaction epoch. If the transcript gets compacted mid-flight, stale nudges are dropped instead of injected over a transcript that no longer exists.
memory.recallconfig shrinks toenabledandmax_items, andmemory.agents.<id>.recalllets you silence or tune recall for a single agent.- Recall delivery fails open: an unwritable ledger degrades to a missing record, never a swallowed hint. Only whole candidates that fit the token budget are delivered, and extension-injected messages stay out of transcript search.
- Dreams reconcile at session start (an overdue identity gets a best-effort dream check), and dream scanning reads each conversation once, gated by journal byte offsets.
- Default git template files are skipped, and the memory-core fs layer is EINTR-resilient with proper abort-signal handling and Windows-tolerant lock candidates.
🔁 ulw-loop: guided gates, bounded reviewers
checkpoint --print-templateemits a surface-aware quality-gate skeleton and works without--goal-id. Gate validation errors are aggregated into one report, and snapshot, plan, and session-id errors come with guided recovery messages.- Repeated review spawns are bounded: each quality-review agent gets three spawns per goal attempt, reset on explicit restart, and only allowed spawns count toward fan-out (fixes #7392). Fan-out eligibility is checked before reviewer quota is charged, and counter writes are atomic.
- The ulw reviewer agents (
omo-senpi-code-reviewer,omo-senpi-qa-executor,omo-senpi-gate-reviewer) no longer carry hardcoded model chains: they resolve their model through the category router (code review ->unspecified-high, QA ->deepthenunspecified-low, gate review ->deepthenunspecified-high), so whatever you configure for those categories is what the reviewers run on. - omo-senpi ships its own ulw reviewer builtin agents, reviewer identities resolve per toolkit surface, article-bearing reviewer roles ("the V2 reviewer") parse, and explicit V2 assignments are honored.
- The senpi surface gate is gate-review-only with a category chain:
codeReviewis dropped andmanualQais pinned to the main session. omo-opencode gets a category-chain fallback verifier for ultrawork verification.
🧩 Models, LSP, and MCP
- Grok: the output reserve is capped when the output limit equals the context window, so requests no longer fail admission (fixes #7541).
terminal_quota_exhaustedis a non-retryable abort instead of a retry loop.kimi-k3-ultrafastregisters with a 256k default context instead of the base model's 1M. Empty provider model segments are rejected, and the ulw reviewer fallback chains are gone (the fallback table now lists 11 agents).- LSP: workspace roots collapse to the git repository root, so a monorepo no longer spawns one language server per package (in-vivo: 4 TLS + 8 tsserver, ~2.4GB, now one). In-flight client stops are tombstoned and dead-client respawns are bounded. Document URIs are normalized at the
openByUriboundary. - MCP: the ast-grep stdio server arms a 10-minute idle timeout (
OMO_AST_GREP_IDLE_TIMEOUT_MSto override) and idle servers get stdin destroyed so abandoned children exit. Under a bun-compiled omo host, the ast-grep child runs as plain bun instead of re-executing the omo binary (which used to boot a ghost agent session per connection attempt). Slack MCP tokens are redacted in logs.
🪟 Windows and path hygiene
- Session manager preserves platform path roots, keeps POSIX separators in directory normalization, and normalizes the directory before
session_listfiltering. - Frontmatter parses after a UTF-8 BOM, OneDrive path segments match, whitespace-delimited tool names normalize, tar-listed filename whitespace is preserved, and
contains pathfalls back when realpath fails. - Skills loader normalizes allowed tools from both config and merged sources, and the security-research skill reads the
omo.jsoncconfig path.
🧹 Lifecycle and leak fixes
- Delegated subagent lifecycle resources are released, the TUI mirror is wired into plugin disposal with its heartbeat unref'd and stopped, and continuation cleanup runs on every exit (anchors and revival cleanup preserved).
- Hooks: idle transcript cache snapshots are pruned on a TTL sweep, unmatched fsync-skip start times are dropped, hashline pending captures are swept, unbounded session-id hook sets drain, and Anthropic recovery maps clear on dispose. A legacy snapshot race is closed.
- Background tasks get a recovery hint and non-destructive truncation (backups are cleaned up after recovery), and the parent wake variant is preserved.
omo runignores idle boulder state when there's no active plan. omo-ai ships and hardens the Senpi runtime patch, including hoisted installs, and bundles OAuth with hardened hook state.- Reliability: a large sweep made the test suite deterministic on Windows and slow runners (event-driven waits, controlled clocks, isolated fixture roots, no subprocess-shaped wrappers).
⚙️ Engine: senpi 2026.9.2 (and 2026.8.31)
- Claude Fable 5.1 preset.
claude-fable-5-1is the dieted Fable 5 core plus the 5.1 prompting-guide deltas: scope-is-the-deliverable, per-response tool-call batching, surgical-edit preference, test-scope discipline, formatting and narration recalibration. The dotted release resolves before the genericfable-5matcher,promptPreset: "claude-fable-5-1"forces it, and the default lanes (recommended model, fallback chain, startup tip) now point at 5.1. Sessions on theclaude-fable-5chain keep it. - Shared RPC host on Windows. Socket endpoints resolve to
\\.\pipe\named pipes derived from a per-endpoint secret with a constant-time authenticated handshake, pidfile ownership no longer depends on MSYSps, and detached supervisor startup failures don't leak children. POSIX keeps unix sockets +0600. /quitand/exitduring startup (managed-tool downloads) now quit instead of being parked in the editor, which also used to disable Ctrl+D.ctx.shutdown()from an extension while the session is idle shuts down immediately instead of waiting for anagent_settledthat never comes. Interactive quit keeps stderr capture installed while shutdown handlers drain, so diagnostics land in the debug log.- RPC: launch capabilities from
SENPI_RPC_CLIENT_CAPABILITIESapply to bindings even when the client never sendsset_client_info(this was breaking task/DAG/monitor liveness in omo-desktop-app).abortacks are sent as soon as the signal is dispatched. Clients can opt into native auto-titles withauto_title_sessions. - Compaction no longer wedges when the summarizer answers with a bare tool call (seen on
gpt-5.6-solat high reasoning): one retry with tool calling forbidden, then the deterministic no-LLM fallback on required routes. - Hooks trust-state reads keep a lock-free fast path for complete snapshots and take the bounded writer lock only on malformed reads, so mixed-version writers can't surface
ELOCKED. - The shared multi-session RPC host reclaims itself: 30-minute idle eviction, 8 concurrent sessions, 15-minute empty-host exit, all overridable via
SENPI_RPC_SESSION_IDLE_EVICTION_MS,SENPI_RPC_MAX_SESSIONS,SENPI_RPC_HOST_EMPTY_EXIT_MS. - Windows session resume no longer aborts on non-canonical
fs.watch()paths. TTSR stream buffers keep only a tail window, and the in-memory session mirror is bounded at 64 MiB. - Refusal-caused model fallbacks release their pin after a successful senpi-owned compaction and re-attempt the original model once; billing-caused pins never release.
Install
npm i -g omo-ai@beta # omo native CLI (5.0.0-0.beta.34, engine senpi 2026.9.2)
bun i -g oh-my-openagent@5.0.0-beta.34
npx -y lazycodex-ai@5.0.0-beta.34 install # Codex plugin (fixed installer)
- d20c167 Merge pull request #7645 from code-yeongyu/release/v5.0.0-beta.34-source-state
- b840c29 Merge pull request #7643 from code-yeongyu/test/team-message-windows-budget
- de78d42 Merge pull request #7635 from code-yeongyu/feat/reviewer-agents-category-model-routing
- d6a868f test(team-mode): budget Windows fallback wake case
- 3216a23 Merge pull request #7640 from code-yeongyu/fix/codex-cache-prompt-layout
- 96f891e fix(codex-installer): materialize prompts-core directive into the plugin cache
- 38a46e6 Merge pull request #7633 from code-yeongyu/refactor/model-core-drop-reviewer-agent-chains
- 2546845 docs(model-core): agent fallback table now lists 11 agents
- 0a9a375 refactor(model-core): drop the ulw reviewer agent fallback chains
Thank you to 2 community contributors:
- @MoerAI:
- test(team-mode): budget Windows fallback wake case
- Merge pull request #7643 from code-yeongyu/test/team-message-windows-budget
- @sisyphus-dev-ai:
- Merge pull request #7645 from code-yeongyu/release/v5.0.0-beta.34-source-state