Skip to content

Add Goose agents with live Databricks model selection - #214

Merged
salman1993 merged 2 commits into
mainfrom
codex/goose-harness
Sep 24, 2026
Merged

salman1993 merged 2 commits into
mainfrom
codex/goose-harness

Conversation

@salman1993

@salman1993 salman1993 commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Why

Buzz users can choose Goose as an agent harness, but a mistyped Databricks v2 model ID only fails after an agent restarts and receives a message. Goose can list models available to the signed-in workspace.

What

  • Add Goose harness and provider choices to Agents.
  • Let Databricks v2 users search Goose's live model list while retaining custom model entry.
  • Keep Browse available when a saved or draft GOOSE_PROVIDER override makes Databricks v2 effective.
  • Keep Goose Refresh out of OAuth; only an explicit Browse or Retry may start Goose model lookup.
  • Preserve provider, model, and ACP arguments when editing a custom Goose executable path.
  • Document how to view Goose sessions created through Buzz.

How

The desktop app starts a short-lived Goose ACP process and asks its supported-models method for Databricks v2 IDs. Native code resolves the effective provider, including write-only saved overrides, before it starts Goose. The editor uses known draft overrides and keeps Browse reachable when a saved override's value is unavailable. A direct Refresh request is rejected before Goose starts. Credentials stay in the native process.

Risk

Goose's supported-models ACP method is unstable, so a future Goose release could change it. Browse has a 60-second timeout and reports errors without saving settings. A saved override for another provider may show Browse; native validation then explains why Databricks discovery is unavailable. Existing Buzz Agent model discovery stays on its current path.

Testing

  • Manual ACP probe: started the installed Goose CLI with goose acp and requested _goose/unstable/providers/supported-models/list for databricks_v2. It returned 141 IDs, including data_workflow_tools.goose.goose-glm-5-3; the short goose-glm-5-3 ID was absent.
  • Desktop create/edit click-through remains to be checked; the Mac was locked during the prior UI handoff.

Generated with Codex

@salman1993
salman1993 marked this pull request as ready for review September 24, 2026 15:29
@salman1993
salman1993 requested review from a team, comp615 and wesbillman as code owners September 24, 2026 15:29
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 24, 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-09-24T15:33:56.213980Z 0d138b8 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.

@salman1993
salman1993 added this pull request to stack #217 September 24, 2026 15:32

@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: 0d138b804a

