Repository navigation
[2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity - #3345
Conversation
e3ede0b to
907df36
Compare
5866f92 to
85c14d6
Compare
atishpatel
left a comment
There was a problem hiding this comment.
🤖 Review from atish's agent, against atish's guidance in the Buzz thread. The numbering matches my review on #3344: (1) extendable presets, (2) Recommended markers under Manual, (3) Manual + "Default" follows the company default, (4) seamless updates, plus unset means unchanged.
The visual direction (a Settings-style select that opens Manual rows in place) follows tho's suggestion, and keeping the UI unchanged when nothing is configured is right ✅. The gaps:
AISettingsis a two-state boolean (point 1).- The Manual harness menu has no Recommended markers (point 2).
- Manual drops the mark even when the person keeps the default model (point 3).
Inline below. I'm deferring to tho on the visuals; these comments are about the data each control needs.
|
🤖 Thanks. Replies are inline. In short, a mode id plus options, "(Recommended)" labels in the harness menu, and a Manual "Default" that keeps following are all follow-up PRs. We're keeping this one tightly scoped to unblock shipping. The saved format already allows more presets, so those changes won't touch stored data. |
85c14d6 to
65ec6a3
Compare
65ec6a3 to
35ea2fe
Compare
atishpatel
left a comment
There was a problem hiding this comment.
🤖 Re-reviewed at 35ea2fe. I'd approve this, except for one blocker inline: when no recommended candidate is offered on a computer, Create agent can't create any agent, including a Manual or Builderlab one. Everything else, including the follow-ups we agreed on, is fine to leave for later. I'll approve once this is fixed.
joahg
left a comment
There was a problem hiding this comment.
🤖 Not approving: this account does not approve UI changes (Create agent, Identity, composer, design-system components and styles), and this PR needs a design or core-team reviewer. Reviewed only what this PR adds on top of [1/2] (its base is the [1/2] branch).
Finding (P1, functional, UI-visible): in a build that ships candidates, a computer where none of them is offered cannot create any agent. See the inline comment.
What I checked on the permission question: this PR adds no permission, sandbox or tool setting. Automatic only fills harness model and thinking level through [1/2], and the chat composer hides the model/effort picker for Automatic agents while keeping session controls. In builds without candidates recommendable is false and Create agent, Identity and the composer follow the existing paths. Existing agents are not marked; switching one to Automatic in Identity is an explicit user action, and any manual model or thinking pick there clears the mark.
Not reviewed: rendered appearance (light/dark, narrow widths, enlarged text, keyboard) beyond the screenshots in the description, the design-system CSS and specimen details, and the test files.
35ea2fe to
81a3b66
Compare
joahg
left a comment
There was a problem hiding this comment.
🤖 Not approving: this account does not approve UI changes (Create agent, Identity, composer, design-system components and styles), and this PR needs a design or core-team reviewer. Re-review of 81a3b66 against my review of 35ea2fe. Only what this PR adds on top of [1/2] (#3344) was reviewed.
Fixed
- Nothing from my earlier findings: the delta from 35ea2fe is only the rebase onto the updated [1/2]. No file this PR owns changed.
Still open
- P1 (functional, UI-visible): in a build that ships candidates, a computer where none of them is offered (the exact model or thinking level isn't listed, a check times out, or Codex/Claude Code on Windows) still cannot create any agent.
nothingSetUpdisables the AI settings select,automaticstays true,waitingkeeps Create disabled, and the Harness row only exists under Manual, so Manual and hosted agents are unreachable too. Before this PR those people could create one.AgentCreateDialog.test.tsx("asks for one thing to set up first...") now asserts that Create stays disabled, so this is intended behavior, not an oversight. Another reviewer raised the same case. See the inline comment.
Not reviewed: rendered appearance (light/dark, narrow widths, enlarged text, keyboard) beyond the screenshots in the description, the design-system CSS and specimen details, and the test files.
CI: Browser journeys (webkit, 4/18) is failing here and on #3344, and several jobs are still pending, so I could not read the cause. None of the files this PR adds carries a FOUNDATION marker.
atishpatel
left a comment
There was a problem hiding this comment.
🤖 Re-reviewed at fd3ee53. The Create-agent lockout is resolved: Custom remains selectable when no recommendation is usable, and the regression covers hosted-agent creation through its introduction. The nine affected component/service test files pass together locally: 1,033 passed, one existing skip. I found no remaining critical issue. Hosted CI is still running; this approval does not attest to native flow acceptance.
joahg
left a comment
There was a problem hiding this comment.
🤖 Not approving: this account does not approve UI changes (Create agent, Identity, agent cards, design-system components), and this PR needs a design or core-team reviewer. Re-review of fd3ee53 against my review of 81a3b66, covering only what this PR adds on top of [1/2] (#3344).
Fixed
- P1, Create agent lockout when no candidate is offered:
nothingSetUpnow requiresautomatic, and the AI setup select is no longer disabled by it. Choosing Custom setsautomaticto false, sowaitingclears, the Harness row opens, and both a local harness and a hosted type such as Builderlab can be created. The "One thing to set up first" row now says to set up a local harness or choose Custom, and the regression test covers Custom, then hosted harness, then the introduction, then creation withrecommends: () => false. Create stays disabled only while Automatic is still the selection, which is reasonable now that Custom is one select away.
New in the delta (attribution, Custom wording, cycling icon, Automatic details on the Agents page, recommendedSetup() parsing): I found no outstanding correctness problem. parseRecommended rejects unknown fields and untrimmed text and the attribution is shown as plain text only; setRuntimeRecommendation still validates runtime input and keeps the last good setup.
No changed file I checked carries a FOUNDATION marker (the dialog, AISettings, recommended.ts, AgentsPage, the three harness tabs, the CSS and the icon index).
Not reviewed: rendered appearance (light/dark, narrow widths, enlarged text, keyboard, reduced motion) and the browser fixtures, the test files beyond the Create-agent regression, and the docs. CI: no check has failed on this head yet, but the browser, flake and Rust jobs are still running, and the description says updated desktop screenshots are pending.
fd3ee53 to
ee16e32
Compare
atishpatel
left a comment
There was a problem hiding this comment.
🤖 Re-reviewed the rebased ee16e32f head. Its four commits are patch-identical to the previously approved stack; the only old-to-new tree delta is the already-reviewed #3344 preset-tag change. Eleven affected component/config/service suites passed together locally: 1,068 passed, 1 skipped. Hosted CI is still running.
…r check The create-time Thinking test focuses the Thinking combobox and asserts that its bottom edge clears the dialog's sticky footer. AgentCreateDialog's reveal() scrolls the focused control so that bottom − footerTop is exactly 0, and the dialog enters with transform: translateY(var(--space-3)) → none over 220 ms (overlays.css). The check ran about 150 ms into that transition in the failing CI trace. With the scroll already at rest, WebKit reports bottom − footerTop between +0.0006 and +0.0085 px at fractional translate values, so the <= comparison failed; it is exactly 0 whenever transform is none. The triage ruled out scrollTop truncation, static fractional transforms, layout shifts and web fonts. Wait with settleDialogMotion from navigation.mjs — the helper dialog-footer, hosted-create-join, layout, message-overlays and plugin-import already use — right after the dialog is visible, then also poll for the computed transform to be none, since locally the transition's finished promise could resolve while the animation was still attached. No tolerance, timeout or assertion change. Verified with `bin/pnpm test:browser:ci --project webkit --no-deps --workers=1 --repeat-each=8 tests/browser/agent-library.spec.mjs -g "create-time Thinking" --reporter=list`: 8/8 passed locally (12.1–12.3 s each, 2.4 m). The triage did not reproduce the failure naturally on an idle host (baseline 8/8 and 10/10 on two pinned CPUs) and only showed it with the transition stretched to 3 s, so this run guards against regression rather than reproducing CI timing. Biome is clean on the file. Not addressed here: the Chromium sighting on PR #3345 was a fixture missing `recommended` and was fixed by that PR's later push; the similar footer reads in solo-sharing.spec.mjs, profiles.spec.mjs and the agent-share-card checks are left for their own change. Co-Authored-By: Claude Fable 5.1 <[email protected]> Signed-off-by: mtoohey <[email protected]> Signed-off-by: Matt Toohey <[email protected]>
## Stack 1. **→ [1/2] feat(agents): add a recommended agent setup (core)** (#3344) ← this PR 2. [2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity (#3345) ## What this adds A way for a build to ship a recommended agent setup: which harness, model and thinking level a new agent should use. This PR is the non-UI part. It adds no screens. [2/2] adds the screens that use it. If the setting is unset, as in every open-source build, nothing changes. ## How it works - **The candidate list.** Packagers set `BUZZ_RECOMMENDED_AGENT` at build time. It is a JSON list of candidates, best first. Each one names a harness (`goose`, `codex` or `claude-code`), a model, a thinking level and a display label. goose candidates also name a provider. Vite checks the list and compiles it in. A bad value fails the build and names the field at fault without printing the value. A launch can also swap in its own list (`setRuntimeCandidates`). - **Readiness checks.** `useRecommendedPick` picks a setup for a new agent. It walks the list and asks each harness whether it is installed, signed in or set up, and whether it offers that model now. Each check has a time limit. A check that fails or runs out of time skips that candidate. It reports `checking`, `none` or `found`, plus which better candidates were skipped. - **Following it at run time.** An agent on the recommendation saves only a mark (`preset: "recommended"`) and no model of its own. At run time, goose, Codex and Claude Code each use the first candidate for their own harness that they still offer. They check once per launch and look again a minute or more later, so a harness set up since then gets picked up. If none fits, the agent runs on the harness's own default instead of failing. Its harness never changes for it. A model or thinking pick that reaches a run for one of these agents is ignored, such as one saved in a Solo chat before the switch. - **The synced mark.** On a config channel the mark syncs next to the agent's settings, not inside them. Older versions ignore it and keep it when they edit. A synced revision that names a model, provider or thinking level takes the agent off the recommendation on every device. - **Docs.** `docs/configuration.md` documents the setting with placeholder values. ## Testing CI runs the suite. `tsc --noEmit` is clean locally. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: Tim Mellor <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]>
In builds with a recommendation, for local harnesses (goose, Codex, Claude Code): - Create agent shows AI settings: Automatic, showing what it uses as a quiet chip, or Manual, which opens the dialog's own Harness, Model and Thinking rows in place, starting from Automatic's pick. "(Recommended)" is in the menu, not on the trigger. When Buzz's usual pick isn't set up, an (i) after the chip says so in a tooltip; it never lists the order. Create waits for a Name and a ready harness. With nothing set up, a row asks for one thing to set up first, with a Set up button, and Create says why it waits. A hosted type such as Builderlab is chosen under Manual's Harness and keeps its own controls, as on main. - An agent's Identity tab shows the same row; a manual model, provider or thinking choice turns Automatic off. Hosted agents are unchanged. - Beside Send, an agent on Automatic has no model or thinking choice: the composer offers only its session controls where they apply, and no button where there is no session to act on (as a new top-level message). A Solo chat's pick saved before it switched is left out of what is sent. The huddle composer offers it no picker. Agents on Manual are unchanged. - Design system: SettingsGroupExpand reveals rows in place; ValueChip shows a short value; Select takes describedBy; compact menus with option descriptions wrap within a menu's width. - Accessible names and descriptions, one live region for the result, and no flicker while checking. - docs/buzz-help.md describes it. Builds without a recommendation are unchanged. Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Tim Mellor <[email protected]>
Attribute distributor recommendations, show compact model summaries, and distinguish Automatic from Custom throughout agent creation, Identity settings, and library cards. Respect reduced motion for cycling harness marks. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <[email protected]>
Let users leave Automatic when no local recommendation is available and choose another harness, including hosted agents. Preserve runtime recommendation validation and refresh model-summary assertions. Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <[email protected]>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@feedback.communities.buzz.xyz> Signed-off-by: Taylor Ho <[email protected]>
ee16e32 to
dfbadab
Compare
atishpatel
left a comment
There was a problem hiding this comment.
🤖 Re-approved at dfbadab8 after #3344 merged. All four commits are patch-identical to the previously approved stack; this update only rebases them onto the merged base and current main.
joahg
left a comment
There was a problem hiding this comment.
🤖 Re-checked at dfbadab. This is a rebase onto main now that [1/2] (#3344) has merged: the four commits are patch-identical to ee16e32 (git range-diff shows all four unchanged), so the PR's own diff is unchanged and the earlier P1 fix (Custom stays reachable when no candidate is offered) is still in place. Nothing new from me.
Open from other reviewers: the follow-ups on a mode id plus options list, "(Recommended)" markers in Manual's harness menu, and a Manual "Default" that keeps following the recommendation. The author has deferred them to separate PRs; that is a scoping call for the maintainers.
No changed file I checked carries a FOUNDATION marker. CI is still running on this head, so I could not read a final result.
This changes what users see (Create agent, Identity, agent cards), so it still needs a design or core-team reviewer for approval.
* origin/main: (27 commits) [2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity (#3345) fix(solo): preserve and resume unsent chat drafts (#3525) fix(builderlab): give refused app sign-ins and Identity links a route to Organization sign-in (#3078) fix(agents): say why Import an agent can't import here, and link Manage plugins (#3073) [1/2] feat(agents): add a recommended agent setup (core) (#3344) test(browser): survive the live-stream restart a page-clock jump causes (#3442) chore(renovate): hold rusqlite below 0.41 for mesh-llm (#3438) test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (#3445) test(browser): play the draft clip at rate 0 instead of looping it before the Play click (#3446) fix(status): reopen a status whose preset deadlines coincide as Today (#3449) fix(messages): tolerate a cancelled reaction-name chunk load (#3450) fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (#3451) test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (#3444) Expose native channel headings to Solo sources (#3523) test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (#3447) fix(solo): keep every contributed destination action (#3516) fix(identity): report an issuer that keeps rate-limiting an agent as a limit (#2365) fix(identity): let a stuck at-launch sign-in copy its link (#2453) fix(profiles): open avatar previews on hover in compact density (#3510) feat(solo): smooth chat recency reordering (#3502) ... # Conflicts: # src-tauri/src/federated_identity/agent/tests.rs # src-tauri/src/federated_identity/mod.rs # src-tauri/src/federated_identity/protocol.rs
* origin/main: (133 commits) Expose ordinary chats without workspace headings (block#3530) [2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity (block#3345) fix(solo): preserve and resume unsent chat drafts (block#3525) fix(builderlab): give refused app sign-ins and Identity links a route to Organization sign-in (block#3078) fix(agents): say why Import an agent can't import here, and link Manage plugins (block#3073) [1/2] feat(agents): add a recommended agent setup (core) (block#3344) test(browser): survive the live-stream restart a page-clock jump causes (block#3442) chore(renovate): hold rusqlite below 0.41 for mesh-llm (block#3438) test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (block#3445) test(browser): play the draft clip at rate 0 instead of looping it before the Play click (block#3446) fix(status): reopen a status whose preset deadlines coincide as Today (block#3449) fix(messages): tolerate a cancelled reaction-name chunk load (block#3450) fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (block#3451) test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (block#3444) Expose native channel headings to Solo sources (block#3523) test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (block#3447) fix(solo): keep every contributed destination action (block#3516) fix(identity): report an issuer that keeps rate-limiting an agent as a limit (block#2365) fix(identity): let a stuck at-launch sign-in copy its link (block#2453) fix(profiles): open avatar previews on hover in compact density (block#3510) ... Signed-off-by: Joah Gerstenberg <[email protected]> # Conflicts: # src/bundled/codex/prompt.test.ts # src/bundled/goose/runtime.ts



Stack
Depends on the recommended-agent core in #3344. This PR adds the setup controls and agent-card presentation.
What changes
Builds with a recommendation offer Automatic and Custom in Create agent and the Identity settings for local agents. Builds without a recommendation keep the existing controls.
The recommendation setting accepts the existing candidates array or an object containing
candidates, optionalrecommendedBy, and optionaldescription. Attribution stays with the current recommendation rather than being copied into saved agents. Hosted agent types retain their own settings.Validation
Current head:
ee16e32f3885cdf374fb3508d7c58d9bc4462923, rebased onto the updated core. Current-head review confirms the four UI commits are patch-identical to the previously approved stack and reports 1,068 passed, one skipped across eleven affected component/config/service suites. Hosted CI passed on this exact head, includingCI required.Local behavior evidence at
4d5014295583e185716ac3e49249e7b1e43f0645:At
fd3ee535098e7c411852ba847cce01911b29ba23, the running macOS desktop build was exercised through the Agents page and Automatic → Custom mode switching in an unsaved Create draft. The draft was closed without creating or changing an agent. This verifies the captured native rendering and mode transition; broader native states are not covered by these captures. The full Biome check and mandatory push hooks also passed on that pre-rebase head.Screenshots
Actual macOS desktop captures at
fd3ee535098e7c411852ba847cce01911b29ba23; see the native check notes.