This release adds 4 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryBroad release touches Technical Changes, What's New, Bug Fixes, and feat.
Full changelog
This release brings significant new capabilities including a safety-check hook system, TUI improvements with retry support and new slash commands, expanded hook and config features, and a large number of internal quality improvements around context threading, linting, and test performance.
What's New
- Adds
usageandcostfields to theafter_llm_callhook payload, exposing per-turn token usage and computed USD cost - Adds a
triage-prsskill for triaging open pull requests - Adds a TUI e2e test harness (
tuitest) with VCR cassette support, plus live/frame-dump debugging, mouse, and clipboard helpers - Adds a retry button to TUI error messages, allowing one-click recovery after agent turn failures
- Adds key/value
metadatafield to tool-call confirmation events, rendered in the TUI confirmation dialog - Adds
${env.X}expansion support in toolsetenvvalues (in addition to the existing${X}syntax) - Adds
triage-prsskill for automated PR classification and triage - Adds fork suffix deduplication across sibling forks so parallel forks of the same parent get unique
(fork N)suffixes - Adds tool-scoping for fork-mode skills via
allowed_toolsandtoolsetsfrontmatter fields - Adds
urlfield support in agent/commandsconfig, opening a URL in the user's default browser instead of sending a prompt - Adds
{{session_id}}expansion in URL commands - Persists agent failures as first-class
Errorsession items so errors survive session reload and appear in the TUI - Adds
instruction_filefield to agent config for referencing external instruction files - Adds
open_urlbuilt-in toolset for agents to open a configured URL in the user's default browser - Adds
preempt_yoloflag onpre_tool_usehook entries and asafer_shellbuiltin that classifies shell commands and forces confirmation for destructive operations - Adds file-based plan revisions, free-form status field, and optimistic locking to the plan toolset, including new
export_plan_to_fileandupdate_plan_from_filetools - Embeds a models.dev catalog snapshot as a binary fallback for offline/air-gapped environments
- Adds timing instrumentation to the model picker pipeline
- Adds
/feedbackand/bugslash commands to the TUI - Adds
WrapErrorslint cop to catchfmt.Errorfcalls that discard error chains - Adds constructor side-effect lint cops preventing goroutines, command execution, and network I/O in constructors
- Adds deferred mutex unlock lint cop and converts existing terminal unlocks to deferred form
- Adds
ContextConnectivitywhole-program lint cop and threads context throughout the codebase - Builtin hooks now honor
working_dirandenvfields
Improvements
- Returns 1,000,000-token context window for Claude Opus 4.6/4.7/4.8 families instead of the 200k fallback
- Reuses a single warmed models.dev store across runtime, server, and embedded-chat paths instead of warming independently per session
- Caps oversized tool result payloads (filesystem, shell, MCP, and A2A) at 2,000 lines / 50 KiB, saving the full output to a temp file
- Removes redundant agent-switch and thinking-level toast notifications whose results are already visible in the UI
- Speeds up Go test suite by ~37% with shared shims and offline fixtures
Bug Fixes
- Fixes per-model attachment capability override so custom/aliased OpenAI-compatible providers (Ollama, xai, mistral, etc.) can declare image/PDF support when absent from models.dev
- Fixes cycling thinking level in the lean TUI via Shift+Tab
- Fixes
ctrl+1–ctrl+9agent quick-switch shortcuts broken under the Kitty keyboard protocol - Fixes lock-state modifiers being incorrectly applied to
ctrl+Nagent switch - Fixes MCP OAuth token persistence in sandboxes by falling back to a file-backed keyring when the OS keyring is unavailable, using a per-install random passphrase
- Fixes data races in scroll state and session store updates
- Fixes suppression of re-emitted
UserMessageEventbeforeStreamStartedon retry - Fixes
~expansion to respect theHOMEenvironment variable before falling back toos.UserHomeDir() - Fixes DMR model selection to prefer locally pulled models and surface actionable pull errors
- Fixes recovery from corrupted partial model downloads (HTTP 416)
- Fixes URL validation before handing URLs to the OS opener
- Fixes context cancellation being passed to the browser opener (strips it before launch)
- Fixes
Tool.Metadataserialization to avoid duplicate/stale wire fields - Fixes session working directory usage in TUI so
/shellopens in the worktree directory rather than the process CWD - Fixes context-cancelled errors being cached in the model picker
- Fixes branching and cloning sessions that contain error items
Technical Changes
- Freezes config schema v10 and starts v11 as latest
- Parallelizes
build-imageCI job across native runners - Switches CI Task installation from source compilation to prebuilt binary (~51s → 1s)
- Adds
t.Parallel()to 1,216 eligible top-level tests across 165 files - Refactors
Coordinatormethods to be receiver-based, keeping package-level shims for compatibility - Extracts
buildDefaultStorefor testability and adds fallback-ordering tests - Extracts
isClaudeOpus46To48helper to deduplicate Opus matching logic - Threads context through
Runtimeinterface methods, RAG helpers, DB setup, memory initialization, sound playback, and other call paths - Uses
context.WithoutCancelfor shutdown and flush paths - Resolves proxy allowlist at dial time and caches it at construction
- Speeds up custom linters using new rubocop-go helpers
What's Changed
- feat(skills): add triage-prs skill by @aheritier in https://github.com/docker/docker-agent/pull/3249
- freeze config v10 and start v11 as latest by @dgageot in https://github.com/docker/docker-agent/pull/3248
- fix: cycle thinking level in lean tui by @rumpl in https://github.com/docker/docker-agent/pull/3246
- docs: update CHANGELOG.md for v1.88.1 by @docker-read-write[bot] in https://github.com/docker/docker-agent/pull/3251
- feat: add TUI e2e test harness by @dgageot in https://github.com/docker/docker-agent/pull/3252
- feat: add retry button to TUI error messages by @dgageot in https://github.com/docker/docker-agent/pull/3253
- fix(providers): add per-model attachment capability override (#2741) by @Sayt-0 in https://github.com/docker/docker-agent/pull/3205
- feat(server): bump fork suffix across sibling forks by @trungutt in https://github.com/docker/docker-agent/pull/3254
- ci: parallelize build-image across native runners by @dgageot in https://github.com/docker/docker-agent/pull/3258
- feat(config): accept ${env.X} in toolset env values (#2615) by @dgageot in https://github.com/docker/docker-agent/pull/3257
- feat: support URL-opening /commands in agent config by @dgageot in https://github.com/docker/docker-agent/pull/3261
- refactor(tui): remove redundant agent-switch and thinking-level toasts by @dgageot in https://github.com/docker/docker-agent/pull/3266
- feat: return 1M context for Claude Opus 4.6/4.7/4.8 families by @dgageot in https://github.com/docker/docker-agent/pull/3267
- feat: persist agent failures in the session by @dgageot in https://github.com/docker/docker-agent/pull/3259
- feat: add tool-scoping for fork-mode skills by @dgageot in https://github.com/docker/docker-agent/pull/3260
- fix(tui): restore ctrl+1..ctrl+9 agent quick-switch shortcuts by @dgageot in https://github.com/docker/docker-agent/pull/3265
- fix: persist MCP OAuth tokens in sandboxes via file-backed keyring fallback (#3037) by @dgageot in https://github.com/docker/docker-agent/pull/3255
- feat: add key/value metadata to tool-call confirmation events by @dgageot in https://github.com/docker/docker-agent/pull/3256
- docs: document URL-opening /commands and clean up /feedback and /bug by @dgageot in https://github.com/docker/docker-agent/pull/3270
- ci: install Task from prebuilt binary instead of compiling by @dgageot in https://github.com/docker/docker-agent/pull/3269
- fix(dmr): prefer local models and surface actionable pull errors by @Sayt-0 in https://github.com/docker/docker-agent/pull/3268
- feat(runtime): expose per-turn usage and cost in the after_llm_call hook payload by @kimizuka in https://github.com/docker/docker-agent/pull/2994
- feat(config): support external instruction files via instruction_file by @Sayt-0 in https://github.com/docker/docker-agent/pull/3272
- feat(plan): file-based revisions, free-form status, and optimistic locking by @Sayt-0 in https://github.com/docker/docker-agent/pull/3274
- docs(runtime): document StreamStopped ordering and teardown trade-offs (#3074) by @Sayt-0 in https://github.com/docker/docker-agent/pull/3275
- feat: add open_url built-in toolset by @dgageot in https://github.com/docker/docker-agent/pull/3276
- Remove thinking cycle notice by @rumpl in https://github.com/docker/docker-agent/pull/3280
- docs: document capabilities override and TUI error recovery by @aheritier in https://github.com/docker/docker-agent/pull/3283
- feat: reuse warmed model store, add picker timing, and fix discovery error caching by @dgageot in https://github.com/docker/docker-agent/pull/3285
- Add constructor side-effect lint cops by @dgageot in https://github.com/docker/docker-agent/pull/3289
- fix: open /shell in the session working directory (e.g. --worktree) by @dgageot in https://github.com/docker/docker-agent/pull/3286
- feat(modelsdev): embed models.dev catalog snapshot as binary fallback by @dgageot in https://github.com/docker/docker-agent/pull/3277
- lint: add WrapErrors cop by @dgageot in https://github.com/docker/docker-agent/pull/3287
- refactor: thread context throughout and enforce ContextConnectivity lint rule by @dgageot in https://github.com/docker/docker-agent/pull/3279
- feat(hooks): cap oversized tool result payloads by @rumpl in https://github.com/docker/docker-agent/pull/3290
- lint: enforce deferred mutex unlocks by @dgageot in https://github.com/docker/docker-agent/pull/3288
- Faster lint by @dgageot in https://github.com/docker/docker-agent/pull/3293
- test: speed up Go test suite by ~37% with shared shims and offline fixtures by @dgageot in https://github.com/docker/docker-agent/pull/3294
- feat: builtin hooks now honor working_dir and env by @dgageot in https://github.com/docker/docker-agent/pull/3295
- test: add t.Parallel() to eligible tests by @dgageot in https://github.com/docker/docker-agent/pull/3296
- feat: safety_check hook + safer_shell builtin by @melmennaoui in https://github.com/docker/docker-agent/pull/3273
- docs: replace stale safety_check references with preempt_yolo pre_tool_use by @dgageot in https://github.com/docker/docker-agent/pull/3297
- refactor: receiver-based Coordinator and parallel provider tests by @dgageot in https://github.com/docker/docker-agent/pull/3299
- fix(hooks): cap oversized mcp and a2a tool results by @Sayt-0 in https://github.com/docker/docker-agent/pull/3301
- chore: bump direct Go dependencies by @dgageot in https://github.com/docker/docker-agent/pull/3300
- fix: respect HOME env var when expanding ~ in paths by @Divyansh670 in https://github.com/docker/docker-agent/pull/3088
New Contributors
- @melmennaoui made their first contribution in https://github.com/docker/docker-agent/pull/3273
- @Divyansh670 made their first contribution in https://github.com/docker/docker-agent/pull/3088
Full Changelog: https://github.com/docker/docker-agent/compare/v1.88.1...v1.89.0
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Related tools
Earlier breaking changes
- v1.71.0 Freezes configuration schema v9 and starts v10 as latest version
Beta — feedback welcome: [email protected]