Cap 10: Workflows de Desarrollo

Por: Artiko
claude-codeworkflowsrpiplan-modedesarrollo

Vanilla Claude Code vs Workflows

Vanilla (sin configuración)

Abrir claude, escribir lo que necesitas. Funciona para tareas simples pero tiene limitaciones:

  • Claude puede desviarse del objetivo
  • No hay estructura para tareas complejas
  • Difícil reproducir resultados consistentes

Con Workflows

Usar commands, agents y skills para estructurar el trabajo. Beneficios:

  • Resultados reproducibles
  • Tareas complejas divididas en pasos
  • Conocimiento compartido entre el equipo

El workflow canónico: Explore → Plan → Implement → Commit

La guía oficial de Anthropic documenta un workflow de cuatro fases. Es el marco de referencia; RPI (la sección siguiente) es una variante de tres fases que colapsa Commit dentro de Implement.

flowchart LR
    A["Explore<br/>plan mode: leer sin editar"] --> B["Plan<br/>plan detallado, Ctrl+G para editarlo"]
    B --> C["Implement<br/>salir de plan mode y codificar<br/>verificando contra el plan"]
    C --> D["Commit<br/>commit descriptivo + PR"]
  1. Explore: entrar en plan mode y dejar que Claude lea el codebase sin editar nada.
  2. Plan: pedir un plan detallado. Se puede abrir con Ctrl+G para editarlo en el editor antes de ejecutarlo.
  3. Implement: salir de plan mode y codificar verificando el resultado contra el plan.
  4. Commit: commit descriptivo y PR.

Cuándo saltarse el plan

El plan mode tiene coste en tokens y en tiempo. La regla oficial:

«If you could describe the diff in one sentence, skip the plan.»

Para un typo, añadir un log o renombrar una variable se pide directo, sin fase de planificación.

RPI: Research → Plan → Implement

Variante de tres fases del workflow anterior, útil para tareas complejas donde la investigación merece su propio artefacto:

Fase 1: Research (Investigar)

claude "Investiga cómo funciona el sistema de autenticación actual.
Lee los archivos relevantes, identifica los componentes,
y documenta el flujo completo."

Claude explora el codebase, lee archivos, y presenta un resumen. No modifica nada.

Fase 2: Plan (Planificar)

claude "Basándote en tu investigación, crea un plan para migrar
de JWT a sesiones server-side. Lista los archivos a modificar,
el orden de cambios, y los riesgos."

Claude crea un plan detallado. Se puede usar el plan mode para esto:

claude --permission-mode plan

En plan mode las ediciones quedan bloqueadas hasta que se apruebe el plan. Si auto mode está disponible y useAutoModeDuringPlan está activo (lo está por defecto), el clasificador aprueba automáticamente los comandos de solo lectura sin preguntar.

Fase 3: Implement (Implementar)

claude "Implementa el plan que creaste. Empieza por el paso 1.
Commitea después de cada paso completado."

Claude ejecuta el plan paso a paso, commiteando incrementalmente.

Ejecutar con menos fricción: auto mode

La fase de implementación no tiene por qué correr en el modo interactivo por defecto. Hoy existen seis modos de permiso: default (etiquetado Manual en la UI), acceptEdits, plan, auto, dontAsk y bypassPermissions. La guía oficial recomienda auto mode, allowlists vía /permissions y sandboxing OS-level vía /sandbox en lugar de flags que saltan permisos.

claude --permission-mode auto -p "fix all lint errors"

Consideraciones de auto mode:

  • Usa un modelo clasificador aparte (Claude Sonnet 5 desde v2.1.210, no el modelo de la sesión) que revisa cada acción antes de ejecutarla. Sus llamadas cuentan para el consumo de tokens.
  • Tiene frenos no configurables: 3 bloqueos seguidos o 20 en total pausan auto mode y devuelven los prompts. Con -p los bloqueos repetidos abortan la sesión, porque no hay usuario a quien preguntar.

Verificación ejecutable (regla 1)

La regla número uno de la guía oficial de workflows: darle a Claude una forma ejecutable de verificar su propio trabajo. Tests, exit code del build, un linter, un script contra un fixture, un screenshot de navegador — cualquier cosa que produzca una señal objetiva.

Sin un check, «looks done» es la única señal disponible y el humano se convierte en el loop de verificación. Hay que pedir evidencia (salida de los tests, el comando ejecutado y su resultado, el screenshot), no aserciones de éxito.

«If you can’t verify it, don’t ship it.»

Cuatro niveles para forzar la verificación, de menos a más rígido:

