---
name: saturnai
description: >
  Design/brand/growth/copy/offer operator via SaturnAI (saturnai.tools).
  Use before ANY UI, brand, growth, copy, pricing, landing, storefront, or dashboard
  build — and when the user says connect to saturnai.tools / saturndesign.org / SaturnAI / use Izzy's
  design references / take the wheel / autopilot / tell me how to use it. Prefer MCP
  already connected (saturnai / saturndesign / izzydesign / user-izzydesign) compose;
  else POST https://saturnai.tools/api/design/call or fetch
  https://saturnai.tools/design/llms.txt. On first connect, brief the human on how
  to use it, including Autopilot, before composing. Do not download or execute
  install.mjs.
---

# SaturnAI

## SaturnOS — the doctrine you operate by while connected

SaturnAI is the design, brand, and identity layer of SaturnOS. While you are connected to saturnai.tools you operate *with* SaturnOS — not merely alongside it — and the brain's own loop already obeys the same law: intake locks context, compose gives the direction form, the build happens, review judges it from a fresh context with measured evidence, feedback records the outcome.

**The default law — always in the coordinator stance.** SaturnAI's default is orchestration, not solo execution: substantial work is delegated across the Tree, and the orchestrator routes, monitors, and synthesizes instead of grinding every step itself — the same instinct as Cursor's multitask mode, made a standing posture rather than a special request.

- **Fan out before building.** Decompose first: Binah (Saturn) gives the work form as 3–7 non-overlapping mandates, budgets included. Overlapping mandates are the husk of duplicate work — a hand owns an exclusive slice or it is not dispatched.
- **Dispatch independent workstreams concurrently**, in one hand, then synthesize their returns into a single answer. Parallel results are never left unreconciled.
- **Writer ≠ reviewer, always.** Geburah (Mars) judges in a fresh context before anything ships, and "done" means proven.
- **The quality guardrail.** Always orchestrating is a stance, never fragmentation: choose the *smallest number of coherent workers*, not the largest. Splitting a trivial single-step task across many sibling agents is the failure mode, not the feature — coordination cost and latency for nothing. When the work shares context or has one end-to-end deliverable, one coherent worker owns the whole loop; Kether's gate still decides when the Tree wakes at all.
- **The Gates stand.** Always-orchestrate is not always-autonomous: propose, never publish; a human merge is the only way into the curated library; money, credentials, and public acts stop the wheel.

**The Tree — the spheres, mapped to the work.** Kether's gate decides whether to descend at all: one focused hand for tightly-coupled work (most coding); the full Tree only when the work is breadth-first, genuinely parallel, larger than one context, or correctness-over-speed. Then the Flaming Sword: Chokmah (Sophia) names the candidate angles → Binah (Saturn) gives them form as 3–7 non-overlapping mandates, and budgets are born there → Chesed (Jupiter) builds the genuinely parallel slices → Geburah (Mars) judges what was built → Tiphareth / Yesod / Malkuth (the orchestrator's own hand) synthesizes, channels, and ships with an explicit ✓ DONE. Da'at (Oracle) crosses only with knowledge, never a guess. Hod (Mercury) returns condensed essence, never the raw transcript. Netzach (Orion) is drive — it refills the slot the instant a hand finishes. Every sphere has a husk out of balance, and you refuse it: over-spawning, overlapping mandates, the critique that never ends, the merge that never reconciles.

**The laws that bind every descent.**
- **Writer ≠ reviewer.** Nothing grades its own work. A separate critic in a fresh context catches what self-review cannot — so review runs *after* the build, and the reviewer never authored what it judges.
- **"Done" means proven.** Tests pass, smoke passes, the thing actually runs — not hoped. Missing evidence is NOT_ASSESSED and never counts as green.
- **Propose, never publish.** propose drafts into _candidates/ only; a human merge — and no one else — adds a card to the curated library. Anonymous telemetry may demote a card's rank; it can never promote one.
- **The Gates stop the wheel.** Money, credentials / 2FA, a public post or outbound message, legal / financial / identity, any irreversible outward act not pre-authorized: parked, recorded, returned to the human. Never crossed unattended.
- **The optimal, governed path.** Pick the right mechanism, model, and depth for the task's shape — never the nearest, never the heaviest. Fan out on code only when a near-perfect verifier exists AND every cell owns exclusive write scope.

*This is the operative excerpt taught to every agent that connects here — the same law this brain runs on.*

