Skip to content

Goose v1.28.0

Released · Block

Breaking

What the release notes say

✨ Features

  • Adversarial agent for preventing leaking of info and more #7948

  • Claude adaptive thinking support #7944

  • New onboarding flow #7266

  • Persist GooseMode per-session via session DB #7854

  • Propagate session.id to OpenTelemetry spans and log records #7490

  • Migrate autovisualiser extension to MCP Apps #7852

  • ACP session/set_mode handler #7801

  • MCP Roots support #7790

  • Load hints in nested subdirectories #7772

  • ACP read tool for delegating filesystem I/O to ACP clients #7668

  • Summarize tool for deterministic reads #7054

  • ACP providers for Claude Code and Codex #6605

  • Capture reasoning summaries from OpenAI Responses API #7375

  • MiniMax provider with Anthropic-compatible API #7640

  • Tensorix as a declarative provider #7712

  • Skill supporting files individually loadable via load() in summon #7583

  • Avian as an LLM provider #7561

  • Combine TUI UX with publishing config #7683

  • Base path field for custom provider configuration #7614

  • Better private channel detection for Slack bot #7680

  • Preferred microphone selection #7805

  • Secret interpolation in streamable HTTP extension URLs #7782

🐛 Bug Fixes

  • Remove incorrect agent_visible filter on user message in claude-code #7931

  • Retry on authentication failure with credential refresh #7812

  • Bump pctx_code_mode to 0.3.0 for iterator type checking fix #7892

  • Pass session_id when loading extensions so skills are discovered #7868

  • Tool choice and parallel_tool_calls support for chatgpt_codex provider #7867

  • Tool confirmation handling for multiple requests #7856

  • Resolve tokio::sync::Mutex deadlock in recipe retry path #7832

  • Stop writing without error when hitting broken pipe for goose session list #7858

  • Skip upgrade-insecure-requests CSP for external HTTP backends #7714

  • Prevent hang when command backgrounds a child process #7689

  • Exit agent loop when tool call JSON fails to parse #7840

  • Prevent SSE connection drops from silently truncating responses #7831

  • Prevent SageMaker TGI from being marked configured when only Bedrock keys are set #7284

  • Disable computercontroller functionality when no $DISPLAY detected #7824

  • Register MCP extensions when resuming a session #7806

  • Load .gitignore in prompt_manager for hint file filtering #7795

  • Remap max_completion_tokens to max_tokens for OpenAI-compatible providers #7765

  • Preserve OpenAI Responses API tool call/output linkage #7759

  • Return ContextLengthExceeded when prompt exceeds effective KV cache size #7815

  • Use includeThoughts/part.thought for Google thinking handling #7593

  • Model selector showing wrong model in tabs #7784

  • Avoid word splitting by space for Windows shell commands #7810

  • Unify path resolution around GOOSE_PATH_ROOT #7335

  • Pass OAuth scopes to DCR and extract granted_scopes from token response #7571

  • Write to real file if config.yaml is symlink #7669

  • Preserve pairings when stopping gateway #7733

  • Sanitize streamable HTTP extension names derived from URLs #7740

  • Improve keyring availability error detection #7766

  • Remove insecure default secret from GOOSE_EXTERNAL_BACKEND #7783

  • Add #[serde(default)] to description field on ExtensionConfig variants #7708

  • Restore smart-approve mode #7690

  • Make TLS configurable in goosed agent via GOOSE_TLS env var #7686

  • Max turns configuration #7612

  • Compare extension configs before skipping add_extension #7650

  • Only add viewable channels to Slack bot context #7678