kevin8656/claude-skill-preview

Transforme planos, propostas, rascunhos ou textos finais em uma página HTML interativa, onde é possível selecionar trechos para comentar e marcar checkboxes, abrindo-a no navegador padrão do computador.

O que é claude-skill-preview?

Esta skill transforma qualquer conteúdo textual — planos, propostas, rascunhos ou textos finais — em páginas HTML interativas que permitem selecionar trechos de texto para adicionar comentários (como no Google Docs) e marcar checkboxes. Ela é ideal para revisões colaborativas, aprovações de clientes ou checklists de decisão. A skill suporta as plataformas Claude Code (com `SKILL_DIR` configurado) e pode ser adaptada para outras ferramentas de agente de IA. O fluxo de trabalho é: (1) reescrever o conteúdo explicativo em versão clara, concisa e visual (com tabelas comparativas, linhas do tempo, diagramas de arquitetura, etc.) usando sintaxes curtas de marcadores; (2) gerar a página HTML com o script `md-to-preview.py` (ou `inject.py` para HTML já pronto); (3) abrir a página no navegador do usuário. A página gerada inclui uma overlay de comentários, badges de status, identidades configuráveis e exportação de todos os comentários e checkboxes como markdown. Regras importantes: comentários sempre são por seleção de texto (não campos de entrada); conteúdo explicativo deve ser reescrito seguindo um guia de estilo (primeira tela com conclusão, sem repetições, linguagem clara, componentes visuais obrigatórios); para documentos originais (contratos, transcrições), o conteúdo é mantido intacto com a flag `--no-lint`.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kevin8656/claude-skill-preview/tree/HEAD/preview

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Prévia

Do README da skill

descrição

Documentação

Pré-visualização: Página HTML com Seleção para Comentários

Transforme qualquer plano, proposta, rascunho ou texto final em uma página HTML onde é possível "selecionar texto → adicionar comentário", abrindo-a no computador do usuário para que ele (ou seu cliente) revise. Após a revisão, clique em "Copiar tudo" e os comentários e marcações de checkbox serão convertidos em markdown, que pode ser colado de volta no chat para aplicar as alterações.

Onde está o arquivo desta skill

A pasta onde este arquivo está localizado é a pasta da skill (escrita como $SKILL_DIR abaixo). Defina-a antes de executar qualquer comando:

SKILL_DIR="${CLAUDE_SKILL_DIR:-$HOME/.claude/skills/preview}"
[ -f "$SKILL_DIR/scripts/md-to-preview.py" ] || SKILL_DIR="$(cd "$(dirname "$(find "$HOME/.claude/skills" .claude/skills -path '*/preview/scripts/md-to-preview.py' 2>/dev/null | head -1)")/.." && pwd)"
echo "$SKILL_DIR"
  • Requer apenas Python 3.9 ou superior, usando apenas a biblioteca padrão — não é necessário pip.
  • No macOS, use python3; no Windows, se não houver o comando python3, use python ou py.
  • Se a pasta da skill não for encontrada, pare e informe ao usuário para confirmar se a pasta preview está em ~/.claude/skills/. Não crie uma funcionalidade de comentários separada.
ArquivoFinalidade
scripts/md-to-preview.pyGerador principal: converte md em página de pré-visualização
scripts/convert/inject.pyHTML já diagramado: adiciona apenas a funcionalidade de comentários
scripts/convert/visuals.py, flow.py, tables.pyComponentes visuais, fluxogramas, conversão de tabelas (chamados automaticamente pelo gerador)
assets/preview-comment-overlay.htmlInterface de comentários por seleção de texto
assets/preview-tokens.cssCores, fontes, espaçamento; personalize a aparência aqui
assets/fonts/Fontes incluídas: Noto Sans TC, Geist, Geist Mono (licença SIL OFL)
assets/example.mdExemplo completo: uma proposta fictícia de projeto, utilizando todos os componentes

Regra 1: Comentários sempre são por "seleção de texto"

Quando o usuário disser "adicione comentários" ou "versão com comentários", refere-se a um sistema como o Google Docs, onde você seleciona qualquer texto e adiciona um comentário — não a uma caixa de entrada ao lado de cada parágrafo. A interface de comentários desta skill é exatamente essa: use-a diretamente, sem criar outra.

Regra 2: Primeiro reescreva, depois gere a página

Primeiro, identifique o tipo de página

TipoExemploComo tratar
ExplicativoPlanos, propostas, relatórios, comparações, páginas para aprovaçãoReescreva conforme o guia abaixo para uma versão legível e, só depois, gere a página. Não jogue o rascunho diretamente no gerador
Revisão de texto originalContratos, textos finais, transcrições, material do clienteNão altere uma única palavra; gere a página com --no-lint. No máximo, adicione um > [!Conclusão] no início explicando o que deve ser revisado na página

