github docker/docker-agent v1.153.0

3 hours ago

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 URL https://api.opper.ai/v3/compat)
  • Adds Runcrate as a built-in OpenAI-compatible provider alias (runcrate, base URL https://api.runcrate.ai/v1)
  • Adds OrcaRouter as a built-in OpenAI-compatible provider alias (orcarouter, base URL https://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 /settings or settings.background_compaction in 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 fallbacks with 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_rag build 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 /speak OpenAI key through the full secret chain (including op:// 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 PeerDependent toolset startup; all toolsets now start concurrently
  • Consolidates tool-list change notifications onto subscriptions, removing tools.ChangeNotifier and SetToolsChangedHandler
  • 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 RequestAuthorizationCode call 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 lastSelectedID from the rule-based provider client
  • Adds a SplitGoroutineLifetime lint cop (disabled by default) for detecting split-lifecycle goroutine ownership patterns
  • Expresses nullable arrays and objects as anyOf in 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

Full Changelog: v1.152.0...v1.153.0

Don't miss a new docker-agent release

NewReleases is sending notifications on new releases.