The engine moves to senpi 2026.10.21-1: engine hosts start faster and idle far more quietly, Claude subscriptions use the native 1M context again, and desktop threads are lighter (#10740). A new engine host starts about 0.1 s faster, and an idle engine host wakes 405 times per 90 s instead of 1,106. Current Claude subscription models (Fable 5, Sonnet 5, Haiku 5.5, Opus 4.7 and later) get their native 1M window back without asking for extra usage, and the Claude subscription lane runs Claude Code 2.1.306. Each desktop thread's engine supervisor starts from its own small program instead of the whole CLI, and messages and tool cards no longer keep duplicate copies (about 640 bytes per message and 2 KB per tool card). Models that models.dev marks deprecated stay available, labeled deprecated, instead of disappearing (GitHub Copilot Claude Opus 4.7, GPT-5.5 and GPT-5.4, Baseten Kimi K2 and others), and the model catalog is refreshed; some models get updated thinking levels (for example Nemotron 3 Ultra: off is now none). A message that was already delivered no longer stays listed under Steering, and with several accounts for one provider a usage limit stops failing turns once its reset has passed; a quota failure now says when it resets.
Memory sync refuses signatures under weak Ed25519 keys. Bun's WebCrypto accepts a signature made under a small-order public key, such as the identity key, for any message. The sync client now checks every key and signature it verifies itself, and refuses any keyring record that would bring a weak or malformed signing key into the account's keyring, including keys that appear only inside a fork-resolution's evidence. (#10743, fixes #10742)
Outside full access, computer use asks before it acts on your screen as a whole. Clicks, typing, key presses, scrolling, drags, pointer moves and holds aimed at the desktop or a display land on your real pointer and frontmost app, so they now need the same "Allow foreground computer control?" approval as foreground input; without it they fail with ControlRequired and nothing is sent. Input to one window in the background still needs no approval, and full access keeps working without a prompt, headless runs included. The macOS background check no longer moves your pointer back after you moved it, and a stopped session stays stopped when the desktop engine restarts. (#10788, #10790)
OmO counts how often you had to repeat a standing instruction (#10780, #10786). Rules like "never filter the monitor output" now live in system/agreements.md with a count. When you correct the agent on something an agreement already covers, the count goes up; after the third time (memory.agreements.needs_human_threshold) the agent is told the rule keeps being broken and you see a notice. /agreements lists them and lets you add your own, acknowledge one, or drop one; the agreements you add can only be changed by you. The design is inspired by dinobot by roach (PolyForm Noncommercial 1.0.0); no dinobot code was used.
The launcher deletes a legacy ~/.omo/credentials.json left by an intermediate sign-in build. The file held the device's private keys and account refresh material in plaintext, sometimes world-readable; upgrading removes it. Only the exact legacy shape is removed. (#10697, #10698)
Report a problem from inside OmO (#10546). /feedback (or /bug) sends a bug report or an idea to the OmO team in one step: your description plus your account, this device, versions, this conversation's recent messages, recent logs and your settings. Passwords, keys and tokens are removed first with the same redactor /share uses, your memory is never sent, and OMO_DISABLE_FEEDBACK=1 saves the report as a local file instead of uploading it. The desktop app's Report a problem dialog uses the same report.
A DAG node whose child dies on infrastructure is retried instead of taking its whole branch down. When a mass-ulw node's child stops answering its heartbeats or loses its host session, the node is now retried automatically, at most twice, with a backoff. Its dependents are skipped only if the retries fail too. Before, one starved wave failed and every later node was skipped (an overloaded machine skipped 54 of 61 nodes). Task failures and cancelled nodes behave as before, and the TUI and the desktop app share this behaviour (#10605, #10616).
Stopping a language server on Windows no longer raises a stray broken-pipe error. When an LSP server's pipe closed while OmO was shutting the server down, Windows could report the failed write after cleanup had already let go of it, and the EPIPE escaped as an unhandled error. Every pipe of a spawned language server now keeps an error handler for its whole life, so the failure is logged as ignored cleanup noise (#9601, #10725).
The frontend skill now covers HTML reports, figures and slides, and its stripe check catches square callouts. The skill now loads for any HTML, CSS or SVG made for visual output (a report printed to PDF, a figure, a diagram, a slide, an image for Notion or Slack), not only web UI. Its check-accent-stripes.ts linter fails a coloured bar along one side of a box whether the box is rounded or square, and a 2px-or-wider accent outline on a rounded card. Neutral hairlines, table rules, a blockquote's neutral rule, focus rings and input validation states stay allowed. The visualize skill runs the linter on every page before previewing or showing it (#10774, #10776).
ulw-research shows its report inline and checks a visual reproduction against the source (#10812). When the host can show an HTML page in the thread (show_html_page, html_render), the run ends with the report there, before the file paths, on every tier and even when the research was shortened; a built app or 3D scene shown inline no longer stands in for it. When the ask is to recreate something visual, such as a clip rebuilt in 3D, the run puts real frames of the source next to its own output at the same moments, writes down what differs, fixes the biggest gaps, and shows the side-by-side pairs in the report.
Changed
-
Combine macOS root-test shards and Codex/Senpi compatibility into one runner job, preserving their existing check names through Ubuntu status jobs. Full-matrix CI now requests two macOS runners per head instead of five, including unchanged native binary parity; fast paths skip the combined allocation (#10804).
-
CI: pull requests run the macOS and Windows legs only when a platform-specific path changes: any path a macOS/Windows-only CI step names (derived from the workflow), native crates, the launcher and platform packaging, the Windows Git Bash runtime, the Codex installer, platform-named sources, and the CI workflows. Pushes to
devand merge groups still run every OS, and therun-full-cilabel forces the full matrix on a pull request (#10856). (#10859) -
5b1bbe0 docs(changelog): compile the unreleased change fragments into 5.1.41
-
b2cbe05 Merge pull request #10875 from code-yeongyu/ci/platform-paths-followup
-
16bf941 Merge pull request #10877 from code-yeongyu/ci/fixture-no-bin-omo
-
edd8dec test(ci): native launcher fixture path no longer trips the /bin/omo audit (#10856)
-
2b48530 Merge pull request #10743 from code-yeongyu/fix/10742-memsync-weak-ed25519-keys
-
862664e Merge pull request #10859 from code-yeongyu/ci/pr-platform-path-matrix
-
cb23bfc Merge pull request #10833 from code-yeongyu/fix/10681-mock-audit-parse-only-matches
-
faa9e80 Merge pull request #10804 from code-yeongyu/ci/macos-combined-job
-
9ea7bb2 Merge remote-tracking branch 'origin/dev' into ci/macos-combined-job
-
949b363 docs(changelog): restore the paragraph break the dev merge dropped
-
6607685 Merge pull request #10786 from code-yeongyu/feat/agreement-violation-ledger
-
091df1a Merge pull request #10845 from code-yeongyu/fix/ulw-reload-cleanup-budget
-
d1aca9f Merge remote-tracking branch 'origin/dev' into HEAD
-
06949e1 Merge pull request #10834 from code-yeongyu/fix/10711-infra-retry-test-progress
-
ed586b4 test(audit): parse only mock.module candidates in lifecycle audit
-
e60f5e3 Merge remote-tracking branch 'origin/dev' into feat/agreement-violation-ledger
-
d98fe7a Merge pull request #10790 from code-yeongyu/fix/10788-cua-desktop-grant
-
eb6be62 Merge remote-tracking branch 'origin/dev' into feat/agreement-violation-ledger
-
59836e4 Merge pull request #10812 from code-yeongyu/feat/ulw-research-inline-report-compare
-
1e3033f Merge remote-tracking branch 'origin/dev' into feat/agreement-violation-ledger
-
d27f823 fix(ulw-research): reference-compare extraction always yields an mp4 cut at the chosen moment
-
c516ac3 Merge remote-tracking branch 'origin/dev' into fix/10788-cua-desktop-grant
-
61b6a60 docs(changelog): ulw-research inline report and reference compare (#10812)
-
8a06523 feat(ulw-research): a shortened run still owes the inline report and the reference compare
-
a5b34b5 feat(ulw-research): the inline page is the report on every tier, never the product page alone
-
c5e4f05 fix(memory): round-2 review nits for the agreement ledger
-
567e7a0 feat(ulw-research): make inline delivery and the reference compare success criteria, recorded in the brief
-
fbca231 feat(ulw-research): show the final report inline and compare visual reproductions against the source
-
b73b596 fix(computer-use): read consent and send global input in one step; pin the stop latch with an armed chord (#10788)
-
9219fec Merge pull request #10776 from code-yeongyu/fix/slop-gate-accent-stripes
-
6f5a042 test(memory): delete the counted agreement by replacing its line
-
f51728c fix(memory): keep the agreement ledger fixed, evict by rule at the cap
-
d7a1bb5 docs(changes): note macOS CI consolidation for #10804
-
5af3619 fix(memory): automation cannot delete a ledger that still holds a needs-human agreement (#10780)
-
9c8888c Merge remote-tracking branch 'origin/dev' into fix/slop-gate-accent-stripes
-
cd65e3a docs(changelog): note the computer-use desktop input grant (#10788)
-
7c80be4 test(computer-use): engine error-code twin checks the frame on a window click (#10788)
-
f964e08 test(computer-use): session integration tests grant before desktop input (#10788)
-
8365a67 Merge remote-tracking branch 'origin/dev' into feat/agreement-violation-ledger
-
d68286c test(computer-use): conformance desktop clicks take the control grant first (#10788)
-
8c62e13 Merge remote-tracking branch 'origin/dev' into tk10743
-
7ae8b5f test(computer-use): live macOS QA for desktop and display input under the grant (#10788)
-
90d6417 fix(computer-use): desktop and display input needs the control grant outside full access (#10788)
-
b128fbd test(computer-use): RED for desktop and display input without the control grant (#10788)
-
b3ce568 Merge pull request #10698 from code-yeongyu/fix/10697-legacy-credentials-cleanup
-
6badf66 fix(memory): automation cannot lower agreement counts or drop unparsed ledger lines (#10780)
-
d248523 docs(changelog): note the agreement ledger under Unreleased (#10786)
-
366f144 feat(memory): count repeated corrections in a working-agreement ledger (#10780)
-
9611b21 fix(frontend-skill): exempt table and form tags on Tailwind class and inline-style paths; align design README and underline guidance
-
4b79926 docs(changelog): note the frontend skill scope and accent-stripe checker change
-
c5469a9 fix(frontend-skill): fail coloured edge bars on any box and accent outlines on rounded cards; lint before visualize renders
-
59abb42 test(native): lock in legacy credentials guard branches
-
63d4622 Merge remote-tracking branch 'origin/dev' into fix/10697-legacy-credentials-cleanup
-
c6e4b62 refactor(memory-core): re-vendor strict-ed25519 at omo-relay-spec 2dcd0cf3b8, oracle test-only (#10742)
-
0261a49 refactor(memory-core): vendor strict-ed25519 from omo-relay-spec 9c077cc2dd (#10742)
-
ad29fdd refactor(memory-core): use the shared strict-25519 helper instead of a local check (#10742)
-
fd5b670 docs(changelog): memory sync refuses weak Ed25519 keys (#10743)
-
484542a fix(memory-core): refuse weak and non-canonical Ed25519 keys and signatures in memory sync (#10742)
-
c00a058 Merge pull request #10725 from code-yeongyu/fix/9601-lsp-stdin-epipe
-
8e34143 docs(changelog): note the Windows LSP cleanup EPIPE fix
-
201bb7d fix(lsp-core): keep an error guard on every LSP server pipe for its whole life
-
bf5901c Merge pull request #10546 from code-yeongyu/feat/feedback-core-10543
-
f7c3d95 Merge remote-tracking branch 'origin/dev' into fix/10697-legacy-credentials-cleanup
-
a1b8350 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
f90d451 Merge pull request #10616 from code-yeongyu/fix/10605-dag-infra-retry
-
f61198b Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
5dec9bd Merge pull request #10701 from code-yeongyu/release/v5.1.40-source-state
-
b6d0bb6 Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
0aea8e2 fix(native): remove legacy ~/.omo/credentials.json on launch and upgrade
-
d2b9aa0 fix(changelog): keep the #10616 entry under Unreleased after 5.1.39; bound the 61-node infra retry test
-
84c3184 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
61ac7a9 Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
5bc0ff7 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
ddfdd08 Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
1b3ab20 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
20c0328 Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
72bdffd Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
de4cfb5 Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
96fdd2b Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
4dadac6 Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
3139b8f Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
a846c56 Merge remote-tracking branch 'origin/dev' into fix/10605-dag-infra-retry
-
ee45ed3 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
590a559 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
18df88e Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
5c754b7 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
6b44c0b Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
d935574 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
1b596c8 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
99a8a67 Merge remote-tracking branch 'origin/dev' into feat/feedback-core-10543
-
e66b3ea docs(changelog): in-app feedback and bug reports (#10546)
bun add -g omo-ai