Llevaba semanas usando Gemini CLI sin problemas en mi Debian 13. Todo fluía: consultas rápidas, generación de código, debugging asistido. Hasta que un día, sin previo aviso, el comando gemini-cli simplemente… explotó.

Pantallazo rojo. Stack trace. Y ese error críptico que no decía nada a simple vista:

Si te ha pasado esto, respira. No rompiste nada. Es un bug conocido y tienes solución en menos de 2 minutos.

¿Qué está pasando realmente?

El error EBADF (Bad File Descriptor) en ioctl(2) es un clásico de Unix: significa que el programa intentó manipular un descriptor de archivo que no existe o no es válido. En este caso, node-pty —la librería que gestiona la terminal virtual— está intentando redimensionar la pseudo-terminal con un descriptor de archivo corrupto.

¿La causa? Las versiones recientes de @google/gemini-cli (posteriores a la 0.42.0) incluyen una actualización de node-pty que tiene este bug. No es culpa de Google directamente, sino de una dependencia que se rompió en el camino. Pero el resultado es el mismo: tu terminal interactiva de Gemini queda inservible.

Para colmo, el CLI tiene un actualizador automático en segundo plano que, cada vez que ejecutas gemini-cli, se encarga de reemplazar silenciosamente tu instalación por la última versión disponible. Así que aunque instales la versión estable, al próximo arranque el autoupdate la sobreescribe con la versión rota.

La solución en 3 pasos (probada, funciona)

Después de varias horas debuggeando, probar workarounds y revisar issues en GitHub, dimos con la receta definitiva. No es elegante, pero es efectiva al 100%.

Paso 1: Limpia la instalación actual

Primero eliminamos cualquier rastro de la versión corrupta:

Paso 2: Instala la versión estable 0.42.0

La versión 0.42.0 es la última que funciona sin el bug de node-pty. Instálala explícitamente:

Paso 3: Bloquea el autoupdate (la clave)

Aquí está el truco. El CLI ignora variables de entorno como NO_UPDATE o UPDATE_DISABLE, así que tenemos que recurrir a la fuerza bruta: quitarle los permisos de escritura a su propio directorio.

Con chmod 555 (lectura + ejecución, sin escritura), el actualizador en segundo plano intenta descargar la nueva versión pero no puede sobrescribir los archivos. Fallará silenciosamente y tú te quedas en la 0.42.0 para siempre.

Verás el mensaje «Update successful!» al arrancar, pero es un espejismo — el binario nunca se reemplaza de verdad. Pruébalo: funciona.

Alternativa: alias en el perfil de shell

Si la idea de modificar permisos del sistema no te convence (comprensible), puedes crear un alias que fuerce la versión estable cada vez:

Recarga la terminal (source ~/.bashrc) y usa simplemente gemini. El flag --yes evita que te pregunte cada vez si confías en el paquete.

¿Por qué no simplemente reportar el bug?

El bug está reportado en el repositorio oficial de google-gemini/gemini-cli. El equipo lo sabe. Pero mientras llega el fix oficial a una versión estable, estas soluciones te mantienen productivo hoy.

Conclusión

El error EBADF en ioctl(2) del Gemini CLI es frustrante, pero tiene solución. Con estos tres pasos —desinstalar, instalar la 0.42.0, bloquear autoupdate— recuperas tu asistente de terminal en cuestión de segundos.

Ambos métodos han sido probados en Debian 13 con Node v20.20.2 bajo NVM. Si te funcionó, compártelo — seguro hay más gente con el terminal roto sin saber por qué.

¿Te sirvió este tutorial? Déjalo en los comentarios y cuéntanos en qué distro lo probaste 👇


📊 Infografía: Solución EBADF en Gemini CLI

Infografía solución error EBADF Gemini CLI
📥 Descargar infografía