Governance for AI

Stop AI agents from breaking your design system.

Your design system already lives in your repo as real Tailwind and components. ChoiceUI makes it the enforced source of truth, so your codebase, and every AI agent working in it, cannot drift off system without a decision you actually made.

$ npx @jlist/choiceui init

Runs locally. No account needed to start. Pick your exact setup below.

Detect
Reads your components and tokens into one manifest, and sees what is in the code but not in the system.
Decide
Anything ungoverned gets a decision: adopt it, allow a one-off, or reject it. Recorded, so it sticks.
Enforce
A CI gate blocks drift. A Claude Code skill and an MCP server keep humans and AI on system by default.

Get started

Find your setup. Copy it. Paste it into your agent.

Each block is a prompt for your AI agent (Claude Code, Cursor). It runs the commands and asks you the questions. Or run the commands yourself.

01

Start a design system in this repo

This repo is (or will be) your source of truth, and other repos should follow it.

Set up ChoiceUI in this repo and make it our shared design system.

1. Run `npx @jlist/choiceui login`, then `npx @jlist/choiceui init`. Init extracts our Tailwind tokens and components into choiceui.manifest.json and links a cloud project.
2. Run `npx @jlist/choiceui publish` to publish this repo as the design system other repos follow.
3. Run `npx @jlist/choiceui guard` to generate the enforcement kit (CI gate, ESLint, a Claude Code skill, CLAUDE.md, MCP), and commit it.

Report the system ID that publish prints, so I can connect our other repos.
Or run the commands yourself
$ npx @jlist/choiceui login
$ npx @jlist/choiceui init
$ npx @jlist/choiceui publish
$ npx @jlist/choiceui guard
02

Connect this repo to your shared system

Another repo owns the design system, and this repo should follow it.

Connect this repo to our shared ChoiceUI design system.

1. Run `npx @jlist/choiceui login`.
2. Run `npx @jlist/choiceui link --system <SYSTEM_ID>` to follow our system, then `npx @jlist/choiceui pull` to fetch it.
3. Run `npx @jlist/choiceui doctor` to check this repo against the system.

Replace <SYSTEM_ID> with our design system's ID (from the owner repo's publish output, or the ChoiceUI dashboard).
Or run the commands yourself
$ npx @jlist/choiceui login
$ npx @jlist/choiceui link --system <SYSTEM_ID>
$ npx @jlist/choiceui pull
$ npx @jlist/choiceui doctor
03

Set up an empty design-system repo

You made a repo to be the design system, but there is nothing in it yet.

This repo is meant to be our design system but is empty. Set it up and ask me for direction.

1. Run `npx @jlist/choiceui init --scaffold` to lay down the structure.
2. Run `npx @jlist/choiceui direction --json` to see what ChoiceUI needs from me (brand colors, fonts, first components).
3. Ask me each question, then apply my answers with `npx @jlist/choiceui direction --set <id>=<value>` (for example `--set brand.primary=#227C9D`).
Or run the commands yourself
$ npx @jlist/choiceui init --scaffold
$ npx @jlist/choiceui direction --json
$ npx @jlist/choiceui direction --set brand.primary=#227C9D
04

Clean up a messy repo

The UI is a mess: several buttons, a few fonts, lots of near-identical greys.

Our UI is inconsistent. Help me turn it into one coherent design system.

1. Run `npx @jlist/choiceui init`.
2. Run `npx @jlist/choiceui canonicalize --json` to find the competing components, fonts, and near-duplicate colors.
3. Show me each conflict and ask which one is canonical, then record my choices with `npx @jlist/choiceui canonicalize --set <id>=<value>`. The ones I pick become the system, the rest become drift.
Or run the commands yourself
$ npx @jlist/choiceui init
$ npx @jlist/choiceui canonicalize --json
$ npx @jlist/choiceui canonicalize --set canonical.component.Button=src/components/ui/button.tsx
05

Govern an existing design system

You already have a solid design system here. You just want to enforce it.

We already have a design system in this repo. Set up ChoiceUI to govern it.

1. Run `npx @jlist/choiceui init` to capture our tokens and components into a manifest.
2. Run `npx @jlist/choiceui guard` to generate the enforcement kit (CI gate, ESLint, a Claude Code skill, CLAUDE.md, MCP).
3. Run `npx @jlist/choiceui doctor` to show where the code is off-system, and commit the enforcement kit so CI blocks drift from here on.
Or run the commands yourself
$ npx @jlist/choiceui init
$ npx @jlist/choiceui guard
$ npx @jlist/choiceui doctor

Everything runs in your repo. Only publishing and the dashboard need an account. See a live design system →