ℹ️ 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 thread src-tauri/src/goose_models.rs
draft={draft}
onChange={onChange}
/>
{goose && draft.provider !== "databricks_v2" ? (

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 Base Goose model browsing on the effective provider

When a saved or imported Goose agent has GOOSE_PROVIDER=databricks_v2 as a write-only environment override but its selector is blank or names another provider, this condition hides AgentModelPicker even though native execution and goose_model_context correctly treat Databricks v2 as effective. The inverse also exposes a picker that native code rejects when the override selects another provider. Because saved override values are intentionally unavailable to React, gating solely on draft.provider prevents affected users from browsing the live catalog; the UI needs an override-aware flow rather than assuming the selector is authoritative.

AGENTS.md reference: AGENTS.md:L39-L42

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.

Valid edge case. The editor decides whether to show model browsing from the visible provider selector, while the runtime gives GOOSE_PROVIDER precedence. A saved, write-only override can therefore make the editor show the wrong control. It’s worth addressing, but doing it correctly needs a safe way for native code to tell the UI the effective provider without exposing the saved value. I would treat that as a focused follow-up rather than add a guess based on whether the override key exists.

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 5c98864. The editor now uses a draft GOOSE_PROVIDER override when present and keeps Browse available when a saved override is write-only. Native code checks the effective provider before starting Goose. Mounted tests cover saved and draft overrides with blank and OpenAI selectors, plus the inverse draft override.

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Request changes at 282190eab9252b384aefc280307272e8a1a0c077 against e02fe33220fa497a2e7ee780c8295517b4f967fa.

Two P2 merge criteria:

  • Resolve the existing effective-provider gating finding. I independently reproduced missing Browse for both saved and draft GOOSE_PROVIDER=databricks_v2 overrides with blank/OpenAI selectors in four mounted cases. This is part of the new discovery contract, not speculative hardening; keep discovery reachable without exposing saved environment values.
  • Preserve headless Goose Refresh, as detailed in the inline finding.

Validation: all reported hosted checks are green (Windows skipped); five isolated mounted probes confirmed the four gating cases and Refresh request wiring. Traced create/edit → IPC → persistence/runtime and the Goose ACP/auth implementation at upstream 80c1197583cc9dc909b7e010c78b4ad58c81e8ce. No production edits, live desktop/Goose launch, credentials, sign-in, or broad suite rerun. Actual installed-Goose integration and native click-through remain unverified.

Nonblocking compatibility note: catalog launch inherits desktop CWD, unlike runtime’s agent workspace. Upstream supports relative GOOSE_ADDITIONAL_CONFIG_FILES, so those configurations may resolve differently; this was source-traced, not reproduced against an installed Goose build. No additional merge criterion is inferred from that gap.

let context = prepared?;
let model_overridden = context.model_overridden;
let models = crate::goose_models::fetch(context)
.await?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[P2] Keep Goose Refresh out of interactive OAuth

For a Goose Databricks v2 draft with a configured host but no usable cached token, Advanced → Model → Refresh models sends action: "refresh", yet this branch ignores the action and calls exactly the same Goose request as Browse. The documented contract says Refresh is always headless.

This is not merely a potentially interactive executable: upstream Goose’s supported-models handler constructs Databricks v2, whose missing-token fallback enters OAuth. On a cache miss or failed refresh, that flow opens a browser via webbrowser::open at line 415. Buzz passes no noninteractive mode, so a refresh can unexpectedly initiate sign-in and credential persistence.

Make Refresh fail with sign-in-required without opening a browser when noninteractive discovery is unavailable, or remove the separate Goose Refresh action and leave the explicit Browse/Retry sign-in path. Add coverage at the Goose auth boundary for absent/unrefreshable credentials. UI request wiring was reproduced; OAuth side effects were source-traced rather than triggered on a live account.

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 5c98864. Goose no longer has a separate Refresh control. Native IPC rejects non-Connect Goose catalog requests before process spawn. The integration test verifies that Refresh does not invoke the fake Goose executable while explicit Browse still does.

Signed-off-by: Salman Mohammed <smohammed@squareup.com>
Signed-off-by: Salman Mohammed <smohammed@squareup.com>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Re-review: both prior code blockers are resolved; no new blocking findings in the fixes. Reviewed 5c98864cad158ecd72640bc610541bc546d096bc against base 82bb3a631b96b92cd73940f16bcfb05fdaa7607e. The original feature patch is unchanged by the rebase; this pass covers the two agreed exit criteria and regressions in their changed paths.

  • Provider browsing now respects known draft overrides and stays reachable for write-only saved overrides, with native effective-provider validation retained. Explicit removal/undo and custom model entry remain intact.
  • Goose no longer offers Refresh; native non-Connect requests are rejected before Goose launch. Explicit Browse/Retry still use Connect, and Buzz Agent Refresh is unchanged.
  • Validation: five additional mounted transition/cancellation probes passed locally. Hosted CI is green, including the no-spawn Refresh IPC regression and added provider-gating coverage. Windows native validation was skipped. No broad CI-equivalent rerun.

Native desktop create/edit/save/reopen and real Goose/OAuth execution remain unverified by reviewers. The installed-CLI catalog probe in the PR description is author-reported, not our execution. The earlier relative-config/CWD compatibility note remains nonblocking.

This comment supersedes the code objections in my earlier review; it is not a GitHub approval.

@wesbillman
wesbillman dismissed their stale review September 24, 2026 17:46

Carl, an automated reviewer, commenting via Wes’s GitHub account. Both code blockers are resolved at 5c98864; verified re-review: #214 (review). Dismissing my stale changes-requested verdict, not granting approval.

@salman1993
salman1993 merged commit 8842b3a into main Sep 24, 2026
12 checks passed
@salman1993
salman1993 deleted the codex/goose-harness branch September 24, 2026 18:14
morgmart pushed a commit that referenced this pull request Sep 24, 2026
* origin/main:
  Add Goose as an agent harness option (#214)
  feat: preview channel agent activity in profiles (#187)

Signed-off-by: Carl <c217fe6b9d958f41c3a5e030dccc7f626775a923089cb6491305eade75ea1f1b@buzz.block.builderlab.xyz>
morgmart pushed a commit that referenced this pull request Sep 24, 2026
…rs-support

* origin/main:
  feat: show owner-view agent memories in profiles (#231)
  Add opt-in Canvas-backed channel Todos (#222)
  Skip hidden folders when discovering plugins in a folder (#229)
  feat: add owned local agent actions to profiles (#190)
  feat(channels): move session creation into the context menu (#209)
  Add Goose as an agent harness option (#214)
  feat: preview channel agent activity in profiles (#187)
  Use context-aware identity names with human-first priority (#167)
  feat: add managed agents to channels from profiles (#196)

Signed-off-by: Carl <c217fe6b9d958f41c3a5e030dccc7f626775a923089cb6491305eade75ea1f1b@buzz.block.builderlab.xyz>

# Conflicts:
#	src/features/relay/outbox.ts
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