Skip to content

Chat: agent picker shows icons only, can't tell agents apart #9391

Open

Description

@lacherogwu

Summary

  • In the new chat agent/model picker, agents are shown as an icon-only row, with no name while choosing
  • Several agents share the same icon (native Claude plus custom Claude agents with iconId "claude"), so I can't tell which agent each icon is
  • The agent's name only appears in the composer chip after I've picked it, so finding the right one is trial and error

Today
The row at the top of the picker (star, then one icon per agent) has no label and no tooltip on hover. The selected icon shows only an underline. My row has three identical Claude icons.

Image

Only after selecting an agent does its label show, in the composer chip:

Image

Proposal

  • Show the agent's label on hover (tooltip) in the icon row, and/or
  • Show the hovered/selected agent's label inside the picker (e.g. a header above the model list)

Related: #9262 (same problem on mobile for agents that share a preset)

Environment
Paradev 2.0.5, macOS 26.6 arm64

Activity

  1. github-actions commented on Nov 5, 2026

    @github-actions
    Contributor

    This looks plausible and is mostly a UX gap, not a crash. In the composer's model picker, the agent row at the top shows one icon per agent and no visible name. Custom agents can reuse the claude icon, so several identical icons can appear side by side. The only label is a native title attribute, which the reporter says they never saw. The selected tab gets only an underline, and the composer pill shows the agent's icon next to the model name, never the agent's name. So nothing on screen says which Claude-iconed agent is active.

    Affected code

    • Tab row: apps/desktop/src/renderer/routes/_authenticated/components/AgentComposer/components/ModelPicker/components/ModelPanel/ModelPanel.tsx:241-287
      • Each tab draws only getPresetIcon(entry.iconId ?? entry.presetId) (:251) as an <img alt=""> (:273-280).
      • The name is set only as aria-label and a native title={entry.label} (:254, :265).
      • The text fallback entry.label.slice(0, 2) (:282) is used only when no icon resolves. Custom agents with iconId: "claude" always resolve one.
    • Composer pill: apps/desktop/src/renderer/routes/_authenticated/components/AgentComposer/components/ModelPicker/ModelPicker.tsx:80-88, 108-113, 164-177
      • pillLabel is currentLabel(model) ?? model?.label ?? currentAgentLabel ?? …. The agent's label is used only when there is no model option, which is rare.
      • The pill's title (:160) holds only the labels hidden at narrow footer widths, never the agent.
    • Where the icons come from:
      • New-workspace composer: NewWorkspaceScreen.tsx:711-730 builds agents from v2Agents with iconId: agent.iconId ?? agent.presetId, so custom agents that pick the Claude icon look the same as native Claude.
      • Live chat pane: AcpChatPane.tsx:353-369 builds agents with no iconId, keyed by presetId and deduplicated with new Set.

    Root cause

    1. The only hover text is a native HTML title (ModelPanel.tsx:265). Native tooltips appear after the OS delay (about 1 s on macOS), are easy to miss inside a fast dropdown, and may not show at all over the menu. The reporter says there is no tooltip in 2.0.5. I could not confirm whether title was already in that build. It is in main now.
    2. The selected tab is marked only by the underline (:258-259). There is no visible text naming the selected agent, either in the panel or in the composer pill. The pill favors the model label (ModelPicker.tsx:109-113).
    3. Nothing makes agents that share an icon look different, such as a label, a badge or a monogram.

    Reproduction

    1. Under Settings → Agents, create two custom agents and choose the Claude icon for both, so iconId: "claude".
    2. Open the new-workspace composer (or a chat), then open the model picker pill.
    3. You get the star tab and then three identical Claude icons. Click any of them: the underline moves, but no name appears. Close the picker: the pill shows the Claude icon and a model name only.

    A bun:test sketch: render ModelPanel with an agentSwitcher holding two agents that both have iconId: "claude" and different labels. Assert that each agent's label is visible as text, or in a tooltip that opens on hover or focus, and not only in aria-label or title. That assertion fails today.

    Suggested fix

    • Tooltips: wrap each tab button in the shared Radix tooltip (packages/ui/src/components/ui/tooltip.tsx) with a short delay, and drop the native title.
    • Selected agent name: show the selected tab's label in the panel, for example a small caption at the end of the tab row or above the search field. Tooltips alone don't help keyboard users or touch devices.
    • Composer pill: when agentSwitcher has more than one agent with the same icon, include the agent name, e.g. ${currentAgentLabel} · ${modelLabel} (the reporter's "Claude (Medieval) · Opus 5.5"). At the narrow footer tiers, add it to the pill's title / sr-only text (ModelPicker.tsx:114-120).
    • Optional: if two tabs resolve to the same icon, add a monogram badge built from entry.label so they look different without hovering.
    • Live chat pane: AcpChatPane.tsx:361 should pass iconId from agentConfigs so it matches NewWorkspaceScreen.
    • i18n: any new caption text needs Lingui macros and new catalog entries (bun run check:i18n).

    Related: #9262 reports the same shared-icon problem on mobile.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions