镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

feat(goose): save a Thinking level and match the Claude/Codex profile - #1250

Merged
salman1993 merged 3 commits into
mainfrom
claude/goose-thinking-level-parity-7a1dbc
Oct 16, 2026
Merged

salman1993 merged 3 commits into
mainfrom
claude/goose-thinking-level-parity-7a1dbc

Conversation

@salman1993

@salman1993 salman1993 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

goose agents can now save a Thinking level, as Claude Code can since #1089. goose itself supplies the levels: each one comes from the thought_level config option of a goose session opened on the agent's provider and model. Nothing is hardcoded in Buzz.

The goose agent profile also now matches Claude Code and Codex.

Thinking level

  • GooseSetup.efforts(choice) gets the levels from a short-lived session with no tools. It sends session/new, then set_config_option model when a model is set, then deletes the session. The result is cached per provider and model, and the cache is cleared when a provider is saved.
  • GooseSession.select() sets thinking_effort after the provider and model. goose keeps the level across model and provider changes.
  • goose has no value that means "use goose's default". So when an agent goes back to the default and its live session had a level set, the next turn reopens the session (stale() in sessions.ts).
  • The picker labels the default Codex-style. In the list it reads "Medium · Default"; when closed it reads "Medium". The default comes from goose's GOOSE_THINKING_EFFORT.
  • If the chosen model doesn't offer the saved level, the picker shows it as "(unavailable)" instead of silently dropping it.

Profile layout and labels

  • The Settings tab uses splitSettings, the same as Claude and Codex.
    • Identity is a grouped card with Harness, Provider, Model and Thinking, followed by instructions.
    • Runtime holds the provider keys with Test connection, the workspace, and sessions.
  • The agent-type row "Provider" is renamed to Harness (Claude, Codex, Goose). goose's "Model provider" is now Provider.
  • The New agent dialog keeps keys and Test connection next to the provider.

Testing

  • All goose tests plus the agent-related bundles pass (1,040 tests). tsc, biome lint and design:check are clean.
  • New coverage:
    • setup.test.ts: the efforts() read, cache, and cleanup.
    • sessions.test.ts: the level is applied, and the session reopens on the default.
    • runtime.test.ts: the level is part of the agent's choice.
    • tabs.test.tsx: saving a level, an unavailable level, and the Identity/Runtime split.
  • goose.live.test.ts: a live thinking-level test passed against goose-acp 1.50.

buzz-review-completed

🤖 Generated with Claude Code

goose agents can now keep a Thinking level. The levels come from the
config options of a goose session on the agent's provider and model.
The level is applied with session/set_config_option thinking_effort,
and a session that had a level set is reopened when the agent goes
back to goose's own default.

The goose Settings tab now uses the split Identity/Runtime layout that
Claude and Codex use. Identity is a grouped card with Harness, Provider,
Model and Thinking. Provider keys, the workspace and sessions are under
Runtime. The agent type row is renamed to "Harness", and goose's
"Model provider" is now "Provider".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Salman Mohammed <smohammed@squareup.com>
@salman1993

Copy link
Copy Markdown
Contributor Author
Screenshot 2026-10-16 at 10 55 07 AM

@salman1993
salman1993 marked this pull request as ready for review October 16, 2026 15:10
@salman1993
salman1993 requested a review from a team as a code owner October 16, 2026 15:10
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-16T15:16:22.970836Z beebcaa Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: beebcaa806

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +338 to +339
live.fingerprint !== this.options.fingerprint() ||
Boolean(live.session.effort && !this.options.choice().effort)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reopen before running a queued default-effort turn

When the owner clears Thinking while a session is busy, reconfigure() leaves the live session open; if another message specifying a different per-message model arrives before the first turn finishes, send() queues it instead of steering it. select() cannot unset the session's previous chosen.effort, so that queued next turn runs at the old explicit level even though the saved setting now says to use goose's default. Ensure a pending default reset makes queued turns wait for a reopened session.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Leaving this as is, deliberately. The race is real but narrow: Thinking has to be cleared mid-turn, and a message has to be queued rather than steered, which only happens when it asks for a different model or arrives as the turn ends. At worst one turn runs at the previous level, and the session closes once it falls idle.

The settings that need a new session (workspace, instructions, scope, team, name in fingerprint()) already work this way: a busy session keeps running its queued turns and closes when it next falls idle, as reconfigure() documents. Making queued turns wait for a reopened session would add machinery, and if we want it, it should cover those settings too, in a separate change.

Comment on lines +249 to +251
const [listing, reload] = useRead(() => setup.providers(), "providers");
const id = choice.provider || listing.value?.defaults.provider;
const provider = listing.value?.providers.find((item) => item.id === id);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore provider discovery error recovery in Runtime

In the new Runtime section, when setup.providers() rejects—for example because goose transiently fails to start—listing.status is ignored and provider remains undefined, so all provider key/sign-in UI silently disappears while only Test connection remains, with no error or retry action. The previous ProviderFields path surfaced the failure and a Try again button; restore equivalent scoped recovery here as required by the states guidance in src/shared/design-system/DESIGN.md:220-228.

AGENTS.md reference: AGENTS.md:L46-L51

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Fixed in 300748a. When goose cannot list providers, ProviderSetup now shows the error next to a Try again button that reads the list again, the same pattern ProviderKeys uses. The new test "says in Settings when goose cannot list providers, and tries again" covers it. It fails without the fix.

salman1993 and others added 2 commits October 16, 2026 11:39
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Salman Mohammed <smohammed@squareup.com>
The Runtime section dropped the provider's keys without a word when
goose failed to list providers. It now shows the error and Try again,
as the combined view did before the split.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Salman Mohammed <smohammed@squareup.com>

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Approval submitted at the user's direction for commit 300748a.

Review: the documentation-only delta at 08ea6b4 introduced no new actionable findings. The latest delta adds the missing Runtime provider-discovery error and retry UI, with a regression test; source inspection confirms the error state exposes the existing reload action.

Remaining findings from the earlier review: queued Default reset can miss the next turn, and effort-discovery RPC/process lifetime remains unbounded. This approval does not assert those issues are resolved.

Validation: prior independent static, security and integration source checks; latest delta inspected, new test not run. Browser/native workflows remain unverified because permitted web startup requires Keychain access and Goose registration requires Tauri.

@salman1993
salman1993 merged commit 1228d79 into main Oct 16, 2026
32 checks passed
@salman1993
salman1993 deleted the claude/goose-thinking-level-parity-7a1dbc branch October 16, 2026 16:07
loganj added a commit that referenced this pull request Oct 16, 2026
Main fails typecheck since #1250 made effort required and #1185 added
this fixture without it. Same one-line fix as in #1257 and #1260.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Signed-off-by: Logan Johnson <loganj@squareup.com>
tellaho added a commit that referenced this pull request Oct 16, 2026
…ui-polish

* buzz-app/main:
  test(agents): fix main typecheck — add effort to Goose fixture (#1262)
  fix(messages): reject unclaimed file and link drops app-wide (#1075)
  feat(channels): create and read system channels (#965)
  Refine message layout and bubble reading widths (#1218)
  feat(goose): save a Thinking level and match the Claude/Codex profile (#1250)

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants