wisp-writer: Escreva artigos com estilo consistente no tema Wisp
O Wisp preza pela calma, precisão e contenção. Os artigos são escritos em src/content/posts/<slug>/index.mdx (ou index.md), e o frontmatter é definido por src/content.config.ts. Este skill fornece:
SKILL.md
reference/ frontmatter.md style-guide.md elements.md templates/
scripts/ new_post.py check_post.py tests/ (Python + uv, dependências inline PEP 723, sem necessidade de instalação)
Convenções de comando
Todos os comandos são executados na raiz do site, no formato uv run skills/wisp-writer/scripts/<script>.py .... Ao copiar este skill para outro site Wisp:
- Coloque em
<site>/skills/wisp-writer/: os comandos permanecem inalterados. - Coloque em
<site>/.claude/skills/wisp-writer/ou~/.claude/skills/wisp-writer/: ajuste o caminho; o script procurará porastro.config.*ousrc/contenta partir do diretório atual, ou use--root <raiz_do_site>para especificar. - Se o site não for encontrado, o script exibirá um aviso e terminará com código de saída 2, sem escrever nenhum arquivo.
- Se o
uvnão estiver disponível:python3 <caminho>/new_post.py ...também funciona (usa apenas a biblioteca padrão, requer Python 3.10+).
Fluxo de trabalho
- Defina o público e os pontos principais. Antes de escrever, anote três coisas: quem é o leitor (o que ele sabe e não sabe), o que ele levará do artigo (uma conclusão em uma frase) e o tipo de artigo. Quando faltarem informações, pergunte ao usuário; não invente fatos, dados ou citações.
- Crie o artigo. Escolha o template de acordo com o tipo:
tutorial(tutorial),deep-dive(aprofundamento),algorithm(explicação de algoritmo, com componentes interativos),note(nota curta),paper-reading(leitura de artigo).O slug deve estar em kebab-case; se já existir, o script reportará erro. O script listará tags e categorias existentes; reutilize-as sempre que possível. Parâmetros:uv run skills/wisp-writer/scripts/new_post.py attention-explained \ --title "Explicação do Mecanismo de Autoatenção" --template deep-dive \ --tags "LLM,Transformer" --category Machine Learning \ --description "Da intuição à fórmula, explique o processo de cálculo da autoatenção."--draft,--md/--mdx,--date,--list-templates. - Escreva. Siga o guia de estilo, a sintaxe de elementos está em elements e os campos em frontmatter. Substitua todos os
TODOdo template. - Imagens e interatividade. Quando precisar de diagramas, use o skill wisp-diagram para gerar os arquivos fonte e
.wisp.svg, depois insira-os no artigo usando a sintaxe de referência de diagramas; fluxos simples podem usar Mermaid diretamente. Quando precisar de demonstrações interativas, use os componentes explainer existentes (atualmenteMatMul); outros algoritmos exigem novos componentes, cujo método está emdocs/guide/explainers.md— isso é uma alteração de código, deve ser discutida e aprovada separadamente, sem ser feita durante a escrita do artigo. - Verifique e corrija.
Saída no formatouv run skills/wisp-writer/scripts/check_post.py attention-explained --strictarquivo:linha nível regra explicação. Erros (error) devem ser corrigidos; avisos (warning) devem ser avaliados um a um e corrigidos se possível; informações (info) são apenas sugestões.--jsonpara saída processável por programas,--allpara verificar todos os artigos. - Visualize.
pnpm builddeve passar (valida frontmatter e Mermaid); para ver o resultado, usepnpm dev. Opcional: tire screenshots da página do artigo nos temas claro e escuro com Playwright para verificar se fórmulas, diagramas e blocos de código não transbordam e são legíveis no modo escuro.
Regras rígidas
- O corpo do texto começa com h2, não escreva h1; não pule níveis de cabeçalho; h2 deve ser um sintagma nominal.
title≤ 80 caracteres,description≤ 200 caracteres; adescriptiondeve deixar claro qual problema o artigo resolve.- Tags e categorias reutilizam a grafia existente, com a mesma capitalização (não tenha
llmeLLMao mesmo tempo). - Parágrafos em chinês usam pontuação de largura total (全角); não insira espaços manuais entre chinês e inglês; ênfase em chinês usa
**negrito**, não itálico. - Termos técnicos são traduzidos na primeira ocorrência com o original em inglês entre parênteses, como “自注意力(self-attention)”.
- Cada bloco de código tem um identificador de linguagem; blocos longos podem ter recolhimento opcional, mas por padrão não mexa.
- Cada imagem tem texto alternativo (alt) que descreve a conclusão que a imagem quer transmitir; legendas usam o formato
"Figura N: descrição". - Não codifique cores, não use
style=, não use escalas de cores do Tailwind; as cores só podem vir de variáveis do tema. - Artigos que usam componentes devem ser
.mdxe fazerimport; componentes interativos devem terclient:visible. - Não invente fatos, dados, citações ou links; marque claramente ou remova conteúdo sem certeza.
- Não altere artigos existentes, a menos que o usuário peça; trabalhe apenas dentro de
src/content/posts/<slug>/.
Exemplo de trecho
Abaixo, um trecho que segue o tom do Wisp (explica uma coisa, sem rodeios ou exageros):
## Por que dividir por √d
Suponha que cada componente de $q$ e $k$ seja uma variável aleatória independente com variância 1. Então o produto escalar $q \cdot k$ tem variância $d_k$. Quanto maior a dimensão, maior o produto escalar, e mais próxima de one-hot fica a softmax, tornando os gradientes muito pequenos.
Ao dividir por $\sqrt{d_k}$, a variância retorna a aproximadamente 1, e a saída da softmax permanece em uma faixa suave. Sem este passo, redes profundas são difíceis de treinar.
Compare: "Como todos sabem, este truque super simples, mas extremamente importante, pode melhorar muito o desempenho!" — vazio, exagerado, sem informação.
Erros comuns
- Começar com “Este artigo apresentará…”, “Com o desenvolvimento de…”; dê diretamente a conclusão ou o problema.
- Escrever
# Títulono corpo do texto; ou pular de h2 para h4. - Títulos em forma de frase (“Vamos ver como implementar”); devem ser sintagmas nominais (“Implementação”).
- Misturar vírgulas e parênteses de meia largura (half-width) em chinês; usar itálico para ênfase em chinês.
- Escrever componentes em arquivos
.md, ou esquecerimportem arquivos.mdx; esquecerclient:visibleem componentes interativos. - Imagens sem texto alternativo; referenciar
.excalidrawainda não gerado (desenhe primeiro, referencie depois); referenciar.wisp.svgem vez do arquivo fonte. - Usar novas tags para o mesmo conceito (como
Llm,大模型coexistindo comLLMjá existente). - Texto muito longo em nós Mermaid, causando sobreposição na renderização; deve ter no máximo cerca de 12 caracteres chineses.
- Deixar placeholders
TODOao entregar;check_post.py --strictconsegue detectá-los. - Escrever código sem explicação: antes do código, explique o objetivo; depois do código, destaque os pontos-chave ou a saída esperada.