CtrlK
BlogDocsLog inGet started
Tessl Logo

migrate-radix-to-base

Migrates React projects and components from Radix UI to Base UI. Use when asked to migrate from radix, move to base-ui, convert radix primitives, or switch a shadcn project's base library. Handles single components ("migrate accordion") and whole projects.

71

Quality

86%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

85%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

An unusually dense, expert-level migration runbook with excellent sequencing, validation checkpoints, and copy-paste commands; nearly every token is directive. Its one real defect is that the entire detailed layer — prop tables, class mappings, worked examples — is delegated to reference files that are absent from this bundle, leaving the skill's core transformation knowledge unreachable.

Suggestions

Ship the referenced bundle files (universal-patterns.md, consumer-props.md, overlays.md, menus.md, form-controls.md, disclosure.md, display-misc.md, class-mapping.md, wrapper-shapes.md) in a references/ directory — the body delegates all concrete prop/class mapping tables to them, and they are currently missing, so the core transformation step cannot be executed from the bundle.

Since consumer call-site prop rewrites ('repoint consumers ONE AT A TIME... the call-site props in consumer-props.md') are the main break surface per the skill's own analysis, inline at least one worked example of a before/after consumer diff in SKILL.md so the most common case survives a missing or relocated reference file.

Add a short bundle manifest near the top (one line listing the reference files with their one-line purposes) so a reader can immediately verify the expected bundle is complete before starting a migration.

DimensionReasoningScore

Conciseness

The body is relentlessly lean: no explanation of what Radix, React, shadcn, or migrations are — every line is directive ("diff the user's file against its stock origin, using the components.json style VERBATIM in the URL"). Even rationale is given only where it changes behavior ("A clean merge is NOT proof of a clean file"). Matches the 'every token earns its place' anchor.

5 / 5

Actionability

Highly concrete and copy-paste ready: exact commands (`npx shadcn@latest info --json`, `git merge-file user.tsx radix-golden.tsx base-golden.tsx`, `grep -n "radix-ui\|@radix-ui"`), exact URL patterns, exact file paths and modes. Not 5 because the detailed mapping tables and worked examples (consumer prop rewrites, asChild->render example) are delegated to reference files (consumer-props.md, universal-patterns.md) that are not present in this bundle, so the common-case transformations are not executable from what ships here.

4 / 5

Workflow Clarity

Clear multi-step sequences with explicit validation checkpoints throughout for a batch/destructive operation: baseline typecheck before touching dependencies (step 4 of Preflight), typecheck per repointed consumer, mandatory leftover grep sweep on every golden-pair file with the failure mode explained, build per batch and full build vs baseline at the end, plus resume-from-disk state handling and a fixed report structure. Feedback loops (validate -> fix -> re-validate) are explicit.

5 / 5

Progressive Disclosure

The body itself is well structured with clearly signaled one-level-deep references (universal-patterns.md, overlays.md, menus.md, form-controls.md, disclosure.md, display-misc.md, class-mapping.md, wrapper-shapes.md, consumer-props.md, each named with its purpose). However, none of these files exist — the bundle contains no references/, scripts/, or assets/ directories at all — so navigation dead-ends and the detailed content is unreachable. Not 2 because the SKILL.md is not a wall of inlined reference text and the references are clearly signaled, not buried; not 4/5 because scoring against the actual bundle structure, the split is only nominal.

3 / 5

Total

17

/

20

Passed

Description

87%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description: concise, third-person, with an explicit 'Use when...' clause covering multiple natural trigger phrasings and both single-component and whole-project scope. The only meaningful gap is the absence of the package-identifier form (@radix-ui/react-*) that users often paste verbatim.

DimensionReasoningScore

Specificity

Concrete actions are named ("Migrates React projects and components from Radix UI to Base UI") with explicit scope ("Handles single components ('migrate accordion') and whole projects"), but the underlying actions are variations of one verb (migrate/move/convert/switch) rather than several distinct capabilities like the score-5 example. Not 3 because it goes beyond naming the domain — it distinguishes component-level and project-level migration; not 5 because coverage is a single action family with minor gaps (e.g., consumer call-site migration is not mentioned).

4 / 5

Completeness

Explicitly answers both questions: what ("Migrates React projects and components from Radix UI to Base UI... Handles single components and whole projects") and when ("Use when asked to migrate from radix, move to base-ui, convert radix primitives, or switch a shadcn project's base library") with concrete trigger phrases. Matches the score-5 anchor directly.

5 / 5

Trigger Term Quality

Natural phrasings users would actually say are well covered: "migrate from radix", "move to base-ui", "convert radix primitives", "switch a shadcn project's base library", plus a concrete example utterance ("migrate accordion"). Not 5 because the package-name form users paste from package.json ("@radix-ui/react-*") is absent — the equivalent of the ".pdf" extension in the score-5 anchor; not 3 because synonyms and the shadcn framing are clearly present rather than missing common variations.

4 / 5

Distinctiveness Conflict Risk

A clear niche (Radix UI → Base UI migration for React/shadcn projects) with unambiguous triggers naming both the source (radix) and target (base-ui) libraries, so it is unlikely to fire for unrelated UI-library or general migration skills. Minimal conflict risk.

5 / 5

Total

18

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository
shadcn-ui/ui
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.