The design stack for product designers / v4.3.0 / MIT

Design is the quality gate.

A dev has a lockfile, a linter, CI. A designer has a design file — Figma, Penpot, Framer — and their memory. PDS Stack versions that memory — design system, references, and every direction you have judged — and reads it before anything is produced. The memory lives in files. The conversation is disposable.

See how it works →
→ Start here

New here?
Read the docs.

Everything about the workflow, the agents and the constraints lives in the documentation — with a five-minute Get Started that takes you from install to your first shipped feature.

01 The inversion

The designer's creative judgment is the system's quality gate — not one input among many.

Conventional AI dev
  1. Prompt
  2. Generate
  3. Ship
  4. Design review (if there's time)

Taste arrives last. Rework is the norm.

PDS Stack
  1. Direction
  2. Approve the brief
  3. Build to spec
  4. Score & learn

Taste leads. Code is the execution.

i.

Direction before execution

A direction brief — visual direction, three defining words, constraints, references — is explicitly approved before the scope is frozen and before anything is generated.

ii.

Scope is sacred

Scope freezes the moment a spec hits VALIDATED. Additions require a fresh RAY cycle. No silent creep, no moving targets.

iii.

System memory

ANALYZER writes a learning after every verdict. RAY reads the three most recent before the next spec — improvements compound.

02 The crew — one conductor, five agents

A small studio
that never sleeps.

03 The cycle

One command. Four phases. Each in its own session.

/pds asks the lane first — Sketch by default — then drives the cycle and stops at every gate for your decision. It never crosses one for you.

  1. DIRECTION gate ① 01 · /bob --brief

    Commit to a direction

    Read the memory first — a direction already refused is not reproposed. Five dimensions, approved as text, before anything is made.

    → direction brief
  2. CADRE gate ② 02 · /ray

    Frame the scope

    Written after the direction and against it, cut into lots of about 50 turns. Frozen at VALIDATED. Skipped in Sketch.

    → spec · lots · out of scope
  3. PRODUIRE 03 · /bob --proto

    Make it

    A clickable HTML prototype first, in every lane. Then Figma, then code if the module is on — a fresh bob-build per lot.

    → prototype · frame · code
  4. JUGER gate ③ 04 · /analyzer

    Two verdicts

    Conformance is a /20 the system computes. Direction is yours, binary. Never averaged — then the verdict is written to memory/.

    → verdicts + memory
  1. session 0 · cadrer
  2. project_<name>.md
  3. session 1
  4. state_<feature>.md
  5. session 2
  6. /pds reprendre
  7. session 3
  8. /pds reprendre
  9. session 4

Session 0 gathers the project once and hands you a dispatch plan — one session per agent, a prompt to paste for each. Every gate then writes the state to a file and the conversation ends. Too long? Relay, don't fork: a fork carries the whole history.

↻ every judgment writes to the memory the next direction reads · EVE (research) and handoff are optional and never gate

04 The contract

The direction brief is a creative contract.

Before BOB writes anything, the direction is set in writing — and approved. It's the difference between hoping the output has taste and guaranteeing it.

Read the spec on GitHub →
direction-brief.md awaiting approval
Type
Aesthetic
Direction
Editorial, restrained, confident
3 defining words
Sharp · Quiet · Deliberate
Typography
Grotesk display / mono labels
Palette
Out of scope
Decoration for its own sake
05 The guardrails

A gate that only lives in a prompt holds until someone is in a hurry.

i.

The spec gate is enforced

A commit touching product code needs a Ref to a spec, and that spec has to be VALIDATED. Code without a frozen scope doesn't reach the branch — it goes back to RAY.

ii.

Constraints are checked, not hoped for

No any, no @ts-ignore, components under the line cap, a clean compile. Thresholds come from your own STACK.md, and the checks judge only the files you're committing.

iii.

Criteria are proven, not believed

Every acceptance criterion a machine can decide carries one assertion that BOB runs. Proven, unproven, or failed — "believed OK" is how defects slip through, so it isn't an option.

These are checked by running the stack on itself, and the failures are published alongside the passes — run 6 scored ~87/100 and found eight problems. 4.1 fixed the blocker and the three majors, each with its own targeted test. Read the self-test →

06 What you gain

Less rework.
More of the work that matters.

Rework isn't just wasted hours — it's wasted processing time and burned tokens. Every gate below exists to catch the wrong direction in text, before it becomes a generation you have to throw away. Before anything is built, RAY sizes the request into one of three tiers — so the numbers below are what shipping actually takes, start to finish, not a guess.

Time to ship, by tier

0 Tier 1 A small, isolated change — one component, one interaction, or a config tweak.
0 Tier 2 A standard feature with a full user flow — several screens or states working together.
0 Tier 3 A complex feature — new architecture, multiple stories, changes that touch several parts of the app.
0+/20 Conformance gate The minimum conformance score ANALYZER must give — and it's only one of two verdicts a feature needs.
ANALYZER scorecard /20
  • Spec conformance5
  • UX & design system5
  • Technical quality5
  • CX5
Conformance ladder
  1. 18–20Conforme
  2. 14–17Réserves — minor corrections
  3. 10–13Non conforme → back to BOB
  4. < 10Non conforme (critique) → back to RAY

Two verdicts gate the commit, never averaged. The score above is mechanical. The direction verdict is binary — retenue / refusée — and only the designer renders it. A delivery can score 20/20 and still be refused, as P-001 cycle 1 was. Only conformance ≥ 18 and direction retenue commits.

07 What it costs

Same project.
Half the bill.

The model isn't the bill — time is. Everything that enters a conversation is paid again on every turn after it. So the stack keeps every conversation short: one phase, one session, and the state lives in a file.

Obsolet Graphic Generator — measured, priced at API list
One long chatSept. 14 · 59.8M tokens read
With the stackSept. 28 · 18.6M tokens read
0 turns, main conversation down from 238 in the long chat.
0 largest context down from 365k — and it ran on Opus, where the chat ran on Sonnet.
0 image read down from 47. Every screenshot is paid again on every turn.

Not the exact same work: the chat built the tool, the stack reworked it. API list price, September 2026 — on a subscription, read it as usage allowance. The full cost breakdown →

Five minutes. Nine questions.

Put taste
back in charge.

Generates STACK.md · CLAUDE.md · agent-system/ · the ANALYZER scoring framework · /pds and the agent commands for the tools you pick — Claude Code, Cursor, Gemini CLI, Copilot, Codex — and the git guardrails