The Design Agent
Call design.validate to get a Blueprint Readiness Score (0–100, grade A–F) on a real frontend artefact. The Design Agent reviews your component, screen, or flow against the 8 laws of the Experience Design Blueprint, returns a per-law verdict with cited evidence and a fix, and grades it on the same severity-weighted scorer architect.validate uses. Pro and Teams plans only.
Pro and Teams members. The Design Agent is the Blueprint's surface-craft review lens. It reads the full artefact source verbatim under a strict no-training policy, treats any instruction-shaped text inside the markup as inert untrusted data, and supports private_session=true to skip the stored run (operational security and cost logs are kept per the Privacy Policy). Non-visual code (backend, config, type aliases) is marked not_applicable, not failed. Submit the actual UI surface.
What you get back
Every run returns four things, in the same ValidationResponse shape architect.validate uses:
surface_classificationui_surface or non_ui, non-visual code is marked not_applicable rather than failed, so submitting a backend handler never produces a fake design grade.
per-law findingsA verdict for each of the eight laws with severity_score (0–100), severity_class, evidence cited from your actual markup, and one specific recommendation.
readinessScore, grade, and tier from the same severity-weighted scorer the architecture lens uses. The grade penalises only production_blocker findings, so a high grade means the experience floors hold, not that every pixel is perfect.
surface dimensionRuns persist to your validation-history dashboard tagged as the surface dimension, next to your architecture runs on the same project when you pass a repository.
The eight laws it scores against
The rubric is the Experience Design Blueprint: eight laws of perceptible craft, each scored with the same verdict vocabulary the architecture lens uses.
L1 · Jakob's LawHonour familiarity before invention: does the surface meet the model users bring from category-leading products?
L2 · Hick's LawReduce choice at every decision point: one clear primary action per screen.
L3 · Fitts's Law + the accessibility floorMake targets easy to acquire: every interactive target clears WCAG 2.2's 24×24 minimum. A breach here is a production_blocker.
L4 · Miller's LawRespect the limits of working memory: how many chunks must the user hold at one decision moment?
L5 · Aesthetic-Usability EffectMake it beautiful so it feels easy: the polish bar holds across empty, loading, and error states, not just the happy path.
L6 · Peak-End RuleEngineer the peak and the ending: is the completion moment designed, or does a polished flow end on a bare 'Submitted.'?
L7 · Tesler's LawPlace complexity where it belongs: the system absorbs irreducible complexity with a simple default and stays inspectable.
L8 · Mental-Model GapAlign the surface with the user's mental model: for agent-mediated surfaces, intent is previewable and every expectation-deviation is named in advance.
Accessibility is the floor
When two laws conflict, the order is fixed: accessibility first, aesthetic polish last. The validator does not average a floor breach into a friendly number. An interactive target under 24×24px, a missing focus state, or a destructive confirmation the user cannot reach is a production_blocker that caps the grade, exactly as a failed trust boundary does on the architecture lens. Polish is the most negotiable law. The floor is not negotiable at all.
How to call it
Send the full artefact source verbatim as implementation_context, the JSX, the markup, the styles, no truncation and no placeholder ellipses (they are read as literal code). If a surface is too large for your MCP client's tool-call budget, split into multiple calls scoped by component. Pass the same repository value across calls to group rounds under the surface dimension of one project. design.validate is sync-only. If the call times out client-side, do not retry, the run persists server-side; recover it via me.validation_history(run_id=...) using the run_id from the first progress event.
Also in this section