shadcn-components

SkillMedia

Use when building or editing shadcn/ui components, mapping Radix vs Base UI APIs, or choosing a composition pattern (asChild vs render).

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the shadcn-components skill

What this skill tells your AI

The instructions your AI receives, as published by fusengine/agents in plugins/shadcn-expert/skills/shadcn-components/SKILL.md and read by ahel’s review.

Requires detecting the project's primitive first (shadcn-detection) and consulting the shadcn MCP for registry source instead of hand-writing component internals.

shadcn Components

Agent Workflow (MANDATORY)

Before component work, spawn agents in parallel, one Agent call each with a name:

  1. fuse-ai-pilot:explore-codebase - Find existing components
  2. fuse-ai-pilot:research-expert - Verify component APIs via Context7
  3. mcp__shadcn__search_items_in_registries - Search available components

After: Run fuse-ai-pilot:sniper for validation.


Overview

FeatureDescription
Radix primitivesDefault shadcn/ui since 2021
Base UI primitivesNew option since late 2025
Component mapping1:1 mapping between both
API differencesasChild vs render, naming

Critical Rules

  1. ALWAYS detect primitive before component work (shadcn-detection)
  2. ALWAYS consult MCP before adding any component
  3. NEVER mix Radix and Base UI APIs in same component
  4. MATCH composition pattern to detected primitive
  5. USE registry source as truth, not manual code

Architecture

components/ui/
├── dialog.tsx          # Adapted to detected primitive
├── select.tsx
├── accordion.tsx
└── ...

-> See dialog-example.md for complete component


MCP Usage (MANDATORY)

ALWAYS consult shadcn MCP before adding components:

mcp__shadcn__search_items_in_registries -> find component
mcp__shadcn__view_items_in_registries   -> view source
mcp__shadcn__get_add_command_for_items  -> get install command

Component Mapping Table

ComponentRadix PartBase UI Part
DialogDialogContentDialog.Popup
DialogDialogOverlayDialog.Backdrop
SelectSelectContentSelect.Positioner + Select.Popup
TooltipTooltipContentTooltip.Positioner + Tooltip.Popup
AccordionAccordionContentAccordion.Panel
PopoverPopoverContentPopover.Positioner + Popover.Popup
MenuDropdownMenuContentMenu.Positioner + Menu.Popup

Composition Patterns

Radix: asChild

<Dialog.Trigger asChild>
  <Button variant="outline">Open</Button>
</Dialog.Trigger>

Base UI: render

<Dialog.Trigger render={<Button variant="outline" />}>
  Open
</Dialog.Trigger>

Reference Guide

Concepts

TopicReferenceWhen to Consult
Radix APIsradix-components.mdBuilding with Radix primitives
Base UI APIsbaseui-components.mdBuilding with Base UI primitives

Templates

TemplateWhen to Use
dialog-example.mdCreating Dialog components

Best Practices

DO

  • Detect primitive FIRST (use shadcn-detection)
  • Consult MCP for component source before editing
  • Follow existing naming conventions in project
  • Use correct composition pattern for detected primitive

DON'T

  • Mix asChild and render in same component
  • Assume Radix without detection
  • Manually write component internals (use MCP)
  • Skip registry check before adding new components

Signals

GitHub stars
25
Forks
4
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
shadcn-components
Source
github.com/fusengine/agents