github aaif-goose/goose v1.46.0

3 hours ago

✨ Features

  • Unrolled agent loop #9574
  • Cache-safe request assembly with append-only turn context and declared cache semantics #11022
  • Streaming shell output while commands run #10808
  • Per-message usage stats UI (tokens, cost, TTFT, tok/s) #10210
  • Per-message usage/cost tracking with derived session totals #10172
  • Track cache tokens for accurate cost reporting #9752
  • Markdown format option to session export #10703
  • Resizable sidebar with drag handle and persisted width #10795
  • Interactive menu for single select elicitations #10327
  • Session metadata on sidebar chat hover #10663
  • Configurable LOCAL_WHISPER_LANGUAGE for multilingual local transcription #10634
  • Allow disabling built-in skills #10600
  • Structured summary output with template rendering for compaction #10471
  • Pass working_dir to the Stop hook context #10296
  • Surface output-token-limit info #10831
  • Tab completion and switch provider for model command #10585
  • Collapse const-union enums in tool schemas #10577
  • GenAI semantic convention attributes for OTEL #10700
  • Enrich root span with gen_ai attributes and improve OTEL output format #10816
  • Forward images and MCP embedded-resource blobs in Anthropic and Google formats #10340
  • ACP session/new supports Hidden session via _meta.hidden #10811
  • Stable agent event message identity #10716
  • OAuth logo_uri in client ID metadata documents #10727
  • Termux detection in installer to select musl portable build #10568
  • Hooks feature with PreToolUse denial #9093, #9304
  • /goal command for agent self-evaluation before finishing #9069
  • /status slash command #9845
  • /model slash command to switch session model #8747
  • --edit session flag to edit conversation before forking #9799
  • goose review local code review command #9114
  • Open plugins generalization with skills support #9112
  • Summon extension: peek mode for async background tasks #9519
  • Summon extension: context and working_dir parameters for delegate tasks #9518, #9520
  • Load global hints from ~/.agents/AGENTS.md #9736
  • Proactive OAuth token refresh to avoid re-auth on every session #8386
  • GOOSE_OAUTH_CALLBACK_PORT for stable OAuth redirect_uri #9209
  • Unified thinking effort control across all providers #9242
  • Projects as backend sources with system prompt injection #8739
  • Group chat sessions by project in nav panel #10212
  • Collapsible project group headers in nav panel #10278
  • Worktree-aware directory switcher #8450
  • Chat history search feature in navigation panel #8448
  • Search filter to provider grid #10437
  • Option to disable automatic update downloads #9872
  • TUI diff viewer #9260
  • MAX_CODE_BLOCK_LINES configurable via env vars #9301
  • GOOSE_MAX_TOOL_RESPONSE_SIZE to configure tool output size limit #9256
  • GOOSE_FAST_MODEL env var in ModelConfig::with_fast #9296
  • GOOSE_DOCS_ROOT for air-gapped docs access #10294
  • Quarterly option for scheduler #9076
  • Harbor eval runner #9138
  • goose://new-session and goose://resume deep links #9196, #9343
  • Initial prompt with goose://new-session #9427
  • Encrypted Nostr session sharing #8922
  • Import sessions #9474
  • Hugging Face OAuth support with auth tab in settings #9552
  • MLX models support in local inference provider #9154
  • Linux Vulkan support for local inference #9038
  • Reconnect desktop ACP sessions after sleep and connection loss #10411
  • TLS support for ACP serve #10088
  • Group consecutive tool calls into one summarized chain card #8995
  • Bind MCP apps to trusted ownership metadata #10747
  • MCP extensions in open plugins #9471
  • Skills to the chat composer #8881
  • Dynamically refresh skill instructions each turn #9217
  • CLI to list skills with token counts #9326
  • Image read tool #9607
  • View model interactions #9806
  • UniFFI SDK for cross-language bindings #9593
  • Provider bindings MVP to goose-sdk with Python wheel publishing #10208
  • Kotlin FFI with build and Maven publish #10375
  • Create source archive as release artifact #10786

