This release adds several new provider aliases, opt-in background session compaction, sleep inhibition during agent runs, and full Claude API server-side fallback support, alongside numerous bug fixes and internal refactoring.
What's New
- Adds Opper as a built-in OpenAI-compatible provider alias (
opper, base URLhttps://api.opper.ai/v3/compat) - Adds Runcrate as a built-in OpenAI-compatible provider alias (
runcrate, base URLhttps://api.runcrate.ai/v1) - Adds OrcaRouter as a built-in OpenAI-compatible provider alias (
orcarouter, base URLhttps://api.orcarouter.ai/v1) - Adds opt-in background session compaction: context compaction can now run in the background while the agent continues working, configurable via
/settingsorsettings.background_compactionin user config - Adds opt-in Keep machine awake setting (
settings.keep_awake) that prevents sleep during agent runs on macOS, Linux, and Windows - Adds support for
DOCKER_AGENT_ENV_<NAME>-prefixed secret variables, allowing provider API keys to be scoped to docker-agent without affecting other tools that share the same variable names - Adds Claude API server-side fallback support: docker-agent now sends
fallbackswith the July beta, reports fallback markers and the serving model, bills each fallback attempt at its own model's rates, and supports Claude 5.x fallback chains - Adds Docker Hub authentication via the Docker secrets engine, preferring it over the legacy Desktop backend API endpoint
- Adds
feat(auth): shows why the secrets engine supplied no token in debug auth output - Adds
feat(harness): session titles and/effort/ Shift+Tab effort switching for Claude Code harness agents - Makes RAG opt-in in the WASM build via the
docker_agent_wasm_ragbuild tag; the default WASM build no longer includes RAG dependencies
Improvements
- Replays reasoning content in OpenAI-compatible streams, with opt-out, so reasoning models no longer re-derive already-produced reasoning after tool calls
- Fixes native compaction replay to apply only where it is enabled, and prices native compaction iterations separately per Claude 5.x lifecycle
- Resolves the
/speakOpenAI key through the full secret chain (includingop://references, env files, and Docker Desktop) instead of reading only from the environment
Bug Fixes
- Fixes doubled/duplicated lines in the lean TUI when streamed markdown content temporarily shrinks during rendering
- Fixes crash when anchoring deferred tools at error tool results, which previously caused sessions to become unrecoverable after a handoff with a failing tool call in the same batch
- Fixes secrets engine auth fallback behavior so a slow or stalled engine no longer stalls debug auth or loses legacy account info
- Fixes the lean TUI shutdown race between canceling input and restoring the terminal
- Fixes RAG embedding builders to be joined before returning on cancellation, and snapshots BM25 statistics safely during queries
- Fixes several gaps in server fallback handling: settling fallback turns in the adapter and WASM UI, keeping fallback markers on every beta request, and correctly attributing sticky-routed turns
- Fixes tool lifecycle ownership gaps: preserves nested lifecycle restart ownership, propagates nested worker completion, and keeps nested lifecycle probes nonblocking
- Fixes the secrets engine to correctly take the account and expiry from the engine session
- Fixes an empty
DOCKER_AGENT_ENV_override so it no longer hides overrides in later sources - Fixes injected transcribers in the TUI and allows finish to interrupt the key lookup
- Fixes Baseten model configuration to use catalogued models after the models.dev snapshot refresh
Technical Changes
- Removes deprecated MCP sampling, roots, and logging capabilities per MCP SEP-2577
- Removes unused
PeerDependenttoolset startup; all toolsets now start concurrently - Consolidates tool-list change notifications onto subscriptions, removing
tools.ChangeNotifierandSetToolsChangedHandler - Refactors the runtime into focused sub-packages: MCP sampling adapter, model discovery/picker catalog, generated artifact service, agent inspection, per-run observer lifetimes, model discovery cache, model pricing policy, and remote execution
- Refactors the OAuth callback server into a single blocking
RequestAuthorizationCodecall scoped to one authorization - Refactors the scheduler worker lifetime into a single blocking
Run(ctx)call - Refactors the lean TUI terminal resize handling into the event loop, removing the dedicated goroutine and channel
- Refactors file watching in RAG to be context-owned
- Refactors ACP terminal cleanup to be session-owned
- Removes the client-wide
lastSelectedIDfrom the rule-based provider client - Adds a
SplitGoroutineLifetimelint cop (disabled by default) for detecting split-lifecycle goroutine ownership patterns - Expresses nullable arrays and objects as
anyOfin strict OpenAI tool schemas to fix schema validation rejections from the OpenAI Responses API - Refreshes the embedded models.dev catalog snapshot (two updates: +338/−454 and +34/−28 model entries)
What's Changed
- docs: update CHANGELOG.md for v1.152.0 by @docker-read-write[bot] in #4681
- chore(deps): bump certifi from 2025.4.26 to 2026.10.19 in /examples/dhi/dhi_mcp_server in the pip group across 1 directory by @dependabot[bot] in #4680
- fix(oaistream): replay reasoning content with opt-out by @MysticalMount in #4485
- test(claude): pin Haiku 5.5 price tier, reload pricing and shared-client isolation by @aheritier in #4686
- fix: Claude 5.x compaction lifecycle (replay gate, per-iteration cost) with end-to-end tests by @aheritier in #4688
- feat: add Opper as an OpenAI-compatible provider alias by @Felixkw12 in #4677
- test: pin Claude 5.x requests after a model or transport switch and reload by @aheritier in #4689
- refactor(evaluation): scope progress rendering to its run by @dgageot in #4692
- test: avoid command discovery in shell error test by @dgageot in #4693
- refactor(oauth): scope callback serving to authorization by @dgageot in #4694
- fix: don't anchor deferred tools at error tool results by @aheritier in #4695
- feat(anthropic): server-side fallback request side (July beta, default, Claude API only) by @aheritier in #4690
- refactor(leantui): poll terminal size in the event loop by @dgageot in #4696
- refactor(rag): make file watching context-owned by @dgageot in #4697
- feat(lint): add split goroutine lifetime cop (disabled by default) by @dgageot in #4698
- refactor(acp): make terminal cleanup session-owned by @dgageot in #4699
- feat(desktop): prefer the secrets engine for Docker Hub authentication by @Benehiko in #4535
- docs(secrets): credential helper only supplies DOCKER_TOKEN by @aheritier in #4701
- refactor(scheduler): scope worker lifetime to blocking Run(ctx) by @dgageot in #4705
- test(windows): avoid recovered nil-expander hardware faults by @dgageot in #4706
- fix(desktop): preserve secrets-engine auth fallback behavior by @dgageot in #4707
- refactor(rulebased): remove the client-wide lastSelectedID by @aheritier in #4710
- feat: read DOCKER_AGENT_ENV_-prefixed secret variables by @aheritier in #4708
- fix(tui): resolve the /speak OpenAI key through the secret chain by @aheritier in #4709
- fix(leantui): prevent doubled lines during streaming by @rumpl in #4721
- refactor(runtime): extract MCP sampling adapter by @rumpl in #4724
- refactor(runtime)!: extract model discovery and picker catalog by @rumpl in #4725
- refactor(runtime)!: extract generated artifact service by @rumpl in #4726
- refactor(runtime): consolidate steering submission handling by @rumpl in #4727
- refactor(runtime)!: separate read-only agent inspection by @rumpl in #4728
- refactor(runtime): make per-run observer lifetimes explicit by @rumpl in #4729
- refactor(runtime): share model discovery cache mechanics by @rumpl in #4730
- refactor(runtime): extract pure model pricing policy by @rumpl in #4731
- refactor(runtime)!: extract remote execution without moving shared types by @rumpl in #4732
- feat: add opt-in background session compaction by @rumpl in #4723
- chore: refresh models.dev snapshot (+338 -454 ~2857) by @github-actions[bot] in #4720
- feat: add Runcrate as an OpenAI-compatible provider alias by @heydryft in #4717
- refactor: consolidate tool-list change notifications on subscriptions by @rumpl in #4736
- feat(harness): session titles and /effort for Claude Code harness agents by @Sayt-0 in #4735
- refactor: remove unused peer-dependent toolset startup by @rumpl in #4738
- chore: refresh models.dev snapshot (+34 -28 ~82) by @github-actions[bot] in #4739
- refactor: remove deprecated MCP roots, sampling, and logging support by @rumpl in #4737
- feat: Claude API server fallback stream and continuation by @aheritier in #4691
- feat: bill Claude API server fallback per attempt and allow Claude 5.x chains by @aheritier in #4700
- docs: remove per-tab settings descriptions from TUI page by @aheritier in #4740
- feat: add opt-in sleep inhibition during agent runs by @rumpl in #4742
- openai: express nullable arrays and objects as anyOf in strict tool schemas by @simonferquel-clanker in #4745
- chore: bump 16 Go dependencies by @dgageot in #4746
- feat: add OrcaRouter as a built-in OpenAI-compatible provider by @JinhaoSong322 in #4007
- feat(wasm): make RAG opt-in by @dgageot in #4748
New Contributors
- @MysticalMount made their first contribution in #4485
- @Felixkw12 made their first contribution in #4677
- @Benehiko made their first contribution in #4535
- @heydryft made their first contribution in #4717
- @JinhaoSong322 made their first contribution in #4007
Full Changelog: v1.152.0...v1.153.0