Communitygithub.com

analyze-fig (análise de figma)

Analisa um arquivo .fig do Figma mantido em spcfctn/ui/draft, descompacta e decodifica offline (kiwi), divide em seções, telas, linhas de texto e rasters, escreve a análise em spcfctn/ui/*.md, busca comentários do autor via MCP do Figma por link, vincula-os às telas por geometria e verifica a concordância com o conteúdo do arquivo, perguntando ao usuário sobre divergências.

O que é analyze-fig (análise de figma)?

Esta skill automatiza a análise offline de arquivos `.fig` do Figma, processando-os localmente sem depender da API do Figma para extrair a árvore de nós, textos e rasters. O resultado é um conjunto de arquivos Markdown em `spcfctn/ui/`, que servem como fonte única de verdade para o agente, eliminando a necessidade de reconsultar o Figma. A skill suporta a criação e atualização incremental desses arquivos, garantindo que ajustes manuais anteriores não sejam perdidos. Além disso, ela integra comentários do autor obtidos via MCP (como o servidor Figma MCP), vinculando-os geometricamente às telas e verificando se há inconsistências com o layout extraído, solicitando esclarecimentos ao usuário quando necessário. A skill é ideal para cenários onde o usuário pede para analisar, decodificar ou reler um arquivo `.fig` ou wireframes, ou para atualizar a documentação após uma nova exportação.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EugineKosenko/majordom/tree/HEAD/skills/analyze-fig

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

analyze-fig

Análise da exportação do Figma (.fig) sem recorrer à API do Figma: a árvore de nós, textos e rasters são lidos diretamente do arquivo, enquanto os comentários do autor (que não estão no .fig) são obtidos separadamente via MCP usando um link. O resultado são arquivos Markdown em spcfctn/ui/, que passam a ser usados no lugar de uma nova leitura do Figma.

Quando não executar

Questões sobre um layout já analisado ("o que diz o comentário sobre o filtro…", "quais colunas na tela…") devem ser resolvidas lendo spcfctn/ui/*.md, não com esta skill. A análise é necessária apenas para um .fig novo ou atualizado, ou quando a resposta não está nos arquivos Markdown (veja spcfctn-code.md).

Diretórios (único diretório de rascunho draft, fora do git)

  • spcfctn/ui/draft/ — entrada .fig (e quaisquer outros rascunhos). O arquivo é colocado pelo usuário.
  • spcfctn/ui/draft/<nome>/ — resultado da descompactação: message.json (todos os nós), meta.json, images/, screens.json e screens.txt, além dos comentários coletados (comments.json). É gerado a partir do .fig e não entra no git. Não há subdiretórios separados raw/ e data/ (modeling.md).
  • spcfctn/ui/*.md — resultado da análise; apenas isso permanece no git.

<nome> — nome do arquivo sem extensão, em minúsculas e com hífens (internal-interfaces).

Passo 0 — preparação

  • Encontre o diretório spcfctn/ do projeto. Se não existir, peça ao usuário para criá-lo (spcfctn-code.md). Crie o artefato ui/ e seu subdiretório draft/ você mesmo.
  • Verifique spcfctn/ui/.gitignore (repositório do artefato): deve conter draft (veja modeling.md); adicione o que estiver faltando usando gitignore.org.
  • Arquivo .fig: o nome é indicado pelo usuário; se não for indicado, liste spcfctn/ui/draft/*.fig e pergunte.
  • Leia o CLAUDE.md do projeto (idioma da prosa, convenções) e os arquivos spcfctn/ui/*.md existentes: a análise deve dar continuidade à estrutura e terminologia deles, não começar do zero.
  • São necessários python3 e zstd no PATH.

Passo 1 — descompactar e decodificar

python3 ~/.claude/skills/analyze-fig/scripts/fig.py spcfctn/ui/draft/X.fig spcfctn/ui/draft/<nome>

Exibe a versão do formato, quantidade de nós, blobs e imagens. O script foi testado na versão 106; em outra versão ou com erro, não tente adivinhar o formato ou usar decodificadores de terceiros — informe o usuário. meta.json contém exported_at: a hora da exportação será usada no passo 5. message.json é grande e não deve ser impresso diretamente.

Passo 2 — dividir em seções e telas

python3 ~/.claude/skills/analyze-fig/scripts/screens.py spcfctn/ui/draft/<nome>

Exibe a lista de páginas, seções (frames de nível superior) e telas (seus filhos) com a quantidade de textos e rasters. A essência está em screens.txt: para cada tela, as camadas de texto são agrupadas em linhas de cima para baixo e da esquerda para a direita (assim são lidos filtros, títulos de colunas e botões), além de referências para rasters.

  • Compare as quantidades com as esperadas (por exemplo, com um Markdown antigo); divergência é motivo para parar.
  • As camadas de texto não capturam elementos sem texto (ícones vazios) nem o conteúdo dos rasters. Para cada raster em images/, abra o arquivo (Leitura) e descreva o que não está nas camadas de texto; indique que isso foi lido da imagem. A árvore e os textos são a evidência principal; as imagens são um complemento.
  • Instâncias de componentes (INSTANCE) podem ter textos sobrescritos que o script não detecta; screens.txt avisa sobre isso.

Passo 3 — escrever spcfctn/ui/*.md

  • Um Markdown por seção (ou por arquivo, quando há apenas uma seção). Se o arquivo já existir, leia-o por completo e atualize-o, não o reescreva: os arquivos Markdown são mantidos apenas pelo agente, mas as correções anteriores não podem ser perdidas.
  • Idioma da prosa: conforme o CLAUDE.md do projeto.
  • Estrutura (exemplo: spcfctn/ui/internal-dashboard.md em job/vale/kylada): introdução com fonte e verificação (o que foi lido, data de exportação, número de telas e textos), regras de leitura dos layouts, correspondência dos rótulos da interface com termos internos, telas em ordem (filtros na ordem do layout, botão de lista, colunas, ações nas linhas), questões em aberto.
  • Tudo o que é sua interpretação, e não texto do layout ou comentário, marque como inferido.
  • As regras de projeto para leitura de layouts (por exemplo, que Select abaixo do título de coluna controla a ordenação) devem ser obtidas do CLAUDE.md do projeto e aplicadas, não inventadas.

Passo 4 — comentários via MCP usando link

Os comentários não estão no .fig (verificado): eles ficam no servidor do Figma.

  • É necessário um link para o arquivo no Figma (com ou sem node-id). Se não houver, peça ao usuário.
  • Use apenas a ferramenta MCP comments do servidor Figma MCP configurado no projeto (pegue o nome da lista de servidores conectados); o parâmetro file é o link. Se essa ferramenta não existir, informe o usuário. O servidor oficial figma-cs não retorna comentários. Não chame a API REST diretamente com token e não mexa em .env.
  • A chamada sem node_id retorna todos os comentários do arquivo por ramo (número, data, estado, nó @id, texto, respostas). Não use refresh desnecessariamente. O endpoint de comentários é contado separadamente da leitura do arquivo e funciona mesmo quando a leitura retorna 429.
  • Vinculação à tela:
    • Se @id coincide com o ID de uma tela em screens.json, a tela está determinada.
    • Se @id é de uma seção ou página, a tela é determinada por geometria; para isso, são necessários node_id e node_offset do comentário. Monte linhas CHAVE NÓ X Y (exemplo: #144 979:3 500 5471) e passe para:
      python3 ~/.claude/skills/analyze-fig/scripts/place.py spcfctn/ui/draft/<nome> < linhas
      
      Saída: chave, seção, tela; ou o motivo e a tela mais próxima, se o ponto não estiver em uma tela.
    • Verifique a saída: a ferramenta comments pode não imprimir node_offset (era o caso quando a skill foi criada). Nesse caso, comentários vinculados a seções ou página não podem ser atribuídos a uma tela exata: não adivinhe a tela pelo texto; associe-os à seção, marque tela não determinada e informe ao usuário que é necessário o deslocamento do comentário.
  • Respostas (↳) pertencem ao ramo do pai.

Passo 5 — verificar se os comentários correspondem ao arquivo

Para cada comentário com tela determinada (e para o grupo de comentários da seção), verifique:

  • Se os campos, colunas, botões, valores mencionados no comentário estão entre as camadas de texto daquela tela (Amount of integrated services ↔ coluna Services; citações entre aspas; listas de valores).
  • Se o comentário não contradiz o layout (número de colunas, ordem, tipo de elemento, "há filtro" / "não há").
  • Data: se o comentário é mais recente que exported_at de meta.json, a exportação está desatualizada. Nesse caso, peça uma exportação nova em spcfctn/ui/draft/.
  • Se o nó do comentário não existe mais no arquivo (foi removido ou renomeado), é um comentário órfão.
  • Comentário sem tela e sem conteúdo reconhecível.

Resuma as divergências em uma pequena tabela (número #N, tela, divergência) e pergunte ao usuário o que está correto: não corrija silenciosamente nem escolha entre layout e comentário. Até a resposta, marque-as no Markdown como conflito.

Passo 6 — escrever o resumo

  • No Markdown, adicione uma seção com os comentários do autor: um resumo (o que eles esclarecem) e todos os comentários por tela com números #N. Quando um comentário corrige algo que estava inferido, corrija o registro e referencie o comentário.
  • Atualize a "Verificação" na introdução: o que foi lido (.fig, versão, data de exportação, textos, rasters, comentários, data de obtenção) e o que não foi coberto.
  • Questões em aberto — em lista separada; respostas do usuário mova para "Resolvidas".
  • Não faça commit sem solicitação. Resuma verbalmente (em português): quantas seções, telas, comentários, quantas divergências e o que precisa ser esclarecido.

O que não fazer

  • Não chame a API REST do Figma com token, não leia nem edite .env.
  • Não leia código de terceiros (decodificadores kiwi, etc.): o formato já está implementado em scripts/.
  • Não coloque o .fig nem os resultados da análise (tudo em draft/) no git.
  • Não adivinhe a tela de um comentário pelas palavras nem o conteúdo do layout pela imagem quando há camadas de texto disponíveis.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

EugineKosenko/majordom

Керування сесіями claude-code-ide.el у живому Emacs через emacsclient headless — старт/continue/resume без блокуючих запитів, безпечна зупинка, перемикання permission-mode і auto-accept, навігація в інтерактивних picker'ах. Використовуй, коли сесія "Мажордом" має підняти, продовжити, зупинити чи інспектувати сесію claude-code-ide для іншого проєкту.

EugineKosenko/majordom

Scaffold a new component/command/crate in this user's literate org-babel Rust style (modeled on ads-back's crates/api and crates/cli patterns — one org file per command with a :tangle skeleton block, Декларації-before-Визначення/Дії noweb blocks, one heading per concern). Use whenever the user asks to add a new component, command, procedure, CLI subcommand, Yew component, module, or crate in an org-babel-literate Rust project (ads-back, ads-front, or similar), including wiring a brand-new crate's config.org/env.org/main.org into the workspace's federated config.org.

EugineKosenko/majordom

Bootstrap a new project in this user's standard layout — .claude-root, .dir-locals.el (root: org-link abbreviation), code/, spcfctn/code/ (with its own git repository) and a .claude/ directory with its own git repository and a CLAUDE.md that fixes the project's prose language and its short two-letter project code (chosen by the user from options the agent proposes) — and translate any files already present into that language. Use whenever the user asks to create, start, set up, initialise or "оформити" a new project (or to bring an existing bare directory to the standard layout).

EugineKosenko/majordom

Check org/md prose in this user's projects against the prose-formatting conventions in ~/.claude/rules/org-babel.md (~...~ vs =...= markup, acronym casing, /.../ glossary terms, real org-links vs italics/plain text, spaces around / between two markups, trailing newline, fill-column). Use proactively right after editing prose paragraphs in an .org or .md file (in place of manually re-deriving each rule from memory), and whenever the user explicitly asks to check/lint org rules or compares the request to running clippy.

Habilidades Relacionadas