New Providers

  • Celeris provider #10714
  • Friendli declarative provider #10762
  • Azure AI Foundry multi-LLM provider #10622
  • OllamaCloud provider with dynamic model discovery #10264
  • Sakana AI provider for OpenAI-compatible Fugu API #10357
  • iFlytek Spark and Astron MaaS providers #9837
  • Fireworks AI declarative provider #9990
  • OpenRouter request parameters support #9276
  • Together AI declarative provider #9545
  • OrcaRouter declarative provider #9515
  • Perplexity declarative provider #9324
  • Alibaba (Qwen via DashScope) declarative provider #9443
  • Databricks AI Gateway provider #9274
  • Scaleway provider #9254
  • NEAR AI Cloud provider #9352
  • EmpirioLabs declarative provider #9771
  • xAI SuperGrok OAuth subscription provider #9420
  • Vercel AI Gateway #9144
  • Routstr declarative provider #9175
  • FuturMix provider #8840
  • oMLX declarative provider #9177
  • Atomic Chat declarative provider #9210
  • Muse Spark 1.1 via Meta Models API #10432
  • AWS Bedrock support for OpenAI GPT models via mantle endpoint #9707
  • Azure AD (Entra ID) bearer token auth via AZURE_OPENAI_AD_TOKEN #9716

New Models

  • GPT-5.6 support #10384, #10349
  • GPT-5.5 to ChatGPT Codex known models #9292
  • GLM-5.2 support #9967
  • Opus5 support with adaptive thinking #10686
  • Claude-sonnet-5 and claude-fable-5 to known models #10865, #10183
  • Cursor composer-2.5 models #10618
  • Cursor-agent models from CLI #10367
  • Latest Gemini models #10630
  • Gemini 3.x known locations and KNOWN_MODELS entries #9142
  • MiniMax-M3 and M2.7 variants #10431
  • OVHcloud Qwen3.6-27B model #10339

Internationalization

  • French, German, Italian, Portuguese, Indonesian, Malay, Vietnamese, zh-TW desktop locales #10072
  • Korean localization #9856, #10667
  • Spanish (es) locale #9833
  • Japanese locale #9768
  • Hindi Desktop locale #9733
  • Russian language support #9406
  • Turkish desktop locale #9392
  • Simplified Chinese (zh-CN) translation #8765
  • Language selection feature #9405

