Releases: docker/docker-agent
v1.88.1
This release adds session forking by user-message ordinal and includes documentation updates for recently merged features.
What's New
- Adds the ability to fork a session by user-message ordinal, allowing clients to target "the Nth user message" directly without translating to a flat message-stream index
Technical Changes
- Bumps
github.com/dgageot/rubocop-goto pull in a new whole-program, inter-procedural dataflow analysis engine and theLint/ContextConnectivitycop - Updates documentation for the
planbuiltin toolset, thereadonlyattribute for toolsets and agents, and top-level shared toolsets withuse_toolsets - Fixes tool ordering and
list_plansdescription in plan docs; addsupdatedAttoread_plandescription
What's Changed
- docs: update docs for features merged 2026-06-25 (plan toolset, readonly, shared toolsets) by @aheritier in #3244
- docs: update CHANGELOG.md for v1.88.0 by @docker-read-write[bot] in #3245
- chore: bump rubocop-go for whole-program context cop by @dgageot in #3247
- feat(server): fork session by user-message ordinal by @trungutt in #3250
Full Changelog: v1.88.0...v1.88.1
v1.88.0
This release overhauls the TUI with a redesigned Agents panel, Agent Inspector, configurable keybindings, and image rendering in the lean TUI, plus fixes for provider thinking-budget leaks and OTLP trace export compatibility.
What's New
- Adds clearer thinking-state vocabulary in the TUI: effort gauge (6-cell), updated labels (
adaptive→auto), and token budget display - Redesigns the TUI sidebar Agents panel with a focus card and compact roster layout
- Adds a right-click Agent Inspector showing live and configured agent details
- Labels the delegation spinner with
parent → childfor at-a-glance readability - Adds configurable keybindings via
~/.config/cagent/config.yaml, including remappable send/newline keys (resolvesCtrl+Jconflict in VS Code and tmux) - Allows embedders to register custom tool renderers keyed by tool name or category, with built-in renderers as fallback
- Adds a pluggable
Storageinterface to theplantoolset (parity with thetodotoolset), with a default filesystem backend and per-instance construction - Appends OTLP signal path so trace export works with generic base-path backends such as Langfuse and LangSmith
- Renders images in the lean TUI using the Kitty protocol and reuses existing tool call renderers
Bug Fixes
- Fixes
CloneWithOptions(..., WithNoThinking())leaking the provider-levelthinking_budget, which caused short-budget callers (e.g., session-title generation, summaries) to fail
What's Changed
- docs: update CHANGELOG.md for v1.87.0 by @docker-read-write[bot] in #3236
- feat(plan): add pluggable Storage interface (parity with todo toolset) by @Sayt-0 in #3239
- fix(provider): WithNoThinking clone no longer leaks provider-level thinking_budget by @trungutt in #3238
- Let embedders register custom tool renderers by @EronWright in #3202
- feat(tui): live status + labeled spinner for delegation (#3101) by @aheritier in #3115
- feat(tui): readable thinking state, redesigned Agents panel, and Agent Inspector by @aheritier in #3108
- feat(tui): configurable keybindings (Shift+Enter / Ctrl+J newline alternative) by @Sayt-0 in #3204
- feat(otel): append OTLP signal path so Langfuse and LangSmith work by @Sayt-0 in #3240
- test(teamloader): wire test provider registry in agent config retention test by @aheritier in #3242
- Lean TUI tool renderers by @rumpl in #3243
Full Changelog: v1.87.0...v1.88.0
v1.87.0
This release adds shared toolsets, a new plan builtin toolset for multi-agent collaboration, and a readonly attribute for toolsets and agents, alongside several MCP OAuth reliability fixes and improvements to attachment forwarding and deterministic prompt ordering.
What's New
- Adds a top-level
toolsetsmap to the config schema, allowing toolset definitions to be shared and referenced by name from any agent via a newuse_toolsetsfield - Adds a
planbuiltin toolset that provides agents a shared, persistent scratchpad (write_plan,read_plan, and related tools) for multi-agent collaboration across turns - Adds a
readonlyboolean attribute to bothToolsetandAgentConfig, restricting agents or toolsets to read-only tools when set - Adds
styles.RegisterBuiltinThemes(fsys fs.FS)for Go SDK embedders to contribute additional built-in themes from a filesystem - Adds
SessionIDtoErrorEventand session-aware constructors soisRootEventcorrectly filters child-session errors
Bug Fixes
- Fixes image and PDF attachments being silently dropped for DMR-hosted models that are absent from the models.dev catalog
- Fixes MCP OAuth auto-recovery: a server-side
401 invalid_tokenrejection now evicts and refreshes the token instead of burning all reconnect attempts and enteringStateFailed - Fixes a retry storm on permanent OAuth reconnect errors in MCP
- Fixes non-interactive sessions stalling silently when an OAuth-protected MCP server has no cached token; now fails fast with an error
- Fixes
BuildAuthorizationURLincorrectly appending a second?when the OAuth authorization endpoint already contains a query string - Fixes eval runs failing with
unknown provider type "anthropic"by building the judge model from the populated provider registry - Fixes a TUI dialog being silently dropped when a nested sub-agent stream started in the same session, leaving the run blocked on user input
- Fixes non-deterministic prompt ordering in
ScriptToolSetby sortingshellToolsandtool.Argskeys before iteration, preventing Anthropic prompt-cache misses - Fixes provider registry being empty for RAG toolsets and other code paths after an earlier refactor emptied the default registry
- Fixes a compile error caused by a call site using the old unexported name
interactivePromptsAllowedafter it was renamed toInteractivePromptsAllowed
Technical Changes
- Converts bug and feature GitHub issue templates from markdown to issue forms (
.yml) - Makes registered theme precedence last-wins, using
slices.Backwardfor iteration - Surfaces re-auth notices and ensures background MCP OAuth reconnects are non-interactive
What's Changed
- docs: update CHANGELOG.md for v1.86.0 by @docker-read-write[bot] in #3212
- Let embedders register built-in themes via RegisterBuiltinThemes by @EronWright in #3182
- docs: update API server, CLI, DMR provider, and Go SDK for PRs #3199 #3201 #3206 #3182 by @aheritier in #3215
- docs: add Snapshots feature page by @dgageot in #3218
- fix(eval): build judge model from the populated provider registry by @Sayt-0 in #3222
- chore: bump docker-agent-action to v2.0.1 by @docker-agent in #3214
- fix: forward image and PDF attachments for DMR models by @Sayt-0 in #3197
- fix(mcp): auto-recover remote MCP OAuth on server-side invalid_token by @aheritier in #3207
- chore: convert bug/feature issue templates to issue forms by @aheritier in #3134
- fix(tui): keep pending dialog when a nested sub-agent stream starts by @aheritier in #3221
- fix: restore provider registry after cf5a430 emptied the default by @dgageot in #3196
- Add SessionID to ErrorEvent so isRootEvent correctly filters child errors by @simonferquel-clanker in #3224
- fix: fail fast on OAuth MCP auth in non-interactive sessions by @Sayt-0 in #3213
- fix: correct exported name InteractivePromptsAllowed in OAuth MCP handler by @dgageot in #3225
- feat: add readonly attribute for toolsets and agents by @dgageot in #3226
- ci: don't cancel in-progress runs on main by @dgageot in #3228
- feat: add top-level shared toolsets with use_toolsets agent field by @dgageot in #3232
- feat: add plan builtin toolset for shared multi-agent collaboration by @dgageot in #3227
- fix(mcp/oauth): merge query params when building authorize URL (#3229) by @aheritier in #3230
- fix: sort script toolset keys for deterministic prompt ordering by @simonferquel-clanker in #3235
New Contributors
- @EronWright made their first contribution in #3182
Full Changelog: v1.86.0...v1.87.0
v1.86.0
This release adds comprehensive OpenTelemetry instrumentation following GenAI semantic conventions, exposes session forking over HTTP, and includes several bug fixes for model streaming, local model detection, and OAuth registration.
What's New
- Adds end-to-end OpenTelemetry instrumentation across the runtime, including provider chat/embed/rerank spans, session and stream spans, MCP client/server and OAuth flows, A2A server, memory, RAG, evaluation, hook executor, and built-in tool internals — following GenAI semantic conventions
- Adds structured status code classification for GenAI errors in telemetry
- Exposes session forking over HTTP, allowing clients to branch a conversation from a specific point in history
- Adds a hidden
--pprof-addrflag (andCAGENT_PPROF_ADDRenv var) toserve apithat starts a Go pprof HTTP server at/debug/pprof/when explicitly configured
Bug Fixes
- Fixes OAuth Dynamic Client Registration to advertise both
authorization_codeandrefresh_tokengrant types, resolving rejections from strict authorization servers - Fixes detection and use of locally-installed Docker Model Runner models, resolving "No model providers available" and "No models available" symptoms when local models are already pulled
- Fixes permanently stalled
docker-agent runsessions caused by blocking SSE stream reads with no idle timeout or context cancellation - Fixes fork validation and stops classifying fork errors by string matching; serializes fork read-modify-write and preserves safety-rail limits
- Fixes
toolset.startspan kind attribute by correctly unwrapping the toolset wrapper
Technical Changes
- Adds tool count attributes to session and MCP spans
- Adds W3C traceparent injection for remote MCP requests
- Migrates CI/CD references from
docker/cagent-actiontodocker/docker-agent-action(v2.0.0)
What's Changed
- docs: update CHANGELOG.md for v1.85.0 by @docker-read-write[bot] in #3194
- fix: advertise refresh_token grant in OAuth DCR + add Miro MCP example by @aheritier in #3192
- feat(otel): instrument runtime with GenAI semantic conventions by @tdabasinskas in #2620
- feat(serve): add live pprof HTTP server to serve api command by @zampani-docker in #3201
- chore: migrate cagent-action to docker-agent-action (v2.0.0) by @docker-agent in #3203
- chore: bump go.yaml.in/yaml/v4 and modernc.org/sqlite by @dgageot in #3195
- fix: add idle timeout and context cancellation to model stream reads by @aheritier in #3210
- docs: update /docs for PRs merged 2026-06-22–23 by @aheritier in #3208
- fix(dmr): detect and use locally-installed Docker Model Runner models by @Sayt-0 in #3206
- feat(server): expose session forking over HTTP by @trungutt in #3199
New Contributors
- @zampani-docker made their first contribution in #3201
- @docker-agent made their first contribution in #3203
Full Changelog: v1.85.0...v1.86.0
v1.85.0
This release contains only a changelog documentation update for v1.84.0 with no user-facing changes.
Technical Changes
- Updates CHANGELOG.md with release notes for v1.84.0
What's Changed
- docs: update CHANGELOG.md for v1.84.0 by @docker-read-write[bot] in #3190
Full Changelog: v1.84.0...v1.85.0
v1.84.0
This release adds a lean TUI user setting, hardens MCP OAuth token storage, and includes several refactoring changes to make toolsets, providers, and embedder dependencies more explicit.
What's New
- Adds a
settings.leanglobal user config option to make the lean TUI the default for interactive runs, while preserving explicit CLI overrides including--lean=false - Adds a headless chat session API (
pkg/embeddedchat) for embedding docker-agent runtime conversations in non-docker-agent UIs - Makes OpenAI, Anthropic, Google, and Amazon Bedrock providers optional via build tags, allowing embedders to drop unneeded providers and shrink binary size
- Makes the RAG toolset opt-in to remove the cgo dependency on go-tree-sitter from embedders that don't need it
Bug Fixes
- Fixes the Shift+Tab thinking-level cycle to include the
maxeffort tier for Claude models that support it (Opus 4.7+, Fable 5, Mythos 5) - Fixes potential token loss and repeated keyring access in the OAuth token store
- Hardens MCP OAuth token file storage with cross-process locking, reload-before-write merge semantics, Windows-safe atomic file replacement, and migration of legacy keyring entries
Technical Changes
- Replaces the single keyring OAuth token bundle with a keyring-sealed AES-256/AES-GCM encrypted file, storing only a fixed-size key in the OS keyring
- Refactors toolset and provider registries to be explicit rather than relying on blank imports and
init()functions - Decouples embedder dependencies so that
pkg/runtime,pkg/model/provider, andpkg/tools/mcpno longer transitively pull inopenai-goand99designs/keyring; moves the OS-keyring-backed MCP OAuth store to its ownpkg/tools/mcp/keyringstoresub-package - Removes unused agent in the wasm runtime
What's Changed
- docs: update CHANGELOG.md for v1.83.0 by @docker-read-write[bot] in #3179
- Add lean TUI user setting by @rumpl in #3181
- docs: update /docs for PRs merged 2026-06-18–20 by @aheritier in #3183
- refactor: make toolsets and providers explicit by @dgageot in #3184
- fix: seal MCP OAuth tokens with keyring-backed file by @dgageot in #3185
- Remove unused agent in wasm runtime by @rumpl in #3187
- refactor: decouple embedder deps and register keyring store explicitly by @dgageot in #3189
Full Changelog: v1.83.0...v1.84.0
v1.83.0
This release adds an opt-in sudo askpass flow for shell commands, a headless embedded chat session API, and several bug fixes for cost accounting, session handling, and custom provider model resolution.
What's New
- Adds opt-in
sudo_askpass: trueflag to theshelltoolset, bridgingsudopassword prompts to the agent's elicitation flow instead of hanging until timeout - Adds
pkg/embeddedchat, a headless chat session API for embedding docker-agent runtime conversations in non-docker-agent UIs, with support for streaming events, tool call confirmation, conversation restart, and cancellation - Makes OpenAI, Anthropic, Google, and Amazon Bedrock providers optional via build tags, allowing embedders to drop unneeded providers and reduce binary size
Improvements
- Replaces the bleve full-text search library with a lightweight pure-Go BM25 matcher for model routing, removing a large transitive dependency tree and enabling WebAssembly cross-compilation
Bug Fixes
- Fixes duplicate
tool_resultblocks for the sametool_call_idbeing passed to strict providers such as AWS Bedrock - Fixes custom providers (defined with
base_url+token_key) triggering a blocking fetch of the full models.dev catalog (~3.4 MB) on every turn in internet-restricted environments - Fixes reasoning tokens from streaming usage not being recorded for Anthropic extended-thinking models
- Fixes
run_background_agentsub-sessions not being persisted to the store - Adds a warning when an uncatalogued model bills $0 with token usage
- Fixes the Shift+Tab thinking-level cycle in the TUI not offering the
maxeffort tier on Claude models that support it (Opus 4.7/4.8, Sonnet 4.6, Fable 5)
Technical Changes
- Replaces external
go-memoizeandgo-cachelibraries with a new internalpkg/memoizepackage built ongolang.org/x/sync/singleflight - Makes the RAG toolset opt-in to remove the cgo dependency on go-tree-sitter from the default build
- Documents YAML anchors, aliases, and merge keys support in the configuration overview
- Documents the 10-second per-toolset tool-listing timeout for wedged MCP servers in the troubleshooting guide
What's Changed
- docs: update CHANGELOG.md for v1.82.0 by @docker-read-write[bot] in #3161
- docs: document startup tool-listing timeout for wedged MCP servers by @aheritier in #3166
- fix(modelsdev): skip models.dev fetch for custom providers (#3165) by @Sayt-0 in #3169
- feat(embeddedchat): add headless chat session API by @dgageot in #3171
- chore: bump direct Go dependencies by @dgageot in #3170
- refactor: replace go-memoize and go-cache with internal memoize package by @dgageot in #3172
- fix(runtime): close cost-accounting blind spots (reasoning tokens, $0 spend leaks) by @dgageot in #3173
- feat(shell): opt-in sudo askpass flow (#1551) by @Sayt-0 in #3163
- fix(session): drop duplicate tool results in sanitizeToolCalls by @Sayt-0 in #3162
- refactor(rag): make the rag toolset opt-in to drop cgo from embedders by @dgageot in #3174
- docs: document YAML anchors, aliases and merge keys by @Sayt-0 in #3175
- feat(provider): make openai, anthropic, google, and amazon-bedrock optional by @dgageot in #3176
- refactor: replace bleve with lightweight BM25 matcher for model routing by @dgageot in #3177
- fix(modelinfo): offer the max effort tier in the Shift+Tab thinking cycle by @Sayt-0 in #3178
Full Changelog: v1.82.0...v1.83.0
v1.82.0
This release adds visual pause state indicators to the TUI, expands MCP catalog and OAuth support, and fixes several runtime, provider, and memory issues.
What's New
- Adds a banner to the lean TUI on startup
- Adds Grafana Cloud as a remote streamable-http MCP server to the catalog (monitoring category, OAuth 2.1 authentication)
- Adds pausing/paused visual state indicators to the TUI when the
/pausecommand is active
Bug Fixes
- Fixes reserved character sanitization in the memory toolset's default-path config segment, preventing initialization failures on Windows when agents are loaded from OCI references containing
:in the image tag - Fixes sub-session transcript not being persisted when the run loop exits via an error path in
runForwarding - Fixes sub-session transcript not being persisted on error path in
runCollecting(background agent path) - Fixes startup tool listing hanging indefinitely when a toolset's
Tools()call blocks; adds a per-toolset timeout so the sidebar no longer gets stuck on "Loading tools..." - Exempts
list_background_agentsfrom the runtime loop-killer, which previously flagged it as a repeated identical call - Fixes
delta.reasoningfield being dropped in the OpenAI-compatible chat-completions stream adapter, resolving silent/empty responses with Qwen3 thinking mode - Fixes configured headers not being forwarded to OAuth discovery requests for remote MCP servers, resolving repeated auth prompts for servers like Grafana Cloud that require instance-scoping headers
- Fixes OAuth default port normalization in MCP header host scoping
What's Changed
- docs: update CHANGELOG.md for v1.81.2 by @docker-read-write[bot] in #3143
- Add a banner in the lean tui by @rumpl in #3147
- fix(memory): sanitise reserved characters in default-path config segment by @trungutt in #3146
- chore: bump Go dependencies by @dgageot in #3149
- docs: sync /docs with main — Grafana Cloud catalog, lean TUI banner, memory path sanitization by @aheritier in #3153
- fix(providers): consume delta.reasoning in chat-completions stream adapter by @Sayt-0 in #3158
- chore: bump github.com/alecthomas/chroma/v2 to v2.27.0 by @dgageot in #3155
- feat(tui): show pausing/paused state for /pause by @dgageot in #3156
- fix(runtime): exempt list_background_agents from the loop-killer by @mcavage-docker in #3157
- fix(mcp): forward configured headers to OAuth discovery on the server host by @Sayt-0 in #3159
- fix(runtime): bound per-toolset tool listing during startup (#3137) by @Sayt-0 in #3154
- fix(runtime): persist sub-session transcript on error path in runCollecting by @jedp-docker in #3152
- fix(runtime): persist sub-session transcript on error path by @jedp-docker in #3151
- docs: update documentation for recent merged PRs by @aheritier in #3160
New Contributors
- @jedp-docker made their first contribution in #3152
Full Changelog: v1.81.2...v1.82.0
v1.81.2
This release adds Grafana Cloud to the MCP server catalog.
What's New
- Adds Grafana Cloud as a remote MCP server to the catalog, accessible via
https://mcp.grafana.com/mcpusing streamable-http transport and browser-based OAuth 2.1 authentication
What's Changed
Full Changelog: v1.81.1...v1.81.2
v1.79.0
This release adds TUI embedding capabilities, gateway model discovery, and HTTP transport middleware support, along with various fixes and improvements.
What's New
- Adds embeddable transcript component for TUI integration
- Adds gateway model discovery to automatically populate the model picker with models served by configured gateways
- Adds HTTP transport wrapper support to inject middleware into provider clients
- Adds Shift+Tab keyboard shortcut to cycle through model thinking levels in the TUI
- Adds support for pulling agent from localhost HTTP URLs for local development
- Adds automatic Docker Desktop JWT authentication when pulling from .docker.com URLs
Improvements
- Makes theme application self-contained with ApplyThemeRef and change hooks
- Exposes read access to transcript messages for embedders
- Adds SetRoot function to re-home all agent state in one call
- Adds NewAtDir function for embedders with custom state layouts
- Centralizes tool-confirmation decision dispatch in toolconfirm
Bug Fixes
- Fixes remote MCP toolset reconnection after clean idle SSE close
- Fixes gateway discovery implementation issues
- Fixes SSE fallback when transport wrapper is set and transport=websocket
- Fixes Semgrep MCP server authentication configuration to use OAuth
Technical Changes
- Wires TransportWrapper into Bedrock provider
- Updates lint findings in TUI embedding helpers
- Adds double-check for gateway cache inside singleflight closure
- Rewrites Gemini client if-else chain as switch statement for better code quality
What's Changed
- docs: update CHANGELOG.md for v1.78.0 by @docker-read-write[bot] in #3079
- Board/tui embedding helpers by @dgageot in #3080
- feat(tui): expose read access to transcript messages by @dgageot in #3081
- fix(mcpcatalog): mark semgrep server as oauth by @trungutt in #3085
- docs: require GPG/SSH commit signing in Git Practices by @aheritier in #3087
- feat(runtime): discover gateway-served models for the model picker by @Sayt-0 in #3086
- docs: update remote MCP reconnect, thinking runtime cycling, distribution, and Go SDK docs by @aheritier in #3084
- feat: add options.WithHTTPTransportWrapper to inject HTTP middleware in provider clients by @simonferquel-clanker in #3090
Full Changelog: v1.78.0...v1.79.0