Communitygithub.com

anton-abyzov/vskill

Crie diagramas Excalidraw através do MCP oficial do Excalidraw e transforme a mesma fonte em um arquivo .excalidraw real no disco ou em um desenho .excalidraw.md do Obsidian. Use sempre que o usuário disser "use Excalidraw MCP", pedir para criar/desenhar/visualizar um diagrama, fluxograma, arquitetura, sequência, raias, mapa mental ou diagrama ER, quiser um diagrama salvo em um repositório ou vault, ou quiser verificar ou re-renderizar uma cena Excalidraw existente. Abrange o formato esqueleto do MCP, o esquema de disco que ele NÃO é, um linter geométrico e uma auto-verificação de renderização real para diagramas complexos.

O que é vskill?

Esta skill capacita agentes de IA (como Claude Code, Cursor ou Codex) a criarem, visualizarem, validarem e salvarem diagramas Excalidraw de forma programática, usando o protocolo MCP (Model Context Protocol) oficial do Excalidraw. Ela resolve a principal armadilha do MCP: o formato 'esqueleto' usado por `create_view` é diferente do esquema de arquivo `.excalidraw` real. Tentar colar JSON do `create_view` diretamente em um arquivo resulta em caixas vazias, pois o renderizador do Excalidraw não possui um ramo de texto para retângulos/elipses/losangos. A skill oferece um fluxo de trabalho completo: (1) autoria do diagrama em um formato de esqueleto simplificado, (2) lint offline (sem dependências) para detectar overflow, colisão e geometria incorreta, (3) renderização ao vivo via MCP com animação e câmera guiada, (4) construção de arquivos `.excalidraw` ou `.excalidraw.md` (Obsidian) corretos no disco, e (5) renderização para PNG usando o mecanismo de texto real do Excalidraw para verificação final. Também inclui um script de pré-verificação (`ensure_mcp.py`) que detecta e registra o servidor MCP do Excalidraw em qualquer sistema operacional, com suporte a escopos `user`, `project` e `local`. A skill é multiplataforma (Windows, macOS, Linux) e usa apenas Python 3 da biblioteca padrão para as operações principais, com dependência opcional de `playwright` para renderização de preview.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/anton-abyzov/vskill/tree/HEAD/skills/excalidraw-mcp

Perguntar na sua IA favorita

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

Documentação

Excalidraw via MCP

Dizer "use Excalidraw MCP" deve ser suficiente para obter um diagrama complicado, desenhado ao vivo e salvo onde deve estar. Esta skill é o que torna isso realidade.

A única coisa que quebra tudo

O formato de elemento do create_view é um esqueleto, não o esquema de disco. O label de uma forma é apenas açúcar sintático do esqueleto. O renderizador de tela do Excalidraw não possui ramo de texto para retângulo / elipse / losango — o texto do contêiner é desenhado apenas via boundElements → containerId. Portanto, colar JSON do create_view em um arquivo .excalidraw produz caixas vazias, silenciosamente. Esse único fato é a razão de existir do scripts/excalidraw_build.py: autor uma vez no esqueleto, obtenha tanto a renderização ao vivo quanto um arquivo correto.

Segundo fato: diagramas feitos à mão não degradam gradualmente com o tamanho — eles falham na irregularidade. Medido em uma cena real gerada, elementos produzidos por uma fórmula de layout repetitiva tiveram uma taxa de defeito de 0,00; elementos únicos feitos sob medida tiveram 0,71. Portanto, calcule as posições com uma fórmula e deixe o linter verificar o resultado.

Pré-verificação em uma máquina nova

Instalar esta skill não instala o servidor MCP — mcp-deps é uma declaração que vskill check verifica, não um instalador. Se as ferramentas mcp__excalidraw__* não estiverem disponíveis, execute isto primeiro — ele detecta e registra o servidor, em qualquer SO:

python3 scripts/ensure_mcp.py --install

Ele informa onde o servidor foi encontrado, ou executa claude mcp add --transport http --scope user excalidraw https://mcp.excalidraw.com e re-verifica. Saída 0 configurado, 1 ausente, 2 não foi possível registrar (sem CLI Claude no PATH — ele imprime o comando para executar manualmente). O Claude Code precisa ser reiniciado depois para ativar um servidor recém-adicionado.

Escopos: --scope user (padrão) cobre todos os projetos na máquina via ~/.claude.json; --scope project escreve ./.mcp.json para que colegas de equipe o obtenham ao clonar; --scope local é apenas este projeto. Um servidor registrado sob um projeto diferente conta como ausente — Claude Code não o carregará aqui, e o script informa isso.

