design-handoff
Skill1 starsChanged 46 days agoMITView on GitHub
Produces a handoff package an engineer can build from without a meeting: annotated specs, every state and edge case, responsive behavior, interaction and motion specs, final content, accessibility notes (focus order, labels), tokens used, Figma Dev Mode and Code Connect setup, and acceptance criteria. Use for "prepare handoff", "dev handoff", "spec this for engineering", "annotate the design", "ready for dev", or "what does the engineer need". Not for building it yourself; use design-to-code. Not for checking the build afterward; use visual-qa.
16 other projects use a version of this.
Adopted by
Most recently taken up by
- nisarth/claude-skills-storetheir own version, first seen Nov 8, 2026
- dmlguq456/heartingtheir own version, first seen Nov 8, 2026
- philipobenito/elelemtheir own version, first seen Oct 28, 2026
- adityareddy-dev/deskstudiotheir own version, first seen Oct 25, 2026
- vindreshsingh/engineering-skillstheir own version, first seen Oct 20, 2026
- Geruyang/skillstheir own version, first seen Oct 15, 2026
Used with
Projects with it also use design-review and frontend-design.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
dillonluiSkilldesign-review
Review a view or flow for UX and UI issues. Provides severity-ranked, actionable findings grounded in established design heuristics. Use when the user asks for design feedback, UX review, or UI critique.
Also in 3 projects that use this
BlockSkillfrontend-design
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Also in 3 projects that use this
Other versions16 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 16
- anthropics/knowledge-work-plugins★ 35ksame name
- adityareddy-dev/deskstudio★ 43same name
- dmlguq456/hearting★ 9same name
- shayan-m81/layerwright★ 8same name
- syntropic137/syntropic137★ 5same name
- philipobenito/elelem★ 3same name
- Geruyang/skills★ 2same name
- humbleteam/design-handoff★ 1same name
- Jaxton07/jax-skills★ 1same name
- nisarth/claude-skills-store★ 1same name
6 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository33 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- accessibility-reviewSkill
- art-directionSkill
- brand-identitySkill
- brand-strategySkill
- brand-voiceSkill
- color-systemSkill
- component-api-designSkill
- design-briefSkill
- design-case-studySkill
- design-critiqueSkill
- design-discoverySkill
- design-system-auditSkill
- design-system-docsSkill
- design-to-codeSkill
- design-tokensSkill
- iconographySkill
- information-architectureSkill
- interface-polishSkill
- landing-page-designSkill
- layout-and-hierarchySkill
- micro-interactionsSkill
- motion-implementationSkill
- motion-languageSkill
- product-design-processSkill
- reference-researchSkill
- typography-systemSkill
- usability-testingSkill
- user-researchSkill
- ux-writingSkill
- visual-qaSkill
- wireframingSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 7 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 14 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 47
If the Figma MCP is connected, use get_metadata to list frames, get_variable_defs to confirm every value is a variable, …
- Distinctive: line 59
Clean the file: Every layer named, every value bound to a variable, every component a library instance, no detached instances, frames …
- Distinctive: line 66
Specify states: Every interactive element: default, hover, focus-visible, active, disabled, loading, error, and selected where relevant.
- Very specific: line 111
Every value is a token name.
- Very specific: line 114
No opacity-modified colors in the design.
- Distinctive: line 116
Use Figma's native annotations (Dev Mode) or a single annotation component.
- Distinctive: line 133
Write them as observable behavior, one per line, in the Given / When / Then shape or plain statements that a reviewer can pass or fail:
- Distinctive: line 138
When the dialog closes, focus returns to the button that opened it.
- Distinctive: line 189
Only the happy path at one width
- Distinctive: line 214
Storybook: when the handoff target is a component, stories are the spec.
“Common” is measured: kept by at least 6 in 10 of the 14 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Design Handoff
A handoff is done when an engineer who was not in any of the design reviews can build the feature correctly, and a reviewer can tell whether they did. That means the package answers questions before anyone asks them: what happens with 200 items, what the error says, where focus goes when the dialog closes, which token that gray is. Most handoff failures are not missing pixels; they are missing decisions. This skill finds the undecided parts, decides them or flags them, and packages the rest in one place with acceptance criteria that make "done" checkable.
When to use
- A design is approved and about to move to engineering
- An engineer keeps asking questions a spec should have answered
- Preparing a Figma file for Dev Mode
- Setting up Code Connect so Dev Mode shows real component code
- A designer who also builds wants a checklist for their own future self
Not for: implementing the design (use design-to-code), reviewing the build
against it (use visual-qa), or writing component documentation for a design
system (use design-system-docs).
Inputs
- The approved design: Figma file and the frames in scope. [If only some frames are final, hand off those and list the rest as out of scope.]
- The brief or ticket: problem, success metric, constraints.
- The codebase's system: tokens, components, and whether Code Connect exists.
[If unknown, check for
*.figma.tsxfiles andfigma.config.json.] - Who builds it: the engineer, a team, or the designer. Depth changes; the checklist does not.
- Deadline and release shape: one release, or behind a flag in stages.
If the Figma MCP is connected, use get_metadata to list frames, get_variable_defs
to confirm every value is a variable, get_code_connect_map to see which components
are mapped, and get_screenshot for the images in the package. If not, say so and
work from exports.
Process
- Hunt for undecided parts. Walk every frame asking "what if": empty, one item,
hundreds of items, long text, no permission, offline, slow, error, first use.
Output: an open-questions list. Resolve each or mark it for the engineer to decide
with a stated default. Model:
references/edge-cases.md. Copy that shape. - Clean the file. Every layer named, every value bound to a variable, every
component a library instance, no detached instances, frames ordered by flow.
Mark ready sections with Dev Mode's "Ready for dev" status. Output: a file that
get_variable_defsresolves fully. - Map components. For each component in the design: existing in code (name it), new variant (describe the delta), or new component (spec its props). Connect the existing ones with Code Connect. Output: a component table.
- Specify states. Every interactive element: default, hover, focus-visible, active, disabled, loading, error, and selected where relevant. Output: a state matrix, frames or table.
- Specify responsive behavior. Frames at 390 and 1440 at minimum; describe what happens between (reflow, reorder, collapse, hide). Output: a breakpoint table.
- Specify interaction and motion. Triggers, results, durations, easing, and
reduced-motion fallback, in the project's motion tokens. Output: an interaction
table. Model: the pattern map in
../motion-language/templates/motion-spec.md. - Finalize content. Real copy for every string, including errors, empty states, confirmations, and tooltips. Output: a content table with keys if the product uses i18n.
- Write accessibility notes. Focus order, accessible names for icon-only controls, headings and landmarks, live-region announcements, what focus does on open and close. Output: the accessibility section.
- Write acceptance criteria. Testable statements, grouped by area. Output: a list the engineer and reviewer both check.
- Package it. Fill
templates/handoff.md, link it from the ticket and from the Figma page. Model for a real component spec: Fibo'sbutton.mdxfor anatomy, data attributes, and accessibility sections. Copy that shape.
Standards
What a complete package contains
| Section | Must include |
| Overview | Problem, link to brief, scope in and out, release plan |
| Flow | Entry points, happy path, exits, with frame links |
| Components | Existing / variant / new, with code names and Code Connect status |
| Tokens | Every color, space, radius, type, shadow, motion token used, by name |
| States | Matrix for every interactive element |
| Edge cases | Empty, one, many, long, error, loading, permission, offline |
| Responsive | Behavior at each breakpoint, not just two frames |
| Interaction and motion | Trigger → result, duration token, easing token, reduced motion |
| Content | Every string, final, with character limits where layouts depend on them |
| Accessibility | Focus order, names, headings, announcements, target sizes |
| Acceptance criteria | Testable, one behavior each |
| Open questions | Owner and default for each |
Annotation rules
- Annotate decisions, not measurements. Dev Mode shows
gap: 16; the annotation says "gap stays 16 at every width; the list scrolls, the header does not". - Every value is a token name. "#6B7280" in a spec is a defect. In Fibo-shaped
systems the Figma variable and the CSS token share one name, so the spec, the
file, and the code all say
muted-foreground. - No opacity-modified colors in the design. If the design needs a tint, make it a named
role (
destructive-subtle), because an engineer cannot reproduce "red at 10%" reliably. - Use Figma's native annotations (Dev Mode) or a single annotation component. One style, one color, never overlapping the design.
- Number interactions (1, 2, 3) and reference those numbers in the interaction table.
- Mark anything intentionally different from the system and say why.
Code Connect
- Map every system component used in the design to its code component, so Dev Mode
shows
<Button variant="outline" size="sm">instead of generated CSS. - Map variant properties to props one to one. A Figma variant named
Type=Ghostmapping tovariant="ghost"is the goal; mismatches are a system bug to log. - With the Figma MCP:
get_code_connect_suggestionsproposes mappings,send_code_connect_mappingsoradd_code_connect_mapwrites them. - Without it:
*.figma.tsxfiles published with the Code Connect CLI.
Acceptance criteria
Write them as observable behavior, one per line, in the Given / When / Then shape or plain statements that a reviewer can pass or fail:
- Given the list has 0 projects, the empty state shows "Create your first project" and the primary button opens the create dialog.
- When the dialog closes, focus returns to the button that opened it.
- At 390px, the filter bar collapses into a "Filters" button that opens a sheet.
- Project names longer than one line truncate with an ellipsis; the full name shows on hover and in the detail view.
- With reduced motion on, the sheet appears with a 150ms fade and no slide.
Bad: "Looks like the design." "Is accessible." "Responsive."
Right-sizing
| Change | Package |
| Copy or token tweak | Ticket comment with before/after and the token names |
| New variant of an existing component | States, tokens, one acceptance list |
| New screen from existing parts | Full template minus component specs |
| New component or flow | Full template, plus component spec and Code Connect |
Output
The filled templates/handoff.md, linked from the ticket and
pinned on the Figma page, plus the Figma file in a clean, "Ready for dev" state.
Verify
The handoff is done when:
- Someone who was not in design reviews can read it and list zero questions that change what they would build (walk them through it or ask them to try)
get_variable_defson every handed-off frame returns variables only; no raw hex, no detached styles- Every system component in the frames has a Code Connect mapping, or a listed reason it does not
- Every interactive element has all its states shown or explicitly listed as not applicable
- Every edge case in
references/edge-cases.mdis answered or marked not applicable - Every string is final copy, including errors and empty states
- Focus order, accessible names, and open/close focus behavior are written down
- Motion uses motion tokens and states a reduced-motion fallback
- Every acceptance criterion can be passed or failed by watching the build
- Open questions have an owner and a default
Delegate the checks: the token-auditor subagent for untokenized values in the spec,
the accessibility-auditor subagent for the accessibility notes, and the
copy-reviewer subagent for the content table. Each reports failures only, with the
frame or section, and ends with a verdict.
Anti-patterns
- A Figma link and "let me know if you have questions"
- Redlines on every pixel and no word about behavior
- Only the happy path at one width
- "Lorem ipsum" or "Error message here" in a handed-off frame
- Specs in three places (Figma comments, Slack, ticket) that disagree
- Detached instances that look like the system but are not
- Motion described as "smooth" or "snappy" instead of token names
- Accessibility left as "make it accessible"
- Acceptance criteria that restate the design ("matches Figma")
- Changing the design after handoff without versioning the package
Related skills
- Feeds from:
design-brief,design-critique(approval),ux-writing(content),motion-language(motion tokens),design-tokens - Leads to:
design-to-code(the build),visual-qa(checks against this package's acceptance criteria),accessibility-review
References
From REFERENCE-BANK.md:
- Figma MCP:
get_variable_defs,get_code_connect_map, and Code Connect writes. - GitHub Primer and Atlassian Design: how mature systems document states, content, and accessibility per component.
- Shopify Polaris: content guidelines as part of a spec.
- Inclusive Components: the accessibility notes a handoff should carry per pattern.
- Design System Checklist: a readiness list to compare the package against.
- Storybook: when the handoff target is a component, stories are the spec.
From FIBO.md: "one name on both sides" (Figma variables and CSS
tokens match one to one), named -subtle roles instead of opacity, and button.mdx
as the model for anatomy, data attributes, and accessibility sections.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

