A new auto permission preset approves only what it can prove stays inside your project. 5.1.15 runs on senpi 2026.10.6, whose auto preset approves an action without asking only when it can show the action stays inside the project, judged on the exact file each tool will open; anything it can't pin down still asks, and your own deny and ask rules still win. (senpi#2614, senpi#2688)
Fixed
A question a session relayed to a chat thread closes when you answer it in the terminal. Before, a relayed ask_user question answered (or timed out, or dismissed) in the session's own client stayed pending in the gateway store, so a chat connector kept that thread's later replies waiting until someone answered in chat. Outbox rows now also say whether a relayed answer is still being handed to the session (answer_state), so a connector waits for a delivered answer instead of treating a claim as settled. Thanks to @effortprogrammer. (#9506)
Editing your config no longer gets a hot reload rejected over a deprecated-key notice. Renamed keys such as deep -> deep-low still load, but any edit that touched one produced a new notice, and the reload was refused. Thanks to @davhdavh for the report and @cynkai for the fix. (#8555, #8878)
thread_read pages forward when given next_cursor. A truncated read returned a cursor, but retrying with it returned the same first window again. Thanks to @cynkai. (#9435)
A memory usage write that fails after shutdown is logged instead of surfacing as an unhandled rejection. Thanks to @Dante-dan. (#9524)
Changed
omo runs on senpi 2026.10.6. Besides the auto preset above, in that release the startup banner folds into one summary line; a 429 or 5xx from the provider shows as one retry banner instead of raw JSON, while a failed compaction still shows as an error; tool-card diffs read at 7:1 contrast and each edit card shows its change count; the apply_patch streaming preview stays bounded; /files and /diff open on Windows again; a first run with no provider gets the /login guidance; Linux x64 gets the native PTY backend. Full list: senpi 2026.10.6.
A finished subagent's card reads as a summary, for example ran 2m 14s · 5 tools · $0.4213 (CH: 87%), instead of a line of debug tokens. (senpi#2654, #9513)
Memory's /doctor checks load on first use instead of with the extension, so startup loads less; the command behaves the same. Thanks to @Dante-dan. (#9520)
- f98d51e Merge pull request #9535 from code-yeongyu/release/v5.1.15-source-state
- 3d43d8e Merge pull request #8868 from cynkai/fix/8866-doctor-frontmatter-contract-scope
- 2749ee0 Merge remote-tracking branch 'origin/dev' into fix/8866-doctor-frontmatter-contract-scope
- f985c78 Merge pull request #8878 from cynkai/fix/8555-config-watch-deprecated-keys
- cec280d Merge remote-tracking branch 'origin/dev' into fix/8555-config-watch-deprecated-keys
- f94bc8e Merge pull request #9435 from cynkai/fix/9381-thread-read-next-cursor
- 4c6878c Merge dev into fix/thread-read-next-cursor and port the fix onto the gateway read path
- 8a70e68 Merge pull request #9524 from Dante-dan/fix/9523-usage-ledger-drain
- 237e071 Merge remote-tracking branch 'origin/dev' into fix/9523-usage-ledger-drain
- 1c0bf9e Merge pull request #9520 from Dante-dan/refactor/9515-lazy-memory-commands
- d970ef0 Merge remote-tracking branch 'origin/dev' into refactor/9515-lazy-memory-commands
- 889da32 Merge pull request #9506 from effortprogrammer/fix/thread-question-closed-locally
- 073755a Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- dfa74a2 Merge pull request #9513 from code-yeongyu/fix/tui-subagent-cards
- 0e631c2 Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- 1809b14 Merge remote-tracking branch 'origin/dev' into fix/tui-subagent-cards
- 43a3eb5 Merge pull request #9522 from code-yeongyu/test/9521-exec-hook-teardown-ebusy
- 4fb4eea test(utils): remove the hook-command temp dir with the shared Windows-tolerant removeTree
- 82252eb Merge current dev and regenerate lazy doctor artifacts after live QA
- db6a6e7 Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- f93b6d9 wip: preserve measured doctor bundle and packaging for #9515 (QA incomplete)
- ee57e04 wip: preserve lazy memory doctor slice for #9515 (QA incomplete)
- 94710fc Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- 58571b8 fix(thread): forget an early close when a new question reuses its request id
- 5192839 fix(thread): close a relayed question whose ask_user closed before its thread_report started
- 19d9636 Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- 087abe9 fix(thread): a session's own close also ends an answer still being handed over
- 3836731 fix(thread): close a relayed question its session answers itself; expose answer_state on outbox rows
- e325e40 fix(memory): scope /doctor frontmatter check to the memory contract
- fbdf631 fix(config-watch): stop rejecting hot reloads over deprecated-key notices
- dfde261 fix(thread): page forward when thread_read is given next_cursor
- ca07eab docs(lsp): describe the .omo-first, .pi-fallback LSP config paths
Thank you to 3 community contributors:
- @cynkai:
- fix(thread): page forward when thread_read is given next_cursor
- fix(config-watch): stop rejecting hot reloads over deprecated-key notices
- fix(memory): scope /doctor frontmatter check to the memory contract
- @effortprogrammer:
- fix(thread): close a relayed question its session answers itself; expose answer_state on outbox rows
- fix(thread): a session's own close also ends an answer still being handed over
- Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- fix(thread): close a relayed question whose ask_user closed before its thread_report started
- fix(thread): forget an early close when a new question reuses its request id
- Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- Merge remote-tracking branch 'origin/dev' into fix/thread-question-closed-locally
- @Dante-dan:
bun add -g omo-ai