This release adds hook-driven agent routing, a lean TUI settings panel, codemode tool call visibility, and several new CLI and eval capabilities, alongside a broad set of bug fixes for assistant message handling, DMR routing, and TUI rendering.
What's New
- Adds a
/settingscommand to the lean TUI with an inline settings panel supporting keyboard navigation, save/cancel, and persistence of preferences - Adds hook-driven agent routing with a
routingblock (allowed_agents,default_agent) and newbefore_agent_run/after_agent_completehook events - Adds native JSON field selection (
transform_json) as a builtin hook for trimming tool response payloads - Adds a
debug toolcommand (docker agent debug tool <config> <tool> [JSON params]) to call tools directly outside of any LLM loop - Adds
--lastflag todocker agent run --execto print only the final answer, buffering intermediate output - Adds
max_output_bytesfield to theopenapitoolset to cap response text size (omitting it keeps the 30,000-byte default;0disables the cutoff) - Adds
SessionRecoveredevent for idle recovery boundaries in the runtime - Exposes codemode tool calls and highlights scripts in TUIs, emitting standard tool-call, streamed-output, and response events for tools invoked inside Code Mode
- Returns promises from codemode tool calls, supporting concurrent execution,
Promise.all,Promise.allSettled, and top-level await - Supports
DOCKER_AGENT_DATA_DIRenvironment variable for setting the data directory - Adds repeat stability and cost outlier reporting to eval runs with
--repeat > 1 - Adds
--flavorsupport and structured tool output capture todocker agent eval
Improvements
- Lean TUI unmatched slash queries now fall back to model selection instead of dismissing the menu, supporting multi-term queries like
/openai astra - Prompt history now follows
--data-dir(including~expansion) and forwards the setting to the sandbox - Eval judge model default updated to
openai/gpt-5.6-terra
Bug Fixes
- Fixes DMR commands routing through the selected Docker connection (context/host/config/TLS) instead of falling back to a hardcoded local socket
- Fixes DMR transport errors to include the name of the selected Docker connection (
--host,--context, etc.) - Fixes assistant messages being dropped across TUIs, remote sessions, and recovery
- Fixes tool-call XML leaking into canonical and reloaded assistant text
- Fixes generated media losing stable identity on redraw in the TUI
- Fixes remote session history loss across idle recovery, OAuth elicitation, and snapshots taken mid-turn
- Fixes lean TUI tool updates duplicating content in terminal scrollback
- Fixes lean TUI replaying the full offscreen suffix on every redraw
- Fixes tool argument declaration order not being preserved in generated schemas
- Fixes reasoning and response output running together in exec text mode — a blank line is now inserted between them
- Fixes eval containers picking up a stale local agent image digest instead of the most recently built one
- Fixes
--data-dirnot expanding~and not forwarding the path to the sandbox - Clarifies
/speaktranscription requirements: requiresOPENAI_API_KEYand does not work with the Docker models gateway
Technical Changes
- Removes flaky
TestTmuxVisibilityLifecycletmux integration test
What's Changed
- chore: refresh models.dev snapshot (+38 -14 ~95) by @github-actions[bot] in #4482
- chore: refresh models.dev snapshot (+30 -14 ~39) by @github-actions[bot] in #4483
- feat: add settings command to lean TUI by @rumpl in #4484
- fix: route DMR through the selected Docker connection safely by @dgageot in #4481
- feat: return promises from codemode tool calls by @rumpl in #4487
- test(tui): remove flaky tmux visibility lifecycle test by @rumpl in #4488
- docs: auto-update for merged PRs (2026-10-01) by @aheritier in #4489
- fix: name selected Docker connection in DMR transport errors by @dgageot in #4491
- feat(openapi): add max_output_bytes to cap response text size by @dgageot in #4490
- feat: add debug tool command to call tools directly by @dgageot in #4492
- fix: stop dropping assistant turns across TUIs, remote sessions and recovery by @dgageot in #4493
- feat: expose codemode tool calls and highlight scripts in TUIs by @rumpl in #4494
- feat: honor --data-dir for prompt history and sandbox forwarding by @dgageot in #4496
- feat: add hook-driven agent routing by @hamza-jeddad in #4495
- fix: clarify speech input requirements by @aheritier in #4498
- feat(eval): forward --flavor overrides and record structured tool output by @dgageot in #4499
- feat(eval): report repeat stability and cost outliers by @dgageot in #4500
- docs: auto-update for merged PRs (2026-10-03) by @aheritier in #4502
- fix: prevent lean TUI tool updates from duplicating scrollback by @rumpl in #4501
- fix(eval): pin local agent image digest when building containers by @dgageot in #4506
- fix(leantui): switch unmatched slash queries to model selection by @rumpl in #4507
- chore: refresh models.dev snapshot (+132 -38 ~155) by @github-actions[bot] in #4511
- feat: add --last flag for exec to print only the final answer by @dgageot in #4504
- feat(hooks): add transform_json builtin for field selection by @dgageot in #4505
- fix: preserve tool argument declaration order by @rumpl in #4508
- fix(cli): separate reasoning from response in exec text mode by @dgageot in #4513
- eval: default judge model to openai/gpt-5.6-terra by @dgageot in #4514
- docs: auto-update for merged PRs (2026-10-05) by @aheritier in #4509
Full Changelog: v1.146.0...v1.147.0