AI Commit ToolsExtensão do VS Code que gera mensagens de commit, descrições de PR, code reviews, explicações de mudanças e release notes a partir das suas alterações no Git — usando o Claude Code CLI local instalado na sua máquina (não usa a API/SDK da Anthropic diretamente, nem chamadas HTTP). Funciona em qualquer repositório. Os prompts foram escritos para fazer sentido em repositórios com stacks misturadas (Angular, React, TypeScript, JavaScript, Java), inferindo o "scope" e a terminologia a partir dos arquivos presentes no diff, em vez de assumir um único framework. ÍndiceCada seção abaixo é um bloco recolhível — clique no título para abrir/fechar.
|
| Comando | O que faz |
|---|---|
| AI Commit Tools: Generate Commit Message | Pega o diff das mudanças em staged (ou não staged, se você confirmar) e preenche a caixa de mensagem do Source Control com um Conventional Commit: uma linha só, em inglês, dentro do tamanho máximo configurado. |
| AI Commit Tools: Generate PR Description | Gera uma descrição em markdown (## Summary / ## Changes / ## Testing) a partir das mudanças em staged, copia para a área de transferência e abre num editor somente-leitura. |
| AI Commit Tools: Explain Changes | Resume o que mudou, por quê, e os impactos possíveis, num painel Webview. |
| AI Commit Tools: Review Changes | Revisa as mudanças em staged procurando bugs, melhorias, code smells, validações faltando e edge cases, num painel Webview. |
| AI Commit Tools: Generate Release Notes | Gera notas de release em markdown (## Features / ## Fixes / ## Refactors) num editor somente-leitura. |
| AI Commit Tools: Branch Summary | Compara a branch atual com a branch principal mais próxima (origin/main, origin/master, origin/develop, etc.) e resume as diferenças — útil antes de abrir um PR. |
Todos os comandos aparecem na Command Palette (Ctrl+Shift+P) e os cinco primeiros também
aparecem como botões no topo da view do Source Control (aquele ícone de branch na barra
lateral).
📋 Pré-requisitos
- Claude Code CLI instalado e acessível no
PATHdo sistema (ou apontado direto pelo caminho, nas configurações — ver abaixo). É o mesmoclaudeque você já usa no terminal. - Git instalado.
- A extensão de Git nativa do VS Code habilitada (já vem habilitada por padrão).
⚙️ Configurações
Essas configurações ficam em Settings → procure por "AI Commit Tools":
| Configuração | Padrão | O que faz |
|---|---|---|
claudeDevTools.executablePath |
"" (vazio) |
Caminho para o executável do Claude. Deixe vazio para detectar automaticamente via where (Windows) / which (Mac/Linux). |
claudeDevTools.configDir |
"" (vazio) |
Opcional. Define o CLAUDE_CONFIG_DIR do CLI, dando à extensão uma pasta de login/sessão própria, isolada do app Claude Desktop e do terminal. Vazio = usa o padrão (~/.claude). É esse campo que você troca para alternar entre contas — ver Usando várias contas. |
claudeDevTools.model |
"" (vazio) |
Modelo do Claude a usar (--model). Aceita apelidos como sonnet, opus, haiku ou um id completo tipo claude-sonnet-5. Vazio = usa o padrão do CLI. |
claudeDevTools.language |
"English" |
Idioma usado em PR, explain, review, release notes e branch summary. O idioma da mensagem de commit é controlado separadamente, pelo commitLanguage. |
claudeDevTools.commitLanguage |
"English" |
Idioma da mensagem de commit. Padrão inglês; mude para Portuguese para gerar em PT. Os tipos/escopos do Conventional Commits (feat, fix, chore, ...) ficam sempre em inglês. |
claudeDevTools.commitStyle |
"Conventional" |
Estilo da mensagem de commit. |
claudeDevTools.maxCommitLength |
72 |
Tamanho máximo (em caracteres) da mensagem de commit gerada. |
claudeDevTools.useStagedChangesFirst |
true |
Prioriza arquivos em staged; se não houver nada em staged, pergunta se quer usar as mudanças não staged. |
claudeDevTools.timeout |
60000 |
Tempo limite (em milissegundos) para cada execução do Claude CLI. |
claudeDevTools.debugMode |
false |
Liga logs detalhados (tamanho do prompt, stdout/stderr) no canal de output "AI Commit Tools". |
👥 Usando várias contas (pessoal / trabalho)
O CLI do Claude guarda o login numa pasta de config (por padrão ~/.claude), compartilhada
com o app Claude Desktop e com o terminal. Isso traz dois problemas:
- Trocar de conta dentro do app não muda a conta que a extensão usa — ela lê o login gravado em disco, não o que está selecionado na interface do app.
- Se você logar o CLI numa conta, o app é afetado junto (compartilham o mesmo arquivo).
A solução é dar a cada conta a sua própria pasta de config isolada (via CLAUDE_CONFIG_DIR)
e apontar a extensão para ela pelo campo Config Dir. Assim cada conta tem seu login
persistente, e trocar de conta na extensão vira mudar um único campo — sem refazer login.
Pré-requisito: um CLI que você controla
Para ter contas isoladas, use uma instalação do CLI via npm (independente do app):
npm install -g @anthropic-ai/claude-code
Descubra o caminho do executável (você vai colar no campo Executable Path):
Join-Path (npm root -g) "@anthropic-ai\claude-code\bin\claude.exe"
Isso imprime algo como C:\...\node_modules\@anthropic-ai\claude-code\bin\claude.exe. No
Windows use esse claude.exe (não o claude.cmd) — o .exe roda direto via spawn, sem shell.
Configuração inicial (uma vez por conta)
Escolha uma pasta de config para cada conta — qualquer caminho serve, desde que sejam
diferentes. Nos exemplos abaixo, $env:USERPROFILE é o seu diretório de usuário
(C:\Users\<SEU_USUARIO>), então as pastas ficam em .claude-personal e .claude-work.
Rode no PowerShell, uma vez para cada conta, entrando com a conta correspondente quando o
navegador abrir (troque o caminho do claude.exe pelo que você descobriu acima):
# Conta pessoal
$env:CLAUDE_CONFIG_DIR = "$env:USERPROFILE\.claude-personal"
& "C:\CAMINHO\PARA\claude.exe"
# dentro do Claude: /login → entre com a conta PESSOAL → depois /exit
# Conta do trabalho
$env:CLAUDE_CONFIG_DIR = "$env:USERPROFILE\.claude-work"
& "C:\CAMINHO\PARA\claude.exe"
# dentro do Claude: /login → entre com a conta do TRABALHO → depois /exit
O
$env:CLAUDE_CONFIG_DIR = ...vale só para aquela janela do PowerShell — é o que faz o login cair na pasta certa. Não precisa deixar isso configurado de forma permanente; quem passa essa variável no dia a dia é a própria extensão, a partir do campo Config Dir.
E deixe fixo na extensão (Settings → AI Commit Tools) — aqui os caminhos precisam ser
absolutos (o campo não expande ~ nem %USERPROFILE%):
| Campo | Valor |
|---|---|
| Executable Path | o caminho do claude.exe que você descobriu acima |
| Config Dir | C:\Users\<SEU_USUARIO>\.claude-personal (ou .claude-work) |
Trocar de conta no dia a dia
Esgotou o limite de uma conta e quer usar a outra? Só troque o valor do campo Config Dir entre as duas pastas:
- Pessoal →
C:\Users\<SEU_USUARIO>\.claude-personal - Trabalho →
C:\Users\<SEU_USUARIO>\.claude-work
A mudança vale na próxima execução (a extensão relê as settings a cada comando — nem precisa recarregar a janela). Não precisa mexer no Executable Path nem refazer login: cada pasta mantém sua sessão. O app Claude Desktop continua no que estiver, sem interferência.
Se um dia o login de uma conta expirar, é só repetir o
/loginnaquela pasta (o comando do PowerShell acima). O caminho nas settings continua o mesmo.Em macOS/Linux o conceito é o mesmo: use
export CLAUDE_CONFIG_DIR="$HOME/.claude-personal"e oclaudedowhich claude.
🔒 Como ela conversa com o Claude
Toda chamada usa execFile/spawn do Node com os argumentos passados como array de verdade
(['-p', prompt, '--model', modelo]) — nunca uma string de shell montada manualmente, e nunca
bash//bin/bash. Isso funciona igual no Windows, macOS e Linux, e evita qualquer risco de
injeção de comando mesmo que o diff tenha caracteres estranhos.
📦 Instalar de vez (uso no dia a dia)
Isso aqui é o que você precisa fazer uma única vez. Depois disso a extensão fica instalada
no seu VS Code, do mesmo jeito que qualquer extensão da Marketplace, e funciona automaticamente
em qualquer projeto/pasta que você abrir — não precisa mais rodar npm run watch nem
apertar F5.
1. Instalar o vsce (só na primeira vez)
npm install -g @vscode/vsce
2. Gerar + instalar com um comando só
Dentro da pasta do projeto (ai-commit-tools):
npm run reinstall
Esse script faz tudo: compila (esbuild), empacota sempre no mesmo arquivo
ai-commit-tools.vsix (sem ficar acumulando -0.1.0, -0.1.1, ...) e instala direto no seu
VS Code com code --install-extension ... --force (o --force sobrescreve a versão já
instalada sem perguntar).
Depois de rodar, feche e abra de novo qualquer janela do VS Code que já estava aberta (ou
rode o comando Developer: Reload Window na Command Palette) para ela carregar a versão nova.
Se preferir os passos manuais em vez do script:
npm run compile
vsce package --allow-missing-repository
code --install-extension ai-commit-tools-0.1.0.vsix --force
ou, pela interface: Extensions (Ctrl+Shift+X) → ... → "Install from VSIX..." e
selecione o .vsix gerado.
3. Pronto
A partir daqui, "AI Commit Tools" aparece na lista de extensões instaladas (como qualquer
outra), e os comandos (AI Commit Tools: Generate Commit Message, etc.) e os botões no Source Control
ficam disponíveis em qualquer janela do VS Code, em qualquer projeto, sem precisar abrir
essa pasta do ai-commit-tools de novo.
Quando você precisa reinstalar
Só se você (ou eu) alterar o código-fonte da extensão. Nesse caso, basta rodar npm run reinstall de novo e recarregar a janela do VS Code.
Verificando se está tudo certo
Depois de instalada, num projeto qualquer:
- Faça
git addde algum arquivo. - Abra a view de Source Control.
- Clique no ícone ✨ (Generate Commit) no topo da view, ou rode
AI Commit Tools: Generate Commit Messagepela Command Palette. - Se aparecer "Claude executable not found", configure o caminho manualmente em
Settings → AI Commit Tools → Executable Path (aponte pro
claude.exe/claude.cmdque você já usa no terminal).
🧑💻 Rodar e testar (modo desenvolvimento)
Isso é só para você mexer no código da extensão e ver o efeito. Não é o modo definitivo — veja a seção "Instalar de vez" para deixar funcionando sempre.
npm install
npm run watch # deixa o esbuild rodando e recompilando sozinho
Com o projeto aberto no VS Code, aperte F5. Isso abre uma segunda janela do VS Code (a "Extension Development Host") com a extensão carregada só naquela janela, só enquanto ela estiver aberta. Fechou a janela, a extensão some.
Scripts úteis:
npm run typecheck # checa tipos do TypeScript, sem gerar arquivo
npm run lint # eslint
npm run format # prettier --write
npm run compile # gera o bundle final em dist/extension.js
🚀 Publicar para o time (GitHub + .vsix)
.vsix)Aqui a extensão não vai pro Marketplace público. Ela fica num repositório GitHub, e cada
release traz o arquivo .vsix anexado — o time baixa e instala. Simples e sem burocracia.
Antes de publicar: preencher os placeholders
No package.json, troque:
"publisher": "your-publisher-id"→ um id em minúsculas com hífens (ex: seu usuário/handle do time). Para distribuição privada ele só compõe o id interno da extensão, não precisa ser registrado em lugar nenhum.- as URLs
REPLACE_WITH_YOUR_GITHUB_USER→ o dono/organização do repositório no GitHub.
1. Subir o código pro GitHub
Crie um repositório vazio no GitHub (ex: ai-commit-tools) e, na pasta do projeto:
git init
git add .
git commit -m "chore: initial commit"
git branch -M main
git remote add origin https://github.com/<SEU_USUARIO>/ai-commit-tools.git
git push -u origin main
2. Gerar o .vsix da release
npm run package
Gera o ai-commit-tools.vsix (usa vsce por baixo). Esse é o arquivo que o time instala.
3. Criar a Release no GitHub e anexar o .vsix
Pela interface do GitHub: Releases → Draft a new release, crie uma tag (ex: v0.1.0), e
arraste o ai-commit-tools.vsix para a área de anexos. Publique.
Dá pra automatizar isso: já incluí um workflow em
.github/workflows/release.ymlque, ao dar push de uma tagv*(ex:git tag v0.1.0 && git push origin v0.1.0), compila, empacota e cria a release com o.vsixanexado sozinho. Aí você nem precisa do passo 2 e 3 na mão.
4. Como o time instala
Cada pessoa baixa o .vsix da release e roda:
code --install-extension ai-commit-tools.vsix
ou, pela interface: Extensions (Ctrl+Shift+X) → ... → "Install from VSIX...".
Lembre o time de que, na primeira vez, cada um precisa fazer o setup de conta/Config Dir da seção Usando várias contas — o login do Claude é individual, não vai junto no
.vsix.
Lançando uma nova versão depois
- Suba a versão em
package.json(ex:0.1.0→0.1.1). - Commit + push.
git tag v0.1.1 && git push origin v0.1.1(o workflow cria a release), ou repita os passos 2 e 3 manuais.
🗂 Estrutura do projeto
src/
commands/ um arquivo por comando, só orquestra (chama os services)
services/ GitService, ClaudeClient, PromptBuilder, ResponseParser
ui/ Notifications, canal de Output, editor somente-leitura e painéis Webview
config/ leitor das configurações (Settings.ts)
types/ tipos mínimos da API da extensão vscode.git
extension.ts ativação da extensão / registro dos comandos