El Universo AARPIA

Un ecosistema de agentes autónomos explicado como un cuerpo humano vivo. Cada agente es un órgano, cada evento Nostr un neurotransmisor, cada contexto una neurona.

body.aarpia.es
L0 🧠 L1 ❤️ Órganos ❤️ L2 🖐️ L2 🖐️ Infra 🦴
Arquitectura

4 Capas — Las Zonas del Cuerpo

AARPIA se organiza en 4 capas jerárquicas, cada una con una función vital. Todo pasa por el tallo cerebral (L0).

CAPA L0 🧠

Tallo Cerebral — MicroKernel

Relay Nostr + servidor MCP + estado persistente escrito en Go. Todo pasa por aquí. 21 herramientas MCP, 3 engines, BadgerDB. Es el core que nunca se apaga.

CAPA L1 🫀

Órganos — 12 Agentes

12 agentes Node.js especializados: corazón (Nodo), sistema inmunológico (Integrity), riñones (Migration), hígado (Analytics), corteza prefrontal (AI), y más.

CAPA L2 🖐️

Piel — SDK + Clients

La interfaz con el mundo exterior. SDK React (@repo/aarpia-client), hooks (useAarpia), y el Router L2 que traduce 16 herramientas CVM en llamadas nativas al MK.

INFRAESTRUCTURA 🦴

Esqueleto — Nginx + PM2

Nginx como esqueleto (reverse proxy SSL), PM2 como médula ósea (gestión del ciclo de vida). Sostiene toda la estructura en pie.

Capa L0

🧠 El Tallo Cerebral — MicroKernel Go

El core del sistema. Un binario Go que combina relay Nostr embebido + servidor MCP + estado persistente. Expone 21 herramientas y gestiona toda la memoria del organismo.

⚙️ Engines — Los Motores del Cerebro

🏃

ObserverEngine

Corteza motora — Dispara cascadas cuando una neurona (contexto) cambia de estado. Escucha Kind 30078 y Kind 5052, produce create_instance calls y cascade spawns.

🔄

TransductionEngine

Transducción sináptica — Convierte señales de una neurona al formato de otra. Resuelve campos heredados, funciones y DMN al crear instancias en cascada.

🧬

StateMachineStore

Genoma — Almacena las definiciones Kind 7500 (el DNA de cada neurona). Valida transiciones FSM y resuelve fases de estado.

💾 Stores — Memoria del Cerebro

AarpiaStore

📁 Memoria a largo plazo — Cache de instancias en aarpia_data.json

StateMachineStore

🧠 Genoma en RAM — Definiciones Kind 7500 cargadas al boot

BadgerDB

💎 Relay Nostr — Almacén de todos los neurotransmisores (events Nostr)

🔧 21 Herramientas MCP — Vocabulario Motor

aarpia_list_instancesaarpia_list_contextsaarpia_list_definitions aarpia_create_instanceaarpia_transitionaarpia_get_state aarpia_seal_and_cloneaarpia_seal_batchaarpia_generate_keypair aarpia_define_machineaarpia_get_machine_configaarpia_define_ui_config aarpia_get_ui_configaarpia_deploy_clientaarpia_create_rule aarpia_list_rulesaarpia_edit_ruleaarpia_delete_rule aarpia_purge_rulesaarpia_delete_definitionaarpia_get_definition

🌐 Sinapsis — El Relay

Puerto: 3334

Dominio: dev.architectcontext.aarpia.net

URL: wss://dev.architectcontext.aarpia.net

Protocolo: WSS (WebSocket Secure)

El relay es la sinapsis: el punto de encuentro donde las señales (events Nostr) cruzan entre neuronas (contextos).

Señales Nostr

💊 Neurotransmisores — Los 7 Kinds

Cada tipo de evento Nostr es un neurotransmisor diferente. Viajan por la sinapsis (relay) llevando información específica entre neuronas (contextos).

🧬
7500
DNA
Blueprint del contexto — FSM + Schema + Axones. El código genético de cada neurona.
🧠
30078
MEMORY
Estado actual de la neurona — replaceable, solo el último snapshot importa.
👁️
5053
SENSORY
Registro de cada activación — WAL inmutable. Cada transición queda grabada para siempre.
🔒
5052
MYELIN
Instancia sellada — la señal ya no viaja. Vaina de mielina aislante e inmutable.
25910
IMPULSE
Petición/respuesta CVM MCP via relay — el impulso eléctrico que viaja por los axones.
🎨
11318
PHENOTYPE
Configuración visual del contexto — el fenotipo, cómo se expresa visualmente la neurona.
🦴
7501
REFLEX
Input de transición directo (legacy) — el reflejo automático, respuesta antes de pensar.
Capa L1

🫀 Los 12 Órganos — Agentes Autónomos

Cada agente L1 es un órgano especializado del cuerpo AARPIA. Todos dependen del tallo cerebral (MK) y se comunican via herramientas MCP y neurotransmisores Nostr.

❤️
aarpia-nodo
Corazón · Puerto 3340
Bombea datos (proxy REST), coordina órganos (gateway), representa la identidad del organismo (owner).
list_instanceslist_definitionstransitioncreate_instance

Endpoints REST

  • GET /health
  • GET /api/v1/instances
  • POST /api/v1/instances
  • POST /api/v1/transition
  • POST /agents/register
  • GET /api/v1/identity/owner
🛡️
aarpia-integrity
Sistema Inmunológico
Detecta anomalías, valida coherencia, alerta de enfermedades. Ejecuta checks A53, A54, A55, L10, L11.
list_instanceslist_definitionslist_rules

Checks de Integridad

  • A53: start_state
  • A54: dedup spawns
  • A55: payload transducido
  • L10: servicios PM2
  • L11: tool contracts
👁️
aarpia-observer
Axones Sensoriales
Vigila cambios de estado en neuronas y dispara axones (cascadas). Dedup 2 capas: RAM + query MK.
list_definitionslist_instancescreate_instance

Señales

  • Consume: MEMORY, MYELIN, DNA
  • Produce: MEMORY, SENSORY
🦴
aarpia-validator
Médula Espinal
Valida transiciones de estado (guards FSM) antes de permitirlas. Las reglas son reflejos automáticos.
list_definitionslist_rulestransition
aarpia-scheduler
Hipotálamo
Ritmo circadiano del sistema. Ejecuta reglas basadas en tiempo (cron, deadlines). Transiciones automáticas.
list_ruleslist_instancestransition
📢
aarpia-notifier
Voz · Puerto 3341
Canal centralizado de notificaciones (Telegram, email, webhook). Único punto de salida de voz del organismo.
POST /api/v1/notify
📊
aarpia-analytics
Hígado · Puerto 3342
Procesa datos, genera métricas, KPIs y análisis por contexto. Filtra y metaboliza información.
list_instanceslist_definitionsGET /api/v1/kpis
🫘
aarpia-migration
Riñones · Puerto 3343
Filtra, limpia y transforma datos legacy en formato canónico AARPIA. Purifica la información del cuerpo.
list_instancescreate_instancetransition
🌐
aarpia-bridge
Sist. Nervioso Periférico · Puerto 3344
Conecta plugins externos al cuerpo: SIGPAC, WhatsApp, Reservas. Extiende los sentidos del organismo.
list_instancescreate_instancetransition
🧠
aarpia-ai-agent
Corteza Prefrontal · Puerto 3345
Razonamiento, análisis inteligente, respuestas autónomas con Gemini. El pensamiento superior del organismo.
list_instanceslist_definitionsPOST /api/v1/ask
📐
aarpia-designer
Arquitecto
Diseña nuevas neuronas (contextos), define su DNA (Kind 7500) y axones (observers). El ingeniero genético.
define_machinecreate_rulegenerate_keypairpurge_rules
🏗️
aarpia-scaffolding
Constructor · Puerto 3346
Genera código de clients React a partir del DNA (Kind 7500). Construye la piel del cuerpo automáticamente.
list_definitionsget_machine_configdeploy_client
🩸
aarpia-security
Glóbulos Blancos + Plaquetas · Puerto 3347
Defensa perimetral, inmunológica, auto-reparación y respuesta a incidentes. 15 checks de seguridad activos.
S10-S13S15S20-S23S30-S33S41
Flujo de Señales

⚡ Red Neural — Flujo de Señales

Así viaja la información por el cuerpo. Desde la piel (SDK) hasta el tallo cerebral (MK), pasando por órganos que procesan y reaccionan.

📡 Flujo Principal: SDK → MK → Respuesta

L2
🖐️ useAarpia
L2
📡 SDK Client
L2
🔀 Router L2
CVM
⚡ Kind 25910
L0
🧠 MicroKernel

🔄 Flujo Cascada: Transición → Observer → SPAWN

Trigger
📝 Transición
Kind 30078
🧠 MEMORY
L0 Engine
🏃 Observer
L0 Engine
🔄 Transducción
Resultado
🆕 SPAWN

🧬 Axones — Conexiones entre Neuronas

Los Axones son las conexiones de salida de cada neurona (contexto). Cuando una neurona cambia de estado, el axón dispara una señal que crea una nueva instancia en otra neurona.

Transducción: Al cruzar la sinapsis, la señal se convierte:

Capa L2

🖐️ La Piel — SDK + Clients

La interfaz con el mundo exterior. Cómo las aplicaciones tocan al cuerpo AARPIA.

🔀

Context Designer Router

Corteza sensorial L2 — traduce 16 tools CVM en calls MK nativos. Es el traductor entre el lenguaje exterior y el cerebro.

16 Tools CVM

set_identityset_states_modelset_payload_model set_validation_rulesset_observersset_dmn_tables validate_designpublish_designlist_contexts get_design_statusimport_designexport_design preview_uigenerate_clientget_definition suggest_design
📦

AARPIA Client SDK

Receptores nerviosos — SDK React para que los clientes toquen al cuerpo. @repo/aarpia-client con hooks React.

React Hooks

useAarpia useNostrIdentity useAarpiaContext

Tool Contracts Registrados

list_instancescreate_instancetransition get_instanceseal_and_cloneseal_batch
Viaje de la Información

🚀 Flujos — Cómo Viaja la Información

Selecciona un tipo de mensaje para ver su viaje animado por el cuerpo. Cada "Kind" es como un tipo de carta diferente que viaja por el sistema postal del organismo.

🧬 Definir el ADN de un Proceso
"Es como crear el plano de construcción de una casa antes de empezar a construir"
El Arquitecto diseña las reglas de un nuevo proceso: qué estados puede tener (ej: Pendiente → En Progreso → Completado), qué datos lleva, y qué sucede al cambiar de estado. Este plano se guarda como el ADN del proceso.
📐
Arquitecto
Diseña el proceso
📡
Relay
Lo publica
🧠
Cerebro
Lo aprende
💾
Memoria
Lo guarda para siempre
1
📐 El Arquitecto crea el plano
Define los estados del proceso (ej: "Nuevo → Cocinando → Servido") y qué datos llevará cada pedido.
2
📡 Se publica al mundo
El plano viaja por el relay (la red postal) firmado criptográficamente para que nadie pueda falsificarlo.
3
🧠 El Cerebro lo memoriza
El MicroKernel carga el plano en su memoria y ya sabe cómo funcionan esos procesos.
4
🏗️ Listo para usar
Ahora cualquier órgano puede crear instancias (pedidos, tareas, etc.) basándose en este plano.

💡 ¿Qué pasa en la vida real?

Cuando un restaurante configura su menú por primera vez, está creando un "Kind 7500". Define que un pedido puede estar "Pendiente", "En Cocina", "Servido" o "Pagado". Este plano determina cómo funcionarán TODOS los pedidos futuros.

🔬 Mapa AARPIA de este flujo
📍 Capa L2 — Piel (origen)
context-designerL2

El Arquitecto de Contextos (cliente React) inicia el diseño del proceso.

🧠 Capa L0 — Cerebro
aarpia_define_machineaarpia_create_ruleStateMachineStore

