Releases: docker/docker-agent
v1.32.2
This release focuses on security improvements and bug fixes, including prevention of PATH hijacking vulnerabilities and fixes to environment file support.
Bug Fixes
- Fixes prevention of PATH hijacking and TOCTOU (Time-of-Check-Time-of-Use) vulnerabilities in shell/binary resolution (CWE-426)
- Fixes --env-file support for the gateway
Technical Changes
- Removes debug code from codebase
- Reverts user prompt options feature that was previously added
What's Changed
- docs: update CHANGELOG.md for v1.32.1 by @docker-read-write[bot] in #2084
- fix: prevent PATH hijacking and TOCTOU in shell/binary resolution by @dgageot in #2083
- Remove debug code by @dgageot in #2086
- Fix --env-file support for the gateway by @dgageot in #2085
- Revert "Add options-based selection to user_prompt tool" by @trungutt in #2088
Full Changelog: v1.32.1...v1.32.2
v1.32.1
This release fixes several issues with session handling, tool elicitation, and MCP environment variable validation.
Bug Fixes
- Fixes corrupted session history by filtering sub-agent streaming events from parent session persistence
- Fixes elicitation requests failing in sessions with ToolsApproved=true by decoupling elicitation channel from ToolsApproved flag
- Fixes MCP environment variable validation being skipped when any gateway preflight errors occur
Improvements
- Prevents sidebar from scrolling to top when clicking navigation links in documentation
Technical Changes
- Adds end-to-end test for tool result block validation
- Updates CHANGELOG.md for v1.32.0 release
What's Changed
- docs: update CHANGELOG.md for v1.32.0 by @docker-read-write[bot] in #2072
- Don't scroll sidebar to the top by @dgageot in #2076
- Fix corrupted session history by @dgageot in #2077
- Fix MCP env var check skipped when any gateway preflight errors by @dgageot in #2081
- fix: decouple elicitation channel from ToolsApproved flag by @dgageot in #2080
Full Changelog: v1.32.0...v1.32.1
v1.32.0
This release adds support for newer Gemini models, improves toolset documentation, and enhances user interaction capabilities.
What's New
- Adds options-based selection to user_prompt tool, allowing the agent to present users with labeled choices instead of free-form input
- Documents {ORIGINAL_INSTRUCTIONS} placeholder for enriching toolset instructions rather than replacing them
Bug Fixes
- Fixes support for Gemini 3.x versioned models (e.g., gemini-3.1-pro-preview) to ensure proper model recognition and thinking configuration
- Fixes gateway handling when using docker agent without a command
- Fixes broken links in documentation
Technical Changes
- Adds check for broken links in CI
- Updates .gitignore to exclude cagent-* binaries from being committed
What's Changed
- docs: update CHANGELOG.md for v1.31.0 by @docker-read-write[bot] in #2063
- doc: document {ORIGINAL_INSTRUCTIONS} placeholder for toolset instructions by @dgageot in #2062
- fix: support Gemini 3.x versioned models (e.g., gemini-3.1-pro-preview) by @dgageot in #2054
- Fix gateway handling with docker agent without command by @dgageot in #2064
- Fix broken links by @dgageot in #2067
- gitignore cagent-* binaries by @derekmisler in #2069
- Check for broken links by @dgageot in #2068
- Add options-based selection to user_prompt tool by @trungutt in #2071
Full Changelog: v1.31.0...v1.32.0
v1.31.0
This release enhances the cost dialog with detailed session statistics and improves todo tool reliability for better task completion tracking.
What's New
- Adds total token count, session duration, and message count to cost dialog
- Adds reasoning tokens display for supported models (e.g. o1)
- Adds average cost per 1K tokens and per message metrics to cost analysis
- Adds cost percentage breakdown per model and per message
- Adds cache hit rate and per-entry cached token count display
Improvements
- Improves todo tool reliability by reminding LLM of incomplete items and including full state in all responses
Bug Fixes
- Fixes Sonnet model name
- Fixes various edge-case bugs in cost dialog formatting
Technical Changes
- Adds cache to building hub image in CI
- Optimizes CI by building and testing Go on the same runner to avoid duplicate compilation
- Freezes config to v6
- Deduplicates tool documentation into individual pages
- Adds docs-serve task for local Jekyll preview via Docker
What's Changed
- docs: update CHANGELOG.md for v1.30.1 by @docker-read-write[bot] in #2050
- Add cache to building hub image in CI by @gtardif in #2037
- cost dialog: enrich with session stats, per-model percentages, and formatting fixes by @dgageot in #2046
- Fix sonnet model name by @dgageot in #2052
- fix: improve todo completion reliability by @trungutt in #2048
- Freeze config v6 by @dgageot in #2059
- Improve the toolsets documentation by @dgageot in #2056
Full Changelog: v1.30.1...v1.31.0
v1.30.1
This release improves command history handling, adds sound notifications, and includes various bug fixes and performance optimizations.
What's New
- Adds sound notifications for long-running tasks and errors (opt-in feature, disabled by default)
- Adds LSP multiplexer to support multiple LSP toolsets simultaneously
- Adds per-toolset model routing via model field on toolsets configuration
- Adds click-to-copy functionality for working directory in TUI sidebar
- Makes background_agents a standalone toolset that can be enabled independently
Improvements
- Improves tmux experience with better keyboard enhancements and focus handling
- Optimizes BM25 scoring strategy for better performance
- Reduces redundant work during evaluation runs
- Fixes animated spinners inside terminal multiplexers
- Repaints terminal on focus to fix broken display after tab switch in Docker Desktop
Bug Fixes
- Fixes loading very long lines in command history that previously caused crashes
- Fixes LSP server being killed by context cancellation and restart failures
- Fixes session-pinned agent usage in RunStream instead of shared currentAgent
- Fixes sidebar context percentage flickering during sub-agent transfers
- Fixes concurrent map writes by moving registerDefaultTools to constructor
- Returns clear error when OPENAI_API_KEY is missing for speech-to-text
Technical Changes
- Splits monolithic runtime.go into focused files by concern
- Refactors code to use slices and maps stdlib functions instead of manual implementations
- Enables modernize and perfsprint linters with all findings resolved
- Migrates tool output to structured JSON schemas for todo tools
- Replaces json.MarshalIndent with json.Marshal in builtin tools
- Uses errors.AsType consistently instead of errors.As with pre-declared variables
What's Changed
- Don't ignore GITHUB_TOKEN by @dgageot in #2002
- history: Fix loading very long lines by @vvoland in #1940
- docs: update CHANGELOG.md for v1.30.0 by @docker-read-write[bot] in #2003
- Fix broken links to pages subsections by @gtardif in #2005
- feat: add sound notifications for task completion and errors by @Mostamhd in #1870
- Add LSP multiplexer to support multiple LSP toolsets by @dgageot in #1970
- fix(#2012): Return clear error when OPENAI_API_KEY is missing for speech-to-text by @aheritier in #2013
- Bump direct Go dependencies by @dgageot in #2011
- Fix LSP server killed by context cancellation and restart failures by @dgageot in #2008
- Replace duplicated mockEnvProvider test types with shared environment providers by @dgageot in #2014
- fix: use session-pinned agent in RunStream instead of shared currentAgent by @dgageot in #2009
- docs: fix hallucinated CLI flags, commands, and config formats by @dgageot in #2020
- refactor: use slices and maps stdlib functions instead of manual implementations by @dgageot in #2021
- refactor(anthropic): deduplicate sequencing, media-type, and test helpers by @dgageot in #2019
- refactor: split runtime.go and extract pkg/modelerrors by @dgageot in #2010
- tui: improve tmux experience and simplify keyboard enhancements by @dgageot in #2017
- codemode: fix Start() fail-fast and use tools.As for wrapper unwrapping by @dgageot in #2007
- Simplify rulebased router: remove redundant types and score aggregation by @dgageot in #2016
- Unify streamAdapter/betaStreamAdapter retry logic into generic retryableStream by @dgageot in #2018
- Fix task deploy-local by @dgageot in #2024
- fix: default sound notifications to off (opt-in) by @dgageot in #2025
- feat: add per-toolset model routing via model field on toolsets by @dgageot in #2015
- refactor: use errors.AsType consistently instead of errors.As with pre-declared variables by @dgageot in #2028
- tui: repaint terminal on focus to fix broken display after tab switch by @dgageot in #2026
- Enable modernize and perfsprint linters, fix all findings by @dgageot in #2027
- update Slack link in readme by @derekmisler in #2032
- Replace json.MarshalIndent with json.Marshal in builtin tools by @dgageot in #2031
- refactor(dmr): split client.go into focused files by concern by @dgageot in #2029
- Fix last brew install cagent mention by @gtardif in #2034
- tui: fix animated spinners inside terminal multiplexers by @dgageot in #2035
- refactor(runtime): split monolithic runtime.go into focused files by @dgageot in #2030
- feat: click to copy working directory in TUI sidebar by @dgageot in #2036
- Use ResultSuccess/ResultError helpers in tasks and user_prompt tools by @dgageot in #2040
- fix: move registerDefaultTools to constructor to prevent concurrent map writes by @dgageot in #2041
- Fix sidebar context % flickering during sub-agent transfers by @dgageot in #2042
- eval: reduce redundant work during evaluation runs by @dgageot in #2047
- perf: optimize BM25 scoring strategy by @dgageot in #2043
- refactor: remove duplication in model resolution, thinking budget, and message construction by @dgageot in #2038
- feat: make background_agents a standalone toolset by @dgageot in #2033
- todo: migrate tool output to structured JSON schemas by @dgageot in #2045
Full Changelog: v1.30.0...v1.30.1
v1.30.0
This release introduces file drag-and-drop support, background agent tasks, and completes the transition from "cagent" to "docker-agent" branding throughout the codebase.
What's New
- Adds file drag-and-drop support for images and PDFs with visual file type indicators and 5MB size limit per file
- Adds background agent task tools (
run_background_agent,list_background_agents,view_background_agent,stop_background_agent) for concurrent sub-agent dispatch - Adds
--sandboxflag to run command for Docker sandbox isolation - Adds model_picker toolset for dynamic model switching between LLM models mid-conversation
- Adds search, update, categories, and default path functionality to memory tool
- Adds MiniMax as a built-in provider alias with
MINIMAX_API_KEYsupport - Adds top-level
mcpssection for reusable MCP server definitions in agent configs - Adds support for OCI/catalog and URL references as sub-agents and handoffs
Improvements
- Auto-continues max iterations in
--yolomode instead of prompting - Improves toolset error reporting to show specific toolset information
- Improves user_prompt TUI dialog with title, free-form input, and navigation
- Auto-pulls DMR models in non-interactive mode
- Animates window title while working for tmux activity detection
- Supports comma-separated string format for allowed-tools in skills
Bug Fixes
- Fixes thread blocking when attachment file is deleted
- Fixes max iterations handling in JSON output mode
- Fixes text to speech on macOS
- Fixes context window overflow with auto-recovery and proactive compaction
- Fixes data races in Session Messages slice and test functions
- Fixes SSE streaming by disabling automatic gzip compression
- Applies ModifiedInput from pre-tool hooks to tool call arguments
Technical Changes
- Completes rename from "cagent" to "docker-agent" throughout codebase, documentation, and repository URLs
- Supports both
DOCKER_AGENT_*and legacyCAGENT_*environment variables - Removes
--exit-on-stdin-eofflag and ConnectRPC code - Adds timeouts to shutdown contexts to prevent goroutine leaks
- Extracts TodoStorage interface with in-memory implementation
- Refactors listener lifecycle to return cleanup functions
- Updates Dockerfile to use docker-agent binary with cagent as compatible symlink
What's Changed
- docs: update CHANGELOG.md for v1.29.0 by @docker-read-write[bot] in #1909
- Bump Go dependencies by @dgageot in #1913
- update taskfile to build both images docker/cagent and docker/docker-agent by @gtardif in #1916
- Remove --exit-on-stdin-eof by @dgageot in #1918
- Rename env vars CAGENT_ to DOCKER_AGENT_ (keep support for old env vars) by @gtardif in #1917
- agent: Improve toolset error reporting by @vvoland in #1914
- Nightly scanner should be less nit-picky about docs by @derekmisler in #1921
- Update docs and samples to rename docker-agent, change usage samples to
docker agentby @gtardif in #1915 - Simplify the AGENTS.md a LOT by @dgageot in #1923
- Fix a few issues in the docs by @dgageot in #1924
- docs: remove generated pages/ from git tracking by @dgageot in #1927
- Fix speech to text on macOS by @dgageot in #1922
- More docs rename (in / docs), fix remaining
docker agent serve a2a/acp/mcpby @gtardif in #1928 - Fix test by @dgageot in #1929
- Fix #1911 by @dgageot in #1931
- Validate yaml in doc by @dgageot in #1932
- Fix a few race conditions seen in tests by @dgageot in #1930
- Fix broken links in docs pages, were not using relative urls by @gtardif in #1939
- Rename CAGENT_HIDE_TELEMETRY & CAGENT_EXP_DEBUG_LAYOUT. Still support old env vars by @gtardif in #1926
- Teach the agent to work with our config versions by @dgageot in #1938
- Improve pkg/js by @dgageot in #1933
- Improve README by @dgageot in #1936
- Add model_picker toolset for dynamic model switching by @dgageot in #1937
- cagent run --sandbox by @dgageot in #1904
- Support auto-downloading tools by @dgageot in #1925
- Leverage latest MCP spec features from go-sdk v1.4.0 by @dgageot in #1955
- bump google.golang.org/adk from v0.4.0 to v0.5.0 by @dgageot in #1954
- Animate window title while working for tmux activity detection by @dgageot in #1949
- Fix listener resource leaks in serve commands by @dgageot in #1945
- Show the new TUI by @dgageot in #1942
- Auto-pull DMR models in non-interactive mode by @dgageot in #1944
- Improve user_prompt TUI dialog: title, free-form input, and navigation by @dgageot in #1943
- Improve sub-sessions usage by @dgageot in #1941
- Add MiniMax as a built-in provider alias by @dgageot in #1948
- Bump go dependencies by @dgageot in #1953
- Rename repo URL and pages URL by @gtardif in #1957
- Support OCI/catalog and URL references as sub-agents and handoffs by @dgageot in #1946
- Improve docs search by @dgageot in #1959
- Use docker agent command by @dgageot in #1958
- todo: extract storage interface with in-memory implementation by @rumpl in #1960
- docker-agent is primary binary in taskfile by @gtardif in #1961
- Add top-level mcps section for reusable MCP server definitions by @dgageot in #1947
- A few more renames from cagent by @dgageot in #1962
- Some more cagent urls by @gtardif in #1964
- fix(cli): auto-continue max iterations in --yolo mode by @frntn in #1737
- fix(editor): prevent thread block when attachment file is deleted by @Pnkcaht in #1736
- Fix main branch by @dgageot in #1968
- feat: add file drag-and-drop support for images and PDFs by @ambigois in #1658
- Add background agent task tools for concurrent sub-agent dispatch (#863) by @jfrey in #1908
- fix(hooks): apply ModifiedInput from pre-tool hooks to tool call arguments by @aheritier in #1950
- Add timeouts to shutdown contexts to prevent goroutine leaks by @dgageot in #1965
- Update winget workflow to modify Docker.Agent package, with the new GH repo name by @gtardif in #1972
- updated GHA with new checks:write permission by @derekmisler in #1974
- Disable automatic gzip compression to fix SSE streaming by @dgageot in #1967
- Fix cobra command and rename more things from cagent to docker agent by @dgageot in #1979
- Support comma-separated string for allowed-tools in skills by @dgageot in #1984
- Fix documentation by @dgageot in #1983
- Fix model name by @dgageot in #1991
- Fix gopls versions by @dgageot in #1988
- Daily fixes by @dgageot in #1990
- auto-complete tests by @gtardif in #1989
- Dockerfile with docker-agent binary, keeping cagent only as compatible symlink by @gtardif in #1992
- Rename cagent in eval by @gtardif in #1993
- Fix documentation by @dgageot in #1995
- More renames from cagent to docker-agent by @dgageot in #1994
- Rename e2e test files by @dgageot in #1997
- Remove useless documentation by @dgageot in #1998
- Remove ConnectRPC code by @dgageot in #1996
- Add search, update, categories, and default path to memory tool by @nunocoracao in #1971
- More renames by @dgageot in #1999
- Fix context window overflow: auto-recovery and proactive compacti...
v1.29.0
This release adds automated issue triage capabilities and new CLI configuration options for directory overrides.
What's New
- Adds auto issue triage workflow that automatically evaluates bug reports and can create fix PRs
- Adds
--config-dir,--data-dir, and--cache-dirglobal CLI flags to override default paths
Bug Fixes
- Fixes result marker parsing in auto-issue-triage workflow to handle LLM output with trailing empty lines
- Fixes GitHub Pages deployment issues
Technical Changes
- Updates nightly scanner documentation and configuration
- Removes draft status from PR creation workflow steps
- Adds tip about the default agent in documentation
What's Changed
- docs: update CHANGELOG.md for v1.28.1 by @docker-read-write[bot] in #1902
- Fix the github pages? by @dgageot in #1903
- Fix GitHub pages deployment by @dgageot in #1901
- feat: add auto issue triage workflow by @derekmisler in #1888
- Replace the brittle tail -n 1 parsing with something that searches for the marker by @derekmisler in #1905
- Add tip about the default agent by @dgageot in #1906
- Add --config-dir and --data-dir global CLI flags to override default paths by @dgageot in #1907
Full Changelog: v1.28.1...v1.29.0
v1.28.1
This release adds image support for AI agents, improves cross-platform compatibility, and includes various stability fixes.
What's New
- Adds image support to read_file tool and MCP tool results, allowing agents to view and describe images
- Adds content-based MIME detection and automatic image resizing for vision capabilities
- Strips image content for text-only models using model capabilities detection
Improvements
- Reduces builtin tool prompt lengths while preserving key examples for better performance
- Skips hidden directories in recursive skill loading to avoid walking large trees like .git and .node_modules
- Only uses insecure TLS for localhost OTLP endpoints for better security
Bug Fixes
- Fixes Esc key not interrupting sub-agents in multi-agent sessions
- Fixes slice bounds out of range panic for short JWT tokens
- Fixes goroutine tight loop in LSP readNotifications
- Fixes race condition with elicitation events channel
- Avoids looping forever on symlinks during skill loading
- Handles json.Marshal errors for tool Parameters and OutputSchema
Technical Changes
- Replaces syscall.Rmdir with golang.org/x/sys for cross-platform directory removal
- Removes per-chunk UpdateMessage debug log from SQLite store to reduce log noise
- Stops tool sets for team loaded in GetAgentToolCount
- Migrates GitHub pages to markdown with Jekyll
What's Changed
- docs: update CHANGELOG.md for v1.28.0 by @docker-read-write[bot] in #1892
- Replace syscall.Rmdir with golang.org/x/sys for cross-platform directory removal by @rumpl in #1885
- Remove per-chunk UpdateMessage debug log by @trungutt in #1896
- Fixes to the documentation by @dgageot in #1893
- Pushes docker/docker-agent next to docker/cagent hub image by @gtardif in #1897
- Reduce builtin tool prompt lengths while preserving key examples by @dgageot in #1879
- Daily fixes of the bot-detected issues by @dgageot in #1895
- Skip hidden directories in recursive skill loading by @dgageot in #1875
- 👀 Vision 👀 by @rumpl in #1889
- Migrate our GitHub pages to markdown, with Jekyll by @dgageot in #1900
- fix: Esc key not interrupting sub-agents in multi-agent sessions by @dgageot in #1899
Full Changelog: v1.28.0...v1.28.1
v1.28.0
This release improves authentication debugging, session management, and MCP server reliability, along with UI enhancements to the command palette.
What's New
- Adds 'debug auth' command to inspect Docker Desktop JWT with optional JSON output
- Adds automatic retry functionality for all models, including those without fallbacks
Improvements
- Improves MCP server lifecycle with caching and auto-restart capabilities using exponential backoff
- Sorts command palette actions alphabetically within each group
- Uses tea.View.ProgressBar instead of raw escape codes for better display
Bug Fixes
- Fixes session derailment by preserving user messages during conversation trimming
- Fixes duplicate Session header in command palette on macOS
- Fixes mcp/notion not working with OpenAI models by properly walking additionalProperties in schemas
- Defaults to string type for script tool arguments when type is not specified
Technical Changes
- Updates tool filtering documentation
- Updates CHANGELOG.md for v1.27.1
- Updates Charm libraries to stable v2.0.0 releases (bubbletea, bubbles, lipgloss)
What's Changed
- docs: update CHANGELOG.md for v1.27.1 by @docker-read-write[bot] in #1862
- Fix
mcp/notionnot working with OpenAI models by @vvoland in #1871 - Fix script args with DMR by @dgageot in #1859
- Add 'debug auth' command to inspect Docker Desktop JWT by @dgageot in #1861
- Improve MCP server lifecycle: caching and auto-restart by @dgageot in #1872
- fix(#1863): preserve user messages in trimMessages to prevent session derailment by @aheritier in #1864
- Improve tool filtering doc by @dgageot in #1874
- Improve Commands dialog by @dgageot in #1877
- Bump dependencies by @dgageot in #1876
- Add retries even for models without fallbacks by @rumpl in #1886
Full Changelog: v1.27.1...v1.28.0
v1.27.1
This release improves the user interface experience with better message editing capabilities and fixes several issues with token usage tracking and session loading.
What's New
- Adds
on_user_inputhook that triggers when the agent is waiting for user input or tool confirmation
Improvements
- Improves multi-line editing of past user messages
- Adds clipboard paste support during inline message editing
- Makes loading past sessions faster
- Updates TUI display when the current agent changes
Bug Fixes
- Fixes token usage being recorded multiple times per stream, preventing inflated telemetry counts
- Fixes empty inline edit textarea expanding to full height
- Fixes docker ai shellout to cagent for standalone invocations
Technical Changes
- Updates schema tests to only run for latest version
- Fixes documentation issues
What's Changed
- docs: update CHANGELOG.md for v1.27.0 by @docker-read-write[bot] in #1846
- Repaint the TUI when the current agent changes by @dgageot in #1845
- fix: record token usage once per stream to prevent inflated telemetry by @dgageot in #1855
- Make loading past sessions faster by @dgageot in #1854
- Improve editing past user messages by @dgageot in #1850
- Schema tests should be only for latest version by @dgageot in #1857
- feat(hooks): add on_user_input by @doringeman in #1847
- Fix doc by @dgageot in #1858
- Fix docker ai shellout to cagent by @gtardif in #1860
New Contributors
- @doringeman made their first contribution in #1847
Full Changelog: v1.27.0...v1.27.1