Project Management con Spec Driven DevelopmentBeta

0%
Bloque Técnico-Operativo

Módulo 07

CLI para PMs

4.5hBashGitGitHub CLIcURLjq

Bash, git, cURL, jq y gh CLI. Flujos de trabajo reales: revisar PRs desde terminal, consultar APIs sin Postman, automatizar tareas repetitivas.

Recursos descargables

Cheatsheet de Comandos

Referencia rápida de los 50 comandos más útiles para PMs: git, gh CLI, jq, cURL

Markdown

Aliases de Terminal para PMs

Aliases y funciones Bash/Zsh listos para tu .bashrc: git, gh CLI, cURL+jq y atajos de productividad, con instrucciones de instalación incluidas

Shell Script
En este módulo
01
Introducción Por qué la terminal es la herramienta más subestimada de un PM

Si eres PM y la palabra terminal te da ansiedad, este módulo es para ti.

Déjame adivinar: cuando necesitas un dato de una API, le pides a un ingeniero que te lo consiga. Cuando quieres saber cuántas estrellas tiene un repo de GitHub, abres el navegador. Cuando necesitas transformar un JSON, lo pegas en un conversor online. No está mal. Pero es lento. Y lo peor: te hace dependiente.

La CLI no es solo para developers. En este módulo no vas a aprender a programar: vas a aprender a pedirle datos a una API sin abrir el navegador, a navegar archivos y a transformar datos con comandos que caben en una línea. Sin mouse. Sin pedirle permiso a nadie.

Cuando el desarrollador te diga "te mando el endpoint", tú vas a responder: "dame 5 minutos y te cuento qué encontré".

Vamos.

02
Desarrollo teórico-práctico Terminal, Git, cURL y jq: el vocabulario mínimo del PM técnico

2.1. La Terminal es un Micrófono, No un Taladro

El mayor miedo del PM no técnico es: "si escribo el comando equivocado, voy a romper algo."

🎙
Analogía

Piensa en la terminal como un micrófono: le dices a la computadora qué hacer, y ella responde. Si el comando está mal, solo recibes un mensaje de error. Nadie se lastima.

La única excepción

La terminal local no puede romper nada importante a menos que ejecutes comandos destructivos como rm -rf / (borrar todo). Y ese comando no se escribe por accidente.

Analogía (Producción Audiovisual): cuando un editor de video abre la línea de tiempo ve capas, clips y transiciones. Parece complejo, pero cada acción tiene un atajo de teclado. La terminal es lo mismo: atajos que, una vez memorizados, son más rápidos que el mouse.

2.2. El Mapa de la Terminal

Todo empieza por entender qué te está diciendo el prompt:

Anatomía del prompt usuario@computadora:~$
usuarioquién eres @separador computadoradónde estás ~carpeta actual (~ = home) $listo para recibir comandos

Comandos básicos de navegación:

ComandoQué hace
pwd¿Dónde estoy? (Print Working Directory)
ls¿Qué hay aquí? (List)
cd carpetaIr a carpeta
cd ..Subir un nivel
cd ~Ir a home (siempre puedes volver aquí)
clearLimpiar la pantalla
Regla de supervivencia

Siempre puedes volver a casa con cd ~. No importa cuán perdido estés.

2.3. Git para PMs: Lo Mínimo que Necesitas Saber

No vas a ser contributor. Pero sí necesitas entender el flujo de datos de Git:

Working Directory
Tus archivos locales, tal como los editas.
sale con: git add archivo.md
Staging Area
Staging: archivos listos para guardar.
sale con: git commit -m "mensaje"
Repo Local
Cada commit queda guardado en tu máquina.
sale con: git push
Repo Remoto
GitHub: visible y compartible con el equipo.
El flujo de datos de Git: cada comando empuja tus cambios una etapa hacia la derecha.

Comandos que usarás como PM:

# Clonar un repositorio (bajar archivos a tu máquina)
git clone https://github.com/usuario/repo.git

# Ver el estado de los archivos
git status

# Ver qué cambió entre versiones
git diff

# Bajarte los cambios más recientes
git pull

# Ver el historial de cambios
git log --oneline

# Crear una rama para trabajar sin romper nada
git checkout -b nombre-de-tu-rama

# Subir tus cambios
git add -A
git commit -m "descripción del cambio"
git push origin nombre-de-tu-rama
Para el PM

No necesitas saber mergear ni resolver conflictos. Con clone, pull, status, add, commit y push puedes gestionar documentos de especificaciones sin depender de nadie.

2.4. cURL: El Navegador sin Ventanas

cURL es la herramienta que te permite hablar con servidores sin abrir el navegador. Cualquier operación CRUD de una API REST puedes hacerla con cURL:

GET → Read
Leer datos sin modificarlos.
Es el verbo por defecto: curl URL
POST → Create
Crear un recurso nuevo.
Lleva cuerpo JSON: -X POST -d '{...}'
PUT → Update
Actualizar un recurso existente.
Apunta a un id: -X PUT .../items/1
DELETE → Delete
Borrar un recurso.
Sin cuerpo: -X DELETE .../items/1
# GET: Obtener datos
curl https://api.github.com/repos/github/spec-kit

# GET con headers (autenticación)
curl -H "Authorization: Bearer TOKEN" https://api.github.com/user

# POST: Crear datos
curl -X POST https://api.ejemplo.com/items \
  -H "Content-Type: application/json" \
  -d '{"nombre": "Nuevo Item", "precio": 100}'

# PUT: Actualizar datos
curl -X PUT https://api.ejemplo.com/items/1 \
  -H "Content-Type: application/json" \
  -d '{"precio": 150}'

# DELETE: Borrar datos
curl -X DELETE https://api.ejemplo.com/items/1
📞
Analogía

cURL es como pedir comida por teléfono en vez de usar una app. La app (navegador) es más bonita, pero el teléfono (cURL) funciona siempre, con cualquier restaurante, sin instalar nada nuevo.

2.5. jq: El Filtro para JSON

Las APIs devuelven JSON. Los humanos no leen JSON fácilmente. jq es el puente:

Anatomía del combo curl -s URL | jq '.campo'
curlhabla con el servidor -s"silent": sin barras de progreso URLel endpoint de la API |tubería: pasa la salida al siguiente jq '.campo'extrae solo lo que necesitas

Si ejecutas curl https://api.github.com/repos/github/spec-kit, obtienes un bloque enorme de JSON. Con jq, extraes solo lo que necesitas:

# Obtener solo el nombre del repo
curl -s https://api.github.com/repos/github/spec-kit | jq '.name'

# Obtener la descripción
curl -s https://api.github.com/repos/github/spec-kit | jq '.description'

# Obtener el número de estrellas
curl -s https://api.github.com/repos/github/spec-kit | jq '.stargazers_count'

# Obtener múltiples campos
curl -s https://api.github.com/repos/github/spec-kit | jq '{nombre: .name, estrellas: .stargazers_count, issues: .open_issues_count}'

El flag -s en cURL significa "silent" (no mostrar barras de progreso). Sin él, ves ruido técnico. Con él, solo ves la respuesta.

03
Paso a paso técnico (Hands-on) De instalar la terminal a consultar APIs reales en 6 pasos
  1. Preparar el entorno

    Windows:

    1. Instala Git Bash desde git-scm.com. Esto te da una terminal bash + git + cURL.
    2. Instala jq: winget install jqlang.jq (PowerShell como administrador).

    macOS:

    1. Terminal viene incluida. Ábrela desde Spotlight.
    2. Instala jq: brew install jq.

    Linux:

    1. Instala jq: sudo apt install jq.

    Verifica que todo funciona:

    # Esto debería mostrar las versiones de cada herramienta
    git --version
    curl --version
    jq --version
    
  2. Ejercicio 1: Navegar como un PM

    Abre Git Bash (Windows) o Terminal (macOS/Linux).

    # ¿Dónde estoy?
    pwd
    
    # ¿Qué hay aquí?
    ls
    
    # Crea una carpeta para el curso
    mkdir product-operator
    
    # Entra a la carpeta
    cd product-operator
    
    # Crea 3 subcarpetas: specs, scripts, benchmarks
    mkdir specs scripts benchmarks
    
    # Verifica que se crearon
    ls -la   # -la muestra archivos ocultos y detalles
    

    Qué aprendiste: mkdir (make directory), ls -la (list con detalles), cd (change directory).

  3. Ejercicio 2: Tu primer archivo desde la terminal
    # Crea un archivo de especificación vacío
    touch specs/login-feature.md
    
    # Escribe contenido en el archivo
    echo "# Feature: Login con Google" > specs/login-feature.md
    echo "**Prioridad:** P1" >> specs/login-feature.md
    echo "**Esfuerzo:** 5 puntos" >> specs/login-feature.md
    
    # Ver el contenido del archivo
    cat specs/login-feature.md
    
    # Agregar más contenido
    echo "## Criterios de Aceptación" >> specs/login-feature.md
    echo "- [ ] Usuario puede iniciar sesión con Google" >> specs/login-feature.md
    echo "- [ ] Usuario existente puede vincular cuenta" >> specs/login-feature.md
    
    # Ver el resultado
    cat specs/login-feature.md
    

    Qué aprendiste: touch (crear archivo vacío), echo > (escribir), echo >> (agregar), cat (ver contenido).

  4. Ejercicio 3: Obtener datos reales con cURL + jq

    Vamos a consultar datos reales de GitHub para hacer benchmark de repositorios de herramientas que usas como PM.

    ~108k
    estrellas de github/spec-kit — dato que vas a consultar tú, sin navegador
    1 línea
    de comando para extraer repo, estrellas, issues y descripción
    # Consultar datos del repo de Spec Kit
    curl -s https://api.github.com/repos/github/spec-kit | jq '{repo: .full_name, estrellas: .stargazers_count, issues: .open_issues_count, descripcion: .description}'
    

    Respuesta esperada (valores aproximados):

    {
      "repo": "github/spec-kit",
      "estrellas": 108000,
      "issues": 264,
      "descripcion": "Toolkit to help you get started with Spec-Driven Development"
    }
    

    Ahora compara con otro repo que te interese:

    # Consultar otro repo
    curl -s https://api.github.com/repos/n8n-io/n8n | jq '{repo: .full_name, estrellas: .stargazers_count, issues: .open_issues_count}'
    

    Ejercicio: consulta 3 repositorios de herramientas que uses (o te interesen) y responde:

    • ¿Cuál tiene más estrellas? (popularidad)
    • ¿Cuál tiene más issues abiertos? (posible señal de mantenimiento tenso)
  5. Ejercicio 4: Operaciones CRUD en un servicio de prueba

    Usaremos JSONPlaceholder, una API falsa para practicar:

    # GET — Leer datos
    echo "=== GET: Obtener todos los posts ==="
    curl -s https://jsonplaceholder.typicode.com/posts | jq '.[0:2]'
    # .[0:2] significa "los primeros 2 elementos del array"
    
    # GET — Leer un elemento específico
    echo "=== GET: Post #1 ==="
    curl -s https://jsonplaceholder.typicode.com/posts/1 | jq '.'
    
    # POST — Crear un nuevo recurso
    echo "=== POST: Crear post ==="
    curl -s -X POST https://jsonplaceholder.typicode.com/posts \
      -H "Content-Type: application/json" \
      -d '{
        "title": "Mi primer post desde la terminal",
        "body": "Esto lo escribió un PM sin abrir el navegador",
        "userId": 1
      }' | jq '.'
    
    # PUT — Actualizar un recurso existente
    echo "=== PUT: Actualizar post #1 ==="
    curl -s -X PUT https://jsonplaceholder.typicode.com/posts/1 \
      -H "Content-Type: application/json" \
      -d '{
        "id": 1,
        "title": "Post actualizado",
        "body": "Este post fue modificado desde la terminal",
        "userId": 1
      }' | jq '.'
    
    # DELETE — Borrar un recurso
    echo "=== DELETE: Borrar post #1 ==="
    curl -s -X DELETE https://jsonplaceholder.typicode.com/posts/1 | jq '.'
    

    Qué aprendiste: CRUD desde la terminal. Este es el mismo patrón que usa cualquier API REST. Si puedes hacer esto, puedes hablar con casi cualquier API.

  6. Ejercicio 5: Git para tu Spec Kit
    # Configura tu identidad (solo la primera vez)
    git config --global user.name "Tu Nombre"
    git config --global user.email "tu@email.com"
    
    # Inicializa tu carpeta como repositorio git
    cd ~/product-operator
    git init
    
    # Agrega todos los archivos
    git add -A
    
    # Guarda la primera versión
    git commit -m "init: estructura inicial del spec kit"
    
    # Ver el historial
    git log --oneline
    
    # Conéctalo a GitHub (crea el repo vacío en GitHub primero)
    # git remote add origin https://github.com/tu-usuario/product-operator.git
    # git push -u origin main
    

    Para el PM: Con esto ya puedes versionar tus documentos. Cada cambio queda registrado. Si alguien pregunta "¿cuándo cambió ese requerimiento?", abres git log y tienes la respuesta.

04
Cómo usarlo en tu día a día Cheatsheets, alias y el entregable del módulo

4.1. El Cheatsheet del PM (Póntelo en la Pared)

Navegación

ComandoAcción
pwd¿Dónde estoy?
ls¿Qué hay aquí?
cd carpetaIr a carpeta
cd ..Subir nivel
cd ~Volver a casa

Archivos

ComandoAcción
cat archivoVer contenido
touch archivoCrear archivo
mkdir carpetaCrear carpeta
cp a bCopiar a → b
mv a bMover / renombrar a → b
rm archivoBorrar archivo

cURL

ComandoAcción
curl URLGET (leer)
curl -X POST URL ...Crear
curl -X PUT URL ...Actualizar
curl -X DELETE URLBorrar
curl -s URL | jq '.'GET + formatear JSON

Git

ComandoAcción
git statusEstado actual
git add -APreparar todo
git commit -mGuardar versión
git pushSubir a GitHub
git pullBajar cambios
git log --onelineHistorial

4.2. Automatización Simple para tu Día a Día

