
¡Bienvenido al taller de Gemini CLI! En este codelab, aprenderás a instalar, configurar y utilizar la interfaz de línea de comandos (CLI) de Gemini para potenciar tu flujo de trabajo de desarrollo.
Este taller está impartido por Carlos Alarcon. Conoce más en carlos-alarcon.com.
Gemini CLI no es solo un chat; es un agente colaborativo que vive en tu terminal, entiende tu código y puede ejecutar tareas complejas utilizando herramientas del sistema.
GEMINI.md)Positive : Este taller está diseñado para desarrolladores de todos los niveles. No necesitas experiencia previa con IA.

El primer paso es instalar la herramienta en tu sistema. Gemini CLI se distribuye como un paquete npm.
npm install -g @google/gemini-cli
gemini --version
Deberías ver un número de versión (ej. 1.0.0 o superior).
Positive : Si encuentras problemas de permisos en Linux/macOS, puedes necesitar usar sudo o configurar npm para instalar paquetes globales sin permisos de administrador.
Si quieres usar Gemini CLI dentro de scripts o pipelines, puedes ejecutarlo en modo no interactivo: le envías el prompt y termina al responder.
echo "¿Qué es el fine tuning?" | gemini
También puedes pasar el prompt directamente con un flag.
gemini -p "Genera un resumen rápido de este repo"
Tip : Útil para CI/CD y automatizaciones donde no hay TTY; la salida se imprime en stdout y el proceso finaliza al completar la respuesta.

Antes de empezar a chatear, necesitas conectar Gemini CLI con tu cuenta.
gemini
Negative : Alternativa con API Key: Si prefieres usar una API Key, selecciona "Use Gemini API key" en el menú y sigue las instrucciones para pegar tu clave de Google AI Studio.
Ahora que estás dentro, ¡probemos lo básico!
Escribe cualquier pregunta o instrucción directamente en el prompt.
Intenta esto:
Explica brevemente qué es la arquitectura MVC.
/)Gemini CLI tiene comandos especiales que empiezan con /.
/clear/help/quit o /exit/tools/memory show, /memory add <texto> o /memory refresh/extensionsPositive : Tarea práctica: Escribe /help para ver la lista completa de comandos disponibles.
Una de las características más potentes es la capacidad de leer tus archivos locales. Usa el símbolo @ para referenciar archivos o directorios.
echo "function suma(a, b) { return a - b; }" > bug.js
Negative : Nota: ¡Hemos introducido un bug intencional, restando en lugar de sumar!
Encuentra el error en este código: @bug.js
Gemini leerá el contenido de bug.js, analizará el código y te explicará que la función suma está restando.
También puedes referenciar carpetas enteras para resumir proyectos:
Resumen de este directorio: @.
Positive : El símbolo @ es extremadamente útil cuando trabajas en proyectos grandes. Puedes referenciar múltiples archivos en un solo prompt.
Gemini CLI no solo lee, también puede ayudarte a organizar tu espacio de trabajo. Vamos a simular una carpeta desordenada y pedirle que la organice.
Abre una nueva terminal y crea un desorden simulado:
mkdir desorden
cd desorden
touch foto1.jpg foto2.png notas.txt script.py data.json todo.md config.yml
cd ..
Entra en la carpeta desorden con Gemini CLI (o navega hasta ella).
Prompt:
Estoy en la carpeta 'desorden'. Mira los archivos que hay y organízalos en subcarpetas lógicas (ej. Imágenes, Documentos, Código). Muévelos automáticamente.
Gemini analizará los archivos (usando herramientas como list_directory) y propondrá un plan:
.jpg, .png a Imágenes/.txt, .md a Documentos/.py, .json, .yml a Código/ o Config/Te pedirá confirmación para ejecutar los comandos run_shell_command (como mv ...). Acepta y observa cómo tu carpeta queda limpia en segundos.
Positive : Este tipo de automatización puede ahorrarte horas cuando trabajas con proyectos grandes o desorganizados.
Gemini CLI puede ejecutar comandos de sistema por ti o permitirte ejecutarlos directamente sin salir de la herramienta.
Usa el prefijo ! para ejecutar un comando de shell y volver al chat.
Intenta esto:
!ls -la
Negative : En Windows usa !dir en lugar de !ls
También puedes pedirle a Gemini que ejecute comandos por ti en lenguaje natural. Gemini te pedirá confirmación antes de ejecutar acciones que modifiquen el sistema.
Prompt:
Crea un archivo llamado "hola.txt" que contenga el texto "Hola desde Gemini CLI".
Gemini generará una llamada a la herramienta run_shell_command o write_file. Aprobar la acción (presionando y si se solicita confirmación) creará el archivo.
Gemini CLI viene equipado con "herramientas" (Tools) que le dan superpoderes más allá de generar texto. Dos de las más útiles son google_web_search y web_fetch.
¿Necesitas información actualizada que el modelo no tiene en su entrenamiento?
Intenta esto:
Busca en internet el precio actual de la accion de Nvidia.
Gemini usará la herramienta google_web_search, obtendrá resultados reales y te dará una respuesta fundamentada.
Si tienes un enlace a una documentación o artículo:
Intenta esto:
Ingresa a https://www.carlos-alarcon.com y dime de que trata
La herramienta web_fetch descargará el contenido de la página para que Gemini pueda analizarlo, incluso si es muy largo.
Para ver qué herramientas tienes disponibles en tu sesión actual:
/tools
Positive : Las herramientas convierten a Gemini CLI en un asistente verdaderamente proactivo que puede interactuar con el mundo real.