El MicroKernel Go recibe la definición, valida el FSM y la guarda en RAM.

📡 Infraestructura
Kind 7500Relay NostrBadgerDB

Se publica como evento Kind 7500 (DNA) en el relay y se persiste en BadgerDB.

🧠 Actualizar la Memoria
"Es como mover una chincheta en un tablero de seguimiento"
Cuando un pedido cambia de estado (ej: de "Pendiente" a "En Cocina"), se actualiza su posición en la memoria. Solo importa la última posición — las anteriores se sobreescriben.
👤
Usuario
Mueve el pedido
🧠
Cerebro
Valida el cambio
📡
Relay
Lo difunde
📋
Tablero
Se mueve la chincheta
1
👤 El usuario actúa
Un camarero pulsa "En Cocina" en el pedido #42. El sistema recibe la orden de cambio.
2
🧠 El Cerebro valida
¿Es un cambio válido? ¿Se puede pasar de "Pendiente" a "En Cocina"? El cerebro mira el ADN (plano) y dice SÍ.
3
📡 Se difunde por la red
El nuevo estado se publica y reemplaza al anterior. Todos los que escuchan se enteran del cambio.
4
📋 El tablero se actualiza
La pantalla de cocina muestra el pedido en su nueva columna. Sin refrescar, en tiempo real.

💡 ¿Qué pasa en la vida real?

Cuando un cocinero marca un plato como "Listo para servir", eso es un Kind 30078. El dato viaja al instante a la pantalla de sala, al camarero, y al sistema de tiempos — todos ven el tablero actualizado sin tocar nada.

🔬 Mapa AARPIA de este flujo
📍 Capa L2 — Piel (origen)
cliente-alfardoscliente-agoraL2

Cualquier cliente React del monorepo usa el hook useAarpia para disparar la transición.

🧠 Capa L0 — Cerebro
aarpia_transitionaarpia_get_stateStateMachineStore

El MK valida la transición contra el FSM (guards), actualiza el estado y publica el snapshot.

❤️ Capa L1 — Órganos
aarpia-validatoraarpia-observeraarpia-notifier

El Validator verifica guards, el Observer detecta el cambio para cascadas, y el Notifier puede enviar alertas.

📡 Infraestructura
Kind 30078Kind 5053Relay Nostr

Se publica Kind 30078 (MEMORY, reemplazable) + Kind 5053 (SENSORY, inmutable) en paralelo.

📸 Registrar para Siempre
"Es como una cámara de seguridad que graba cada movimiento"
Cada vez que algo cambia, se crea un registro permanente. A diferencia de la memoria (que se sobreescribe), estos registros son inmutables — nadie puede borrarlos ni alterarlos.
🔄
Transición
Algo cambia
🧠
Cerebro
Genera el registro
📡
Relay
Lo sella
📸
Archivo
Permanente e inmutable
1
🔄 Ocurre un cambio
Un pedido pasa de "En Cocina" a "Servido". Ese movimiento dispara un registro.
2
🧠 Se genera una foto
El cerebro crea un snapshot con: quién lo movió, cuándo, de dónde a dónde, y todos los datos del momento.
3
🔐 Se firma digitalmente
Se le añade una firma criptográfica (Schnorr) que garantiza que nadie ha tocado el registro.
4
📸 Archivado para siempre
Como una foto de vigilancia: puedes consultarla pero nunca borrarla. Ideal para auditorías.

💡 ¿Qué pasa en la vida real?

Cuando Hacienda pregunta "¿a qué hora se sirvió este pedido?", el Kind 5053 tiene la respuesta exacta, firmada e imposible de falsificar. Es el libro contable digital del restaurante.

🔬 Mapa AARPIA de este flujo
🧠 Capa L0 — Cerebro (automático)
aarpia_transitionObserverEngine

El MK genera automáticamente el registro WAL en cada transición. No requiere acción humana.

❤️ Capa L1 — Órganos
aarpia-integrityaarpia-analytics

Integrity valida la firma Schnorr (checks A53-A55). Analytics procesa el registro para métricas.

