← Claude Code Hub
✦ Tip #166 Aug 15, 2026

Timeout en Claude Code: a los dos minutos se salva todo menos git

Tu comando largo se corta a los dos minutos y lo lees como un fallo. Casi siempre sigue vivo. Casi.

Dos comandos idénticos salvo un git --version delante: sin git se va al fondo y termina, con git muere con un SIGTERM a los 5 segundos

TL;DR A los dos minutos Claude Code ya no mata tu comando, lo manda al fondo. Salvo git, que no cumple ninguna de las cinco condiciones y sigue muriendo con un SIGTERM. Como git es el único sin red, es el único donde el valor por defecto decide: pon BASH_DEFAULT_TIMEOUT_MS a lo que tarde tu clone más lento.

Le pides a Claude que instale, compile o pase los tests. Tarda. A los dos minutos la cosa se corta y tú lees «ha fallado».

Casi siempre no ha fallado. Sigue vivo, corriendo por detrás. Pero hay un caso donde sí muere, y es justo el que menos te esperas.

El experimento

Dos comandos. Idénticos salvo por un git --version delante, que no hace nada. Los dos con el mismo límite de tiempo, que he bajado a 5 segundos para que la demostración no dure dos minutos.

$ python3 -c "import time; time.sleep(20)"

Command did not complete within its 5s timeout and was moved to the background
(ID: b1s1kxjyl). Output is being written to: .../tasks/b1s1kxjyl.output
$ git --version > /dev/null && python3 -c "import time; time.sleep(20)"

Exit code 143
Command timed out after 5s

Misma carga, mismo límite. El primero se va al fondo y termina. El segundo muere de un SIGTERM, que es lo que significa ese 143.

La única diferencia es que en el segundo aparece la palabra git.

Las cinco condiciones

Para que tu comando se vaya al fondo en vez de morir tienen que cumplirse las cinco:

Condición Qué significa
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS sin poner Si la tienes activada, nunca hay rescate
El comando parsea Si Claude Code no puede analizarlo, no lo rescata
No es «demasiado complejo» Complejo no es largo: es raro. Caracteres de control, espacios Unicode, espacios escapados con barra, sintaxis de zsh como ~[ o =cmd
Ninguna parte es git Detecta git, git ... y hasta xargs ... git
No empieza por sleep La lista negra completa es exactamente esa palabra

Cuatro son fontanería. La que te va a morder es la cuarta, porque git es lo que de verdad tarda: un clone de un repo con años encima, un push grande, un git lfs pull.

Cómo dejarlo arreglado

1. Mide tu git más lento

time git clone --depth 1 <tu-repo-mas-grande> /tmp/prueba-timeout

Ese número, con margen, es tu valor.

2. Ponlo en tus settings

En ~/.claude/settings.json:

{
  "env": {
    "BASH_DEFAULT_TIMEOUT_MS": "600000"
  }
}

Diez minutos. Se pone una vez y ya no vuelves a pensar en ello.

3. Para un caso suelto, pídelo y ya

No hace falta configurar nada si es una vez: dile a Claude que use un timeout más largo para ese comando concreto. El modelo puede pedir hasta el techo, y con git funciona igual de bien. La variable es para no tener que acordarte cada vez.

Lo que «irse al fondo» no significa

Que se salve no quiere decir que lo tengas resuelto.

El resultado no vuelve solo a la conversación: queda en un archivo que hay que ir a leer, y para ver todo lo que corre en paralelo está el panel /tasks.

Y hay un caso donde el rescate dura poco: cuando el comando pertenece a un subagente síncrono, lo matan en cuanto ese subagente da su respuesta final. En tu sesión principal no pasa, sigue corriendo y te avisan al terminar. Los subagentes tienen más sorpresas de este estilo.

El tercer final

Hay una tercera forma de morir que no tiene nada que ver con el tiempo:

Command killed: output file exceeded <límite>

Tu comando no tardó demasiado, habló demasiado. Un build ruidoso o unos tests verbosos pueden caer por volumen de salida. Ahí la palanca es BASH_MAX_OUTPUT_LENGTH, y la solución elegante es filtrar antes de que Claude lo lea, que es el hábito 6 de los diez para ahorrar tokens.

Referencia

Variable Por defecto Qué hace
BASH_DEFAULT_TIMEOUT_MS 120000 (2 min) El límite cuando nadie pide otro
BASH_MAX_TIMEOUT_MS 600000 (10 min) El techo que el modelo puede pedir. El techo real es el mayor de esta y la anterior, así que subir el default sube el techo
BASH_MAX_OUTPUT_LENGTH 30000 (máx. 150000) Caracteres de salida que Claude lee de vuelta
CLAUDE_CODE_AUTO_BACKGROUND_TIMEOUT_MS sin poner No alarga nada. Solo hace que se rinda antes y mande al fondo cuanto antes, con un suelo de 2 segundos
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS sin poner Desactiva el rescate por completo

Documentación oficial: Environment variables

Workshop para equipos

Multiplica el output de tu equipo sin sacrificar calidad: workshop AI First de 6 a 8 horas, online, sobre la plataforma Claude.

Ver el workshop
Guía gratuita

Los 51 esenciales, en PDF.

Una página por tip. Cinco capítulos. Lo que de verdad uso a diario en producción — sin teoría, sin humo.

  • I. Empieza bien 10 tips
  • II. Conciencia 3 tips
  • III. Maestría 22 tips
  • IV. Autonomía 10 tips
  • V. Comparativa 6 tips
¿Eres desarrollador/a Web profesional?

Recibirás la guía por email · Te unes a la newsletter Gravitas · Cancela cuando quieras

de 51
#

Wmedia · 51 Tips
Guía gratuita · 51 tips · 5 capítulos

Los 51 esenciales, en PDF.

¿Eres desarrollador/a Web profesional? · Cancela cuando quieras