Antes de explorar las integraciones avanzadas con MCP, vamos a poner en práctica todo lo aprendido con un proyecto completo y divertido.
Crearás un juego de navegador inspirado en el clásico juego del dinosaurio de Chrome, pero con un giro único: un desarrollador que salta sobre "bugs" de software en lugar de cactus.
✓ HTML5 Canvas para renderizado
✓ JavaScript moderno (ES6+)
✓ Animaciones fluidas (RequestAnimationFrame)
✓ Sistema de colisiones preciso
✓ Gestión de eventos (keyboard + touch)
✓ Audio Web API para efectos de sonido
✓ LocalStorage para guardar high score
✓ Código comentado y mantenible
✓ Sin memory leaks ni problemas de rendimiento
Este ejercicio es perfecto para demostrar el poder de Gemini CLI como asistente de desarrollo. Aquí te mostramos cómo aprovecharlo:
Si quieres ver el verdadero poder de Gemini CLI, intenta este prompt completo:
Crea un juego completo de browser tipo Chrome Dinosaur, pero con un desarrollador
saltando sobre bugs de software. El juego debe tener:
- Canvas HTML5 con game loop optimizado
- Desarrollador que salta (barra espaciadora o tap)
- Obstáculos: syntax errors, merge conflicts, runtime exceptions (con sprites diferentes)
- Power-ups: Debug Tokens (ralentizar tiempo o auto-fix próximo bug)
- Sistema de puntuación con high score persistente
- Dificultad progresiva
- Gráficos pixel art estilo retro
- Sonidos 8-bit (salto, colisión, power-up)
- Responsive (desktop + móvil)
- Easter egg: jetpack al llegar a 1000 puntos
- Código limpio, modular y optimizado
Crea los archivos: index.html, styles.css, game.js
Documenta el código y sigue las mejores prácticas.
bug-runner/
├── index.html # Estructura HTML con canvas
├── styles.css # Estilos pixel-art y responsive
├── game.js # Lógica principal del juego
├── player.js # (Opcional) Clase del jugador
├── obstacle.js # (Opcional) Sistema de obstáculos
├── powerup.js # (Opcional) Sistema de power-ups
└── README.md # Documentación del proyecto
requestAnimationFrame para animaciones suaves a 60 FPSwindow.devicePixelRatioTu juego estará completo cuando:
Positive : Este ejercicio combina creatividad, lógica de programación y optimización. Es perfecto para demostrar cómo Gemini CLI puede ser tu pair programmer ideal, ayudándote desde la planificación hasta el debugging.

MCP es un estándar abierto que permite a Gemini conectarse con tus datos y herramientas externas de forma segura. Piensa en ello como "plugins" universales que permiten a la IA leer bases de datos, interactuar con APIs o consultar documentación específica.
Un servidor MCP expone tres tipos de capacidades:
gemini mcp add <alias> <comando_para_iniciar_servidor>
# Ejemplo genérico (Node):
gemini mcp add docs npx -y @acme/mcp-docs-server
-e como variables de entorno:gemini mcp add github npx -y @modelcontextprotocol/server-github -e GITHUB_PERSONAL_ACCESS_TOKEN=tu_token
gemini mcp list
gemini mcp remove <alias>
/tools y /resources (si el servidor soporta recursos).@resource://docs/intro).github, tickets, db).Positive : MCP es un protocolo abierto creado por Anthropic, pero compatible con múltiples sistemas de IA, no solo Gemini.
Imagina que quieres que Gemini tenga acceso instantáneo a la documentación técnica de una librería específica sin tener que buscarla en internet. Para ello usamos servidores de documentación compatibles con MCP como context7.
settings.json (global en ~/.gemini/settings.json o de proyecto en .gemini/settings.json) y añade la entrada para Context7:{
"mcpServers": {
"context7": {
"httpUrl": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Accept": "application/json, text/event-stream"
}
}
}
}
Negative : Usa tu propia API key en CONTEXT7_API_KEY. Tras guardar, reinicia el CLI o usa /memory refresh para recargar la configuración.
Ahora puedes preguntar directamente sobre librerías que antes Gemini no conocía en profundidad.
Prompt:
Busca en la documentación de 'context7' cómo crear una solucion de agentes secuenciales en 'google ADK' explícamelo con un ejemplo.
Gemini usará la herramienta read_resource o similar del servidor context7-docs para obtener la información exacta y responderte con precisión técnica.
Vamos a conectar Gemini CLI con GitHub para que pueda ver tus repositorios, leer issues y revisar pull requests.
gemini mcp add github npx -y @modelcontextprotocol/server-github
gemini mcp add github npx -y @modelcontextprotocol/server-github -e GITHUB_PERSONAL_ACCESS_TOKEN=tu_token_aqui
¡Ahora Gemini es tu asistente de DevOps!
Prompt (Leer Issues):
Lista los últimos 5 issues abiertos en el repositorio 'google-gemini/gemini-cli' y resúmelos.
Prompt (Leer repos):
Dame el top 5 repos de mi cuenta con mas estrellas.
Gemini ejecutará herramientas como github_list_issues o github_read_file proporcionadas por el servidor MCP para traerte esa información en tiempo real.
Positive : Esto es extremadamente útil para code reviews, triage de issues y análisis de dependencias.