NivelMecanismoNota
1Pedir el check en el mismo prompt«Ejecuta bun test y pégame la salida»
2Fijarlo como condición de /goalUn evaluador separado lo revalida tras cada turno
3Un hook Stop que bloquea el fin del turnoClaude Code lo anula tras 8 bloqueos consecutivos
4Subagente verificador o workflow dinámicoSe le pide que intente refutar el resultado

Sobre el nivel 3: diseñar un gate asumiendo bloqueo indefinido es un antipatrón, precisamente porque el override existe a partir del octavo bloqueo consecutivo.

"Implementa el paso 1. Cuando termines, ejecuta bun test y muéstrame
la salida completa. No digas que está listo sin pegar el resultado."

Plan Mode

En plan mode las ediciones están bloqueadas hasta que apruebes el plan. No es una lista fija de herramientas prohibidas: con auto mode disponible y useAutoModeDuringPlan activo (el default), el clasificador aprueba sin preguntar los comandos de solo lectura, mientras que cualquier modificación queda retenida.

Tres formas de activarlo

# 1. Al iniciar la sesión
claude --permission-mode plan
# 2. Prefijando UN SOLO prompt (vuelve al modo anterior después)
/plan investiga cómo funciona el sistema de autenticación

3. Shift+Tab cicla entre modos: default → acceptEdits → plan, insertando auto y bypass cuando están habilitados.

Cuando está activo, la barra de estado muestra:

⏸ plan mode on

Editar el plan antes de ejecutarlo

Ctrl+G abre el plan en tu editor. Puedes corregir pasos, borrar los que sobran o añadir restricciones, y ejecutar la versión editada — es más barato que pedirle a Claude que re-planifique en tres mensajes.

Las cuatro opciones al aprobar el plan

OpciónEfecto
Yes, and use auto modeEjecuta el plan con el clasificador de auto mode aprobando acciones
Yes, manually approve editsEjecuta el plan pidiendo aprobación de cada edición
No, refine with Ultraplan on Claude Code on the webSale a Ultraplan en la web para refinar el plan
No, keep planningSigue en plan mode

Aceptar un plan renombra automáticamente la sesión, lo que facilita encontrarla después en /resume.

Cuándo usar plan mode

  • Explorar un codebase nuevo
  • Diseñar arquitectura antes de implementar
  • Auditoría de código sin riesgo de cambios accidentales
  • Review de PRs

Boris Feb26 Workflow

Workflow popularizado en la comunidad. Estructura disciplinada en 4 fases:

1. Definir el objetivo

Escribir exactamente qué se quiere lograr en un mensaje claro y específico.

2. Investigar primero

"Antes de hacer cualquier cambio, investiga:
- ¿Qué archivos están involucrados?
- ¿Qué dependencias hay?
- ¿Qué tests existen?
Presenta tus hallazgos."

3. Crear plan con checkpoints

"Crea un plan con pasos numerados.
Después de cada paso, commitea y verifica que los tests pasen."

4. Implementar con commits atómicos

Cada paso del plan = un commit. Si algo falla, es fácil revertir.

Commit often

Una de las mejores prácticas más importantes:

<!-- En tu CLAUDE.md -->
## Reglas de desarrollo
- Commitear después de cada cambio funcional
- Cada commit debe dejar el proyecto en estado funcional
- Ejecutar tests antes de cada commit

Beneficios:

  • Checkpoints naturales que complementan a /rewind
  • Fácil identificar qué cambio introdujo un bug
  • Permite paralelizar trabajo con agent teams

Por qué los commits no son opcionales aunque exista /rewind

Claude Code guarda un snapshot antes de cada prompt del usuario, conserva los 100 checkpoints más recientes por sesión y los limpia junto con las sesiones a los 30 días (cleanupPeriodDays).

La limitación crítica: el checkpointing solo cubre ediciones hechas con las herramientas de edición. No se restauran:

  • Cambios producidos por comandos bash (un sed -i, un script de migración, un npm run codemod)
  • Cambios externos (otro proceso, tu propio editor, un compañero)
  • Rutas symlink o hardlink

Esos tres huecos son exactamente lo que sí cubre un commit git. De ahí la regla de commitear seguido.

/rewind (o doble Esc con el input vacío) ofrece cinco acciones:

AcciónQué hace
Restore code and conversationVuelve el código y el historial al checkpoint
Restore conversationSolo el historial; el código queda como está
Restore codeSolo los archivos; la conversación se mantiene
Summarize from hereResume desde ese punto en adelante
Summarize up to hereResume todo lo anterior a ese punto

Workflow de debugging efectivo

1. "Reproduce el bug. Muéstrame el error exacto."
2. "Investiga la causa raíz. No propongas soluciones aún."
3. "Propón 2-3 soluciones con pros/contras."
4. [Usuario elige solución]
5. "Implementa la solución X. Agrega un test que verifica el fix."
6. "Ejecuta todos los tests relacionados."

La regla de las dos correcciones

Si corregiste a Claude más de dos veces sobre lo mismo, el contexto ya está contaminado con los enfoques fallidos: cada intento anterior sigue en la ventana empujando hacia la misma dirección equivocada. La salida no es una tercera corrección, es /clear y reescribir el prompt inicial incorporando lo que aprendiste.

«A clean session with a better prompt almost always outperforms a long session with accumulated corrections.»

Los cinco patrones de falla

PatrónSíntomaSalida
Kitchen sink sessionUna sola sesión mezcla tareas no relacionadas/clear entre tareas
Correcting over and overTercera corrección sobre el mismo punto/clear y reescribir el prompt
Over-specified CLAUDE.mdEl archivo creció y las reglas se pierdenPodar, o convertir la regla en hook
Trust-then-verify gapSe acepta «listo» sin evidenciaVerificación ejecutable siempre
Infinite explorationInvestigar sin acotar llena el contexto con cientos de archivosAcotar el alcance o delegar en subagentes

Sobre el último: «investiga cómo funciona la app» es un prompt sin frontera. «Investiga cómo se resuelve la sesión en src/auth/, máximo 10 archivos, devuélveme un resumen» sí la tiene. Los subagentes son la otra salida, porque corren en ventanas de contexto separadas y devuelven solo el resumen.

Workflow de refactoring

1. "Asegúrate de que todos los tests pasan." (baseline)
2. "Identifica el código a refactorizar y sus dependencias."
3. "Refactoriza paso a paso, ejecutando tests después de cada cambio."
4. "Verifica que no hay regresiones."

Revisión adversarial del diff antes de cerrar

Antes de dar el trabajo por terminado, el workflow canónico añade un paso: un subagente en contexto fresco revisa el diff contra el plan. También existe la skill incluida /code-review.

"Usa un subagente para revisar el diff contra el plan.
Que marque únicamente los gaps que afecten corrección
o requisitos declarados en el plan."

El valor está en el contexto fresco: la sesión que escribió el código está sesgada hacia él. De ahí también el patrón Writer/Reviewer en dos sesiones separadas — una escribe, otra revisa sin haber visto cómo se llegó al resultado.

flowchart LR
    A["Sesión Writer<br/>implementa el plan"] --> B["diff"]
    B --> C["Sesión Reviewer<br/>contexto fresco"]
    C --> D{"¿gaps de corrección<br/>o de requisitos?"}
    D -- sí --> A
    D -- no --> E["Commit + PR"]

La advertencia que acompaña al patrón

«A reviewer prompted to find gaps will usually report some, even when the work is sound… Chasing every finding leads to over-engineering.»

Un revisor al que se le pide encontrar problemas encuentra problemas. Por eso la instrucción al revisor debe acotarse explícitamente a corrección o requisitos declarados, y los hallazgos de estilo o de «podría ser más robusto» se descartan salvo que haya una razón concreta.

Ejemplo de CLAUDE.md con workflow

## Workflow de desarrollo
1. Investigar antes de implementar
2. Crear plan para cambios > 3 archivos
3. Commitear después de cada paso funcional
4. Ejecutar tests: bun test
5. Build final: bun build

Flujo completo RPI con ramas git

Cada fase del RPI vive en su propia rama. Esto permite pausar, revisar y revertir sin contaminar main.

gitGraph
   commit id: "baseline"
   branch research
   checkout research
   commit id: "exploración plan mode"
   commit id: "hallazgos documentados"
   checkout main
   merge research id: "research completo"
   branch plan
   checkout plan
   commit id: "plan de implementación"
   commit id: "plan revisado"
   checkout main
   merge plan id: "plan aprobado"
   branch implement
   checkout implement
   commit id: "paso 1: cambio A"
   commit id: "paso 2: tests"
   commit id: "paso 3: cambio B"
   checkout main
   merge implement id: "PR mergeado"

Comandos por fase

Fase Research — solo lectura, plan mode:

git checkout -b research
claude --permission-mode plan
# Claude usa Glob, Grep, Read, WebSearch — no modifica archivos
git add notas-research.md && git commit -m "research: hallazgos del sistema de auth"
git checkout main && git merge research

Fase Plan:

git checkout -b plan
claude "Basándote en la investigación previa, crea un plan detallado..."
git add plan.md && git commit -m "plan: migración JWT → sesiones server-side"
git checkout main && git merge plan

Fase Implement:

git checkout -b implement
claude "Implementa el paso 1 del plan. Ejecuta bun test al terminar
cada paso y pégame la salida. Commitea solo si pasan."
# Claude hace commits atómicos en cada sub-paso
# Al finalizar → revisión adversarial del diff → PR review → merge a main

