Skill compositora que pega texto/assunto e gera post de blog HTML completo no repo configurado em ~/.dev-team-kit/blog-config.json, com imagens (via skill 17 fal.ai ou skill 42 Playwright screenshot), commit+push automático, retorna URL pública via GitHub Pages. Trigger em: "post no blog", "publicar post", "escrever post", "blog post", "publish blog", "gera post", "criar post", "novo post no meu blog".
72
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Compositora AUTORAL. Recebe input (link/texto/assunto), pesquisa contexto adicional, produz post 100% original em PT-BR por default, publica no GitHub Pages, retorna URL.
Esta skill nunca copia, traduz nem se apresenta como adaptação de uma fonte. O post soa como se o dono do blog tivesse escrito do zero. Fluxo:
Para regras detalhadas de abstração de fonte, consulte docs/skill-guides/blog-publisher.md.
Anti-padrão: creditar a fonte, copiar verbatim, ou deixar qualquer pista de adaptação.
Segue GLOBAL.md, policies/anti-ai-writing.md, policies/handoffs.md e policies/tool-safety.md. Composta sobre skills 13, 17, 26 e 42.
{blog_repo_path}/posts/YYYY-MM-DD-{slug}.html com HTML válido{blog_repo_path}/assets/images/index.html e README.md atualizados via update-index.mjsIdentificar: tipo de input (texto vs assunto curto), idioma, tom, se há URL navegável para screenshot, e slug (kebab-case, max 50 chars, sem acentos).
Se config ~/.dev-team-kit/blog-config.json não existe, pausar e instruir o usuário a rodar scripts/init-blog-repo.mjs. Ver detalhes em docs/skill-guides/blog-publisher.md.
Para assunto curto: invocar skill 13 para voz/tom, escrever seguindo estrutura hook → contexto → ponto principal → exemplo → CTA, aplicar policies/anti-ai-writing.md.
Para texto pronto: converter para HTML semântico, aplicar policy anti-ai-writing como sweep (não reescrever).
Em ambos os casos: zero atribuição de fonte, zero "Fonte original", zero "segundo {autor da fonte}".
Gate obrigatório antes de salvar: rodar a ## Checklist de estilo para output publicado de policies/anti-ai-writing.md no corpo do post — sem em dash, sem ponto-e-vírgula, sem asteriscos soltos no texto corrido, variação de comprimento/estrutura de frase e parágrafo, sem headings genéricos ("Key Takeaways", "Final Thoughts"), sem transição conversacional falsa. Grep literal na lista de palavras banidas da policy → cada match encontrado é reescrito naquele trecho (não substituído por sinônimo da mesma lista) → grep de novo até zero matches antes de considerar o post pronto.
Salvar em {blog_repo_path}/.tmp-body-{slug}.html.
gpt-image-1-mini (default text-to-image)assets/images/{slug}-cover.{png|jpg}Para matriz completa de modelos e custos, ver docs/skill-guides/blog-publisher.md.
Gerar dois textos antes de invocar o scaffold:
--share-hook: 1-2 frases com tom de mistério/curiosidade, sem entregar a resposta--linkedin: texto pronto para colar, com hook + aprendizados + CTA + 3-5 hashtagsAmbos em PT-BR (ou língua do post). Aplicar anti-ai-writing, incluindo a checklist de output publicado (sem em dash, sem markdown/asteriscos, variação estrutural). Exceção deliberada: hashtags no bloco LinkedIn são convenção da plataforma, não um AI-tell — a regra "sem hashtags" da checklist vale para o corpo do post e copy de landing/app, não para social copy nativo de plataforma que usa hashtag por design. Ver exemplos em docs/skill-guides/blog-publisher.md.
cd {blog_repo_path} && node scripts/new-post.mjs \
--slug={slug} \
--title="{title}" \
--lang={lang} \
--excerpt="{excerpt}" \
--cover=assets/images/{slug}-cover.png \
--share-hook="{hook}" \
--linkedin="{texto linkedin}" \
--body=.tmp-body-{slug}.htmlcd {blog_repo_path} && rm .tmp-body-{slug}.html
git add -A && git commit -m "post: {title}" && git push origin mainAguardar ~30s antes de retornar URL.
Post publicado: {pages_url}/posts/YYYY-MM-DD-{slug}.html
Index: {pages_url}/| Anti-padrão | Por que evitar |
|---|---|
| Reescrever texto pronto sem permissão | User passou texto = quer publicar aquele texto |
| Gerar 10+ imagens | Distrai leitor e gera custo desnecessário |
| Postar sem cover image | OG sharing fica feio sem cover |
| Hardcode de paths absolutos no HTML | Quebra Pages. Sempre paths relativos |
| Commit sem rodar update-index.mjs | README e index.html ficam desatualizados |
| Creditar a fonte / footer "Fonte original" | Quebra o princípio AUTORAL |
| Publicar sem bloco LinkedIn | Perde o gancho de distribuição |
posts/YYYY-MM-DD-{slug}.html existe e é HTML válidoassets/images/{slug}-cover.* existegrep -iE "fonte original|adaptaç" {post} retorna vazio.share-block com hook e texto copiável)index.html e README.md listam o post novogit status limpo após commit+pushApós retornar URL, sugerir: compartilhar no LinkedIn (passar a URL), importar para Medium via medium.com/p/import, cross-postar para Dev.to/Hashnode.
74aa7c1
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.