Releases: aaif-goose/goose
Releases · aaif-goose/goose
v1.30.0
🪿 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
--textmode — 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_URLoverride (#8204) - Configurable
fast_modelfor 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
_metaor 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-intlbased 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 inconfig.yaml(not just env vars) (#8097)GOOSE_CONTEXT_LIMIT— now readable fromconfig.yaml(#7900)GOOSE_DISABLE_KEYRING— now honoured fromconfig.yamlat startup (#8219)- Per-delegate
max_turnsoverride (#8066) skip_canonical_filteringfor declarative providers (#8052)
🏗️ Build & Packaging
- Optional
native-tlssupport — alternative to rustls for environments that need system TLS (#8037) - Feature-gated AWS provider dependencies — behind
aws-providersfeature 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
nullfor 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_jsonfor OpenAI streaming tool arguments (#8208) - Use
v1beta1API version for Google/MaaS models on GCP Vertex AI (#8278) - Use
build_host_urlfor GCP Vertex AI location fallback (#8185) - Parse nested usage payloads in LiteLLM (#8081)
- Prioritize predefined model
context_limitover canonical registry (#7888) - Always pass
--modelto 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-Authenticateheader (#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
anywith proper SVG types in icon components (#7873) - Fix extension command with quotes in CLI (#8150)
- Fix
overflow: clipto 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
PATHfor 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
v1.29.1
v1.29.0
✨ 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_SHELLenv 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
v1.28.0
✨ 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.thoughtfor 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-serverto 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...
v1.27.2
v1.27.1
v1.27.0
✨ 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
v1.26.2
v1.25.3
fix: this should not be blocked (#7656)