Saltar al contenido
claudemods

Contador de llamadas a herramientas de Claude Code con /tally

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

Permisos

  • 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.*).
  • Añade comandos/herramientasRegistra nuevos comandos de barra o herramientas invocables por ti o por Claude ($.command.register / $.tool.register).
probado con
v2.1.291
última prueba
requiere
Claude Code ≥ 2.1.287
superficies
spinner, transcripción, estado
código fuente
ClaudeMods (MIT)

Instalar dentro de Claude Code:

/plugin install cm-tool-call-counter --marketplace rotbit/claudemods-marketplace
Todas las opciones de instalación ↓

¿Qué hace este mod?

Este mod es un contador de llamadas a herramientas de Claude Code. Mientras Claude trabaja, la línea del spinner recibe un sufijo con el recuento del turno actual, por ejemplo · 7 tools, para que veas lo ocupado que está un turno sin desplazarte por la transcripción. Escribe /tally en cualquier momento para ver una tabla de la sesión hasta ahora:

**Tool calls** · this turn: 7 · this session: 41 (2 errors)

| Tool | Calls | Errors |
| --- | ---: | ---: |
| Bash | 18 | 2 |
| Read | 15 | 0 |
| Edit | 8 | 0 |

Es útil cuando quieres saber por qué un turno tardó tanto, si Claude está releyendo los mismos archivos o con qué frecuencia fallan sus comandos de shell. De forma opcional, la barra de estado mantiene el total acumulado: 🔧 41 tool calls (2 errors). Requiere Claude Code 2.1.287 o posterior.

Demo

La grabación pide a Claude una tarea que necesita varias herramientas. El sufijo del spinner va subiendo a medida que se hacen llamadas, y al ejecutar /tally después se imprime la tabla por herramienta.

Instalación

Instálalo con uno de los métodos del bloque de instalación. /tally se registra cuando empieza la sesión.

$ install cm-tool-call-counter

Requiere Claude Code ≥ 2.1.287

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

    /plugin install cm-tool-call-counter --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-tool-call-counter@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-tool-call-counter

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

Cómo funciona

El recuento se hace en un único hook de tool.call que observa todas las herramientas. Extraído de hooks/register.ts:

on('tool.call', async ($, e, next) => {
  const tool = String(e.tool)
  await update($, turn, t => addCall(t, tool))
  const now = await update($, session, t => addCall(t, tool))
  if (showInStatus) $.ui.status(statusText(now))

  const ran = await next(e)

  if (ran.deny !== undefined || ran.isError === true) {
    await update($, turn, t => addError(t, tool))
    const failed = await update($, session, t => addError(t, tool))
    if (showInStatus) $.ui.status(statusText(failed))
  }
  return ran
}).catch(($, e, next) => next(e))

on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
  if (!showInSpinner) return next(e)
  const { count } = await read($, turn)
  if (count === 0) return next(e)
  return next({ ...e, props: { ...e.props, suffix: spinnerSuffix(e.props.suffix, count) } })
})

Cada llamada se cuenta al empezar, en dos átomos de $.state: turn, que reinicia un hook de turn.start, y session. Después, el hook pasa la llamada sin cambios con next(e) y, si el resultado se denegó o viene marcado con isError, registra un error. El .catch ejecuta la llamada de todos modos si el recuento lanza un error, así que el mod nunca puede bloquear una herramienta.

El hook de ui.render para el punto Spinner solo reescribe la prop suffix y pasa todo lo demás a next, de modo que Claude Code sigue dibujando su propio spinner. Como el recuento está en $.state, el spinner se vuelve a dibujar en cuanto cambia el número. /tally se registra en session.start con $.command.register, y un hook de command.run para tally devuelve { text }, construido por formatTable en hooks/tally.ts.

Personalízalo

Cambia estas opciones en /config. El texto del spinner lo genera spinnerSuffix y el de la barra de estado statusText, ambos en hooks/tally.ts. Para ordenar la tabla de /tally de otra forma, edita la llamada a sort en formatTable.

AjusteTipoValor por defectoQué hace
showInSpinnerbooleantrueShow in spinner. Append " · N tools" (this turn's count) to the working spinner.
showInStatusbooleanfalseShow in status line. Also show the session's total tool calls and errors in the status line.

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

Permisos y seguridad

Intercepta llamadas a herramientas aparece porque el mod se engancha a tool.call para todas las herramientas. Solo observa: nunca deniega ni modifica una llamada, y no mira los argumentos más allá del nombre de la herramienta. Modifica la interfaz cubre el sufijo del spinner y el texto opcional de la barra de estado. Añade comandos/herramientas cubre /tally.

No ejecuta comandos, no lee archivos, no usa la red y no guarda nada entre sesiones. Desactívalo con /plugin disable cm-tool-call-counter, o inicia una sesión con todos los mods desactivados usando claude --safe-mode.

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.*).
Añade comandos/herramientas
Registra nuevos comandos de barra o herramientas invocables por ti o por Claude ($.command.register / $.tool.register).

Compatibilidad y solución de problemas

Probado con Claude Code 2.1.291 en la terminal de macOS. Si no ves ningún recuento:

  • Comprueba que claude --version sea 2.1.287 o posterior y que el mod esté habilitado en /plugin.
  • Ejecuta /reload-plugins después de una instalación desde la shell; /tally aparece cuando la sesión reinicia el mod.
  • El sufijo solo se muestra cuando un turno ha hecho al menos una llamada a una herramienta.
  • Puede que showInSpinner esté desactivado en /config.

Los recuentos cubren el tiempo desde que el mod se cargó en este proceso, así que se reinician tras una recarga.

Preguntas frecuentes

¿El contador de llamadas a herramientas cambia o ralentiza las llamadas?
No. Cuenta la llamada, deja que se ejecute sin cambios con next(e) y, después, cuenta un error si la llamada falló. Si el propio recuento falla, el manejador .catch ejecuta la llamada igualmente.
¿Qué cuenta como error en /tally?
Una llamada cuyo resultado vuelve con isError, o una que otro hook ha denegado, por ejemplo un mod de seguridad que rechaza un comando de Bash.
¿El recuento de la sesión sobrevive a un reinicio?
No. Los recuentos viven en $.state, que dura lo que dura el proceso actual de Claude Code. Una sesión nueva o una recarga del mod empieza desde cero.
¿/tally llama al modelo?
No. El hook de command.run responde directamente con los recuentos que ha recogido el mod, así que es instantáneo y no consume tokens.
¿Puedo ver el total sin abrir /tally?
Activa showInStatus en /config para mantener el total de la sesión y el número de errores en la barra de estado.
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

Rama git sobre el prompt funcionando en Claude Code

Rama git 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.

  • sobre el prompt
  • Ejecuta comandos
  • Intercepta llamadas a herramientas
  • Modifica la interfaz

probado con v2.1.291

Más en Comandos slash, Contexto, cuota y coste, Barra de estado y barra del prompt.