Agent skill

Shadcn Parity

by udecode in udecode/kitcn

“Skill: shadcn-parity”

— description from SKILL.md by udecode
Apache-2.0Auto-check: notesFrontend & Design

Install Shadcn Parity

skills CLI
$ npx skills add udecode/kitcn --skill shadcn-parity -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install udecode/kitcn shadcn-parity --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/udecode/kitcn.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/shadcn-parity .claude/skills/shadcn-parity && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
shadcn-parity
GitHub stars
450
Token cost
~3.7k tokens
SKILL.md length
1,836 words
Files
1
Skills in repo
33
Repo updated
First seen
Licence
Apache-2.0

At a glance

  • Works in 7 steps: Map direct analogs → Read code and tests before edits → Port tests first → …
  • SKILL.md covers Comprehensive References, Contract, Ownership Rule and Universal Create Matrix, plus 7 more sections
  • Calls bun, bunx and eslint

About this skill

Shadcn Parity is a skill in udecode/kitcn (450 stars). Its SKILL.md is about 3.7k tokens. Licence: Apache-2.0.

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Map direct analogs
  2. Read code and tests before edits
  3. Port tests first
  4. Copy structure, not just behavior
  5. Copy presentation too
  6. Keep local extensions narrow
  7. Delete conflicting legacy paths

What it can do on your machine

Read from SKILL.md and the folder at commit c6010f5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bun
    • bunx
    • eslint

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use bunx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Shadcn Parity loads about 3.7k tokens when it runs. Until then it costs about 9 tokens; SKILL.md has 1,836 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~9
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:63
    - `.env.local`
  • NoteMentions a .env fileSKILL.md:126
    - `.env.local`
  • NoteMentions a .env fileSKILL.md:360
    - remove `CONVEX_DEPLOYMENT` noise from `.env.local`

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from udecode/kitcn at commit c6010f5, republished under its Apache-2.0 licence (© udecode). 1,836 words, ~3,667 tokens.

