Arquitectura canónica
Lo que se despliega es un swarm gobernado. Puede ser un agente o muchos; lo que no cambia es el gobierno: identidad registrada, frontera que no se cruza, procedencia de cada entregable y juicio sobre el resultado.
El dominio de cliente es cualquier institución — ministerio, banco, hospital, despacho, universidad, equipo de operaciones. La arquitectura no privilegia un sector: privilegia que la unidad desplegada tenga frontera y responsable.
Cada agents-host representa una unidad organizacional soberana: su propia identidad, memoria, Task Queue, gobernanza, agentes y capacidad de federar. El conjunto de hosts federados es la organización completa.
agents-host es la unidad de escalado y de entrega. No se escala añadiendo escritorios virtuales a un host central: se escala desplegando nuevos agents-host. La Task Queue es local por host; la coordinación entre unidades no pasa por una cola global sino por federación.
Simular no es operar. Existe un vecindario académico que simula sociedades de agentes a escala para estudiar comportamiento. Esta arquitectura despliega para trabajar: los agentes reciben un encargo real y devuelven un entregable con sello, fuentes y autor.
Arnés y exoarnés
El arnés del agente (runtime intercambiable) es el andamiaje del agente individual: bucle del modelo, herramientas/MCP, memoria procedimental, sesiones, documento de identidad como ancla y Task Queue local.
Self-Improving Society es el exoarnés — la capa institucional que envuelve a todos los agentes: identidad registrada, memoria social, juicio, gobernanza, reproducción y observabilidad.
Un agente sin el exoarnés es un proceso. Con él, es un ciudadano de una institución.
En material externo se declara el sentido: exoarnés, en el sentido del exoesqueleto — la capa institucional que envuelve al arnés del agente. Cuando el interlocutor viene de la tradición meta-harness, el término es equivalente.
flowchart TB
subgraph HARNESS["Arnés del agente (por agente — intercambiable)"]
LOOP["Bucle del modelo + herramientas/MCP"]
SOUL["Documento de identidad — ancla (B)"]
PMEM["Memoria procedimental + habilidades locales (A)"]
KLOC[("Task Queue local soberana por host")]
end
subgraph EXO["Exoarnés (la institución)"]
REG[("Registro de identidad: hosts, specs, confianza, aprobaciones")]
MEM["Memoria: recuperación privada/episódica + hechos sociales"]
JUD["Juicio: evaluador, sello borrador, escalera fitness F0–F5"]
GOV["Volición gobernada: aprobaciones, presupuestos (L1–L8)"]
REPRO["Reproducción: ciclo de vida, presets, brazo gateado"]
PERC["Percepción: telemetría, grafo social"]
VOICE["Conversation Gateway"]
end
subgraph SUB["Sustrato compartido"]
LLMR["LLM Router"]
VDB[("VectorDB")]
PG[("Base relacional de metadatos")]
OBJ[("Almacén de objetos")]
end
HARNESS --> PERC
HARNESS --> MEM
LOOP --> LLMR
JUD --> KLOC
REPRO --> HARNESS
VOICE --> HARNESS
MEM --> VDB
REG --> PG
Vista de alto nivel
flowchart TB
Operator[Operador humano] --> CLI[society CLI / Society Builder]
Operator --> UI[Consola]
Operator --> WebUI[Conversation UI]
subgraph HostA["agents-host A (unidad soberana)"]
KA[("Task Queue")]
PA["perfiles"]
HostApiA["Agent API\nchat · tareas · snapshot del host"]
KA --- PA --> HostApiA
end
subgraph HostB["agents-host B (otra jurisdicción)"]
KB[("Task Queue")]
PB["perfiles"]
HostApiB["Agent API"]
KB --- PB --> HostApiB
end
subgraph Control["Plano de control"]
Chat[Conversation Gateway]
Fleet[fleet-manager]
Gov[governance]
Eval[evaluator]
Tel["Backend de la Consola"]
Exec["Brazo gateado\nsin puerto publicado"]
end
subgraph Shared["Sustrato compartido"]
LLM[LLM Router]
Vec[(VectorDB)]
DB[(Base relacional de metadatos)]
Obj[(Almacén de objetos)]
Onto["Banco de ontología\nred interna"]
end
WebUI --> Chat
CLI --> Fleet
Fleet --> HostApiA
Fleet --> HostApiB
Chat --> HostApiA
Chat --> HostApiB
Tel --> HostApiA
Tel --> HostApiB
Tel --> Exec
Exec -. "solo specs aprobados" .-> HostA
UI --> Tel
Tel --> Onto
HostA <-. "A2A — dirigido, token por llamante" .-> HostB
HostA --> Shared
HostB --> Shared
Eval --> DB
Gov --> DB
El tráfico entre hosts es auditado, no firmado criptográficamente en el transporte actual: la confianza cross-host descansa en política, tokens bearer por llamante y fronteras de red.
Dentro de un agents-host
Responsabilidades: mantener el directorio de datos del runtime; correr la Task Queue local; gestionar los perfiles de agente; exponer la Agent API (chat por perfil, listado y ejecución de tareas, snapshot del host).
Un perfil se compone de: documento de identidad (ancla B), configuración (modelo, proveedor, MCPs), credenciales aisladas, corpus declarativo privado (A), habilidades locales (A), memoria de runtime (A) y sesiones (B).
flowchart TB
subgraph Host["agents-host"]
TaskQueue[("Task Queue")]
Snapshot["Host Snapshot API\nchat · tareas · internos"]
subgraph Agents["agentes — volumen de documentos privados"]
A1["Agente A\nidentidad + config + docs privados (A/B)"]
A2["Agente B\nidentidad + config + docs privados (A/B)"]
end
MCPs["Herramientas MCP compartidas\nRAG · Skills · Artefactos · Hechos · Telemetría · Visión"]
end
Snapshot --> TaskQueue
Snapshot --> Agents
A1 --> LLMRouter[LLM Router]
A2 --> LLMRouter
A1 --> MCPs
A2 --> MCPs
MCPs --> VectorDB[(VectorDB)]
MCPs --> ObjStorage[(Almacén de objetos)]
Host -. "bajo demanda" .-> Runtime["agents-runtime\nescritorio virtual"]
Sustrato compartido vs. dedicado
Sustrato compartido (piloto por defecto): un solo LLM Router, VectorDB, almacén de objetos y base relacional físicos; aislamiento lógico por namespaces, colecciones, buckets y metadatos tenant/host/perfil.
Sustrato dedicado: instancias por host o por tenant cuando la regulación o el riesgo lo exijan.
| Pieza canónica | Papel |
|---|---|
| Base relacional de metadatos | Fuente persistente: agentes, objetivos, aprobaciones, auditoría |
| VectorDB | Recuperación semántica, aislada por colección |
| Almacén de objetos | Entregables y evidencia |
| LLM Router | Una interfaz hacia muchos proveedores, con presupuesto |
| Conversation Gateway | Superficie compatible con la API de chat-completions |
| Consola | Operar + Explorar (grafo operacional vivo) |
| Brazo gateado | Crea y destruye instituciones; sin puerto publicado |
| Banco de ontología | Catálogo RDF/SHACL/SPARQL; no es el grafo vivo |
Fronteras
Frontera de host. Cada agents-host tiene su disco, su Task Queue, sus credenciales y sus perfiles. La cola local no se comparte. La biblioteca vectorial privada de un host no cruza a otro sin exportación explícita y aprobación humana.
Frontera cerebro → gate → brazo. El brazo gateado aplica el despliegue físico de instituciones y rechaza un spec que no esté aprobado. Los componentes que proponen no ejecutan: el gate real exige el estado approved.
Frontera de identidad. Un agente no es un nombre: es el par (host, nombre), en forma de identificador de miembro al estilo X-Road (INSTANCIA/CLASE/miembro/subsistema). La ambigüedad se resuelve con políticas distintas según el servicio: en caminos de gobernanza y evaluación se rechaza; en enlaces decorativos se advierte y se deja vacío.
Capas de soberanía
Soberana — por host, no se comparte sin federación. Task Queue local · perfiles (identidad, configuración, credenciales) · recuperación privada por host y perfil · memoria y sesiones · perímetro de red del contenedor.
De plataforma — compartida o dedicada según política. Base relacional · VectorDB · almacén de objetos · LLM Router · banco de ontología. Hoy el aislamiento es por instalación: un stack dedicado por cliente.
Federada — circula entre hosts con procedencia intacta. Skills publicadas · hechos sociales compartibles · biblioteca pública exportable (rag_public) · tareas federadas y handoffs · política de confianza entre hosts.
Metáfora de biblioteca: metadatos de sociedad = registro civil y biblioteca pública de la polis; corpus privado del agente = biblioteca privada del individuo; skills compartidas = estante público de habilidades reutilizables; hechos auditables = hallazgos compartibles con procedencia.
Cuatro capas de conocimiento (no se colapsan)
| Capa | Pregunta que responde | Qué no es |
|---|---|---|
| Grafo operacional vivo | ¿Qué está pasando ahora en esta institución? | No es un almacén: se recalcula en cada petición |
| Banco de ontología | ¿Qué significa y es esto válido según el catálogo? | El contrato semántico (PROV-O, ORG, OWL-Time, SHACL) |
| Grafo compilado del código | ¿Cómo está hecho el software? | No es verdad de runtime |
| Contexto episódico | ¿Qué ocurrió en esta sesión, en este tramo? | No sustituye el grafo operacional |
Sustituir el panel de operación por el explorador del catálogo sería cambiar un sistema en marcha por un visor de un grafo que ya existe. Se integran; no se funden.
El vocabulario del catálogo es cerrado: tipos de nodo o arista que el código emita y la ontología no declare fallan la validación en el pipeline de calidad.
Interoperabilidad
A2A v1.0 — la unidad expuesta es el contenedor, no el agente individual. Es dirigido (el mapa sale de políticas de confianza), no descubrimiento abierto. Exponerse exige dos gestos deliberados: un token y una declaración de host.
MCP. La plataforma es fuerte como cliente y limitada como servidor: los MCP propios son stdio-only, sin HTTP/SSE — solo los alcanza el proceso del agente.
Restricciones no negociables
- La Task Queue local se accede solo desde su
agents-host. - Cada perfil tiene colección de recuperación propia. No se comparten entre perfiles.
- La biblioteca privada de un host no cruza a otro sin exportación explícita y aprobación humana.
- Skills y hechos circulan entre hosts con procedencia intacta.
- El arquitecto propone; no provisiona. El despliegue exige spec
approved. - No hay auto-mejora sobre pesos del modelo.