sailor-studio · git:20260929.027e9f2 · 2026-09-29 · sha256 fb976132210dd603

sailor-studio git:20260929.027e9f2A

Immutable. This exact content never changes and is served at /api/v1/blob/fb976132210dd603.

---
name: sailor-studio
description: Set a Sailor project's whole look — design language, brand colour, neutrals, radius, density, fonts, mode, logo tint — as one preset, show it to the person in Sailor Studio for approval, then pull it onto the project or start a new one with it. Use when asked to change the theme, brand, colours, fonts or overall look of a Sailor app, to "make it look like Linear / Vercel / Stripe", or to start a new Sailor project with a particular look. Not for editing individual components.
---

# Sailor Studio, from the agent

A Sailor project's look is **one preset**: a base design language plus a few
knobs. You write the preset; the person reviews it in the browser; then you
pull it. Never hand-edit `packages/design/tokens` to change the look — the
preset is the one input, and `nebutra studio pull` rebuilds everything from it.

## 1. Know what a preset may contain

```bash
nebutra studio schema          # JSON Schema; also served at <site>/studio/preset.schema.json
```

Only `base` is required. Omitted knobs keep the base's own value. Choose from
the listed values only — the CLI rejects anything else and names the field.

```json
{ "base": "linear", "brandColor": "#2e65ee", "radius": "lg", "sans": "Geist" }
```

Bases: `factory` (the House tokens), `linear`, `vercel`, `stripe`, `notion`,
`raycast`, `gsap`, `vanta`, `cosmos`. Start from the one closest to what the
person described, then change as few knobs as get there.

`tintLogo` stays off unless the person asks for a coloured logo: a language's
brand colour (Linear's lime) belongs to its own mark, not to their product.

## 2. Show it — always, before pulling

```bash
nebutra studio preview '<preset json>' --json
```

It returns `reviewUrl`, `code`, `apply` and `create`. Send the person the
`reviewUrl` and say what you chose and why, in one or two lines. Studio opens
on the look with a banner saying their agent proposed it; they can adjust it
there, and save it to their account if they want to keep it. You never save
for them — `nebutra studio list` / `pull --latest` read what they saved.

Wait for them. They answer "looks good" or paste back a `nebutra studio pull
<code>` command — if they adjusted the look in Studio, that command carries
their version, so use the code they paste, not yours.

## 3. Pull it

Existing Sailor project (run at its root):

```bash
nebutra studio pull <code>     # writes packages/design/tokens/project/preset and rebuilds the tokens
```

New project:

```bash
npx create-sailor@latest my-app --preset <code>
```

`--only theme` or `--only fonts` on `pull` changes one group and keeps the rest.

## MCP

The same three steps exist as tools on the `nebutra mcp` server:
`studio_preset_schema`, `studio_preview` (returns `reviewUrl`), and
`studio_pull` (writes the preset; then run `pnpm --filter @nebutra/tokens build`).

## Don't

- Pull without showing the review link first.
- Edit `packages/design/tokens/project/brand.json` by hand — it overrides every preset.
- Invent knob values, fonts or bases that the schema does not list.