Agent skills
Nine written workflows that let an AI agent build with this kit instead of guessing at it. They name the kit's 142 variant containers, its 33 semantic tokens and the traps in the Penpot API.
Two paths
The skills split down the middle, and you only ever load the half you need. Setup asks which one you are on.
shadcn-kit-to-code is the bridge between them: it takes a design that already exists in Penpot and emits code by reading each instance's component identity rather than looking at a picture of it.
The skills
Installing
A skill is a plain folder: a SKILL.md and the references it reads. Nothing is compiled and there is nothing to configure. How a tool picks it up is the only thing that differs.
Unzip into the skills directory and the agent finds them by their descriptions. Every bundle is self-contained, so a skill installed on its own still resolves its own references.
Neither has a skills directory. Both read an instructions file instead, so the folders go anywhere stable and a short routing table tells the agent when to open which one.
Then paste the routing table from the package's install guide into:
If the tool scans a folder for skills, drop them in - the format is the plain one and needs no conversion. If it does not, it reads some always-on instructions file, and the same routing table works there. Commit the folders into a shared repository and every teammate gets them from a checkout.
Code targets
A mapped target means every component family has a written translation. Four are fully mapped:
Material UI, Vuetify and Angular Material are documented as a second tier, with their losses named rather than papered over. Those libraries do not carry the same variant model, so the mapping says what survives and what does not before you commit.
Naming and routing
Skill names are brand-namespaced on purpose. Generic names collide the moment a second kit is installed, and then the router cannot tell them apart. Name the kit in your prompt and routing is reliable.
That is not a defect to route around with greedier descriptions. It is how a shared skill namespace should behave.