An agent or the command line can now steer a terminal session you have open. Thread tools switch a terminal session's model and thinking level and interrupt its turn, applied exactly as the pane's own /model, level selector or Esc would; a terminal on an older engine keeps refusing them. A message delivered by another session or the command line shows up in the receiving terminal under one line naming its sender, with the message as written. (#9660, #9662, #9664)
Added
/doctor now checks the memory files themselves. It reports broken links, invalid frontmatter, duplicated notes, files outside the memory folders, unreadable files and an oversized system section, and /doctor --json returns the same findings with secret-like text masked. The background memory cleanup now fixes what it finds. (#9652, #9654)
Secret-like text stays out of memory. A memory commit that contains a token, API key or PEM block is refused, and memory text injected into a turn is masked. (#9653, #9655)
Fixed
A memory maintenance run that dies mid-way no longer blocks the runs after it. Reflection, dream and facts runs now keep a receipt of each outcome, which /doctor shows. A run whose process died is quarantined with its files kept and the reason written down, so later runs proceed. A result the run had already committed before its supervisor died is kept instead of lost. (#9689, #9691)
Memory no longer slows down every prompt. The check for whether this session saved memory read the identity's whole history and could take seconds, or time out with a raw error under memory pressure; it is now bounded, its failures stay quiet, and the memory repository is packed in the background. (#9667, #9671)
The memory file list in every turn stays small. The list of non-system memory names was measured at about 158 KB (roughly 39K tokens) on a long-lived corpus; it now shows the newest names per directory within a byte budget and says how many it left out. (#9687, #9688)
The browser skill works in the release binary. Since 5.1.11 the binary installed the skill without its bundled omowright runtime, so loading it always failed for binary installs. (#9661, #9665)
GPT-6 Astra stops repeating checks that already passed. When a child's run already proved a command passes, Astra reuses that result instead of running it again, and its ultrawork instructions are shorter. Thanks to @ashmoonori-afk. (#9642, #9649)
omo.dev keeps rendering styled pages across deployments. A page served from a previous build could load without its stylesheet; deploys now carry the previous build's static assets forward. (#9617, #9623)
Code mode replies always reach the right run. Replying to or cancelling a running code-mode task through its handle can no longer land on a different, newer run. (#9562, #9695)
Changed
omo runs on senpi 2026.10.10-5. You can scroll back through a long conversation while a reply is still streaming: the terminal no longer jumps back to the top on every update (senpi#2836). When an app reopens a thread whose session is still open elsewhere, the thread's current permission mode now applies, so a thread switched from full access to ask starts asking for approval again (senpi#2823). In code mode, stopping a JavaScript cell that waits on something that never settles keeps the worker and its globals (senpi#2788), live eval rows lead with the cell's summary on one line (senpi#2802), cells can call require and shadow names the kernel defines (senpi#2792, senpi#2793), and a standalone agent gets a show_html_page tool that writes an offline page. Full list: senpi 2026.10.10-5.
omo runs on senpi 2026.10.10-4. The input box no longer gets pushed off-screen when something writes to the terminal behind the TUI (senpi#2815). A default extension shim left behind by an earlier install (for example after switching from npm to bun or to the standalone binary) no longer stops every start with Cannot find module (senpi#2765). Two processes rebinding the same session no longer fail with ENOENT (senpi#2828). In code mode, a stopped detached cell shows its output instead of reading as still running, and an isolated cell names QuickJS as its runtime (senpi#2811). Full list: senpi 2026.10.10-4.
OmO's test suites got smaller and stricter. A cleanup across seven repositories (47 merged PRs) removed 61 test files and 393 test cases that couldn't catch a real regression, about 8,100 net lines, plus 380 lines of dead product code. It also repaired 47 tests so they now fail when the code they guard breaks, each one proven by breaking that code on purpose, and nothing that was guarded before is unguarded now. Suites that never ran in CI now do, including the Codex plugin component suites and 146 web end-to-end tests. (#9285, #9336)
- f9ce976 Merge pull request #9705 from code-yeongyu/docs/5.1.22-notes
- eb002c5 docs(changelog): release notes for 5.1.22
- 5987e12 Merge pull request #9691 from code-yeongyu/feat/memory-run-receipts
- 363745b Merge commit '181c9c095223d6086a123a184845429dc11c90e2' into feat/memory-run-receipts
- 181c9c0 Merge pull request #9664 from code-yeongyu/feat/delivery-sender-label
- 7c1cbf6 Merge commit '54fa6211bd' into feat/delivery-sender-label
- 54fa621 Merge pull request #9662 from code-yeongyu/feat/thread-tui-controls
- 3f160d0 Merge remote-tracking branch 'origin/dev' into feat/delivery-sender-label
- 6dddae2 Merge remote-tracking branch 'origin/dev' into feat/thread-tui-controls
- 26b07b8 fix(memory): pin the tip-recovery gate and harden its exit record
- b90f61c Merge pull request #9695 from code-yeongyu/codemode/9562-eval-handle-epochs
- 8f1adf8 Merge remote-tracking branch 'origin/dev' into feat/memory-run-receipts
- cbd7dd2 Merge pull request #9694 from code-yeongyu/codemode/9675-smoke-split
- 9a741b9 test(omo-native): split the packaged eval smoke by responsibility and fix its ordering comment
- ad94df0 fix(memory): recover only a cleanly exited child's tip and never quarantine a finished run
- 4c4ac0d test(memory): /doctor --json carries receipts, quarantined runs and the projection row together
- 8d05f1e Merge remote-tracking branch 'origin/dev' into feat/memory-run-receipts
- d55d034 Merge pull request #9688 from code-yeongyu/feat/memory-projection-cap
- 71be5ee docs(memory): document receipts, quarantine and crash recovery
- 14aa3fd feat(memory): show maintenance receipts and quarantined runs in /doctor
- efbadb5 fix(memory): an over-budget projection falls back to its true smallest listing
- fa5ecc3 feat(memory): recover a dead supervisor's valid tip and prove crash recovery at every kill point
- 9a8b91c fix(memory): a byte budget never renders a longer file list than no budget
- e29b398 feat(memory): quarantine runs reconciliation cannot recover
- 8a3022f fix(memory): make the projection's commit times best-effort and exact
- 4e5051c feat(memory): write receipts for every maintenance outcome and backfill lost ones
- 1bfe8a1 build(omo-codex): regenerate the Codex installer bundle on linux/amd64
- 407b6fc feat(memory): add an append-only receipts ledger and kill-point helper
- 37e6b12 Merge pull request #9677 from code-yeongyu/codemode/row36-sandbox-runtime-identity
- c505e8f feat(memory): add projection limits to settings, the prompt and /doctor
- 16c0b0f feat(memory): bound the external projection by recency, count and bytes
- 68aacac feat(memory): expose last-commit times per path for a revision
- 22a1c9f Merge pull request #9654 from code-yeongyu/feat/memory-doctor-audit
- 0badda7 Merge origin/dev into feat/memory-doctor-audit
- e8b5068 Merge pull request #9680 from code-yeongyu/fix/9481-completion-wait
- 961ed01 Merge origin/dev into feat/memory-doctor-audit
- 9c168a4 Merge pull request #9655 from code-yeongyu/feat/memory-secret-boundary
- 9df3fac Merge origin/dev into feat/memory-secret-boundary
- 6e0fc21 Merge pull request #9649 from code-yeongyu/fix/astra-ultrawork-variant-sections
- 10cbc3c Merge pull request #9670 from code-yeongyu/codemode/row22-sandbox-smoke
- ad56713 fix(memory): stop the structural audit reporting links and files that are fine
- c071c8f Merge origin/dev into feat/memory-secret-boundary
- d5a0275 Merge pull request #9642 from ashmoonori-afk/fix/astra-verification-evidence
- a1074ea Merge pull request #9674 from drakeo338/claude/9673-fix
- 11cd2db Merge pull request #9665 from code-yeongyu/fix/9661-omowright-binary-runtime
- 864813f Merge branch 'dev' into fix/astra-verification-evidence
- 8ee3f37 fix(test): ignore shards created before the test process started (#9673)
- 9de94ff Merge origin/dev into feat/memory-secret-boundary
- af6be9f Merge the latest memory secret boundary into feat/memory-doctor-audit
- 49b5bbf fix(omo-native): require the omowright page bundle too, so a partial browser runtime fails the payload gate (#9661)
- a7447b5 Merge pull request #9671 from code-yeongyu/fix/memory-nudge-bounded-git
- d7d5437 Merge origin/dev into feat/memory-secret-boundary
- 3309c81 Merge pull request #9623 from code-yeongyu/fix/web-css-deploy-skew
- 2c4602a fix(memory): close the hook, PEM-label and leak gaps found in review
- b76e8ab Merge remote-tracking branch 'origin/dev' into bw-9665
- 9967d84 Merge branch 'dev' into fix/astra-verification-evidence
- 0ced9fa fix(memory): maintenance reads the repo through the resilient fs boundary (#9667)
- 8bf8e6c test(memory): a session whose id prefixes another session's does not read that session's save (#9667)
- 4d0afa0 Merge remote-tracking branch 'origin/dev' into fix/memory-nudge-bounded-git
- c1d3479 chore(web): sync held CSS branch with release stamp
- 3f87c88 Merge pull request #9672 from code-yeongyu/release/v5.1.21-source-state
- 6dc31f5 fix(memory): a session exit no longer disables maintenance for later sessions on a shared host; move maintenance out of repo.ts (#9667)
- 6cf3faa Merge latest memory secret boundary and dev updates
- 11e815a fix(memory): one maintenance runner per identity under a lock, cancelled on session exit (#9667)
- 6f41c60 chore(web): sync held CSS branch with dev changelog
- 484fea9 Merge origin/dev into feat/memory-secret-boundary
- 10dfe11 Merge remote-tracking branch 'origin/dev' into feat/delivery-sender-label
- 25b5194 Merge remote-tracking branch 'origin/dev' into feat/thread-tui-controls
- 9b4b62f chore(web): merge current dev into CSS retention branch
- ce7f78f fix(thread): a thread_send names its sender session
- 16c6094 test(memory): align pre-existing memory tests with secret screening
- 82bc60a fix(memory): bounded nudge check, quiet notice failures, and background packing of the memory repo (#9667)
- 6987c6d build(memory): integrate redactor updates and regenerate Linux bundles
- 0bd7b2e fix(omo-native): stage the browser skill's omowright runtime into the binary payload
- accc7b2 docs(memory): document secret screening
- 18e38a5 feat(memory): refuse secret-like content in the memory pre-commit hook
- 9a7dbc8 feat(memory): fail reflection, dream and facts runs that would commit secret-like content
- c065cf0 test(memory): preserve dream fixture blobs across Git EOL policies
- 687bc8b feat(thread): tell the receiving session who sent a delivery
- d9b50af feat(thread): switch a terminal session's model and level and interrupt its turn
- 7000d8c Merge remote-tracking branch 'origin/dev' into fix/web-css-deploy-skew
- 39f04d3 feat(memory): refuse memory commits that carry secret-like content
- 1938bf0 fix(memory): audit through the resilient filesystem boundary
- 4fc502c test(memory): name audit regressions by observable scenarios
- 62a5430 feat(memory): redact secret-like text at every memory injection point
- beba7a3 docs(memory): document the doctor audit
- 1593018 feat(memory): hand dream the structural audit and a repair phase
- 9e9f298 feat(memory): report structural audit codes in /doctor and add --json
- a3a1a30 Merge remote-tracking branch 'origin/feat/memory-secret-boundary' into feat/memory-doctor-audit
- 0b4dcd5 feat(memory): screen secret-like text through an evasion-resistant scanner
- bb13f59 feat(memory): add a structural corpus audit with stable diagnostic codes
- 8169e67 feat(task): add evidence reuse policies for Astra DAG receivers
- 2096e78 feat(model-core): identify Astra models explicitly
- ca45302 fix(web): retain live assets under a shared deployment lock
- c65a987 fix(web): bound stale HTML lifetime and identify deployments
- 51a8d09 fix(web): carry static assets through cached document lifetimes
- 1c90e32 test(web): detect stale stylesheet references across builds
Thank you to 2 community contributors:
- @ashmoonori-afk:
- feat(model-core): identify Astra models explicitly
- feat(task): add evidence reuse policies for Astra DAG receivers
- @drakeo338:
- fix(test): ignore shards created before the test process started (#9673)
bun add -g omo-ai