Pular para o conteúdo
claudemods

Mod de branch do Git para Claude Code: branch e alterações acima do prompt

Mostra a branch do Git, a contagem de alterações e o status ahead/behind em uma faixa acima do prompt do Claude Code.

Permissões

  • Executa comandosPode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
  • Intercepta chamadas de ferramentasVê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
  • Altera a interfaceDesenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).
testado com
v2.1.291
último teste
requer
Claude Code ≥ 2.1.287
superfícies
acima do prompt
código-fonte
ClaudeMods (MIT)

Instale dentro do Claude Code:

/plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace
Todas as opções de instalação ↓

O que este mod faz?

O mod de branch do Git para Claude Code coloca uma linha acima da caixa de entrada que diz onde você está no git: ⎇ main · 3 changed · ↑1 ↓0. Você vê o nome da branch, quantos caminhos o git status informa como alterados e quanto a branch está à frente e atrás do upstream. Quando o HEAD está destacado (detached), ele mostra o hash curto do commit no lugar. Fora de um repositório git, a linha simplesmente não aparece.

Ele ajuda principalmente quando o Claude está editando por você. Você percebe na hora se uma sessão começou na main em vez de uma branch de feature, e o contador de alterações sobe conforme o Claude edita, então você sabe quando é hora de revisar e fazer commit. Requer Claude Code 2.1.287 ou posterior.

Demonstração

A gravação inicia o Claude Code com o mod carregado em um pequeno projeto de demonstração. Antes do primeiro prompt, a faixa acima da entrada já mostra a branch e o número de arquivos alterados. Em seguida, o Claude recebe o pedido de listar os arquivos em src; a faixa continua no lugar enquanto o turno roda e é atualizada quando o turno termina.

Instalação

Use qualquer um dos três métodos do bloco de instalação. O método de uma linha funciona dentro de uma sessão em andamento; o método pelo shell precisa de /reload-plugins nas sessões que já estão abertas.

$ install cm-git-branch

Requer Claude Code ≥ 2.1.287

  1. 1.Uma linha, dentro do Claude Code

    /plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace

    Cole em uma sessão em andamento (v2.1.275+). O Claude Code pede primeiro para adicionar o marketplace.

  2. 2.Pelo seu shell

    claude plugin marketplace add rotbit/claudemods-marketplace
    claude plugin install cm-git-branch@claudemods

    Depois execute /reload-plugins em qualquer sessão que já esteja aberta.

  3. 3.Experimente sem instalar

    git clone https://github.com/rotbit/claudemods-marketplace
    claude --plugin-dir ./claudemods-marketplace/cm-git-branch

    Carrega o mod só para uma sessão. Nada é adicionado às suas configurações.

Como funciona

O mod guarda o status mais recente do git em um átomo $.state e o desenha no ponto de renderização AbovePrompt. Estes são os hooks de hooks/register.tsx:

on('session.start', async ($, e, next) => {
  const started = await next(e)
  await refresh($)
  $.clock.every(intervalMs, () => {
    refresh($).catch(() => undefined)
  })
  return started
})

on('turn.complete', async ($, e, next) => {
  const result = await next(e)
  if (e.agentId === undefined) await refresh($)
  return result
})

on('tool.call', { tool: 'Bash' }, async ($, e, next) => {
  const ran = await next(e)
  if (mentionsGit(e.command)) await refresh($)
  return ran
}).catch(($, e, next) => next(e))

Há três pontos de atualização. session.start faz a primeira leitura e inicia um temporizador para captar mudanças feitas fora do Claude Code. turn.complete atualiza depois de cada turno do loop principal; turnos de subagentes (com agentId) são ignorados. O hook tool.call para Bash deixa o comando rodar primeiro com await next(e) e só atualiza se o comando mencionar git ou gh pr checkout/merge. O .catch dele repassa a chamada, então uma falha no mod nunca bloqueia o seu comando.

refresh executa um único git status --porcelain=v1 -b em $.session.cwd(). Esse comando sozinho fornece a branch, o upstream, o ahead/behind e a lista de alterações, então não são necessárias chamadas separadas de rev-parse e rev-list. Uma função pura, parseStatus, em hooks/git.ts, trata repositórios novos sem commits e o HEAD destacado. Se o git estiver ausente ou lento, a faixa é escondida em vez de mostrar dados desatualizados.

Personalize

Altere estas opções em /config, sob o nome do mod; o mod recarrega com os novos valores. O padrão do temporizador é definido no início de register, Math.max(2_000, ... 15_000), que também impõe o mínimo de 2 segundos. Para mudar a aparência da faixa, edite os elementos Text no hook ui.render: a branch é desenhada em bold e cyan, e os detalhes em dimColor.