šŸ› Bug Fixes

  • Reject invalid subrecipe content #10994
  • Keep turn-context in place for OpenAI Responses-stack models for prompt caching #10993
  • Byte-bound the shell truncation preview #10992
  • Stop silently ignoring thinking effort off for OpenRouter #10991
  • Dispatch edited queued messages #10933
  • Contain recipe template paths #10930
  • Make shell approval titles faithful #10986
  • Block MCP app form submissions #10985
  • Sanitize Bedrock tool errors #10934
  • Implicit OAuth during model discovery #10929
  • Keep ACP session naming out of live conversations #10963
  • Sanitize Unicode tags in MCP resources #10746
  • Preserve RFC 9207 iss from MCP OAuth callback #10678
  • Shell ACP providers on desktop #10907
  • Stop killing streaming responses at the total request timeout #10620
  • Restore final_output_tool when agent is recreated after LRU eviction #10793
  • Avoid O(n²) cloning during session load #10665
  • Prefix child stderr log target so it passes the default goose=info filter #10901
  • Fall back to static model list only for non-models payloads #10189
  • Stdio extensions silently skipped when name missing or env: used in config #10773
  • Start scheduler at startup instead of first ACP connection #10766
  • Respect disabled builtin extensions (developer) at session start #10223
  • Parse PyPI requirements for OSV checks #10510
  • Contain voice file extensions in telegram #10456
  • Preserve denied tool request precedence #10612
  • Contain subdirectory hint discovery #10545
  • Clear stale validation error when reopening the schedule modal #10627
  • Sanitize shell/subprocess call in linux.rs #10748
  • Unlink destination before copying binaries #10705
  • Honor timeout_seconds on the Anthropic declarative provider #10440
  • Allow removing images when editing user messages #9979
  • Preserve thinking inline for Cerebras models that reject reasoning_content #10774
  • Make CLI streaming render incremental instead of O(n^2) #10487
  • Together provider: parse model list response #10576
  • DeepSeek model names to v4 API #10729
  • Forward Claude Code and Pi model picker selection to the adapter #10675, #10707
  • Preserve enabled flag when migrating platform extensions #10690
  • Pass session working_dir to on_call_tool #10689
  • Preserve adversary tool arguments #10529
  • Keep XML snippets inside JSON as data for local-inference #10606
  • Sync generated chat title in header #10578
  • Prompt for tool approval in Telegram gateway sessions #10613
  • Keep CLI provider prompts out of process arguments #10547
  • Ignore stale inventory for static model lists #10591
  • Preserve featured model size on delete and backfill missing sizes #10422
  • Create inventory tables atomically with schema version #10586
  • Rewrite oneOf to anyOf in tool schemas for OpenAI-compatible backends #10571
  • Allow custom model as default for non-local providers #10438
  • Require absolute goose path roots #10454
  • Scope smart approval by request #10457
  • Preserve fixed subrecipe values #10452
  • Bundle git so hermit can clone its package registry in Flatpak #10511
  • Forward image content chunks to client during live ACP session #10485
  • Dispatch Code Mode callbacks on main runtime to prevent hangs #10484
  • Protect OAuth token caches #10516
  • Preserve content audience boundaries #10493
  • Bound scheduled recipe validation #10509
  • Return JSON-RPC errors from dispatch handlers instead of killing the connection #10499
  • Avoid local inference Metal teardown crash #10508
  • Enable indexmap serde support for musl builds #10507
  • Scroll chat to the latest reply on session resume #10501
  • Secure large response spill files #10482
  • Register LiteLLM with refresh_only inventory so model picker lists models #10489
  • Limit provider selector height in CLI #10420
  • Tighten existing secrets file permissions #10453
  • Classify image access capabilities in developer extension #10451
  • Preserve one-time permission scope #10450
  • Register goose:// scheme handler in Flatpak desktop entry #10461
  • Reject duplicate recipe parameter keys #10448
  • Synchronously kill orphaned goose serve backends on GUI close #10292
  • Break self-referential $ref cycles before Code Mode schema #10469
  • Stop multiline paste auto-submitting line-by-line on Windows #10326
  • Hide nested config values in Configuration Editor #10390
  • Stop resolving TUI scripts from cwd #10449
  • Exclude MCP App tools from Code Mode callbacks #10290
  • Apply the default extension timeout to developer shell tool calls #10348
  • Preserve reasoning_content for DeepSeek thinking mode on multi-turn tool calls #10366
  • Make prompt timestamps timezone-explicit #10209
  • Compact disabled during approval #10089
  • Treat empty-string finish_reason as non-terminal in streaming #10258
  • Gemini OAuth onboarding #10363, #8905
  • Retry empty provider turns instead of stopping silently #10360
  • Guard llama.cpp backend init against SIGILL on x86_64 CPUs without FMA/AVX2 #10105
  • Sanitize responses function call names #10344
  • Pick session mode from the ids the agent actually offers #10320
  • Dedupe duplicate signed thinking blocks to fix Anthropic 400 #10083
  • Resolve provider default model instead of leaking sentinel "current" #10305
  • Return effective context limit from /model-info #10165
  • Gate rcgen aws_lc_rs feature behind rustls-tls #10116
  • Tolerate partial Responses output items #10108
  • Always use OpenAI-compatible "parameters" for tools in Databricks #10101
  • Unescape shell-escaped image paths #10098
  • Seed mac auto-update config #10132
  • Send inference config (max_tokens, temperature) on Bedrock Converse #9889
  • Dedupe Nostr session deep link imports #9918
  • Don't retry deterministically-permanent 400s (thinking-block immutability) #10005
  • Use async reqwest client so OTLP export works in goose serve mode #10100
  • Reject non-object tool-call arguments instead of panicking #9832
  • Save /edit prompts to history #10011
  • Use session.message_count for schedule sessions listing #10026
  • Support streamed tool calls without indexes #10023
  • Disable extended thinking for fast-model operations #9815
  • Buffer thinking across stream chunks for DeepSeek/Kimi tool calls #9704
  • Surface actionable errors for truncated tool-call arguments #9946
  • Show optimistic toggle state when disabling an extension #9882
  • Resolve databricks_v2 pricing and surface cost in standard usage update #9925
  • Publish mac updater metadata #9945
  • Activate hermit on macOS so STDIO extensions resolve node #9482
  • Accept JSON-encoded string for autovisualiser data parameter #9838
  • Send User-Agent on URL image fetches in developer/read_image #9927
  • Do not pass temperature to ChatGPT Codex provider #9931
  • Sanitize extension environment maps #9884
  • GCP: use refreshed gcloud token after reauth (retry Vertex AI on 401/403) #9849
  • Start a turn when /goal or /grind is set #9801
  • Pass thinking config to Bedrock Anthropic models #9794
  • Keep extensions icon visible after switching sessions #9787
  • Skip non-recipe project config files in summon #9808
  • Dedup duplicate tool-call ids within a turn #9792
  • Resolve bundled extensions from discovery #9759
  • Custom OpenAI provider dropping port when URL scheme is omitted #9730
  • Preserve Windows backslash paths in custom extension command #9741
  • Include agentInfo in ACP initialize response #9765
  • ACP cancel race condition #9804
  • Inherit login-shell PATH in spawned subagents #9737
  • Accept string values for GOOSE_CONTEXT_LIMIT #9738
  • Clear rejected OAuth credentials after refresh #9694
  • Keep extended thinking within the Anthropic output cap #9814
  • Disable RPM build-id links #9671
  • Preserve custom API path in base_url derivation for OpenAI #9649
  • Handle resume deep links #9298
  • Repair PATH for plugin hook commands #9615
  • Restore Cmd/Ctrl+T new chat shortcut #9614
  • Lead with extension description, shorten HTTP/SSE transport label #9653
  • Mention menu icon to open the sidebar #9643
  • Dedupe React to prevent multiple instances in renderer #9631
  • Add hermit cleanup to uvx and jbang scripts #9616
  • Use blocking OTLP HTTP exporter #9599
  • Fall back to default provider when resuming session with unavailable provider #9547
  • Provide Tokio runtime for OTLP HTTP exporter batch thread #9541
  • Read meta.n_ctx from /v1/models to fix context limit for local servers #9530
  • Align session history scrollbar with window edge #9601
  • Refresh session name in sidebar after rename #9543
  • Show resolved skill supporting file paths #9584
  • Implement real Bedrock streaming via ConverseStream API #9579
  • Record OpenAI-native cached_tokens in usage metering #9829
  • Add option for overriding API URL for Moonshot provider #9819
  • Detect image paths with spaces #9387
  • Restore new chat shortcut navigation #9528
  • Evict stale completed tasks to prevent unbounded memory growth in summon #9514
  • OAuth: time out the MCP callback wait instead of hanging in WSL #9536
  • Warn on unmatched extension names in summon delegate #9513
  • Deleting a recently created session and then creating a new shows the deleted session's content #9351
  • Propagate elicitation decline and cancel actions end-to-end #9437
  • Close modal when canceling recipe parameter form #9195
  • Ensure tool request timestamp precedes tool response timestamp #9462
  • Correctly map ollama_cloud to canonical provider #9639
  • Incorrect max tokens values for groq provider #9790
  • Mark stream decode errors retryable #9723
  • Classify Bedrock ValidationException as ExecutionError #9735
  • Page through all Databricks AI Gateway v2 endpoints when listing models #9753
  • Preserve unparseable extension entries during config refresh #9439
  • Sync slash help with builtins in CLI #10173
  • Treat unicode punctuation as image path terminators #10106
  • Don't bleed provider-specific request_params into delegate() sessions #9906
  • Purge empty phantom sessions on startup #9651
  • Include structuredContent from MCP tool response #10128
  • Propagate agent cleanup errors on session delete #10112
  • Prevent login-shell PATH probe from suspending goose on startup #8804
  • Exclude preprompt from session title generation #8793
  • Unscheduling a recipe should not delete them #8978
  • Seed provider handoff history in ACP #8941
  • Respect goose2 interface density settings #8953
  • Make goose2 respect accent color #8952
  • Preserve replay message timestamps #8942
  • Goose2 window minimum sizing #8946
  • Avoid transform-rasterized dialog text in goose2 #8937
  • Keep renamed skills open in detail view #8935
  • Model picker stays usable during provider loading #8900
  • Handle ACP requests concurrently #8781
  • Apply hermit env directly in node shims so a fish login shell doesn't break MCP startup #10028
  • Preserve command arguments through extension forms #10527
  • Enforce manual approval for code mode #10528
  • Confine app file operations #10481
  • Preserve recursive schema types with pctx 0.4.1 in code-mode #10572
  • Use shell working directory on initial launch #10655
  • Enable inventory refresh for OpenRouter model picker #10641
  • Preserve read lines and reload tool output in ACP #10662
  • Surface tool call output in CLI and Desktop #10654
  • Overlong function names in provider requests #10659
  • Preserve ACP tool call update fields #10653
  • Omit disabled OpenRouter reasoning #10517
  • Clear stale pending ACP connection after terminal recovery failure #10552
  • Confirm pending steer message on queuedSteer notification #10532
  • Restore dynamic model discovery and current Grok support #10756
  • Reuse parent provider for summon delegates #10754
  • Skip permission mode negotiation for Pi #10701
  • Freeze turn-context timestamp at turn start to preserve prefix cache #10734
  • Refresh Moonshot model list with current Kimi lineup #10696
  • Update Kimi-code known models metadata with current platform lineup #10713
  • Avoid double loading full conversation on session open #10794
  • Recover malformed tool calls from GLM/Minimax models instead of rejecting them #10230
  • Restore cursor when configure exits #4889

