Exportacion
La fase de exportacion transforma los archivos spec en un formato optimizado para un agente IA especifico.
intake export <SPEC_DIR> -f <formato> -o <output>
Formatos disponibles
| Formato | Estado | Que genera |
|---|---|---|
architect | Implementado | pipeline.yaml + copia de spec |
generic | Implementado | SPEC.md + verify.sh + copia de spec |
claude-code | Planeado | CLAUDE.md + tareas + verify.sh |
cursor | Planeado | Formato Cursor |
kiro | Planeado | Formato Kiro |
Architect
Genera un pipeline.yaml compatible con architect y una copia de los archivos spec.
intake export specs/mi-feature/ -f architect -o output/
Estructura generada
output/
├── pipeline.yaml # Workflow con un step por tarea
└── spec/ # Copia de todos los archivos spec
├── requirements.md
├── design.md
├── tasks.md
├── acceptance.yaml
├── context.md
└── sources.md
pipeline.yaml
name: mi-feature
description: "Pipeline generated by intake from spec 'mi-feature'"
steps:
- name: task-1
agent: build
prompt: |
Implement task 1: Setup project structure
Create the initial project structure with the following files...
Project context:
[primeros 2000 chars de context.md]
checkpoint: true
- name: task-2
agent: build
prompt: |
Implement task 2: Implement user model
...
checkpoint: true
# ... un step por cada tarea en tasks.md ...
- name: final-verification
agent: review
prompt: "Verify that the entire implementation meets the spec requirements."
checks:
- "python -m pytest tests/ -q"
- "ruff check src/"
# ... todos los command checks requeridos de acceptance.yaml ...
Cada step incluye:
| Campo | Descripcion |
|---|---|
name | task-{id} basado en el ID de la tarea |
agent | build para tareas, review para verificacion final |
prompt | Titulo + descripcion + contexto del proyecto |
checkpoint | true — pausa despues de cada tarea para revision |
checks | Solo en el step final: lista de comandos de verificacion |
Opciones
El ArchitectExporter acepta include_guardrails (configurable via export.architect_include_guardrails).
Generic
Genera un SPEC.md consolidado, un verify.sh ejecutable, y una copia de los archivos spec. Compatible con cualquier agente o flujo de trabajo manual.
intake export specs/mi-feature/ -f generic -o output/
Estructura generada
output/
├── SPEC.md # Markdown consolidado con todas las secciones
├── verify.sh # Script bash ejecutable
└── spec/ # Copia de todos los archivos spec
├── requirements.md
├── design.md
├── tasks.md
├── acceptance.yaml
├── context.md
└── sources.md
SPEC.md
Un unico archivo Markdown que consolida:
- Project Context — contenido de
context.md - Requirements — contenido de
requirements.md - Design — contenido de
design.md - Tasks — contenido de
tasks.md - Sources — contenido de
sources.md
Util para pegarlo directamente en el contexto de un agente.
verify.sh
Script bash auto-contenido que ejecuta los command checks de acceptance.yaml:
#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="${1:-.}"
PASS=0
FAIL=0
check() {
local name="$1"
local cmd="$2"
if (cd "$PROJECT_DIR" && eval "$cmd") > /dev/null 2>&1; then
echo "PASS: $name"
PASS=$((PASS + 1))
else
echo "FAIL: $name"
FAIL=$((FAIL + 1))
fi
}
check "Tests pasan" "python -m pytest tests/ -q"
check "Lint limpio" "ruff check src/"
echo ""
echo "Passed: $PASS Failed: $FAIL"
if [ "$FAIL" -gt 0 ]; then
exit 1
fi
El script:
- Acepta un argumento opcional
PROJECT_DIR(default:.) - Ejecuta cada check con la funcion
check() - Reporta PASS/FAIL por cada check
- Muestra totales al final
- Exit code 1 si algun check fallo, 0 si todos pasaron
- Se genera con
chmod +xautomatico
Uso sin intake
El exporter generic permite verificar sin tener intake instalado:
# En CI o en la maquina del desarrollador
./output/verify.sh /path/to/project
Exporter Protocol
Los exporters siguen el Exporter Protocol:
@runtime_checkable
class Exporter(Protocol):
def export(self, spec_dir: str, output_dir: str) -> list[str]: ...
El metodo export() recibe el directorio de la spec y el directorio de salida, y retorna la lista de archivos generados.
Para agregar un nuevo exporter hay dos opciones:
Opcion 1: Exporter built-in
- Crear un archivo en
src/intake/export/(ej:cursor.py) - Implementar el metodo
export(spec_dir, output_dir) -> list[str] - Registrarlo en
create_default_registry()y como entry_point enpyproject.toml
Opcion 2: Plugin externo (V2 ExporterPlugin)
- Crear un paquete Python separado
- Implementar el protocolo
ExporterPlugindeintake.plugins.protocols - Registrar como entry_point en el grupo
intake.exportersen tupyproject.toml
El exporter sera descubierto automaticamente al instalar el paquete. Ver Plugins para detalles.
Nota: Desde v0.2.0, los exporters se descubren automaticamente via el sistema de plugins. El ExporterRegistry intenta plugin discovery primero y cae back a registro manual si falla.
Configuracion relacionada
export:
default_format: generic # Formato por defecto
architect_include_guardrails: true # Guardrails en pipeline.yaml
architect_pipeline_template: standard # Template del pipeline
claude_code_generate_claude_md: true # Generar CLAUDE.md (futuro)
El formato por defecto se puede sobreescribir con --format en la CLI:
# Usa el default de config
intake init "Mi feature" -s reqs.md
# Sobreescribe con architect
intake init "Mi feature" -s reqs.md -f architect