Saltar al contenido
claudemods

Mod de rama git para Claude Code: rama y cambios sobre el prompt

Tu rama git, los archivos cambiados y el estado ahead/behind en una franja de una línea sobre el prompt de Claude Code.

Permisos

  • Ejecuta comandosPuede ejecutar programas de shell en tu equipo ($.process.run / spawn). Revisa el código fuente para ver exactamente cuáles.
  • Intercepta llamadas a herramientasVe cada llamada a herramienta que hace Claude (tool.call / tool.check) y podría bloquearla o modificarla.
  • Modifica la interfazDibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).
probado con
v2.1.291
última prueba
requiere
Claude Code ≥ 2.1.287
superficies
sobre el prompt
código fuente
ClaudeMods (MIT)

Instalar dentro de Claude Code:

/plugin install cm-git-branch --marketplace rotbit/claudemods-marketplace
Todas las opciones de instalación ↓

¿Qué hace este mod?

El mod de rama git para Claude Code coloca una línea sobre el cuadro de entrada que te dice dónde estás en git: ⎇ main · 3 changed · ↑1 ↓0. Ves el nombre de la rama, cuántas rutas aparecen como cambiadas en git status y cuánto va la rama por delante y por detrás de su upstream. Cuando HEAD está desacoplado, muestra en su lugar el hash corto del commit. Fuera de un repositorio git, la línea sencillamente no aparece.

Resulta especialmente útil cuando Claude edita en tu nombre. Te das cuenta enseguida si una sesión empezó en main en lugar de en una rama de funcionalidad, y el contador de cambios sube a medida que Claude edita, así que sabes cuándo toca revisar y hacer commit. Requiere Claude Code 2.1.287 o posterior.

Demo

La grabación inicia Claude Code con el mod cargado en un pequeño proyecto de demostración. Antes del primer prompt, la franja sobre la entrada ya muestra la rama y el número de archivos cambiados. Después se pide a Claude que liste los archivos de src; la franja permanece en su sitio mientras se ejecuta el turno y se actualiza cuando el turno termina.

Instalación

Usa cualquiera de los tres métodos del bloque de instalación. El método de una línea funciona dentro de una sesión en marcha; el método desde la shell necesita /reload-plugins en las sesiones que ya están abiertas.

$ install cm-git-branch

Requiere Claude Code ≥ 2.1.287

  1. 1.Una línea, dentro de Claude Code

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

    Pégala en una sesión abierta (v2.1.275+). Claude Code te pedirá primero añadir el marketplace.

  2. 2.Desde tu shell

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

    Después ejecuta /reload-plugins en cualquier sesión que ya esté abierta.

  3. 3.Pruébalo sin instalarlo

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

    Carga el mod solo para una sesión. No se añade nada a tu configuración.

Cómo funciona

El mod guarda el último estado de git en un átomo de $.state y lo dibuja en el punto de renderizado AbovePrompt. Estos son los 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))

Hay tres puntos de actualización. session.start toma la primera lectura e inicia un temporizador para los cambios hechos fuera de Claude Code. turn.complete actualiza tras cada turno del bucle principal; los turnos de subagentes (con un agentId) se omiten. El hook de tool.call para Bash deja que el comando se ejecute primero con await next(e) y después actualiza solo si el comando menciona git o gh pr checkout/merge. Su .catch deja pasar la llamada, así que un fallo del mod nunca bloquea tu comando.

refresh ejecuta un único git status --porcelain=v1 -b en $.session.cwd(). Ese comando da la rama, el upstream, el estado ahead/behind y la lista de cambios, así que no hacen falta llamadas separadas a rev-parse y rev-list. Una función pura, parseStatus en hooks/git.ts, se encarga de los repositorios nuevos sin commits y del HEAD desacoplado. Si git no está instalado o tarda demasiado, la franja se oculta en lugar de mostrar datos desactualizados.

Personalízalo

Cambia estas opciones en /config bajo el nombre del mod; el mod se recarga con los nuevos valores. El valor por defecto del temporizador se fija al principio de register, Math.max(2_000, ... 15_000), que además impone el mínimo de 2 segundos. Para cambiar el aspecto de la franja, edita los elementos Text del hook de ui.render: la rama se dibuja en bold y en cyan, y los detalles con dimColor.

AjusteTipoValor por defectoQué hace
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.

Cámbialos en Claude Code con /config: el mod se recarga en caliente.