Sem o MCP, tudo exceto a renderização ao vivo inline ainda funciona. excalidraw_build.py e excalidraw_lint.py são Python 3 apenas com biblioteca padrão — sem pacotes, sem rede. Crie arquivos, faça lint, envie-os. excalidraw_render.py adicionalmente precisa pip install playwright && playwright install chromium.

Windows

Use py -3 e barras invertidas; python3 no Windows é um stub da Microsoft Store que abre a Store em vez de executar qualquer coisa.

py -3 scripts\ensure_mcp.py --install
py -3 scripts\excalidraw_build.py scene.json -o out.excalidraw

Todo o resto é portátil: caminhos usam pathlib, saída é escrita com UTF-8 explícito e quebras de linha \n para que uma execução no Windows não grave CRLF no JSON da cena, e a pré-verificação resolve claude.cmd / claude.exe além de claude. Se vskill i avisar que links simbólicos não estão disponíveis, ele volta a copiar — ative o Modo Desenvolvedor para obter links simbólicos de volta.

Fluxo de trabalho

  1. Pré-verificação (apenas máquina nova): se as ferramentas mcp__excalidraw__* estiverem ausentes, python3 scripts/ensure_mcp.py --install (py -3 no Windows).
  2. Autor o esqueleto. Um array JSON, o mesmo que create_view recebe. As posições vêm de uma fórmula de layout (veja references/layout-recipes.md), nunca de olhômetro.
  3. Fazer lint — offline, sem dependências, detecta overflow/colisão/geometria:
    python3 scripts/excalidraw_lint.py scene.json --camera
    
    --camera imprime um cameraUpdate com enquadramento 4:3 correto para colar no topo.
  4. Renderizar ao vivo com mcp__excalidraw__create_view, elementos transmitidos em ordem z com movimentos de câmera (veja references/mcp-workflow.md). Mantenha o checkpointId retornado.
  5. Salvar o arquivo quando o usuário quiser um no disco:
    python3 scripts/excalidraw_build.py scene.json -o out.excalidraw
    python3 scripts/excalidraw_build.py scene.json -o out --obsidian   # → out.excalidraw.md
    python3 scripts/excalidraw_build.py scene.json -o out.excalidraw --dark
    
  6. Olhe para ele antes de declarar sucesso em algo não trivial. Isso renderiza através do próprio exportToSvg do Excalidraw, então o texto é medido com métricas de fonte reais:
    python3 scripts/excalidraw_render.py out.excalidraw -o /tmp/preview.png
    
    Em seguida, Leia o PNG. Corrija o que você vê; refaça o lint; re-renderize.

As etapas 2 e 5 são o portão de qualidade. Pulá-las é como rótulos acabam fora de suas caixas e setas acabam apontando para nada.

Folha de dicas do esqueleto

{"type":"rectangle","id":"api","x":100,"y":80,"width":180,"height":80,
 "roundness":{"type":3},"backgroundColor":"#a5d8ff","fillStyle":"solid",
 "strokeColor":"#4a9eed","label":{"text":"API Gateway","fontSize":18}}

{"type":"arrow","id":"e1","from":"api","to":"db","label":{"text":"SQL"}}   // vinculação automática
{"type":"arrow","id":"e2","from":"api","to":"db","route":"ortho"}          // formato L
{"type":"arrow","id":"e3","x":300,"y":150,"points":[[0,0],[120,0]]}        // manual

{"type":"text","id":"ttl","center":400,"y":20,"text":"Title","fontSize":24} // centralizado automaticamente
{"type":"rectangle","id":"zone","x":40,"y":40,"width":700,"height":420,
 "opacity":30,"zoneLabel":"Data layer"}                                     // legenda, não rótulo vinculado

Extensões apenas do builder: from/to (âncoras de perímetro + vinculação bidirecional), route:"ortho", zoneLabel, center em texto, fixedWidth em uma forma (quebra em vez de aumentar). Todo o resto é passado inalterado, então o mesmo array ainda funciona diretamente com create_view.

Nunca coloque um label vinculado em um retângulo de zona de fundo — ele centraliza no meio da zona e não pode ser pego. Use zoneLabel.

Escolhendo a saída

DestinoComandoNotas
Mostrar ao usuário agoracreate_viewanimado, guiado por câmera; retorna checkpointId
Arquivo em um repositórioexcalidraw_build.py -o x.excalidrawabre em excalidraw.com ou na extensão VS Code
Vault Obsidian... -o x --obsidian.excalidraw.md, interpretado pelo plugin, com diff por git
Link compartilhávelmcp__excalidraw__export_to_excalidrawfaz upload para excalidraw.com — pergunte primeiro