ConfiguraçãoTipoPadrãoO que faz
intervalMsnumber15000Refresh interval (ms). How often to re-read git status between turns, in milliseconds (at least 2000).
showAheadBehindbooleantrueShow ahead/behind. Show commits ahead of and behind the upstream branch (↑1 ↓0).
hideWhenCleanbooleanfalseHide when clean. Hide the band while the work tree is clean and in sync with its upstream.

Altere isso no Claude Code com /config — o mod recarrega na hora.

Permissões e segurança

Executa comandos aparece porque o mod chama $.process.run. Ele executa exatamente dois programas: git status --porcelain=v1 -b e, somente quando o HEAD está destacado, git rev-parse --short HEAD. Os dois são somente leitura, usam um array argv sem shell e têm timeout de 10 segundos.

Intercepta chamadas de ferramentas aparece porque ele usa o hook tool.call para Bash. Ele apenas observa: nunca altera nem nega um comando, e atualiza depois que o comando termina. Altera a interface cobre a faixa.

Ele não lê o conteúdo de arquivos, não usa a rede e não chama o modelo. Para desligá-lo de vez, execute /plugin disable cm-git-branch; para iniciar uma sessão com todos os mods desligados, use claude --safe-mode.

Executa comandos
Pode executar programas de shell na sua máquina ($.process.run / spawn). Confira no código-fonte exatamente quais.
Intercepta chamadas de ferramentas
Vê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
Altera a interface
Desenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).

Compatibilidade e solução de problemas

Testado com Claude Code 2.1.291 no macOS, no terminal. Se a faixa não aparecer, verifique estes pontos na ordem:

  • claude --version é 2.1.287 ou posterior.
  • A sessão foi iniciada dentro de um repositório git; git status na mesma pasta deve funcionar.
  • O mod está ativado: o menu /plugin o mostra na aba Installed, com uma linha "mod active".
  • Você instalou pelo shell com uma sessão aberta: execute /reload-plugins.
  • Uma pesquisa ou outro prompt está aberto acima da entrada. A faixa sai do caminho enquanto ele está visível e volta depois.

Em repositórios muito grandes, aumente intervalMs para que o git status rode com menos frequência.

Perguntas frequentes

O mod de branch do Git para Claude Code altera o meu repositório?
Não. Ele só executa git status --porcelain=v1 -b, mais git rev-parse --short HEAD quando o HEAD está destacado. Os dois comandos são somente leitura, rodam sem shell e expiram após 10 segundos.
Por que a faixa não aparece?
Os motivos mais comuns são que a pasta da sessão não é um repositório git, o Claude Code é anterior à 2.1.287, o mod está desativado em /plugin ou uma pesquisa está ocupando o espaço acima do prompt. Depois de instalar pelo shell, execute /reload-plugins.
Ele percebe um checkout que eu faço em outro terminal?
Sim, dentro de um intervalo de atualização (15 segundos por padrão). Diminua intervalMs em /config se quiser mais rapidez, até o mínimo de 2 segundos.
Funciona no app desktop?
Sim. A faixa AbovePrompt é desenhada no terminal e na aba Code do app desktop. No claude -p e no painel de chat da extensão do VS Code os mods rodam, mas não desenham nada, então a faixa não fica visível ali.
Posso esconder a faixa quando não há nada para mostrar?
Ative hideWhenClean. A faixa então some enquanto a árvore de trabalho está limpa e sincronizada com o upstream.
Medidor de contexto em execução no Claude Code

Medidor de contexto

Uso do contexto, dos limites de 5 horas e 7 dias e custo da sessão na barra de status, com aviso perto do limite.

  • status
  • notificação
  • Altera a interface

testado com v2.1.291

Bloquear comandos perigosos em execução no Claude Code

Bloquear comandos perigosos

Recusa rm -rf /, force-push na main, DROP TABLE, curl | sh e outros comandos Bash destrutivos antes de rodarem.

  • notificação
  • Intercepta chamadas de ferramentas
  • Altera a interface

testado com v2.1.291

Contador de chamadas de ferramentas em execução no Claude Code

Contador de chamadas de ferramentas

Conta as chamadas de ferramentas do Claude por turno e por sessão, mostra o total junto ao spinner e adiciona /tally.

  • spinner
  • transcrição
  • status
  • Intercepta chamadas de ferramentas
  • Altera a interface
  • Adiciona comandos/ferramentas

testado com v2.1.291

Mais em Git e GitHub, Linha de status e barra do prompt.