Estilo para conteúdo explicativo

  1. Primeira tela já diz tudo: comece com > [!Conclusão] resumindo a conclusão em uma frase, seguido por > [!Decisão sua] listando o que o leitor precisa fazer. O contexto vem depois; o leitor não precisa rolar para tomar uma decisão.
  2. Cada coisa dita uma vez: se a conclusão já foi dita no quadro, não repita no texto; se um gráfico ou tabela já explica, não repita em parágrafo abaixo. Evite seções de "resumo".
  3. Linguagem clara: use as palavras que o leitor usa no dia a dia. Na primeira aparição de um termo técnico, use uma analogia ou um > [!Simples] para complementar com uma explicação.
  4. Se puder desenhar, não escreva: pergunte-se "que tipo de relação este trecho descreve?" e escolha o componente conforme a tabela abaixo. Texto puro: no máximo três linhas por parágrafo. Cada seção ## deve conter pelo menos um componente visual ou tabela.
  5. Curto: uma frase, um ponto principal. Elimine bordões como "ou seja", "em outras palavras", "vale notar que".
  6. Elimine repetições, não informações: números, datas, nomes e consequências nunca podem ser omitidos ou alterados.

Guia rápido de componentes visuais

Escreva algumas linhas com sintaxe curta; o gerador desenha o gráfico. Use | (barra vertical larga) como separador e → para setas. Veja o exemplo completo em assets/example.md.

O que este trecho descreveComponenteSintaxe
Antigo vs novo, agora vs depois da mudançaComparação```comparação: primeira linha agora → depois da mudança, depois cada linha item|antigo → novo
Como o sistema é composto, fluxo de dadosArquitetura```arquitetura: cada linha um nível nível|caixa, caixa; dentro do nível, use a → b para ordem; entre níveis, pode inserir ↓ descrição
O que acontece quandoLinha do tempo```linha-do-tempo: cada linha tempo|título|descrição; início da linha: ✅ concluído, 👉 agora
Sequência, etapas, causa e efeitoPassos```passos: cada linha título|descrição, numeração automática; até 4 passos em linha horizontal, 5+ em vertical
Números-chaveNúmeros```números: cada linha número unidade|rótulo|nota; espaço entre número e unidade para tornar a unidade pequena
Opções, quem faz o quê, itens paralelosCartões```cartões (ou opções, divisão): cada linha título|uma linha|outra linha; início com ★ marca como opção recomendada
Comparação em várias colunasTabelaTabela markdown comum. Quando o cabeçalho contém "agora/antigo" e "depois/novo/sugerido", a coluna antiga fica cinza e a nova, verde claro
Fluxo com ramificaçõesCartões de fluxoDiagramas ASCII ou mermaid (graph/flowchart com TD, LR); se não converter bem, mantém o original
Conclusão, decisão, atenção, riscoQuadro de destaque> [!Conclusão] título, a partir da próxima linha > conteúdo. Use: Conclusão, Decisão sua, Atenção, Risco, Feito, Simples, Explicação
StatusMarcador coloridoInline: {verde:Concluído} {amarelo:Aguardando você} {vermelho:Empacado} {azul:Em andamento} {cinza:Não será feito}
Palavra-chave em uma fraseDestaque==palavra-chave==, no máximo um por parágrafo
  • As cores têm significado fixo: azul é conclusão e informação; verde é concluído e depois da mudança; amarelo é atenção e espera; vermelho é risco e empacado. "Decisão sua" aparece apenas uma vez na página.
  • Se a sintaxe estiver errada, a página não quebra — o bloco vira um bloco de código com fundo cinza. Após gerar, veja se algum bloco que deveria ser gráfico ainda está cinza.
  • Para relações de causa e efeito ou sequência, use Passos ou Linha do tempo; para itens independentes, use Cartões.
  • O texto dentro dos gráficos é texto real e pode ser selecionado para comentários.

Verificação de layout

Ao gerar a página, o sistema imprime automaticamente uma "Verificação de layout": se não houver quadro de conclusão no início, se um parágrafo for muito longo, se houver poucos componentes visuais, se houver palavras repetitivas, travessões, a mesma coisa dita duas vezes, etc. Se houver alertas, edite o markdown e gere novamente até aparecer "Verificação de layout: aprovado". Para revisão de texto original, use --no-lint.

