[FEATURE] Mods: a launcher surface for icons in the desktop toolbar, top nav, or a right-edge dock

Status Open
Reported on v2.1.295
Maintainer reply None cached
Activity 0 comments · opened Oct 13, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

A mod can open a Pane, but in the desktop app's Code tab it has no persistent place to put the control that opens it. The documented render sites are the transcript rows, Spinner, SessionMode, PromptHint, AbovePrompt and Pane. None of them is in the window's top icon row, the top navigation, or along the window edge.

Today the launcher must go in the AbovePrompt band or behind a slash command. Both work around the gap and have limits:

  • The band is one shared slot. When two mods both want the band, only the first in the chain draws, so a launcher can disappear because of another mod.
  • The band is not drawn in some views (Remote Control: #99217, #101256; split view, lower pane: #101059).
  • A slash command cannot be discovered by pointing at the window.

Positioning cannot escape the band either. The BoxProps docs say a position: "absolute" Box is clipped to its site, and the desktop draws each site in a container with contain: paint. A hover card (display: "none" with hover: { display: "flex" }) is drawn as a popover, so it is not clipped. But the desktop places the card next to its anchor and shows it only on hover.

Proposed Solution

Add a launcher surface for mods: a small, persistent, pressable icon that a mod registers and the host places. For example:

await $.ui.launcher.register({
  id: 'workers',
  label: 'Workers',          // accessible name and tooltip
  icon: { svg: '<svg ...>' }, // or a built-in icon name
  badge: '3',                 // optional count
  placement: 'toolbar',       // 'toolbar' | 'nav' | 'edge'
})
on('ui.launch', { id: 'workers' }, $ => $.ui.open({ id: 'workers', title: 'Workers' }))

The placements:

  • toolbar: the icon row at the top right of the Code tab, beside the built-in icons there.
  • nav: the top navigation, for launchers that apply to the whole app.
  • edge: a dock of icons along the right edge of the window, vertically centered, each one opening its mod's pane.

The host owns the order, the spacing, and any overflow. The person can hide a launcher. A badge lets a mod show state (such as a count of running workers) without taking the band. On the terminal surface, the same registration could map to the status line or to a key binding.

Alternative Solutions

  • A launcher button in the AbovePrompt band. It works, but it competes with other mods for the one band slot, and some views do not draw it (see above).
  • A slash command ($.command.register) that calls $.ui.open. It works, but it cannot be discovered by pointing at the window.
  • $.ui.toast to announce that a pane exists. A toast is temporary and cannot be pressed to open the pane.
  • Patching the desktop app bundle. It is unsupported, and each update undoes it.

Priority

Medium - Would be very helpful

Feature Category

Developer tools/SDK

Use Case Example

  1. I have a mod that tracks every subagent a session starts and shows them in a "Workers" pane.
  2. I want an icon at the top right of the Code tab, or docked on the right edge, that shows the count of running workers and opens the pane on a press.
  3. Today I can put an "Open Board" button only in the AbovePrompt band. A second mod that uses the band can hide it, and the band is missing in Remote Control and in the lower pane of a split view.

Additional Context

  • Claude Code 2.1.295, Claude desktop app 2.31226.1, macOS.
  • Related: #91870 (mods extensibility), #99217, #101256, #101059.

View original on GitHub ↗