🏗️ Análisis Arquitectónico: SKYNET vs OpenSkyNet
Fecha: 2026-03-16
Objetivo: Identificar mejoras arquitectónicas reales (no parámetros) que OpenSkyNet puede adoptar de SkyNet
📊 TABLA COMPARATIVA RÁPIDA
| Aspecto | SkyNet (SOLITONES) | OpenSkyNet | Ganador | Gap Size |
|---|---|---|---|---|
| Decisión sin LLM | ✅ V31 Cortex (5ms) | ❌ Depende ollama-stream | SKYNET | CRÍTICO |
| Razonamiento causal explícito | ✅ Panel Logic + XOR gates | ⚠️ POC-2 grounding validator | SKYNET | ALTO |
| Memoria integrada a decisión | ✅ Cristales como atractores | ⚠️ Logs sin consolidación a reglas | SKYNET | ALTO |
| Metaprogramación (elegir subrrutina) | ✅ Engine selector (5 opciones) | ❌ No existe | SKYNET | MUY ALTO |
| Espacio de búsqueda acotado | ✅ DSL operator selector (11 ops) | ❌ LLM genera tokens infinitos | SKYNET | CRÍTICO |
| Persistencia entre sesiones | ⚠️ Pesos guardados | ✅ Archivos + memoria JSONL | OPENSKYNET | BAJO |
| Autonomía de heartbeat | ⚠️ Sin ciclo explícito | ✅ Heartbeat frecuente (1Hz) | OPENSKYNET | BAJO |
| Escala a 10+ ejemplos | ❌ Entrenado en Hanabi/ARC | ✅ Funciona en razonamiento abierto | OPENSKYNET | MEDIO |
🧠 ARQUITECTURA DETALLADA
PARTE 1: SKYNET (SOLITONES)
1.1 Flujo de Decisión
Entrada (Grid 30x30 o NLE state)
↓
RETINA (Universal Sensory Input)
├─ Modo 1: NetHack (1659 dim) → CNN specializado (21×79)
└─ Modo 2: Generic tensor → Complex projection
↓
NEURAL INTUITION (Ricci Flow + Holo-Koopman)
├─ UniversalRetina: mapea input a latent space (d_model=128)
├─ HoloDynamics: memoria espectral (n_freqs=256)
└─ JEPA Predictor: world model (predice estado t+1)
↓
V31 CORTEX (Decision Making)
├─ Engine Selector: [Neural, DSL, Physics, Panels, Kronecker] (5 opciones)
├─ DSL Operator Selector: [id, rot90, rot180, rot270, flip_h, flip_v, transp, gravity, align, crop, invert] (11 ops)
└─ Parameters Head: valores continuos para transformación
↓
EXECUTIVE (Ejecución)
├─ Si Neural: usa Ricci + JEPA
├─ Si DSL: busca combinación de 11 primitivas
├─ Si Physics: ODE solver
├─ Si Panels: Panel Logic (OR/AND/XOR/NOR/NAND/etc)
└─ Si Kronecker: algebra tensorial
↓
ACCIÓN (Salida)
Punto crítico: El Cortex es un metaprograma que elige qué algoritmo usar. No es un LLM que genera tokens; es una red que predice una categoría en {0,1,2,3,4}.
1.2 Componentes Clave
A. Universal Retina (Sensory Layer)
class UniversalRetina(nn.Module):
"""Adapta cualquier input a latent space (d_model=128)"""
# DETECCIÓN AUTOMÁTICA DE MODO
if input_dim == 1659: # NetHack signature
# CNN especializado: 21×79 → visual cortex
self.cnn = nn.Sequential(...)
else:
# Complex projection genérica
self.proj = nn.Linear(input_dim, d_model, dtype=torch.complex64)
# Resultado: |latent| real, normalizado
Ventaja: No requiere re-entrenar para nuevas entrada dimensiones.
B. Holo-Koopman Dynamics (Spectral Memory)
class HoloDynamics(nn.Module):
"""Memoria temporal con osciladores acoplados"""
omegas = 2π / periods # Frecuencias de oscilación
damping = α (aprendido) # Fricción cognitiva
z_next = z_prev * exp((-damping + 1j*omega)*dt) + u_t
# Analogía: el cerebro tiene múltiples "ritmos" (theta, alpha, beta)
# Esto modela superposición de ritmos, no suma de neuronas
Ventaja: Memoria sin gradientes vanishing, periodicidad natural.
C. JEPA Predictor (World Model)
class JEPAPredictorV11(nn.Module):
"""Predice z_next = f(z_current, action)"""
# Input: latent state z_c (complejo), acción a
# Output: predicción de siguiente latent state
# Esto permite:
# 1. Dreamign (virtual exploration sin ejecutar)
# 2. Causal understanding (si acción A → z_next es así)
# 3. Pruning (evita acciones que predicen mal resultado)
Ventaja: Agente puede "pensar en futuro" sin interactuar.
D. V31 Cortex (Meta-controller)
class SkynetCortexV1(nn.Module):
"""El Frontal Lobe: ¿QUÉ debo hacer?"""
# Layer 1: ¿Qué motor usar?
self.engine_head = nn.Linear(d_model, 5) # → argmax = [0,1,2,3,4]
# Layer 2: ¿Qué operador en ese motor?
self.dsl_ops_head = nn.Linear(d_model, 11) # → argmax = op index
# Layer 3: ¿Con qué parámetros?
self.param_head = nn.Linear(d_model, 16) # → continuous values
# NO genera tokens ("respuestas textuales")
# SÍ genera PROGRAM (motor, operador, params)
Ventaja: Decisión discreta, predecible, comprobable.
E. DSL Searcher (Symbolic Reasoning)
class DSLSearcherUltimate:
"""Busca composición de operadores DSL"""
ops = [
('id', lambda g: g),
('rot90', rotate),
('flip_h', mirror),
('gravity', apply_gravity),
('crop', crop_to_content),
('invert', invert_color),
...
]
# FASE 1: Operaciones simples (depth 1)
# FASE 2: Composiciones (f2(f1(x)))
# Busca en ~11 + 11² ≈ 132 combinaciones
Ventaja: Espacio de búsqueda pequeño (vs. token infinito). Determinístico.
1.3 Razonamiento Causal en SkyNet
SkyNet tiene Panel Logic:
def solve_panel_logic(train_pairs):
# 1. Detecta separador (columna de color uniforme)
# 2. Divide grid en Panel A y Panel B
# 3. Prueba operadores lógicos: OR, AND, XOR, NOR, NAND, etc.
# 4. Construye DAG implícito: Panel_A ⊕ Panel_B → Output
# Ejemplo: Hanabi task
# Input: [HAND_1 | HAND_2]
# Output: first_card(HAND_1 XOR HAND_2)
# El sistema "entiende" que:
# - Las cartas son vectores
# - XOR es la operación de diferencia
# - El resultado es indexable
No es "correlación": SkyNet sabe que A XOR B implica intervención (cambiar A → outputs cambia).
PARTE 2: OPENSKYNET
2.1 Flujo de Decisión
Request en canal (Discord/WhatsApp/etc)
↓
HEARTBEAT ~1Hz
├─ Sparse Metabolism (¿qué calcular?)
├─ Neural Logic Engine (64 reglas aprendidas)
├─ Hierarchical Memory (4 niveles)
├─ Causal Reasoner (DAG de causas)
├─ Lyapunov Controller (estabilidad)
└─ Log autonomy decision
↓
INNER DRIVES
├─ curiosity
├─ exploration
└─ entropy_alert
↓
OLLAMA-STREAM (LLM reasoning)
├─ buildSystemPrompt()
├─ buildMessages() [context window]
├─ stream response
└─ parseToolCalls()
↓
TOOL EXECUTION
├─ read file
├─ run command
├─ send message
└─ update memory
↓
MEMORY CONSOLIDATION
├─ Episodic: new observation
├─ Semantic: pattern extraction (si repetido)
├─ Procedural: skill update
└─ Write to memory/YYYY-MM-DD.md
Problema: Entre Heartbeat y Acción hay un "salto" a LLM. Cada decisión espera respuesta del modelo (~500-2000ms).
2.2 Los 5 Jewels Propuestos
1. Neural Logic Engine (NLE)
// 64 learned rules (pattern → action)
// Latent space, no LLM
// Ejemplo regla:
// IF frustration > 0.5 AND memory.size < 5
// THEN exploration_mode = true, confidence = 0.78
// Ventaja: <10ms vs. LLM ~1000ms
2. Hierarchical Memory (HM)
// Level 0: Working (7 items, transient)
// Level 1: Episodic (tensor states, 100s items)
// Level 2: Semantic (concepts, pattern summary)
// Level 3: Procedural (skills/rules, 10-20 items)
// Consolidation: Si 3+ episodios similares → Semantic rule
// Ventaja: Aprendizaje acumulativo (no olvida cada session)
3. Lyapunov Controller
// Monitorea divergencia del estado
// Si divergencia > threshold → aplica damping
// damping_factor = 1 / (1 + div_norm)
// Previene "epilepsia cognitiva" (oscillaciones caóticas)
4. Causal Reasoner
// Construye DAG: Cause → ...propagate... → Effect
// Detecta confounders
// Eval: "Si cambio X, ¿cambia Y?"
// Ventaja: Distingue A→B de A correlata B
5. Sparse Metabolism
// Activa componentes solo si necesarios
// frustration = 0.0 → [NLE, Logger]
// frustration = 0.5 → [NLE, HM, JEPA, Logger]
// frustration = 1.0 → [ALL]
// Ventaja: Lineal → logarítmico scaling
2.3 Razonamiento en OpenSkyNet
OpenSkyNet usa LLM + POC validadores:
- POC-1: Dynamic Tuning (reduce hallucinations 25-30%)
- POC-2: Grounding Validator (verifica causal claims)
- POC-3: Compressed Prompts (optimiza token usage)
Problema: Todo depende de calidad LLM. Si modelo sufre a contexto (no entiende 50k tokens), OpenSkyNet sufre.
🔄 COMPARATIVA PROFUNDA: ¿QUÉ HACE SKYNET QUE OPENSKYNET NO?
1. Metaprogramación: Elegir el Motor
SkyNet:
# V31 Cortex decision:
engine_idx = argmax(engine_logits) # → [0,1,2,3,4]
engines = ["Neural", "DSL", "Physics", "Panels", "Kronecker"]
if engines[engine_idx] == "DSL":
# Use DSLSearcher (space: ~132 combos)
elif engines[engine_idx] == "Physics":
# Use physics engine
elif engines[engine_idx] == "Panels":
# Use panel logic (Boolean algebra)
OpenSkyNet:
// No existe "switch de algoritmo"
// Usa siempre LLM:
const response = await ollama.chat({
model: "qwen3.5:latest",
messages, tools
});
// LLM decide QHUÉ HACER, no OpenSkyNet
Brecha: SkyNet decide qué razonar; OpenSkyNet pide al LLM que razone.
Impacto: SkyNet es ~100x más rápido para ciertos problemas. OpenSkyNet es +función para otros.
2. Panel Logic: Razonamiento Simbólico sin LLM
SkyNet:
# Detecta estructura: A | SEPARATOR | B
# Infiere operador lógico: OR, AND, XOR, NOR, NAND
# Comprueba contra ejemplos
# Esto es "razonamiento" sin red neuronal profunda
# Es pattern matching + logical inference
OpenSkyNet:
// No tiene Panel Logic equivalente
// Para un puzzle lógico similar:
const response = await ollama.chat({
system: "Eres experto en lógica...",
messages: [{role: "user", content: puzzle}]
});
// Depende de capacidad LLM para entender XOR
Brecha: SkyNet resuelve lógica pura en <50ms. OpenSkyNet en ~1000ms y con errores.
Impacto: Para tareas donde existe estructura discreta, SkyNet domina.
3. Cristales: Memoria como Atractores
SkyNet:
# HoloCrystal es una estructura FÍSICA de memoria
# No es "embeddings en database"
# Es un atractor en el espacio de estados
# Propiedad: Si agente entra en estado similar al cristal,
# la dinámica lo "atrapa" (convergencia)
class HoloCrystal:
# Memoria corpórea: tiene interfaz con dinámica física
# No es solo "búsqueda + retrieval", es ATRACCIÓN
OpenSkyNet:
// Memoria es logs + semantic search
class HierarchicalMemory {
working: Item[] // transient
episodic: Tensor[] // persistent
semantic: Pattern[] // learned
procedural: Skill[] // executed
}
// Búsqueda: cosine similarity, relevance ranking
// No es "atracción física"
Brecha: SkyNet memoria influencia dinámicamente la trayectoria futura. OpenSkyNet memoria es observable pero no causal en decisión rápida.
Impacto: SkyNet tiene "hábitos" (oscilaciones estables en memoria). OpenSkyNet tiene "log" (archivo de lo que pasó).
4. Espacio de Búsqueda: Acotado vs. Infinito
SkyNet:
- DSL: 11 operadores básicos + ~132 combinaciones = ~143 programas
- Engine selector: 5 opciones
- Total: ~715 posibles "acciones" (motor × combo)
- Búsqueda: Exhaustiva en ~100ms (porque es discreto)
OpenSkyNet:
- LLM: 50k token vocabulary
- Tokens generados por respuesta: 100-2000
- Total: 50k^100 posibles "respuestas" (técnicamente infinito)
- Búsqueda: Greedy sampling, no exhaustivo
Brecha: SkyNet es rígido pero completo. OpenSkyNet es flexible pero parcial (puede halucinar).
Impacto: Para problemas discretos (puzzle, lógica), SkyNet garantiza exploración de espacio. Para problemas abiertos (razonamiento creativo), OpenSkyNet es mejor.
5. Razonamiento Causal: Explícito vs. Implícito
SkyNet:
# Panel Logic construye causalidad:
# Input [A | SEP | B] → Output = Operator(A, B)
# El DAG es: A → Operator → Output
# B → Operator → Output
# Causalidad = Estructura topológica del programa
OpenSkyNet:
// Causal Reasoner (POC-2) intenta construir DAG post-hoc
// Pero parte de LLM response, no de estructura
class CausalReasoner {
buildDAG(llmOutput) {
// Parse LLM: "Si cambio X..."
// Intenta extraer causalidad de lenguaje natural
// Propenso a errores
}
}
Brecha: SkyNet causalidad es estructural (topology). OpenSkyNet causalidad es interpretada (NLP).
Impacto: SkyNet garantiza causalidad válida. OpenSkyNet causalidad es "mejor guess".
6. Iteración Rápida: <5ms vs. ~1000ms
SkyNet:
Input → Retina (1ms) → Neural intuition (2ms) → Cortex (1ms) →
Engine selector (0.1ms) → DSL search (<100ms) → Action
Total: ~100-200ms
OpenSkyNet:
Input → Heartbeat (<1ms) → Inner drives (<1ms) →
Ollama-stream WAIT(1000-2000ms) → Parse → Action
Total: ~1000-2000ms
Brecha: SkyNet es 10x más rápido en ciclo de decisión.
Impacto: SkyNet puede iterar, probar, aprender. OpenSkyNet espera entre pasos.
⚙️ LOS 5-10 COMPONENTES / PATRONES A TRANSFERIR
TIER 1: CRÍTICOS (Impacto alto, Esfuerzo bajo)
Meta-Controller (Engine Selector)
- Qué: Red neuronal que elige qué subrrutina ejecutar: [LLM, DSL, Physics, Causal, Procedural]
- Dónde:
src/agents/meta-controller.ts - Cómo: Input = (frustration, memory_load, problem_type) → Output = engine index
- Beneficio: Decide cuándo usar LLM vs. directa (regla learned)
- Tiempo: ~20ms + red, ROI ilimitado
Spectral Memory (Holo-Koopman)
- Qué: Memoria con oscilladores acoplados (frecuencias múltiples)
- Dónde:
src/agents/holo-memory.ts - Cómo: z_next = z_prev * exp((-α + 1j*ω)*dt) + u_t
- Beneficio: Memoria sin vanishing gradients, periodicidad natural
- Tiempo: ~20ms, sustituye L-back en HM
DSL Searcher (Symbolic Reasoning)
- Qué: Búsqueda de composición de operadores discretos
- Dónde:
src/agents/dsl-searcher.ts - Cómo: 11 primitivas (rot, flip, resize, invert, etc) + búsqueda exhaustiva
- Beneficio: Resuelve lógica pura sin LLM
- Tiempo: ~50-100ms, ROI altísimo
Panel Logic (Boolean Algebra)
- Qué: Detecta estructura A|SEP|B, infiere operador lógico
- Dónde:
src/agents/panel-logic.ts - Cómo: Estructura detection + logistic regression sobre ops {OR, AND, XOR, NAND}
- Beneficio: Resuelve puzzles lógicos determinísticamente
- Tiempo: ~20ms, 100% accuracy en estructura regular
Lyapunov Damping
- Qué: Monitor de divergencia + damping automático
- Dónde:
src/agents/lyapunov-controller.ts - Cómo: div_norm = ||dState/dt|| → damping = 1/(1+div_norm)
- Beneficio: Previene oscilaciones caóticas
- Tiempo: ~2ms, estabiliza stress test
TIER 2: ALTOS (Impacto alto, Esfuerzo medio)
World Model Predictor (JEPA)
- Qué: Predice z_next = f(z_current, action) sin ejecutar
- Dónde:
src/agents/world-model.ts - Cómo: Red neuronal z_t, a_t → z_{t+1}
- Beneficio: Agente puede "soñar" y prever resultados
- Tiempo:
50ms, requiere entrenamiento (1-2 días)
Universal Retina (Input Adapter)
- Qué: Convierte cualquier entrada (1D/2D/3D, NetHack/Imagen/Vector) a latent space
- Dónde:
src/agents/universal-retina.ts - Cómo: Detección automática de dimensión + CNN especializadas por tipo
- Beneficio: Modelo único no requiere re-entrenar
- Tiempo: ~30ms adaptación + ~2ms inference
Consolidated Learning Rule Extraction
- Qué: Convierte episodios recurrentes en reglas IF-THEN aprendidas
- Dónde:
src/agents/rule-extraction.ts - Cómo: Si 3+ episodios similares → extrae patrón + crea regla con confidence score
- Beneficio: NLE puede usar reglas sin LLM
- Tiempo: ~5-10 líneas de código, impacto hiper-alto
TIER 3: MEDIOS (Impacto medio, Esfuerzo alto)
Causal DAG Validator (Hardened)
- Qué: Verifica que implicaciones causales sean válidas (intervención, no correlación)
- Dónde:
src/agents/causal-validator-hardened.ts - Cómo: Simula intervención: set(X=x) → mide efecto en Y
- Beneficio: POC-2 grounding validator pero más robusto
- Tiempo: ~200ms por validación, requiere ejecutor de consecuencias
Bifásic ODE Integration (Advanced)
- Qué: Solver ODE bifásico (difusión + spike temporal)
- Dónde:
src/agents/ode-bifasic.ts - Cómo: dt_slow = difusión continua, dt_fast = spike discreto
- Beneficio: Captura dinámicas multi-escala (rápido + lento)
- Tiempo: ~100ms, requiere tuning matemático
🎯 DIAGRAMA: CÓMO INTEGRAR ESTOS 10 EN OPENSKYNET
OpenSkyNet Current:
Heartbeat → Inner Drives → Ollama-stream → Tools → Memory
OpenSkyNet Enhanced:
│
└─→ Sparse Metabolism (¿activar NLE?)
│
├─ NO: Usa cached rule (NLE lookup <5ms) ✓
│
└─ SÍ:
├─→ Meta-Controller (¿Qué motor usar?)
│ ├─ 0: LLM (Ollama as before)
│ ├─ 1: DSL Searcher (si problema tipo puzzle)
│ ├─ 2: Panel Logic (si problema tipo lógica)
│ ├─ 3: Causal Reasoner (si problema tipo interventor)
│ └─ 4: JEPA World Model (si problema tipo prediction)
│
└─→ [Seleccionado Motor]
├─ Spectral Memory lookup (similar episodes)
├─ World Model preview (JEPA: "si hago esto, qué pasa?")
├─ Lyapunov check (¿estable la acción?)
└─ Execute
├─ If failed: tag frustration++
├─ Log (episodic)
└─ [Consolidation check: si 3+ similar → create rule]
📈 IMPACTO PREDICHO POR COMPONENTE
| Componente | Latencia Actual | Con Mejora | Ganancia | Confiabilidad |
|---|---|---|---|---|
| Decisión rápida | ~1000ms (LLM) | ~50ms (Meta-controller + cached rule) | 20x | 85% (acotado) |
| Lógica pura | ~1000ms + error | ~20ms (Panel Logic) | 50x | 100% (determinista) |
| Causalidad | ~700ms (interpretada) | ~100ms (DAG validator) | 7x | 90% vs 60% |
| Predicción | No disponible | ~50ms (JEPA) | ∞ | 75% (learned) |
| Memoria lookup | ~200ms (search) | ~10ms (spectral) | 20x | 80% (atracción) |
| Estabilidad | Oscilante | Amortiguado (Lyapunov) | N/A | +95% → +99% |
🚀 EL "SALTO REAL" POSIBLE
Antes (Current OpenSkyNet - 2026-03-15)
Problema → LLM → Respuesta (1-4 segundos)
Confianza en respuesta: 65-75%
Decisión cíclica: 1Hz (cada segundo)
Aprendizaje: Logs (no aplica a future decisiones)
Después (Si se integran tier 1+2 componentes)
Problema → Meta-Controller → [Motor seleccionado] → Respuesta (<100ms)
├─ 40% prob: NLE rule (5ms, 90%)
├─ 30% prob: DSL search (50ms, 99%)
├─ 20% prob: Panel logic (20ms, 100%)
├─ 7% prob: JEPA model (50ms, 75%)
└─ 3% prob: LLM (1000ms, 70%) ← fallback only
Confianza en respuesta: 70-95% (decisión-dependiente)
Decisión cíclica: 10Hz (100ms)
Aprendizaje: Reglas automatizadas aplicadas al siguiente ciclo
Métricas Predichas
- Velocidad: 10-20x más rápido (promedio)
- Confiabilidad: +15-25% (menos alucinaciones LLM)
- Autonomía: +80% (funciona sin usuario ~60% del tiempo)
- Escalabilidad: 10-100x más requests/min (ciclo más rápido)
🛠️ PLAN DE INTEGRACIÓN (FASE A FASE)
Fase 1: Fundación (~2 semanas)
- Crear
src/agents/meta-controller.ts(decide motor) - Crear
src/agents/dsl-searcher.ts(resolve puzzles) - Integrar Sparse Metabolism (activa componentes por frustration)
- Test: Hanabi + ARC tasks (SkyNet benchmark)
Fase 2: Memoria + Causalidad (~1 semana)
- Reemplazar hierarchical-memory.ts con Spectral Memory
- Crear
rule-extraction.ts(episodio → IF-THEN) - Integrar Panel Logic para puzzles lógicos
- Test: Memory consolidation en 24h runs
Fase 3: Dinamismo (~1 semana)
- Integrar World Model (JEPA) predictor
- Crear Lyapunov damping controller
- Crear Causal DAG validator (hardened)
- Test: Stress tests, multi-agent interactions
Fase 4: Cutover (~2 semanas)
- Reemplazar ollama-stream calls con Meta-Controller dispatch
- Benchmarks: latency, accuracy, autonomy %
- Migración gradual (10% → 50% → 100% de requests)
- Rollback plan
📊 RIESCOS & MITIGACIONES
| Riesgo | Severidad | Mitigación |
|---|---|---|
| Meta-Controller sobreconfiado (elige mal motor) | MEDIA | Timeout a LLM si motor falla 3x |
| DSL searcher falla en tasks abiertas | BAJA | Fallback a LLM automático |
| JEPA model alucinaciones | MEDIA | Validator post-predicción |
| Lyapunov damping sobre-amortiguado | BAJA | Tuning adaptativo por historia |
| Integración rompe logs/reproducibilidad | ALTA | Mantener audit trail de motor seleccionado |
🎓 SÍNTESIS: ¿QUÉ ES LO REAL?
La brecha NO es ODE vs. LLM. Es Decisión Rápida vs. Decisión Esperada.
SkyNet gana cuando:
- Problema tiene struktur discreta (puzzle, lógica, DSL)
- Requiere iteración rápida (10-100ms ciclos)
- Output debe ser verificable (no alucinaciones)
- Necesita persistencia de forma (hábitos, atractores)
OpenSkyNet gana cuando:
- Problema es abierto (razonamiento creativo)
- Necesita flexibilidad (respuestas impredecibles)
- Escala variable (desde microproblemas a essays)
- El sistema es el narrador (storytelling, narrativa)
la solución no es replicar SkyNet: es tener ambos motores en OpenSkyNet, elegir según contexto.
✅ RECOMENDACIÓN EJECUTIVA
Implementar Tier 1 (Meta-Controller + DSL + Panel Logic + Rule Extraction + Lyapunov) primero.
ROI:
- Latencia: -80% en decisiones rápidas
- Confianza: +20% (menos hallucinations)
- Autonomía: +60%
- Desarrollo: ~4 semanas
- Riesgo: BAJO (componentes independientes, fallback a LLM)
Este es el verdadero "salto" posible.