Communitygithub.com

Gerador de Changelog

Gera changelogs legíveis automaticamente a partir do histórico git. Formato Keep a Changelog, mensagens amigáveis ao usuário e criação opcional de GitHub Releases.

O que é Gerador de Changelog?

O **Gerador de Changelog** é uma habilidade para agentes de IA que automatiza a criação de changelogs e notas de versão a partir do histórico git. Ela segue o formato **Keep a Changelog**, reescrevendo mensagens de commit em termos amigáveis para o usuário final, e oferece a opção de criar **GitHub Releases**. Suporta múltiplas formas de entrada: intervalos de refs git (ex.: `v1.0.0...v1.1.0`), tags únicas (gera mudanças desde a tag até o HEAD), ou URLs/números de PRs (extrai mudanças apenas daquele PR). Seu fluxo é dividido em cinco fases: **Coleta** (commits, PRs e contexto do produto), **Categorização** (usando as seções Padrão: Adicionado, Corrigido, etc.), **Refinamento** (reescreve cada entrada de forma clara e concisa, focando no benefício para o usuário), **Revisão** (apresenta o changelog para aprovação) e **Saída** (insere no `CHANGELOG.md` e/ou cria uma GitHub Release). A habilidade gerencia automaticamente quebras de formato, oferece apêndices técnicos quando solicitado e lida com erros como `gh` não disponível ou refs inválidas.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AlemTuzlak/skills/tree/HEAD/skills/changelog

Perguntar na sua IA favorita

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

Documentação

O que Gerador de Changelog faz?

Gera changelogs legíveis automaticamente a partir do histórico git. Segue o formato Keep a Changelog, refina mensagens de commit para linguagem amigável e, opcionalmente, cria GitHub Releases.

Resolução de Entrada

A entrada principal é um intervalo de refs git. Resolva o argumento (se fornecido):

  1. Contém ... ou .. -> intervalo de refs git (ex.: v1.0.0...v1.1.0)
  2. Corresponde a uma única tag/ref -> daquela ref até HEAD
  3. Corresponde a uma URL do GitHub ou padrão #\d+ -> PR (extrai mudanças apenas daquele PR). Para entrada de PR único: leia o diff e a descrição do PR, categorize as mudanças, use o título do PR como entrada. Pule o cabeçalho de versão. Pergunte ao usuário se deseja anexar essas entradas a uma versão existente do changelog ou criar uma nova.
  4. Nenhum argumento -> pergunte: "Qual intervalo o changelog deve cobrir? Você pode fornecer um intervalo de refs git (ex.: v1.0.0...v1.1.0), uma tag (mudanças desde aquela tag) ou um número de PR."

Fluxo do Processo

digraph changelog {
    rankdir=TB;
    "Resolver entrada" [shape=box];
    "Fase 1: Coletar" [shape=box];
    "Fase 2: Categorizar" [shape=box];
    "Fase 3: Refinar" [shape=box];
    "Fase 4: Revisar" [shape=box];
    "Aprovado?" [shape=diamond];
    "Fase 5: Saída" [shape=box];

    "Resolver entrada" -> "Fase 1: Coletar";
    "Fase 1: Coletar" -> "Fase 2: Categorizar";
    "Fase 2: Categorizar" -> "Fase 3: Refinar";
    "Fase 3: Refinar" -> "Fase 4: Revisar";
    "Fase 4: Revisar" -> "Aprovado?";
    "Aprovado?" -> "Fase 3: Refinar" [label="revisões"];
    "Aprovado?" -> "Fase 5: Saída" [label="sim"];
}

NÃO pule fases. Faça perguntas em um ritmo natural. Se o usuário responder várias de uma vez, aceite respostas agrupadas e avance.

Se o usuário disser "apenas escolha os padrões" ou similar, escolha padrões razoáveis, informe o que escolheu e peça uma única confirmação.

Fase 1: Coletar

Passo 1 - Coletar commits e PRs

Execute git log entre as duas refs para coletar todos os commits. Se o repositório usar PRs, também verifique PRs mesclados no intervalo usando gh pr list --state merged.

Para cada commit/PR, extraia:

  • Mensagem do commit (assunto + corpo)
  • Arquivos alterados (para determinar o escopo)
  • Título e descrição do PR (se disponível)
  • Qualquer prefixo de tipo de commit convencional (feat, fix, chore, etc.)

Passo 2 - Ler contexto mais amplo do produto

Leia, se existirem: README, package.json (ou equivalente). Objetivo: entender o que é o produto para escrever descrições amigáveis.

Se nada for encontrado, pergunte: "Você pode descrever brevemente o produto? Preciso de contexto para escrever entradas de changelog amigáveis."

Passo 3 - Detectar formato existente

Verifique se o repositório tem um CHANGELOG.md existente. Se tiver:

  • Detectar o formato (Keep a Changelog, personalizado, etc.)
  • Detectar se usa rótulos com emojis (ex.: emojis para Novo, Correção de bug, Quebra) ou categorias em texto simples
  • Corresponder ao estilo existente

