omo runs on senpi 2026.10.10-10. With several Anthropic Subscription accounts, a session no longer switches accounts on a transient error and back on the next turn; it retries the same account, then stays on whichever account holds its transcript. With resumeMode: "off", the conversation is no longer written to the prompt cache again on every turn. A long streamed tool call on the Anthropic Subscription lane no longer fails with "session stream queue exceeded 256 messages". Full engine notes: senpi 2026.10.10-10. (senpi#2891, senpi#2982, senpi#2822, #9798)
Search, docs and quick work now run on Claude Haiku 5.5. The default explore, librarian and quick lineups use claude-haiku-5-5 at medium reasoning, right after GPT-6 Luna Fast, instead of Claude Haiku 4.5 at the end of the chain. On an Anthropic-only machine, the memory and Kibitzer sidecars run on it too. The Claude Code haiku alias now means Haiku 5.5. (#9802)
Approval and authorization questions can't be read as permission, whichever model asks them. ulw-plan's approval gate, its authorization block and mass-ulw's scope, spend and irreversible decisions are asked with required: true, so an unanswered gate ends the turn instead of continuing on best judgment. The plugin also sets the flag itself on gating questions, recognized by their pinned headers, for models that leave it out. (#9735, #9775, #9774, #9782)
chatgpt-subscription/gpt-6.1-sol-ultrafast is available without a local extension, with the Ultrafast service tier and default xhigh reasoning. Thanks to @audreyt. (senpi#2975)
Fixed
A config migration no longer reformats your omo.jsonc. The first start against an existing config rewrote every top-level value, dropping nested comments, trailing commas and your formatting. Migrations now edit only the values they change, in the file's own style. (#9777, #9783)
A child that won't stop no longer keeps finished children resident. One child that ignored SIGTERM stalled the idle sweep, so finished process children piled up (about 2 GB each). Every teardown step is now bounded, idle residents are reclaimed one by one, and task_cancel releases a finished resident; cancelling a running child that never answers its abort no longer hangs either. Thanks to @lee98www for the report. (#9785, #9788, #9791, #9792)
Binary downloads validate every archive entry on localized systems. Tar listings in a non-English locale (localized month names) or from GNU tar were not parsed, so their entries skipped validation; the downloader now lists archives in the C locale, parses both formats, and refuses a listing line it can't parse. Thanks to @MoerAI. (#9685, #9780, #9779)
A suspended background task no longer looks like it is working. Its row in the live task widget shows a still mark instead of a spinner and no climbing timer, names why it stopped (for example, the parent session restarted), and offers a message only where sending one would revive it. (#9350, #9795)
Memory no longer writes empty transcript journals. A session with nothing to record wrote an empty journal at every start; none is written now, and empty journals left by older builds are removed. (#9737, #9739)
- 05d3a68 Merge pull request #9803 from code-yeongyu/docs/5.1.28-notes
- 75272e7 docs(changelog): 5.1.28 release notes
- 6fe9f0b Merge pull request #9802 from code-yeongyu/feat/haiku-5-5-default-lineups
- 64020d1 test(memory): the Kibitzer pin-priority case pins a model outside the builtin chain, so it can fail (review r2)
- bbe3368 fix(haiku 5.5 lineups): memory/Kibitzer sidecar tests, Copilot dotted capability ids, docs order (review)
- 2e73a78 Merge pull request #9795 from code-yeongyu/fix/suspended-task-row-static
- 657ea5a Merge pull request #9792 from code-yeongyu/fix/9791-bounded-cancel-abort
- 5943705 Merge pull request #9788 from code-yeongyu/fix/9785-idle-sweep-bounded-terminate
- 0339104 Merge pull request #9779 from MoerAI/fix/9685-localized-tar-month
- 9dca444 Merge origin/dev into fix/9685-localized-tar-month
- 919a0f3 fix(binary-downloader): list tar owners as numbers
- a47fe98 Merge pull request #9783 from code-yeongyu/fix/9777-surgical-migration-edits
- ea80198 Merge origin/dev into fix/9685-localized-tar-month
- cb531aa fix(binary-downloader): leave tar link lines with a repeated separator unparsed
- eccb599 Merge remote-tracking branch 'origin/dev' into fix/9777-surgical-migration-edits
- 29680a0 Merge pull request #9782 from code-yeongyu/feat/9774-question-gates
- 87eb050 Merge remote-tracking branch 'origin/dev' into fix/9777-surgical-migration-edits
- 31bbdbd fix(binary-downloader): list tar entries in the C locale without TAR_OPTIONS
- c5e2cfe Merge origin/dev into fix/9685-localized-tar-month
- 63b3db9 Merge remote-tracking branch 'origin/dev' into feat/9774-question-gates
- 0fbfef7 fix(test): register the archive extraction preflight tests (fixes #9781)
- 2347d3f fix(binary-downloader): fail closed on unparsed tar listing lines and parse GNU tar (fixes #9780)
- c6e00ee Merge pull request #9775 from code-yeongyu/feat/ask-user-required-gates
- 007deee Merge pull request #9739 from code-yeongyu/fix/9737-no-empty-transcript-journal
- b451433 Merge remote-tracking branch 'origin/dev' into feat/9774-question-gates
- b7fe100 fix(config): never drop a same-line member, keep CRLF files surgical, and verify every hand edit against jsonc-parser's (#9777)
- e89de67 fix(binary-downloader): parse localized tar listings so entries are validated (fixes #9685)
- 1d598ab fix(config): migrations edit omo.jsonc only where a value changes, in the file style (#9777)
- cdc7901 fix(memory): the empty-journal sweep treats a transcripts root under a file like a missing one (#9737 review)
- 4944324 fix(memory): the empty-journal sweep re-checks and deletes under the journal lock, reads at most 4 KB, and runs once per identity per process (#9737 review)
- af71ac1 fix(memory): a journal with nothing to record is never written; sweep empty journals left by older builds (#9737)
- f9181a9 Merge pull request #9776 from code-yeongyu/release/v5.1.27-source-state
- acbd5e1 Merge remote-tracking branch 'origin/dev' into feat/ask-user-required-gates
Thank you to 1 community contributor:
- @MoerAI:
- fix(binary-downloader): parse localized tar listings so entries are validated (fixes #9685)
- fix(binary-downloader): fail closed on unparsed tar listing lines and parse GNU tar (fixes #9780)
- fix(test): register the archive extraction preflight tests (fixes #9781)
- Merge origin/dev into fix/9685-localized-tar-month
- fix(binary-downloader): list tar entries in the C locale without TAR_OPTIONS
- fix(binary-downloader): leave tar link lines with a repeated separator unparsed
- Merge origin/dev into fix/9685-localized-tar-month
- fix(binary-downloader): list tar owners as numbers
- Merge origin/dev into fix/9685-localized-tar-month
bun add -g omo-ai