Skip to content

Releases: aaif-goose/goose

v1.30.0

08 Apr 20:13

Choose a tag to compare


🪿 Goose v1.30.0 Release Notes

Released: April 8, 2026


✨ New Features

🖥️ Terminal UI (TUI) Overhaul

  • Tab-expandable tool calls — tool call output now collapses cleanly with tab to expand (#8136)
  • Improved message rendering — better ordering, streaming/scrolling, and overall visual polish for messages, tool calls, and text entry (#8144, #8156, #8214)
  • Independent --text mode — text mode is now decoupled from the normal TUI for a cleaner headless experience (#8210)
  • goose serve — new subcommand to run Goose as a background service (#8209)

🔌 Providers & Models

  • Gemini OAuth provider — first-class OAuth-based authentication for Google Gemini (#8129)
  • Copilot ACP provider — new provider for GitHub Copilot via ACP (#8154)
  • Zhipu declarative provider — adds Zhipu AI with configurable ZHIPU_BASE_URL override (#8204)
  • Configurable fast_model for declarative providers — lets you specify a lightweight model for quick tasks (#8194)
  • Gemma 4 local model support — enable Gemma 4 as a local model option (#8366)
  • VMware Tanzu Platform provider improvements — bug fixes, streaming support, and UI enhancements (#8126)

🛡️ Security & Observability

  • Egress logging inspector — new security feature to log and inspect outbound network calls (#8149)
  • Restricted secrets file permissions — secrets files are now created with tighter OS-level permissions (#8118)

🧩 Extensions & Skills

  • Show installed skills in UI — skills are now visible and browsable from the desktop app (#7910)
  • Skills platform extension — skills are now managed as a dedicated platform extension (#8377)
  • Recursively discover nested skills — skills under configured roots are now found at any depth (#8082)
  • Configurable extension timeouts — set timeouts per-extension via ACP _meta or a global default (#8295)
  • Reusable ACP provider controls — shared UI components for ACP provider configuration (#8314)
  • Rust ACP client for extension methods (#8227)
  • Developer MCP server enhancements (#7770)

🌐 Internationalization

  • i18n infrastructure — added react-intl based internationalization framework to the desktop app (#8105)

🩺 Diagnostics

  • goose doctor — new command to diagnose common configuration and environment issues (#8342)

⚙️ Configuration

  • GOOSE_SHOW_FULL_OUTPUT — new config option to disable tool output truncation (#7919)
  • GOOSE_CLI_SHOW_THINKING — can now be set in config.yaml (not just env vars) (#8097)
  • GOOSE_CONTEXT_LIMIT — now readable from config.yaml (#7900)
  • GOOSE_DISABLE_KEYRING — now honoured from config.yaml at startup (#8219)
  • Per-delegate max_turns override (#8066)
  • skip_canonical_filtering for declarative providers (#8052)

🏗️ Build & Packaging

  • Optional native-tls support — alternative to rustls for environments that need system TLS (#8037)
  • Feature-gated AWS provider dependencies — behind aws-providers feature flag for leaner builds (#8080)
  • Feature-gated telemetry — telemetry is now behind Cargo feature flags (#8119)
  • Inference Mesh settings tab (#8094)

🐛 Bug Fixes

Providers

  • Fix user message text silently dropped when message contains both text and image (#8071)
  • Send empty object instead of null for Bedrock tool input (#8121)
  • Fall back to configured models when the models endpoint fetch fails (#7530)
  • Prevent Ollama provider from hanging on tool-calling requests (#7723)
  • Increase Ollama retry config + add transient-only retry mode (#7677)
  • Use safely_parse_json for OpenAI streaming tool arguments (#8208)
  • Use v1beta1 API version for Google/MaaS models on GCP Vertex AI (#8278)
  • Use build_host_url for GCP Vertex AI location fallback (#8185)
  • Parse nested usage payloads in LiteLLM (#8081)
  • Prioritize predefined model context_limit over canonical registry (#7888)
  • Always pass --model to cursor-agent CLI (#8106)
  • Fix models not shown in "Choose Model" modal after OAuth configuration completes (#7891)
  • Allow connecting to OAuth servers using protected-resource fallback instead of WWW-Authenticate header (#8148)

Desktop App

  • Fix "View as Markdown" feature not working (#8160)
  • Fix desktop slash commands (#8341)
  • Fix GitHub Copilot auth fails to open browser in Desktop app (#8019)
  • Hide hidden extensions in UI (#8346)
  • Return raw text when chat parse error occurs (#8402)
  • Fix Gemini ACP without an unexpected terminal window (#8101)
  • Replace any with proper SVG types in icon components (#7873)
  • Fix extension command with quotes in CLI (#8150)
  • Fix overflow: clip to not disrupt sticky ToC (#8158)
  • Fix i18n compile on Windows (#8202)
  • Fix MultilineInput component (#8382)

CLI & Core

  • Fix Goose update failing on Linux with ETXTBSY (#8107)
  • Resolve user login PATH for MCP extension subprocesses (#7896)
  • Replace panics with user-friendly errors in CLI session builder (#7901)
  • Strip message wrapper in CLI session title generation (#7996)
  • Display platform-correct secrets path in keyring config dialog (#8328)
  • Deliver truncation notice as separate content block (#7899)
  • Use platform-appropriate commands in developer extension instructions (#7898)
  • Reconsolidate split tool-call messages to follow OpenAI format (#7921)
  • Clean up MCP subprocesses after abrupt parent exit (#8242)
  • Fix Flatpak sandbox preventing access to host system commands (#8109)
  • Gate keyring platform features behind target-specific deps (#8039)
  • Raise default stack reserve to 8 MB (#8234)

ACP

  • Separate ACP sessions from user sessions (#7857)
  • Avoid duplicate thought chunks around tool calls (#8215)

⚡ Performance

  • Parallelize extension loading in ACP server for faster startup (#8098)
  • Mesh binary management — download fresh binary on every start; kill mesh when Goose exits (#8228)

📚 Documentation

  • Unified thinking documentation (#7817)
  • available_tools field in extension config docs (#7725)
  • Memory extension reference moved to docs, trimmed runtime prompt (#7727)
  • Sta...
Read more

v1.29.1

03 Apr 14:30
c601e3f

Choose a tag to compare

🐛 Bug Fixes

  • macOS Intel code signing #8218

v1.29.0

31 Mar 05:59
a58cf7e

Choose a tag to compare

✨ Features

  • Ability to manage sub recipes in desktop UI #6360
  • Display delegate sub agents logs in UI #7519
  • Pass toolInfo to MCP Apps via hostContext #7506
  • Ability to expand sidebar to see chat names #7816
  • Sigstore/SLSA provenance verification for Rust self-update #7818
  • GOOSE_SHELL env var to configure preferred shell #7909
  • CodeMode ToolDisclosure variants support #7926
  • Feature-gate local inference dependencies #7976
  • ACP session/set_config and stabilize list, delete and close #7984
  • Gemini-ACP provider with subscription models support #8000
  • Orchestration support #7999
  • Upgrade ink for performance, use stdio instead of http #8004
  • Filter tools by MCP Apps visibility metadata #8022

🐛 Bug Fixes

  • Empty tool results from resource content (e.g. auto visualiser) #7866
  • Clean up OAuth token cache on provider deletion #7908
  • SSE parsers to accept optional space after data: prefix #7929
  • Hard-coded tool call id in code mode callback #7939
  • Config for GOOSE_MAX_BACKGROUND_TASKS #7940
  • Unregister goosed child process's listener #7956
  • Include token usage in Databricks streaming responses #7959
  • Overwrite the deprecated googledrive extension config #7974
  • Emit user-facing message on compaction failure #7975
  • Use Responses API for gpt-5.4 #7982
  • Auto-focus chat input on Hub mount #8007
  • Apps extension: coerce string arguments from inner LLM responses #8030
  • Handle mid-stream error events in OpenAI SSE streaming #8031
  • Fullscreen header bar + always-visible close controls #8033
  • Use default provider and model when provider in session no longer exists #8035
  • Gemini models via Databricks #8042
  • Handle reasoning content blocks in OpenAI-compat streaming parser #8078
  • Remove configured marker when deleting OAuth provider configuration #7887
  • Download manager #7933
  • macOS Intel signing #8218

🔧 Improvements

  • Improve formatting of tool calls, show thinking, treat Reasoning and Thinking the same #7626
  • Separate SSE streaming from POST work submission #7834
  • Optimize tool summarization #7938
  • Support reasoning and gpt-5.4 for ChatGPT Codex #7941
  • Fix N+1 thinking message storage issue #7958
  • Remove unnecessary Arc from tool execution pipeline #7979
  • Remove lead/worker provider #7989
  • Allow delete all types #8018
  • Improve terminal output formatting and visual clarity #8025
  • Consolidate duplicated dependencies into workspace #8041
  • Show setup instructions for ACP providers in settings modal #8065
  • Replace sigstore-verification with sigstore-verify to remove vulnerabilities #8064
  • Update tar version to avoid CVE-2026-33056 #8073
  • Code review step using short-lived provider token #7932

📚 Documentation

  • Remote Access section with Telegram Gateway documentation #7955
  • WebMCP for Beginners blog post #7957
  • GOOSE_INPUT_LIMIT in config-files.md #7961
  • Claude Code approve mode permission routing #7949
  • VMware-AIOps MCP extension documentation #8055
  • Correct gosoe typo to goose #8062

v1.28.0

18 Mar 10:51

Choose a tag to compare

✨ Features

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

🐛 Bug Fixes

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

🔧 Improvements

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

📚 Documentation

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

v1.27.2

06 Mar 20:25

Choose a tag to compare

🔧 Improvements

  • Cleanup old sandbox #7700

v1.27.1

05 Mar 20:32

Choose a tag to compare

🐛 Bug Fixes

  • Ensure platform binary exists before execution #7676

v1.27.0

05 Mar 00:30

Choose a tag to compare

✨ Features

  • Structured {stdout, stderr} return from shell tool with output schema #7604
  • Analyze platform extension with tree-sitter AST parsing #7542
  • Anthropic adaptive thinking support #7356
  • Fullscreen and PiP display modes for MCP Apps #7312
  • Persistent text bar with message queue #7560
  • Self-signed HTTPS for goosed server #7126
  • pctx/Code Mode as optional dependency via 'code-mode' feature #7567
  • Goose AI bot can search goose codebase #7508
  • Goose-powered release notes generator workflow #7503

🐛 Bug Fixes

  • Resolve parameters in initial message with autosubmit #7659
  • Schedules added via CLI now show up in UI #7594
  • Validate configure probe for streaming providers #7564
  • Claude-code permission routing for smart-approve #7501
  • Avoid debug logging by default in CLI #7569
  • Panic on corrupted permission.yaml instead of silently allowing all #7458
  • Handle null reasoning effort in OpenAI Responses API #7469
  • Preserve order in OpenAI Responses API history #7500
  • Replace unwrap() with graceful error in scheduler execute_job #7436
  • Dictation API error message shows correct limit #7423
  • Use ACP schema types for session/list #7409
  • Desktop bundle and updater asset naming configurable #7337
  • New Recipe Warning closes on cancel #7524
  • ACP session creation when model listing is unavailable #7484
  • Prevent crashes in long-running Electron sessions #7481
  • Windows MSVC linking issues #7511
  • Handle Bedrock 'prompt is too long' error #7550

🔧 Improvements

  • Merge platform/builtin extensions #7630
  • Custom provider creation experience improvements #7541
  • Better network failure error & Anthropic retry #7595
  • Add base_path field to custom provider config #7558
  • Simplify developer extension #7466
  • Disable tool pair summarization #7481
  • GPT 5-3-Codex model support in Databricks #7516
  • Apps page visual improvements #7579
  • Restore old system prompt behavior around subagents #7576
  • OpenAI reasoning model cleanup #7529
  • Add analyzer extension in recipe for backwards compatibility #7652
  • Dockerfile: add missing build/runtime dependencies #7546
  • Allow GOOSE_NODE_DIR override in batch file #7422

📚 Documentation

  • Correct Goose emoji 🪿 instead of Swan in README.md #7485
  • Outdated clippy command in goosehints #7590

v1.26.2

04 Mar 23:01

Choose a tag to compare

🐛 Bug Fixes

  • Allow sandbox to write to goose config.yaml #7656

v1.25.3

04 Mar 21:20

Choose a tag to compare

fix: this should not be blocked (#7656)

v1.26.1

27 Feb 23:45

Choose a tag to compare

🐛 Bug Fixes

  • Restore old system prompt behavior around subagents #7576