v1.28.0

aaif-goose/goosev1.28.0Mar 18, 2026by github-actions[bot]

AI Summary

This release focuses on MCP support with the introduction of MCP Roots and ACP tools for filesystem I/O. It also adds new providers like MiniMax and Tensorix, introduces a new onboarding flow, and implements Claude adaptive thinking support.

Key Highlights

  • MCP Roots support.
  • New providers: MiniMax, Tensorix, Avian.
  • Claude adaptive thinking support.
  • New onboarding flow.
  • ACP tools for delegating filesystem I/O.

New Features

  • Adversarial agent
  • Claude adaptive thinking
  • New onboarding flow
  • Persist GooseMode per-session
  • ACP session/set_mode handler
  • MCP Roots support
  • ACP read tool for filesystem I/O
  • Summarize tool
  • ACP providers for Claude Code and Codex
  • Capture reasoning summaries
  • MiniMax provider
  • Tensorix declarative provider
  • Skill supporting files individually loadable
  • Avian LLM provider
  • Base path field for custom provider config
  • Secret interpolation in extension URLs

Full Release Notes

## ✨ Features

- Adversarial agent for preventing leaking of info and more [#7948](https://github.com/block/goose/pull/7948)
- Claude adaptive thinking support [#7944](https://github.com/block/goose/pull/7944)
- New onboarding flow [#7266](https://github.com/block/goose/pull/7266)
- Persist GooseMode per-session via session DB [#7854](https://github.com/block/goose/pull/7854)
- Propagate session.id to OpenTelemetry spans and log records [#7490](https://github.com/block/goose/pull/7490)
- Migrate autovisualiser extension to MCP Apps [#7852](https://github.com/block/goose/pull/7852)
- ACP session/set_mode handler [#7801](https://github.com/block/goose/pull/7801)
- MCP Roots support [#7790](https://github.com/block/goose/pull/7790)
- Load hints in nested subdirectories [#7772](https://github.com/block/goose/pull/7772)
- ACP read tool for delegating filesystem I/O to ACP clients [#7668](https://github.com/block/goose/pull/7668)
- Summarize tool for deterministic reads [#7054](https://github.com/block/goose/pull/7054)
- ACP providers for Claude Code and Codex [#6605](https://github.com/block/goose/pull/6605)
- Capture reasoning summaries from OpenAI Responses API [#7375](https://github.com/block/goose/pull/7375)
- MiniMax provider with Anthropic-compatible API [#7640](https://github.com/block/goose/pull/7640)
- Tensorix as a declarative provider [#7712](https://github.com/block/goose/pull/7712)
- Skill supporting files individually loadable via load() in summon [#7583](https://github.com/block/goose/pull/7583)
- Avian as an LLM provider [#7561](https://github.com/block/goose/pull/7561)
- Combine TUI UX with publishing config [#7683](https://github.com/block/goose/pull/7683)
- Base path field for custom provider configuration [#7614](https://github.com/block/goose/pull/7614)
- Better private channel detection for Slack bot [#7680](https://github.com/block/goose/pull/7680)
- Preferred microphone selection [#7805](https://github.com/block/goose/pull/7805)
- Secret interpolation in streamable HTTP extension URLs [#7782](https://github.com/block/goose/pull/7782)

## 🐛 Bug Fixes

- Remove incorrect agent_visible filter on user message in claude-code [#7931](https://github.com/block/goose/pull/7931)
- Retry on authentication failure with credential refresh [#7812](https://github.com/block/goose/pull/7812)
- Bump pctx_code_mode to 0.3.0 for iterator type checking fix [#7892](https://github.com/block/goose/pull/7892)
- Pass session_id when loading extensions so skills are discovered [#7868](https://github.com/block/goose/pull/7868)
- Tool choice and parallel_tool_calls support for chatgpt_codex provider [#7867](https://github.com/block/goose/pull/7867)
- Tool confirmation handling for multiple requests [#7856](https://github.com/block/goose/pull/7856)
- Resolve tokio::sync::Mutex deadlock in recipe retry path [#7832](https://github.com/block/goose/pull/7832)
- Stop writing without error when hitting broken pipe for goose session list [#7858](https://github.com/block/goose/pull/7858)
- Skip upgrade-insecure-requests CSP for external HTTP backends [#7714](https://github.com/block/goose/pull/7714)
- Prevent hang when command backgrounds a child process [#7689](https://github.com/block/goose/pull/7689)
- Exit agent loop when tool call JSON fails to parse [#7840](https://github.com/block/goose/pull/7840)
- Prevent SSE connection drops from silently truncating responses [#7831](https://github.com/block/goose/pull/7831)
- Prevent SageMaker TGI from being marked configured when only Bedrock keys are set [#7284](https://github.com/block/goose/pull/7284)
- Disable computercontroller functionality when no $DISPLAY detected [#7824](https://github.com/block/goose/pull/7824)
- Register MCP extensions when resuming a session [#7806](https://github.com/block/goose/pull/7806)
- Load .gitignore in prompt_manager for hint file filtering [#7795](https://github.com/block/goose/pull/7795)
- Remap max_completion_tokens to max_tokens for OpenAI-compatible providers [#7765](https://github.com/block/goose/pull/7765)
- Preserve OpenAI Responses API tool call/output linkage [#7759](https://github.com/block/goose/pull/7759)
- Return ContextLengthExceeded when prompt exceeds effective KV cache size [#7815](https://github.com/block/goose/pull/7815)
- Use `includeThoughts/part.thought` for Google thinking handling [#7593](https://github.com/block/goose/pull/7593)
- Model selector showing wrong model in tabs [#7784](https://github.com/block/goose/pull/7784)
- Avoid word splitting by space for Windows shell commands [#7810](https://github.com/block/goose/pull/7810)
- Unify path resolution around GOOSE_PATH_ROOT [#7335](https://github.com/block/goose/pull/7335)
- Pass OAuth scopes to DCR and extract granted_scopes from token response [#7571](https://github.com/block/goose/pull/7571)
- Write to real file if config.yaml is symlink [#7669](https://github.com/block/goose/pull/7669)
- Preserve pairings when stopping gateway [#7733](https://github.com/block/goose/pull/7733)
- Sanitize streamable HTTP extension names derived from URLs [#7740](https://github.com/block/goose/pull/7740)
- Improve keyring availability error detection [#7766](https://github.com/block/goose/pull/7766)
- Remove insecure default secret from GOOSE_EXTERNAL_BACKEND [#7783](https://github.com/block/goose/pull/7783)
- Add #[serde(default)] to description field on ExtensionConfig variants [#7708](https://github.com/block/goose/pull/7708)
- Restore smart-approve mode [#7690](https://github.com/block/goose/pull/7690)
- Make TLS configurable in goosed agent via GOOSE_TLS env var [#7686](https://github.com/block/goose/pull/7686)
- Max turns configuration [#7612](https://github.com/block/goose/pull/7612)
- Compare extension configs before skipping add_extension [#7650](https://github.com/block/goose/pull/7650)
- Only add viewable channels to Slack bot context [#7678](https://github.com/block/goose/pull/7678)
- Make sure platform binary exists [#7676](https://github.com/block/goose/pull/7676)
- Replace global static output buffer with per-instance TempDir [#7632](https://github.com/block/goose/pull/7632)
- Resolve parameters in initial message with autosubmit [#7659](https://github.com/block/goose/pull/7659)
- Add analyzer extension in recipe to maintain backwards compatibility [#7652](https://github.com/block/goose/pull/7652)
- Scope empty session reuse to current window to prevent session mixing [#7602](https://github.com/block/goose/pull/7602)
- Prevent abort in local inference [#7633](https://github.com/block/goose/pull/7633)
- Restore provider and extensions for LRU-evicted sessions [#7616](https://github.com/block/goose/pull/7616)
- Removed double dash in pnpm command [#7951](https://github.com/block/goose/pull/7951)

## 🔧 Improvements

- Upgrade Electron 40.6.0 → 41.0.0 [#7851](https://github.com/block/goose/pull/7851)
- Only show up to 50 lines of source code [#7578](https://github.com/block/goose/pull/7578)
- Keep messages in sync [#7850](https://github.com/block/goose/pull/7850)
- More ACP tools [#7843](https://github.com/block/goose/pull/7843)
- Use pnpm for Desktop Electron App [#7679](https://github.com/block/goose/pull/7679)
- Use constant-time comparison for auth token validation [#7730](https://github.com/block/goose/pull/7730)
- Use camelCase in CallToolResponse and add type discriminators to ContentBlock [#7487](https://github.com/block/goose/pull/7487)
- Convert Tanzu provider to declarative JSON config [#7124](https://github.com/block/goose/pull/7124)
- Simplify tokenizer initialization — remove unnecessary Result wrapper [#7744](https://github.com/block/goose/pull/7744)
- Reduce server log verbosity [#7729](https://github.com/block/goose/pull/7729)
- Derive GooseMode string conversions with strum [#7706](https://github.com/block/goose/pull/7706)
- Update to rmcp 1.1.0 [#7619](https://github.com/block/goose/pull/7619)
- Merge platform/builtin extensions [#7630](https://github.com/block/goose/pull/7630)
- Updated canonical models [#7920](https://github.com/block/goose/pull/7920)
- Keep toast open on failed extension [#7771](https://github.com/block/goose/pull/7771)
- Stop collecting goosed stderr after startup [#7814](https://github.com/block/goose/pull/7814)
- Remove dependency on posthog-rs [#7811](https://github.com/block/goose/pull/7811)
- Add prefer-offline to pnpm config to skip unnecessary registry lookups [#7828](https://github.com/block/goose/pull/7828)
- Restore goosed logging [#7622](https://github.com/block/goose/pull/7622)
- Log 500 errors and show error for direct download [#7936](https://github.com/block/goose/pull/7936)
- Add `linux-mcp-server` to the goose registry [#6979](https://github.com/block/goose/pull/6979)
- Remove dead OllamaSetup onboarding flow [#7861](https://github.com/block/goose/pull/7861)
- Delete goose web [#7696](https://github.com/block/goose/pull/7696)

## 📚 Documentation

- Credit balance monitoring section [#7952](https://github.com/block/goose/pull/7952)
- Cerebras provider to supported providers list [#7953](https://github.com/block/goose/pull/7953)
- TUI client documentation in ACP clients guide [#7950](https://github.com/block/goose/pull/7950)
- Polish ACP docs [#7946](https://github.com/block/goose/pull/7946)
- ACP providers guide for claude-acp and codex-acp [#7800](https://github.com/block/goose/pull/7800)
- Spraay Batch Payments MCP Extension Tutorial [#7525](https://github.com/block/goose/pull/7525)
- MLflow integration guide [#7563](https://github.com/block/goose/pull/7563)
- LM Studio availability [#7698](https://github.com/block/goose/pull/7698)
- GOOSE_INPUT_LIMIT environment variable documentation [#7299](https://github.com/block/goose/pull/7299)
- Update recipe usage step to reflect auto-submit behavior [#7639](https://github.com/block/goose/pull/7639)
- Guide for customizing the sidebar [#7638](https://github.com/block/goose/pull/7638)
- Update Claude Code approve behavior and model list in cli-providers guide [#7448](https://github.com/block/goose/pull/7448)
- Update contributing.md [#7927](https://github.com/block/goose/pull/7927)
- Notes in contribution guide for pnpm [#7833](https://github.com/block/goose/pull/7833)