Claude.ai Slash Command Skills Picker Parity
Detailed state graph, frame timing, DOM/CSS, animation, and API boundary report for the RocketMinds Claude org slash-command skills picker.
Capture: 2026-07-04 18:03:44Z / 22:03:44 Asia-Tbilisi. Viewport: 1091 x 818 CSS px. Issues: #708, #710.
Conclusion: Claude loads org/plugin skill catalogs on page bootstrap, then slash typing, filtering, keyboard movement, escape, and chip insertion are local composer behavior. Filtering, no-match, recovery, Escape suppression, and chip deletion did not call a skill-search API.
Open the full markdown report
Frame Evidence
Slash open: text appears before menu; menu first mounts before final placement.
/biz filtering: local remount/reposition, no search API call.
Keyboard navigation keeps focus in composer and moves visual row highlight.
Escape removes the menu immediately and leaves /biz text.
Selection replaces typed slash query with a non-editable skill chip.
Edge Case Timelines
Follow-up per-character captures cover bad queries, deleting back into valid matches, middle-token edits, Escape suppression, and chip deletion.
Typing to no-match: menu disappears when candidate count reaches zero; fuzzy matching can briefly reappear for /bizzz-n.
Backspacing from a bad query reopens the menu when the same active slash token has candidates again.
Middle-token delete closes the menu; typing the deleted character back in the middle stayed closed in this capture.
Escape deliberately dismisses the current slash token. Further edits to that token stayed closed; a fresh slash reopened.
Selection inserts a chip and increments local usage. Backspace deletes the chip but does not roll usage back.
Edge Findings
| Area | Observed Claude behavior | Tegy parity target |
| No-match | No empty dropdown. Menu is absent when candidate count is zero. | Close the menu for zero candidates; do not show a no-results row unless product intentionally diverges. |
| Recovery | Suffix backspacing from a bad query back into matching text reopens the menu. | Keep an active suggestion session during normal suffix edits and reopen when candidates return. |
| Middle edit | Deleting inside /biz to /bz closed the menu; reinserting i in the middle stayed closed. | Track active suggestion-session lifecycle, not only text prefix scanning. |
| Escape | Escape closes immediately, leaves text, and suppresses further edits to the same token. | Add an escaped-token state that only resets on token clear/new slash trigger. |
| Storage | Typing/deleting/Escape do not mutate slash storage. Selection increments LSS-slash-command-skill-usage; chip deletion does not undo it. | Persist recency only on command selection. |
| Animation | 36 visible menu samples all had transitionDuration: 0s, animationName: none, and opacity: 1. | Use instant mount/unmount and discrete height/reposition changes, not fades/slides. |
| API | After baseline bootstrap, per-character slash interactions made zero skill/plugin/search/conversation/completion calls. | Filter locally from the loaded catalog. |
State Graph
Idle
-type '/'-> Slash token pending
-menu mounts-> Menu open with all commands
-type query-> Local filtering / remount / reposition
-stable query-> Filtered menu open
-Arrow keys-> Visual activeIndex changes, composer keeps focus
-Escape-> Menu removed, text preserved
-Select candidate-> Skill chip inserted, menu removed
-Clear-> Idle
Critical UI Facts
| Area | Claude behavior | Tegy parity target |
| Menu mount | Appears after slash text is already in ProseMirror. First placement can be 0,0 before Popper settles. | Local suggestion plugin; tolerate one placement pass but avoid visible jank where possible. |
| Animation | Computed transitionDuration 0s, animationName none. Instant mount/unmount. | No decorative fade/slide. Match instant menu with stable shadow. |
| Geometry | Menu 267px wide, max-height 303px, about 9.5px above composer, 12px radius. | Use compact popover above composer, width 240-268px, max-height about 303px. |
| Rows | div role=menuitem, height about 32px, 8px radius, highlighted by bg class not aria-selected. | Keep focus in composer; track activeIndex and apply visual highlight. |
| Selection | Inserts TipTap non-editable node node-skillChip plus trailing space. | Use structured chip node; serialize explicitly at submit time. |
Network Boundary
| Moment | Network observed | Meaning |
| Page load | /plugins/list-plugins?enabled_only=true, /skills/list-skills, bootstrap, MCP bootstrap. | Catalog is server-bound at page/bootstrap time. |
Type / | Analytics/RUM only. | Menu opens locally. |
Type biz | No skill/plugin/search API request. | Filtering is local. |
| Arrow/Escape | No relevant API request. | Pure local state transitions. |
| Select skill | One beacon-like POST https://a-api.anthropic.com/v1/b; localStorage usage key updated. | Selection is local and tracked for recency; no chat submission occurs. |
Evidence Files
All JSON evidence is redacted for UUIDs, plugin IDs, marketplace IDs, and emails. Screenshots are cropped around the composer/dropdown.