🎯 Qué es Archon y por qué existe
Archon es el «harness builder» creado por Cole Medin. Permite crear workflows que orquestan múltiples sesiones de coding agent para tareas más grandes. La diferencia fundamental con el loop puro: tú defines el proceso, no el agente. En el loop puro, el agente decide cómo avanzar. En Archon, tú determinas los steps y el agente ejecuta cada uno.
🧱 Loop puro vs. workflow determinista
Loop puro (/loop)
- El agente decide los siguientes pasos
- Una sesión para todo
- Un modelo para todo
- Context bloat inevitable
- Sin observabilidad nativa
Workflow Archon
- El humano define la secuencia de pasos
- Sesión separada por step
- Un modelo diferente por paso
- Contexto nuevo en cada paso
- Registros y dashboard integrados
Cole Medin explica la motivación directa: "Archon es mi creador de harnesses; nos permite crear flujos de trabajo que coordinan muchas sesiones de agentes de programación para encargarse de tareas más grandes." La idea es que un workflow como "fix GitHub issue" no necesita un agente que decida cómo resolverlo. El proceso es conocido: extraer contexto, clasificar, investigar, implementar, validar, crear un PR.
🔧 Anatomía del workflow "Corregir issue de GitHub"
El workflow más clásico de Archon es "Fix GitHub Issue". Cole Medin lo usa en su día a día: "La mayor parte de lo que necesito para mi trabajo diario son issues de un repo. Puedo crearlas yo o puede crearlas otra persona." El workflow sigue una secuencia fija de steps, cada uno con un papel específico.
📋 Pasos del workflow
Paso 1: Extraer el número del issue
Determinista. Extrae el número de la issue mediante regex o la API de GitHub. Sin LLM.
Tipo: determinista | Modelo: ningunoPaso 2: Obtener el contexto del issue
Determinista. Busca el título, la descripción, las labels y los comentarios de la issue mediante la API de GitHub.
Tipo: determinista | Modelo: ningunoPaso 3: Clasificar
El LLM decide: ¿es un bug o una feature? El resto del flujo de trabajo cambia según esa decisión.
Tipo: LLM | Modelo: Haiku / Kimi K2.7 (económico)Paso 4: Investigar y analizar
Explora el codebase, identifica los archivos relevantes y entiende el contexto del problema.
Tipo: LLM | Modelo: Kimi K2.7 (exploración)Paso 5: Implementar
Escribe el código real. Aquí sí necesitas un modelo potente.
Tipo: LLM | Modelo: Claude Code (potente)Paso 6: Validar
Ejecuta pruebas, linting y verifica si se resolvió el issue. Puede ser determinista o usar un LLM para la revisión.
Tipo: mixto | Modelo: Codex para reviewPaso 7: Crear el PR
Crea la pull request con una descripción basada en el contexto acumulado de los pasos anteriores.
Tipo: determinista + LLM | Modelo: ClaudeEl punto clave: "No dejamos que el agente dirija todo el proceso. Es más determinista porque configuramos el proceso en este archivo de workflow." Tú defines los steps, Archon garantiza que se ejecuten en el orden correcto y cada step se ejecuta en una sesión aislada con el modelo ideal para esa tarea.
🧩 La filosofía: quitarle decisiones al agente
El principio fundamental de Archon es contraintuitivo: cuanto menos decida el agente, mejor será el resultado. Cole Medin lo deja explícito: "Queremos quitarle al agente de programación la mayor cantidad posible de decisiones y aplicar el razonamiento del LLM solo cuando necesitemos que escriba código."
Dónde usar LLM y dónde no
Necesita un LLM
- *Clasificar el tipo de issue (error o funcionalidad)
- *Investigar el codebase y entender el contexto
- *Escribir código de implementación
- *Revisión semántica del código
No necesitas un LLM
- *Extraer número de la issue (regex)
- *Buscar datos del issue (llamada a la API)
- *Ejecutar pruebas (npm test)
- *Crear PR (gh pr create)
💻 Ejemplo: paso determinista en TypeScript
// Step deterministico: nao precisa de LLM
async function extractIssueNumber(input: string): Promise<number> {
const match = input.match(/issues\/(\d+)/);
if (!match) throw new Error("Invalid issue URL");
return parseInt(match[1], 10);
}
// Step deterministico: API call pura
async function fetchIssueContext(owner: string, repo: string, num: number) {
const res = await fetch(
`https://api.github.com/repos/${owner}/${repo}/issues/${num}`,
{ headers: { Authorization: `token ${process.env.GITHUB_TOKEN}` } }
);
return res.json();
}
// Step LLM: aqui sim o agente precisa raciocinar
async function classifyIssue(context: IssueContext): Promise<"bug" | "feature"> {
// Roda num modelo barato (Haiku, Kimi K2.7)
const response = await llm.complete({
model: "haiku",
prompt: `Classify this GitHub issue as "bug" or "feature":\n${context.title}\n${context.body}`
});
return response.trim() as "bug" | "feature";
}
🤔 Punto de reflexión
Esta filosofía es lo que Cole Medin llama "layering on top of loop engineering". No abandonas los loops por completo. Tomas las partes buenas (automatización, ciclos) y agregas una capa de control humano. El resultado: menos desperdicio de tokens, más previsibilidad y mayor facilidad para depurar.
🔀 Combinación de modelos: el modelo adecuado para cada step
Uno de los mayores problemas del loop puro con /loop o /routines: "Usas un solo modelo para prácticamente todo. Eso es parte del motivo por el que resulta tan caro." En Archon, cada node del workflow puede usar un modelo diferente, optimizando el costo sin perder calidad.
🎛️ Mapa de modelos por step
| Paso | Modelo sugerido | Justificación | Costo relativo |
|---|---|---|---|
| Extract / Fetch | Ninguno (API) | Determinista, sin razonamiento | $0 |
| Clasificar | Haiku / Kimi K2.7 | Decisión sencilla, no hace falta un modelo caro | $ |
| Research | Kimi K2.7 | Exploración de codebase, carga de contexto | $$ |
| Implement | Claude Code | Escritura de código real, se necesita calidad | $$$ |
| Validate | Pruebas + Codex | Las pruebas son deterministas, la revisión es de LLM | $$ |
Cole Medin lo demuestra en la práctica: "Podemos usar Cloud Code para la implementación y Codex para la revisión. Luego, para cargar todo el contexto y explorar al principio, podemos usar un modelo más pequeño como Kimi K 2.7." Esto es el enrutamiento de modelos aplicado a flujos de trabajo de agentes.
💡 Consejo práctico
La regla general: usa modelos baratos para tomar decisiones y modelos potentes para crear. Clasificar un issue como bug o feature no requiere Opus. Escribir la solución sí. La diferencia de costo puede ser de 10x o más por paso.
💾 Durabilidad: estado en Postgres/Neon
Una de las mayores debilidades del loop básico: si la terminal se cierra, lo pierdes todo. Archon lo resuelve guardando todo el estado en una base de datos externa. "Estoy guardando aquí todos los loops que ejecutamos, los distintos eventos y los registros para que siempre podamos reanudar un flujo de trabajo más adelante."
💻 Esquema simplificado: durabilidad con Neon
-- Cada run tem um ID e estado persistente
CREATE TABLE workflow_runs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
workflow_id TEXT NOT NULL,
status TEXT DEFAULT 'running', -- running | paused | completed | failed
input JSONB NOT NULL,
state JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Cada step registra sua execucao
CREATE TABLE step_executions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
run_id UUID REFERENCES workflow_runs(id),
step_name TEXT NOT NULL,
status TEXT DEFAULT 'pending', -- pending | running | completed | failed
input JSONB,
output JSONB,
model_used TEXT,
tokens_used INTEGER DEFAULT 0,
started_at TIMESTAMPTZ,
finished_at TIMESTAMPTZ
);
-- Logs de conversacao para replay
CREATE TABLE conversation_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
run_id UUID REFERENCES workflow_runs(id),
step_name TEXT NOT NULL,
role TEXT NOT NULL, -- system | user | assistant
content TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
Cole Medin enfatiza: "Tengo todas mis conversaciones y las bases de código en las que trabajo con Archon; todo es persistente y es muy fácil reanudar cualquier trabajo que esté haciendo." Con el estado en una base de datos Postgres (Neon), puedes reanudar workflows después de una caída, ver el historial completo de cada ejecución y auditar las decisiones del agente.
🤔 Punto de reflexión
La durabilidad no es algo «nice to have» para loops serios. Es un requisito. Si ejecutas un loop de 2 horas y la máquina se reinicia en el minuto 90, sin un state externo lo pierdes todo. Con Neon/Postgres, retomas exactamente desde el paso en el que te quedaste. El costo de configuración (una hora) se compensa con la primera falla en la que NO pierdes el trabajo.
❓ Preguntas: Archon vs. loop puro
Archon resuelve muchos problemas del loop puro, pero introduce su propia complejidad. Vale la pena ser honesto sobre las ventajas y desventajas.
Preguntas abiertas
¿Cuándo limita demasiado el workflow determinista?
Si defines todos los pasos de forma rígida, pierdes la capacidad del agente para improvisar. Para tareas exploratorias (pruebas de concepto, ideación), el loop puro puede ser más adecuado porque el agente necesita libertad para descubrir caminos inesperados.
¿La sobrecarga de ingeniería compensa?
Configurar Archon, definir workflows y mantener Postgres: es trabajo de ingeniería real. Para una sola tarea, probablemente no compensa. Para tareas repetitivas (procesar issues todos los días), compensa muy rápido. Cole Medin usa Archon a diario para los issues.
¿Harness engineering frente a loop engineering?
Cole Medin propone: "Yo incluiría la ingeniería de loops dentro de la ingeniería de harnesses. No creo que merezca su propio término de moda." La idea es que los loops son una herramienta dentro de un harness más amplio, no un paradigma aparte. El harness define el proceso y los loops ejecutan partes de este.
🎯 Resumen de la elección
- *Loop puro: ideal para exploración, PoCs, tareas simples y únicas
- *Archon/Workflow: ideal para tareas repetitivas, de varios pasos y con costos controlados
- *Híbrido: workflow determinista con loops internos en los steps que necesitan iteración
📝 Resumen del módulo
Módulo siguiente:
3.3 - Panel de control (Agent Control Plane): cómo observar las decisiones del orquestador en tiempo real y agregar human-in-the-loop