Cómo redactar una spec efectiva para Claude Code

anatomia-spec-claude-code

Written by

in

, ,

Anatomía de una buena spec para Claude Code

Tiempo estimado de lectura: 6 min

  • Una spec compacta y accionable evita suposiciones del agente y reduce iteraciones.
  • La estructura mínima: Requirements → Design → Tasks → Implementation.
  • Para bugs: seguir Report → Analyze → Fix → Verify.
  • Coloca SPEC.md junto al código y versiona la spec con el PR.

Introducción

Anatomía de una buena spec para Claude Code: si esperas que un agente genere código alineado con tu arquitectura, la spec es el mínimo imprescindible. Sin ella, Claude Code (o cualquier agente) hará suposiciones; con ella, ejecutará decisiones coherentes desde la primera iteración.

Claude Code opera sobre repositorios y contexto local; el modelo subyacente (Claude) razona según la información que le entregues. Documenta la intención antes de pedir implementación y evitarás iteraciones costosas. Referencias útiles: Anthropic — Claude Code overview y Claude.

Resumen rápido (lectores con prisa)

Qué es: Una spec compacta y accionable que define comportamiento observable, diseño, tareas y criterios de aceptación para que Claude Code ejecute sin inventar.

Cuándo usarla: Antes de pedir a un agente que implemente features o arregle bugs en un repositorio.

Por qué importa: Minimiza suposiciones del agente, reduce iteraciones y evita parches superficiales.

Cómo funciona: Estructura mínima: Requirements → Design → Tasks → Implementation; para bugs: Report → Analyze → Fix → Verify.

Anatomía de una buena spec para Claude Code: estructura y propósito

Una spec útil no es un tratado largo. Es un artefacto compacto y accionable, pensado para que un agente pueda ejecutar sin inventar. Su estructura mínima:

  1. Requirements → 2. Design → 3. Tasks → 4. Implementation

Para bugs: Report → Analyze → Fix → Verify.

Cada bloque reduce incertidumbre y acota el espacio de decisiones del agente.

1. Requirements — qué debe hacer el sistema (externo)

Define el comportamiento observable, no la implementación.

Incluye:

  • Comportamiento nominal: qué hace la API/función.
  • Casos de borde: inputs nulos, límites, formatos erróneos.
  • Restricciones no funcionales: latencia p95 < 200 ms, tamaño máximo de payload 2 MB.
  • Dependencias permitidas/prohibidas.

Ejemplo (sin spec vs con spec):

Sin spec: “Crea endpoint para usuarios”.
Con spec: “POST /users: recibe {email, name}. Valida email según RFC 5321. Inserta en PostgreSQL usando el ORM X. Devuelve 201 con {id, email, name} o 409 si email existe. No usar nuevas dependencias.”

2. Design — cómo debe integrarse la solución (interno)

Define firmas, modelos y patrones. Evita que el agente elija un estilo distinto al del repo.

Incluye:

  • Firma de funciones/handlers (tipado).
  • Modelos DTO/Entity.
  • Patrones obligatorios (repositorio, servicios, inyección).
  • Efectos secundarios permitidos (logs, eventos, mutaciones).

Plantilla mínima:

Function: createUser(payload: CreateUserDto): Promise
Models: CreateUserDto, UserDto, UserEntity (campos, tipos)
Patterns: usar userRepository.insert, no acceso directo a SQL.

3. Tasks — pasos atómicos y ordenados

Desglosa el trabajo en tareas verificables. Un agente ejecuta mejor secuencias claras.

Ejemplo de Tasks para feature nueva:

  1. Añadir CreateUserDto en src/models.
  2. Implementar userRepository.insert según patrón existente.
  3. Implementar handler POST /users con validación.
  4. Añadir tests unitarios (caso feliz, email duplicado, payload inválido).
  5. Actualizar documentación OpenAPI.

Cada tarea debe producir un artefacto comprobable.

4. Implementation — criterios de aceptación y pruebas