Economia de recursos

  • Use sempre a sintaxe curta para gráficos; nunca desenhe HTML ou SVG manualmente, nem gere imagens externas.
  • Para alterar o conteúdo, edite o markdown e gere novamente; nunca edite o HTML de saída diretamente.
  • Listas muito longas podem ser recolhidas com --fold "3".

Regra 3: Sempre execute o gerador

  • A página de pré-visualização deve ser gerada exclusivamente com scripts/md-to-preview.py (fonte em md) ou scripts/convert/inject.py (HTML já diagramado). Não escreva CSS manualmente nem monte a funcionalidade de comentários por conta própria.
  • Para alterar a aparência, edite assets/preview-tokens.css e execute o gerador novamente.

Fluxo de execução

Etapa 1: Confirmar fonte e identidades

Identifique a partir do diálogo; se não conseguir, pergunte:

  • O que será pré-visualizado? (conteúdo recém-escrito no chat, ou arquivo fornecido pelo usuário)
  • Quem comentará? Identidades padrão: eu,visitante. Se for para o cliente, use algo como cliente,eu (o primeiro é a identidade padrão).

Se a fonte for o conteúdo do diálogo, salve-o primeiro em um arquivo md no diretório de trabalho atual do usuário (se não existir, crie uma pasta Pré-visualização na área de trabalho). O nome do arquivo deve descrever o conteúdo em português, por exemplo proposta-cliente-exemplo.md.

Etapa 2: Gerar a página

Fonte é md (caso mais comum):

python3 "$SKILL_DIR/scripts/md-to-preview.py" "<fonte>.md" "<saída>.html" \
  --identities "eu,visitante" --badges "rascunho,2026-10-19"
ParâmetroFunção
--identitiesLista de identidades separadas por vírgula; a primeira é a padrão
--badgesMarcadores cinza pequenos abaixo do título, separados por vírgula; se omitido, não exibe
--keyNome usado no navegador para armazenar comentários; deve ser único por página; se omitido, usa o nome do arquivo de saída
--titleTítulo do documento; se omitido, usa o primeiro título # do markdown
--fold "3,4"Recolhe seções de determinado nível em parágrafos expansíveis; útil para páginas longas
--no-lintIgnora a verificação de layout (use para contratos, textos finais)
--no-overlayVersão limpa, sem funcionalidade de comentários
--iconCaractere ou emoji no ícone da aba; se omitido, usa o primeiro caractere do título
--fonts copy/link/noneTratamento de fontes; padrão copy

Fontes: por padrão, uma pasta preview-fonts/ é criada ao lado do HTML de saída. 🚨 Ao enviar para outra pessoa, é necessário compactar o HTML e a pasta preview-fonts/ juntos; enviar apenas o HTML fará com que o sistema use fontes padrão (ainda funciona, mas fica menos bonito).

Imagens: blocos isolados de ![descrição](img/nome.jpg) no markdown serão convertidos em imagens com legenda, com caminhos relativos ao HTML de saída.

Fonte já é HTML diagramado (ex.: uma proposta que você mesmo criou): Não altera o layout, apenas adiciona a funcionalidade de comentários.

python3 "$SKILL_DIR/scripts/convert/inject.py" "<página>.html" -o "<página>-com-comentarios.html" --identities "eu,cliente"
  • -o deve ser um arquivo novo; a ferramenta nunca sobrescreve a fonte.
  • Se a página já tiver funcionalidade de comentários e for necessário atualizá-la, adicione --replace.

Etapa 3: Abrir para o usuário

Abra no navegador padrão do sistema:

# macOS
open "<saída>.html"
# Windows (o terminal do Claude é Git Bash, use start; no PowerShell, use Start-Process "<saída>.html")
start "" "<saída>.html"
# Linux
xdg-open "<saída>.html"

Informe ao usuário três coisas:

  1. Selecione qualquer texto que aparecerá "Adicionar comentário".
  2. As caixas de seleção podem ser clicadas diretamente.
  3. Após a revisão, clique no botão "Copiar tudo" no canto superior direito e cole o conteúdo de volta no chat.

Etapa 4 (opcional): Enviar para cliente comentar

  • Compacte o HTML e a pasta preview-fonts/ ao lado em um arquivo zip e envie ao cliente. Peça para ele descompactar e clicar duas vezes no HTML para abrir.
  • Defina as identidades conforme o papel do cliente, ex.: --identities "cliente,eu".
  • Os comentários ficam armazenados no navegador do cliente e não são sincronizados automaticamente. Peça ao cliente para clicar em "Copiar tudo" e enviar o texto por email ou mensagem.

Marcação de checkbox