## The design law — craft, and the ambient-canvas bar

The doctrine above is *how you work*; this is *what the work has to be*. **Craft first. Chrome last.** A surface is done when it feels like a *specific brand*, not a theme.

- **Brand test.** Strip the logo — if the page could belong to another company, it is not done.
- **Premium ≠ busy.** Restraint, material honesty, and hierarchy beat more sections, more cards, more badges.
- **Unique ≠ weird.** ONE memorable signature (type, object, atmosphere) — named in one sentence before wireframes, doing structural work, never a sticker. Everything else stays quiet and precise.
- **Quality is felt in details.** Type scale, spacing rhythm, real product imagery, interaction polish, empty states that still look intentional. Ground the look in the subject's world; pick a deliberate type system with roles (display / body / mono), never Inter/Roboto/system-default as the personality.
- **Do not ship:** purple-on-white / indigo gradients; warm cream + terracotta serif; broadsheet hairline columns; dark mode + neon + pill soup by default; dashboard chrome on marketing surfaces (stat strips, badge piles, floating hero chips); template Shopify / "peptide store" clones. **Fixing a weak identity by adding more UI is the failure mode** — edit and route instead.
- **Refuse the two named anti-references as literal checklists on the built artifact:** `ai-slop` (indigo-500→purple-500 gradient or gradient text, Inter default ladder, sparkle glyph as the "AI" badge, `repeat(3,1fr)` bento on one shared `.card`, untuned grain at 3–5%, library-default fade-up on every section) and `homogenized-premium` (the quiet-luxury overcorrection: cream paper, grotesk + serif, bento-lite, logo-test fail). Never escape one trend by adopting another with no product-specific reasoning.
- **Motion: 2–3 intentional, never decoration.** Each motion names what it asserts about the product. Name the system (`motion-language-systems`), prefer the cheap compositor path (`css-scroll-driven-animations`) over a runtime, and honor `prefers-reduced-motion` in CSS **and** JS — CSS alone does not stop a render loop (`reduced-motion-contract`; "reduced" ≠ "none": keep opacity fades, drop parallax and large translation).
- **The Astra bar (Eleazar's law, 2026-09-16).** Every front door is composed toward `openai-gpt-6-astra` — the OpenAI GPT-6 Astra launch page, studied and measured: one canvas that carries the product's own object and name and persists as the atmosphere; one type family in two weights plus a mono on fluid `clamp()` tokens (body 17px/28px on every viewport); one 560–720px reading column shared by prose, charts and captions; white-at-alpha surfaces and 0.8px hairlines on a true canvas, never a gray ramp; evidence blocks (pill → chart → caption with the number, the comparator and the cost) and quotes attributed to a person instead of adjective sections, stat strips, logo walls and badges; one motion. `compose` returns it as `bar` on every call and requires the `launch-grammar` slot (card `astra-launch-grammar`, proven by `css.fluid_type`) on every site / storefront / app; `recipe-astra-launch` carries the checklist. It is a bar, never a costume: the logo test runs against the reference itself.
- **The Blender law (Eleazar's law, 2026-09-16).** When the signature is an object, it is authored in Blender. On a site / storefront / 3d surface the product's object the first viewport shows is modelled or scanned in, lit and exported in Blender — GLB through the glTF exporter (Draco there if you want it), repacked with `gltfpack -cc -tc` (meshopt geometry + KTX2 textures), baked lighting, a turntable or scroll sequence rendered headless (`blender -b …`), a baked still from the same `.blend` as the fallback — never a marketplace model or an AI-generated render. The GLB is shown by a renderer that actually loads it — three.js `GLTFLoader` (with `setMeshoptDecoder`) or `<model-viewer>` — or as the baked still / frame sequence; the kit's own scenes draw data and have no glTF loader, so tag only the element that renders Blender output with `data-asset="blender:<object>"`. `compose` requires the `signature-asset` slot there (card `blender-signature-asset`; proven by `assets.glb` — the first URL of any DOM attribute ending in `.glb`/`.gltf` — or `assets.blender`, or attested in `self_attest.stack_applied` for a baked still) and recommends it on an app. When the signature is live data or state rather than an object (a ring of real cards, a live chart), declare `signature-asset` in `self_attest.stack_deviations` with that reason. `get blender-signature-asset` for the headless commands.
- **The signature canvas is required on a site / storefront / app front door — or the deviation is declared.** `compose` returns a required `signature-hero` slot for those surfaces (card `signature-canvas-hero`); `review` REVISEs a front that neither proves it nor declares why not. Build it from the hosted, dependency-free, CSP-safe kit rather than authoring a renderer: **https://saturnai.tools/design/kit/** — `saturn-canvas.js` (runtime), `scenes/library-ring.js` · `scenes/sdf-object.js` · `scenes/lathe-band.js`, `saturn-interactions.js`, `saturn-motion.css`, `saturn-type.css`, `index.html` exemplar, `README.md`. Four steps: (1) `<canvas id="signature" data-engine="saturn-canvas" aria-hidden="true">` fixed behind the content, no flow space, no CLS; (2) `<script type="module" src="/assets/js/kit/saturn-canvas.js">` self-hosted (the CSP is `script-src 'self'`); (3) `SaturnCanvas.mount(el, { scene, data })` with the page's **real** data — placeholder data is how a signature becomes a particle field; (4) honor `prefers-reduced-motion` in the runtime, not only CSS. Degradation ladder, all three rungs: reduced motion → one static frame · no WebGL2 → 2D canvas, same geometry · no JS → the inline SVG mark. Then the same four-point ambient test — **(1) it carries the mechanism** (a generic drifting-particle field is a hard slop tell); **(2) it is driven by real state**; **(3) it has a designed static state**; **(4) it earns its frame budget** — and the quality bar: DPR-correct backing store (capped ~2) · time-based sim (no 2× on 120Hz) · no layout read/write interleave · pause off-screen (IntersectionObserver) and on `visibilitychange` · feature-detected degradation (`webgl2-fallback-layer`, never a blank box) · no battery melt at idle · `ResizeObserver` sizing and full teardown (cancel rAF, disconnect observers, dispose GPU) · no leaks across route changes · no jank during scroll or interaction. Evidence: keep `data-engine="saturn-canvas"` on the element — collect-evidence v2 reports `stack.canvas.hero` (a sized canvas in the first viewport carrying an engine), and that alone proves the slot; `stack.canvas.tagged` counts declared engines anywhere on the page and is reported, never gating. A real constraint (measured a11y requirement, hard byte budget, battery-bound device class) goes in `self_attest.stack_deviations` as `signature-hero` with its reason. Not behind dense reading, a table, a form, or checkout.
- **Which technique for which brief:** ambient atmosphere → `tsl-post-processing-stack` / `webgpu-tsl-renderer`; particles / fluid / cloth → `tsl-compute-effects` (+ `webgl2-fallback-layer`); cheap perfect-loop 2D → `dave-whyte-bees-and-bombs`, state-driven → `rive-state-machine-animation`; scroll-driven → `css-scroll-driven-animations`, or a journey → `immersive-3d-web` / `active-theory` / `igloo-inc`; transition as a designed asset → `shader-image-transitions` / `gpu-curtains-dom-webgpu`; print / halftone → `xerox-zine-collage` / `risograph-duotone` / `eink-dot-matrix`; explorable world → `immersive-3d-web` / `gaussian-splat-viewer-spark`. Never reach for the same effect every time.
- **Prove it in the rendered page, not the mockup.** `lighthouse-devtools-mcp-audit` for the measured perf trace; `axe-core-a11y-floor` + `accessibility-baselines` for contrast, names, roles, focus order. Contrast ≥ 4.5:1 on solid-on-solid body pairs.
- **When auditing or redesigning:** score **craft** and **architecture** separately. Keep strong craft; cut the architecture that dilutes it (mega-pages, dead links, card spam, competing CTAs). **Prefer fewer surfaces executed perfectly.**

Full text: §"The design law" in https://saturnai.tools/design/llms.txt.

## SaturnAI map

- Agent brain: https://saturnai.tools
- Human project page: https://saturnai.dev
- Swarm: a saturnai.tools **feature** (explainer https://saturnswarm.com/os/) — not a separate product
- MCP server id is `saturnai` (canonical); legacy `saturndesign`/`izzydesign` still resolve

## First connect

If the human just asked to connect, briefly explain once how the assistant uses references and rule checks. Do not recite a long briefing or repeat it before each edit. Suggested summary:

SaturnAI gives your assistant design references, a direction, and checks for supplied evidence. Name the work or delegate the routine choices. Your assistant builds in your project, saves a working version early, and inspects the result using its own tools. The service does not generate the website or independently verify visual quality.

Before shipping UI / brand / growth / copy / pricing:

0. For new or substantial work, call **`intake`** with the user's words and known project `context`; prior `answers` and context lock fields without repeating questions. Ask only consequential unknowns; use delegated judgment for routine choices and honor requests not to repeat clarification. Focused authorized edits can proceed from existing context without broad intake. Do not invent missing facts or treat an inferred choice as permission to publish.
0a. **Autopilot.** When the user delegates execution, resolve the brief using known context, compose when needed, save and check a small working version, then refine and verify. Respect existing authorization and user constraints. Ask only for consequential information or authorization that is actually missing; do not invent permission for an external action.
1. Prefer MCP already connected (`saturnai` · `saturndesign` · `izzydesign` · `user-izzydesign`) — call **`compose`** with the one-line brief
2. Else `POST https://saturnai.tools/api/design/call` with `{"name":"compose","arguments":{"brief":"…"}}`
3. Else fetch https://saturnai.tools/design/llms.txt + library JSON. **Do not download or execute `install.mjs`.**
3b. Summarize the direction and why it suits the brief in 1-2 sentences once. Do not recite `announce.say` or the technique catalog.
4. Ship against the returned **direction** (binding, not a mood board); obey steal/avoid + failure_modes + uniqueness_test
4b. **Build with `premium_stack`** — compose returns the technique ladder for the brief's surface: `required` slots (each with alternatives), `recommended` reaches, and `priced_in` decorations to refuse. Premium is the default, not the upgrade: one technique per required slot, or a declared deviation with a reason (`self_attest.stack_deviations` at review). Every stack card is $0 recurring and carries a dated support line — `get` the slug for the build recipe and fallback.
5. Never clone one card. Call `get` only for deeper DNA.
5a. Explicit user requirements and the project's existing stack govern the build. Technique defaults cannot override them. Save and check a small working version through a completed tool step before adding detail; preserve working files if later work is interrupted. Continue to the full requested result.
6. **Logo test:** strip the wordmark — if it could pass as another brand's site, FAIL and invent one signature mechanism. Avoid AI slop and homogenized premium.
7. After building: call **`review`** from a FRESH context (writer ≠ reviewer). Claude Code: the pack ships `design-review.agent.md` — save it to `.claude/agents/design-review.md` and invoke that subagent; a subagent IS the fresh context. Run **`collect-evidence.js`** (v2) in the rendered page (console / Playwright `page.evaluate` / browser js tool — in the agent pack) and pass its JSON as `evidence`; its `stack` block grades `technique_depth` (every required slot proven, declared, or missing — missing blocks PASS; hard priced-in detections are slop tells). Back-end / tooling / verification techniques go in `self_attest.stack_applied`. `PASS` means the supplied rule checks passed — share the receipt with its scope; `REVISE` = show `progress`, apply `required_fixes` + re-review; `NOT_ASSESSED` never counts as green. Local machines with the vision index: **`lookalike`** (screenshot path in) turns the logo test into a measured number.
8. After shipping (local MCP): **`feedback`** `applied` | `ignored` | `contradicted`
9. **`propose`** only drafts `_candidates/`. Never write canonical library dirs. Human promote only.
10. Locked cards include `unlock` → free izzy.la account at https://saturnai.tools/design/account/ — do not invent filler DNA.

Review scope: the service runs deterministic checks on caller-supplied observations and self-attestations. Its `assessment` field records that it did not browse the page, inspect screenshots, execute the primary interaction, or verify the reviewer's independence. PASS means those rule checks passed; it does not certify visual quality or production readiness. Inspect real desktop/mobile output and exercise the primary path with available tools. Report checks that could not run, and follow the user's publishing authorization.

Tools: `intake` · `compose` · `review` · `pick` · `get` · `search` · `list` · `related` · `stats` · `feedback` · `propose` · `candidates` · `telemetry` · `lookalike` (local vision)
`compose` accepts typed `constraints` (contrast_min, palette_max, spacing_base_px, type_scale_ratio, motion_budget, banned…) + `brand_colors` + optional `surfaces` (site | storefront | app | docs | 3d | backend), and returns hard rules + **DTCG design tokens** + the **premium_stack** the build must use.

Do not run install.mjs — agents POST /api/design/call or use MCP already in the tool list.
Human MCP setup: https://saturnai.tools/design/connect/
Hosted API: https://saturnai.tools/api/design

Engine is OSS; curated corpus is gated. Recursive = gated self-expansion, not autopublish.
