Figma’s custom skills let a designer write team convention into a Markdown file the agent can invoke by name. That is new. It is also the first design deliverable whose reader is a machine rather than a person. The tension arrives immediately: Figma’s help page concedes that “because the models that power the agent are inherently non-deterministic, the result may not be exactly the same each time you use the skill.” A skill is prose instructions, not checks. This roundup is based on vendor documentation, a third-party newsletter, and press coverage — we did not run the Figma agent or any skill hands-on.
What a design skill is
A design skill is a Markdown document that names a trigger, states a sequence of steps, and gets invoked as a slash command. The Agent Skills specification describes the general shape: a folder containing SKILL.md, with optional scripts/, references/, and assets/ directories. Figma’s help page describes a narrower implementation — a single file, no optional directories. You can create one by describing it in chat, importing an existing Markdown file, or editing a skill the agent produces. You invoke it as /follow-ds-guidelines or /design-crit; the skill’s name is the slash command. Skills publish to a team, an organization, or Figma Community with a Community page, and export as Markdown “so you can use it with your own agents.” They can be enabled and disabled. Availability is open beta, “Available on paid plans,” with Full seats chatting with the agent and View, Dev, and Collab seats working in Drafts.
The first design deliverable written for a machine
Figmalion issue #259 counted 50+ community skills spanning research, design systems, and handoff. The demo that matters is a designer invoking a teammate’s plain-English skill, which carries her review conventions, and getting the critique back as annotations on the canvas. Team practice becomes a callable command. Kowalski published /find-animation-opportunities; Krehel published /better-interface; Miggi published three — a type-scale generator that also writes the variables, an image audit that drops a DPI card beside every image, and a Shader Starter. Murphy Trueman’s line in the same issue is the cleanest framing of the split: “MCP gives your AI reach. Skills give it a recipe.” Reach is a connection problem. A recipe is a specification problem, and specifications can be graded. This is the same fork we drew when we split format-match from communication, and it connects to the token layer we argued should be agent-native and the connector plumbing that gives an agent reach in the first place.
What an agent can verify in a skill — and what it can’t
This is where the deliverable either becomes learnable or stays decorative. Classify every instruction line in a skill as one of two things. A PREDICATE line names a property, a threshold, and a selector — “every color fill references a variable,” “spacing is a multiple of 8,” “contrast ratio >= 4.5:1.” A PROSE line names an intent or an adjective with no property, threshold, or selector — “looks balanced,” “feels cluttered.” Then compute SVR: predicate lines divided by instruction lines, excluding headings, code blocks, and frontmatter. FAIL any skill below 0.5, because at that point it can steer a non-deterministic model but cannot be graded by a checker. The table below is this post’s own classification from each skill’s described purpose, not a measurement of anyone’s file.
| Skill (source) | Described purpose | Checkable? | SVR class |
|---|---|---|---|
/follow-ds-guidelines (Figma) |
Enforce design-system compliance | Yes — selector = every fill/stroke/spacing; predicate = token membership | High |
| Miggi — type-scale generator | Generate a scale and write the variables | Yes — naming + scale ratio + variable write | High |
| Miggi — image audit | Drop a DPI card beside every image | Yes — selector = every image; predicate = DPI threshold | High |
/find-animation-opportunities (Kowalski) |
Find places that don’t animate but should | Half — the scan is checkable; “should” is judgment | Mixed |
/better-interface (Krehel) |
Catch details your interface is missing | No — “details” and “missing” are unbound | Low |
/design-crit (Figma) |
Run a design review | No — critique prose, no threshold | Low |
The lesson for anyone writing skills: the High rows share a selector that can be enumerated and a threshold that can be compared. The Low rows ask the model to supply both, and a non-deterministic model supplies them differently each run. Prose lines are not worthless — they are a rubric backlog, the place where a team’s taste is stored until someone binds it to a property. That is the same argument we made about taste being a training signal rather than a mystery, and it is the same standard we applied to design-to-code output that claims to be verifiable.
Two rules Figma wrote that an agent can lint
Figma’s help page documents two authoring rules that are themselves machine-checkable. First: “Use active, unambiguous language to describe when to use the skill… Soft phrasing like ‘use only when X is selected’ tends to get read as ‘don’t use it unless X,’ not ‘you must use it whenever X is true.’ Phrase the trigger condition as a requirement rather than a restriction so it fires reliably.” That becomes lint L1: FAIL any trigger phrased as a condition or restriction; rewrite it as a requirement. Second: “Use a specific, non-generic name if you plan on publishing it. Avoid generic names like ‘design-critique’ since another author might already use the same name.” That becomes lint L2: FAIL generic names, because the name is the slash command and must be unique. Both rules are about invocation, not aesthetics — which is why a checker can enforce them.
The rest of the week: names, repos, and drift validators
A third-party observation worth logging: Canva appears to have consolidated “Magic Studio” into “Canva AI 2.0.” As of September 9, 2026, canva.com/magic serves a page titled Canva AI 2.0 and canva.com/magic-studio returns a 404, while “Magic Studio” survives only in help articles. This is a third-party observation at moda.app, not a Canva announcement, and the primary pages return 403 to non-browser agent fetches — so the third-party writeup is currently the only agent-readable record of the change. Separately, Figmalion reports that /design now runs inside Claude Code with an artboard canvas and a /design-sync command that loads a design system from a repository, and that Code Connect agent fleets can double as validators, re-fetching from Figma and surfacing drift after a property rename. The “context economy” argument follows: every token spent on unverifiable prose is a token not spent on a check.
Resolution
Skills are the first machine-readable design deliverable, and that is the right direction. But only the predicate fraction is learnable today — the rest is a model’s best guess at your taste, regenerated on every run. Write skills to be linted, not admired. Treat every prose line as a rubric backlog item waiting for a property and a threshold. Name and trigger skills as interfaces, because the name is the command and the trigger is the contract. The share of a skill a checker can grade is the share of your team’s design knowledge an agent actually inherits. Everything else is a suggestion.
Rule: skill-verifiability-ratio — a computable rule the weekly Empire Design Scan can check: For any design skill (a SKILL.md file, a Figma custom skill, or any agent skill folder), classify every instruction line as a PREDICATE — it names a property, a threshold, and a selector (e.g. "every color fill references a variable", "spacing is a multiple of 8", "contrast ratio >= 4.5:1", "every image carries a DPI card at >= 150 DPI") — or as PROSE: an intent or adjective with no property, threshold, or selector (e.g. "looks balanced", "feels cluttered", "should feel intentional"). Exclude headings, code blocks, and frontmatter. Compute SVR = predicate_lines / instruction_lines, and FAIL any skill with SVR < 0.5 as a checkable artifact — it can steer a non-deterministic model but cannot be graded by a checker. Also lint two authoring rules Figma documents: (L1) FAIL any trigger phrased as a condition or restriction ("use only when X", "if X is selected") — rewrite as a requirement ("when X, you must ..."); (L2) FAIL any generic skill name ("design-crit", "design-review", "critique", "handoff") because the skill name IS the slash command and must be unique and specific. Report SVR plus L1/L2 findings per skill; route PROSE lines to a human rubric backlog.
