@fprad0/skill-master-mcp 0.0.12 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/CHANGELOG.md +100 -88
  2. package/README.md +472 -472
  3. package/VERSION.md +9 -9
  4. package/bin/lib/bootstrap-global-core.mjs +34 -0
  5. package/bin/lib/client-config.mjs +287 -285
  6. package/bin/lib/doctor-core.mjs +202 -0
  7. package/bin/lib/menu-core.mjs +1792 -1514
  8. package/bin/lib/operation-result.mjs +59 -0
  9. package/bin/lib/register-clients-core.mjs +247 -0
  10. package/bin/lib/skill-installation.mjs +215 -215
  11. package/bin/lib/update-cli-core.mjs +117 -0
  12. package/bin/skill-master-activation.mjs +165 -163
  13. package/bin/skill-master-bootstrap-global.mjs +61 -49
  14. package/bin/skill-master-configure-private-registry.mjs +3 -3
  15. package/bin/skill-master-doctor.mjs +239 -228
  16. package/bin/skill-master-eval-activation.mjs +32 -32
  17. package/bin/skill-master-install-global-skills.mjs +59 -59
  18. package/bin/skill-master-install-project-skills.mjs +97 -97
  19. package/bin/skill-master-menu.mjs +489 -378
  20. package/bin/skill-master-register-clients.mjs +232 -153
  21. package/bin/skill-master-success-skills.mjs +357 -307
  22. package/bin/skill-master-update.mjs +121 -72
  23. package/bin/skill-master.mjs +3 -3
  24. package/dist/activation.d.ts.map +1 -1
  25. package/dist/activation.js +12 -0
  26. package/dist/activation.js.map +1 -1
  27. package/dist/prompt-router.d.ts.map +1 -1
  28. package/dist/prompt-router.js +19 -0
  29. package/dist/prompt-router.js.map +1 -1
  30. package/dist/recommender.d.ts.map +1 -1
  31. package/dist/recommender.js +4 -1
  32. package/dist/recommender.js.map +1 -1
  33. package/docs/architecture/APRENDIZADO_DE_IMPLEMENTACOES_BEM_SUCEDIDAS.md +125 -125
  34. package/docs/architecture/ARQUITETURA_AUTO_UPDATE.md +9 -9
  35. package/docs/architecture/PLANO_MASTER_ACIONAMENTO_AUTOMATICO_E_APRENDIZADO.md +341 -341
  36. package/docs/architecture/REDE_SEGURA_DE_SKILLS.md +148 -148
  37. package/docs/operations/GUIA_MULTI_COMPUTADOR.md +262 -262
  38. package/docs/operations/GUIA_NPM_PRIVADO.md +294 -294
  39. package/docs/operations/GUIA_NPM_PUBLICO.md +147 -147
  40. package/docs/operations/MENU_VISUAL_EVIDENCE_2026-06-28.md +66 -66
  41. package/docs/operations/assets/menu-frame-compact.html +36 -33
  42. package/docs/operations/assets/menu-frame-dna-hero.html +87 -0
  43. package/docs/operations/assets/menu-frame-fine-helix.html +89 -0
  44. package/docs/operations/assets/menu-frame-large.html +44 -41
  45. package/docs/operations/assets/menu-frame-running.html +41 -38
  46. package/docs/operations/assets/menu-frame-score-10-contact-sheet.html +184 -0
  47. package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -140
  48. package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -85
  49. package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -174
  50. package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -119
  51. package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -134
  52. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -84
  53. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -56
  54. package/docs/operations/token-economy-transfer/ANALISE_AVANCADA_ECONOMIA_TOKENS_2026-06-30.md +141 -0
  55. package/docs/operations/token-economy-transfer/PLANO_DEV_SENIOR_MASTER_TOKEN_ECONOMY_2026-06-30.md +171 -0
  56. package/docs/operations/token-economy-transfer/README_TRANSFERENCIA_TOKEN_ECONOMY.md +31 -0
  57. package/docs/planning/MENU_RUNTIME_CORRECTION_PLAN_2026-06-30.md +551 -0
  58. package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -85
  59. package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -139
  60. package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -105
  61. package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -181
  62. package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -59
  63. package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -181
  64. package/docs/planning/mcp-1.0.0/00_RESUMO_EXECUTIVO_AUDITORIA_MENU.md +118 -0
  65. package/docs/planning/mcp-1.0.0/01_MATRIZ_TESTES_MENU_E_RESULTADOS.md +250 -0
  66. package/docs/planning/mcp-1.0.0/02_PLANO_CORRECAO_ATIVAR_SKILL_APRENDIDA.md +200 -0
  67. package/docs/planning/mcp-1.0.0/03_PLANO_COMPATIBILIDADE_WINDOWS_LINUX_MACOS.md +167 -0
  68. package/docs/planning/mcp-1.0.0/04_PLANO_UI_CYBERPUNK_PIXEL_ART_E_PERFORMANCE.md +165 -0
  69. package/docs/planning/mcp-1.0.0/05_PROMPT_TASK_EXECUCAO_CORRECOES.md +151 -0
  70. package/docs/planning/mcp-1.0.0/06_CHECKLIST_REGRESSAO_PRE_RELEASE.md +159 -0
  71. package/docs/planning/mcp-1.0.0/07_RELATORIO_APLICACAO_CORRECOES_MENU_SKILL_MASTER.md +136 -0
  72. package/docs/planning/mcp-1.0.0/08_AUDITORIA_CRITICA_MENU_NOTA_E_DNA_REFINADO.md +184 -0
  73. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/00_PROMPT_TASK_MASTER_NOTA_10_10.md +103 -0
  74. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/01_PROMPT_TASK_FINE_HELIX_DNA.md +116 -0
  75. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/02_PROMPT_TASK_DNA_HERO_BOOT_AND_MOTION.md +109 -0
  76. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/03_PROMPT_TASK_MENU_UX_HELP_ERROR_COPY.md +99 -0
  77. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/04_PROMPT_TASK_EVIDENCE_RENDERER_1_0_0.md +97 -0
  78. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/05_PROMPT_TASK_CROSS_PLATFORM_UTF8_MOJIBAKE.md +99 -0
  79. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/06_PROMPT_TASK_VISUAL_REGRESSION_QA.md +105 -0
  80. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/07_PROMPT_TASK_PRE_RELEASE_SCORE_GATE_10_10.md +104 -0
  81. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/README_ORDEM_EXECUCAO_NOTA_10_10.md +77 -0
  82. package/docs/prompt-tasks/PROMPT_TASK_001_BOOTSTRAP_SKILL_MASTER_MCP.md +6 -6
  83. package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -6
  84. package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -6
  85. package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -6
  86. package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -6
  87. package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -83
  88. package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -88
  89. package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -156
  90. package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -105
  91. package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -119
  92. package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -120
  93. package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -123
  94. package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -114
  95. package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -157
  96. package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -127
  97. package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -107
  98. package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -80
  99. package/docs/prompt-tasks/PROMPT_TASK_019_TOKEN_ECONOMY_GLOBAL_SKILLS.md +56 -0
  100. package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -6
  101. package/docs/skill-candidates/v0.0.10/cli-creator/LICENSE.txt +201 -201
  102. package/docs/skill-candidates/v0.0.10/cli-creator/SKILL.md +160 -160
  103. package/docs/skill-candidates/v0.0.10/cli-creator/agents/openai.yaml +4 -4
  104. package/docs/skill-candidates/v0.0.10/cli-creator/references/agent-cli-patterns.md +154 -154
  105. package/docs/skill-candidates/v0.0.10/developer-workstation-ops/SKILL.md +32 -32
  106. package/docs/skill-candidates/v0.0.10/figma/LICENSE.txt +1 -1
  107. package/docs/skill-candidates/v0.0.10/figma/SKILL.md +42 -42
  108. package/docs/skill-candidates/v0.0.10/figma/agents/openai.yaml +14 -14
  109. package/docs/skill-candidates/v0.0.10/figma/assets/figma-small.svg +3 -3
  110. package/docs/skill-candidates/v0.0.10/figma/assets/icon.svg +28 -28
  111. package/docs/skill-candidates/v0.0.10/figma/references/figma-mcp-config.md +35 -35
  112. package/docs/skill-candidates/v0.0.10/figma/references/figma-tools-and-prompts.md +34 -34
  113. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/LICENSE.TXT +1 -1
  114. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/SKILL.md +349 -349
  115. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/agents/openai.yaml +14 -14
  116. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma-small.svg +3 -3
  117. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/icon.svg +28 -28
  118. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/references/mapping-checklist.md +7 -7
  119. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/scripts/normalize_node_id.py +25 -25
  120. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/LICENSE.TXT +1 -1
  121. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/SKILL.md +537 -537
  122. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/agents/openai.yaml +14 -14
  123. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma-small.svg +3 -3
  124. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/icon.svg +28 -28
  125. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/references/rule-template.md +15 -15
  126. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -9
  127. package/docs/skill-candidates/v0.0.10/figma-generate-design/LICENSE.TXT +1 -1
  128. package/docs/skill-candidates/v0.0.10/figma-generate-design/SKILL.md +341 -341
  129. package/docs/skill-candidates/v0.0.10/figma-generate-design/agents/openai.yaml +14 -14
  130. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma-small.svg +3 -3
  131. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/icon.svg +28 -28
  132. package/docs/skill-candidates/v0.0.10/figma-generate-design/maintainers.yml +1 -1
  133. package/docs/skill-candidates/v0.0.10/figma-generate-library/LICENSE.TXT +1 -1
  134. package/docs/skill-candidates/v0.0.10/figma-generate-library/SKILL.md +314 -314
  135. package/docs/skill-candidates/v0.0.10/figma-generate-library/agents/openai.yaml +14 -14
  136. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma-small.svg +3 -3
  137. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/icon.svg +28 -28
  138. package/docs/skill-candidates/v0.0.10/figma-generate-library/maintainers.yml +3 -3
  139. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/code-connect-setup.md +260 -260
  140. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/component-creation.md +1014 -1014
  141. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/discovery-phase.md +518 -518
  142. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/documentation-creation.md +834 -834
  143. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/error-recovery.md +540 -540
  144. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/naming-conventions.md +527 -527
  145. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/token-creation.md +962 -962
  146. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/bindVariablesToComponent.js +110 -110
  147. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/cleanupOrphans.js +127 -127
  148. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createComponentWithVariants.js +148 -148
  149. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createDocumentationPage.js +139 -139
  150. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js +108 -108
  151. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js +49 -49
  152. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js +121 -121
  153. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/rehydrateState.js +92 -92
  154. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/validateCreation.js +83 -83
  155. package/docs/skill-candidates/v0.0.10/figma-implement-design/LICENSE.txt +1 -1
  156. package/docs/skill-candidates/v0.0.10/figma-implement-design/SKILL.md +258 -258
  157. package/docs/skill-candidates/v0.0.10/figma-implement-design/agents/openai.yaml +14 -14
  158. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma-small.svg +3 -3
  159. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/icon.svg +28 -28
  160. package/docs/skill-candidates/v0.0.10/figma-use/LICENSE.TXT +1 -1
  161. package/docs/skill-candidates/v0.0.10/figma-use/SKILL.md +233 -233
  162. package/docs/skill-candidates/v0.0.10/figma-use/agents/openai.yaml +14 -14
  163. package/docs/skill-candidates/v0.0.10/figma-use/assets/figma-small.svg +3 -3
  164. package/docs/skill-candidates/v0.0.10/figma-use/assets/icon.svg +28 -28
  165. package/docs/skill-candidates/v0.0.10/figma-use/maintainers.yml +1 -1
  166. package/docs/skill-candidates/v0.0.10/figma-use/references/api-reference.md +301 -301
  167. package/docs/skill-candidates/v0.0.10/figma-use/references/common-patterns.md +512 -512
  168. package/docs/skill-candidates/v0.0.10/figma-use/references/component-patterns.md +488 -488
  169. package/docs/skill-candidates/v0.0.10/figma-use/references/effect-style-patterns.md +123 -123
  170. package/docs/skill-candidates/v0.0.10/figma-use/references/gotchas.md +599 -599
  171. package/docs/skill-candidates/v0.0.10/figma-use/references/maintainers.yml +12 -12
  172. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-patterns.md +513 -513
  173. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.d.ts +11293 -11293
  174. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.index.md +441 -441
  175. package/docs/skill-candidates/v0.0.10/figma-use/references/text-style-patterns.md +203 -203
  176. package/docs/skill-candidates/v0.0.10/figma-use/references/validation-and-recovery.md +109 -109
  177. package/docs/skill-candidates/v0.0.10/figma-use/references/variable-patterns.md +354 -354
  178. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/maintainers.yml +9 -9
  179. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--creating.md +17 -17
  180. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--using.md +17 -17
  181. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components.md +50 -50
  182. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-effect-styles.md +52 -52
  183. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-text-styles.md +90 -90
  184. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--creating.md +13 -13
  185. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--using.md +13 -13
  186. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables.md +64 -64
  187. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds.md +41 -41
  188. package/docs/skill-candidates/v0.0.10/frontend-design/LICENSE.txt +177 -177
  189. package/docs/skill-candidates/v0.0.10/frontend-design/SKILL.md +55 -55
  190. package/docs/skill-candidates/v0.0.10/frontend-ui-ux-systems/SKILL.md +32 -32
  191. package/docs/skill-candidates/v0.0.10/github/SKILL.md +74 -74
  192. package/docs/skill-candidates/v0.0.10/github/agents/openai.yaml +6 -6
  193. package/docs/skill-candidates/v0.0.10/github/assets/github-small.svg +3 -3
  194. package/docs/skill-candidates/v0.0.10/image-graphic-design-rendering/SKILL.md +28 -28
  195. package/docs/skill-candidates/v0.0.10/language-quality-pt-en-fr-it-ru/SKILL.md +28 -28
  196. package/docs/skill-candidates/v0.0.10/math-physics-reasoning/SKILL.md +28 -28
  197. package/docs/skill-candidates/v0.0.10/mcp-builder/LICENSE.txt +201 -201
  198. package/docs/skill-candidates/v0.0.10/mcp-builder/SKILL.md +236 -236
  199. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/evaluation.md +601 -601
  200. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/mcp_best_practices.md +249 -249
  201. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/node_mcp_server.md +969 -969
  202. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/python_mcp_server.md +718 -718
  203. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/connections.py +151 -151
  204. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/evaluation.py +373 -373
  205. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/example_evaluation.xml +22 -22
  206. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/requirements.txt +2 -2
  207. package/docs/skill-candidates/v0.0.10/mcp-client-readiness/SKILL.md +31 -31
  208. package/docs/skill-candidates/v0.0.10/openai-docs/LICENSE.txt +201 -201
  209. package/docs/skill-candidates/v0.0.10/openai-docs/SKILL.md +161 -161
  210. package/docs/skill-candidates/v0.0.10/openai-docs/agents/openai.yaml +14 -14
  211. package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai-small.svg +3 -3
  212. package/docs/skill-candidates/v0.0.10/openai-docs/references/latest-model.md +37 -37
  213. package/docs/skill-candidates/v0.0.10/openai-docs/references/prompting-guide.md +244 -244
  214. package/docs/skill-candidates/v0.0.10/openai-docs/references/upgrade-guide.md +181 -181
  215. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/fetch-codex-manual.mjs +598 -598
  216. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/resolve-latest-model-info.js +147 -147
  217. package/docs/skill-candidates/v0.0.10/playwright/NOTICE.txt +14 -14
  218. package/docs/skill-candidates/v0.0.10/playwright/SKILL.md +147 -147
  219. package/docs/skill-candidates/v0.0.10/playwright/agents/openai.yaml +6 -6
  220. package/docs/skill-candidates/v0.0.10/playwright/assets/playwright-small.svg +3 -3
  221. package/docs/skill-candidates/v0.0.10/playwright/references/cli.md +116 -116
  222. package/docs/skill-candidates/v0.0.10/playwright/references/workflows.md +95 -95
  223. package/docs/skill-candidates/v0.0.10/playwright/scripts/playwright_cli.sh +25 -25
  224. package/docs/skill-candidates/v0.0.10/polyglot-backend-engineering/SKILL.md +32 -32
  225. package/docs/skill-candidates/v0.0.10/screenshot/LICENSE.txt +201 -201
  226. package/docs/skill-candidates/v0.0.10/screenshot/SKILL.md +267 -267
  227. package/docs/skill-candidates/v0.0.10/screenshot/agents/openai.yaml +6 -6
  228. package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot-small.svg +5 -5
  229. package/docs/skill-candidates/v0.0.10/screenshot/scripts/ensure_macos_permissions.sh +54 -54
  230. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_display_info.swift +22 -22
  231. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_permissions.swift +40 -40
  232. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_window_info.swift +126 -126
  233. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.ps1 +163 -163
  234. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.py +585 -585
  235. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/SKILL.md +62 -62
  236. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/agents/openai.yaml +4 -4
  237. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/activation-policy.md +77 -77
  238. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/human-approval-policy.md +83 -83
  239. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/persona-dev-senior-master.md +46 -46
  240. package/docs/skill-candidates/v0.0.10/terminal-menu-operations/SKILL.md +30 -30
  241. package/docs/skill-candidates/v0.0.10/terminal-pixel-art-tui/SKILL.md +43 -43
  242. package/docs/skill-candidates/v0.0.10/webapp-testing/LICENSE.txt +201 -201
  243. package/docs/skill-candidates/v0.0.10/webapp-testing/SKILL.md +95 -95
  244. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/console_logging.py +34 -34
  245. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/element_discovery.py +39 -39
  246. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/static_html_automation.py +32 -32
  247. package/docs/skill-candidates/v0.0.10/webapp-testing/scripts/with_server.py +105 -105
  248. package/docs/skill-candidates/v0.0.10/winui-app/LICENSE.txt +201 -201
  249. package/docs/skill-candidates/v0.0.10/winui-app/SKILL.md +94 -94
  250. package/docs/skill-candidates/v0.0.10/winui-app/agents/openai.yaml +5 -5
  251. package/docs/skill-candidates/v0.0.10/winui-app/config.yaml +50 -50
  252. package/docs/skill-candidates/v0.0.10/winui-app/references/_sections.md +96 -96
  253. package/docs/skill-candidates/v0.0.10/winui-app/references/accessibility-input-and-localization.md +51 -51
  254. package/docs/skill-candidates/v0.0.10/winui-app/references/build-run-and-launch-verification.md +72 -72
  255. package/docs/skill-candidates/v0.0.10/winui-app/references/community-toolkit-controls-and-helpers.md +57 -57
  256. package/docs/skill-candidates/v0.0.10/winui-app/references/controls-layout-and-adaptive-ui.md +84 -84
  257. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-environment-audit-and-remediation.md +82 -82
  258. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-setup-and-project-selection.md +67 -67
  259. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-template-first-recovery.md +62 -62
  260. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-winui-app-structure.md +62 -62
  261. package/docs/skill-candidates/v0.0.10/winui-app/references/motion-animations-and-polish.md +45 -45
  262. package/docs/skill-candidates/v0.0.10/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -46
  263. package/docs/skill-candidates/v0.0.10/winui-app/references/sample-source-map.md +37 -37
  264. package/docs/skill-candidates/v0.0.10/winui-app/references/shell-navigation-and-windowing.md +67 -67
  265. package/docs/skill-candidates/v0.0.10/winui-app/references/styling-theming-materials-and-icons.md +71 -71
  266. package/docs/skill-candidates/v0.0.10/winui-app/references/testing-debugging-and-review-checklists.md +77 -77
  267. package/docs/skill-candidates/v0.0.10/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -52
  268. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/SKILL.md +398 -398
  269. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/common-patterns.md +330 -330
  270. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/complete-examples.md +871 -871
  271. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/component-patterns.md +501 -501
  272. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/data-fetching.md +766 -766
  273. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/file-organization.md +501 -501
  274. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/loading-and-error-states.md +500 -500
  275. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/performance.md +405 -405
  276. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/routing-guide.md +363 -363
  277. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/styling-guide.md +427 -427
  278. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/typescript-standards.md +417 -417
  279. package/docs/skill-candidates/v0.0.11/git-version-control-ops/SKILL.md +34 -34
  280. package/docs/skill-candidates/v0.0.11/go-engineering/SKILL.md +34 -34
  281. package/docs/skill-candidates/v0.0.11/java-engineering/SKILL.md +34 -34
  282. package/docs/skill-candidates/v0.0.11/javascript-engineering/SKILL.md +34 -34
  283. package/docs/skill-candidates/v0.0.11/json-contract-design/SKILL.md +34 -34
  284. package/docs/skill-candidates/v0.0.11/multi-client-mcp-ops/SKILL.md +36 -36
  285. package/docs/skill-candidates/v0.0.11/nextjs/SKILL.md +745 -745
  286. package/docs/skill-candidates/v0.0.11/nextjs/agents/openai.yaml +3 -3
  287. package/docs/skill-candidates/v0.0.11/nextjs/references/app-router-files.md +94 -94
  288. package/docs/skill-candidates/v0.0.11/python-engineering/SKILL.md +34 -34
  289. package/docs/skill-candidates/v0.0.11/ruby-engineering/SKILL.md +34 -34
  290. package/docs/skill-candidates/v0.0.11/senior-fullstack/SKILL.md +209 -209
  291. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/architecture_patterns.md +103 -103
  292. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/development_workflows.md +103 -103
  293. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/tech_stack_guide.md +103 -103
  294. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/code_quality_analyzer.py +114 -114
  295. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/fullstack_scaffolder.py +114 -114
  296. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/project_scaffolder.py +114 -114
  297. package/docs/skill-candidates/v0.0.11/shadcn/SKILL.md +573 -573
  298. package/docs/skill-candidates/v0.0.11/shadcn/agents/openai.yaml +3 -3
  299. package/docs/skill-candidates/v0.0.11/sql-postgresql-engineering/SKILL.md +34 -34
  300. package/docs/skill-candidates/v0.0.11/terminal-shell-ops/SKILL.md +34 -34
  301. package/docs/skill-candidates/v0.0.11/typescript-expert/SKILL.md +429 -429
  302. package/docs/skill-candidates/v0.0.11/typescript-expert/references/tsconfig-strict.json +91 -91
  303. package/docs/skill-candidates/v0.0.11/typescript-expert/references/typescript-cheatsheet.md +383 -383
  304. package/docs/skill-candidates/v0.0.11/typescript-expert/references/utility-types.ts +335 -335
  305. package/docs/skill-candidates/v0.0.11/typescript-expert/scripts/ts_diagnostic.py +203 -203
  306. package/docs/skill-candidates/v0.0.11/ui-component-primitives/SKILL.md +34 -34
  307. package/docs/skill-candidates/v0.0.11/web-mobile-design-systems/SKILL.md +34 -34
  308. package/docs/skill-candidates/v0.0.11/windows-linux-platform-ops/SKILL.md +34 -34
  309. package/docs/skill-candidates/v0.0.12/context-compression-handoff/SKILL.md +47 -0
  310. package/docs/skill-candidates/v0.0.12/csharp-senior-master-engineering/SKILL.md +32 -32
  311. package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -32
  312. package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -32
  313. package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -32
  314. package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -32
  315. package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -32
  316. package/docs/skill-candidates/v0.0.12/prompt-budget-gate/SKILL.md +46 -0
  317. package/docs/skill-candidates/v0.0.12/python-senior-master-engineering/SKILL.md +32 -32
  318. package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -32
  319. package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -32
  320. package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -48
  321. package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -31
  322. package/docs/skill-candidates/v0.0.12/token-economy-orchestrator/SKILL.md +38 -0
  323. package/docs/skill-candidates/v0.0.12/typescript-senior-master-engineering/SKILL.md +35 -35
  324. package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -32
  325. package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -41
  326. package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -31
  327. package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -31
  328. package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -28
  329. package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -29
  330. package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -28
  331. package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -40
  332. package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -32
  333. package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -31
  334. package/examples/client-configs/claude-code.commands.md +21 -21
  335. package/examples/client-configs/claude-code.project.mcp.json +18 -18
  336. package/examples/client-configs/claude-desktop.macos.json +18 -18
  337. package/examples/client-configs/claude-desktop.windows.json +20 -20
  338. package/examples/client-configs/codex.windows.toml +11 -11
  339. package/examples/client-configs/gemini-code-assist.intellij.mcp.json +18 -18
  340. package/examples/client-configs/gemini.linux.settings.json +21 -21
  341. package/examples/client-configs/gemini.windows.settings.json +23 -23
  342. package/examples/client-configs/generic-stdio.json +16 -16
  343. package/manifests/channels/beta.json +24 -24
  344. package/manifests/channels/stable.json +25 -25
  345. package/network/approved-skills.json +54 -54
  346. package/network/unapproved-skill-candidates.json +110 -110
  347. package/package.json +89 -86
  348. package/scripts/configure-private-registry.mjs +208 -208
  349. package/scripts/lib/private-registry.mjs +97 -97
  350. package/scripts/render-menu-evidence.mjs +196 -130
  351. package/scripts/verify-menu-actions.mjs +112 -107
  352. package/scripts/verify-menu-visual.mjs +90 -0
  353. package/sources.json +11 -11
