算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
that assumes USD.\n- **Project terms:** compare against the project's glossary and voice guide, if it has them (the `wording` check).\n\nDetect: dump the `characters` of every TEXT node and search for the lists above. Then read the copy aloud: if it sounds like a SaaS demo, it is slop.\n\n### S8. The closing reply (it is part of the work)\n\n- No preamble (\"I'll start by...\", \"Let me first...\", \"I'll go ahead and...\").\n- No trailing summary (\"Here's what I did: 1. ... 2. ...\", \"All done!\", \"Hope this helps!\").\n- Do not restate the request (\"You asked me to fix the spacing, so I'll...\"). Just do it.\n- No defensive disclaimers unless safety needs them (\"Just to clarify...\", \"If I understood correctly...\", \"Please let me know if...\").\n- No `## Summary`, `## Changes` or `## Next steps` headers in a normal reply. Headers belong in documents, not in chat.\n- No status emoji unless the user explicitly wants them. No bullet list of 3 items when 1 sentence does it.\n- Do not expose your own audit and fix process in a stakeholder report (see \"Self-corrections in reports\" in the catalog).\n\n## Lens 2: Rigor (is it precise)\n\n11 rigor checks in 5 groups, ordered by what a node stores. `references/checks.md` says what each one reads and when it fails. Run them on data you collected through the figma-console MCP server, not from memory.\n\n| Group | Check | Fails when (short form) |\n| --- | --- | --- |\n| Bound or loose | `color` | A raw hex where the variable exists, a color with no variable, an invented variable or style name |\n| | `text-style` | Text with no style where one fits, one role at two sizes or weights, a foreign font family |\n| | `scale` | A padding, gap, radius or icon size off the project's scale, a decimal, siblings that disagree, an emoji as an icon |\n| Components intact | `detached` | A frame detached from a component, a component-named layer that is not an instance, an instance with no main component |\n| | `properties` | A variant value outside its options, an unknown property, a needed property unset |\n| Auto layout sized right | `sizing` | Same-family screens at different widths, fixed where it should hug, hug where it should fill |\n| | `collapse` | A content child under 70% of its vertical parent's width, a node 1px wide or 0px tall |\n| | `fill-in-hug` | Text set to fill inside a horizontal frame that hugs, absolute text inside auto layout |\n| Words | `wording` | A glossary term broken, one concept written two ways across screens |\n| | `names` | Default Figma names, a component name without `/`, a root frame without `NN-name` |\n| Pixels | `screenshot` | A capture shows overlap, collapse or a bad crop. Skipping the captures is itself critical |\n\n### Catalog checks (apply them as the canon writes them)\n\n- **Auto-fails:** the 5 criteria of [`figma-canon/references/quality-rubric.md`](../figma-canon/references/quality-rubric.md) (hardcoded colors, missing auto layout, default Figma names, detached components, layer overlap). Any one of them means that section is redone, not declared done. In the punch list each keeps the severity of the catalog's Severity scoring table (default names are Critical; hardcoded hex, missing auto layout and detached instances are High), and any one of them blocks a PASS.\n- **Reuse, tokens and layout:** apply \"Component reuse failures\", \"Token violations\", \"Layout & positioning\" and \"Card and state anti-patterns\" from the catalog: a new `Button` drawn while `Button/Primary` exists, an icon recreated as vectors, inline effect styles while elevation tokens exist, a hardcoded font size or spacing, a top-level node at (0,0) colliding with content, `resize()` called after the sizing modes. Take the severity from the catalog's table; where it has no row, the catalog only says \"flag\": place it with the severity table in `references/punch-list.md`.\n- **Contrast and targets:** \"WCAG auto-fails\" in the catalog (text and UI contrast, text size, color-only state, focus indicators). When judging contrast, compose the opacity chain of the node and of its groups (the opacity chain rule in the Hard rules of the `figma-canon` skill).\n- **State coverage:** a screen with only the happy path loses a point in dimension D of the rubric. Check the required states for its screen class in [`figma-canon/references/state-coverage.md`](../figma-canon/references/state-coverage.md).\n- **Score:** rate the frame with the rubric. Below 8/10, fix before declaring done. Cite the score in the report.\n\n## Workflow\n\n1. **Define the scope.** One screen, a set of sibling screens, or a whole section? Ask for the node id or the URL if it is not obvious. If the session has just written something, use the last selection: the node ids that write returned. Otherwise read the live selection with `figma_get_selection` and confirm the target with the user.\n - 1 screen: every check, with `wording` limited to its glossary half.\n - 2 to N sibling screens: every check, with the cross-screen comparisons on.\n - A whole section: every check, plus a summary table per screen.\n2. **Refresh state.** Call `figma_search_components` (node ids are session specific and may be stale). If the Bridge is disconnected, run the `figma-bridge-doctor` skill and stop. If the file changed since the last session, run `figma-orient` first.\n3. **Run the Slop lens** on what applies: design, copy, reply.\n4. **Collect read-only data** with a short `figma_execute` read of your own, one screen per call. What to collect, and how to bring it back, is in \"Read once, then judge\" in `references/checks.md`.\n5. **Run the Rigor checks** over the collected data, group by group, then the catalog checks.\n6. **Prove it by screenshot, at the right scale:**\n - the whole section at scale 0.4, to see overlap and spacing (S1)\n - 3 to 5 representative frames, one per category: a form, a list, a dashboard, a multi-section screen, the dark outlier if there is one (the `screenshot` check)\n - every element that was fixed, captured on its own rather than as part of a sample\n - an overview is not proof of a fix at component level: the crop-scale rule (at least 1.2x) in the Hard rules of the `figma-canon` skill sets the scale for that crop\n7. **Emit the output** (next section), ordered by severity, highest first.\n8. **Pass again when asked.** A request such as \"fix all\" or \"did you verify everything?\" makes multiple passes mandatory: show the verification (grep plus a zero-residual report) and never claim done on a single pass (see \"Multi-pass verification flag\" in the catalog). Do this audit as a close read by a single agent, not as a parallel fan-out (see \"Subagent fan-out caveat\" in the catalog).\n\n## Output\n\n### Slop log (internal)\n\n```text\nSLOP CHECK - [design | copy | reply]\n- S1 layout: PASS / FAIL (reason)\n- S2 density: PASS / FAIL (reason)\n- S3 markers: PASS / FAIL\n- S4 authorship: PASS / FAIL (names found)\n- S5 visual: PASS / FAIL\n- S6 repetition: PASS / FAIL\n- S7 copy: PASS / FAIL (words detected)\n- S8 reply: PASS / FAIL\n```\n\nThis log is an internal gate. Do not paste it into the reply to the user.\n\n### PASS\n\n```text\nPASS figma-slop-check: \u003cN> checks run, 0 findings. The screen agrees with itself and with the canon.\n\n- Target: \u003cnode-id> (\u003cscreen name>)\n- Rubric: \u003cscore>/10\n- Proof: section overview at scale 0.4, \u003cN> frame screenshots\n- Next gate: figma-handoff-gate\n```\n\n`\u003cN>` is the number of checks that step 1 selected. Never hardcode it in the text. After a PASS, run the `figma-handoff-gate` skill as the next lens before declaring the work done.\n\n### FAIL\n\n```text\nFAIL figma-slop-check: punch list\nTarget: \u003cnode-id or node-ids> · \u003cscreen names>\nChecks: \u003cN> run · \u003cN> findings\n\n----------------------------------\n1. [COLOR] card raw hex\n Where: 123:789 · card\n Found: fill #16181D raw\n Canon: variable color/surface/card -> #16181D\n Action: swap · distance 0\n Severity: high (the variable exists, it should be bound)\n\n2. [SCALE] list row padding mismatch\n Where: 123:456 · row · Name (row 3 of 11)\n Found: T12 R16 B14 L16\n Canon: T12 R16 B12 L16 (every other row in the list)\n Action: snap · distance +2 (bottom)\n Severity: medium\n\n3. [SCALE] two card radii, no rule yet\n Where: 124:101 · card · Plan; 124:230 · card · Billing\n Found: r=12 on one, r=16 on the other\n Canon: not covered. The radius scale has both steps and no rule for cards\n Action: ask\n Severity: medium\n Question for the designer: which radius do cards use?\n\n...\n----------------------------------\nSummary: N findings · X high · Y medium · Z low\nActions: A swap · B snap (largest distance: +/-N) · C ask\nApply fix? Say the number (or \"all swaps\", \"all high\", \"skip\"). Read-only until approved.\nAsks never enter \"all\": each one needs your answer.\n```\n\nEvery finding carries a severity (how much it hurts) and an action (what happens to it): **swap**, **snap** with its signed distance, or **ask**. Definitions, the distance rule and the footer lines for left-out findings and variable modes are in `references/punch-list.md` and `references/checks.md`.\n\n## On failure\n\n- **A failed slop check on work you just made:** fix it before you answer. Never pass it forward as \"I will fix it later\". Then re-run the check.\n- **Rigor findings:** read-only until the user approves. The user answers \"fix 2\", \"fix all high\", \"apply 1, 3, 5\", and you apply ONLY the approved items. Never apply a batch without approval. Each fix gets a validation screenshot (`figma_take_screenshot` of the section afterwards). As of figma-console-mcp v1.40.8, `figma_take_screenshot` falls back to the REST API when the Bridge is not connected, and REST can render stale state after plugin edits ([`figma-canon/references/plugin-api-anomalies.md`](../figma-canon/references/plugin-api-anomalies.md)); `figma_capture_screenshot` always uses the plugin runtime, so prefer it for this proof. Every fix is a write: it goes through `figma-preflight` like any other.\n- **By action:** an approved **swap** is applied and nothing is recorded. An approved **snap** is applied and its distance goes into the `fixes` list of the run file, so the change leaves a trail. An **ask** never enters \"all\": with no answer from the designer, apply nothing and keep it open for the next run.\n- **The user accepts a finding as intentional:** record it as `intentional` in `.figma-slop-check/decisions.json`, with a reason and a scope. \"Later\" on a finding records it as `debt`, and it comes back with its distance until it is fixed (`references/punch-list.md`).\n- **\"skip\" or \"leave it as it is\":** stop. Do not force the fix.\n\nStop conditions:\n\n- 3 cycles of fix and re-check and the same check, or the same class of finding, still fails: stop and surface it to the user. No infinite loop.\n- At least 1 high finding is not fixed and the user says \"ship it\": surface the blocker and let the user decide the override. State the override in your reply so it stays in the transcript.\n- The Bridge is disconnected: stop and run the `figma-bridge-doctor` skill.\n\n## Not this gate's job\n\nIf a finding belongs to one of these, note it and do not act on it.\n\n- Accessibility compliance beyond the catalog's auto-fails is a parallel track. This gate does not replace an accessibility audit (figma-console-mcp v1.40.8 ships `figma_audit_component_accessibility` for an audit at component level).\n- Layout strategy and hierarchy belong to a design critique.\n- Auto-fix without approval: never.\n\n## Composes with\n\n- `figma-canon`: the catalog, the rubric and the naming, state and handoff canon this gate applies.\n- `figma-preflight`: runs before the write, and again before any fix this gate leads to.\n- `figma-bridge-doctor`: prerequisite when the Bridge is off.\n- `figma-orient`: orient first when the file changed since the last session.\n- `figma-handoff-gate`: the next gate. Slop and rigor come first, handoff comes after.\n","licenseDocuments":[]}}
figma-slop-check【设计与创意】Quality gate that runs after a write to a Figma file and before figma-handoff-gate, before any frame is called done. Two lenses. Slop: does it look machine made (overlap, AI-stuffed cards, status emoji creep, hype copy, names and canvas notes that read as generated). Rigor: is it precise (values bound to variables and styles, sizes on the project's s…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
The gate you run before calling any Figma frame done. It looks at the work through two lenses, in this order:
Nothing is declared ready while a check fails. This skill is a gate: it reads and reports. Fixes are a separate pass (see "On failure").
figma-preflight approves the write, the write happens, then figma-slop-check runs, then figma-handoff-gate. Each gate fails closed. Slop runs first because it is faster: it judges the overall look, not the structure. Rigor runs second because it has to read structure and cross-reference. Never skip a downstream gate.
You are not reviewing your own screen. You are reviewing the screen of another designer whom you want to catch lying. Go in with a magnifying glass on:
If it passes your eyes the first time without an objection, look again. The first pass is blind.
Why the gate exists: without it, a handoff ships with one capitalization on one screen and another on the next, with r=16 on a card and r=20 on an "identical" card, with a raw hex where a token belongs. The engineer opens the file, sees the inconsistency and loses trust in the design system. It is expensive to fix later and cheap to catch now.
| Reference | What this gate takes from it |
|---|---|
figma-canon/references/ai-slop-signatures.md | The catalog of slop patterns and the severity table. This skill points at it and does not repeat it. |
figma-canon/references/quality-rubric.md | The 5 auto-fail criteria and the 0-10 score (8/10 minimum). |
figma-canon/references/naming-canon.md | Naming rules, the banned list and the Human authorship section. |
figma-canon/references/state-coverage.md | Required states per screen class. |
figma-canon/references/handoff-format.md | Handoff-specific slop (amber captions, FILL-in-HUG overflow, @user_NNN placeholders), plus the handoff spacing and caption canon. |
references/checks.md | The 11 rigor checks, plus the one read-only pass that feeds them. |
references/punch-list.md | Severity, the swap, snap and ask actions, where expected values come from, what to leave out, and the decisions file. |
Also read the project map (figma-map.md, default docs/figma-map.md) for the project's scales, glossary and conventions. Project canon overrides the universal one.
Run the checks that apply to what was made: design (S1 to S6), copy (S7), reply (S8).
Detect: take a screenshot of the whole section at scale 0.4 and review it. In a handoff section built with right-side annotations, the stricter spacing constants of figma-canon/references/handoff-format.md apply.
[NEW], [WIP] or [DRAFT] glued to every surface.Delivered files are read by teammates and stakeholders. Nothing in them may carry a sign that it was made by AI. What gives it away:
V1, A2, "OPTIONS", "BATCH")What a human designer does: a short, plain name, sometimes lowercase and sometimes not, with no visible system. An annotation in running prose, 2 to 6 sentences, like a spoken comment. If something must be marked, one loose word ("approved", "old") and no more. Pending items go to chat, not onto the canvas.
The existing convention of the file is NOT an alibi. The sibling pattern may be exactly what the designer just rejected (field note, 2026-07: a new section copied the naming pattern of its older siblings hours after that pattern had been rejected). The rule also covers FigJam, comments and descriptions.
When options need comparing on the canvas, each option gets its own box, with pros on + lines and cons on lines that open with the minus sign U+2212 (never an em dash). The recommended option gets a visible marker and one final "because ..." line. A format that reads well: a white card with a border stroke per option, a bold green +, a bold red minus sign, and on the recommended one a 1.5 accent stroke, an accent pill and the "because ..." line in SemiBold. Label the recommendation in plain first-person words, with a qualifier when it is conditional, never an ALL-CAPS "RECOMMENDED". No caps headers, no governance numbering.
Detect: scan the top-level names of the page for emoji, codenames and dates. The expected count is zero. Before creating a section or a note, ask: would a designer in a hurry write this? Full rule: the Human authorship section of figma-canon/references/naming-canon.md.
@user_001, while figma-canon/references/handoff-format.md bans @user_NNN placeholders and asks for realistic names in the file's language. The project map decides; if it is silent, ask the designer.$ that assumes USD.wording check).Detect: dump the characters of every TEXT node and search for the lists above. Then read the copy aloud: if it sounds like a SaaS demo, it is slop.
## Summary, ## Changes or ## Next steps headers in a normal reply. Headers belong in documents, not in chat.11 rigor checks in 5 groups, ordered by what a node stores. references/checks.md says what each one reads and when it fails. Run them on data you collected through the figma-console MCP server, not from memory.
| Group | Check | Fails when (short form) |
|---|---|---|
| Bound or loose | color | A raw hex where the variable exists, a color with no variable, an invented variable or style name |
text-style | Text with no style where one fits, one role at two sizes or weights, a foreign font family | |
scale | A padding, gap, radius or icon size off the project's scale, a decimal, siblings that disagree, an emoji as an icon | |
| Components intact | detached | A frame detached from a component, a component-named layer that is not an instance, an instance with no main component |
properties | A variant value outside its options, an unknown property, a needed property unset | |
| Auto layout sized right | sizing | Same-family screens at different widths, fixed where it should hug, hug where it should fill |
collapse | A content child under 70% of its vertical parent's width, a node 1px wide or 0px tall | |
fill-in-hug | Text set to fill inside a horizontal frame that hugs, absolute text inside auto layout | |
| Words | wording | A glossary term broken, one concept written two ways across screens |
names | Default Figma names, a component name without /, a root frame without NN-name | |
| Pixels | screenshot | A capture shows overlap, collapse or a bad crop. Skipping the captures is itself critical |
figma-canon/references/quality-rubric.md (hardcoded colors, missing auto layout, default Figma names, detached components, layer overlap). Any one of them means that section is redone, not declared done. In the punch list each keeps the severity of the catalog's Severity scoring table (default names are Critical; hardcoded hex, missing auto layout and detached instances are High), and any one of them blocks a PASS.Button drawn while Button/Primary exists, an icon recreated as vectors, inline effect styles while elevation tokens exist, a hardcoded font size or spacing, a top-level node at (0,0) colliding with content, resize() called after the sizing modes. Take the severity from the catalog's table; where it has no row, the catalog only says "flag": place it with the severity table in references/punch-list.md.figma-canon skill).figma-canon/references/state-coverage.md.figma_get_selection and confirm the target with the user.
wording limited to its glossary half.figma_search_components (node ids are session specific and may be stale). If the Bridge is disconnected, run the figma-bridge-doctor skill and stop. If the file changed since the last session, run figma-orient first.figma_execute read of your own, one screen per call. What to collect, and how to bring it back, is in "Read once, then judge" in references/checks.md.screenshot check)figma-canon skill sets the scale for that cropSLOP CHECK - [design | copy | reply]
- S1 layout: PASS / FAIL (reason)
- S2 density: PASS / FAIL (reason)
- S3 markers: PASS / FAIL
- S4 authorship: PASS / FAIL (names found)
- S5 visual: PASS / FAIL
- S6 repetition: PASS / FAIL
- S7 copy: PASS / FAIL (words detected)
- S8 reply: PASS / FAIL
This log is an internal gate. Do not paste it into the reply to the user.
PASS figma-slop-check: <N> checks run, 0 findings. The screen agrees with itself and with the canon.
- Target: <node-id> (<screen name>)
- Rubric: <score>/10
- Proof: section overview at scale 0.4, <N> frame screenshots
- Next gate: figma-handoff-gate
<N> is the number of checks that step 1 selected. Never hardcode it in the text. After a PASS, run the figma-handoff-gate skill as the next lens before declaring the work done.
FAIL figma-slop-check: punch list
Target: <node-id or node-ids> · <screen names>
Checks: <N> run · <N> findings
----------------------------------
1. [COLOR] card raw hex
Where: 123:789 · card
Found: fill #16181D raw
Canon: variable color/surface/card -> #16181D
Action: swap · distance 0
Severity: high (the variable exists, it should be bound)
2. [SCALE] list row padding mismatch
Where: 123:456 · row · Name (row 3 of 11)
Found: T12 R16 B14 L16
Canon: T12 R16 B12 L16 (every other row in the list)
Action: snap · distance +2 (bottom)
Severity: medium
3. [SCALE] two card radii, no rule yet
Where: 124:101 · card · Plan; 124:230 · card · Billing
Found: r=12 on one, r=16 on the other
Canon: not covered. The radius scale has both steps and no rule for cards
Action: ask
Severity: medium
Question for the designer: which radius do cards use?
...
----------------------------------
Summary: N findings · X high · Y medium · Z low
Actions: A swap · B snap (largest distance: +/-N) · C ask
Apply fix? Say the number (or "all swaps", "all high", "skip"). Read-only until approved.
Asks never enter "all": each one needs your answer.
Every finding carries a severity (how much it hurts) and an action (what happens to it): swap, snap with its signed distance, or ask. Definitions, the distance rule and the footer lines for left-out findings and variable modes are in references/punch-list.md and references/checks.md.
figma_take_screenshot of the section afterwards). As of figma-console-mcp v1.40.8, figma_take_screenshot falls back to the REST API when the Bridge is not connected, and REST can render stale state after plugin edits (figma-canon/references/plugin-api-anomalies.md); figma_capture_screenshot always uses the plugin runtime, so prefer it for this proof. Every fix is a write: it goes through figma-preflight like any other.fixes list of the run file, so the change leaves a trail. An ask never enters "all": with no answer from the designer, apply nothing and keep it open for the next run.intentional in .figma-slop-check/decisions.json, with a reason and a scope. "Later" on a finding records it as debt, and it comes back with its distance until it is fixed (references/punch-list.md).Stop conditions:
figma-bridge-doctor skill.If a finding belongs to one of these, note it and do not act on it.
figma_audit_component_accessibility for an audit at component level).figma-canon: the catalog, the rubric and the naming, state and handoff canon this gate applies.figma-preflight: runs before the write, and again before any fix this gate leads to.figma-bridge-doctor: prerequisite when the Bridge is off.figma-orient: orient first when the file changed since the last session.figma-handoff-gate: the next gate. Slop and rigor come first, handoff comes after.