
Sesenta contenedores en un servidor
Un servidor bare-metal ejecuta decenas a cientos de contenedores Hoody. KSM y dedup BTRFS hacen que el costo marginal sea casi cero.
Un agente de investigación recibe un prompt complejo. En lugar de hacerlo todo él mismo, hace POST a la API de containers y recibe tres URLs de sub-agentes. Cada sub-agente puede generar sus propios sub-agentes. Ninguno sabe de un orchestrator. Solo se llaman entre sí por HTTP.
Cada nodo en el árbol es un contenedor de Hoody con un servicio hoody-agent. Padres e hijos solo se conocen por URL. No hay un planificador central observando desde arriba.
Recibe el prompt. Decide qué subtareas distribuir. Hace POST a la API de containers para generar un nuevo contenedor por sub-agente, luego llama al endpoint /api/v1/agent/tasks de cada uno con el trozo de trabajo que le corresponde.
Cada uno corre en su propio contenedor con su propio filesystem, terminal y SQLite. Ninguno puede corromper a los otros. Cualquiera puede decidir que necesita ayuda y generar sus propios hijos del mismo modo en que lo hizo el padre. El protocolo es simétrico.
El fact-checker ve cinco afirmaciones, genera cinco contenedores en paralelo, dispara cinco peticiones HTTP, espera cinco respuestas. Mismo patrón, un nivel más abajo. Los contenedores ociosos no cuestan nada, así que los árboles profundos son económicamente gratis.
No hay runtime de agente que instalar, ni bus de mensajes que configurar, ni estado compartido que sincronizar. El agente padre usa la misma API de Containers que usaría un humano: POST para crear, luego llamar a la URL del hijo.
// Parent agent (running in its own Hoody container).
// Spawn three sub-agents, hand each one a slice of work,
// await their results in parallel.
const HOODY = 'https://api.hoody.com';
async function spawnChild(name) [
// 1. Create a fresh container with the agent service running.
const res = await fetch(HOODY + '/api/v1/projects/' + PROJECT + '/containers', [
method: 'POST',
headers: [ authorization: 'Bearer ' + TOKEN ],
body: JSON.stringify([
name,
server_id: SERVER,
container_image: 'debian-12',
hoody_kit: true,
ai: true,
]),
]);
const child = (await res.json()).data;
// 2. Hit the child's agent URL like any other HTTP service.
const agentUrl = 'https://' + PROJECT + '-' + child.id + '-agent-1.' + SERVER + '.containers.hoody.com';
return [ id: child.id, agentUrl ];
]
const [scrape, summarize, factCheck] = await Promise.all([
spawnChild('scrape'),
spawnChild('summarize'),
spawnChild('fact-check'),
]);
// 3. Dispatch tasks. Each child runs autonomously,
// can spawn its own children the same way.
const results = await Promise.all([
fetch(scrape.agentUrl + '/api/v1/agent/tasks', [ method: 'POST', body: JSON.stringify([ description: scrapeBrief ]) ]),
fetch(summarize.agentUrl + '/api/v1/agent/tasks', [ method: 'POST', body: JSON.stringify([ description: summarizeBrief ]) ]),
fetch(factCheck.agentUrl + '/api/v1/agent/tasks', [ method: 'POST', body: JSON.stringify([ description: factCheckBrief ]) ]),
]);Ambos endpoints son APIs documentadas de Hoody: POST /api/v1/projects/$PID/containers genera un nuevo contenedor con el servicio agent preinstalado; POST $CHILD_URL/api/v1/agent/tasks le envía una tarea. El fact-checker puede correr exactamente el mismo código para generar sus propios verificadores por afirmación — la recursión es solo HTTP.
Cada framework de agentes es una capa fina sobre llamadas a funciones en proceso. Todos asumen que los agentes comparten memoria, comparten Python, comparten un único runtime. Hoody asume lo contrario: los agentes son computadoras separadas y HTTP es ya el protocolo que hablan.
POST /api/v1/projects/$PID/containers
fetch(child.url + '/api/v1/agent/tasks')
Dos llamadas HTTP por hijo. El padre no importa un framework, no registra una herramienta, no comparte estado. Cada sub-agente es un par con una URL — misma forma que el padre, misma forma que llamarías a cualquier otro servicio HTTP.
Cada agente es un par con una URL. Se llaman entre sí del mismo modo que cualquier servicio HTTP llama a cualquier otro servicio HTTP.
No hay orquestador. No hay bus de mensajes. No hay estado compartido que sincronizar. Lo único que limita cuántos agentes corres en paralelo es cuánto quieres gastar — y los contenedores ociosos no cuestan nada.
Los frameworks de orquestación y servicios de runtime efímero a los que recurre la gente cuando un agente no basta. Cada uno resuelve una porción del problema. La primitiva HTTP-nativa reemplaza la porción y el framework envuelto a su alrededor.
Deja de cablear grafos de agentes. Genera uno. Deja que él genere los demás.