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