Skip to content

Releases: docker/docker-agent

v1.88.1

26 Jun 08:55
d5b9428

Choose a tag to compare

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-go to pull in a new whole-program, inter-procedural dataflow analysis engine and the Lint/ContextConnectivity cop
  • Updates documentation for the plan builtin toolset, the readonly attribute for toolsets and agents, and top-level shared toolsets with use_toolsets
  • Fixes tool ordering and list_plans description in plan docs; adds updatedAt to read_plan description

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

26 Jun 06:34
45bcbb2

Choose a tag to compare

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 → child for at-a-glance readability
  • Adds configurable keybindings via ~/.config/cagent/config.yaml, including remappable send/newline keys (resolves Ctrl+J conflict 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 Storage interface to the plan toolset (parity with the todo toolset), 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-level thinking_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

25 Jun 14:04
2c37d22

Choose a tag to compare

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 toolsets map to the config schema, allowing toolset definitions to be shared and referenced by name from any agent via a new use_toolsets field
  • Adds a plan builtin toolset that provides agents a shared, persistent scratchpad (write_plan, read_plan, and related tools) for multi-agent collaboration across turns
  • Adds a readonly boolean attribute to both Toolset and AgentConfig, 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 SessionID to ErrorEvent and session-aware constructors so isRootEvent correctly 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_token rejection now evicts and refreshes the token instead of burning all reconnect attempts and entering StateFailed
  • 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 BuildAuthorizationURL incorrectly 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 ScriptToolSet by sorting shellTools and tool.Args keys 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 interactivePromptsAllowed after it was renamed to InteractivePromptsAllowed

Technical Changes

  • Converts bug and feature GitHub issue templates from markdown to issue forms (.yml)
  • Makes registered theme precedence last-wins, using slices.Backward for 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

Full Changelog: v1.86.0...v1.87.0

v1.86.0

23 Jun 11:02
4bda7b3

Choose a tag to compare

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-addr flag (and CAGENT_PPROF_ADDR env var) to serve api that starts a Go pprof HTTP server at /debug/pprof/ when explicitly configured

Bug Fixes

  • Fixes OAuth Dynamic Client Registration to advertise both authorization_code and refresh_token grant 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 run sessions 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.start span 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-action to docker/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

Full Changelog: v1.85.0...v1.86.0

v1.85.0

22 Jun 07:54
545a37c

Choose a tag to compare

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

20 Jun 16:44
41e9b23

Choose a tag to compare

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.lean global 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 max effort 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, and pkg/tools/mcp no longer transitively pull in openai-go and 99designs/keyring; moves the OS-keyring-backed MCP OAuth store to its own pkg/tools/mcp/keyringstore sub-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

19 Jun 16:21
6ce5097

Choose a tag to compare

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: true flag to the shell toolset, bridging sudo password 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_result blocks for the same tool_call_id being 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_agent sub-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 max effort tier on Claude models that support it (Opus 4.7/4.8, Sonnet 4.6, Fable 5)

Technical Changes

  • Replaces external go-memoize and go-cache libraries with a new internal pkg/memoize package built on golang.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

18 Jun 09:10
d8de98b

Choose a tag to compare

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 /pause command 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_agents from the runtime loop-killer, which previously flagged it as a repeated identical call
  • Fixes delta.reasoning field 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

Full Changelog: v1.81.2...v1.82.0

v1.81.2

16 Jun 13:24
ea5c715

Choose a tag to compare

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/mcp using streamable-http transport and browser-based OAuth 2.1 authentication

What's Changed

  • feat(mcpcatalog): add Grafana Cloud remote MCP server by @dgageot in #3139

Full Changelog: v1.81.1...v1.81.2

v1.79.0

12 Jun 14:47
a2c0cc8

Choose a tag to compare

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