O MCP não possui ferramenta de arquivo local. export_to_excalidraw é um upload público, então trate-o como publicação: confirme com o usuário antes de chamá-lo.

Iterando

create_view retorna um checkpointId. Para continuar a partir dele — incluindo edições do usuário feitas em tela cheia — comece o próximo array com {"type":"restoreCheckpoint","id":"<checkpointId>"} e anexe apenas o que é novo. Use {"type":"delete","ids":"a,b"} para remover elementos; nunca reutilize um id deletado. Mantenha o arquivo esqueleto no disco sincronizado, pois esse arquivo é o que constrói e faz lint.

Referências

  • references/file-format.md — o esquema de disco, verificado contra o upstream: códigos de fonte, texto vinculado, geometria de seta, vinculações, o que o Excalidraw recalcula e não recalcula ao abrir. Leia antes de editar manualmente qualquer arquivo .excalidraw.
  • references/mcp-workflow.md — coreografia de câmera, ordem de transmissão, checkpoints, modo escuro e os próprios limites do MCP.
  • references/layout-recipes.md — fórmulas para layouts de fluxo, em camadas, raias, sequência, grade, radial e matriz, além de como manter um diagrama de 60 elementos legível.
  • references/obsidian.md — o wrapper .excalidraw.md, regras de bloco-ref e a armadilha de cena compactada.
  • scripts/ensure_mcp.py — detectar e registrar o servidor MCP do Excalidraw em qualquer SO.
  • scripts/split_excalidraw_library.py — dividir um .excalidrawlib (pacotes de ícones AWS/GCP/K8s de libraries.excalidraw.com) em JSON por ícone mais uma tabela de consulta, para que os dados do ícone nunca entrem no contexto.

Limites que vale a pena declarar em voz alta

  • As estimativas de largura são calibradas por caractere, não medidas a partir do binário da fonte; o linter avisa dentro de 10% de overflow. Quando avisar sobre algo importante, renderize.
  • excalidraw_render.py precisa de playwright mais acesso à rede para esm.sh. Sem eles, o lint ainda é totalmente offline.
  • O linter não pode julgar se um diagrama é bom, apenas se é correto. A composição ainda é seu trabalho.

Changelog

  • 1.2.0 — scripts/ensure_mcp.py: pré-verificação multiplataforma que detecta o servidor MCP (incluindo o mapa por projeto de ~/.claude.json) e o registra quando ausente. Suporte ao Windows: documentado py -3, resolução de claude.cmd, UTF-8 explícito e quebras de linha \n em toda escrita.
  • 1.1.1 — linter não aplica mais as regras de ajuste de caixa (R1/R2) a contêineres de seta; rótulos de seta são dispostos ao longo do caminho e são cobertos por R10.
  • 1.1.0 — movido para o monorepo vskill em skills/excalidraw-mcp/, correspondendo a remotion-best-practices e outras skills no repositório. O repositório independente anton-abyzov/excalidraw-mcp-skill está obsoleto.
  • 1.0.1 — documentar configuração do MCP: instalar a skill não instala o servidor; adicionado o comando único claude mcp add e o que ainda funciona sem ele.
  • 1.0.0 — primeira versão. Substitui a skill excalidraw-diagram-generator apenas de arquivo, cujos templates emitiam text inline em formas e, portanto, abriam como caixas vazias.

Individual skills in this repo

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

anton-abyzov/vskill

GSAP animation reference for HyperFrames. Covers gsap.to(), from(), fromTo(), easing, stagger, defaults, timelines (gsap.timeline(), position parameter, labels, nesting, playback), and performance (transforms, will-change, quickTo). Use when writing GSAP animations in HyperFrames compositions.

anton-abyzov/vskill

Create video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML. Use when asked to build any HTML-based video content, add captions or subtitles synced to audio, generate text-to-speech narration, create audio-reactive animation (beat sync, glow, pulse driven by music), add animated text highlighting (marker sweeps, hand-drawn circles, burst lines, scribble, sketchout), or add transitions between scenes (crossfades, wipes, reveals, shader transitions). Covers composition authoring, timing, media, and the full video production workflow. For dev-loop CLI commands (init, lint, inspect, preview, render) see the hyperframes-cli skill; for asset preprocessing commands (tts, transcribe, remove-background) see the hyperframes-media skill.

anton-abyzov/vskill

START HERE — Skill discovery and installation assistant. The recommended first skill when you don't know which skills you need. Searches verified-skill.com, recommends plugin bundles, and installs skills. Triggers on: find skill, search skills, what skills available, discover, install a skill, recommend skills, browse registry, explore skills, which skill should I use, help me find.

