v1.48.0
aaif-goose/goosev1.48.0Aug 27, 2026by github-actions[bot]
AI Summary
This release expands provider support with new declarative providers and model updates (GPT-5.6, GLM-5.3), significantly enhances the desktop UI with chat history management and interactive elements, and introduces new CLI commands alongside improved observability via OpenTelemetry.
Key Highlights
- Adds support for new declarative providers like TrustedRouter, OpenCode Zen, and several OpenAI-compatible providers (Gondola, SayGM, Lynkr).
- Enhances desktop UI with collapsed chat history sessions, provider sorting, auto-focus input, and an interactive git branch indicator.
- Introduces a `/new` CLI command for starting fresh sessions and allows naming extensions via `--with-extension`.
- Adds new model support including GPT-5.6 routing via AWS Bedrock and updates to GLM-5.3.
- Improves observability with OpenTelemetry support for request params and metadata.
New Features
- `on_failure` block for PreToolUse hooks.
- Web-search and browser-use built-in skills.
- Select saved recipes when creating a schedule.
- OpenTelemetry request params and response metadata support.
- `/new` command to start a fresh session.
- Interactive git branch indicator in the chat bottom bar.
- `--with-extension` can now name its extension.
Full Release Notes
## ✨ Features ### Providers - TrustedRouter declarative provider [#11422](https://github.com/aaif-goose/goose/pull/11422) - OpenCode Zen gateway as a declarative provider [#10939](https://github.com/aaif-goose/goose/pull/10939) - Gondola as declarative OpenAI-compatible provider [#11421](https://github.com/aaif-goose/goose/pull/11421) - SayGM as declarative OpenAI-compatible provider [#11267](https://github.com/aaif-goose/goose/pull/11267) - Lynkr as a declarative OpenAI-compatible provider [#11372](https://github.com/aaif-goose/goose/pull/11372) - PleumRouter declarative provider [#10479](https://github.com/aaif-goose/goose/pull/10479) - Z.ai GLM-5.2 replaced with GLM-5.3 [#11226](https://github.com/aaif-goose/goose/pull/11226) - Custom provider cost fields drive cost tracking [#11220](https://github.com/aaif-goose/goose/pull/11220) - Model-native audio transcription provider [#10589](https://github.com/aaif-goose/goose/pull/10589) - OpenAI GPT-5.6 (sol/terra/luna) routing via AWS Bedrock [#10502](https://github.com/aaif-goose/goose/pull/10502) - GPT-5.6 follow-up support for Codex and Responses API [#10460](https://github.com/aaif-goose/goose/pull/10460) ### Hooks - `on_failure` block for PreToolUse hooks [#11449](https://github.com/aaif-goose/goose/pull/11449) - PreToolUseResult event and stable tool_call_id across tool lifecycle [#11120](https://github.com/aaif-goose/goose/pull/11120) ### Desktop & UI - Select saved recipes when creating a schedule [#10892](https://github.com/aaif-goose/goose/pull/10892) - Sort configured providers to the top of the provider list [#11409](https://github.com/aaif-goose/goose/pull/11409) - Collapse scheduled job sessions into accordion in chat history [#11265](https://github.com/aaif-goose/goose/pull/11265) - Auto-focus chat input when user starts typing [#11184](https://github.com/aaif-goose/goose/pull/11184) - Interactive git branch indicator in chat bottom bar [#11290](https://github.com/aaif-goose/goose/pull/11290) - Show recent used models in chat footer model picker [#11097](https://github.com/aaif-goose/goose/pull/11097) ### CLI - `--with-extension` can now name its extension [#11127](https://github.com/aaif-goose/goose/pull/11127) - `/new` command to start a fresh session without restarting [#10767](https://github.com/aaif-goose/goose/pull/10767) ### Skills & Extensions - Web-search and browser-use built-in skills [#11233](https://github.com/aaif-goose/goose/pull/11233) - Support pre-registered OAuth clients for streamable_http extensions [#11182](https://github.com/aaif-goose/goose/pull/11182) ### ACP - Derive and forward thinking effort from the ACP harness [#10949](https://github.com/aaif-goose/goose/pull/10949) - Title new sessions from `_meta.sessionTitle` [#10712](https://github.com/aaif-goose/goose/pull/10712) - `_goose/unstable/session/extensions/apply` method [#11081](https://github.com/aaif-goose/goose/pull/11081) ### Observability - OpenTelemetry request params, response metadata, tool call parity, and agent identification [#11261](https://github.com/aaif-goose/goose/pull/11261) - OpenRouter session_id forwarding and app category header [#10868](https://github.com/aaif-goose/goose/pull/10868) ### Other - Blox run target for the ACP server [#11423](https://github.com/aaif-goose/goose/pull/11423) - Linux ARM64 desktop release packages [#11518](https://github.com/aaif-goose/goose/pull/11518) - Roaming as opt-in goose-cli feature [#11516](https://github.com/aaif-goose/goose/pull/11516) - MCP conformance tests in CI [#10940](https://github.com/aaif-goose/goose/pull/10940) ## 🐛 Bug Fixes ### Security - Recognize Windows package runners [#11466](https://github.com/aaif-goose/goose/pull/11466) - Fail closed on malformed tool visibility [#11474](https://github.com/aaif-goose/goose/pull/11474) - Permission denies take precedence [#11477](https://github.com/aaif-goose/goose/pull/11477) - Clear custom provider transition secrets [#11467](https://github.com/aaif-goose/goose/pull/11467) - Require fresh file parameter input [#11455](https://github.com/aaif-goose/goose/pull/11455) - Escape OAuth callback content [#11479](https://github.com/aaif-goose/goose/pull/11479) - Sanitize Unicode tags in MCP prompts [#11453](https://github.com/aaif-goose/goose/pull/11453) - Honor plugin enablement for skills [#11439](https://github.com/aaif-goose/goose/pull/11439) - Honor MCP tool model visibility in Code Mode [#11425](https://github.com/aaif-goose/goose/pull/11425) - Suppress sensitive OTLP traces [#11381](https://github.com/aaif-goose/goose/pull/11381) - Fail closed on invalid default GCP credentials [#11363](https://github.com/aaif-goose/goose/pull/11363) - Bound call graph traversal [#11193](https://github.com/aaif-goose/goose/pull/11193) - Fail closed on invalid Codex ACP mode [#11362](https://github.com/aaif-goose/goose/pull/11362) - Validate memory categories [#11191](https://github.com/aaif-goose/goose/pull/11191) - Bound recursive mention scans [#11228](https://github.com/aaif-goose/goose/pull/11228) - Avoid predictable editor symlink [#11188](https://github.com/aaif-goose/goose/pull/11188) - Fail closed on malformed app visibility [#11341](https://github.com/aaif-goose/goose/pull/11341) - Encode session navigation parameters [#11232](https://github.com/aaif-goose/goose/pull/11232) - Redact URLs in provider errors [#11230](https://github.com/aaif-goose/goose/pull/11230) - Validate recipe parameter values [#11234](https://github.com/aaif-goose/goose/pull/11234) - Bind Foundry API keys to request origin [#11347](https://github.com/aaif-goose/goose/pull/11347) ### Providers - Stop provider save from overwriting stored config with defaults [#11517](https://github.com/aaif-goose/goose/pull/11517) - Sanitize hidden Unicode in Bedrock tools [#11121](https://github.com/aaif-goose/goose/pull/11121) - Bound non-streaming JSON responses [#11109](https://github.com/aaif-goose/goose/pull/11109) - Inform user of clipboard copy and remove copilot auth retry on timeout [#11160](https://github.com/aaif-goose/goose/pull/11160) - Escape Gemini tool response ref keys in OpenRouter [#11276](https://github.com/aaif-goose/goose/pull/11276) - Estimate cost for Azure Foundry models via inferred catalog pricing [#11264](https://github.com/aaif-goose/goose/pull/11264) - Coalesce consecutive Thinking blocks in collect_stream [#11317](https://github.com/aaif-goose/goose/pull/11317) - Replace flat model list with routing table, add Gemma 4 Mantle support [#10297](https://github.com/aaif-goose/goose/pull/10297) - Include thinking tokens in Google usage output_tokens [#10354](https://github.com/aaif-goose/goose/pull/10354) - Send explicit thinking disabled to adaptive Claude models [#11177](https://github.com/aaif-goose/goose/pull/11177) - Include required annotations field on replayed output_text items [#11263](https://github.com/aaif-goose/goose/pull/11263) - Deprecated Gemini OAuth provider [#11223](https://github.com/aaif-goose/goose/pull/11223) - Stop paying the prompt-cache write premium on one-shot fast-model calls [#11179](https://github.com/aaif-goose/goose/pull/11179) - Classify byte-size request limit errors as context-length-exceeded [#11173](https://github.com/aaif-goose/goose/pull/11173) - Bound local image reads [#11114](https://github.com/aaif-goose/goose/pull/11114) - Map kimi_code provider name and pass correct provider to create_request [#11130](https://github.com/aaif-goose/goose/pull/11130) - Handle error code for context length exceeded [#11283](https://github.com/aaif-goose/goose/pull/11283) - DeepSeek and Alibaba compatibility with OpenAI responses API [#11298](https://github.com/aaif-goose/goose/pull/11298) ### Desktop & UI - Honor remote working directory for new chats and allow typed paths [#11322](https://github.com/aaif-goose/goose/pull/11322) - Scope app events by extension [#11486](https://github.com/aaif-goose/goose/pull/11486) - Pin renderer ACP certificates [#11485](https://github.com/aaif-goose/goose/pull/11485) - Bind ACP permissions to request generations [#11415](https://github.com/aaif-goose/goose/pull/11415) - Chat input freeze after opening model picker [#11525](https://github.com/aaif-goose/goose/pull/11525) - Gate external URL protocols centrally [#11311](https://github.com/aaif-goose/goose/pull/11311) - Stop stale microphone test streams [#11309](https://github.com/aaif-goose/goose/pull/11309) - Prevent recipe parameter form from reloading the app on Enter [#10522](https://github.com/aaif-goose/goose/pull/10522) - Suppress extension loading toast when all extensions succeed [#11016](https://github.com/aaif-goose/goose/pull/11016) ### CLI & Shell - Reject cmd.exe commands containing newlines [#11537](https://github.com/aaif-goose/goose/pull/11537) - Refuse symlink diagnostics outputs [#11398](https://github.com/aaif-goose/goose/pull/11398) - Deduplicate enabled builtins [#11340](https://github.com/aaif-goose/goose/pull/11340) - Avoid reading file params in recipe explain [#11119](https://github.com/aaif-goose/goose/pull/11119) - Honor provider overrides on session resume [#10810](https://github.com/aaif-goose/goose/pull/10810) ### Core - Deduplicate parallel tool-pair summaries [#11195](https://github.com/aaif-goose/goose/pull/11195) - Exclude Git metadata from project hints [#11148](https://github.com/aaif-goose/goose/pull/11148) - Avoid sending images to non-vision capable models [#11496](https://github.com/aaif-goose/goose/pull/11496) - Keep recalled history agent-visible [#11490](https://github.com/aaif-goose/goose/pull/11490) - Honest compaction failure message and fast-fail when no tool responses exist [#10500](https://github.com/aaif-goose/goose/pull/10500) - Pass complete response to stop hooks [#11366](https://github.com/aaif-goose/goose/pull/11366) - Contain and bound skill supporting file reads [#11342](https://github.com/aaif-goose/goose/pull/11342) - Compact with the main session model, not the fast model [#11255](https://github.com/aaif-goose/goose/pull/11255) - Make Gemini plugin installs transactional [#11303](https://github.com/aaif-goose/goose/pull/11303) - Include working directory in stop hook context [#11112](https://github.com/aaif-goose/goose/pull/11112) - Re-enable minijinja builtins so documented recipe filters work [#11310](https://github.com/aaif-goose/goose/pull/11310) - Show tool inputs before approval [#10932](https://github.com/aaif-goose/goose/pull/10932) - Reject context commands for context-owning providers [#11094](https://github.com/aaif-goose/goose/pull/11094) - Bind deeplink recipe parameters to startup session [#11123](https://github.com/aaif-goose/goose/pull/11123) ### ACP - Restrict project updates to visible sessions [#11487](https://github.com/aaif-goose/goose/pull/11487) - Seed provider handoff history [#8941](https://github.com/aaif-goose/goose/pull/8941) - Preserve tool result audience metadata [#11375](https://github.com/aaif-goose/goose/pull/11375) - Bound the handoff memo so long sessions stay resumable [#11204](https://github.com/aaif-goose/goose/pull/11204) - Return auth error for ACP provider from goose ACP server [#11202](https://github.com/aaif-goose/goose/pull/11202) - Ignore ACP provider generated title and use goose generated title [#11197](https://github.com/aaif-goose/goose/pull/11197) - Prevent large-session disconnects [#11159](https://github.com/aaif-goose/goose/pull/11159) ### Recipes - Confine library writes [#11482](https://github.com/aaif-goose/goose/pull/11482) - Reject non-object response schemas [#11478](https://github.com/aaif-goose/goose/pull/11478) - Confine temporary extraction cleanup [#11125](https://github.com/aaif-goose/goose/pull/11125) ### Extensions & MCP - Reject symlinked check sources [#11489](https://github.com/aaif-goose/goose/pull/11489) - Reject socket-backed MCP extensions for Codex [#11304](https://github.com/aaif-goose/goose/pull/11304) - Keep stdio extensions alive across worker exits [#10364](https://github.com/aaif-goose/goose/pull/10364) - Preserve extensions when adding MCP servers [#11339](https://github.com/aaif-goose/goose/pull/11339) - Preserve platform tool allowlists [#11369](https://github.com/aaif-goose/goose/pull/11369) ### Other - Claude-Code: protect system prompt transport [#11441](https://github.com/aaif-goose/goose/pull/11441) - Fail fast when a recipe's structured response can't reach an ACP-bridged provider [#11307](https://github.com/aaif-goose/goose/pull/11307) - Fetch attestation bundles from bundle_url [#10557](https://github.com/aaif-goose/goose/pull/10557) - Contain REVIEW.md discovery [#11367](https://github.com/aaif-goose/goose/pull/11367) - Sanitize Pi imported output [#10990](https://github.com/aaif-goose/goose/pull/10990) - Honor RUST_LOG directives for OTEL logs [#11360](https://github.com/aaif-goose/goose/pull/11360) - Give GOOSE_SUBAGENT_PROVIDER/MODEL priority over LLM-injected params [#9650](https://github.com/aaif-goose/goose/pull/9650) - Respect ACP audience in bang-shell shortcut [#11150](https://github.com/aaif-goose/goose/pull/11150) - Redact Telegram tokens from request errors [#11343](https://github.com/aaif-goose/goose/pull/11343) - Isolate concurrent subagent notifications [#10772](https://github.com/aaif-goose/goose/pull/10772) - Serialize secret mutations [#11388](https://github.com/aaif-goose/goose/pull/11388) - Enforce secure OAuth token transport [#11183](https://github.com/aaif-goose/goose/pull/11183) - Skip local extension spawn when provider manages own context [#11203](https://github.com/aaif-goose/goose/pull/11203) - Decouple source file and tool response limits [#11391](https://github.com/aaif-goose/goose/pull/11391) - Bound action-required stream admission [#11113](https://github.com/aaif-goose/goose/pull/11113) - Bound partial thinking tags [#11108](https://github.com/aaif-goose/goose/pull/11108) - Enforce review check tool policy [#11128](https://github.com/aaif-goose/goose/pull/11128) - Secure Copilot API endpoint transport [#11129](https://github.com/aaif-goose/goose/pull/11129) - Remove goose tui command [#11484](https://github.com/aaif-goose/goose/pull/11484) - Update SQLite to 3.51.3 [#11157](https://github.com/aaif-goose/goose/pull/11157) - Narrow desktop file read IPC [#11149](https://github.com/aaif-goose/goose/pull/11149) - Render visualizer data as text [#11186](https://github.com/aaif-goose/goose/pull/11186) - Bound XLSX range reads [#11190](https://github.com/aaif-goose/goose/pull/11190) ## 🔧 Improvements - Session listing performance: limit sessions before counting messages [#11521](https://github.com/aaif-goose/goose/pull/11521) - Keep turn-context out of the OpenAI-compatible prefix cache [#10937](https://github.com/aaif-goose/goose/pull/10937) - Parallelize provider resolution and eagerly init SQLite pool [#8899](https://github.com/aaif-goose/goose/pull/8899) - Deduplicate _goose/providers/list RPC call at startup [#8873](https://github.com/aaif-goose/goose/pull/8873) - ACP provider setup and unified setup metadata [#11100](https://github.com/aaif-goose/goose/pull/11100) - Disable thinking for tool call labels [#11207](https://github.com/aaif-goose/goose/pull/11207) - Canonicalize mangled tool names before permission inspection [#10285](https://github.com/aaif-goose/goose/pull/10285) - Gate clear_thinking behind an opt-in flag (Z.AI-only) [#10439](https://github.com/aaif-goose/goose/pull/10439) - Scan uvx from selectors for malware [#10988](https://github.com/aaif-goose/goose/pull/10988) - Aura dark theme for Goose [#10283](https://github.com/aaif-goose/goose/pull/10283) - Unrolled agent loop state machine [#11216](https://github.com/aaif-goose/goose/pull/11216) - Generic unrolled loop state machine [#11139](https://github.com/aaif-goose/goose/pull/11139) - Retry ACP handoff context after failed prompts [#10660](https://github.com/aaif-goose/goose/pull/10660) - Use rmcp ContentBlock in goose-sdk UniFFI [#11210](https://github.com/aaif-goose/goose/pull/11210) - Upgrade ACP SDK to 1.3.0 [#11218](https://github.com/aaif-goose/goose/pull/11218) - Mergeable configs and cleanup [#8378](https://github.com/aaif-goose/goose/pull/8378) - Move mlx deps under macOS for goose-local-inference [#11328](https://github.com/aaif-goose/goose/pull/11328) - Share axum-server via workspace.dependencies [#11326](https://github.com/aaif-goose/goose/pull/11326) - Remove automation_script, web_scrape, and cache tools from computercontroller [#11198](https://github.com/aaif-goose/goose/pull/11198) - Agent provider using explicit type states [#8879](https://github.com/aaif-goose/goose/pull/8879) ## 📚 Documentation - SDK API reference for Rust, Python, and Kotlin [#11251](https://github.com/aaif-goose/goose/pull/11251) - Correct Telegram gateway setup [#11527](https://github.com/aaif-goose/goose/pull/11527) - Keep GitHub comments concise [#11447](https://github.com/aaif-goose/goose/pull/11447) - Improve readability in AGENTS.md [#8979](https://github.com/aaif-goose/goose/pull/8979)