šŸ”§ Improvements

  • Keep turn-context out of the OpenAI-compatible prefix cache #10937
  • Keep turn-context out of the Anthropic prefix cache #10030
  • Parallelize provider resolution and eagerly init SQLite pool #8899
  • Deduplicate _goose/providers/list RPC call at startup #8873
  • Compact tool schema JSON #10409
  • Drop debug info for dependencies in the dev profile #9843
  • Use LRU cache for token counting #9586
  • Mergeable configs with cleanup #8378
  • Structured per-provider config block with non-destructive provider switching #8977
  • Linux musl CLI builds #9240
  • Windows CUDA release artifacts #8750
  • Linux desktop Vulkan packages #9323
  • Migrate desktop routing to React Router 8.3.0 #10971
  • Upgrade to rmcp 3.0 #10789
  • Handle MCP tool list change notifications #e7088ee
  • Redesign Extensions page #8940
  • Redesign skills library #8868
  • Dark mode inline code styling for message bubbles #10861
  • Refine dark theme message surfaces #10693
  • Inline code contrast improvement in light theme #9058
  • Polish sidebar navigation and project icons #8896
  • Simplify UI customization #9353
  • Better parsing of pasted HTML as markdown so agents understand #9190
  • Remove CLI project support #10838
  • Deprecate and remove ui/text TUI #10799
  • Remove MCP sampling support #10087
  • Make context exceeded checker more precise #9831
  • Update canonical model inventory #10352, #9709, #9551, #9331
  • Add canonical thinking modes #9743
  • Nushell terminal and completion support #8628
  • Migrate diagnostics to JSON report #9964
  • Route MCP elicitations through tool streams #9943
  • Allow unlisted models in search #9933
  • ACP paginate session list #9199
  • Flush OTLP traces reliably on exit with configurable timeout #9228
  • Increase /mcp-app-guest body limit for larger single-file MCP apps #10324
  • Use current_exe() instead of PATH lookup when spawning goose #9236
  • Set TCP_USER_TIMEOUT on streamable HTTP clients in extension_manager #9207
  • Fail closed on unverifiable update provenance #10168
  • Trim macOS desktop entitlements #10490
  • Consolidate and harden release workflows #10447
  • Update Rust toolchain and raise recursion limit #10303
  • Enhance the uniffi API layer #10427
  • Bound code-mode execution with timeout and cancellation #10214
  • Switch local inference MLX backend to use safemlx crate #10304
  • Preserve thinking content for providers that require it #8857, #9314
  • Build summon instructions per turn #9329
  • Refactor local inference around backends #9137
  • Stricter GGUF requirements with auto detection of tool calling support and fixed thinking output parsing #9442
  • Prefer goose aliases for Databricks v2 inventory #9430
  • ACP migration: UI connect to ACP directly instead of goosed #10081
  • Unified OTLP logging schema for cross-tool detection #9713
  • Pattern-based detection updates for prompt injection #9350, #9198, #9690, #8546
  • Enable prompt injection mitigation by default for internal users #9612
  • OpenAI Responses API store param configurable #10040
  • GitHub Copilot /responses API #9043
  • Check for responses API support in Databricks #9347
  • Honor Retry-After on 429 responses #9161
  • Coalesce streaming Thinking deltas and list available tools on not-found #9162
  • Strip chain-of-thought markers from custom provider output #8635
  • Coalesce streaming chunks under one message id in ACP #8788

šŸ“š Documentation

  • Document auto-injected GOOSE_SHELL flags #10759
  • Clarify macOS sandbox feature was removed in post-v1.25.0 cleanup #10900
  • Update Discord invite #10863
  • Update environment and config references #10203
  • Document hook deny contract, matcher regex, tool_input keys, and provider config #10467
  • Add Code of Conduct #10424
  • Adopt issue-first contribution workflow #10819
  • Update docs for ACP clients #9772
  • Hooks guide #9288
  • Custom agents guide #9293
  • Guide for connecting goose Desktop to a remote goosed server #9275
  • Document summon extension requirement for delegate and load tools #9231
  • Refresh Ophis extension page (tool list, chains, skills link) #10681
  • Clean up stale documentation audit findings #10114
  • Reorganize docs #9310
  • Blog: Goose with Peekaboo #8884
  • Blog: Built-in Local Inference #8808
  • Blog: Orchestrating with Goose #9104
  • Blog: Self-improving agents #9846
  • Blog: AAIF migration #9866
  • Blog: MiniMax and Office QA benchmark findings #8984

Don't miss a new goose release

NewReleases is sending notifications on new releases.