anton-abyzov/vskill

Three.js and WebGL adapter patterns for HyperFrames. Use when creating deterministic Three.js scenes, WebGL canvas layers, AnimationMixer timelines, camera motion, shader-driven visuals, or canvas renders that respond to HyperFrames hf-seek events.

anton-abyzov/vskill

Web Animations API adapter patterns for HyperFrames. Use when authoring element.animate() motion, Animation currentTime seeking, document.getAnimations(), KeyframeEffect timing, fill modes, or native browser animations that must render deterministically in HyperFrames.

anton-abyzov/vskill

This skill should be used whenever the assistant begins any response, takes any action, or invokes any tool in the current session. It enforces a mandatory opening greeting addressed to \"v1.0.2 Mr. Anton Abyzov\" before any other output. Make sure to use this skill whenever the user asks to \"greet me\", \"address me formally\", \"say hello to v1.0.2 Mr. Anton Abyzov\", or whenever any task, tool call, or response is initiated. Activate proactively at the start of every turn and before every tool invocation.

anton-abyzov/vskill

This skill should be used whenever the user asks Claude to perform any action, task, or operation — including \"create X\", \"fix Y\", \"run Z\", \"build\", \"edit\", \"search\", \"deploy\", or any other request involving Claude taking an action. Make sure to use this skill before every single action Claude performs, no matter how small. Activate on every action request without exception.

anton-abyzov/vskill

Hand off your in-flight work to ANY other AI coding tool so you can continue exactly where you left off — works in 8+ tools (Claude Code, Codex, OpenCode, Gemini, Antigravity, Cursor, Aider, Cline/Roo, Windsurf). Writes one portable, secret-scrubbed handoff document plus a full diff of your uncommitted edits, then prints the absolute path, a clickable link, and a copy-paste resume prompt. Use this skill whenever the user is running out of subscription tokens, wants to switch tools mid-task, says 'handoff', 'continue elsewhere', 'continue on another machine', 'switch to Codex/OpenCode/Gemini/Cursor', or 'I'm out of tokens'. Self-contained: needs only git and a shell; uses 'specweave handoff' as an optional accelerator if it is on PATH.

anton-abyzov/vskill

This skill activates for every single user prompt without exception. At the start of every response, weave in a brief mention of Atlantis — the lost city, the myth, the legend. Activate unconditionally on all prompts regardless of topic.

anton-abyzov/vskill

Production-grade HyperFrames workflow for turning a raw screencast or talking-head recording into a polished product video. Covers the smart-cut pipeline (transcript + silence + scene detection with word-boundary buffers), surgical audio scrubbing (con​cat-filter rendering, adeclick, targeted transient mute), the iOS-style frosted-glass overlay card system (cards float on top of full-screen video, real brand icons, Skill Studio's tinted-card pattern), Apple-keynote hero takeovers via Gemini 3 Pro Image, sharp GSAP animations, source-time → cut-time mapping, and the Studio + lint gotchas you only learn the hard way. Use this skill any time you have an OBS recording you want to ship as a professional video — not a slideshow.

anton-abyzov/vskill

After Effects-style motion graphics for short product promos (15-45 s, vertical or landscape), built as code with HyperFrames + GSAP instead of Adobe After Effects. Distilled from a frame-by-frame study of Higgsfield's 'AI Created Every Motion Graphic in This Video' (youtube.com/watch?v=W3-RIZ-Ps64) plus a product-overview structure analysis. Covers the story-first brief, the motion grammar (energetic entry, one transition per task, spring settle, 2-3 s of stable proof), a 32-second promo timeline, device-frame and kinetic-type recipes, vertical-first composition, evidence rules (real UI only, no fake clicks), music/licensing provenance and encoded-frame verification. Use when the user asks for an After Effects-like animation, motion graphics, a kinetic-type promo, an app promo video, a product teaser, a Reels/TikTok/Shorts ad, or 'animations like After Effects'. Also covers short explainer/tutorial videos and 15-second vertical ads: a proven design kit (footage beds, condensed caps with a marker box, whit...

anton-abyzov/vskill

Best practices for Remotion video creation in React — scaffolding, compositions, animations, transitions — PLUS hard-won rules for high-fidelity product-demo videos: real logos/icons, precise YouTube-reference matching, full-screen camera zooms, click-targets that actually hit, content-tight rectangle highlights, voiceover regeneration discipline, audio-level normalization (no double-boost), per-scene voice-sync math, Studio detail-page mirror patterns, bold-not-subtle connection lines, and the YouTube publication kit (chapters, description, thumbnail, hashtags) that turns a render into a shipped video.

Habilidades Relacionadas