Releases: docker/cagent
v1.23.3
This release adds Docker CLI plugin support and improves TUI performance by making model reasoning checks asynchronous.
What's New
- Adds support for using cagent as a Docker CLI plugin with
docker agentcommand (no functional changes to existingcagentcommand) - Handles Windows .exe binary suffix for CLI plugin compatibility
Improvements
- Makes model reasoning support checks asynchronous to prevent TUI freezing (previously could block for up to 30 seconds)
- Threads context.Context through modelsdev store API to allow proper cancellation and deadline propagation
Technical Changes
- Renames cagent OCI annotation to
io.docker.agent.versionwhile maintaining backward compatibility with the old annotation - Updates config media type to use
docker.agent - Adds TUI general guidelines to AGENTS.md documentation
What's Changed
- Thread context.Context through modelsdev store API by @rumpl in #1747
- Rename cagent OCI annotation, keep old one by @gtardif in #1745
- docs: update CHANGELOG.md for v1.23.2 by @docker-read-write[bot] in #1746
- Move ModelSupportsReasoning calls to async bubbletea commands by @rumpl in #1749
- Allow to use cagent binary as a docker cli plugin docker-agent. No functional change for cagent command. by @gtardif in #1748
New Contributors
Full Changelog: v1.23.2...v1.23.3
v1.23.2
This release adds header forwarding capabilities for toolsets and includes several bug fixes and code improvements.
What's New
- Adds support for
${headers.NAME}syntax to forward upstream API headers to toolsets, allowing toolset configurations to reference incoming HTTP request headers
Bug Fixes
- Fixes race condition in isFirstRun using atomic file creation
- Fixes nil pointer dereference when RateLimit is present without Usage
- Fixes double-counting of session costs with cumulative usage providers
- Fixes Ctrl+K key binding conflict in session browser by reassigning CopyID to Ctrl+Y
- Fixes model selection functionality
Improvements
- Adds input validation and audit logging to shell tool
- Adds input validation and error handling to RunBangCommand
Technical Changes
- Extracts shared helpers for command-based providers to reduce code duplication
- Removes duplication from config.Resolv
- Moves GetUserSettings() from pkg/config to pkg/userconfig as Get()
- Removes redundant Reader interface from pkg/config
- Fixes leaked os.Root handle in fileSource.Read
- Makes small improvements to cmd/root
What's Changed
- docs: update CHANGELOG.md for v1.23.1 by @docker-read-write[bot] in #1727
- Fix two issues with costs by @dgageot in #1732
- Daily fixes by @dgageot in #1731
- Cleanup config code by @dgageot in #1729
- Support ${headers.NAME} syntax to forward upstream API headers to toolsets by @dgageot in #1725
- refactor(environment): extract shared helpers for command-based providers by @dgageot in #1730
- Small improvements to cmd/root by @dgageot in #1734
- fix(#1741): resolve Ctrl+K key binding conflict in session browser by @aheritier in #1742
- Fix model switcher by @dgageot in #1740
New Contributors
- @aheritier made their first contribution in #1742
Full Changelog: v1.23.1...v1.23.2
v1.23.1
This release introduces a new OpenAPI toolset for automatic API integration, task management capabilities, and several improvements to message handling and testing infrastructure.
What's New
- Adds Tasks toolset with support for priorities and dependencies
- Adds OpenAPI built-in toolset type that automatically converts OpenAPI specifications into usable tools
- Adds support for custom telemetry tags via
TELEMETRY_TAGSenvironment variable
Improvements
- Preserves line breaks and indentation in welcome messages for better formatting
- Updates documentation links to point to GitHub Pages instead of code repository
Bug Fixes
- Fixes recursive enforcement of required properties in OpenAI tool schemas (resolves Chrome MCP compatibility with OpenAI 5.2)
- Returns error when no messages are available after conversion instead of sending invalid requests
Technical Changes
- Replaces time.Sleep in tests with deterministic synchronization for faster, more reliable testing
- Refactors models store implementation
- Adds .idea/ directory to gitignore
- Removes fake models.dev and unused code
What's Changed
- docs: update CHANGELOG.md for v1.23.0 by @docker-read-write[bot] in #1714
- Tasks toolset by @rumpl in #1704
- preserve line breaks and indentation in welcome messages by @maxcleme in #1718
- Add openapi built-in toolset type by @dgageot in #1719
- return error if no messages are available after conversion by @krissetto in #1720
- fix: recursively enforce required properties in OpenAI tool schemas by @dgageot in #1710
- Replace time.Sleep in tests with deterministic synchronization by @dgageot in #1722
- Allow passing in custom tags to telemetry by @derekmisler in #1723
- Update documentation links to GitHub Pages by @lorenrh in #1726
- Speed up fallback tests by @dgageot in #1724
- Refactor models store by @dgageot in #1721
New Contributors
Full Changelog: v1.23.0...v1.23.1
v1.23.0
This release improves TUI display accuracy, enhances API security defaults, and fixes several memory leaks and session handling issues.
What's New
- Adds optional setup script support for evaluation sessions to prepare container environments before agent execution
- Adds user_prompt tools to the planner for interactive user questions
Improvements
- Makes session compaction non-blocking with spinner feedback instead of blocking the TUI render thread
- Returns error responses for unknown tool calls instead of silently skipping them
- Strips null values from MCP tool call arguments to fix compatibility with models like GPT-5.2
- Improves error handling and logging in evaluation judge with better error propagation and structured logging
Bug Fixes
- Fixes incorrect tool count display in TUI when running in --remote mode
- Fixes tick leak that caused ~10% CPU usage when assistant finished answering
- Fixes session store leak and removes redundant session store methods
- Fixes A2A agent card advertising unroutable wildcard address by using localhost
- Fixes potential goroutine leak in monitorStdin
- Fixes Agents.UnmarshalYAML to properly reject unknown fields in agent configurations
- Persists tool call error state in session messages so failed tool calls maintain error status when sessions are reloaded
Technical Changes
- Removes CORS middleware from 'cagent api' command
- Changes default binding from 0.0.0.0 to 127.0.0.1:8080 for 'cagent api', 'cagent a2a' and 'cagent mcp' commands
- Uses different default ports for better security
- Lists valid versions in unsupported config version error messages
- Adds the summary message as a user message during session compaction
- Propagates cleanup errors from fakeCleanup and recordCleanup functions
- Logs errors on log file close instead of discarding them
What's Changed
- docs: update CHANGELOG.md for v1.22.0 by @docker-read-write[bot] in #1663
- Better default security for cagent api|mcp|a2a by @dgageot in #1657
- Fix tick leak by @rumpl in #1669
- Session store cleanup by @rumpl in #1668
- eval: add optional setup script support for eval sessions by @dgageot in #1673
- Fix Agents.UnmarshalYAML to reject unknown fields by @simonferquel in #1684
- Remove redundant stdin nil check in api command by @dgageot in #1688
- Close the session by @dgageot in #1686
- Fix A2A agent card advertising unroutable wildcard address by @dgageot in #1685
- Return error response for unknown tool calls instead of silently skipping by @dgageot in #1689
- Make /compact non-blocking with spinner feedback by @dgageot in #1687
- fix: show correct tool count in TUI when running in --remote mode by @dgageot in #1648
- Add documentation gh-pages by @dgageot in #1692
- Add the summary message as a user message by @rumpl in #1693
- Add more documentation by @dgageot in #1694
- Fix MCP tool calls with gpt 5.2 by @dgageot in #1696
- Fix issues found by the review agent by @dgageot in #1699
- Bump direct Go dependencies by @dgageot in #1703
- List valid versions in unsupported config version error by @dgageot in #1700
- Improve the Planner by @dgageot in #1705
- Improve error handling and logging in evaluation judge by @dgageot in #1706
- Persist tool call error state in session messages by @trungutt in #1711
- Bump Go to 1.26.0 by @dgageot in #1697
Full Changelog: v1.22.0...v1.23.0
v1.22.0
This release enhances the chat experience with history search functionality and improves file attachment handling, along with multi-turn conversation support for command-line operations.
What's New
- Adds Ctrl+R reverse history search to the chat editor for quickly finding previous conversations
- Adds support for multi-turn conversations in
cagent exec,cagent run, andcagent evalcommands - Adds support for queueing multiple messages with
cagent run question1 question2 ...
Improvements
- Improves file attachment handling by inlining text-based files and fixing placeholder stripping
- Refactors scrollbar into a reusable scrollview component for more consistent scrolling behavior across the interface
Bug Fixes
- Fixes pasted attachments functionality
- Fixes persistence of multi_content for user messages to ensure attachment data is properly saved
- Fixes session browser shortcuts (star, filter, copy-id) to use Ctrl modifier, preventing conflicts with search input
- Fixes title generation spinner that could spin forever
- Fixes scrollview height issues when used with dialogs
- Fixes double @@ symbols when using file picker for @ attachments
Technical Changes
- Updates OpenAI schema format handling to improve compatibility
What's Changed
- docs: update CHANGELOG.md for v1.21.0 by @docker-read-write[bot] in #1649
- better file attachments by @krissetto in #1640
- OpenAI doesn't like those format indications on the schema by @dgageot in #1650
- feat: add Ctrl+R reverse history search by @Mostamhd in #1630
- Prevent title generation spinner to spin forever by @dgageot in #1645
- Refactor scrollbar into more reusable
scrollviewcomponent by @krissetto in #1654 - fix scrollview using too much height with dialogs by @krissetto in #1660
- Fix: persist multi_content for user messages by @trungutt in #1652
- fix: use ctrl modifier for session browser shortcuts to avoid search conflict by @dgageot in #1656
- Fix pasted attachments by @krissetto in #1659
- deleting version 2 so i can use permissions by @derekmisler in #1661
- Multi turn (cagent exec|run|eval) by @dgageot in #1662
Full Changelog: v1.21.0...v1.22.0
v1.21.0
This release adds a new generalist coding agent, improves agent configuration handling, and includes several bug fixes and UI improvements.
What's New
- Adds a generalist coding agent for enhanced coding assistance
- Adds OCI artifact wrapper for spec-compliant manifest with artifactType
Improvements
- Supports recursive ~/.agents/skills directory structure
- Wraps todo descriptions at word boundaries in sidebar for better display
- Preserves 429 error details on OpenAI for better error handling
Bug Fixes
- Fixes subagent delegation and validates model outputs when transfer_task is called
- Fixes YAML parsing issue with unquoted strings containing special characters like colons
Technical Changes
- Freezes config version v4 and bumps to v5
What's Changed
- docs: update CHANGELOG.md for v1.20.6 by @docker-read-write[bot] in #1634
- Support recursive ~/.agents/skills by @dgageot in #1631
- Help fix #1419 by @dgageot in #1632
- Fix subagent logic by @krissetto in #1637
- Add OCI artifact wrapper for spec-compliant manifest with artifactType by @dgageot in #1633
- unquoted strings are fine until they contain special characters like : by @derekmisler in #1641
- Wrap todo descriptions at word boundaries in sidebar by @rumpl in #1643
- Preserve 429 error details on OpenAI by @dgageot in #1647
- Freeze v4 and bump config version to v5 by @dgageot in #1635
- Add a generalist coding agent by @dgageot in #1625
- Bump Go dependencies by @dgageot in #1646
Full Changelog: v1.20.6...v1.21.0
v1.20.6
This release introduces branching sessions, model fallbacks, and automated code quality scanning, along with performance improvements and enhanced file handling capabilities.
What's New
- Adds branching sessions feature that allows editing previous messages to create new session branches without losing original conversation history
- Adds automated nightly codebase scanner with multi-agent architecture for detecting code quality issues and creating GitHub issues
- Adds model fallback system that automatically retries with alternative models when inference providers fail
- Adds skill invocation via slash commands for enhanced workflow automation
- Adds
--prompt-fileCLI flag for including file contents as system context - Adds debug title command for troubleshooting session title generation
Improvements
- Improves @ attachment performance to prevent UI hanging in large or deeply nested directories
- Switches to Anthropic Files API for file uploads instead of embedding content directly, dramatically reducing token usage
- Enhances scanner resilience and adds persistent memory system for learning from previous runs
Bug Fixes
- Fixes tool calls score rendering in evaluations
- Fixes title generation for OpenAI and Gemini models
- Fixes GitHub Actions directory creation issues
Technical Changes
- Refactors to use cagent's built-in memory system and text format for sub-agent output
- Enables additional golangci-lint linters and fixes code quality issues
- Simplifies PR review workflow by adopting reusable workflow from cagent-action
- Updates Model Context Protocol SDK and other dependencies
What's Changed
- docs: update CHANGELOG.md for v1.20.5 by @docker-read-write[bot] in #1610
- Only create a new modelstore if none is given by @rumpl in #1612
- Improve @ attachments perf by @krissetto in #1611
- [evals] Fix tool calls score rendering by @dgageot in #1613
- Added space between release links by @derekmisler in #1614
- Simplifies PR review workflow by adopting the new reusable workflow from cagent-action by @derekmisler in #1595
- Automated nightly codebase scanner by @derekmisler in #1573
- Model fallbacks by @krissetto in #1589
- Opus 4.6 by @dgageot in #1617
- Update Go deps by @dgageot in #1621
- Fix schema and add drift test by @dgageot in #1624
- Add debug title command for session title generation by @dgageot in #1622
- Add skill invocation via slash commands by @dgageot in #1623
- Enable more linters and fix existing issues by @dgageot in #1627
- Update Nightly Scan Workflow by @derekmisler in #1619
- feat: add --prompt-file CLI flag for including file contents as system context by @derekmisler in #1618
- /attach use file upload instead of embedding in the context by @jeanlaurent in #1620
- Branching sessions on message edit by @krissetto in #1578
Full Changelog: v1.20.5...v1.20.6
v1.20.5
This release improves stability for non-interactive sessions, updates the default Anthropic model to Claude Sonnet 4.5, and adds support for private GitHub repositories and standard agent directories.
What's New
- Adds support for using agent YAML files from private GitHub repositories
- Adds support for standard
.agents/skillsdirectory structure - Adds deepwiki integration to the librarian
- Adds timestamp tracking to runtime events
- Allows users to define their own default model in global configuration
Improvements
- Updates default Anthropic model to Claude Sonnet 4.5
- Adds reason explanations when relevance checks fail during evaluations
- Persists ACP sessions to default SQLite database unless specified with
--session-dbflag - Makes aliased agent paths absolute for better path resolution
- Produces session database for evaluations to enable investigation of results
Bug Fixes
- Prevents panic when elicitation is requested in non-interactive sessions
- Fixes title generation hanging with Gemini 3 models by properly disabling thinking
- Fixes current agent display in TUI interface
- Prevents TUI dimensions from going negative when sidebar is collapsed
- Fixes flaky test issues
Technical Changes
- Simplifies ElicitationRequestEvent check to reduce code duplication
- Allows passing additional environment variables to Docker when running evaluations
- Passes LLM as judge on full transcript for better evaluation accuracy
What's Changed
- docs: update CHANGELOG.md for v1.20.4 by @docker-read-write[bot] in #1577
- Fix cagent eval metric by @dgageot in #1579
- Update default anthropic model to sonnet 4.5 by @krissetto in #1580
- Support aliases to urls by @dgageot in #1581
- Bump dependencies by @dgageot in #1582
- Produce a session db for the evals by @dgageot in #1583
- Allow passing more env to docker run when running evals by @dgageot in #1585
- Fix flaky test by @dgageot in #1587
- Include reason in relevance check failures by @dgageot in #1584
- 🫡 by @krissetto in #1588
- Don't go negative in tui dimensions in collapsed sidebar by @krissetto in #1598
- Put back the sessions json. It was useful after all by @dgageot in #1597
- Add a timestamp to runtime events by @dgageot in #1590
- Fix current agent in TUI by @dgageot in #1596
- Support using agent yamls from private github repos by @dgageot in #1594
- Fix
cagent acpsession persitence by @krissetto in #1601 - cli: prevent panic when elicitation is requested in non-interactive s… by @Pnkcaht in #1567
- make aliased agent paths absolute by @krissetto in #1607
- Add deepwiki to the librarian by @dgageot in #1608
- Pass LLM as a judge on the full transcript by @dgageot in #1605
- fix: prevent title generation from hanging with Gemini 3 models by @dgageot in #1602
- Support for the
.agents/skillsstandard by @krissetto in #1609
Full Changelog: v1.20.4...v1.20.5
v1.20.4
This release improves session handling with relative references and tool permissions, along with better table rendering in the TUI.
What's New
- Adds support for relative session references in --session flag (e.g.,
-1for last session,-2for second to last) - Adds "always allow this tool" option to permanently approve specific tools or commands for the session
- Adds granular permission patterns for shell commands that auto-approve specific commands while requiring confirmation for others
Improvements
- Updates shell command selection to work with the new tool permission system
- Wraps tables properly in the TUI's experimental renderer to fit terminal width with smart column sizing
Bug Fixes
- Fixes reading of legacy sessions
- Fixes getting sub-session errors where session was not found
Technical Changes
- Adds test databases for better testing coverage
- Automatically runs PR reviewer for Docker organization members
- Exposes new approve-tool confirmation type via HTTP and ConnectRPC APIs
What's Changed
- docs: update CHANGELOG.md for v1.20.3 by @docker-read-write[bot] in #1563
- Always permissions for tools commands by @stanislavHamara in #1558
- Test older database by @dgageot in #1576
- Handle relative session references in --session flag by @vvoland in #1559
- Wrap tables properly in the TUI by @krissetto in #1564
- Automatically run PR reviewer if author is org member by @derekmisler in #1565
Full Changelog: v1.20.3...v1.20.4
v1.20.3
This release migrates PR review workflows to packaged actions and includes visual improvements to the Nord theme.
Improvements
- Migrates PR review to packaged cagent-action sub-actions, reducing workflow complexity
- Changes code fences to blue color in Nord theme for better visual consistency
Technical Changes
- Adds task rebuild when themes change to ensure proper theme updates
- Removes local development configuration that was accidentally committed
What's Changed
- Migrate PR review to packaged cagent-action sub-actions by @derekmisler in #1543
- docs: update CHANGELOG.md for v1.20.1 by @docker-read-write[bot] in #1556
- docs: update CHANGELOG.md for v1.20.2 by @docker-read-write[bot] in #1557
- Change the code fences to blue in nord by @rumpl in #1560
- task rebuild if themes change by @krissetto in #1561
- remove local dev oopsie by @krissetto in #1562
Full Changelog: v1.20.2...v1.20.3