Redesigned permission prompts and panel, and a vim-style message box
The app's approval prompts and Permissions panel are rebuilt: patterns can be created, edited, deleted and overridden inline or with new /permissions subcommands, and the remember step is a single panel. The TUI message box and the app composer gain a vim-style key binding preset with registers, macros and search motions, chat retries transient transport errors, and fleet coordinators default to memory-tree context. Many fixes cover fleet claims, the supervisor, settings gates, providers and the app's serve loop, alongside a large internal cleanup.
33 changes
- New permissions The app shows approval prompts in a new menu: a limit notice with its diff, and a proposal card with Review and edit to adjust the proposed pattern before approving.
- New permissions The Permissions panel has a new table with recent decisions and an inline New pattern / Edit editor (chips, Kind, Access, How long, Delete pattern). Pattern numbers stay stable and /permissions delete <n> removes a pattern.
- New permissions /permissions override <limit> and the Permissions panel's Override... action let you override a limit.
- New permissions Remembering a decision in the app is one panel step, answered as remember:<scope>:<what>. Only your own prompt remembers; remember: text written by an agent grants nothing. The permissions docs describe this in section 9.
- New tui The TUI message box and the app composer gain a vim-style key binding preset, with the same behaviour in both and touch handling in the app.
- New tui The vim-style preset supports named registers and macros ("a-"z, q, @) in the message box.
- New tui The vim-style preset accepts search as an operator motion in the message box, such as d/foo or c?bar.
- New chat Chat retries transient transport errors automatically, and the TUI shows the retry and its completion.
- New fleet Fleet coordinator sessions default to memory-tree context. Unrecorded memory-tree switches are reported, and the startup prepare step is guarded.
- Improved app The app resolves key presses through the key binding settings and sends the resulting actions to the server instead of using its own hard-coded hotkey map.
- Improved webui The web UI's uploads, entry snapshot and client prompts are updated.
- Improved webui The web UI command interface's styling and mode handling are updated.
- Improved doctor Doctor counts a closure factory's own statements and stops treating a part's wrapper closure as one huge function, which removes false high function_length findings.
- Fixed permissions After an always rule is removed, the check for the same rule in another settings layer compares the whole rule, including folder, reads-only flag and rule shape, and reports a rule kept in another layer.
- Fixed fleet The fleet supervisor's sweep handles a worker's death, with related fixes to the select bridge, event store and approval prompts.
- Fixed fleet The fleet supervisor's announce logic is corrected.
- Fixed fleet The fleet claim store and client handling are hardened to check process identity rather than trusting a PID alone, and they respect host holds.
- Fixed fleet Fixes the fleet store view, the coordinator and the app's upgrade handling, including the store view used for OAuth lending.
- Fixed fleet A task worker's prompt reaches its lead and the board instead of waiting on a prompt nobody could see.
- Fixed fleet Messaging an agent id that was never spawned prompts as expected. Before, every agent-NNNN id was treated as owned.
- Fixed settings A project settings gate keeps your earlier false for the fleet's auto_spawn, auto_fill and split_orchestrator instead of turning them back on. The app gate no longer restores a room_agents_autostart value it never saved.
- Fixed app The app's serve loop no longer scans the whole settings-ack directory or reads the whole board for the watchdog's pause check. Old ack records are pruned in bounded passes, so server queries stay fast.
- Fixed providers DeepSeek thinking-mode requests that fail with 400 "reasoning_content must be passed back" are recovered.
- Fixed agent Tool results from sequentially run tools carry their permission decision again.
- Fixed agent After a cooldown round restart, the agent keeps its model instead of losing it.
- Fixed subagents A subagent role's resolved reasoning effort is applied. A misspelt field caused it to be ignored.
- Fixed skills run_skill calls with sparse arguments get the proper refusal instead of crashing the permission policy.
- Fixed community Answering a community question with an item that has no choices returns a 400 error instead of raising.
- Fixed tui Leaving interactive chat takes two Ctrl+C presses, as intended.
- Fixed docview Docview fingerprint and sidecar handling is hardened, and the docview design notes and related READMEs are updated.
- Fixed webui Fixes on the web UI's messages page.
2 internal changes
- Internal refactor Large refactors across the codebase: oversized functions and modules are split into stages, positional parameters become option tables, in-tree pcall calls are removed, and duplicated helpers get a single owner.
- Internal tests Test suite work: oversized test files are split, a shared seam helper replaces copied ones, slow tests are made fast or moved to the heavy tier, flaky deadlines are fixed, the pcall budget gate reads the sharded budget, and new suites are added.