📡 Infraestructura
Kind 5053Firma SchnorrBadgerDB

Evento inmutable Kind 5053 (SENSORY) con firma criptográfica Schnorr. Se acumula, nunca se borra.

🔒 Sellar y Archivar
"Es como cerrar un expediente y guardarlo en la caja fuerte"
Cuando un proceso termina (un pedido se cobra, un proyecto se entrega), se sella: ya no puede cambiar más. Opcionalmente se puede clonar para crear uno nuevo basado en este.
Proceso
Llega al final
🧠
Cerebro
Lo verifica
🔒
Sellado
Inmutable
📋
Clon (opcional)
Nuevo basado en este
1
✅ El proceso termina
Un pedido se cobra y cierra. Ya no tiene sentido modificarlo.
2
🔒 Se sella el expediente
Se marca como SELLADO. A partir de ahora es solo lectura, como un contrato firmado.
3
📋 Clonar (opcional)
¿El cliente quiere repetir el mismo pedido? Se crea un nuevo proceso con los mismos datos iniciales.

💡 ¿Qué pasa en la vida real?

Al cerrar la caja del día, todos los pedidos cobrados se sellan automáticamente. Si el mismo cliente vuelve mañana y pide "lo de siempre", se clona el pedido anterior y se arranca uno nuevo.

🔬 Mapa AARPIA de este flujo
🧠 Capa L0 — Cerebro
aarpia_seal_and_cloneaarpia_seal_batchaarpia_create_instance

seal_and_clone sella la instancia y opcionalmente crea una copia nueva. seal_batch para operaciones masivas.

❤️ Capa L1 — Órganos
aarpia-scheduleraarpia-nodo

El Scheduler puede disparar sellados automáticos (cierre de caja). Nodo coordina la operación.

📡 Infraestructura
Kind 5052Kind 30078Relay Nostr

Kind 5052 (MYELIN) marca la instancia como inmutable. Si se clona, se genera un nuevo Kind 30078.

⚡ Impulso Eléctrico (Llamada Remota)
"Es como enviar un WhatsApp y esperar el doble check azul"
Cuando una aplicación (la piel del cuerpo) necesita algo del cerebro, envía un impulso eléctrico. El cerebro procesa la petición y devuelve una respuesta. Todo viaja encriptado por la red.
🖥️
App (Piel)
Envía petición
📡
Relay
Transporta
🧠
Cerebro
Procesa
Respuesta
Vuelta al origen
1
🖥️ La app pregunta
"Dame todos los pedidos de hoy" — la app del camarero envía la pregunta.
2
🔐 Viaja encriptado
La petición se encripta para que nadie en el camino pueda leerla. Solo el cerebro tiene la llave.
3
🧠 El Cerebro responde
Busca los pedidos, los filtra, y devuelve la lista completa por el mismo canal encriptado.
4
✅ La app muestra los datos
En milisegundos, la pantalla del camarero se llena con los pedidos del día. Todo en tiempo real.

💡 ¿Qué pasa en la vida real?

Cada vez que abres la app y ves la lista de pedidos, estás usando Kind 25910. Es la conversación privada entre tu dispositivo y el cerebro del sistema, tan segura como un mensaje cifrado de extremo a extremo.

🔬 Mapa AARPIA de este flujo
📍 Capa L2 — Piel (cliente)
@repo/aarpia-client@contextvm/sdkL2

El SDK AarpiaClient usa ContextVM para enviar peticiones MCP encriptadas (NIP-44) al MK.

🧠 Capa L0 — Cerebro
aarpia_list_instancesaarpia_list_definitionsaarpia_list_contextsaarpia_get_state

Las 21 tools MCP del MK se invocan via Kind 25910. Todas las operaciones CRUD pasan por aquí.

📡 Infraestructura
Kind 25910ContextVMNIP-44 E2ENginx WSS

Transporte bidireccional encriptado sobre WebSocket. Nginx proxy en wss://dev.architectcontext.aarpia.net.

