v1.40.0

SparkAudio/Spark-TTSv1.40.0Jul 2, 2026by github-actions[bot]

AI Summary

Focuses on localization, CLI enhancements, and declarative AI provider support.

Key Highlights

  • Language selection feature in the desktop application.
  • Slash commands for CLI: /status and /model.
  • Declarative provider support for Together AI, EmpirioLabs, and OrcaRouter.
  • Summon task improvements including context and working directory overrides.

New Features

  • Language selection in desktop app
  • French, German, Italian, Portuguese, Indonesian, Malay, Vietnamese, Traditional Chinese desktop locales
  • Korean localization for desktop app
  • Japanese locale support
  • Spanish (es) locale support
  • Hindi desktop locale
  • Slash commands (/status, /model) in CLI
  • Peek mode for async background tasks in summon
  • Context parameter and working_dir override for delegate tasks
  • Together AI declarative provider
  • EmpirioLabs as declarative OpenAI-compatible provider
  • OrcaRouter as declarative OpenAI-compatible provider
  • MLX models support for local inference provider
  • Unified thinking effort control across all providers

Full Release Notes

## ✨ Features

- Language selection in desktop app [#9405](https://github.com/aaif-goose/goose/pull/9405)
- French, German, Italian, Portuguese, Indonesian, Malay, Vietnamese, Traditional Chinese desktop locales [#10072](https://github.com/aaif-goose/goose/pull/10072)
- Korean localization for desktop app [#9856](https://github.com/aaif-goose/goose/pull/9856)
- Japanese locale support [#9768](https://github.com/aaif-goose/goose/pull/9768)
- Spanish (es) locale support [#9833](https://github.com/aaif-goose/goose/pull/9833)
- Hindi desktop locale [#9733](https://github.com/aaif-goose/goose/pull/9733)
- `/status` slash command in CLI [#9845](https://github.com/aaif-goose/goose/pull/9845)
- `/model` slash command for session model switching [#8747](https://github.com/aaif-goose/goose/pull/8747)
- `/goal` command for agent self-evaluation before finishing [#9069](https://github.com/aaif-goose/goose/pull/9069)
- `goose review` local code review command [#9114](https://github.com/aaif-goose/goose/pull/9114)
- Peek mode for async background tasks in summon [#9519](https://github.com/aaif-goose/goose/pull/9519)
- Context parameter and working_dir override for delegate tasks [#9518](https://github.com/aaif-goose/goose/pull/9518) [#9520](https://github.com/aaif-goose/goose/pull/9520)
- GLM-5.2 support [#9967](https://github.com/aaif-goose/goose/pull/9967)
- Together AI declarative provider [#9545](https://github.com/aaif-goose/goose/pull/9545)
- EmpirioLabs as declarative OpenAI-compatible provider [#9771](https://github.com/aaif-goose/goose/pull/9771)
- OrcaRouter as declarative OpenAI-compatible provider [#9515](https://github.com/aaif-goose/goose/pull/9515)
- NEAR AI Cloud provider [#9352](https://github.com/aaif-goose/goose/pull/9352)
- Perplexity as declarative OpenAI-compatible provider [#9324](https://github.com/aaif-goose/goose/pull/9324)
- Alibaba (Qwen via DashScope) declarative provider [#9443](https://github.com/aaif-goose/goose/pull/9443)
- Databricks AI Gateway provider [#9274](https://github.com/aaif-goose/goose/pull/9274)
- Scaleway provider [#9254](https://github.com/aaif-goose/goose/pull/9254)
- Vercel AI Gateway [#9144](https://github.com/aaif-goose/goose/pull/9144)
- xAI SuperGrok OAuth subscription provider [#9420](https://github.com/aaif-goose/goose/pull/9420)
- OpenAI GPT models via AWS Bedrock mantle endpoint [#9707](https://github.com/aaif-goose/goose/pull/9707)
- Azure Entra ID bearer token auth via AZURE_OPENAI_AD_TOKEN [#9716](https://github.com/aaif-goose/goose/pull/9716)
- MLX models support for local inference provider [#9154](https://github.com/aaif-goose/goose/pull/9154)
- Streamable HTTP support for deeplink generator [#9954](https://github.com/aaif-goose/goose/pull/9954)
- Global hints loading from ~/.agents/AGENTS.md [#9736](https://github.com/aaif-goose/goose/pull/9736)
- Unified thinking effort control across all providers [#9242](https://github.com/aaif-goose/goose/pull/9242)
- Canonical thinking modes [#9743](https://github.com/aaif-goose/goose/pull/9743)
- Hooks system for extensibility [#9093](https://github.com/aaif-goose/goose/pull/9093)
- PreToolUse denial in hooks [#9304](https://github.com/aaif-goose/goose/pull/9304)
- Honor blocking Stop hook decisions [#9468](https://github.com/aaif-goose/goose/pull/9468)
- Option to disable automatic update downloads [#9872](https://github.com/aaif-goose/goose/pull/9872)
- Track cache tokens for accurate cost reporting [#9752](https://github.com/aaif-goose/goose/pull/9752)
- Configurable tool output size limit via GOOSE_MAX_TOOL_RESPONSE_SIZE [#9256](https://github.com/aaif-goose/goose/pull/9256)
- Configurable MAX_CODE_BLOCK_LINES via env vars [#9301](https://github.com/aaif-goose/goose/pull/9301)
- GOOSE_FAST_MODEL env var support [#9296](https://github.com/aaif-goose/goose/pull/9296)
- Hugging Face OAuth support with auth tab in settings [#9552](https://github.com/aaif-goose/goose/pull/9552)
- Chat history search in navigation panel [#8448](https://github.com/aaif-goose/goose/pull/8448)
- Import sessions [#9474](https://github.com/aaif-goose/goose/pull/9474)
- View model interactions [#9806](https://github.com/aaif-goose/goose/pull/9806)
- View JSON content [#9678](https://github.com/aaif-goose/goose/pull/9678)
- Image read tool [#9607](https://github.com/aaif-goose/goose/pull/9607)
- goose://new-session deep link [#9196](https://github.com/aaif-goose/goose/pull/9196)
- goose://resume session deep link [#9343](https://github.com/aaif-goose/goose/pull/9343)
- Initial prompt with goose://new-session [#9427](https://github.com/aaif-goose/goose/pull/9427)
- MCP extensions support in open plugins [#9471](https://github.com/aaif-goose/goose/pull/9471)
- Nushell terminal and completion support [#8628](https://github.com/aaif-goose/goose/pull/8628)
- TUI command on goose-cli [#9385](https://github.com/aaif-goose/goose/pull/9385)
- TUI diff viewer [#9260](https://github.com/aaif-goose/goose/pull/9260)
- Unified OTLP logging schema for cross-tool detection [#9713](https://github.com/aaif-goose/goose/pull/9713)
- Prompt injection mitigation enabled by default for internal users [#9612](https://github.com/aaif-goose/goose/pull/9612)
- Encrypted Nostr session sharing [#8922](https://github.com/aaif-goose/goose/pull/8922)
- Quarterly option for scheduler [#9076](https://github.com/aaif-goose/goose/pull/9076)
- Optional --parameters for scheduled recipes [#8741](https://github.com/aaif-goose/goose/pull/8741)
- Worktree-aware directory switcher [#8450](https://github.com/aaif-goose/goose/pull/8450)
- Harbor eval runner [#9138](https://github.com/aaif-goose/goose/pull/9138)
- Linux musl CLI builds [#9240](https://github.com/aaif-goose/goose/pull/9240)

## 🐛 Bug Fixes

- Mac auto-update config seeding [#10132](https://github.com/aaif-goose/goose/pull/10132)
- Use async reqwest client so OTLP export works in `goose serve` mode [#10100](https://github.com/aaif-goose/goose/pull/10100)
- Reject non-object tool-call arguments instead of panicking [#9832](https://github.com/aaif-goose/goose/pull/9832)
- Save /edit prompts to history [#10011](https://github.com/aaif-goose/goose/pull/10011)
- Use session.message_count for schedule sessions listing [#10026](https://github.com/aaif-goose/goose/pull/10026)
- Sync session store after provider and model update [#10060](https://github.com/aaif-goose/goose/pull/10060)
- Buffer thinking across stream chunks for DeepSeek/Kimi tool calls [#9704](https://github.com/aaif-goose/goose/pull/9704)
- Surface actionable errors for truncated tool-call arguments [#9946](https://github.com/aaif-goose/goose/pull/9946)
- Show optimistic toggle state when disabling an extension [#9882](https://github.com/aaif-goose/goose/pull/9882)
- Do not pass temperature to ChatGPT Codex provider [#9931](https://github.com/aaif-goose/goose/pull/9931)
- Resolve databricks_v2 pricing and surface cost in standard usage update [#9925](https://github.com/aaif-goose/goose/pull/9925)
- Activate hermit on macOS so STDIO extensions resolve node [#9482](https://github.com/aaif-goose/goose/pull/9482)
- Autovisualiser: accept JSON-encoded string for the data parameter [#9838](https://github.com/aaif-goose/goose/pull/9838)
- Developer/read_image: send a User-Agent on URL image fetches [#9927](https://github.com/aaif-goose/goose/pull/9927)
- Start a turn when /goal or /grind is set [#9801](https://github.com/aaif-goose/goose/pull/9801)
- Pass thinking config to Bedrock Anthropic models [#9794](https://github.com/aaif-goose/goose/pull/9794)
- Preserve Windows backslash paths in custom extension command [#9741](https://github.com/aaif-goose/goose/pull/9741)
- Custom OpenAI provider dropping port when URL scheme is omitted [#9730](https://github.com/aaif-goose/goose/pull/9730)
- ACP cancel race condition [#9804](https://github.com/aaif-goose/goose/pull/9804)
- Removed window goosed when closing window [#9818](https://github.com/aaif-goose/goose/pull/9818)
- Context exceeded checker more precise [#9831](https://github.com/aaif-goose/goose/pull/9831)
- Inherit login-shell PATH in spawned subagents [#9737](https://github.com/aaif-goose/goose/pull/9737)
- Accept string values for GOOSE_CONTEXT_LIMIT [#9738](https://github.com/aaif-goose/goose/pull/9738)
- Clear rejected OAuth credentials after refresh [#9694](https://github.com/aaif-goose/goose/pull/9694)
- Keep extended thinking within the Anthropic output cap [#9814](https://github.com/aaif-goose/goose/pull/9814)
- RPM build-id links disabled [#9671](https://github.com/aaif-goose/goose/pull/9671)
- Preserve custom API path in base_url derivation for OpenAI [#9649](https://github.com/aaif-goose/goose/pull/9649)
- Handle resume deep links [#9298](https://github.com/aaif-goose/goose/pull/9298)
- Repair PATH for plugin hook commands [#9615](https://github.com/aaif-goose/goose/pull/9615)
- Restore Cmd/Ctrl+T new chat shortcut [#9614](https://github.com/aaif-goose/goose/pull/9614)
- Lead with extension description, shorten HTTP/SSE transport label [#9653](https://github.com/aaif-goose/goose/pull/9653)
- Mention menu icon to open the sidebar [#9643](https://github.com/aaif-goose/goose/pull/9643)
- Dedupe React to prevent multiple instances in renderer [#9631](https://github.com/aaif-goose/goose/pull/9631)
- Hermit cleanup in uvx and jbang scripts [#9616](https://github.com/aaif-goose/goose/pull/9616)
- Use blocking OTLP HTTP exporter [#9599](https://github.com/aaif-goose/goose/pull/9599)
- Fall back to default provider when resuming session with unavailable provider [#9547](https://github.com/aaif-goose/goose/pull/9547)
- Provide Tokio runtime for OTLP HTTP exporter batch thread [#9541](https://github.com/aaif-goose/goose/pull/9541)
- Read meta.n_ctx from /v1/models to fix context limit for local servers [#9530](https://github.com/aaif-goose/goose/pull/9530)
- Align session history scrollbar with window edge [#9601](https://github.com/aaif-goose/goose/pull/9601)
- Refresh session name in sidebar after rename [#9543](https://github.com/aaif-goose/goose/pull/9543)
- Show resolved skill supporting file paths [#9584](https://github.com/aaif-goose/goose/pull/9584)
- Implement real streaming via Bedrock ConverseStream API [#9579](https://github.com/aaif-goose/goose/pull/9579)
- Record OpenAI-native cached_tokens in usage metering [#9829](https://github.com/aaif-goose/goose/pull/9829)
- Override API URL option for Moonshot provider [#9819](https://github.com/aaif-goose/goose/pull/9819)
- Detect image paths with spaces [#9387](https://github.com/aaif-goose/goose/pull/9387)
- Restore new chat shortcut navigation [#9528](https://github.com/aaif-goose/goose/pull/9528)
- Evict stale completed tasks to prevent unbounded memory growth [#9514](https://github.com/aaif-goose/goose/pull/9514)
- OAuth callback timeout instead of hanging in WSL [#9536](https://github.com/aaif-goose/goose/pull/9536)
- Warn on unmatched extension names in delegate [#9513](https://github.com/aaif-goose/goose/pull/9513)
- Deleting recently created session and creating new shows deleted session's content [#9351](https://github.com/aaif-goose/goose/pull/9351)
- Close modal when canceling recipe parameter form [#9195](https://github.com/aaif-goose/goose/pull/9195)
- Ensure tool request timestamp precedes tool response timestamp [#9462](https://github.com/aaif-goose/goose/pull/9462)
- Correctly map ollama_cloud to canonical provider [#9639](https://github.com/aaif-goose/goose/pull/9639)
- Incorrect max tokens values for groq provider [#9790](https://github.com/aaif-goose/goose/pull/9790)
- Mark stream decode errors retryable [#9723](https://github.com/aaif-goose/goose/pull/9723)
- Classify Bedrock ValidationException as ExecutionError [#9735](https://github.com/aaif-goose/goose/pull/9735)
- Page through all Databricks AI Gateway v2 endpoints when listing models [#9753](https://github.com/aaif-goose/goose/pull/9753)
- Preserve unparseable extension entries during config refresh [#9439](https://github.com/aaif-goose/goose/pull/9439)
- Surface Anthropic stream refusals as visible errors [#9724](https://github.com/aaif-goose/goose/pull/9724)
- Skip non-recipe project config files in summon [#9808](https://github.com/aaif-goose/goose/pull/9808)
- Dedup duplicate tool-call ids within a turn [#9792](https://github.com/aaif-goose/goose/pull/9792)
- Resolve bundled extensions from discovery [#9759](https://github.com/aaif-goose/goose/pull/9759)
- Include agentInfo in ACP initialize response [#9765](https://github.com/aaif-goose/goose/pull/9765)
- Keep extensions icon visible after switching sessions [#9787](https://github.com/aaif-goose/goose/pull/9787)
- Use media marker parts for vision prompts in local-inference [#9452](https://github.com/aaif-goose/goose/pull/9452)
- Make azure api-version query param optional [#9221](https://github.com/aaif-goose/goose/pull/9221)
- Preserve pending env vars in Add Extension form [#9285](https://github.com/aaif-goose/goose/pull/9285)
- Tolerate missing responses output [#9449](https://github.com/aaif-goose/goose/pull/9449)
- Stop main window growing taller on every launch [#9409](https://github.com/aaif-goose/goose/pull/9409)
- Serialize per-session agent creation to stop duplicate MCP init [#9357](https://github.com/aaif-goose/goose/pull/9357)
- Respect GOOSE_MAX_TURNS in gateway sessions [#9354](https://github.com/aaif-goose/goose/pull/9354)
- Send empty object instead of null for Anthropic tool_use input [#9355](https://github.com/aaif-goose/goose/pull/9355)
- Use context limit from /model/info for LiteLLM custom models [#9303](https://github.com/aaif-goose/goose/pull/9303)
- Skip OTLP signals when protocol=grpc to avoid background-thread panic [#9512](https://github.com/aaif-goose/goose/pull/9512)
- Forward ACP server context window size to clients [#9455](https://github.com/aaif-goose/goose/pull/9455)
- Refresh provider list in Switch Models picker [#9408](https://github.com/aaif-goose/goose/pull/9408)
- Start new chat in current window from recipe param modal [#9422](https://github.com/aaif-goose/goose/pull/9422)
- Use refreshed gcloud token after reauth (retry Vertex AI on 401/403) [#9849](https://github.com/aaif-goose/goose/pull/9849)
- Set TCP_USER_TIMEOUT on streamable HTTP clients [#9207](https://github.com/aaif-goose/goose/pull/9207)
- Activate custom provider after adding via configure [#9213](https://github.com/aaif-goose/goose/pull/9213)
- Reduce excessive MISSING_TRANSLATION warnings for fallback locales [#9294](https://github.com/aaif-goose/goose/pull/9294)
- Eliminate cross-window deep link contamination [#9273](https://github.com/aaif-goose/goose/pull/9273)
- Improve Telegram gateway error reporting and connection reliability [#9223](https://github.com/aaif-goose/goose/pull/9223)
- Enable VT processing on Windows Console Host [#9248](https://github.com/aaif-goose/goose/pull/9248)
- Zero out cost for local providers (ollama, local) [#9219](https://github.com/aaif-goose/goose/pull/9219)
- Autovisualiser: use appInfo instead of clientInfo in MCP Apps init handshake [#9249](https://github.com/aaif-goose/goose/pull/9249)
- Use mkdir -p for self-test workspace initialization [#9247](https://github.com/aaif-goose/goose/pull/9247)
- Show tool name in approval prompt [#9216](https://github.com/aaif-goose/goose/pull/9216)
- Resolve Azure CLI on Windows by using az.cmd [#9215](https://github.com/aaif-goose/goose/pull/9215)
- Handle non-interactive terminal in goose configure on Windows [#9214](https://github.com/aaif-goose/goose/pull/9214)
- Persist accumulated cost in session DB to survive reload [#9191](https://github.com/aaif-goose/goose/pull/9191)
- Prevent tool-use marker leakage in toolshim output [#8310](https://github.com/aaif-goose/goose/pull/8310)
- Re-apply canonical limits when delegate overrides model [#9183](https://github.com/aaif-goose/goose/pull/9183)
- Remove hard-coded React alias that points to wrong location [#9842](https://github.com/aaif-goose/goose/pull/9842)

## 🔧 Improvements

- Keep turn-context out of the Anthropic prefix cache [#10030](https://github.com/aaif-goose/goose/pull/10030)
- Disable extended thinking for fast-model operations [#9815](https://github.com/aaif-goose/goose/pull/9815)
- Support streamed tool calls without indexes [#10023](https://github.com/aaif-goose/goose/pull/10023)
- Diagnostics migrated to JSON report [#9964](https://github.com/aaif-goose/goose/pull/9964)
- Route MCP elicitations through tool streams [#9943](https://github.com/aaif-goose/goose/pull/9943)
- Propagate elicitation decline and cancel actions end-to-end [#9437](https://github.com/aaif-goose/goose/pull/9437)
- Allow unlisted models in search [#9933](https://github.com/aaif-goose/goose/pull/9933)
- Sanitize extension environment maps [#9884](https://github.com/aaif-goose/goose/pull/9884)
- Drop debug info for dependencies in dev profile [#9843](https://github.com/aaif-goose/goose/pull/9843)
- Databricks responses API support check [#9347](https://github.com/aaif-goose/goose/pull/9347)
- Open Model Gym output dir configurable [#9789](https://github.com/aaif-goose/goose/pull/9789)
- Per-agent timeout configurable (GYM_AGENT_TIMEOUT) [#9791](https://github.com/aaif-goose/goose/pull/9791)
- Session name as source of truth for displayed session titles [#9841](https://github.com/aaif-goose/goose/pull/9841)
- Stricter GGUF requirements with auto detection of tool calling support [#9442](https://github.com/aaif-goose/goose/pull/9442)
- Prefer goose aliases for Databricks v2 inventory [#9430](https://github.com/aaif-goose/goose/pull/9430)
- Build summon instructions per turn [#9329](https://github.com/aaif-goose/goose/pull/9329)
- ACP session list pagination [#9199](https://github.com/aaif-goose/goose/pull/9199)
- Structured per-provider config block, non-destructive provider switching [#8977](https://github.com/aaif-goose/goose/pull/8977)
- Emit trace_output as span attribute instead of event [#9255](https://github.com/aaif-goose/goose/pull/9255)
- Flush OTLP traces reliably on exit with configurable timeout [#9228](https://github.com/aaif-goose/goose/pull/9228)
- Proactive OAuth token refresh to avoid re-auth on every session [#8386](https://github.com/aaif-goose/goose/pull/8386)
- Better parsing of pasted HTML as markdown [#9190](https://github.com/aaif-goose/goose/pull/9190)
- Preserve thinking content for providers that require it [#8857](https://github.com/aaif-goose/goose/pull/8857)
- Dynamically refresh skill instructions each turn [#9217](https://github.com/aaif-goose/goose/pull/9217)
- GOOSE_OAUTH_CALLBACK_PORT support for stable OAuth redirect_uri [#9209](https://github.com/aaif-goose/goose/pull/9209)
- Honor Retry-After on 429 responses [#9161](https://github.com/aaif-goose/goose/pull/9161)
- Coalesce streaming Thinking deltas [#9162](https://github.com/aaif-goose/goose/pull/9162)
- Strip chain-of-thought markers from custom provider output [#8635](https://github.com/aaif-goose/goose/pull/8635)
- Use LRU cache for token counting [#9586](https://github.com/aaif-goose/goose/pull/9586)
- Replace review subprocess timeout with turn limits [#9571](https://github.com/aaif-goose/goose/pull/9571)
- Opt-in ACP last message snippets [#9798](https://github.com/aaif-goose/goose/pull/9798)
- Expose raw provider supported models over ACP [#9475](https://github.com/aaif-goose/goose/pull/9475)
- CLI to list skills with token counts [#9326](https://github.com/aaif-goose/goose/pull/9326)
- Include request URL in provider error messages [#9232](https://github.com/aaif-goose/goose/pull/9232)
- Surface resolved Databricks model metadata [#9206](https://github.com/aaif-goose/goose/pull/9206)
- Ensure parallel tool image responses don't interleave for Databricks [#9241](https://github.com/aaif-goose/goose/pull/9241)
- Slash commands (built-in, skill, recipe) in ACP server [#9238](https://github.com/aaif-goose/goose/pull/9238)
- Open-plugins generalization + skills [#9112](https://github.com/aaif-goose/goose/pull/9112)
- Use plain '> ' prompt instead of goose emoji [#9305](https://github.com/aaif-goose/goose/pull/9305)

## 📚 Documentation

- Name the message field in the hooks payload guide [#9913](https://github.com/aaif-goose/goose/pull/9913)
- Custom agents guide [#9293](https://github.com/aaif-goose/goose/pull/9293)
- Correct custom agents guide [#9947](https://github.com/aaif-goose/goose/pull/9947)
- Add guide for connecting goose Desktop to a remote goosed server [#9275](https://github.com/aaif-goose/goose/pull/9275)
- Hooks guide [#9288](https://github.com/aaif-goose/goose/pull/9288)
- Blog post for hooks feature [#9227](https://github.com/aaif-goose/goose/pull/9227)
- Document summon extension requirement for delegate and load tools [#9231](https://github.com/aaif-goose/goose/pull/9231)
- ACP clients documentation update [#9772](https://github.com/aaif-goose/goose/pull/9772)
- AAIF migration blog post [#9866](https://github.com/aaif-goose/goose/pull/9866)
- Self-improving agents blog post [#9846](https://github.com/aaif-goose/goose/pull/9846)
- Orchestrating with goose blog post [#9104](https://github.com/aaif-goose/goose/pull/9104)
- Goose with peekaboo blog post [#8884](https://github.com/aaif-goose/goose/pull/8884)
- Built-in Local Inference blog post [#8808](https://github.com/aaif-goose/goose/pull/8808)
- MiniMax and office QA benchmark findings blog post [#8984](https://github.com/aaif-goose/goose/pull/8984)
- Scaleway provider documentation [#9423](https://github.com/aaif-goose/goose/pull/9423)
- SaladCloud AI Gateway documentation [#9253](https://github.com/aaif-goose/goose/pull/9253)
- Scholar Sidekick tutorial page [#9477](https://github.com/aaif-goose/goose/pull/9477)
- Documentation reorganization [#9310](https://github.com/aaif-goose/goose/pull/9310)