@@ -1,341 +1,341 @@
1
- ---
2
- name: figma-generate-design
3
- description: "Use this skill alongside figma-use when the task involves translating an application page, view, or multi-section layout into Figma. Triggers: 'write to Figma', 'create in Figma from code', 'push page to Figma', 'take this app/page and build it in Figma', 'create a screen', 'build a landing page in Figma', 'update the Figma screen to match code'. This is the preferred workflow skill whenever the user wants to build or update a full page, screen, or view in Figma from code or a description. Discovers design system components, variables, and styles via search_design_system, imports them, and assembles screens incrementally section-by-section using design system tokens instead of hardcoded values."
4
- ---
5
-
6
- # Build / Update Screens from Design System
7
-
8
- Use this skill to create or update full-page screens in Figma by **reusing the published design system** — components, variables, and styles — rather than drawing primitives with hardcoded values. The key insight: the Figma file likely has a published design system with components, color/spacing variables, and text/effect styles that correspond to the codebase's UI components and tokens. Find and use those instead of drawing boxes with hex colors.
9
-
10
- **MANDATORY**: You MUST also load [figma-use](../figma-use/SKILL.md) before any `use_figma` call. That skill contains critical rules (color ranges, font loading, etc.) that apply to every script you write.
11
-
12
- **Always pass `skillNames: "figma-generate-design"` when calling `use_figma` as part of this skill.** This is a logging parameter — it does not affect execution.
13
-
14
- ## Skill Boundaries
15
-
16
- - Use this skill when the deliverable is a **Figma screen** (new or updated) composed of design system component instances.
17
- - If the user wants to generate **code from a Figma design**, switch to [figma-implement-design](../figma-implement-design/SKILL.md).
18
- - If the user wants to create **new reusable components or variants**, use [figma-use](../figma-use/SKILL.md) directly.
19
- - If the user wants to write **Code Connect mappings**, switch to [figma-code-connect-components](../figma-code-connect-components/SKILL.md).
20
-
21
- ## Prerequisites
22
-
23
- - Figma MCP server must be connected
24
- - The target Figma file must have a published design system with components (or access to a team library)
25
- - User should provide either:
26
- - A Figma file URL / file key to work in
27
- - Or context about which file to target (the agent can discover pages)
28
- - Source code or description of the screen to build/update
29
-
30
- ## Parallel Workflow with generate_figma_design (Web Apps Only)
31
-
32
- When building a screen from a **web app** that can be rendered in a browser, the best results come from running both approaches in parallel:
33
-
34
- 1. **In parallel:**
35
- - Start building the screen using this skill's workflow (use_figma + design system components)
36
- - Run `generate_figma_design` to capture a pixel-perfect screenshot of the running web app
37
- 2. **Once both complete:** Update the use_figma output to match the pixel-perfect layout from the `generate_figma_design` capture. The capture provides the exact spacing, sizing, and visual treatment to aim for, while your use_figma output has proper component instances linked to the design system.
38
- 3. **Once confirmed looking good:** Delete the `generate_figma_design` output — it was only used as a visual reference.
39
-
40
- This combines the best of both: `generate_figma_design` gives pixel-perfect layout accuracy, while use_figma gives proper design system component instances that stay linked and updatable.
41
-
42
- **This workflow only applies to web apps** where `generate_figma_design` can capture the running page. For non-web apps (iOS, Android, etc.) or when updating existing screens, use the standard workflow below.
43
-
44
- ## Required Workflow
45
-
46
- **Follow these steps in order. Do not skip steps.**
47
-
48
- ### Step 1: Understand the Screen
49
-
50
- Before touching Figma, understand what you're building:
51
-
52
- 1. If building from code, read the relevant source files to understand the page structure, sections, and which components are used.
53
- 2. Identify the major sections of the screen (e.g., Header, Hero, Content Panels, Pricing Grid, FAQ Accordion, Footer).
54
- 3. For each section, list the UI components involved (buttons, inputs, cards, navigation pills, accordions, etc.).
55
-
56
- ### Step 2: Discover Design System — Components, Variables, and Styles
57
-
58
- You need three things from the design system: **components** (buttons, cards, etc.), **variables** (colors, spacing, radii), and **styles** (text styles, effect styles like shadows). Don't hardcode hex colors or pixel values when design system tokens exist.
59
-
60
- #### 2a: Discover components
61
-
62
- **Preferred: inspect existing screens first.** If the target file already contains screens using the same design system, skip `search_design_system` and inspect existing instances directly. A single `use_figma` call that walks an existing frame's instances gives you an exact, authoritative component map:
63
-
64
- ```js
65
- const frame = figma.currentPage.findOne(n => n.name === "Existing Screen");
66
- const uniqueSets = new Map();
67
- frame.findAll(n => n.type === "INSTANCE").forEach(inst => {
68
- const mc = inst.mainComponent;
69
- const cs = mc?.parent?.type === "COMPONENT_SET" ? mc.parent : null;
70
- const key = cs ? cs.key : mc?.key;
71
- const name = cs ? cs.name : mc?.name;
72
- if (key && !uniqueSets.has(key)) {
73
- uniqueSets.set(key, { name, key, isSet: !!cs, sampleVariant: mc.name });
74
- }
75
- });
76
- return [...uniqueSets.values()];
77
- ```
78
-
79
- Only fall back to `search_design_system` when the file has no existing screens to reference. When using it, **search broadly** — try multiple terms and synonyms (e.g., "button", "input", "nav", "card", "accordion", "header", "footer", "tag", "avatar", "toggle", "icon", etc.). Use `includeComponents: true` to focus on components.
80
-
81
- **Include component properties** in your map — you need to know which TEXT properties each component exposes for text overrides. Create a temporary instance, read its `componentProperties` (and those of nested instances), then remove the temp instance.
82
-
83
- Example component map with property info:
84
-
85
- ```
86
- Component Map:
87
- - Button → key: "abc123", type: COMPONENT_SET
88
- Properties: { "Label#2:0": TEXT, "Has Icon#4:64": BOOLEAN }
89
- - PricingCard → key: "ghi789", type: COMPONENT_SET
90
- Properties: { "Device": VARIANT, "Variant": VARIANT }
91
- Nested "Text Heading" has: { "Text#2104:5": TEXT }
92
- Nested "Button" has: { "Label#2:0": TEXT }
93
- ```
94
-
95
- #### 2b: Discover variables (colors, spacing, radii)
96
-
97
- **Inspect existing screens first** (same as components). Or use `search_design_system` with `includeVariables: true`.
98
-
99
- > **WARNING: Two different variable discovery methods — do not confuse them.**
100
- >
101
- > - `use_figma` with `figma.variables.getLocalVariableCollectionsAsync()` — returns **only local variables defined in the current file**. If this returns empty, it does **not** mean no variables exist. Remote/published library variables are invisible to this API.
102
- > - `search_design_system` with `includeVariables: true` — searches across **all linked libraries**, including remote and published ones. This is the correct tool for discovering design system variables.
103
- >
104
- > **Never conclude "no variables exist" based solely on `getLocalVariableCollectionsAsync()` returning empty.** Always also run `search_design_system` with `includeVariables: true` to check for library variables before deciding to create your own.
105
-
106
- **Query strategy:** `search_design_system` matches against **variable names** (e.g., "Gray/gray-9", "core/gray/100", "space/400"), not categories. Run multiple short, simple queries in parallel rather than one compound query:
107
-
108
- - **Primitive colors:** "gray", "red", "blue", "green", "white", "brand"
109
- - **Semantic colors:** "background", "foreground", "border", "surface", "text"
110
- - **Spacing/sizing:** "space", "radius", "gap", "padding"
111
-
112
- If initial searches return empty, try shorter fragments or different naming conventions — libraries vary widely ("grey" vs "gray", "spacing" vs "space", "color/bg" vs "background").
113
-
114
- Inspect an existing screen's bound variables for the most authoritative results:
115
-
116
- ```js
117
- const frame = figma.currentPage.findOne(n => n.name === "Existing Screen");
118
- const varMap = new Map();
119
- frame.findAll(() => true).forEach(node => {
120
- const bv = node.boundVariables;
121
- if (!bv) return;
122
- for (const [prop, binding] of Object.entries(bv)) {
123
- const bindings = Array.isArray(binding) ? binding : [binding];
124
- for (const b of bindings) {
125
- if (b?.id && !varMap.has(b.id)) {
126
- const v = await figma.variables.getVariableByIdAsync(b.id);
127
- if (v) varMap.set(b.id, { name: v.name, id: v.id, key: v.key, type: v.resolvedType, remote: v.remote });
128
- }
129
- }
130
- }
131
- });
132
- return [...varMap.values()];
133
- ```
134
-
135
- For library variables (remote = true), import them by key with `figma.variables.importVariableByKeyAsync(key)`. For local variables, use `figma.variables.getVariableByIdAsync(id)` directly.
136
-
137
- See [variable-patterns.md](../figma-use/references/variable-patterns.md) for binding patterns.
138
-
139
- #### 2c: Discover styles (text styles, effect styles)
140
-
141
- Search for styles using `search_design_system` with `includeStyles: true` and terms like "heading", "body", "shadow", "elevation". Or inspect what an existing screen uses:
142
-
143
- ```js
144
- const frame = figma.currentPage.findOne(n => n.name === "Existing Screen");
145
- const styles = { text: new Map(), effect: new Map() };
146
- frame.findAll(() => true).forEach(node => {
147
- if ('textStyleId' in node && node.textStyleId) {
148
- const s = figma.getStyleById(node.textStyleId);
149
- if (s) styles.text.set(s.id, { name: s.name, id: s.id, key: s.key });
150
- }
151
- if ('effectStyleId' in node && node.effectStyleId) {
152
- const s = figma.getStyleById(node.effectStyleId);
153
- if (s) styles.effect.set(s.id, { name: s.name, id: s.id, key: s.key });
154
- }
155
- });
156
- return {
157
- textStyles: [...styles.text.values()],
158
- effectStyles: [...styles.effect.values()]
159
- };
160
- ```
161
-
162
- Import library styles with `figma.importStyleByKeyAsync(key)`, then apply with `node.textStyleId = style.id` or `node.effectStyleId = style.id`.
163
-
164
- See [text-style-patterns.md](../figma-use/references/text-style-patterns.md) and [effect-style-patterns.md](../figma-use/references/effect-style-patterns.md) for details.
165
-
166
- ### Step 3: Create the Page Wrapper Frame First
167
-
168
- **Do NOT build sections as top-level page children and reparent them later** — moving nodes across `use_figma` calls with `appendChild()` silently fails and produces orphaned frames. Instead, create the wrapper first, then build each section directly inside it.
169
-
170
- Create the page wrapper in its own `use_figma` call. Position it away from existing content and return its ID:
171
-
172
- ```js
173
- // Find clear space
174
- let maxX = 0;
175
- for (const child of figma.currentPage.children) {
176
- maxX = Math.max(maxX, child.x + child.width);
177
- }
178
-
179
- const wrapper = figma.createFrame();
180
- wrapper.name = "Homepage";
181
- wrapper.layoutMode = "VERTICAL";
182
- wrapper.primaryAxisAlignItems = "CENTER";
183
- wrapper.counterAxisAlignItems = "CENTER";
184
- wrapper.resize(1440, 100);
185
- wrapper.layoutSizingHorizontal = "FIXED";
186
- wrapper.layoutSizingVertical = "HUG";
187
- wrapper.x = maxX + 200;
188
- wrapper.y = 0;
189
-
190
- return { success: true, wrapperId: wrapper.id };
191
- ```
192
-
193
- ### Step 4: Build Each Section Inside the Wrapper
194
-
195
- **This is the most important step.** Build one section at a time, each in its own `use_figma` call. At the start of each script, fetch the wrapper by ID and append new content directly to it.
196
-
197
- ```js
198
- const createdNodeIds = [];
199
- const wrapper = await figma.getNodeByIdAsync("WRAPPER_ID_FROM_STEP_3");
200
-
201
- // Import design system components by key
202
- const buttonSet = await figma.importComponentSetByKeyAsync("BUTTON_SET_KEY");
203
- const primaryButton = buttonSet.children.find(c =>
204
- c.type === "COMPONENT" && c.name.includes("variant=primary")
205
- ) || buttonSet.defaultVariant;
206
-
207
- // Import design system variables for colors and spacing
208
- const bgColorVar = await figma.variables.importVariableByKeyAsync("BG_COLOR_VAR_KEY");
209
- const spacingVar = await figma.variables.importVariableByKeyAsync("SPACING_VAR_KEY");
210
-
211
- // Build section frame with variable bindings (not hardcoded values)
212
- const section = figma.createFrame();
213
- section.name = "Header";
214
- section.layoutMode = "HORIZONTAL";
215
- section.setBoundVariable("paddingLeft", spacingVar);
216
- section.setBoundVariable("paddingRight", spacingVar);
217
- const bgPaint = figma.variables.setBoundVariableForPaint(
218
- { type: 'SOLID', color: { r: 0, g: 0, b: 0 } }, 'color', bgColorVar
219
- );
220
- section.fills = [bgPaint];
221
-
222
- // Import and apply text/effect styles
223
- const shadowStyle = await figma.importStyleByKeyAsync("SHADOW_STYLE_KEY");
224
- section.effectStyleId = shadowStyle.id;
225
-
226
- // Create component instances inside the section
227
- const btnInstance = primaryButton.createInstance();
228
- section.appendChild(btnInstance);
229
- createdNodeIds.push(btnInstance.id);
230
-
231
- // Append section to wrapper
232
- wrapper.appendChild(section);
233
- section.layoutSizingHorizontal = "FILL"; // AFTER appending
234
-
235
- createdNodeIds.push(section.id);
236
- return { success: true, createdNodeIds };
237
- ```
238
-
239
- After each section, validate with `get_screenshot` before moving on. Look closely for cropped/clipped text (line heights cutting off content) and overlapping elements — these are the most common issues and easy to miss at a glance.
240
-
241
- #### Override instance text with setProperties()
242
-
243
- Component instances ship with placeholder text ("Title", "Heading", "Button"). Use the component property keys you discovered in Step 2 to override them with `setProperties()` — this is more reliable than direct `node.characters` manipulation. See [component-patterns.md](../figma-use/references/component-patterns.md#overriding-text-in-a-component-instance) for the full pattern.
244
-
245
- For nested instances that expose their own TEXT properties, call `setProperties()` on the nested instance:
246
-
247
- ```js
248
- const nestedHeading = cardInstance.findOne(n => n.type === "INSTANCE" && n.name === "Text Heading");
249
- if (nestedHeading) {
250
- nestedHeading.setProperties({ "Text#2104:5": "Actual heading from source code" });
251
- }
252
- ```
253
-
254
- Only fall back to direct `node.characters` for text that is NOT managed by any component property.
255
-
256
- #### Read source code defaults carefully
257
-
258
- When translating code components to Figma instances, check the component's default prop values in the source code, not just what's explicitly passed. For example, `<Button size="small">Register</Button>` with no variant prop — check the component definition to find `variant = "primary"` as the default. Selecting the wrong variant (e.g., Neutral instead of Primary) produces a visually incorrect result that's easy to miss.
259
-
260
- #### What to build manually vs. import from design system
261
-
262
- | Build manually | Import from design system |
263
- |----------------|--------------------------|
264
- | Page wrapper frame | **Components**: buttons, cards, inputs, nav, etc. |
265
- | Section container frames | **Variables**: colors (fills, strokes), spacing (padding, gap), radii |
266
- | Layout grids (rows, columns) | **Text styles**: heading, body, caption, etc. |
267
- | | **Effect styles**: shadows, blurs, etc. |
268
-
269
- **Never hardcode hex colors or pixel spacing** when a design system variable exists. Use `setBoundVariable` for spacing/radii and `setBoundVariableForPaint` for colors. Apply text styles with `node.textStyleId` and effect styles with `node.effectStyleId`.
270
-
271
- ### Step 5: Validate the Full Screen
272
-
273
- After composing all sections, call `get_screenshot` on the full page frame and compare against the source. Fix any issues with targeted `use_figma` calls — don't rebuild the entire screen.
274
-
275
- **Screenshot individual sections, not just the full page.** A full-page screenshot at reduced resolution hides text truncation, wrong colors, and placeholder text that hasn't been overridden. Take a screenshot of each section by node ID to catch:
276
- - **Cropped/clipped text** — line heights or frame sizing cutting off descenders, ascenders, or entire lines
277
- - **Overlapping content** — elements stacking on top of each other due to incorrect sizing or missing auto-layout
278
- - Placeholder text still showing ("Title", "Heading", "Button")
279
- - Truncated content from layout sizing bugs
280
- - Wrong component variants (e.g., Neutral vs Primary button)
281
-
282
- ### Step 6: Updating an Existing Screen
283
-
284
- When updating rather than creating from scratch:
285
-
286
- 1. Use `get_metadata` to inspect the existing screen structure.
287
- 2. Identify which sections need updating and which can stay.
288
- 3. For each section that needs changes:
289
- - Locate the existing nodes by ID or name
290
- - Swap component instances if the design system component changed
291
- - Update text content, variant properties, or layout as needed
292
- - Remove deprecated sections
293
- - Add new sections
294
- 4. Validate with `get_screenshot` after each modification.
295
-
296
- ```js
297
- // Example: Swap a button variant in an existing screen
298
- const existingButton = await figma.getNodeByIdAsync("EXISTING_BUTTON_INSTANCE_ID");
299
- if (existingButton && existingButton.type === "INSTANCE") {
300
- // Import the updated component
301
- const buttonSet = await figma.importComponentSetByKeyAsync("BUTTON_SET_KEY");
302
- const newVariant = buttonSet.children.find(c =>
303
- c.name.includes("variant=primary") && c.name.includes("size=lg")
304
- ) || buttonSet.defaultVariant;
305
- existingButton.swapComponent(newVariant);
306
- }
307
- return { success: true, mutatedNodeIds: [existingButton.id] };
308
- ```
309
-
310
- ## Reference Docs
311
-
312
- For detailed API patterns and gotchas, load these from the [figma-use](../figma-use/SKILL.md) references as needed:
313
-
314
- - [component-patterns.md](../figma-use/references/component-patterns.md) — importing by key, finding variants, setProperties, text overrides, working with instances
315
- - [variable-patterns.md](../figma-use/references/variable-patterns.md) — creating/binding variables, importing library variables, scopes, aliasing, discovering existing variables
316
- - [text-style-patterns.md](../figma-use/references/text-style-patterns.md) — creating/applying text styles, importing library text styles, type ramps
317
- - [effect-style-patterns.md](../figma-use/references/effect-style-patterns.md) — creating/applying effect styles (shadows), importing library effect styles
318
- - [gotchas.md](../figma-use/references/gotchas.md) — layout pitfalls (HUG/FILL interactions, counterAxisAlignItems, sizing order), paint/color issues, page context resets
319
-
320
- ## Error Recovery
321
-
322
- Follow the error recovery process from [figma-use](../figma-use/SKILL.md#6-error-recovery--self-correction):
323
-
324
- 1. **STOP** on error — do not retry immediately.
325
- 2. **Read the error message carefully** to understand what went wrong.
326
- 3. If the error is unclear, call `get_metadata` or `get_screenshot` to inspect the current file state.
327
- 4. **Fix the script** based on the error message.
328
- 5. **Retry** the corrected script — this is safe because failed scripts are atomic (nothing is created if a script errors).
329
-
330
- Because this skill works incrementally (one section per call), errors are naturally scoped to a single section. Previous sections from successful calls remain intact.
331
-
332
- ## Best Practices
333
-
334
- - **Always search before building.** The design system likely has the component, variable, or style you need. Manual construction and hardcoded values should be the exception, not the rule.
335
- - **Search broadly.** Try synonyms and partial terms. A "NavigationPill" might be found under "pill", "nav", "tab", or "chip". For variables, search "color", "spacing", "radius", etc.
336
- - **Prefer design system tokens over hardcoded values.** Use variable bindings for colors, spacing, and radii. Use text styles for typography. Use effect styles for shadows. This keeps the screen linked to the design system.
337
- - **Prefer component instances over manual builds.** Instances stay linked to the source component and update automatically when the design system evolves.
338
- - **Work section by section.** Never build more than one major section per `use_figma` call.
339
- - **Return node IDs from every call.** You'll need them to compose sections and for error recovery.
340
- - **Validate visually after each section.** Use `get_screenshot` to catch issues early.
341
- - **Match existing conventions.** If the file already has screens, match their naming, sizing, and layout patterns.
1
+ ---
2
+ name: figma-generate-design
3
+ description: "Use this skill alongside figma-use when the task involves translating an application page, view, or multi-section layout into Figma. Triggers: 'write to Figma', 'create in Figma from code', 'push page to Figma', 'take this app/page and build it in Figma', 'create a screen', 'build a landing page in Figma', 'update the Figma screen to match code'. This is the preferred workflow skill whenever the user wants to build or update a full page, screen, or view in Figma from code or a description. Discovers design system components, variables, and styles via search_design_system, imports them, and assembles screens incrementally section-by-section using design system tokens instead of hardcoded values."
4
+ ---
5
+
6
+ # Build / Update Screens from Design System
7
+
8
+ Use this skill to create or update full-page screens in Figma by **reusing the published design system** — components, variables, and styles — rather than drawing primitives with hardcoded values. The key insight: the Figma file likely has a published design system with components, color/spacing variables, and text/effect styles that correspond to the codebase's UI components and tokens. Find and use those instead of drawing boxes with hex colors.
9
+
10
+ **MANDATORY**: You MUST also load [figma-use](../figma-use/SKILL.md) before any `use_figma` call. That skill contains critical rules (color ranges, font loading, etc.) that apply to every script you write.
11
+
12
+ **Always pass `skillNames: "figma-generate-design"` when calling `use_figma` as part of this skill.** This is a logging parameter — it does not affect execution.
13
+
14
+ ## Skill Boundaries
15
+
16
+ - Use this skill when the deliverable is a **Figma screen** (new or updated) composed of design system component instances.
17
+ - If the user wants to generate **code from a Figma design**, switch to [figma-implement-design](../figma-implement-design/SKILL.md).
18
+ - If the user wants to create **new reusable components or variants**, use [figma-use](../figma-use/SKILL.md) directly.
19
+ - If the user wants to write **Code Connect mappings**, switch to [figma-code-connect-components](../figma-code-connect-components/SKILL.md).
20
+
21
+ ## Prerequisites
22
+
23
+ - Figma MCP server must be connected
24
+ - The target Figma file must have a published design system with components (or access to a team library)
25
+ - User should provide either:
26
+ - A Figma file URL / file key to work in
27
+ - Or context about which file to target (the agent can discover pages)
28
+ - Source code or description of the screen to build/update
29
+
30
+ ## Parallel Workflow with generate_figma_design (Web Apps Only)
31
+
32
+ When building a screen from a **web app** that can be rendered in a browser, the best results come from running both approaches in parallel:
33
+
34
+ 1. **In parallel:**
35
+ - Start building the screen using this skill's workflow (use_figma + design system components)
36
+ - Run `generate_figma_design` to capture a pixel-perfect screenshot of the running web app
37
+ 2. **Once both complete:** Update the use_figma output to match the pixel-perfect layout from the `generate_figma_design` capture. The capture provides the exact spacing, sizing, and visual treatment to aim for, while your use_figma output has proper component instances linked to the design system.
38
+ 3. **Once confirmed looking good:** Delete the `generate_figma_design` output — it was only used as a visual reference.
39
+
40
+ This combines the best of both: `generate_figma_design` gives pixel-perfect layout accuracy, while use_figma gives proper design system component instances that stay linked and updatable.
41
+
42
+ **This workflow only applies to web apps** where `generate_figma_design` can capture the running page. For non-web apps (iOS, Android, etc.) or when updating existing screens, use the standard workflow below.
43
+
44
+ ## Required Workflow
45
+
46
+ **Follow these steps in order. Do not skip steps.**
47
+
48
+ ### Step 1: Understand the Screen
49
+
50
+ Before touching Figma, understand what you're building:
51
+
52
+ 1. If building from code, read the relevant source files to understand the page structure, sections, and which components are used.
53
+ 2. Identify the major sections of the screen (e.g., Header, Hero, Content Panels, Pricing Grid, FAQ Accordion, Footer).
54
+ 3. For each section, list the UI components involved (buttons, inputs, cards, navigation pills, accordions, etc.).
55
+
56
+ ### Step 2: Discover Design System — Components, Variables, and Styles
57
+
58
+ You need three things from the design system: **components** (buttons, cards, etc.), **variables** (colors, spacing, radii), and **styles** (text styles, effect styles like shadows). Don't hardcode hex colors or pixel values when design system tokens exist.
59
+
60
+ #### 2a: Discover components
61
+
62
+ **Preferred: inspect existing screens first.** If the target file already contains screens using the same design system, skip `search_design_system` and inspect existing instances directly. A single `use_figma` call that walks an existing frame's instances gives you an exact, authoritative component map:
63
+
64
+ ```js
65
+ const frame = figma.currentPage.findOne(n => n.name === "Existing Screen");
66
+ const uniqueSets = new Map();
67
+ frame.findAll(n => n.type === "INSTANCE").forEach(inst => {
68
+ const mc = inst.mainComponent;
69
+ const cs = mc?.parent?.type === "COMPONENT_SET" ? mc.parent : null;
70
+ const key = cs ? cs.key : mc?.key;
71
+ const name = cs ? cs.name : mc?.name;
72
+ if (key && !uniqueSets.has(key)) {
73
+ uniqueSets.set(key, { name, key, isSet: !!cs, sampleVariant: mc.name });
74
+ }
75
+ });
76
+ return [...uniqueSets.values()];
77
+ ```
78
+
79
+ Only fall back to `search_design_system` when the file has no existing screens to reference. When using it, **search broadly** — try multiple terms and synonyms (e.g., "button", "input", "nav", "card", "accordion", "header", "footer", "tag", "avatar", "toggle", "icon", etc.). Use `includeComponents: true` to focus on components.
80
+
81
+ **Include component properties** in your map — you need to know which TEXT properties each component exposes for text overrides. Create a temporary instance, read its `componentProperties` (and those of nested instances), then remove the temp instance.
82
+
83
+ Example component map with property info:
84
+
85
+ ```
86
+ Component Map:
87
+ - Button → key: "abc123", type: COMPONENT_SET
88
+ Properties: { "Label#2:0": TEXT, "Has Icon#4:64": BOOLEAN }
89
+ - PricingCard → key: "ghi789", type: COMPONENT_SET
90
+ Properties: { "Device": VARIANT, "Variant": VARIANT }
91
+ Nested "Text Heading" has: { "Text#2104:5": TEXT }
92
+ Nested "Button" has: { "Label#2:0": TEXT }
93
+ ```
94
+
95
+ #### 2b: Discover variables (colors, spacing, radii)
96
+
97
+ **Inspect existing screens first** (same as components). Or use `search_design_system` with `includeVariables: true`.
98
+
99
+ > **WARNING: Two different variable discovery methods — do not confuse them.**
100
+ >
101
+ > - `use_figma` with `figma.variables.getLocalVariableCollectionsAsync()` — returns **only local variables defined in the current file**. If this returns empty, it does **not** mean no variables exist. Remote/published library variables are invisible to this API.
102
+ > - `search_design_system` with `includeVariables: true` — searches across **all linked libraries**, including remote and published ones. This is the correct tool for discovering design system variables.
103
+ >
104
+ > **Never conclude "no variables exist" based solely on `getLocalVariableCollectionsAsync()` returning empty.** Always also run `search_design_system` with `includeVariables: true` to check for library variables before deciding to create your own.
105
+
106
+ **Query strategy:** `search_design_system` matches against **variable names** (e.g., "Gray/gray-9", "core/gray/100", "space/400"), not categories. Run multiple short, simple queries in parallel rather than one compound query:
107
+
108
+ - **Primitive colors:** "gray", "red", "blue", "green", "white", "brand"
109
+ - **Semantic colors:** "background", "foreground", "border", "surface", "text"
110
+ - **Spacing/sizing:** "space", "radius", "gap", "padding"
111
+
112
+ If initial searches return empty, try shorter fragments or different naming conventions — libraries vary widely ("grey" vs "gray", "spacing" vs "space", "color/bg" vs "background").
113
+
114
+ Inspect an existing screen's bound variables for the most authoritative results:
115
+
116
+ ```js
117
+ const frame = figma.currentPage.findOne(n => n.name === "Existing Screen");
118
+ const varMap = new Map();
119
+ frame.findAll(() => true).forEach(node => {
120
+ const bv = node.boundVariables;
121
+ if (!bv) return;
122
+ for (const [prop, binding] of Object.entries(bv)) {
123
+ const bindings = Array.isArray(binding) ? binding : [binding];
124
+ for (const b of bindings) {
125
+ if (b?.id && !varMap.has(b.id)) {
126
+ const v = await figma.variables.getVariableByIdAsync(b.id);
127
+ if (v) varMap.set(b.id, { name: v.name, id: v.id, key: v.key, type: v.resolvedType, remote: v.remote });
128
+ }
129
+ }
130
+ }
131
+ });
132
+ return [...varMap.values()];
133
+ ```
134
+
135
+ For library variables (remote = true), import them by key with `figma.variables.importVariableByKeyAsync(key)`. For local variables, use `figma.variables.getVariableByIdAsync(id)` directly.
136
+
137
+ See [variable-patterns.md](../figma-use/references/variable-patterns.md) for binding patterns.
138
+
139
+ #### 2c: Discover styles (text styles, effect styles)
140
+
141
+ Search for styles using `search_design_system` with `includeStyles: true` and terms like "heading", "body", "shadow", "elevation". Or inspect what an existing screen uses:
142
+
143
+ ```js
144
+ const frame = figma.currentPage.findOne(n => n.name === "Existing Screen");
145
+ const styles = { text: new Map(), effect: new Map() };
146
+ frame.findAll(() => true).forEach(node => {
147
+ if ('textStyleId' in node && node.textStyleId) {
148
+ const s = figma.getStyleById(node.textStyleId);
149
+ if (s) styles.text.set(s.id, { name: s.name, id: s.id, key: s.key });
150
+ }
151
+ if ('effectStyleId' in node && node.effectStyleId) {
152
+ const s = figma.getStyleById(node.effectStyleId);
153
+ if (s) styles.effect.set(s.id, { name: s.name, id: s.id, key: s.key });
154
+ }
155
+ });
156
+ return {
157
+ textStyles: [...styles.text.values()],
158
+ effectStyles: [...styles.effect.values()]
159
+ };
160
+ ```
161
+
162
+ Import library styles with `figma.importStyleByKeyAsync(key)`, then apply with `node.textStyleId = style.id` or `node.effectStyleId = style.id`.
163
+
164
+ See [text-style-patterns.md](../figma-use/references/text-style-patterns.md) and [effect-style-patterns.md](../figma-use/references/effect-style-patterns.md) for details.
165
+
166
+ ### Step 3: Create the Page Wrapper Frame First
167
+
168
+ **Do NOT build sections as top-level page children and reparent them later** — moving nodes across `use_figma` calls with `appendChild()` silently fails and produces orphaned frames. Instead, create the wrapper first, then build each section directly inside it.
169
+
170
+ Create the page wrapper in its own `use_figma` call. Position it away from existing content and return its ID:
171
+
172
+ ```js
173
+ // Find clear space
174
+ let maxX = 0;
175
+ for (const child of figma.currentPage.children) {
176
+ maxX = Math.max(maxX, child.x + child.width);
177
+ }
178
+
179
+ const wrapper = figma.createFrame();
180
+ wrapper.name = "Homepage";
181
+ wrapper.layoutMode = "VERTICAL";
182
+ wrapper.primaryAxisAlignItems = "CENTER";
183
+ wrapper.counterAxisAlignItems = "CENTER";
184
+ wrapper.resize(1440, 100);
185
+ wrapper.layoutSizingHorizontal = "FIXED";
186
+ wrapper.layoutSizingVertical = "HUG";
187
+ wrapper.x = maxX + 200;
188
+ wrapper.y = 0;
189
+
190
+ return { success: true, wrapperId: wrapper.id };
191
+ ```
192
+
193
+ ### Step 4: Build Each Section Inside the Wrapper
194
+
195
+ **This is the most important step.** Build one section at a time, each in its own `use_figma` call. At the start of each script, fetch the wrapper by ID and append new content directly to it.
196
+
197
+ ```js
198
+ const createdNodeIds = [];
199
+ const wrapper = await figma.getNodeByIdAsync("WRAPPER_ID_FROM_STEP_3");
200
+
201
+ // Import design system components by key
202
+ const buttonSet = await figma.importComponentSetByKeyAsync("BUTTON_SET_KEY");
203
+ const primaryButton = buttonSet.children.find(c =>
204
+ c.type === "COMPONENT" && c.name.includes("variant=primary")
205
+ ) || buttonSet.defaultVariant;
206
+
207
+ // Import design system variables for colors and spacing
208
+ const bgColorVar = await figma.variables.importVariableByKeyAsync("BG_COLOR_VAR_KEY");
209
+ const spacingVar = await figma.variables.importVariableByKeyAsync("SPACING_VAR_KEY");
210
+
211
+ // Build section frame with variable bindings (not hardcoded values)
212
+ const section = figma.createFrame();
213
+ section.name = "Header";
214
+ section.layoutMode = "HORIZONTAL";
215
+ section.setBoundVariable("paddingLeft", spacingVar);
216
+ section.setBoundVariable("paddingRight", spacingVar);
217
+ const bgPaint = figma.variables.setBoundVariableForPaint(
218
+ { type: 'SOLID', color: { r: 0, g: 0, b: 0 } }, 'color', bgColorVar
219
+ );
220
+ section.fills = [bgPaint];
221
+
222
+ // Import and apply text/effect styles
223
+ const shadowStyle = await figma.importStyleByKeyAsync("SHADOW_STYLE_KEY");
224
+ section.effectStyleId = shadowStyle.id;
225
+
226
+ // Create component instances inside the section
227
+ const btnInstance = primaryButton.createInstance();
228
+ section.appendChild(btnInstance);
229
+ createdNodeIds.push(btnInstance.id);
230
+
231
+ // Append section to wrapper
232
+ wrapper.appendChild(section);
233
+ section.layoutSizingHorizontal = "FILL"; // AFTER appending
234
+
235
+ createdNodeIds.push(section.id);
236
+ return { success: true, createdNodeIds };
237
+ ```
238
+
239
+ After each section, validate with `get_screenshot` before moving on. Look closely for cropped/clipped text (line heights cutting off content) and overlapping elements — these are the most common issues and easy to miss at a glance.
240
+
241
+ #### Override instance text with setProperties()
242
+
243
+ Component instances ship with placeholder text ("Title", "Heading", "Button"). Use the component property keys you discovered in Step 2 to override them with `setProperties()` — this is more reliable than direct `node.characters` manipulation. See [component-patterns.md](../figma-use/references/component-patterns.md#overriding-text-in-a-component-instance) for the full pattern.
244
+
245
+ For nested instances that expose their own TEXT properties, call `setProperties()` on the nested instance:
246
+
247
+ ```js
248
+ const nestedHeading = cardInstance.findOne(n => n.type === "INSTANCE" && n.name === "Text Heading");
249
+ if (nestedHeading) {
250
+ nestedHeading.setProperties({ "Text#2104:5": "Actual heading from source code" });
251
+ }
252
+ ```
253
+
254
+ Only fall back to direct `node.characters` for text that is NOT managed by any component property.
255
+
256
+ #### Read source code defaults carefully
257
+
258
+ When translating code components to Figma instances, check the component's default prop values in the source code, not just what's explicitly passed. For example, `<Button size="small">Register</Button>` with no variant prop — check the component definition to find `variant = "primary"` as the default. Selecting the wrong variant (e.g., Neutral instead of Primary) produces a visually incorrect result that's easy to miss.
259
+
260
+ #### What to build manually vs. import from design system
261
+
262
+ | Build manually | Import from design system |
263
+ |----------------|--------------------------|
264
+ | Page wrapper frame | **Components**: buttons, cards, inputs, nav, etc. |
265
+ | Section container frames | **Variables**: colors (fills, strokes), spacing (padding, gap), radii |
266
+ | Layout grids (rows, columns) | **Text styles**: heading, body, caption, etc. |
267
+ | | **Effect styles**: shadows, blurs, etc. |
268
+
269
+ **Never hardcode hex colors or pixel spacing** when a design system variable exists. Use `setBoundVariable` for spacing/radii and `setBoundVariableForPaint` for colors. Apply text styles with `node.textStyleId` and effect styles with `node.effectStyleId`.
270
+
271
+ ### Step 5: Validate the Full Screen
272
+
273
+ After composing all sections, call `get_screenshot` on the full page frame and compare against the source. Fix any issues with targeted `use_figma` calls — don't rebuild the entire screen.
274
+
275
+ **Screenshot individual sections, not just the full page.** A full-page screenshot at reduced resolution hides text truncation, wrong colors, and placeholder text that hasn't been overridden. Take a screenshot of each section by node ID to catch:
276
+ - **Cropped/clipped text** — line heights or frame sizing cutting off descenders, ascenders, or entire lines
277
+ - **Overlapping content** — elements stacking on top of each other due to incorrect sizing or missing auto-layout
278
+ - Placeholder text still showing ("Title", "Heading", "Button")
279
+ - Truncated content from layout sizing bugs
280
+ - Wrong component variants (e.g., Neutral vs Primary button)
281
+
282
+ ### Step 6: Updating an Existing Screen
283
+
284
+ When updating rather than creating from scratch:
285
+
286
+ 1. Use `get_metadata` to inspect the existing screen structure.
287
+ 2. Identify which sections need updating and which can stay.
288
+ 3. For each section that needs changes:
289
+ - Locate the existing nodes by ID or name
290
+ - Swap component instances if the design system component changed
291
+ - Update text content, variant properties, or layout as needed
292
+ - Remove deprecated sections
293
+ - Add new sections
294
+ 4. Validate with `get_screenshot` after each modification.
295
+
296
+ ```js
297
+ // Example: Swap a button variant in an existing screen
298
+ const existingButton = await figma.getNodeByIdAsync("EXISTING_BUTTON_INSTANCE_ID");
299
+ if (existingButton && existingButton.type === "INSTANCE") {
300
+ // Import the updated component
301
+ const buttonSet = await figma.importComponentSetByKeyAsync("BUTTON_SET_KEY");
302
+ const newVariant = buttonSet.children.find(c =>
303
+ c.name.includes("variant=primary") && c.name.includes("size=lg")
304
+ ) || buttonSet.defaultVariant;
305
+ existingButton.swapComponent(newVariant);
306
+ }
307
+ return { success: true, mutatedNodeIds: [existingButton.id] };
308
+ ```
309
+
310
+ ## Reference Docs
311
+
312
+ For detailed API patterns and gotchas, load these from the [figma-use](../figma-use/SKILL.md) references as needed:
313
+
314
+ - [component-patterns.md](../figma-use/references/component-patterns.md) — importing by key, finding variants, setProperties, text overrides, working with instances
315
+ - [variable-patterns.md](../figma-use/references/variable-patterns.md) — creating/binding variables, importing library variables, scopes, aliasing, discovering existing variables
316
+ - [text-style-patterns.md](../figma-use/references/text-style-patterns.md) — creating/applying text styles, importing library text styles, type ramps
317
+ - [effect-style-patterns.md](../figma-use/references/effect-style-patterns.md) — creating/applying effect styles (shadows), importing library effect styles
318
+ - [gotchas.md](../figma-use/references/gotchas.md) — layout pitfalls (HUG/FILL interactions, counterAxisAlignItems, sizing order), paint/color issues, page context resets
319
+
320
+ ## Error Recovery
321
+
322
+ Follow the error recovery process from [figma-use](../figma-use/SKILL.md#6-error-recovery--self-correction):
323
+
324
+ 1. **STOP** on error — do not retry immediately.
325
+ 2. **Read the error message carefully** to understand what went wrong.
326
+ 3. If the error is unclear, call `get_metadata` or `get_screenshot` to inspect the current file state.
327
+ 4. **Fix the script** based on the error message.
328
+ 5. **Retry** the corrected script — this is safe because failed scripts are atomic (nothing is created if a script errors).
329
+
330
+ Because this skill works incrementally (one section per call), errors are naturally scoped to a single section. Previous sections from successful calls remain intact.
331
+
332
+ ## Best Practices
333
+
334
+ - **Always search before building.** The design system likely has the component, variable, or style you need. Manual construction and hardcoded values should be the exception, not the rule.
335
+ - **Search broadly.** Try synonyms and partial terms. A "NavigationPill" might be found under "pill", "nav", "tab", or "chip". For variables, search "color", "spacing", "radius", etc.
336
+ - **Prefer design system tokens over hardcoded values.** Use variable bindings for colors, spacing, and radii. Use text styles for typography. Use effect styles for shadows. This keeps the screen linked to the design system.
337
+ - **Prefer component instances over manual builds.** Instances stay linked to the source component and update automatically when the design system evolves.
338
+ - **Work section by section.** Never build more than one major section per `use_figma` call.
339
+ - **Return node IDs from every call.** You'll need them to compose sections and for error recovery.
340
+ - **Validate visually after each section.** Use `get_screenshot` to catch issues early.
341
+ - **Match existing conventions.** If the file already has screens, match their naming, sizing, and layout patterns.