Se não houver changelog existente:

  • Padrão para formato Keep a Changelog
  • Pergunte: "Nenhum changelog existente encontrado. Você prefere rótulos com emojis (ex.: para Novo, Correção de bug) ou categorias em texto simples (Adicionado, Corrigido, etc.)?"

Fase 2: Categorizar

Classifique todas as mudanças nas categorias Keep a Changelog. Mudanças de Quebra recebem uma seção dedicada no topo:

  • Mudanças de Quebra - qualquer mudança que quebre comportamentos ou APIs existentes, ou que exija ação do usuário para atualizar. Inclua notas de migração para cada uma. Detecte a partir de feat!:, fix!:, rodapés BREAKING CHANGE: ou APIs removidas/renomeadas no diff.
  • Adicionado - novas funcionalidades
  • Alterado - mudanças em funcionalidades existentes
  • Obsoleto - funcionalidades que serão removidas
  • Removido - funcionalidades que foram removidas
  • Corrigido - correções de bugs
  • Segurança - correções de vulnerabilidades

Regras de categorização:

  • Se os commits seguem commits convencionais (feat:, fix:, etc.), use o tipo para categorizar
  • Se não, analise o diff e a mensagem do commit para determinar a categoria
  • Pule mudanças apenas internas (refatorações, adições de testes, mudanças de CI, bumps de dependência) a menos que afetem o comportamento visível ao usuário
  • Quando houver dúvida se uma mudança é visível ao usuário, inclua-a e deixe o usuário removê-la na revisão
  • Para intervalos com 50+ commits, agrupe mudanças relacionadas em entradas de nível superior (ex.: em vez de listar 12 correções individuais de API, escreva "Melhorias no tratamento de erros da API em vários endpoints"). Apresente a versão agrupada e deixe o usuário expandir qualquer grupo se quiser detalhes.

Apresente a lista categorizada:

"Aqui está o que encontrei neste intervalo:"

Adicionado (3)

  • Funcionalidade A
  • Funcionalidade B
  • Funcionalidade C

Corrigido (2)

  • Correção de bug A
  • Correção de bug B

"Algo para adicionar, remover ou recategorizar?"

NÃO prossiga até que o usuário confirme.

Fase 3: Refinar

