This release expands ACP v1 compatibility with session management, audio prompts, client terminals, remote MCP servers, and host credential authentication, while also closing several sandbox and filesystem confinement gaps and improving TUI rendering performance.
What's New
- Adds ACP session deletion after draining owned work, with
sessionCapabilities.deletesupport - Adds ACP elicitation bridge supporting negotiated form and URL elicitation capabilities
- Adds ACP session model reasoning and safety options, including
session/set_config_optionand legacysession/set_mode - Adds ACP shell tool execution through client terminals via
terminal/createand related wire methods - Adds ACP support for client-supplied Streamable HTTP and legacy SSE MCP servers in
session/new,session/resume, andsession/load - Adds ACP host credential authentication and connection-local logout
- Adds ACP audio prompt support and bounded history replay
- Adds ACP message identity persistence and tool name exposure
- Adds sandbox cloud mode (
--cloud) and v3 kit support for running sandboxes without a local Docker dependency - Adds evaluator support for exact endpoints on compatible services via an optional
endpointfield inEvaluatorConfig - Adds
Lint/CutPrefixcop to detectHasPrefix+TrimPrefixpatterns that should usestrings.CutPrefix - Adds
Lint/CutSuffixcop to detectHasSuffix+TrimSuffixpatterns that should usestrings.CutSuffix - Adds
Lint/SlicesClonecop to detect manual slice-copy idioms that should useslices.Clone - Adds
Lint/SortStableFunccop to detectsort.SliceStablecalls that should useslices.SortStableFunc - Adds additional lint cops:
Lint/SplitTrimJoin,Lint/NewExpr,Lint/FieldsSeq, and detectors for AWS scalar pointer helpers, paired reflection field loops, stdlib UUID string opportunities, equivalent manual URL clones, buffered JSON newline workarounds, and simple benchmark loop modernization
Improvements
- Streams bang command progress in TUIs, running commands asynchronously and emitting lifecycle/output events in both lean and full TUIs
- Replaces tmux focus-events heuristic with an async poll that checks real pane visibility, so only hidden panes pause rendering
- Keeps tmux chooser previews rendering continuously
- Reuses chat pane formatting while scrolling the sidebar, avoiding redundant re-formatting on unchanged message content
- Migrates
sort.SliceStableusages toslices.SortStableFuncin model picker, lean TUI, and deferred search ranking - Migrates manual slice-copy idioms to
slices.Cloneacross the codebase - Migrates
HasPrefix+TrimPrefixandHasSuffix+TrimSuffixpatterns tostrings.CutPrefix/strings.CutSuffixacross multiple packages
Bug Fixes
- Fixes
nonereasoning effort being ignored on GPT-6 Sol/Luna models, which caused silent fallback to"low"effort - Fixes skill supporting-file reads to be confined to the skill directory using
os.OpenRoot, preventing symlink escapes - Fixes filesystem path policies to reject dangling symlinks
- Fixes prompt file staging to be confined to the kit directory
- Fixes sandbox skill staging reads to be anchored to the source root
- Fixes tool extraction to use
os.Rootconfinement, closing a symlink-swap gap during archive extraction - Fixes forked skill output and session IDs from bleeding across message groups by keying batching on session ID in addition to agent name
- Fixes active segment offset going stale when an earlier message resizes while scrolled up, preventing clipped transcript rendering
Technical Changes
- Refactors TUI command contracts, tool confirmation dialogs, and tool renderer registry to be dependency-light and reusable
- Enables
errorsastypeandreflecttypeassertlint modernization checks - Switches to shared cops from
rubocop-go v1.0.0, removing duplicate local implementations
What's Changed
- fix: stream bang command progress in TUIs by @rumpl in #4423
- fix(tui): pause rendering only for hidden tmux panes by @dgageot in #4429
- feat(acp): delete sessions after draining owned work by @dgageot in #4431
- docs: update CHANGELOG.md for v1.143.0 by @docker-read-write[bot] in #4430
- feat(lint): enforce recent Go modernization patterns by @dgageot in #4433
- test: make timer coverage deterministic with synctest by @dgageot in #4436
- test(httpclient): use in-memory HTTP for SSE filter tests by @dgageot in #4437
- fix(skills): confine supporting-file reads to the skill directory by @dgageot in #4438
- feat(acp): bridge negotiated form and URL elicitation by @dgageot in #4434
- fix: support none reasoning effort on GPT-6 Sol/Luna by @dgageot in #4435
- test(tui): wait for shell completion in bang command tests by @dgageot in #4439
- chore(deps): bump charm.land/bubbletea/v2 v2.0.9→v2.0.10 by @dgageot in #4442
- chore(deps): bump github.com/docker/cli to v29.8.1 by @dgageot in #4443
- test: speed up slow test suites with deterministic waits by @dgageot in #4444
- feat(acp): expose session model reasoning and safety options by @dgageot in #4445
- feat(evaluators): support exact endpoints for compatible services by @dgageot in #4432
- test: make board heartbeat checks deterministic by @dgageot in #4447
- feat(acp): execute shell tools through client terminals by @dgageot in #4448
- fix: confine tool extraction with os.Root by @dgageot in #4446
- docs: auto-update for merged PRs (2026-09-25) by @aheritier in #4449
- feat(acp): support client-supplied HTTP and SSE MCP servers by @dgageot in #4450
- fix: stop forked skill output from bleeding across message groups by @dgageot in #4451
- feat(acp): add host credential authentication and connection logout by @dgageot in #4452
- fix: close filesystem and sandbox kit confinement gaps by @dgageot in #4440
- chore(lint): use shared cops from rubocop-go v1.0.0 by @dgageot in #4441
- fix: keep active segment offset in sync when earlier item resizes by @dgageot in #4454
- test: synchronize askpass helper cancellation test by @dgageot in #4459
- lint: add SlicesClone cop and migrate manual slice-copy idioms by @dgageot in #4462
- test: fix encrypt mode timestamp flake by @dgageot in #4457
- feat(acp): support audio prompts and bounded history replay by @dgageot in #4464
- chore(deps): bump AWS SDK v2 direct dependencies by @dgageot in #4466
- lint: add SortStableFunc cop for sort.SliceStable migrations by @dgageot in #4460
- feat(sandbox): add cloud mode and v3 kit support by @dgageot in #4465
- feat(lint): detect strings.CutPrefix opportunities by @dgageot in #4455
- feat(acp): persist message identities and expose tool names by @dgageot in #4468
- perf(tui): reuse chat pane formatting while scrolling sidebar by @dgageot in #4469
- refactor(tui): make reusable components dependency-light by @dgageot in #4470
- feat(lint): add CutSuffix cop and fix its findings by @dgageot in #4458
Full Changelog: v1.143.0...v1.144.0