Get started

Three commands. The first one costs nothing and tells you where you stand - free, offline, no account.

See where you stand

$ npx synthesisui@latest doctor

Reads your repo locally and names every hand-written value your own system already has a token for. The number it prints is the pitch.

Bring a system

$ npx synthesisui@latest init --ds <slug>

Pick one from the gallery or birth your own - it arrives as files you own: tokens, typed components, and the GUIDE your agent reads first. Already have a system? `npx synthesisui adopt` describes yours instead of replacing it.

Turn on the loop

$ npx synthesisui@latest connect

Installs the check that runs by itself at the end of every agent turn, plus the project tools it can query. Restart your agent session after the first connect - hooks are read at startup.

Update

$ npx synthesisui@latest upgrade <slug>

Writes an UPGRADE.md with exactly what changed. Nothing is overwritten silently.

Built for Claude Code first - the check runs itself at the end of every turn. The contract and the doctor run anywhere: any agent, any editor, any CI.

Coming from somewhere? Pick your door

From shadcn/ui

npx synthesisui@latest loginnpx synthesisui@latest init --styles tailwind --ds <slug>npx synthesisui@latest connect

Log in first - private systems ride your account. Nothing of ours lands in your CSS: ask your agent for a component and it arrives speaking the names your own code declares.

From the project you have

npx synthesisui@latest import --drynpx synthesisui@latest loginnpx synthesisui@latest import

Reads the colors, radii, spacing and fonts you already wrote and hands back a v1 that mirrors them - your family names unchanged. --dry writes the census to disk and sends nothing, so you read the payload first.

From Figma

soon

The Figma reading is on the roadmap - the file's decisions arriving as a governed contract.

In a monorepo: one system, many consumers

Reading a workspace root averages every app in it, and a light app and a dark one average into a palette that is neither. The system comes from wherever your vocabulary is centralised; each app is measured against it.

npx synthesisui@latest import --dir packages/uinpx synthesisui@latest doctor apps/web-dashboardnpx synthesisui@latest doctor apps/web-review

Each app gets its own number against the same contract. A path scopes what is measured, never what counts as named.

Read the CLI reference · How governance works · Browse the gallery