🎨 Definir la Apariencia
"Es como elegir la decoración y los colores de tu tienda"
Configura cómo se VE el proceso en la pantalla: qué columnas mostrar, qué colores tienen los estados, qué iconos usar. Es la capa visual que hace que los datos sean bonitos y comprensibles.
🎨
Diseñador
Elige colores y layout
📡
Relay
Lo almacena
🖥️
Todas las Apps
Se ven igual
1
🎨 Se definen los estilos
"Pendiente" es gris, "En Cocina" es naranja, "Servido" es verde. La columna principal muestra el nombre del plato.
2
📡 Se publica la configuración
El look & feel se guarda en la red para que todas las pantallas lo usen.
3
🖥️ Todas las apps lo aplican
La tablet de cocina, el móvil del camarero y la pantalla de sala muestran los mismos colores y formato.

💡 ¿Qué pasa en la vida real?

Es como cambiar el tema de tu teléfono: un solo ajuste y todo se actualiza. Si el dueño decide que los pedidos urgentes ahora son rojos, basta con un cambio y todas las pantallas lo reflejan al instante.

🔬 Mapa AARPIA de este flujo
📍 Capa L2 — Piel
context-designerL2

El Arquitecto o el UI del cliente definen la configuración visual del proceso.

🧠 Capa L0 — Cerebro
aarpia_define_ui_configaarpia_get_ui_config

El MK almacena y sirve la configuración de colores, columnas e iconos por contexto.

📡 Infraestructura
Kind 11318Relay Nostr

Kind 11318 (PHENOTYPE) almacena la config visual. Es replaceable: solo la última versión importa.

🌊 Cascada Completa — El Ciclo de Vida
"Es como una cadena de dominós donde cada pieza activa la siguiente automáticamente"
Lo más poderoso de AARPIA: cuando un proceso cambia de estado, puede automáticamente crear procesos en otros contextos. Un pedido que pasa a "Servido" puede crear automáticamente un registro en contabilidad y una notificación al camarero.
📝
Pedido
Cambia a "Servido"
👁️
Observer
Detecta el cambio
🔄
Transducción
Convierte datos
🆕
Nuevos Procesos
Se crean solos
1
📝 Un pedido se "Sirve"
El camarero marca el plato como servido. Solo eso. Un click.
2
👁️ El Observer lo detecta
Un vigía automático ve el cambio y mira las reglas: "cuando un pedido se sirve, hay que hacer X cosas".
3
🔄 Se traducen los datos
Los datos del pedido se transforman: "plato: Paella" → "concepto: Paella, precio: 14€" para contabilidad.
4
🆕 Se crean procesos nuevos
Automáticamente: línea de factura + notificación Telegram al jefe + evento en analytics. Sin intervención humana.

💡 ¿Qué pasa en la vida real?

El camarero solo pulsa "Servido". Automáticamente: el sistema crea la línea de factura, el jefe de sala recibe un Telegram "Mesa 5 servida", y las estadísticas del día se actualizan. Un click → tres acciones automáticas. Eso es una cascada AARPIA.

🔬 Mapa AARPIA de este flujo — Todos los componentes
📍 Capa L2 — Piel (disparo)
cliente-alfardosuseAarpiaL2

El usuario dispara una transición desde cualquier cliente React del monorepo.

🧠 Capa L0 — Cerebro (orquestación)
aarpia_transitionaarpia_create_instanceObserverEngineTransductionEngineStateMachineStore

El MK valida→transiciona→publica→observer detecta→transduce→crea instancias nuevas en cascada.

❤️ Capa L1 — Órganos (reacción)
aarpia-observeraarpia-notifieraarpia-analyticsaarpia-bridge

Observer vigila, Notifier envía Telegram, Analytics registra métricas, Bridge conecta plugins externos.

📡 Infraestructura (Kinds en vuelo)
Kind 30078Kind 5053Kind 25910Kind 7500Relay NostrPM2

Una cascada puede generar múltiples Kinds simultáneos: snapshots, audits, impulsos CVM y hasta nuevas definiciones.

Defensa

🛡️ Sistema Inmunológico — 18 Checks

