Claude Code: planifica antes de editar y amplía funciones con el modo plan
A partir del ejemplo de añadir la opción `--by-category` a una herramienta ya funcional que suma gastos por mes, aprenderás a revisar primero el plan de cambios en el modo plan de Claude Code. Antes de implementar, fijarás el alcance de la modificación y el formato de salida; después de aprobar el plan, ejecutarás el código final para comprobar tanto los totales mensuales existentes como los totales por categoría.
Contenido revisado 2026.09.22Instrucciones para copiar
Ver el índice
Para quién esUsuarios principiantes que quieren adquirir el hábito de revisar primero el alcance del cambio y el resultado esperado antes de modificar un archivo Python existente con Claude Code
Preparación
Tener preparados la carpeta de práctica vibe-expenses y el archivo expenses.csv del artículo anterior
Entender la función de summarize.py, que muestra los totales mensuales
Saber que el modo plan de Claude Code es adecuado para leer, analizar y revisar un plan antes de editar
01Definir primero el alcance incluso para cambios que parecen pequeños
Actualmente, summarize.py lee expenses.csv y muestra la suma mensual de amount. Esta vez ampliaremos el programa para que, sin eliminar la función existente, muestre también los totales de cada category por mes solo cuando se use la opción `--by-category`. Incluso al añadir una sola función, si se permite editar el archivo de inmediato, la IA puede decidir por su cuenta detalles como el formato de salida, si se conserva el comportamiento actual o el orden de clasificación. Por eso, primero fijamos qué debe permanecer igual y qué debe cambiar.
Elemento
Comportamiento actual
Después de este cambio
Ejecución básica
Mostrar totales mensuales
Mantener igual
Ejecución con opción
Ninguno
Añadir totales por categoría con `--by-category`
Biblioteca
Biblioteca estándar de Python
Sin cambios
Archivo de entrada
Leer expenses.csv
No modificar el archivo original
Valores de verificación
2026-09 = 26600, 2026-10 = 9800
Mantener los valores existentes + en septiembre food 20500, transport 2900, supplies 3200
Aquí, el criterio para evitar regresiones es más importante que la nueva función. Aunque se añada la opción, la salida existente de `python summarize.py expenses.csv` no debe cambiar. No basta con revisar el resultado de la nueva opción: también hay que volver a comprobar la ejecución anterior.
02Empezar en modo plan para impedir cambios todavía
Claude Code puede iniciarse en modo plan con `claude --permission-mode plan`. Este modo se usa para analizar el código y el alcance del trabajo principalmente mediante lectura, y para revisar el plan. Para una persona principiante, suele ser más fácil entender el cambio si primero recibe un plan en vez de ampliar de inmediato los permisos de edición sobre código existente.
Instrucción
cd vibe-expenses
claude --permission-mode plan
Cuando empiece la sesión, haz que primero lea summarize.py y expenses.csv y explique qué partes pretende cambiar. En esta fase, indica de forma explícita que todavía no debe modificar nada. Si el plan no convence, puedes corregir primero los requisitos sin tocar los archivos.
Instrucción
Lee summarize.py y explica primero su comportamiento actual.
Después, escribe únicamente un plan de cambios para añadir la opción `--by-category`. Todavía no modifiques ningún archivo.
La salida de la ejecución básica `python summarize.py expenses.csv` debe mantenerse exactamente igual.
En la ejecución con opción `python summarize.py expenses.csv --by-category`, añade los totales por category de cada mes.
Usa solo la biblioteca estándar de Python y no modifiques expenses.csv.
Los totales esperados por categoría para 2026-09 son food 20500, transport 2900 y supplies 3200.
03Buscar primero condiciones omitidas, no detalles de implementación
Al recibir el plan, revisa primero si incorpora todos los requisitos, no si la solución parece elegante. En especial, comprueba que se conserve la salida existente, qué ocurre sin la opción, cómo se ordenan las category, cómo se tratan las opciones no válidas y si se pretende añadir algún paquete externo. Si el plan es ambiguo, formula otra pregunta antes de implementar.
Ejemplo editorial
[Ejemplo editorial · no es una respuesta real]
1. Se mantiene la estructura actual para leer el CSV y calcular los totales mensuales.
2. Se añade una estructura de datos para acumular también los totales de category por mes.
3. Se comprueba si el segundo argumento es `--by-category` para decidir si se activa la opción.
4. En la ejecución básica solo se muestran los totales mensuales existentes.
5. En la ejecución con opción se muestran, ordenados, el nombre y el total de cada category debajo del total mensual.
6. Después de implementar, se ejecutan por separado el caso básico y el caso con opción para comparar los valores esperados.
¿Se mantiene exactamente la salida de la ejecución básica existente?
¿Los resultados por categoría se añaden solo cuando está presente la opción?
¿No se requiere instalar paquetes externos nuevos?
¿No se modifica expenses.csv ni se cambia a otro formato?
¿El plan incluye los comandos de ejecución para comparar con los valores esperados?
El plan anterior es un ejemplo editorial para explicar el proceso y no una respuesta real de Claude Code. En una sesión real, el modelo puede proponer otro orden de implementación, así que no memorices esas frases como si fueran la respuesta correcta: comprueba si el plan satisface tus requisitos.
04Implementar después de revisar el plan y comprobar el código final
Después de comprobar que el plan coincide con los requisitos, procede con la implementación. En Claude Code, la modificación real de archivos y la ejecución de comandos pueden requerir aprobación según el entorno y la configuración de permisos. El código siguiente es el ejemplo completo usado para verificar los resultados de este artículo. No es una copia de una respuesta real de Claude Code: se escribió según los requisitos del artículo y se ejecutó por separado en el entorno Python del chat de GPT.
Instrucción
import csv
import sys
from collections import defaultdict
def read_totals(path):
monthly = defaultdict(int)
by_category = defaultdict(lambda: defaultdict(int))
with open(path, newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
month = row["date"][:7]
amount = int(row["amount"])
monthly[month] += amount
by_category[month][row["category"]] += amount
return monthly, by_category
def main():
if len(sys.argv) not in (2, 3):
print("Usage: python summarize.py expenses.csv [--by-category]")
raise SystemExit(2)
if len(sys.argv) == 3 and sys.argv[2] != "--by-category":
print("Usage: python summarize.py expenses.csv [--by-category]")
raise SystemExit(2)
monthly, by_category = read_totals(sys.argv[1])
show_category = len(sys.argv) == 3
for month in sorted(monthly):
print(f"{month} = {monthly[month]}")
if show_category:
for category in sorted(by_category[month]):
print(f" {category} = {by_category[month][category]}")
if __name__ == "__main__":
main()
Este código usa únicamente el módulo csv y collections.defaultdict. En la ejecución básica muestra solo los totales mensuales; cuando `--by-category` aparece exactamente como segundo argumento, muestra debajo de cada total mensual los totales por category ordenados. Si se recibe otra opción o un número distinto de argumentos, muestra el uso correcto y termina.
05Volver a comprobar tanto la función nueva como la ejecución existente
Después de añadir la función, comprueba ambos casos. Primero ejecuta sin la opción para verificar que se mantiene el resultado anterior y luego añade `--by-category` para comprobar la nueva función. El código Python de este artículo se ejecutó realmente con la herramienta Python del chat de GPT y coincidió exactamente con la salida esperada que aparece a continuación.
Salida esperada de la ejecución básica:
2026-09 = 26600
2026-10 = 9800
Salida esperada con --by-category:
2026-09 = 26600
food = 20500
supplies = 3200
transport = 2900
2026-10 = 9800
food = 9800
En septiembre, las category se muestran en orden alfabético: food, supplies, transport. Los totales coinciden con los valores de referencia definidos en el primer artículo de la serie: food 20500, transport 2900 y supplies 3200. En octubre solo existe food, por lo que se muestra 9800.
06Lista breve antes de aprobar la implementación
El objetivo del modo plan no es obtener un plan largo de la IA, sino crear puntos concretos de decisión antes de editar. Si el plan responde claramente a unas pocas preguntas como las siguientes, puedes aprobar la implementación; si alguna respuesta es ambigua, corrige primero el plan.
Pregunta
Respuesta en este ejemplo
Evaluación
¿Qué archivo se cambia?
summarize.py
Alcance limitado
¿Se mantiene el comportamiento existente?
Se mantiene la salida mensual sin opción
Volver a comprobar
¿Cuándo se activa el nuevo comportamiento?
Cuando se especifica `--by-category`
Condición clara
¿Se modifican los datos originales?
expenses.csv solo se lee
Se mantiene la prohibición de modificarlo
¿Cómo se verifica?
Comparar los dos comandos de ejecución con los valores esperados
Comprobación directa por una persona
En el siguiente artículo registraremos con git el estado anterior y posterior a este tipo de cambio. Aunque Claude Code tenga checkpoints, git es un sistema de control de versiones independiente; si aprendes a revisar los archivos modificados y el diff, podrás seguir con mayor claridad qué cambió la IA.
Qué comprobar por tu cuenta
Ejecución real en el entorno Python de la herramienta Python del chat de GPT tras guardar como archivos el expenses.csv ficticio y el summarize.py del artículo · Claude Code no se ejecutó realmente
Comprobar que la ejecución básica muestra exactamente 2026-09 = 26600 y 2026-10 = 9800
Comprobar que la ejecución con `--by-category` muestra exactamente 2026-09 food = 20500, supplies = 3200 y transport = 2900
Comprobar que la ejecución con `--by-category` muestra 2026-10 food = 9800
Comprobar que ambas ejecuciones terminan con código de salida 0
Comprobar que el código usa solo la biblioteca estándar de Python y no modifica expenses.csv
Comprobar que el ejemplo de respuesta de planificación de Claude Code está marcado con '[Ejemplo editorial · no es una respuesta real]'
Límites de la verificación
El código Python se ejecutó con la herramienta Python del chat de GPT para verificar la salida, pero no hay un registro de que se haya generado o ejecutado en Claude Code. El contenido real del plan, las pantallas de aprobación y el comportamiento de los permisos de Claude Code pueden variar según el entorno y la configuración de la cuenta.
Entendemos el vibe coding no como «decírselo con palabras y dejar que la IA lo haga todo», sino como una forma de trabajo en la que la persona define los requisitos y los criterios de comprobación y después revisa el resultado generado por la IA. Con una herramienta ficticia para sumar un CSV de gastos domésticos, organizamos en una sola nota la entrada, la salida, lo que no debe hacerse y cómo verificar el resultado.
Comprobamos el comando de instalación de Claude Code y las condiciones de cuenta según el sistema operativo, y comenzamos la primera sesión en una carpeta ficticia de práctica. En lugar de generar código de inmediato, hacemos solo tres preguntas para leer la carpeta y el CSV en modo plan y después cerramos la sesión de forma segura.
Practicamos el flujo para crear una primera herramienta pequeña en Python usando el expenses.csv ficticio y la nota de requisitos preparados antes. La solicitud incluye un ejemplo de entrada, la salida esperada y las restricciones, y después ejecutamos el summarize.py terminado en la herramienta Python del chat de GPT, no en Claude Code, para comprobar el resultado.
Organizamos de forma breve en el CLAUDE.md del proyecto el comando de ejecución, las reglas de datos, las prohibiciones y la forma de comprobar resultados que antes se repetían en cada solicitud. Distinguimos la función de `/init` para crear un borrador y el propósito de cada ubicación de archivo, y terminamos un archivo de reglas de 35 líneas adaptado al ejemplo del CSV de gastos.
Aprenderás un flujo mínimo para dejar un punto de referencia con git antes de que Claude Code modifique archivos y, después del trabajo, revisar los cambios reales con `git status` y `git diff`. Puedes pedir a la IA que explique el diff, pero el proceso se basa en que una persona compruebe el diff y los resultados de ejecución antes de hacer staging y commit directamente.
En lugar de limitarte a decirle a la IA que «da error», practicarás un flujo en el que primero reproduces el problema con la misma entrada, acotas la causa a partir del mensaje de excepción real y solicitas solo el cambio mínimo. Usaremos un CSV cuyo amount contiene una coma para reproducir un ValueError en Python y volveremos a ejecutar el código corregido para comprobar el resultado.
Partiendo de que Claude Code puede leer y modificar archivos y ejecutar comandos, este artículo reúne las comprobaciones de seguridad que una persona principiante debe hacer antes, durante y después del trabajo. Conecta en una sola lista las diferencias entre modos de permiso, los cambios que los checkpoints no pueden restaurar, la diferencia de función respecto de git y la regla de no introducir información secreta.