Las extensiones de Gemini CLI aumentan las capacidades de la herramienta al agrupar configuraciones de servidores MCP, archivos de contexto (GEMINI.md), comandos personalizados (archivos .toml) y restricciones de herramientas. Son la forma ideal de distribuir flujos de trabajo completos.
Utiliza los siguientes comandos en tu terminal para gestionar tus extensiones:
Instalar una extensión:
gemini extensions install <URL>
Listar extensiones instaladas:
gemini extensions list
Actualizar extensiones:
gemini extensions update
Las extensiones pueden encapsular comandos complejos. Por ejemplo:
gcloud.Ejemplo de instalación (Seguridad):
gemini extensions install https://github.com/google-gemini/gemini-cli-security
Las extensiones son simplemente carpetas que contienen un archivo gemini-extension.json. Este archivo define qué servidores MCP, comandos y contextos se añaden a la CLI.
Positive : Las extensiones transforman Gemini CLI de un chat genérico a una herramienta especializada para tu equipo y proyectos.
Hugging Face ofrece una extensión poderosa que te permite interactuar con modelos de IA, datasets y espacios directamente desde Gemini CLI.
Para instalar la extensión de Hugging Face, ejecuta el siguiente comando en tu terminal:
gemini extensions install https://github.com/huggingface/skills.git --consent
Negative : El flag --consent es necesario para aceptar automáticamente los permisos que requiere la extensión.
Una vez instalada, verifica que la extensión está activa:
gemini extensions list
Deberías ver huggingface/skills en la lista de extensiones instaladas.
Autenticación inicial: dentro de Gemini CLI, ejecuta /mcp auth huggingface-skills para iniciar sesión y autorizar la extensión antes de usarla.
Ahora puedes interactuar con Hugging Face desde Gemini CLI. Aquí algunos ejemplos:
Busca modelos de Hugging Face para tareas de ASR.
Muéstrame datasets de Hugging Face relacionados con sentiment analysis en español.
Dame información sobre el modelo "meta-llama/Llama-2-7b-chat-hf" de Hugging Face:
qué hace, cómo usarlo y sus requisitos.
Usa la skill "HF dataset creator" para redactar nuevas plantillas de clasificación few-shot en español para detectar spam en correos.
Busca Spaces de Hugging Face para generar imágenes con Stable Diffusion.
Positive : Esta extensión es especialmente útil para desarrolladores de ML/AI que trabajan frecuentemente con modelos de Hugging Face.