Para pasos mecánicos y verificables (lint, formateo, migraciones repetitivas) esta fase puede correr con auto mode en vez del modo interactivo:

claude --permission-mode auto -p "fix all lint errors"

Workflow de Developer Productivity (Scenario 4)

Onboarding rápido a codebase desconocido

Cuando entras a un proyecto nuevo, la secuencia óptima es: ampliar → enfocar → profundizar.

flowchart TD
    A["Codebase desconocido"] --> B["Glob: estructura general<br/>*.config.* / src/**"]
    B --> C{"¿Entiendo la arquitectura?"}
    C -- no --> D["Grep: funciones clave<br/>main / handler / router"]
    C -- sí --> E["Read: archivos críticos<br/>config, entry points"]
    D --> E
    E --> F{"¿Hay patrones claros?"}
    F -- no --> G["Grep: patrones de naming<br/>convenciones de tests"]
    F -- sí --> H["Hacer pregunta específica<br/>a Claude"]
    G --> H
    H --> I["Contexto suficiente<br/>para contribuir"]

Prompt de onboarding efectivo:

"Tengo 30 minutos para entender este proyecto antes de hacer un cambio.
1. ¿Cuál es el flujo principal de datos?
2. ¿Dónde viven los tests?
3. ¿Qué convenciones de naming usa el proyecto?
4. ¿Cuáles son los archivos que más frecuentemente se modifican?
Solo lee, no cambies nada."

Autocompletar boilerplate con patrones del proyecto

En lugar de describir cómo quieres el código, muestra ejemplos existentes:

"Lee estos tres archivos que son similares a lo que necesito:
- src/handlers/user-handler.ts
- src/handlers/product-handler.ts
- src/handlers/order-handler.ts

Ahora crea src/handlers/invoice-handler.ts siguiendo exactamente
el mismo patrón: estructura, naming, manejo de errores, tipos de retorno.
No improvises — copia el patrón."

Claude infiere: estructura de imports, convención de nombres de funciones, manejo de errores, tipos compartidos, y tests esperados.

Automatizar tareas repetitivas

Ejemplo real: renombrar variables con criterio semántico

"En todos los archivos de src/models/, renombra las variables que usen
el prefijo 'tmp_' por nombres descriptivos basados en su uso.
Por ejemplo: tmp_data → parsedData, tmp_result → validationResult.
Muéstrame una lista de cambios propuestos ANTES de aplicarlos."

Cuándo usar Ralph Loop vs comando directo:

TareaUsarRazón
Renombrar en 1-3 archivos conocidosComando directo (Edit)Más rápido, menos tokens
Renombrar con criterio semántico en N archivosRalph LoopClaude necesita leer para decidir
Transformar formato de datos en testsComando directoPatrón mecánico, no requiere juicio
Refactorizar para mejorar legibilidadRalph LoopRequiere entender el contexto
Agregar logging en puntos de errorRalph LoopClaude identifica los puntos

Ralph Loop = Research → Proponer lista → Aprobar → Apply. Nunca apply directo sin ver la lista primero.


Cuándo NO usar Claude Code en workflows

Hay situaciones donde Claude Code no debe ser el tomador de decisiones, aunque pueda ejecutar los cambios técnicamente.

Situaciones de alto riesgo

  • Contexto de negocio opaco: Claude no sabe que “renombrar el campo legacy_id” rompe 3 integraciones con sistemas externos no documentados
  • Decisiones de arquitectura transversales: Si el cambio afecta la estructura de directorios de toda la empresa o el contrato público de una API
  • Operaciones irreversibles sin backup confirmado: Migraciones de base de datos en producción, eliminación de datos de usuarios, cambios de schema sin rollback

Tabla de decisión

TareaRecomendación
Agregar un endpoint nuevoUsar Claude Code
Decidir si usar GraphQL o REST para el sistemaNo usar — decisión de arquitectura
Escribir tests para código existenteUsar Claude Code
Eliminar una feature completa con usuarios activosNo usar — requiere contexto de negocio
Refactorizar una función de utilidadesUsar Claude Code
Migrar base de datos en producciónUsar con supervisión — generar script, revisar, ejecutar manualmente
Renombrar variables internas en un móduloUsar Claude Code
Cambiar el contrato público de una APIUsar con supervisión — verificar todos los consumidores primero
Corregir un bug con test reproducibleUsar Claude Code
Decidir qué deuda técnica priorizarNo usar — decisión estratégica del equipo

Regla práctica: Si la pregunta empieza por “¿deberíamos…?”, es decisión humana. Si empieza por “¿cómo…?”, Claude Code puede ayudar.


Siguiente: Agent Teams y Worktrees