Alias útiles para tu terminal:

Agrega estas líneas a tu archivo ~/.bashrc (Linux/Git Bash) o ~/.zshrc (macOS):

# Tu identidad como PM digital
alias gh-repo='curl -s https://api.github.com/repos/'

# Ver métricas de un repo rápido
gh-metrics() {
  curl -s "https://api.github.com/repos/$1" | jq '{estrellas: .stargazers_count, forks: .forks_count, issues: .open_issues_count}'
}

# Uso: gh-metrics github/spec-kit

4.3. Entregable del Módulo

🛠 Actividad: Bitácora de comandos + script de consulta

Parte A — Bitácora de comandos. Ejecuta los ejercicios y guarda el historial:

  1. Crea la estructura de carpetas de tu Spec Kit desde la terminal. (Ejercicio 1)
  2. Crea un archivo de especificación con echo y cat. (Ejercicio 2)
  3. Consulta 2 APIs distintas con cURL + jq: una real (GitHub) y una de prueba (JSONPlaceholder). Guarda los resultados en archivos. (Ejercicios 3 y 4)
  4. Inicializa git en tu carpeta y haz tu primer commit. (Ejercicio 5)

Para guardar el historial: history | tail -50 > bitacora-comandos.md

Parte B — Script de consulta personalizado. Escribe un script en bash (o PowerShell) que consulte una API que te interese y extraiga información relevante para tu trabajo. Ejemplo: el estado de los repositorios de tu equipo (issues abiertos, PRs pendientes). Apóyate en el kit del módulo: cheatsheet-comandos.md y aliases-pm.sh.

Formato de entrega — un archivo Markdown con:

  1. El historial de comandos (mínimo 15 comandos distintos ejecutados).
  2. El script personalizado que creaste.
  3. Una reflexión de 3 líneas: "¿Qué tarea que antes le pedía a un desarrollador ahora puedo hacer yo desde la terminal?"
⚠ Errores comunes
  • Error: copiar comandos desde un documento con comillas tipográficas (“ ”) — bash no las entiende. Corrección: escribe las comillas rectas (") directamente en la terminal.
  • Error: olvidar el flag -s en cURL y encadenar con jq entre barras de progreso. Corrección: usa siempre curl -s URL | jq cuando filtres la salida.
  • Error: ejecutar git add -A en la carpeta equivocada (por ejemplo, tu home completo). Corrección: verifica con pwd y git status antes de agregar.
  • Error: JSON mal formado en POST/PUT (comas finales, comillas simples en las claves). Corrección: valida primero con echo '{...}' | jq '.' — si jq lo lee, el servidor también.
  • Error: borrar con comodines sin verificar (rm *.md). Corrección: lista primero con ls *.md; lo que ves es exactamente lo que se borrará.
05
Rúbrica de evaluación Cómo saber si dominaste el módulo
Criterio No Aprobado (0) Aprobado (1) Sobresaliente (2)
1. Ejecuta correctamente operaciones CRUD con cURL Los comandos fallan por errores de sintaxis (faltan flags, comillas mal cerradas, URLs mal escritas) Los comandos GET funcionan pero los comandos POST/PUT/DELETE tienen errores en el formato JSON o en los headers Los 4 verbos CRUD funcionan correctamente, el PM entiende la diferencia entre GET, POST, PUT y DELETE, y puede consultar APIs no vistas en clase
2. Usa jq para extraer campos específicos de JSON No usa jq o solo usa jq '.' sin filtrar campos específicos Usa jq '.campo' para campos simples pero no puede extraer múltiples campos ni filtrar arrays Usa jq con confianza: extrae campos anidados, filtra arrays con .[], y construye objetos con {nombre: .campo}
3. Versiona documentos con git desde la terminal No usa git o solo usa git clone sin init/add/commit Hace init, add y commit pero no usa git status ni git log para revisar el estado del repositorio Maneja el ciclo completo: init, status, add, commit, log, pull, push. Puede explicar para qué sirve cada comando

Aprobación: 2 de 3 criterios en "Aprobado" o superior.

🔑 Lo esencial del módulo
  • La terminal es un micrófono, no un taladro: el peor escenario habitual es un mensaje de error.
  • Con pwd, ls, cd y cd ~ nunca estás perdido.
  • curl habla con cualquier API REST; jq convierte su JSON en respuestas legibles.
  • El ciclo add → commit → push versiona tus specs sin depender de nadie.
  • Autonomía: cada dato que antes pedías a un ingeniero ahora está a un comando de distancia.

Kit: CLI para PMs

ArchivoDescripción
⬇ cheatsheet-comandos.md Cheatsheet descargable de ~40 comandos esenciales con ejemplos
⬇ aliases-pm.sh Script de alias para .bashrc/.zshrc con funciones PM

📁 kits/m07-cli/