en un clic
bryllen-new
Create a new design project and start designing
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
Create a new design project and start designing
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
Start (or restart) the Bryllen dev server
Fast headless browser for QA testing and site dogfooding. Navigate any URL, interact with elements, verify page state, diff before/after actions, take annotated screenshots, check responsive layouts, test forms and uploads, handle dialogs, and assert element states. ~100ms per command. Use when you need to test a feature, verify a deployment, dogfood a user flow, or file a bug with evidence.
CEO/founder-mode plan review. Rethink the problem, find the 10-star product, challenge premises, expand scope when it creates a better product. Three modes: SCOPE EXPANSION (dream big), HOLD SCOPE (maximum rigor), SCOPE REDUCTION (strip to essentials).
Eng manager-mode plan review. Lock in the execution plan — architecture, data flow, diagrams, edge cases, test coverage, performance. Walks through issues interactively with opinionated recommendations.
Systematically QA test a web application and fix bugs found. Runs QA testing, then iteratively fixes bugs in source code, committing each fix atomically and re-verifying. Use when asked to "qa", "QA", "test this site", "find bugs", "test and fix", or "fix what's broken". Three tiers: Quick (critical/high only), Standard (+ medium), Exhaustive (+ cosmetic). Produces before/after health scores, fix evidence, and a ship-readiness summary. For report-only mode, use /qa-only.
Weekly engineering retrospective. Analyzes commit history, work patterns, and code quality metrics with persistent history and trend tracking. Team-aware: breaks down per-person contributions with praise and growth areas.
| name | bryllen-new |
| description | Create a new design project and start designing |
Create a new design project inside Bryllen and launch the dev environment.
Parse the command. The format is /bryllen-new <project-name> [description].
Initialize git — check for a .git directory in the current folder.
git initCreate .gitignore — check if .gitignore exists.
node_modules
dist
.DS_Store
*.local
.bryllen
Check if bryllen is installed. Look for package.json in the current directory.
package.json: run npm init -y && npm install github:madebynoam/bryllenpackage.json exists but no bryllen dependency: run npm install github:madebynoam/bryllenIf npm install fails, stop immediately and tell the user what went wrong. Do not proceed to step 5.
Scaffold the project. Run:
npx bryllen new
This creates index.html, vite.config.ts, src/App.tsx, src/main.tsx, CLAUDE.md (project rules), .claude/settings.json (frozen guard hook), tsconfigs, and installs peer dependencies. Files that already exist are skipped.
Create the project folder structure:
src/projects/<project-name>/
v1/
tokens.css ← OKLCH custom properties (.iter-v1 + :root scope)
components/
index.ts ← barrel export — add every new component here when you create it
pages/ ← empty initially
context/ ← inspiration images (designer pastes via Cmd+V)
manifest.ts
CHANGELOG.md
Initial commit: Create a git commit with the scaffolded project:
git add . && git commit -m 'feat: init <project-name> project'
This captures the scaffold. A second commit will follow after the design is generated in the 'What happens next' sequence.
Launch the dev server:
npx bryllen design
This starts both Vite and the annotation HTTP server in one command.
Confirm: Tell the designer the canvas is ready:
"Project
<project-name>is live at http://localhost:5173"
Continue immediately with the What happens next sequence below to generate the initial design. After generating, enter watch mode automatically so the designer can annotate without running any commands.
After init, the designer describes what they want. The agent follows this exact sequence — order matters:
Check for context images — Run npx bryllen context --project <name> --iteration v1 to see if the designer pasted any inspiration images. If present, read them via the Read tool and analyze via Vision. Incorporate their style into the design directions.
GENERATE 3-5 DESIGN DIRECTIONS (MANDATORY) — This is the whole point of Bryllen. Before writing any code:
Populate tokens — Write the complete OKLCH token set in v1/tokens.css, scoped under :root, .iter-v1. Derive colors from the OKLCH palette defined in CLAUDE.md. If context images are present, extract colors from them. Every visual value (color, background, border, shadow) must be a CSS custom property. No hex values. Tokens come FIRST — the direction subagents in the next step read this file and may only use values from it.
FAN OUT DIRECTION SUBAGENTS (PARALLEL) — build the directions concurrently, one subagent each. Spawn one direction-generator agent (bundled in this plugin) per direction using the Agent tool, all in a single message so they run in parallel. Each agent is blind to its siblings — that is the point: directions stay genuinely different because they don't anchor on each other. Each prompt must include:
src/projects/<name>/) and that tokens live in v1/tokens.cssDirA), and brief — the layout/hierarchy/interaction bet from step 1 that makes it differentv1/pages/<Slug>.tsx; never touch tokens.css, manifest.ts, components/index.ts, or CHANGELOG.mdEach subagent returns its slug, page path, and component list.
Fallback — if the direction-generator agent type is unavailable, build the directions yourself sequentially, following the same file rules.
Create the utility pages yourself (main agent) — while or after the subagents run:
TokenSwatch from bryllen/runtime, typography scale, and spacing grid.Wire it up (main agent, after ALL subagents return) — export every new component from v1/components/index.ts, then update the manifest: import each direction page and add it to the components map along with the utility pages. Frames are auto-registered — the runtime detects new components and creates frame records automatically on reload. No POST /frames needed.
import './v1/tokens.css'
import { DirA } from './v1/pages/DirA'
import { DirB } from './v1/pages/DirB'
import { TokensPage } from './v1/pages/tokens'
import { ComponentsPage } from './v1/pages/components'
const manifest: ProjectManifest = {
id: '...', project: '<name>',
components: { DirA, DirB, TokensPage, ComponentsPage },
}
That's it. The canvas will auto-discover and display all components after Vite reloads.
Log to CHANGELOG.md — record the design directions and why each is different
Arm the annotation stream — use the Monitor tool with command: npx bryllen watch --stream, persistent: true (see /bryllen-design step 6; fall back to looping npx bryllen watch if Monitor is unavailable). This is critical — the designer should be able to click and annotate immediately without running any commands.
The full token system, design language, component hierarchy, and guard protocol are defined in CLAUDE.md — those rules apply to every file the agent creates.
The agent MUST follow the three-layer hierarchy:
Tokens (v1/tokens.css) → CSS custom properties, all visual values
↓
Components (v1/components/) → building blocks, use ONLY tokens
↓
Pages (v1/pages/) → compositions, import ONLY from ../components/
If a page needs a button, create Button.tsx in components/ FIRST, then import it in the page. Never inline styled HTML in page files.
This is the whole point of Bryllen — the code IS the design. Every component must work:
No static mockups. If it looks like it should do something, it does.
If a component has internal navigation (tabs, sidebar nav, segmented sections), handle it with React state inside one component. Do not split navigable sections into separate frames.
The matrix model (variations × states as separate frames) is for isolated component states. For a dashboard with sidebar nav, build one interactive component that actually swaps content on click — don't create separate frames for each nav section. That produces static snapshots where nothing is clickable, which defeats the purpose.
Rule: If a page has internal navigation, the navigation must work. Use useState to track the active section and render the correct content. One frame, one component, full interactivity.
The manifest only maps component keys to React components. Frames are auto-registered — the runtime detects new components and creates DB records automatically on reload. No manual POST needed.
import type { ProjectManifest } from 'bryllen/runtime'
import './v1/tokens.css'
import { TokensPage } from './v1/pages/tokens'
import { ComponentsPage } from './v1/pages/components'
import { DirA } from './v1/pages/DirA'
import { DirB } from './v1/pages/DirB'
const manifest: ProjectManifest = {
id: '<uuid>',
project: '<project-name>',
components: {
TokensPage,
ComponentsPage,
DirA,
DirB,
},
}
export default manifest
That's it. Add a component to manifest.components → Vite reloads → runtime auto-creates the DB frame record → frame appears on canvas in a grid layout.
For fine-tuned control (custom title, specific width, sort order), you can optionally use POST /frames:
curl -X POST http://localhost:4748/frames -H 'Content-Type: application/json' \
-d '{"project":"<name>","id":"dir-a","title":"Direction A","componentKey":"DirA","width":1440,"height":900}'
If the designer wants motion, create v1/spring.ts with golden ratio spring physics:
import { useRef, useEffect, useCallback } from 'react'
export const PHI = (1 + Math.sqrt(5)) / 2
export const SPRING = {
snappy: { tension: 233, friction: 19 },
gentle: { tension: 144, friction: 15 },
soft: { tension: 89, friction: 12 },
}
// ... useSpring hook (fixed-timestep 120Hz physics)
Components import spring as import { SPRING, useSpring } from '../spring'.
<component>-<variation>-<state>Component / Variation / State