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)