Releases: docker/docker-agent
Release list
v1.103.0
This release polishes the agent picker UI, adds context-usage gauge warning states, improves config handling, and expands sandbox template tooling.
What's New
- Adds warning and compacting states to the context-usage gauge: color escalates (orange ≥75%, red ≥95%) as usage approaches the auto-compaction threshold, and displays "compacting…" while a compaction runs (applies to both the main TUI sidebar and lean TUI status line)
- Installs the latest
docker-mcpplugin in the sandbox template image so agents running in that environment have MCP tooling available out of the box - Adds a hint when a config key requires a newer schema version, guiding users to bump the top-level
versionfield instead of seeing a generic "unknown key" error - Adds
WithModelOptionspassthrough inteamloaderfor provider-agnostic HTTP transport wrapping
Bug Fixes
- Fixes config parsing failure when a hook event list is written as a single mapping instead of a sequence, which previously caused aliases and settings to be silently dropped
Technical Changes
- Refactors agent picker status bars to use
dialog.RenderHelpKeys, removing duplicated key-rendering logic - Extracts
fitHelpPairsand adds regression tests for details help wrapping - Polishes agent picker visuals: more compact cards (height 7 → 5) and tightened layout
- Simplifies the Dockerfile
What's Changed
- docs: update CHANGELOG.md for v1.102.0 by @docker-read-write[bot] in #3541
- docs: sync documentation with recent code changes by @aheritier in #3544
- style(tui): polish agent picker layout, cards, and status bars by @dgageot in #3543
- feat: install latest docker-mcp plugin in sbx template by @dgageot in #3545
- fix(config): accept a single mapping for hook event lists by @Sayt-0 in #3546
- feat(teamloader): add WithModelOptions passthrough for provider-agnostic HTTP transport wrapping by @simonferquel-clanker in #3549
- feat(config): hint when a config key requires a newer schema version by @dgageot in #3550
Full Changelog: v1.102.0...v1.103.0
v1.102.0
This release brings significant enhancements to the Kanban board (drag & drop, card management, shell access, sandbox fixes), a new ChatGPT provider, TUI layout customization, and numerous stability and usability fixes across the board, session management, and copy/paste experience.
What's New
- Adds a
chatgptprovider enabling sign-in with a ChatGPT Plus/Pro/Business account viadocker agent setup, without requiring anOPENAI_API_KEY - Adds
/customslash command to open a layout customization dialog for sidebar position and section visibility, with live preview and persistent settings - Adds a Section spacing selector to the
/customlayout dialog (Compact / Normal / Relaxed) - Adds warning and compacting states to the context-usage gauge, escalating color as usage approaches the compaction threshold and showing "compacting..." during compaction
- Adds
sshortcut on the board to open an interactive shell in the selected card's worktree - Adds digit keys 1–9 to move a board card directly to a numbered column, and adds mouse drag & drop to reposition cards
- Adds drag ghost preview showing where a dragged card will be inserted in the drop-target column
- Adds intermediate startup statuses (
starting→loading→attaching) on board cards to show boot progress - Adds project editing and reordering on the board: press
eor Enter on a project to rename it, with confirm-delete for destructive removals - Adds desktop notifications with hooks tip to the documentation, covering macOS and Linux examples for
on_user_inputandstopevents
Improvements
- Aligns TUI board card colors with the web board's status palette;
starting/loading/attachingrender in blue,runningin green, andpausedin a neutral color - Fades the dragged card immediately on the first mouse motion during a drag, providing instant visual feedback
- Clarifies the dirty-worktree removal prompt by listing the consequences of
yandNon separate lines before asking the question - Improves command categories in the help output
- Documents env vars needed for
notify-sendhooks in detached sessions (SSH, tmux, containers)
Bug Fixes
- Fixes board agent startup failures being silently discarded, leaving cards stuck in "starting" forever; failures are now surfaced on the card
- Fixes board control-plane sockets being placed inside the data dir, which prevented cards from starting in Docker sandboxes; sockets are now placed in the system temp dir
- Fixes board storing absolute paths that broke shared state in sandboxes; paths are now stored home-relative
- Fixes board not forwarding
--config-dir,--data-dir, and--cache-diroverrides to spawned agents - Fixes board path expansion, state load, and git repo check edge cases
- Fixes stale drag state and ignores wheel events mid-drag on the board
- Fixes a race condition where
RunSession/recallSessionclobbered the attached runtime's cancel, causingDeleteSessionto abort in-flight streams incorrectly - Fixes session DB being reset on transient open errors (e.g. Ctrl-C,
SQLITE_BUSY), which could silently wipe access to all past sessions - Fixes SQLite memory database opening before acquiring the advisory file lock, causing
SQLITE_BUSYraces under concurrent access - Fixes TUI selection copy being unreliable (random one-word copies, trailing padding, UI glyphs in clipboard) and improves copy button affordances
- Fixes redundant copy toast appearing alongside the inline "copied" flash when clicking a copy button
- Fixes emphasized text (e.g. "Esc to interrupt") being invisible on light themes due to incorrect color mapping
- Fixes global config file management: resolves a TUI panic on malformed config and several silent data-loss paths in the load/save cycle
- Fixes DNS resolution happening at construction time in
NewSSRFSafeTransport, which could slow agent startup or fail silently when DNS is unavailable - Fixes board reporting why a relaunch failed when attaching to an errored card, and drops per-card controller state without racing in-flight relaunches
- Fixes docs table of contents sidebar overlapping the footer on long pages by switching from
position:fixedtoposition:sticky
Technical Changes
- Renames
$BOARD_EDITORenvironment variable to$DOCKER_AGENT_BOARD_EDITOR; the old name is kept as a fallback for one release - Folds the ChatGPT sign-in flow into
docker agent setuprather than a separate command - Removes the agent catalog example from documentation
- Adds a lint rule flagging DNS resolution (
net.Lookup*/Resolver.Lookup*) in constructors
What's Changed
- docs: update CHANGELOG.md for v1.101.0 by @docker-read-write[bot] in #3506
- chore: bump direct Go dependencies by @dgageot in #3507
- fix(board): surface agent startup failures instead of silently doing nothing by @dgageot in #3508
- feat(tui): add /custom command to customize layout by @Sayt-0 in #3509
- fix(board): store paths home-relative so shared state works in sandboxes by @dgageot in #3510
- chore(board): rename $BOARD_EDITOR to $DOCKER_AGENT_BOARD_EDITOR by @dgageot in #3514
- feat(board): edit, reorder, and confirm-delete projects by @dgageot in #3513
- fix(board): run agent control-plane sockets outside the data dir so cards start in docker sandboxes by @dgageot in #3515
- feat(board): show intermediate startup statuses on cards by @dgageot in #3516
- feat(board): add
sshortcut to open a shell in the card's worktree by @dgageot in #3517 - fix(board): forward directory overrides to spawned agents by @dgageot in #3518
- fix(board): clarify dirty-worktree removal prompt with explicit consequences by @dgageot in #3520
- feat(board): align TUI card colors with web board status palette by @dgageot in #3521
- feat(board): move cards to any column with digit keys and drag & drop by @dgageot in #3522
- docs: sync documentation with recent main merges by @aheritier in #3519
- Improve the command categories by @dgageot in #3523
- feat(board): fade dragged card immediately and fix stale drag state by @dgageot in #3524
- fix: don't clobber attached runtime's cancel in RunSession/recallSession by @dgageot in #3525
- docs: add desktop notifications with hooks tip by @dgageot in #3526
- feat(provider): add chatgpt provider with ChatGPT account sign-in by @Sayt-0 in #3512
- fix(docs): switch .toc-aside from position:fixed to sticky in flex .main row by @dgageot in #3527
- fix(userconfig): harden global config file management by @Sayt-0 in #3529
- fix(tui): unreadable emphasized text on light themes by @Sayt-0 in #3530
- docs: document env vars for notify-send hooks in detached sessions by @Sayt-0 in #3531
- feat(board): preview the dragged card at its insertion point by @dgageot in #3532
- feat(tui): add section spacing setting to /custom layout dialog by @Sayt-0 in #3533
- fix(session): don't reset the session DB on transient open errors by @dgageot in #3534
- fix(tui): make selection copy reliable and improve copy affordances by @Sayt-0 in #3535
- fix(memory): open sqlite db under file lock to avoid SQLITE_BUSY races by @dgageot in #3538
- feat(tui): add warning/compacting states to the context-usage gauge by @Sayt-0 in #3537
- fix(tui): drop the redundant copy toast when the inline "copied" flash shows by @dgageot in #3539
- fix(ssrf): avoid DNS resolution at construction time in NewSSRFSafeTransport by @dgageot in #3540
Full Changelog: v1.101.0...v1.102.0
v1.101.0
This release adds a setup wizard for first-time model configuration, an opt-in auto theme that follows the terminal's light/dark background, and several usability and bug fixes.
What's New
- Adds an
Open Boardbutton (andbkeybinding) to the agent picker, allowing users to launch the Kanban board directly without first running an agent - Adds a
docker agent setupwizard, offered when no usable model is configured, guiding users through setting up a cloud API key or pulling a local model - Adds secret stores and a default config environment file source for environment configuration
- Adds an opt-in
autotheme that follows the terminal's light/dark background at startup and live (viasettings.theme: auto,--theme auto, or the/thememenu) - Exports
Pullfor pre-confirmed model pulls in the Docker Model Runner integration
Bug Fixes
- Fixes the agent picker's board button hit-zone math and improves layout on narrow terminals
- Fixes
--session-dbdefault so it correctly resolves relative to--data-dir, making sessions stored under a custom data directory visible - Fixes the theme file watcher that was lost in the tab-view rewrite, restoring live hot-reload of
~/.cagent/themes/*.yamlwhile the TUI is running
Technical Changes
- Adds a "Set Up a Model" getting-started tutorial covering both API key and local model setup paths
- Adds session DB wiring tests and documentation follow-ups for the setup wizard
What's Changed
- docs: update CHANGELOG.md for v1.100.0 by @docker-read-write[bot] in #3497
- feat(picker): add Open Board button to the agent picker by @dgageot in #3498
- feat(cli): add docker agent setup wizard, offered when no model is usable (phase 3 of #3442) by @Sayt-0 in #3499
- docs(getting-started): add Set Up a Model tutorial for API key and local paths by @Sayt-0 in #3502
- fix(cli): resolve session DB default against the data dir by @dgageot in #3503
- feat(tui): opt-in "auto" theme that follows the terminal light/dark background by @Sayt-0 in #3504
- fix(tui): rewire theme watcher lost in tab-view rewrite by @Sayt-0 in #3505
Full Changelog: v1.100.0...v1.101.0
v1.100.0
This release adds new diagnostic and configuration capabilities, hardens the board communication protocol, and improves error messaging for missing models and credentials.
What's New
- Adds
docker agent doctorcommand for diagnosing model provider credentials and agent readiness - Adds actionable errors when models or credentials are missing, with guidance on next steps
- Adds
hooks.ddrop-in directory (<config-dir>/hooks.d/*.yaml) andDOCKER_AGENT_CONFIG_DIRenvironment variable override for config directory - Adds heartbeat idle watchdog to abort hung event streams in
docker agent board - Adds session aggregate cost reporting to
GET /snapshot - Adds machine-readable error codes to 404 responses for unknown session snapshots
- Adds heartbeat keepalives to idle
/eventsSSE streams
Bug Fixes
- Fixes turn-boundary events being silently dropped when a subscriber's buffer overflows
Technical Changes
- Extracts lean TUI engine into a separate package and reorganizes UI components (status models, inline images, tool views, transcript, screen model) into a dedicated UI layer
- Adds documentation for
docker agent boardCLI reference and actionable model/credential errors in troubleshooting guide - Adds tmux usage guidance for running
docker agent boardin a sandbox environment
What's Changed
- docs: update CHANGELOG.md for v1.99.0 by @docker-read-write[bot] in #3487
- feat(cli): actionable errors for missing models and credentials (phase 1 of #3442) by @Sayt-0 in #3452
- feat(cli): add docker agent doctor for model and credential diagnosis by @Sayt-0 in #3489
- Lean tui UI split by @rumpl in #3492
- feat: harden control-plane protocol for reliable board communication by @dgageot in #3491
- docs: update CLI reference and troubleshooting for board and actionable errors by @aheritier in #3494
- Add tmux or running docker agent board in sbx by @dgageot in #3495
- feat: hooks.d drop-in directory and config-dir env override by @Sayt-0 in #3496
Full Changelog: v1.99.0...v1.100.0
v1.99.0
This release adds significant new capabilities including a Kanban board TUI, NVIDIA provider support, parallel tool dispatch, and numerous compaction and context-window improvements, along with several important bug fixes.
What's New
- Adds
docker agent board, a full-screen Kanban TUI for orchestrating multiple agents across pipeline stages (Dev → Review → Push → Done), each on an isolated git worktree - Adds NVIDIA (NIM / build.nvidia.com) as a supported model provider via a new
nvidiaalias - Adds
/contextslash command with a categorized context-window breakdown dialog, including a stacked usage bar and copy-to-clipboard action - Adds the ability to list and drop attached files directly from the
/contextdialog - Adds
wait_background_jobtool to the shell toolset, blocking until a background job finishes instead of requiring polling - Adds shell background job recall, routing completed job output back to active or idle sessions
- Splits background jobs into a separate
background_jobstoolset, leaving the shell toolset with only synchronous shell tools - Adds
unix://URL support in the remote MCP client for connecting over Unix domain sockets - Adds a Lean Mode checkbox to the agent picker (
--agent-picker), toggled withlor mouse click - Adds
compaction_thresholdas a configurable key per agent (and per model), replacing the previously hardcoded 0.9 constant - Adds per-sub-agent context accounting in the TUI sidebar and agent inspector
- Runs tool dispatcher calls in parallel, serializing only interactive confirmations
- Extends the HCL
file()function with an optional variables argument to render the file as a template - Groups the
/sessionsbrowser by current workspace instead of showing a flat global list
Improvements
- Reconciles the compaction token estimator with provider-reported usage, using exact counts where available and a session-calibrated correction for unreported content
- Wraps lean TUI tool calls in a padded themed box for improved rendering
- Supports steering (sending messages while the agent is running) in the lean TUI, with pending messages displayed in muted styling
Bug Fixes
- Fixes compaction replacing session history with a stale reply when the summarization model returns an empty response
- Fixes compaction outcome reporting to accurately reflect applied/skipped/failed status on the completed event
- Fixes whitespace-only compaction summaries being applied instead of treated as a no-op
- Fixes
--yoloflag not being applied correctly on session resume, causingsafer_shellto prompt despite the flag - Fixes Gemini models failing with MCP tools that declare non-string enum values in their JSON schemas
- Fixes session
Message.AgentNamesilently dropping on load when reading files using the legacyagentNameJSON key - Fixes database migration rollback errors being silently swallowed
- Removes Anthropic Files API usage
- Updates stale Anthropic model IDs in examples to current IDs
Technical Changes
- Standardizes
agent_nameJSON tag onMessage.AgentName, replacing the previousagentNamecamelCase tag - Shares git-branch detection logic between the lean and full TUIs via a new
pkg/gitbranchpackage - Refactors lean TUI model into cohesive subsystems (usage/tool trackers, transcript type) with no functional change
- Replaces context-smuggled emitters with an explicit
tools.Runtimehandle in the tool dispatcher
What's Changed
- docs: update CHANGELOG.md for v1.98.0 by @docker-read-write[bot] in #3445
- feat(tui): group /sessions browser by current workspace by @Sayt-0 in #3446
- docs: point rel=canonical at the docs.docker.com mirrored pages by @Sayt-0 in #3447
- feat(config): make the auto-compaction threshold configurable (compaction_threshold) by @Sayt-0 in #3448
- feat(compaction): reconcile token estimator with provider-reported usage by @Sayt-0 in #3449
- feat(mcp/remote): support unix:// URLs in remote MCP client by @maxcleme in #3453
- ci: build and publish docker-agent sandbox templates by @dgageot in #3454
- feat(tui): add /context command with a categorized context-window breakdown by @Sayt-0 in #3458
- refactor(leantui): decompose the model into cohesive subsystems by @rumpl in #3455
- refactor: share git-branch detection between the lean and full TUIs by @rumpl in #3457
- fix: box lean TUI tool calls by @rumpl in #3460
- fix: remove Anthropic Files API usage by @rumpl in #3466
- feat(hcl): render file() as a template when given variables by @rumpl in #3464
- feat(shell): add wait_background_job tool by @simonferquel-clanker in #3463
- docs: sync documentation with recent changes by @aheritier in #3468
- feat: run tool dispatcher calls in parallel by @rumpl in #3467
- feat: add shell background job recall by @rumpl in #3461
- feat: add NVIDIA provider as supported model provider by @Priyanshu-sde in #3421
- fix: support steering in lean TUI by @rumpl in #3474
- Tweak the golang dev by @rumpl in #3472
- Split background jobs into separate toolset by @rumpl in #3473
- docs: document lean TUI steering support by @aheritier in #3475
- feat(tui): list and drop attached files from the /context dialog by @Sayt-0 in #3465
- docs: switch github.io site from Jekyll to Hugo by @Sayt-0 in #3459
- feat: add docker agent board, a Kanban TUI for orchestrating agents by @dgageot in #3451
- fix: update stale Anthropic model IDs in examples by @dgageot in #3480
- chore: bump direct Go dependencies by @dgageot in #3481
- fix: backfill SafetyPolicy on session resume with --yolo by @melmennaoui in #3482
- chore: standardize agent_name JSON tag in Message struct by @Piyush0049 in #3471
- fix: handle tx.Rollback error in database migrations by @Piyush0049 in #3476
- fix: compaction data loss on empty summary + honest compaction outcome reporting by @dgageot in #3470
- fix(session): accept legacy agentName JSON key when unmarshaling Message by @dgageot in #3483
- fix(gemini): stringify non-string enum values in tool schemas by @Sayt-0 in #3485
- feat(tui): per-sub-agent context accounting in the TUI by @Sayt-0 in #3486
New Contributors
- @Priyanshu-sde made their first contribution in #3421
- @Piyush0049 made their first contribution in #3471
Full Changelog: v1.98.0...v1.99.0
v1.98.0
This release adds several new TUI features including an interactive getting-started tour, an effort picker dialog, and Lean Mode support in the agent picker, along with stability fixes for startup, shutdown, and proxy recovery.
What's New
- Adds an interactive getting-started tour offered on first run and replayable on demand, implemented as a floating card that observes the real UI's message stream
- Opens an effort picker dialog when
/effortis used with no argument, instead of printing a usage hint - Adds a Lean Mode checkbox to the agent picker panel, toggleable with the
lkey or mouse click - Agent picker now discovers
~/.agentsconfig files (.yaml,.yml,.hcl) when no explicit list is given, in addition to the built-indefaultandcoderagents - Adds cross-process locking and atomic writes for SQLite memory storage
Bug Fixes
- Fixes toolset
Startduring startup so the sidebar tools spinner can no longer animate forever when Docker is wedged - Fixes TUI exit being blocked by a wedged resource cleanup
- Fixes
--recordproxy bypassing the configured models gateway, which caused HTTP 401 errors when gateway-managed credentials were expected - Hardens gateway forwarding in record mode against credential leakage
- Fixes proxy recovery after cooldown — previously a socket error would permanently latch the transport to direct connections for the lifetime of the process
- Fixes
/toolsdialog showing Go type names (e.g.*skills.ToolSet) instead of human-readable names for loader-created toolsets - Fixes telemetry incorrectly recording an error on a chat span after a successful LLM completion
- Fixes agent picker hardening: windowing, escapes, FIFO skip, sentinel, and description guard
- Keeps agent picker panel geometry stable and windowing math in sync
Technical Changes
- Fixes flaky frame synchronization in TUI test driver
sendSync - Fixes file descriptor double-close corrupting parallel tests in
TestListen_FD - Guards
fdOwnershipPinwith a mutex to fix a data race in server tests - Trims comments in the fallback transport
What's Changed
- test: fix flaky tuitest frame sync and TestListen_FD fd double-close by @dgageot in #3420
- fix: bound toolset startup and never block the TUI exit when Docker is wedged by @dgageot in #3423
- docs: update CHANGELOG.md for v1.97.0 by @docker-read-write[bot] in #3424
- feat(tui): open effort picker when /effort has no argument by @Sayt-0 in #3425
- fix: route --record proxy through the configured models gateway by @dgageot in #3428
- docs: sync documentation with recent merges by @aheritier in #3430
- feat(tui): interactive getting-started tour on first run, replayable on demand by @Sayt-0 in #3427
- fix: show proper toolset names in /tools dialog for loader-created toolsets by @dgageot in #3441
- feat(memory): add cross-process locking and atomic writes for sqlite by @yunasora in #3114
- fix(remote): recover proxy after cooldown instead of latching to direct by @trungutt in #3431
- telemetry: don't record error on chat span after successful LLM completion by @jedp-docker in #3281
- feat(picker): add Lean Mode checkbox to agent picker by @dgageot in #3443
- feat: agent picker discovers ~/.agents configs when no list is given by @dgageot in #3444
New Contributors
Full Changelog: v1.97.0...v1.98.0
v1.97.0
This release adds global hook support in user config, expands environment variable references in hook and script-shell fields, and fixes hook field merging.
What's New
- Adds support for global hooks in user config (
~/.config/cagent/config.yaml), with hooks merged in order: agent config → global → CLI - Adds
${env.X}expansion in hook and script-shellworking_dirandenvfields, giving them the same treatment as otherworking_dirfields
Bug Fixes
- Fixes hook field merging so all
HooksConfigfields are combined correctly when merging config and CLI hooks - Fixes unset
${env.X}references to log at debug level instead of silently failing; config env now takes precedence over host env
Technical Changes
- Fixes flaky
TestAttachedServer_DeleteEmitsSessionExitedtest caused by a race between session deletion and event log subscription
What's Changed
- docs: update CHANGELOG.md for v1.96.0 by @docker-read-write[bot] in #3417
- test: fix flaky TestAttachedServer_DeleteEmitsSessionExited by @dgageot in #3418
- feat(config): expand ${env.X} in hook and script-shell working_dir/env by @dgageot in #3416
- fix: merge all hook fields by @rumpl in #3419
- feat: support global hooks in user config by @rumpl in #3422
Full Changelog: v1.96.0...v1.97.0
v1.96.0
This release adds session resumption across agent URL changes, TUI e2e test generation from recorded sessions, and fixes for duplicate tool names and Anthropic adaptive thinking display.
What's New
- Adds ability to resume sessions across agent URL query changes when using
docker-agent serve api(e.g. when relaunching with a different agent version tag) - Adds TUI e2e test generation from
--recordsessions, producing a ready-to-edit*_test.gofile alongside the cassette with synchronization points derived from the recorded session - Adds a Docker Wiki example agent with
/init,/update,/status, and/helpcommands
Bug Fixes
- Fixes duplicate tool names being sent to providers by deduplicating in
collectTools()— the first toolset wins and a warning is shown once per streak naming the conflicting toolsets (fixes Anthropic HTTP 400 "Tool names must be unique" errors) - Fixes missing reasoning display in the TUI when using
/effortor Shift+Tab thinking cycle on newer Claude models (Opus 4.7+) — the adaptivedisplayfield is now sent by default even whenprovider_opts.thinking_displayis not explicitly configured
What's Changed
- docs: update CHANGELOG.md for v1.94.0 by @docker-read-write[bot] in #3406
- docs: update CHANGELOG.md for v1.95.0 by @docker-read-write[bot] in #3407
- docs: add docker wiki example agent by @rumpl in #3408
- feat(server): resume sessions across agent URL query changes by @gtardif in #3410
- fix(agent): dedupe duplicate tool names with once-per-streak warning by @Sayt-0 in #3409
- feat(tui): generate a TUI e2e test from a
--recordsession by @dgageot in #3412 - docs: single-source documentation for the docs.docker.com Hugo module mount by @Sayt-0 in #3413
- fix(anthropic): default adaptive thinking display to summarized by @Sayt-0 in #3415
- docs: prepare pages for the docs.docker.com module mount by @Sayt-0 in #3414
Full Changelog: v1.95.0...v1.96.0
v1.95.0
This release focuses on TUI rendering performance improvements for long conversations, along with a bug fix for test reliability and a configuration version update.
Improvements
- Memoizes scrollbar rendering across frames to reduce redundant computation during TUI redraws
- Memoizes content line widths in the scroll view to avoid recalculating unchanged values each frame
- Replaces
lipgloss.JoinHorizontalwith direct column zipping for scrollbar rendering, reducing allocations per frame
Bug Fixes
- Fixes restyled lines incorrectly using cached widths instead of re-measuring after style changes
- Fixes flaky renderer-registry tests that were racing on a shared global registry
Technical Changes
- Freezes config v11 and promotes v12 as the latest configuration version
What's Changed
- chore: bump direct Go dependencies by @dgageot in #3405
- freeze config v11 and start v12 as latest by @dgageot in #3401
- perf(tui): memoize rendering hot paths for long conversations by @dgageot in #3404
Full Changelog: v1.94.0...v1.95.0
v1.94.0
This release significantly expands model provider support with 12 new built-in providers, adds mouse support and new commands to the TUI, introduces a SafetyPolicy primitive, and includes numerous bug fixes and performance improvements.
What's New
- Adds Baseten as a built-in model provider (
provider: baseten) - Adds OVHcloud AI Endpoints as a built-in model provider (
provider: ovhcloud) - Adds Groq as a built-in model provider (
provider: groq) - Adds DeepSeek as a built-in model provider (
provider: deepseek) - Adds Cerebras as a built-in model provider (
provider: cerebras) - Adds Fireworks AI as a built-in model provider (
provider: fireworks) - Adds Together AI as a built-in model provider (
provider: together) - Adds Hugging Face Inference Providers as a built-in model provider (
provider: huggingface) - Adds Moonshot AI (Kimi) as a built-in model provider (
provider: moonshot) - Adds Vercel AI Gateway as a built-in model provider (
provider: vercel) - Adds Cloudflare Workers AI and Cloudflare AI Gateway as built-in model providers
- Adds mouse support to the agent picker: hover highlights a card, single click selects it, double-click immediately starts the session, and scroll wheel navigates the YAML details panel
- Adds metadata
tagsfield to agent config and surfaces tags as coloured chips in the agent picker - Adds
/effortslash command to select the model's reasoning level directly (available in both full and lean TUI) - Adds
SafetyPolicyprimitive (unsafe/safer/strict) to sessions, forwarded to hooks viahooks.Input.SafetyPolicy - Enforces
lifecycle.startup_timeoutfor MCP/LSP toolset startup, which was previously parsed but never acted on - Adapts
safer_shellhook classification to the sessionSafetyPolicy - Collapses file picker keyboard shortcuts to a single line on wide dialogs
- Strengthens default memory toolset instructions
Improvements
- Memoizes successful OCI config reads per process, halving warm startup latency for OCI agent refs
- Suppresses spurious empty-response warning for benign post-tool stops in forked-skill sub-sessions
- Agent picker dialog is larger and truncates long lines instead of wrapping; cards are 70 columns wide
Bug Fixes
- Fixes coalescing of system messages for self-hosted and OpenAI-compatible endpoints that reject multiple system messages (e.g. vLLM with Qwen)
- Fixes OVHcloud default model to
Qwen3.5-397B-A17B - Fixes macOS Option-key characters not triggering file picker
alt+h/alt+ivisibility toggles - Removes duplicate "Initializing MCP servers…" spinner from the sidebar that fired on every turn even for agents with no MCP servers
- Adds 5-second timeout to graceful-shutdown calls that previously used
WithoutCancelwithout a deadline, preventing indefinite blocking - Fixes concurrent
Connectraces and goroutine leak on startup timeout for MCP/LSP toolsets - Fixes auto-deny of tool asks in non-interactive sessions instead of blocking indefinitely
- Fixes tool-call confirmations being dropped without a Resume under
--yoloin JSON mode - Fixes Anthropic provider falling back to token thinking for effort levels on models without adaptive thinking support (e.g. Haiku 4.5)
- Fixes tool call render briefly disappearing or shrinking while JSON arguments are still streaming in the lean TUI
- Clamps
max_tokensto the context window for OpenAI-compatible providers to prevent "context window exceeded" errors on self-hosted vLLM - Fixes cost and context limit display in the lean TUI
Technical Changes
- Derives provider API-key env vars forwarded to eval containers from the provider registry instead of a hard-coded list
- Refactors provider client boilerplate into shared helpers across openai, anthropic, gemini, bedrock, and dmr clients
- Consolidates OpenAI-compatible alias provider tests into a single shared test
- Extracts shared
calleeObjecthelper in lint cops to remove duplication - Adds
OTelTracerNamelint cop to enforce scoped OpenTelemetry tracer names - Replaces 44
time.Sleepcalls in the test suite with deterministic synchronization primitives
What's Changed
- docs: update CHANGELOG.md for v1.93.0 by @docker-read-write[bot] in #3339
- docs: sync documentation with recent main merges by @aheritier in #3340
- feat: add Baseten provider support by @dgageot in #3341
- feat: add OVHcloud AI Endpoints provider support by @aheritier in #3343
- chore: bump github.com/anthropics/anthropic-sdk-go to v1.55.0 by @dgageot in #3345
- feat: add Groq as a supported model provider by @Sayt-0 in #3358
- fix(openai): coalesce system messages for self-hosted and open-model endpoints by @Sayt-0 in #3357
- feat: add DeepSeek as a supported model provider by @Sayt-0 in #3361
- docs: group and collapse left navigation sections by @aheritier in #3360
- docs: list providers alphabetically by name in nav by @aheritier in #3364
- fix(docs): restore inline code contrast in light mode by @aheritier in #3365
- feat: collapse file picker shortcuts to one line on wide dialogs by @dgageot in #3366
- fix(tui): remove duplicate MCP-init spinner from sidebar by @dgageot in #3367
- fix: add 5s timeout to graceful-shutdown calls that used WithoutCancel by @dgageot in #3370
- feat: add Cerebras as a supported model provider by @Sayt-0 in #3368
- fix(tui): accept macOS Option-key chars for file picker toggles by @Sayt-0 in #3333
- feat: add Fireworks AI as a supported model provider by @Sayt-0 in #3369
- test: consolidate OpenAI-compatible alias provider tests by @dgageot in #3374
- refactor(config): derive provider API-key env vars from config by @dgageot in #3375
- feat: enforce lifecycle.startup_timeout for MCP/LSP toolset startup by @dgageot in #3373
- feat: add Hugging Face Inference Providers as a supported model provider by @Sayt-0 in #3379
- docs: tighten comment guidance in AGENTS.md by @dgageot in #3380
- fix: unblock headless tool-Ask paths (dispatcher + JSON runner) by @melmennaoui in #3377
- feat(session): add SafetyPolicy primitive and hook pass-through by @melmennaoui in #3378
- feat: add Together AI as a supported model provider by @Sayt-0 in #3376
- fix(anthropic): use token thinking for effort levels on models without adaptive support by @Sayt-0 in #3381
- fix(tui): keep tool call render stable while args stream by @rumpl in #3382
- feat(hooks/safer_shell): adapt classification to session SafetyPolicy by @melmennaoui in #3383
- feat: add Moonshot AI (Kimi) as a supported model provider by @Sayt-0 in #3384
- feat: add Vercel AI Gateway as a supported model provider by @Sayt-0 in #3385
- feat: add Cloudflare Workers AI and AI Gateway as model providers by @Sayt-0 in #3389
- test: make models-list tests hermetic and parallelizable by @dgageot in #3388
- feat(lint): add OTelTracerName cop to enforce scoped tracer names by @dgageot in #3386
- feat: add tags field to agent config metadata by @dgageot in #3390
- feat: add mouse support to the agent picker (hover, double-click, wheel) by @dgageot in #3391
- fix(runtime): suppress spurious empty-response warning for benign post-tool stops by @dgageot in #3392
- feat(memory): strengthen default toolset instructions by @dgageot in #3395
- fix: clamp max_tokens to the context window for OpenAI-compatible providers by @Sayt-0 in #3393
- test: make the test suite faster and sleep-free by @dgageot in #3399
- perf(config): memoize successful OCI reads to halve warm startup latency by @dgageot in #3397
- fix: show lean tui cost and context limit by @rumpl in #3400
- refactor: extract shared calleeObject helper in lint cops by @dgageot in #3396
- feat: show metadata tags as coloured chips in the agent picker by @dgageot in #3394
- refactor(provider): deduplicate provider client boilerplate by @dgageot in #3398
- feat(tui): add /effort command to select the model's reasoning level by @Sayt-0 in #3403
Full Changelog: v1.93.0...v1.94.0