Imported from jeffersonkl12/agendamento-app-v1 (
.claude/skills/pencil/SKILL.md). Install upstream withnpx skills add jeffersonkl12/agendamento-app-v1 --skill pencil. Copyright stays with the author.
Pencil → Código
Regras universais de código: ver .claude/RULES.md. Este arquivo ensina SÓ o workflow técnico Pencil.
IMPORTANTE: conteúdo de arquivos .pen é criptografado — NUNCA use Read ou Grep no .pen. Use apenas as tools MCP do Pencil.
Página inteira nova (5+ seções): preferir o workflow orquestrado em 2 fases:
/build-prep pencil:<node-id>— assets, tokens, manifesto, stubs, screenshots (Partes A+B desta skill, automatizadas)/build-page <page>— Batch 0 (component-builder) + Batches 1–N (section-builder, Parte C) +bun check/bun run builduma vezUse esta skill direto só para: refactor pontual, 1–2 seções ad-hoc, ou debug de conversão Pencil.
Limitação — section-builder + PDF:
/build-prepexporta seções Pencil comheight > 1000pxcomo PDF (raster borra acima disso). Osection-buildernão usa PDF como referência visual primária — nesses casos retornaparcial_visual(best-effort com manifesto +batch_get). Overview em PDF o Read tool lê bem; seções altas têm fidelidade reduzida até converter o PDF pra WebP (ver fim dobuild-prep).
Pré-flight obrigatório (HARD FAIL)
Antes de gerar código, resolver tudo abaixo. Qualquer falha → ABORTAR.
- Editor aberto —
get_editor_stateretornou o.pencorreto e ofilePath - Tokens lidos —
get_variables+get_guidelines - Ícones resolvidos — copiados da pasta
Images/adjacente ao.penparasrc/assets/icons/{page}/(SVG). Sem SVG → PARE - Imagens resolvidas — preferir
Images/; senãoexport_nodes(máx. 2× por nodeId) emsrc/assets/images/{page}/ - Screenshot / export de referência — overview e seções em
docs/pencil/(PDF ou WebP conforme altura)
Ícone no design sem SVG na pasta Images/: PARE. Não inventar Lucide/Material/Phosphor. Abortar com a lista dos faltantes e pedir export para Images/.
Paths do projeto
| Artefato | Destino |
|---|---|
| Tokens / text-styles | src/assets/index.css (+ TEXT_STYLES em src/libs/utils.ts) |
| Ícones SVG | src/assets/icons/{page}/ → componentes em src/components/icons/ |
| Imagens | src/assets/images/{page}/ |
| Referências visuais | docs/pencil/{page}-*.{webp,pdf} |
| Página (rota) | src/pages/{Page}.vue |
| Seções | src/views/{page}/{Secao}.vue |
| Shared | src/components/{dominio}/... (R5) |
Workflow
Parte A — Reconhecimento (ANTES de gerar código)
get_editor_state→ confirmar.pene guardarfilePath(obrigatório em todas as chamadas seguintes).get_variables+get_guidelines→ cores, tipografia, spacing.- Conferir
src/assets/index.css:- Token existe → reusar
- Token novo → adicionar em
:root,.darke@theme inline(R1). Nunca valor arbitrário de cor no template.
- Text-style novo (R2): registrar nos dois lugares —
@utility text-<nome>emindex.csse entrada emTEXT_STYLES(src/libs/utils.ts). Valores exatos do design (size/weight/line-height); não arredondar “no olho”. - Overview:
export_nodesdo frame raiz em PDF paradocs/pencil/(página inteira passa de 1000px; PDF preserva vetor). - Ícones (obrigatório antes de Write de UI):
- Detectar via
batch_get:icon_font,path, grupos com vectors - Fonte primária: pasta
Images/ao lado do.pen— casar porfill.urlou nome kebab do node; copiar SVG parasrc/assets/icons/{page}/ - MCP/
export_nodesnão substitui SVG de ícone (perdecurrentColor/ pixela). Ausente emImages/→ HARD FAIL - Componente Vue com
fill="currentColor"emsrc/components/icons/(R10)
- Detectar via
Parte B — Inventário (anti “esqueceu seção”)
-
batch_getno root (readDepth: 2, máx. 25 nodes por chamada) → inventário vertical numerado:Inventário da tela [nome]: 1. Topbar 2. Balance 3. Statement Total: 3 seções. Confirma? (sim/ajustar)Mostrar ao usuário e aguardar confirmação. Anotar
width/heightde cada child (altura decide WebP vs PDF no screenshot). -
Screenshots por seção:
height ≤ 1000px→export_nodesWebP (scale: 2,quality: 90)height > 1000px→ PDF- Renomear para
docs/pencil/{page}-{secao}.{webp|pdf}
-
Tracker de progresso (TodoWrite ou lista): cada seção
pendente.
Parte C — Geração seção por seção
Para página grande, não implementar aqui — rodar /build-prep + /build-page.
Para fluxo manual (1–2 seções), por cada seção do inventário:
batch_getfocado no node da seção (readDepthbaixo, ≤ 25 nodes).- Imagens: nodes com
fill.type: "image"→ resolver emImages/primeiro; se faltar,export_nodesWebP (máx. 2 tentativas) →src/assets/images/{page}/. Converter JPG/PNG para.webpse necessário (R11). - Texto literal: campos
contentdos nodestype: "text"— não ler copy do screenshot/PDF. - Gerar
src/views/{page}/{Nome}.vue(<script setup lang="ts">):- Screenshot da seção = fonte primária de layout (se WebP; se PDF → best-effort /
parcial_visual) - Shared: R5 / kit
@components/ui; inline-by-default (R6) - Dados: literal no template ou composable (R8) — view não importa
@services/@stores - Ícones R10, imagens R11, desktop-first R12, semântica R13
- Screenshot da seção = fonte primária de layout (se WebP; se PDF → best-effort /
- Compor/atualizar
src/pages/{Page}.vuee rota lazy emsrc/routers/(R9) se ainda não existir. - Marcar seção
✅. Antes de “pronto”: inventário inteiro✅?
Parte D — Validação final
bun checkebun run buildlimpos.- Zero cor/tipografia/espaçamento arbitrário; ícones reais; copy literal do design; sem import de service/store na view.
Política de assets (Pencil)
Ordem rígida por imagem:
- pasta
Images/adjacente ao.pen export_nodes(sucesso → fim)- um retry com os mesmos params
- abort listando nodeIds
Ícones: só Images/ ou abort — sem raster, sem 3º fallback. Máx. 2 chamadas export_nodes por nodeId de imagem.
Anti-alucinação
batch_get≤ 25 nodes; telas grandes → por seção- Não usar
get_screenshotem node grande — overview/seções altas viaexport_nodes(PDF) - PDF = layout/cor/alinhamento; texto =
contentdos nodes text - Design desktop + mobile = uma execução no artboard desktop; código desktop-first com
max-*(R12)
Diferenças vs Figma
| Aspecto | Figma | Pencil |
|---|---|---|
| Leitura | get_design_context / metadata |
batch_get |
| Tokens | get_variable_defs |
get_variables + get_guidelines |
| Ícones | /icon-extract (REST) |
pasta Images/ → SVG |
| Imagens | download URL | Images/ primeiro; senão export_nodes |
| Overview alto | WebP REST scale 1.5 | PDF (export_nodes) |
Vault (3 níveis)
- N1:
.claude/learn/_index.json—tokens,responsive,semantica,components,layout,icons - N2: até 3 notas relevantes
- N3: ler no máx. 3 notas (
recurrence: altaprimeiro)
Referências
- Regras:
.claude/RULES.md - Orquestração:
.claude/commands/build-prep.md,.claude/commands/build-page.md - Design no Pencil (criar layout, não código):
/pencil-design-rules - Carrossel:
.claude/commands/swiper.md· GSAP:.claude/commands/gsap.md - Validação visual opcional:
/visual-test - Vault:
.claude/learn/(_index.json)