Quando o usuário precisar decidir item por item de uma lista e as opções são fixas, crie checkboxes, não peça para ele digitar a resposta. Exemplos: decidir quais funcionalidades implementar ou não, selecionar alguns recursos de um conjunto, checklist de pré-lançamento. Se houver apenas uma ou duas opções, ou se for necessário justificar, pergunte diretamente ou use comentários por seleção de texto.

Como escrever

No markdown, use listas de tarefas; o gerador as converterá em caixas clicáveis:

### Obrigatório

- [x] Formulário de pedidos (preenchido pelo cliente, entra automaticamente no banco de dados)
- [ ] Calendário de turnos (cada funcionário vê apenas seu próprio turno)
  • - [ ] não marcado, - [x] marcado por padrão.
  • Cada grupo deve estar sob seu próprio título (## ou ###): na exportação, agrupa pelo título mais próximo acima.
  • Cada item deve ter um nome e uma breve descrição que o torne compreensível isoladamente; não escreva apenas "sim" ou "não".
  • Não pode haver dois itens com o mesmo texto sob o mesmo título.

O que acontece no navegador do usuário

  • O estado das checkboxes é armazenado no navegador e persiste mesmo após atualizar a página; o botão "Limpar" limpa apenas os comentários, não as checkboxes.
  • Ao clicar em "Copiar tudo", um bloco adicional é incluído no início:
## Resultado das checkboxes (marcadas 2/5)

### Definição de escopo › Obrigatório
- [x] Formulário de pedidos (preenchido pelo cliente, entra automaticamente no banco de dados)
- [ ] Calendário de turnos (cada funcionário vê apenas seu próprio turno)

Ao receber o resultado das checkboxes

  1. Salve o resultado exatamente como está em um arquivo e siga-o fielmente; não recorra à memória.
  2. Itens não marcados significam "não fazer" ou "manter como está"; não tome decisões por conta própria.
  3. Se houver itens conflitantes marcados no mesmo grupo, pergunte ao usuário.
  4. Se a ação impactar terceiros (enviar email, excluir arquivos, colocar em produção), primeiro liste o resultado final e só execute após o usuário confirmar "Pode fazer".

Como aplicar o "Resumo de comentários" recebido

Quando o usuário cola de volta o conteúdo do "Copiar tudo", ele contém: cada comentário com o texto original selecionado (citação), a posição (título do parágrafo), contexto anterior/posterior e o conteúdo do comentário.

Interpretação item por item

Aparência do comentárioInterpretação
Apenas um novo texto, sem verboSubstituir: troque a citação pelo texto do comentário
"Remover", "Tirar"Remova o trecho da citação (apenas o intervalo citado)
"Adicionar", "Incluir", "Mais um abaixo"Inserir: adicione conteúdo próximo à citação
Descritivo ("Pode...?", "Gostaria que...")Modifique conforme a solicitação
Ambíguo, com duas interpretações possíveisEscolha a alteração mais conservadora e informe claramente qual foi a escolha
  • Use a "posição" e o "contexto anterior/posterior" para localizar o ponto correto antes de modificar. Se o mesmo texto aparecer várias vezes na página, confirme pelo contexto que está alterando apenas um local.
  • Comentários de uma rodada podem se repetir em relação à rodada anterior; compare primeiro o que já foi alterado.

Aplicar, gerar novamente, reabrir

  1. Altere o markdown original e execute o gerador com o mesmo comando e o mesmo --key — nunca edite o HTML de saída diretamente (será sobrescrito na próxima execução). Com a mesma chave, os comentários antigos são preservados.
  2. Reabra a página para o usuário.
  3. Relate: liste item por item "qual comentário → o que foi alterado", marcando suas escolhas quando houver ambiguidade.

Notas técnicas (para o Claude, não precisa informar o usuário)

  • A ancoragem dos comentários usa "texto selecionado + contexto anterior/posterior"; pequenas alterações no conteúdo são reposicionadas automaticamente. Se não encontrar, marca como "Texto original alterado".
  • O destaque usa a CSS Custom Highlight API do navegador, sem modificar a estrutura da página. Navegadores Chrome, Edge e Safari (versões recentes) são compatíveis; em navegadores incompatíveis, apenas o destaque amarelo não aparece, mas os comentários na barra lateral funcionam normalmente.
  • Comentários e checkboxes são armazenados no localStorage do navegador, com uma chave diferente para cada página (--key). Caso contrário, comentários de páginas diferentes se misturariam.
  • Após carregar a interface de comentários, o objeto window.PreviewComments fica disponível: .refresh() reposiciona os destaques, .data() retorna todos os comentários, .exportMd() retorna o markdown exportado.
  • O z-index de popups da própria página deve ser inferior a 10400 para que os botões de comentários não fiquem ocultos.

Habilidades Relacionadas