Dos agentes vigilan la salud del cuerpo: Integrity (sistema inmunológico) y Security (glóbulos blancos). 18 checks activos.

🩺 Integrity Agent — Checks Periódicos (~12h)

A53
Start state de instancias spawneadas coincide con Kind 7500 initial_state
CRITICALaarpia-observer
A54
No hay instancias duplicadas por el mismo trigger_hash
CRITICALaarpia-observer
A55
Instancias spawneadas tienen payload transducido (no vacío)
WARNINGmicrokernel
L10
Todos los servicios PM2 online, puertos correctos, MK respondiendo
CRITICALinfra
L11
Tool contracts L2↔L0 alineados (campos, tipos, nombres)
CRITICALcontext-designer
A60
Manifiestos validados vs runtime (PM2, puertos, dependencias)
CRITICALall L1

🩸 Security Agent — Checks Cada 5min

S10
UFW firewall activo con reglas SSH/HTTP/HTTPS
S11
SSH brute force detection (>10 intentos misma IP)
S12
Ningún puerto de agente bind a 0.0.0.0 (solo 127.0.0.1)
S13
Security headers HTTP presentes (HSTS, X-Frame, etc.)
S15
Certificado SSL no expira en <30 días
S20
Firmas Schnorr de events en el relay válidas
S21
Solo pubkeys autorizadas publican en el relay
S22
AUTHORIZED_PUBKEYS configurado (no vacío)
S23
API key no expuesta en código fuente ni logs
S30
Auto-restart de agentes caídos (max 3 intentos)
S31
Puertos zombie recuperados automáticamente
S32
Quarantine de agentes que fallan >3x en 1h
Validación Inter-Capa

📋 Sistema de Contratos

Los contratos son la ÚNICA fuente de verdad para el mapeo de campos entre las 4 capas. Si un campo no está en el contrato, no viaja.

🔄 Flujo del Contrato

React Hook
useAarpia.ts
SDK
@repo/aarpia-client
Router
L2 Designer
MicroKernel
L0 Go

🔍 4 Checks de Validación

1

L0 Coverage

¿Cada campo l0_expects_as del contrato existe como json tag en el Go struct del MK?

2

L0 Alias Resolution

¿Los aliases del contrato existen como json tags en el Go struct?

3

Orphan Detection

¿Hay campos en Go que NO están en ningún contrato? (campos no documentados)

4

Contract Consistency

¿El flujo SDK→L2→L0 es coherente? Si L2 envía context_name, L0 debe aceptarlo.

📦 12 Tool Contracts Registrados

list_instancescreate_instancetransition get_instanceseal_and_cloneseal_batch create_rulelist_rulesedit_rule delete_ruledefine_ui_configget_ui_config

🤖 Go Parser — Auto-extracción

El Go Parser lee automáticamente mcp_server.go y extrae los struct fields de cada handler case "aarpia_*". No hay lista manual — si alguien cambia un struct en Go, el parser detecta la diferencia y el validator la reporta.

Infraestructura

🦴 El Esqueleto — Infraestructura

La estructura ósea que sostiene todo el cuerpo en pie. Sin esqueleto, los órganos no tienen dónde funcionar.

🦴

Nginx — Esqueleto

Reverse proxy SSL que enruta tráfico a los órganos. Puertos 80 (HTTP→HTTPS) y 443 (HTTPS/WSS).

Dominio: dev.architectcontext.aarpia.net

⚠️ WebSocket cierra después de 60s
✅ Fix: proxy_read_timeout 3600s
⚠️ Respuesta truncada en payloads grandes
✅ Fix: proxy_buffers 8 32k; proxy_buffer_size 64k;
🦴

PM2 — Médula Ósea

Gestión del ciclo de vida de todos los órganos. Produce las células (procesos) que mantienen vivo al cuerpo.

Health: pm2 jlist

⚠️ Proceso en restart loop (↺ alto)
✅ Fix: pm2 logs <name> --err --lines 20
⚠️ Procesos desaparecen tras pm2 kill
✅ Fix: pm2 start ecosystem.config.cjs && pm2 save