Permisos y seguridad

Ejecuta comandos aparece porque el mod llama a $.process.run. Ejecuta exactamente dos programas: git status --porcelain=v1 -b y, solo cuando HEAD está desacoplado, git rev-parse --short HEAD. Ambos son de solo lectura, usan un array argv sin shell y tienen un tiempo límite de 10 segundos.

Intercepta llamadas a herramientas aparece porque se engancha a tool.call para Bash. Solo observa: nunca cambia ni deniega un comando, y actualiza después de que el comando haya terminado. Modifica la interfaz cubre la franja.

No lee el contenido de los archivos, no usa la red ni llama al modelo. Para desactivarlo de forma permanente, ejecuta /plugin disable cm-git-branch; para iniciar una sesión con todos los mods desactivados, usa claude --safe-mode.

Ejecuta comandos
Puede ejecutar programas de shell en tu equipo ($.process.run / spawn). Revisa el código fuente para ver exactamente cuáles.
Intercepta llamadas a herramientas
Ve cada llamada a herramienta que hace Claude (tool.call / tool.check) y podría bloquearla o modificarla.
Modifica la interfaz
Dibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).

Compatibilidad y solución de problemas

Probado con Claude Code 2.1.291 en la terminal de macOS. Si la franja no aparece, comprueba lo siguiente en este orden:

  • claude --version es 2.1.287 o posterior.
  • La sesión se inició dentro de un repositorio git; git status en la misma carpeta debería funcionar.
  • El mod está habilitado: el menú /plugin lo muestra en la pestaña Installed, con una línea "mod active".
  • Si instalaste desde la shell en una sesión abierta, ejecuta /reload-plugins.
  • Hay una encuesta u otro prompt abierto sobre la entrada. La franja se aparta mientras está visible y vuelve después.

En repositorios muy grandes, aumenta intervalMs para que git status se ejecute con menos frecuencia.

Preguntas frecuentes

¿El mod de rama git para Claude Code modifica mi repositorio?
No. Solo ejecuta git status --porcelain=v1 -b, y además git rev-parse --short HEAD cuando HEAD está desacoplado. Ambos son de solo lectura, se ejecutan sin shell y tienen un tiempo límite de 10 segundos.
¿Por qué no aparece la franja?
Los motivos más habituales son que la carpeta de la sesión no es un repositorio git, que Claude Code es anterior a la 2.1.287, que el mod está desactivado en /plugin o que una encuesta está ocupando el espacio sobre el prompt. Después de instalar desde la shell, ejecuta /reload-plugins.
¿Detectará un checkout que haga en otra terminal?
Sí, en un intervalo de actualización (15 segundos por defecto). Reduce intervalMs en /config si lo quieres antes, hasta un mínimo de 2 segundos.
¿Funciona en la aplicación de escritorio?
Sí. La franja AbovePrompt se dibuja en la terminal y en la pestaña Code de la aplicación de escritorio. En claude -p y en el panel de chat de la extensión de VS Code los mods se ejecutan pero no dibujan nada, así que allí la franja no se ve.
¿Puedo ocultar la franja cuando no hay nada que mostrar?
Activa hideWhenClean. La franja desaparecerá mientras el árbol de trabajo esté limpio y sincronizado con su upstream.
Medidor de contexto funcionando en Claude Code

Medidor de contexto

Contexto ocupado, uso del plan en 5 h y 7 días y coste de la sesión en la barra de estado, con aviso cerca del límite.

  • estado
  • aviso
  • Modifica la interfaz

probado con v2.1.291

Bloquear comandos peligrosos funcionando en Claude Code

Bloquear comandos peligrosos

Rechaza rm -rf /, force-push a main, DROP TABLE, curl | sh y otros comandos Bash destructivos antes de que se ejecuten.

  • aviso
  • Intercepta llamadas a herramientas
  • Modifica la interfaz

probado con v2.1.291

Contador de llamadas a herramientas funcionando en Claude Code

Contador de llamadas a herramientas

Cuenta las llamadas a herramientas por turno y sesión, muestra el total junto al spinner y añade /tally con un desglose.

  • spinner
  • transcripción
  • estado
  • Intercepta llamadas a herramientas
  • Modifica la interfaz
  • Añade comandos/herramientas

probado con v2.1.291

Más en Git y GitHub, Barra de estado y barra del prompt.