La extensión de PostgreSQL te permite interactuar con tus bases de datos directamente desde Gemini CLI, escribiendo consultas en lenguaje natural.
Antes de instalar la extensión, necesitamos una base de datos PostgreSQL para practicar. Usaremos Docker para crear una instancia local de forma rápida y sencilla.
Asegúrate de tener Docker instalado en tu sistema. Verifica con:
docker --version
Negative : Si no tienes Docker instalado, descárgalo desde docker.com
Ejecuta el siguiente comando para crear y arrancar un contenedor PostgreSQL:
docker run --name postgres-gemini \
-e POSTGRES_PASSWORD=gemini123 \
-e POSTGRES_USER=gemini \
-e POSTGRES_DB=workshop_db \
-p 5432:5432 \
-d postgres:16-alpine
Explicación de los parámetros:
--name postgres-gemini: Nombre del contenedor-e POSTGRES_PASSWORD=gemini123: Contraseña del usuario-e POSTGRES_USER=gemini: Nombre de usuario-e POSTGRES_DB=workshop_db: Nombre de la base de datos-p 5432:5432: Mapea el puerto 5432 del contenedor al host-d: Ejecuta en modo background (detached)postgres:16-alpine: Imagen ligera de PostgreSQL 16docker ps | grep postgres-gemini
Deberías ver el contenedor en estado "Up".
Vamos a crear algunas tablas y datos de prueba para trabajar con la extensión:
docker exec -i postgres-gemini psql -U gemini -d workshop_db <<EOF
-- Crear tabla de usuarios
CREATE TABLE usuarios (
id SERIAL PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
activo BOOLEAN DEFAULT true
);
-- Crear tabla de productos
CREATE TABLE productos (
id SERIAL PRIMARY KEY,
nombre VARCHAR(200) NOT NULL,
categoria VARCHAR(50),
precio DECIMAL(10,2),
stock INTEGER DEFAULT 0
);
-- Crear tabla de pedidos
CREATE TABLE pedidos (
id SERIAL PRIMARY KEY,
usuario_id INTEGER REFERENCES usuarios(id),
producto_id INTEGER REFERENCES productos(id),
cantidad INTEGER,
total DECIMAL(10,2),
fecha_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insertar usuarios de ejemplo
INSERT INTO usuarios (nombre, email) VALUES
('Ana García', 'ana@example.com'),
('Carlos López', 'carlos@example.com'),
('María Rodríguez', 'maria@example.com'),
('Juan Pérez', 'juan@example.com'),
('Laura Martínez', 'laura@example.com');
-- Insertar productos de ejemplo
INSERT INTO productos (nombre, categoria, precio, stock) VALUES
('Laptop Pro', 'Electrónica', 1200.00, 15),
('Mouse Inalámbrico', 'Accesorios', 25.00, 50),
('Teclado Mecánico', 'Accesorios', 89.99, 30),
('Monitor 27"', 'Electrónica', 350.00, 20),
('Webcam HD', 'Electrónica', 75.00, 25);
-- Insertar pedidos de ejemplo
INSERT INTO pedidos (usuario_id, producto_id, cantidad, total) VALUES
(1, 1, 1, 1200.00),
(2, 2, 2, 50.00),
(3, 3, 1, 89.99),
(1, 4, 1, 350.00),
(4, 5, 1, 75.00),
(2, 1, 1, 1200.00),
(5, 3, 2, 179.98);
-- Confirmar la creación
SELECT 'Tablas creadas exitosamente!' as mensaje;
EOF
Conéctate al contenedor y verifica los datos:
docker exec -it postgres-gemini psql -U gemini -d workshop_db -c "SELECT COUNT(*) FROM usuarios;"
Deberías ver que hay 5 usuarios en la tabla.
# Detener el contenedor
docker stop postgres-gemini
# Iniciar el contenedor
docker start postgres-gemini
# Ver logs del contenedor
docker logs postgres-gemini
# Eliminar el contenedor (cuidado, borra todos los datos)
docker rm -f postgres-gemini
# Conectarse manualmente a PostgreSQL
docker exec -it postgres-gemini psql -U gemini -d workshop_db
Positive : ¡Ahora tienes una base de datos PostgreSQL completamente funcional con datos de ejemplo! Estás listo para instalar y usar la extensión de Gemini CLI.
gemini extensions install https://github.com/gemini-cli-extensions/postgres
Ahora que tienes la base de datos corriendo en Docker y la extensión instalada, configura las variables de entorno para conectarte.
Configura las variables de entorno con los datos del contenedor:
# En tu terminal actual (temporal)
export POSTGRES_HOST="localhost"
export POSTGRES_PORT="5432"
export POSTGRES_DB="workshop_db"
export POSTGRES_USER="gemini"
export POSTGRES_PASSWORD="gemini123"
Para hacerlo permanente, añade a tu ~/.bashrc o ~/.zshrc:
# Añadir al final del archivo
export POSTGRES_HOST="localhost"
export POSTGRES_PORT="5432"
export POSTGRES_DB="workshop_db"
export POSTGRES_USER="gemini"
export POSTGRES_PASSWORD="gemini123"
Luego recarga tu configuración:
# Para bash
source ~/.bashrc
# Para zsh
source ~/.zshrc
Negative : Seguridad: Nunca compartas tus credenciales en repositorios públicos. Usa variables de entorno o archivos de configuración locales.
Inicia Gemini CLI y verifica que puedes conectarte a tu base de datos:
gemini
Dentro de Gemini CLI, prueba la conexión:
Conéctate a mi base de datos PostgreSQL y muéstrame cuántas tablas tengo.
Positive : Si ves las 3 tablas (usuarios, productos, pedidos), ¡la conexión funciona correctamente!
Ahora que todo está configurado, probemos la extensión con consultas en lenguaje natural sobre nuestros datos de ejemplo.
Muéstrame todas las tablas en mi base de datos PostgreSQL y sus columnas.
Muéstrame todos los usuarios de la base de datos con su nombre y email.
¿Cuántos productos hay en la categoría "Electrónica"?
Calcula el total de ventas por categoría de producto y ordénalos de mayor a menor.
Muéstrame el valor total del inventario (precio * stock) por categoría.
Genera un reporte de los usuarios que más han gastado, incluyendo
el número de pedidos y el monto total gastado.
¿Qué productos son los más vendidos? Muéstramelos ordenados por cantidad vendida.
Analiza esta consulta SQL y sugiere optimizaciones:
@query.sql
Busca inconsistencias en la tabla "pedidos" donde el total no coincida
con la suma de los items del pedido.
Genera un script SQL para migrar los datos de la tabla "usuarios_old"
a "usuarios_new", mapeando las columnas según este esquema: @schema.md
Analiza el plan de ejecución de esta query y explícame por qué es lenta: @slow_query.sql
gemini extensions list
Deberías ver postgres en tu lista de extensiones activas.
Positive : Esta extensión es invaluable para desarrolladores backend, analistas de datos y DBAs que necesitan interactuar frecuentemente con PostgreSQL.
Los archivos GEMINI.md son tu memoria persistente: contienen instrucciones que se envían automáticamente al modelo para que no repitas reglas en cada prompt.
~/.gemini/GEMINI.md se aplica a todos tus proyectos.GEMINI.md en el directorio actual y ascendiendo hasta la raíz del repo (carpeta con .git).GEMINI.md de subdirectorios (respeta .gitignore y .geminiignore). Todo se concatena y se muestra en el resumen de contexto.cat > GEMINI.md << 'EOF'
# Instrucciones del Proyecto
- Responde en español y con tono conciso.
- Prefiere ejemplos en TypeScript.
- Pide confirmación antes de ejecutar comandos destructivos.
EOF
api/) para sobre-especificar cuando trabajes allí:mkdir -p api
cat > api/GEMINI.md << 'EOF'
# Contexto API
- Usa FastAPI y tipado estricto.
- Resume antes de proponer cambios grandes.
EOF
@:mkdir -p docs
cat > docs/guia.md << 'EOF'
- Sigue el estilo de commits convencional.
- Ejecuta pruebas con `npm test` antes de sugerir deploy.
EOF
cat > GEMINI.md << 'EOF'
# Instrucciones del Proyecto
@./docs/guia.md
- Mantén las respuestas breves.
EOF
Refresca y valida que se cargaron todas las capas:
/memory refresh
/memory show
Haz una pregunta genérica (ej. ¿Cómo imprimo texto en la consola?) y notarás que respeta el estilo definido.
/memory show: inspecciona el contexto concatenado que verá el modelo./memory add <texto>: añade instrucciones rápidas a ~/.gemini/GEMINI.md sin abrir el editor./memory refresh: vuelve a escanear todos los GEMINI.md tras editar o mover archivos.Tip : Si necesitas usar otro nombre de archivo (ej. CONTEXT.md), puedes configurarlo en settings.json con context.fileName (ver siguiente sección).
settings.json controla el comportamiento del CLI (modelos, UI, contexto, seguridad). Puedes tener uno global y otro por proyecto; el del proyecto sobrescribe al global.
~/.gemini/settings.json para preferencias generales..gemini/settings.json para reglas del repo (se aplica al ejecutarse dentro del proyecto)./etc/gemini-cli/settings.json o equivalente por OS./settings para abrir el editor interactivo./memory refresh si cambiaste context.{
"model": { "name": "gemini-2.0-flash-exp" },
"ui": { "useFullWidth": true, "showCitations": true },
"context": {
"fileName": ["GEMINI.md", "CONTEXT.md"],
"loadMemoryFromIncludeDirectories": true
},
"tools": { "autoAccept": false }
}
"apiKey": "$GEMINI_API_KEY".false; evita dejar opciones obsoletas.¡Felicidades! Has completado el taller avanzado de Gemini CLI.
✅ Gestión: Instalación, autenticación y comandos básicos ✅ Archivos: Lectura (@) y organización automática ✅ Internet: Búsqueda y lectura de webs (google_web_search, web_fetch) ✅ MCP: Conexión avanzada con datos externos (GitHub, Docs) ✅ Extensiones: Ampliación modular de capacidades ✅ Memoria: Personalización persistente con GEMINI.md
Positive : ¡Gracias por participar en este taller! No dudes en experimentar y explorar todas las capacidades de Gemini CLI.