Reescreva cada entrada em linguagem amigável:

  • Comece com o benefício para o usuário, não com o detalhe de implementação
  • "Relatórios agora carregam 3x mais rápido" não "Plano de execução de consulta SQL otimizado para o módulo de relatórios"
  • "Agora você pode exportar relatórios para PDF" não "Funcionalidade de exportação para PDF adicionada ao serviço de relatórios"
  • Mantenha cada entrada em uma linha (no máximo duas para mudanças complexas)
  • Inclua referências a PRs/issues quando disponíveis (ex.: (#123))

Cabeçalho de versão

Formato: ## [versão] - AAAA-MM-DD

Se o limite superior do intervalo for uma tag de versão (ex.: v1.2.0), use essa versão. Se o limite superior for HEAD ou um nome de branch, pergunte: "Qual número de versão este changelog deve usar?"

Use a data do commit mais recente no intervalo, no formato ISO (AAAA-MM-DD).

Apêndice técnico

Após gerar o changelog amigável, pergunte:

"Quer que eu também gere um apêndice técnico com detalhes de implementação? (útil para documentação voltada a desenvolvedores)"

Se sim, gere uma seção mais detalhada com especificações técnicas, guias de migração de mudanças de quebra e mudanças de API.

Regras de escrita

  • Nunca use travessões no conteúdo gerado. Sem caracteres "---". Use vírgulas, dois pontos, pontos ou parênteses em vez disso.
  • Linguagem amigável por padrão (sem jargão, sem nomes internos de funcionalidades)
  • Uma linha por entrada, no máximo duas para mudanças complexas
  • Tempo verbal consistente (passado: "Adicionado", "Corrigido", "Removido")
  • Inclua referências a PRs/issues quando disponíveis

Fase 4: Revisar

Apresente a entrada completa do changelog:

"Aqui está o changelog:"

## [1.2.0] - 2026-04-11

### Adicionado
- Agora você pode exportar relatórios para PDF (#123)

### Corrigido
- Dashboard não pisca mais ao carregar a página (#456)

"Quer alguma alteração?"

Aguarde aprovação. Prossiga para a saída somente após o usuário confirmar.

Fase 5: Saída

CHANGELOG.md

Detecte o CHANGELOG.md existente na raiz do repositório. Se encontrado, leia o arquivo inteiro, identifique o ponto de inserção (antes da primeira linha ## [), apresente o ponto de inserção proposto ao usuário e confirme antes de escrever. Se não encontrado, crie um com um cabeçalho padrão:

# Changelog

Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.

O formato é baseado no [Keep a Changelog](https://keepachangelog.com/).

Sempre confirme antes de escrever:

"Vou pré-anexar isso ao CHANGELOG.md. Pode prosseguir?"

GitHub Release

Após salvar o changelog, pergunte:

"Quer que eu também crie uma GitHub Release com este changelog?"

Se sim, use gh release create <tag> --notes "<conteúdo do changelog>" para criar a release. Se gh não estiver disponível, informe o usuário e pule.

Tratamento de Erros

  • gh não disponível -> informe o usuário, pule enriquecimento de PR e GitHub Release, dependa apenas do git log
  • Ref/tag inválida -> peça ao usuário para verificar
  • Nenhum commit no intervalo -> informe o usuário, peça para verificar o intervalo
  • Nenhum contexto do produto -> peça ao usuário para descrever o produto
  • Commits não convencionais -> recorra à análise de diff para categorização

O que esta habilidade NÃO faz

  • Gerenciar estratégia de versionamento (decisões de versionamento semântico são do usuário)
  • Publicar em registros de pacotes
  • Gerar posts de blog ou newsletters (use /blog-post ou /newsletter)
  • Lidar com estratégias de branching ou workflows de release

Individual skills in this repo

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

AlemTuzlak/skills

Use when the user wants to write a blog post about a feature, product change, PR, git diff, or any technical topic - accepts marketing briefs, PRs, git refs, codebase paths, or freeform descriptions as input

AlemTuzlak/skills

Use when writing, editing, or organizing documentation, when planning what docs a feature needs, and whenever planning or implementing a new feature or change in a repo (docs ship with the code). Also use when tempted to write docs without showing the discovered readers to the user, without asking for tone, or without loading simple-english and i-have-adhd. Triggers on "write docs for X", "document this feature", "add a guide", "update the docs", "reorganize the docs", "plan feature X", "implement X", or /docs.

AlemTuzlak/skills

Use when a bug is in play: a test fails, CI is red, an API returns the wrong result, a stack trace appears, or the user says it is broken or fix this. Don't use for a new feature with no failure, for types-only work, or for docs.

AlemTuzlak/skills

Use when the user invokes /i-have-adhd, says they have ADHD, or asks for ADHD-friendly output. Also used as a required writing filter by the docs skill. Don't use for marketing copy or after the user says "stop adhd mode" or "normal mode".

AlemTuzlak/skills

Use when a settled change must be turned into an ordered stack of small blocks before anyone implements. Don't use for unsettled intent, typos, comments, formatting, docs-only work, or writing the implementation itself.

AlemTuzlak/skills

Use when the user wants to write a product update email, feature announcement newsletter, or digest email for users or subscribers

AlemTuzlak/skills

Use when the user wants to turn a raw talking-head / screen-share recording into a finished, edited, annotated video plus a full content package. Removes silences, flags mistakes for the user to cut, transcribes, adds transcript-synced overlays (code, on-screen code highlights, word highlights, lists, comparisons, diagrams, section labels, punch-in zooms), renders with original audio, then generates blog/socials/YouTube content. Triggers on "produce a video", "edit my video", "annotate my recording", "/produce-video".

AlemTuzlak/skills

Use when the user runs /prove-it or says prove it, prove the changes, show me in the browser, or asks to prove a UI or API change. Don't use only because the agent is about to say done, for types-only work, or for docs with no behavior to prove.

AlemTuzlak/skills

Use when the user wants to write, draft, or author an RFC (Request for Comments) / technical design doc for a feature, change, or architectural decision. Interactively interviews the user, grounds the proposal in the actual codebase, presents 2-3 concrete API/code-snippet approaches to choose from, then writes a review-ready RFC. Triggers on "write an RFC", "draft an RFC", "RFC for X", "design doc for X", or /rfc.

AlemTuzlak/skills

Use when the user wants to deeply learn a new topic from scratch. Runs a pre-interview (current knowledge, end-goal proficiency, depth, practice load, background, scope), researches online (articles, niche-influencer blogs, canonical docs, subtopic landscape), then produces a structured markdown course with mandatory visual diagrams, evidence-based learning-science features (retrieval practice, spaced callbacks, worked-example fading, concept ledger, jargon gate, analogy hygiene), and a self-contained interactive HTML mini-course. Triggers on /teach-me, "teach me about X", "I want to learn X", "deep dive on X", "create a course on X", "study X with me".

AlemTuzlak/skills

Use when the change intent is already settled and the agent must map what a behavior change touches before an implementation plan or any code. Use for new features, bug fixes, and refactors that move a boundary. Don't use for typos, comments, formatting, lockfile-only diffs, docs with no code, or while the user is still deciding what they want.

AlemTuzlak/skills

Use when the user wants to transcribe a video or audio file to text with word-level timestamps — spins up a self-contained local Whisper (whisper.cpp) Docker service bundled in this skill and returns transcript.txt, transcript.srt, and word-level transcript.words.json. Also used as a building block by /produce-video. Triggers on "transcribe this video", "get a transcript", "transcribe-video".

AlemTuzlak/skills

Use when the user wants to write a video script for a product demo, feature walkthrough, launch video, or social media video about a feature or product change

AlemTuzlak/skills

Use when the user wants YouTube metadata for a video — a click-worthy title, an SEO/above-the-fold description, tags, and timestamped chapters. Accepts a transcript (ideally timestamped SRT), a topic, a PR, or a freeform description. Used standalone and by /produce-video. Triggers on "youtube title", "youtube description", "youtube chapters", "youtube tags", "youtube metadata", "youtube-copy".

Habilidades Relacionadas