Michael Neale 23aa9b09b4 fix(model): raise default max_output_tokens floor for Claude 4+
Two related fixes so newly-released Claude models don't silently truncate
responses at 4096 output tokens (which manifests as the model 'stopping
mid tool-call' from the user's perspective):

1. Refresh the bundled canonical model registry from models.dev. This
   adds claude-opus-4-7, claude-opus-4-8, and bumps the registry from
   4740 to 4965 models. Generated by:

       cargo run --bin build_canonical_models

   With the refreshed registry, claude-opus-4-8 now resolves through
   strip_version_suffix's existing '-N-M' -> '-N.M' normalization to the
   canonical 'anthropic/claude-opus-4.8' entry (1M context, 128k output).

2. Add a Claude-4+ family floor to ModelConfig::max_output_tokens(). When
   GOOSE_MAX_TOKENS is unset and the canonical lookup doesn't populate
   max_tokens (e.g. a brand-new model id one release ahead of the bundled
   registry), we previously fell back to a hard 4096. That's a cliff:
   every Claude 4.x model supports at least 32k output, and capping at
   4096 cuts off tool_use blocks mid-stream, which agents experience as
   the model 'not making tool calls'.

   The new floor is 32k for Claude 4+ family ids (matches the lowest
   real 4.x output cap). Claude 3.x and non-Claude models keep the
   existing 4096 default since their real caps are genuinely small.

Also adds claude-opus-4-7 and claude-opus-4-8 to ANTHROPIC_KNOWN_MODELS
for UI/discovery.

Tests:
- canonical_lookup_resolves_dash_to_dot_for_claude_4_x: verifies
  claude-opus-4-{1,5,6,7,8} all resolve to the canonical entry and
  get a real (>4096) output cap.
- claude_4_family_falls_back_to_32k_not_4096: verifies the family
  floor for unknown future ids (claude-opus-4-9, anthropic/claude-opus-4.8,
  databricks-claude-opus-4.6, etc).
- claude_3_and_non_claude_keep_4096_default: regression guard.
- explicit_max_tokens_always_wins: GOOSE_MAX_TOKENS still overrides.

Also updates sets_limits_from_canonical_model to assert shape rather
than a hardcoded gpt-4o output number (16384 -> 4096 in models.dev),
so the test stops breaking every registry refresh.
2026-05-29 17:02:07 +10:00
2026-05-11 16:02:44 +00:00
2026-03-07 17:16:19 +00:00
2026-05-26 16:09:03 +00:00
…
2026-05-22 16:24:47 +00:00

🦆 goose has moved! This project has moved from block/goose to the Agentic AI Foundation (AAIF) at the Linux Foundation. Some links and references are still being updated — please bear with us during the transition.

goose

your native open source AI agent — desktop app, CLI, and API — for code, workflows, and everything in between

Discord CI Packaging status

goose is a general-purpose AI agent that runs on your machine. Not just for code — use it for research, writing, automation, data analysis, or anything you need to get done.

A native desktop app for macOS, Linux, and Windows. A full CLI for terminal workflows. An API to embed it anywhere. Built in Rust for performance and portability.

goose works with 15+ providers — Anthropic, OpenAI, Google, Ollama, OpenRouter, Azure, Bedrock, and more. Use API keys or your existing Claude, ChatGPT, or Gemini subscriptions via ACP. Connect to 70+ extensions via the Model Context Protocol open standard.

goose is part of the Agentic AI Foundation (AAIF) at the Linux Foundation.

Get started

Download the desktop app for macOS, Linux, and Windows.

Or install the CLI:

curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash

Quick links

Need help?

a little goose humor 🪿

Why did the developer choose goose as their AI agent?

Because it always helps them "migrate" their code to production! 🚀

goose around with us

S
Description
No description provided
Readme Apache-2.0 1.5 GiB
Languages
Rust 63.6%
TypeScript 29.6%
JavaScript 1.7%
Shell 1.6%
Python 1.5%
Other 1.8%