Define qué significa “terminado”. No dependas solo de que compile o pase CI.

Incluye:

  • Cobertura mínima (ej. 80% sobre módulo).
  • Tests obligatorios (unit + integración básica).
  • Requisitos de performance y seguridad.
  • Revisión arquitectónica (no introducir dependencias nuevas, mantener separaciones).

Ejemplo: “Merge solo si tests pasan y cobertura del módulo ≥ 85%; latencia p95 < 200ms en test de integración local.”

Flujo para bugs: Report → Analyze → Fix → Verify

Para corrección de errores, no saltes al fix. Sigue este flujo:

  • Report: pasos reproducibles, logs, versión del commit.
  • Analyze: causa raíz documentada (por el agente o humano) con ubicación del código.
  • Fix: parche mínimo que restaure el contrato.
  • Verify: tests que confirmen el caso original y aseguren regresión negativa.

Pedir “arregla X” sin Analyze genera parches superficiales que reaparecen.

Ejemplos reales (comparativa rápida)

Caso: validar emails

Sin spec: agente instala validator.js y devuelve distinto comportamiento al estándar del proyecto.

Con spec: “validateEmail(input: string): boolean — RFC 5321, rechaza dominios locales, no usar libs externas.” Resultado: implementación consistente y sin nuevas dependencias.

Caso: feature auth token

Sin spec: token store ad-hoc en memoria.

Con spec: define AuthToken interface, TTL, almacenamiento en redis existente y tests. Resultado: integración correcta con infra existente.

Práctica recomendada y colocación en repo

  • Coloca SPEC.md junto al test file o en la carpeta del feature.
  • Versiona la spec con el mismo PR.
  • Incluye ejemplos de I/O y criterios de aceptación textuales.
  • Si usas herramientas visuales, añade diagramas Mermaid (https://mermaid.js.org/) o contrato OpenAPI (https://spec.openapis.org/).

Conclusión

Claude Code puede automatizar implementaciones, pero su fidelidad depende de tu spec. La diferencia entre un parche plausible y una integración sostenible es específica: Requirements → Design → Tasks → Implementation para features; Report → Analyze → Fix → Verify para bugs. Escribe la spec antes de ejecutar al agente. Lo barato es ahorrar minutos ahora; lo caro es rehacer horas después.

Dominicode Labs

Si trabajas con automatización, agentes o workflows, considera recursos prácticos y experimentos en Dominicode Labs. Es una continuación lógica para explorar patrones operativos y plantillas de spec aplicables a pipelines de IA y automatización.

FAQ

Respuesta — ¿Qué debe contener la sección Requirements de la spec?

Debe definir el comportamiento observable: casos nominales, bordes, restricciones no funcionales (p. ej. latencia, tamaño de payload) y dependencias permitidas o prohibidas.

Respuesta — ¿Por qué es importante definir el Design explícitamente?

Porque evita que el agente elija un estilo distinto al del repositorio. Definir firmas, modelos y patrones garantiza consistencia con la arquitectura existente.

Respuesta — ¿Cómo se desglosan las Tasks de forma efectiva?

Divídelas en pasos atómicos y ordenados que produzcan artefactos comprobables (archivos, tests, cambios en la API). Cada tarea debe ser verificable aisladamente.

Respuesta — ¿Qué criterios deben incluirse en Implementation?

Criterios de aceptación claros: cobertura mínima de tests, pruebas obligatorias (unit/integración), requisitos de performance y restricciones de seguridad o dependencias.

Respuesta — ¿Cuál es el flujo recomendado para corregir bugs?

Report (pasos reproducibles y logs) → Analyze (causa raíz y ubicación) → Fix (parche mínimo) → Verify (tests que confirmen y prevengan regresiones).

Respuesta — ¿Dónde debo colocar la SPEC.md en el repo?

Junto al test file o en la carpeta del feature. Versiona la spec en el mismo PR para mantener trazabilidad.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *