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

feat(agents): Kenny's agent page on the new Agents page - #913

Merged
baxen merged 9 commits into
mainfrom
baxen/agents-redesign
Oct 12, 2026
Merged

baxen merged 9 commits into
mainfrom
baxen/agents-redesign

Conversation

@baxen

@baxen baxen commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Brings Kenny's agent visual overhaul (#827, built on the old agents page) to the new Agents page. Stacked on #870.

What changes

  • Agents page. Kenny's three tabs: Your agents, Import and Browse.
    • Your agents is a card grid with a New agent tile. Agents' peek and build views are unchanged.
    • Import uses Kenny's naming and styling. It replaces Bring over and offers only types that run here, so not hosted ones.
    • Browse is back: shared agents in this community, read-only, with Load more. It starts over when the community changes.
  • Create agent dialog. Kenny's modal over the grid, not the side panel.
    • Core owns the identity: a random avatar from the bundled packs (or an uploaded image), the name, and the type menu in the corner.
    • Agent types fill in the rest. A type can provide Create, which renders below the name. It can also put compact controls in the corner (CreateCorner) and take over the card for longer edits (useCreateCard().edit, which drives Back / Done editing). The config it returns is passed to agents.create({ type, name, picture, config }).
    • A picture that fails to save no longer fails the create, for native and hosted agents alike.
  • Claude Code and Codex at visual parity. Both use the shared ModelPicker (a chip in the corner) and AgentInstructions (examples plus Add instructions, which takes over the card). Their settings tabs use the same controls.
  • Design system (proposed, documented in DESIGN.md).
    • SurfaceButton for artwork choices.
    • Combobox.Control appearance="chip" and Input appearance="title", so feature CSS never restyles shared controls.
    • An inline mode for AvatarEditor.
  • Avatar packs. Kenny's 49 pack avatars. Only the PNG posters (~6 MB) and catalog.json are bundled. The WebM/HEVC animations (~220 MB) stream from Berd's versioned CloudFront URLs, which are cached as immutable, and the poster shows until they play or when they can't (offline, reduced motion, errors). Tauri CSP media-src allows that CDN origin. The videos are not in git history.

Decisions (from baxen)

  • Trust Kenny on the create location: the modal over the grid.
  • Plugins provide the create page details, and core keeps the identity.
  • Voice instructions are left for later.
  • Animations depend on Berd's CDN. Moving them to a host we own is a follow-up.
  • Browse and Import stay, in Kenny's naming.

Known gaps

  • Type descriptions are no longer shown in the create dialog; the type menu shows only the icon and title.
  • Card avatars autoplay their videos. A large inventory plays many at once, with no pause offscreen yet.
  • A non-pack, non-image picture falls back to a small initial on cards.
  • Browse doesn't port Kenny's bidi/control-character check on shared names.
  • Quick model switching on cards was deferred.
  • Checked in a Chromium fixture (light theme), not in the native app or the dark theme.

Testing

  • bin/pnpm check passes.
  • bin/pnpm vitest run passes: 587 files, 8352 tests.
  • Visual pass in a local Playwright fixture: grid, create dialog, type menu, model chip, instructions takeover, avatar collections and packs, Use image, Import, and narrow widths.
  • tests/browser avatar specs: avatar-loading failed 1 of 3 repeats with a 5px shift. It renders only Avatar and globals, so it's likely flaky.

🤖 Generated with Claude Code

Base automatically changed from baxen/remote-agents to main October 12, 2026 19:43
@baxen
baxen force-pushed the baxen/agents-redesign branch from 049f175 to 75b9408 Compare October 12, 2026 19:57
@baxen
baxen force-pushed the baxen/agents-redesign branch from 2128dfe to 65527a8 Compare October 12, 2026 20:38
@baxen
baxen marked this pull request as ready for review October 12, 2026 20:41
@baxen
baxen requested review from a team as code owners October 12, 2026 20:41
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 12, 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-12T20:51:08.024176Z 65527a8 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: 65527a828f

ℹ️ 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".

const bringOver = () => setFrame({ view: "browse", side: "porting" });
const ready = types.length > 0 && snapshot.status === "ready";
// Importing gives an agent a key here, so a hosted type cannot take one.
const runnable = types.filter((type) => !type.remote);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Exclude agent types without execution handlers

runnable only excludes hosted types, so Builderlab—which src/bundled/builderlab/README.md explicitly says has no execution handler yet—is offered by the new Browse importer. Selecting it makes agents.port create a locally custodied agent and reports success, but the resulting agent has no run callback and cannot execute; its shared instructions are also discarded because Builderlab has no adopt. Filter on actual local import/execution capability or keep this adapter out until its migration is implemented.

AGENTS.md reference: AGENTS.md:L92-L99

Useful? React with 👍 / 👎.

Comment on lines +188 to +191
@media (max-width: 540px) {
.identity {
height: 48.5rem;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Make the narrow create card fit the dialog viewport

At widths up to 540px this forces the card to 48.5rem (776px), although Buzz supports windows as small as 480×400. AgentCreateDialog also selects bodyLayout="flex", whose shared dialog recipe applies overflow: hidden to the body, so the oversized card cannot scroll and its lower avatar choices or instruction editor are clipped at common narrow/short sizes. Bound the card to the available viewport and give the content an owned scroll region instead of increasing its fixed height.

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

Useful? React with 👍 / 👎.

@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.

Changes needed: keep Browse's import dialog open while its write is pending (inline). I also confirm the existing create-dialog clipping issue as P2 and the instructions-loss concern as a P3 mismatch with the new unconditional promise; the Builderlab execution limitation itself predates this PR.

Star Lord's automated source review via Wes's account. Head 65527a828f8dede6f4eff60d4e936ad6483048c5; base 63c39eee701d2fe9dc7daa59cf4e076e58f188da. No tests, app or browser execution. The current-head CI snapshot contains JavaScript and browser failures; causes unverified. Binary avatar media was not visually inspected.

Comment on lines +170 to +174
<Dialog
open={!!selected}
onOpenChange={(open) => {
if (!open) setSelected(undefined);
}}

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 pending imports attached to their dialog

Close and Escape still clear selected while ImportShared.run is awaiting agents.port: its pending flag never reaches Dialog.preventClose. Closing unmounts the only error state without cancelling the write, so a rejected import loses its failure/retry feedback. Reopening the same card also mounts a fresh enabled Import button, allowing another import while the first is still creating a new identity (service.ts:871–875).

Lift/share pending state with the dialog and set preventClose until settlement, preserving the error in place. This follows DESIGN.md's pending-operation/recovery contract (167–170, 893–899). Add a deferred-import test covering Close/Escape while pending and retry after rejection.

baxen and others added 9 commits October 12, 2026 14:18
Kenny's 49 Berd pack avatars from #827. The posters are bundled, so the
picker and the New agent tile work offline. The transparent animations
(WebM for Chromium, alpha HEVC for WebKit) stream from the catalog's
versioned CDN URLs, which are cached as immutable. Until they play, or
when they can't, the poster shows instead. A chosen avatar is saved as
its versioned poster URL.

Co-authored-by: klopez4212 <klopez4212@gmail.com>
Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-authored-by: ART <ea39c1c8acf57180161ef4ba4ed68abf8589f5291956b909a5aa991fc66664ca@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
…vatar editing

From Kenny's #827: SurfaceButton for artwork tiles, and an AvatarEditor
that can show its picker inline with a dotted squircle trigger and put its
Done action where the host says. Combobox.Control takes a leading icon.

New shared recipes, both proposed in DESIGN.md: `Combobox.Control
appearance="chip"` reads as a label until hovered or opened, and `Input
appearance="title"` sets a value as a title with no field around it.
Adds the OpenAI logo icon.

Co-authored-by: klopez4212 <klopez4212@gmail.com>
Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
An agent type can give a `Create` view: it gets the new agent's starting
config, from its defaults, and reports changes. The app keeps the key,
name and picture around it. `agents.create` takes the name, picture and
config together; the picture is set before the profile is first
published, and a failure to set it doesn't lose the agent.

Shared parts for types' Create views and settings tabs, after Kenny's
#827: a model picker that lists the type's models and takes any ID
typed in, compact as a chip in the dialog's corner; and instructions,
a plain field in settings and, in the dialog, a preview that opens into
an editor over the card.

Co-authored-by: klopez4212 <klopez4212@gmail.com>
Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
…owse

Brings the look of Kenny's #827 to the new Agents page:

- Tabs for Your agents, Import and Browse.
- Your agents is a grid of cards, with the type's mark and summary under
  each name; pack avatars animate. Selecting one still peeks beside the
  grid and Enter or a double-click still opens it. The New agent tile
  leads the grid.
- New agent opens Kenny's create dialog: the big avatar, chosen from the
  packs or an image, and the name, with the type choice in the corner.
  The chosen type's Create view fills in the rest, such as its model
  beside the type and its instructions below the name.
- Import is Bring over, as cards that each import as the chosen type.
- Browse lists the agents shared in the community, read-only, with a
  details view.

Co-authored-by: klopez4212 <klopez4212@gmail.com>
Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
… controls

Both types give a Create view: the compact model chip beside the type,
and instructions below the name. Their Settings tabs use the shared model
picker, which also takes a model ID typed in, and the shared instructions
field. Codex's tabs move to JSX with the design-system controls, laid out
like Claude Code's, keeping its catalog check, thinking choice and
strings.

Co-authored-by: klopez4212 <klopez4212@gmail.com>
Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
- The Create agent dialog opens on the Name field.
- A hosted agent's picture that fails to save no longer fails its create.
- Browse starts over from the first page in another community.
- Add/Edit instructions is named by its visible text, and leaving the
  editor returns focus to it.
- Avatar artwork in cards and tiles is decorative; the avatar choices use
  SurfaceButton and its shared focus ring.
- "No agents yet" waits for the agent list to load.
- Use image offers only an uploaded image, with no source tabs, and Done
  with no image keeps the avatar it had.
- Drop the unused inline image editor, retired-avatar check and the
  hot-reload copy of the pack representatives.

Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
Co-authored-by: ART <ea39c1c8acf57180161ef4ba4ed68abf8589f5291956b909a5aa991fc66664ca@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
- Browse's details dialog is wide, with the agent's portrait, its model
  with the model icon, and who shared it by their profile (the npub is on
  hover). The instructions scroll in their own panel.
- Import in the dialog makes a new agent of the chosen type through
  `agents.port`, with a new "shared" source: a new key with the shared
  name and picture, and its instructions carried to the type's `adopt`,
  the same path that imports an earlier system's agents.
- Import cards show only where an agent comes from. Its npub and
  community are on hover, and the npub shows only to tell apart agents of
  the same name.

Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
The new Agents page titles itself with a tab, so the page-level
"Agents" heading these journeys waited for is gone. The page's
region keeps the name.

Co-authored-by: claude00 <fb8b76a01257932b8ca35060862c29bd09b2137638573731c2d5074fc02c5385@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>
@baxen
baxen force-pushed the baxen/agents-redesign branch from 65527a8 to 7074895 Compare October 12, 2026 21:29

@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.

Changes still needed: this update leaves the prior P2 pending-import dismissal, P2 create-dialog clipping, and P3 instructions-preservation promise findings unchanged.

No new finding in the four heading-to-region selector replacements: they target the named Agents page section and retain the surrounding navigation/sidebar assertions. No duplicate inline comments added.

Star Lord's automated source follow-up via Wes's account. Head 707489546df8835781805be703bf9844ab7198fd; base dd360ca3c7674cedf44b8775596f153331456607. Current-head CI required is green. No tests, app or browser execution; visual/native behavior and binary avatar media remain unverified.

@baxen
baxen merged commit 0cf13d7 into main Oct 12, 2026
23 checks passed
@baxen
baxen deleted the baxen/agents-redesign branch October 12, 2026 21:49
salman1993 added a commit that referenced this pull request Oct 12, 2026
Ports the Codex tab's Install Codex and Sign in setup to the JSX tabs
from #913, which replaced tabs.ts.

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

3 participants