Download SKILL.mdSave it as .claude/skills/shadcn-parity/SKILL.md (or your agent's skills folder).
name
shadcn-parity
description
Skill: shadcn-parity

Shadcn Parity

Use this for UI/component parity work, including shadcn-owned shell files, registry-style component authorship, React component patterns, and React Compiler/Effect decisions inside shadcn-compatible surfaces.

Comprehensive References

Load these only when the task needs the detail:

  • .agents/rules/shadcn-parity/references/components.md — comprehensive component architecture reference: accessibility, asChild, composition, data attributes, artifact taxonomy, polymorphism, controlled/uncontrolled state, and component typing.
  • .agents/rules/shadcn-parity/references/react.md — comprehensive React reference: React Compiler, manual memoization escape hatches, Effects, useEffectEvent, ref access, derived state, Tailwind v4 syntax, data attributes, and UI constraints.

Contract

When the user asks for shadcn parity, treat ../shadcn as the source of truth. Do not give them "inspired by shadcn". Do not abstract away the parts that matter. Clone the methodology:

  • source first
  • file structure first
  • helper layering first
  • unit tests first
  • output parity first

Only diverge when:

  1. the product domain is genuinely different
  2. the current repo has an explicit constraint
  3. the user explicitly asks for a divergence

If you diverge, say exactly why.

Ownership Rule

For kitcn init -t next, shadcn owns the app shell. kitcn owns the integration layer.

Shadcn-owned files stay shadcn-owned:

  • app/layout.tsx
  • app/page.tsx
  • app/globals.css
  • components/theme-provider.tsx
  • lib/utils.ts
  • components.json
  • eslint.config.mjs
  • next.config.mjs
  • postcss.config.mjs

kitcn-owned files stay kitcn-owned:

  • components/providers.tsx
  • lib/convex/*
  • .env.local
  • convex/*
  • concave.json
  • package.json baseline patches
  • <functionsDir>/tsconfig.json
  • tsconfig.json alias patch for @convex/*

The rule is simple:

  • add kitcn files
  • patch the seam
  • do not replace shadcn shell files wholesale

For the current Next scaffold, the acceptable shell patches are narrow:

  • patch layout.tsx to mount Providers
  • patch tsconfig.json to add @convex/*
  • patch components.json only when tailwind.css must follow src/ vs root

For kitcn init, overwrite behavior must match that ownership split:

  • shell seam patches apply directly
  • kitcn-owned replacement files prompt per file in interactive mode
  • --yes skips conflicting owned replacements
  • --overwrite is the only bulk replacement hammer

If you find yourself authoring a full replacement for a shadcn-owned file, you are probably doing it wrong.

Universal Create Matrix

Public templates stay concrete:

  • kitcn init -t next
  • kitcn init -t vite

Internally, kitcn only has two scaffold modes:

  • next-app
  • react

Framework detection should feel like shadcn, not like a fake kitcn abstraction:

  • next-app maps to next-app
  • next-pages, vite, react-router, tanstack-start, and manual map to react
  • unsupported frameworks should fail clearly

init -t stays universal. Keep it narrow.

init -t always owns:

  • the detected app shell plus the kitcn seam
  • convex/functions/schema.ts
  • convex/functions/http.ts
  • convex/lib/crpc.ts
  • convex/lib/get-env.ts
  • <functionsDir>/tsconfig.json
  • root tsconfig.json patch
  • .gitignore entries for .convex/ and .concave/
  • components/providers.tsx
  • lib/convex/*
  • .env.local
  • baseline scripts: codegen, convex:dev, typecheck:convex, root typecheck

Next-only baseline pieces:

  • /convex messages demo
  • lib/convex/server.ts
  • lib/convex/rsc.tsx
  • narrow shell seam patches:
    • layout.tsx
    • tsconfig.json
    • components.json

React-mode baseline keeps the client core only:

  • no RSC files
  • no Next-only provider/server helpers
  • no /convex demo in v1
  • Vite is the concrete reference for this mode

init -t options stay narrow:

  • -t next
  • -t vite
  • --backend convex|concave
  • --cwd
  • --name
  • --defaults
  • --yes
  • --prod
  • --preview-name
  • --deployment-name
  • --env-file

Do not grow init -t with fake feature flags.

Optional capability belongs in add:

  • kitcn add auth
  • kitcn add ratelimit
  • kitcn add resend

Auth is the first real bundle. It patches the init -t baseline and owns:

  • auth server config/runtime
  • auth client files
  • auth-aware provider wiring
  • auth env through get-env
  • auth cRPC families:
    • optionalAuth*
    • auth*

Mode split:

  • next-app: minimal /auth page + provider/client/server wiring
  • react: auth server config/runtime, auth client, provider wiring, auth env, and auth cRPC families only

Auth v1 does not own:

  • role/admin policy
  • orgs/invitations
  • anonymous upgrade flows
  • app-specific auth UX beyond minimal sign-in/session wiring

Rule:

  • universal starter scaffold = init -t
  • in-place adoption = init
  • optional/invasive/app-policy features = add
  • if a capability already fits cleanly as a first-party plugin, do not stuff it into init -t

Registry Comparison

kitcn should match shadcn on the data model as closely as possible.

Same shape:

  • one item module per folder under packages/kitcn/src/cli/registry/items/<item>/<item>-item.ts
  • each item declares files
  • each item declares package dependencies
  • each item declares internal item dependencies

Current kitcn divergence:

  • the registry stays internal for now
  • install is not just file copy
  • add flows patch existing kitcn seam files based on project mode

That extra install layer is what kitcn adds beyond plain shadcn registry resolution:

  • register schema extensions into schema.ts
  • patch crpc.ts, http.ts, providers, and get-env.ts
  • resolve different roots for next-app vs react
  • maintain plugins.lock.json
  • install pinned package specs when needed
  • run codegen and post-add hooks

Rule:

  • keep the item files as close to shadcn RegistryItem as possible
  • keep the dynamic patching in install/runtime code
  • do not shove kitcn-specific behavior back into the item shape unless shadcn has a real equivalent

Create

fixtures/* is not hand-authored. It is a normalized snapshot of real CLI output.

The important bit:

  • committed template _generated/* output comes from real kitcn codegen during kitcn init -t
  • it is not copied from repo fixtures
  • it is not written by hand
  • template-mode init -t must fail if real codegen cannot be produced
  • do not call kitcn codegen directly from the fixture script

Why not direct kitcn codegen?

  • a fresh temp app may still need Convex bootstrap before codegen can succeed
  • that bootstrap can become interactive if you bypass create's bootstrap flow
  • kitcn init -t next already owns the whole sequence: scaffold -> dependency install -> codegen -> bootstrap retry -> codegen retry
  • the fixture script should consume that contract, not reimplement half of it

Repo automation adds two deliberate details:

  • tooling/fixtures.ts owns committed starters: next, next-auth, vite, vite-auth
  • that uses the same public backend selector users can use elsewhere
  • template sync intentionally chooses Concave because it is more agent/CI-friendly here
  • default CLI behavior is still backend convex unless config or --backend says otherwise
  • manual runtime lives in tooling/scenarios.ts, materialized under tmp/scenarios/*
Human Repro

To regenerate the checked-in fixture:

bash
bun run fixtures:sync

To verify the fixture still matches fresh CLI output:

bash
bun run fixtures:check

To materialize runnable tmp apps for manual runtime:

bash
bun run scenario:prepare all

Why this exists:

  • committed fixtures/*/package.json stays normalized to workspace:*
  • fixtures:check swaps that to a packed local tarball before validation
  • manual runtime happens in tmp/scenarios/*, never in fixtures/*
  • use @.claude/skills/scenarios/scenarios.mdc for runtime proof after prepare; it owns which scenario keys stop at scenario:dev, which ones add test:auth and test:e2e, and which ones must use scenario:check

fixtures:check is not just a diff. It validates the fresh generated app with:

bash
bun install
bun typecheck

Next starters also run bun lint. Vite starters intentionally skip lint in this lane because shadcn's default eslint . sweeps generated/runtime files.

It validates against the current local package under test, not the last published npm version:

  • pack the current local kitcn package to a tarball
  • install that tarball into the generated temp app

If you need the slower rebuild-first lane, use:

bash
bun run fixtures:check:full
Agent Repro

When checking parity or drift:

  1. run bun run fixtures:sync instead of editing fixtures/* by hand
  2. run bun run fixtures:check
  3. if drift remains, fix kitcn init -t next, not the fixture
Show full SKILL.md (758 more words)Show less
Real Generation Flow

tooling/fixtures.ts does this:

  1. create a temp directory

  2. for each committed starter, run the local CLI:

    bash
    bunx kitcn --backend concave init -t <next|vite> --yes --cwd <tmp> --name <starter>

    For auth starters, follow with:

    bash
    bunx kitcn --backend concave add auth --yes
  3. let create run the actual scaffold flow:

    • run shadcn init -t next
    • apply kitcn overlay files and patches
    • install kitcn baseline deps
    • run kitcn codegen via the init-owned backend adapter
  4. if codegen needs Convex bootstrap, create bootstraps Convex and reruns real codegen

    • for template sync, the selected backend is Concave
    • outside that flow, backend still resolves normally from config/CLI
  5. validate the fresh generated app:

    • pack local kitcn to a tarball
    • rewrite the generated app to install that tarball
    • bun install
    • bun typecheck
    • bun lint only for templates whose registry entry enables lint
  6. copy the generated app into fixtures/<starter>

  7. apply repo-only normalization:

    • strip volatile artifacts (node_modules, .next, lockfiles, etc.)
    • rewrite kitcn to workspace:*
    • remove CONVEX_DEPLOYMENT noise from .env.local

That means the fixture is allowed to normalize repo-local junk, but it is not allowed to invent user-facing files.

Do not change this into:

bash
bunx kitcn init -t next --yes --cwd <tmp> --name next
cd <tmp>/next
bunx kitcn codegen

That skips the point of create owning bootstrap/codegen orchestration and can reintroduce interactive or half-bootstrapped failure modes.

Rule

If fixtures/next differs from fresh output, assume the CLI is wrong first. Do not "fix" fixture drift by patching the fixture directly unless the change is strictly part of repo-only normalization.

Primary Sources

Start here before editing:

  • ../shadcn/packages/shadcn/src/commands
  • ../shadcn/packages/shadcn/src/utils
  • ../shadcn/packages/shadcn/test

Prefer shadcn's non-e2e tests over guessing intended behavior.

Method

1. Map direct analogs

Build a parity map between the local surface and the shadcn surface.

Check:

  • command files
  • utility files
  • file boundaries
  • exported helpers
  • parsing/option ownership
  • formatter/logger/spinner ownership
  • unit tests

If there is a direct analog, mirror it.

2. Read code and tests before edits

Read the matching shadcn implementation and the relevant unit tests before changing local code.

Do not stop at the happy path source file. Read the tests too. That is where the real contract usually lives.

3. Port tests first

For parity work, the first useful move is usually test porting.

Port/adapt shadcn's non-e2e tests for:

  • command parsing
  • formatter output
  • path matching
  • dry-run/diff/view behavior
  • compare/normalization behavior
  • logger/spinner interactions when relevant

Adjust only the domain-specific payloads, paths, and names.

Do not add dead legacy tests like "old API no longer exists". Just delete the old path.

4. Copy structure, not just behavior

If shadcn splits logic into command modules and shared utilities, mirror that split locally.

Prefer:

  • same file boundaries
  • same helper names
  • same call flow
  • same responsibility split

Avoid:

  • thin wrapper files that still delegate everything into one giant legacy file
  • new local abstractions invented only to avoid copying the proven pattern
  • "cleaned up" rewrites that quietly drift from shadcn
  • full-file local templates for shadcn-owned shell files
5. Copy presentation too

Parity includes UX, not just logic.

Mirror:

  • colors
  • logger/highlighter vocabulary
  • spinner lifecycle
  • summary boxes
  • aligned sections
  • diff/view formatting
  • truncation hints

If local dependencies differ, keep the behavior and shape the same with the closest local equivalent.

6. Keep local extensions narrow

If the repo needs a stronger behavior than shadcn, keep it behind the same surface.

Good:

  • same compare utility shape, stronger AST equivalence inside
  • same dry-run formatter shape, different plan payload underneath
  • same shadcn shell, kitcn files mounted through minimal patches

Bad:

  • separate helper stack "because our use case is special"
  • extra compatibility shims
  • alternate command surface
  • replacing shadcn output just because patching feels annoying
7. Delete conflicting legacy paths

If an old local abstraction conflicts with the parity target, remove it.

Do not keep:

  • backward-compat aliases
  • compatibility wrappers
  • fallback parsing for removed flags
  • parallel old/new code paths

Make the result look like it was built that way from the start.

Parity Checklist

Before calling the work done, verify:

  • matching command/module ownership exists
  • matching utility layering exists
  • matching human output shape exists
  • matching unit-test granularity exists
  • relevant shadcn non-e2e tests were ported or consciously adapted
  • remaining divergences are explicit and justified

Anti-Patterns

If you catch yourself doing any of these, stop:

  • "I captured the spirit"
  • "I built a cleaner local abstraction"
  • "I kept the old path for safety"
  • "I only matched the terminal output"
  • "I skipped the tests because behavior looked obvious"
  • "I rewrote the shadcn file because it was faster"

That is how parity rots into fan fiction.

Output Rule

When reporting parity work back to the user, state:

  1. what was cloned directly
  2. what tests were ported/adapted
  3. any intentional divergence

If there was no divergence, say so plainly.

© udecode, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/shadcn-parity of udecode/kitcn.

Open the folder on GitHubat commit c6010f5

Compare with similar skills

Shadcn Parity next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Shadcn Parity compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Shadcn Parity this skilludecode/kitcn450—~3.7kAutomated safety check: NotesApache-2.0
Creative Tim UI Blockscreativetimofficial/ui12k—~2.1kAutomated safety check: NotesMIT
Cosscrafter-station/petdex4.2k—~1.4kAutomated safety check: PassMIT
Ss Learnbitjaru/styleseed972—~1.3kAutomated safety check: PassMIT
Migrate Radix To BaseTheOrcDev/youtube-to-blog1802 repos~2.3kAutomated safety check: PassMIT
UithingBayBreezy/ui-thing729—~1.3kAutomated safety check: PassCustom licence

Similar skills

  • Creative Tim UI Blocks

    creativetimofficial/ui

    Helps install, generate and review Creative Tim UI blocks: shadcn/ui-based React and Tailwind sections that follow a restrained, production-minded design philosophy.

    12k GitHub stars~2.1k tokensUpdated 6 mo ago
    Frontend & DesignAuto-check: notes
  • Coss

    crafter-station/petdex

    Helps implement coss UI components correctly. An agent skill from crafter-station/petdex.

    4.2k GitHub stars~1.4k tokensUpdated 10 days ago
    Frontend & DesignAuto-check passed
  • Ss Learn

    bitjaru/styleseed

    Capture a human-approved UI design lesson as a privacy-minimized local StyleSeed candidate, review it, and prepare an opt-in share package without transmitting project code, prompts, screenshots, or…

    972 GitHub stars~1.3k tokensUpdated 8 days ago
    Frontend & DesignAuto-check passed
  • Migrate Radix To Base

    TheOrcDev/youtube-to-blog

    Migrates React projects and components from Radix UI to Base UI.

    180 GitHub starsUsed in 2 repos~2.3k tokens
    Frontend & DesignAuto-check passed
  • Uithing

    BayBreezy/ui-thing

    Manages UI Thing components, prose, blocks, themes, shortcuts, docs, and MCP-driven workflows in Nuxt projects and in the UI Thing source repo.

    729 GitHub stars~1.3k tokensUpdated 6 days ago
    Frontend & DesignAuto-check passed
  • Animated React Component Libraries

    Hainrixz/editor-pro-max

    Helps choose and drop in animated React components from Magic UI and React Bits for landing pages, marketing sites and dashboards, instead of hand-coding animations.

    261 GitHub starsUsed in 1 repo~5.7k tokens
    Frontend & DesignAuto-check passed

More from udecode/kitcn

All 33 skills in this repo
  • Walkthrough

    udecode/kitcn

    Create a short annotated visual walkthrough from real final-state screenshots or rendered artifacts.

    450 GitHub stars~1.6k tokensUpdated 7 days ago
    Auto-check passed
  • Avoid Feature Creep

    udecode/kitcn

    Prevent feature creep when building software, apps, and AI-powered products.

    450 GitHub stars~2.7k tokensUpdated 7 days ago
    Auto-check passed
  • Changeset Resolve

    udecode/kitcn

    Repair an unreleased .changeset/.md file so it matches the real branch delta against main.

    450 GitHub stars~922 tokensUpdated 7 days ago
    Auto-check passed
  • Audit newer Convex npm releases against kitcn. An agent skill from udecode/kitcn.

    450 GitHub stars~1.8k tokensUpdated 7 days ago
    Auto-check passed
  • Jotai X

    udecode/kitcn

    A skill your agent uses when working with Jotai X stores (createAtomStore), accessing state in components or callbacks, persisting state to cookies or localStorage

    450 GitHub stars~3.7k tokensUpdated 7 days ago
    Auto-check passed
  • Linear Backlog

    udecode/kitcn

    Run a scoped Linear backlog autonomously as a sequence of maximal safe parallel batches by composing orchestrator, autogoal, and task.

    450 GitHub stars~3.1k tokensUpdated 7 days ago
    Auto-check passed

Works with

Questions about Shadcn Parity

How do I install Shadcn Parity in Claude Code?

Run `npx skills add udecode/kitcn --skill shadcn-parity -a claude-code`. Or copy the skill folder (.agents/skills/shadcn-parity in udecode/kitcn) into .claude/skills/shadcn-parity in your project. Claude Code loads it when a task matches its description.

How do I install Shadcn Parity in Codex?

Run `npx skills add udecode/kitcn --skill shadcn-parity -a codex`. Or copy the skill folder (.agents/skills/shadcn-parity in udecode/kitcn) into .agents/skills/shadcn-parity in your project. Codex loads it when a task matches its description.

Can I use Shadcn Parity in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add udecode/kitcn --skill shadcn-parity -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/shadcn-parity, .gemini/skills/shadcn-parity, .github/skills/shadcn-parity and .opencode/skills/shadcn-parity in your project.

What does Shadcn Parity need to run?

Going by SKILL.md and its folder, Shadcn Parity needs the command-line tools its instructions call (bun, bunx and eslint).

Does Shadcn Parity access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Shadcn Parity safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Shadcn Parity use?

Shadcn Parity is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Shadcn Parity use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Shadcn Parity?

Skills that share tags, products or a category with Shadcn Parity: Creative Tim UI Blocks (creativetimofficial/ui, 12k stars), Coss (crafter-station/petdex, 4.2k stars), Ss Learn (bitjaru/styleseed, 972 stars) and Migrate Radix To Base (TheOrcDev/youtube-to-blog, 180 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Shadcn Parity?

udecode (a GitHub organization) maintains it in udecode/kitcn, which has 450 GitHub stars. The repository holds 33 skills in this directory. The repository was last updated on October 1, 2026.

Source: udecode/kitcn on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.