La pregunta que fuerza la arquitectura
Cuando uno construye un sistema de IA para uso real, llega un momento en que la ilusión se rompe. El modelo habla bien, improvisa con elegancia, pero no puede garantizar nada. No puede demostrar que su conclusión es válida. No puede decir, con certeza formal, si una proposición se sostiene bajo sus premisas. Lo que ofrece es plausibilidad, no prueba.
Agora nació de esa insatisfacción. La pregunta de fondo no era "¿cómo construyo un chatbot?" sino algo más difícil: ¿es posible construir un agente que razone con estructura, no solo con probabilidad?
Esa pregunta dictó cada decisión de arquitectura.
Por qué Cloud Run y no Vercel
Vercel es la elección obvia para un proyecto Next.js. Conveniente, rápida, integrada. Pero tiene un límite que para este proyecto se volvió imposible: el timeout de las funciones serverless.
El agente de Agora no responde en dos segundos. Cuando trabaja —cuando consulta un grafo de citas, ejecuta una derivación lógica, sincroniza un workspace con Forgejo, valida fórmulas contra un perfil de lógica paraconsistente— el proceso puede extenderse. Vercel te corta. Cloud Run no.
Entonces el backend migró. El frontend Next.js quedó como UI pura, sin handlers en src/app/api. Todo el peso se concentró en un servicio Express/TypeScript desplegado en Cloud Run, con timeout de 3600 segundos, memoria de 1 GB, y min-instances=0 deliberado: los cold starts se absorben porque el stream ya muestra "Pensando…" desde el primer token. El costo real del servicio se mantiene en free tier.
Esa es una de esas decisiones que parece técnica pero es filosófica: ¿qué vale más, la comodidad del proveedor o la integridad del proceso?
145 herramientas y lo que eso significa
El número suena a marketing hasta que uno entiende qué son esas herramientas.
No son comandos de shell envueltos en JSON. Son capacidades estructuradas del agente: consultar el grafo de citas entre documentos, buscar papers relacionados por proximidad semántica, expandir contexto, sincronizar repos externos vía isomorphic-git, verificar fórmulas lógicas, gestionar workspaces, manejar uploads multipart de más de 50 MB, administrar API keys cifradas con AES-256-GCM, interactuar con pagos a través de MercadoPago.
Cada herramienta es un contrato. El agente sabe qué puede hacer porque cada capacidad está definida explícitamente, con firma, retorno y documentación. No hay magia negra: hay executeAgentTool, un ejecutor central que despacha la herramienta correcta según lo que el modelo decide invocar.
Lo interesante no es la cantidad sino la consecuencia: cuando un agente tiene acceso a herramientas reales, con efectos reales sobre datos reales, el concepto de "alucinación" cambia de naturaleza. Ya no es solo un problema de texto incorrecto. Es un problema de acción incorrecta. La responsabilidad del sistema sube de nivel.
ST-Lang: cuando el agente necesita demostrar, no solo responder
Aquí está el núcleo que diferencia a Agora de casi cualquier proyecto de IA que uno puede encontrar en producción.
El backend integra @stevenvo780/st-lang, una librería de lógica formal desarrollada en este mismo ecosistema. El agente dispone de cuatro herramientas lógicas:
st_check: verifica si una fórmula es válida bajo un perfil dado.st_derive: intenta derivar una conclusión desde premisas, devolviendo los pasos o un contramodelo.st_countermodel: si una fórmula no es tautología, construye una asignación que la falsifica.st_formalize: toma texto en prosa y propone su traducción a lógica formal con un índice de confianza.
El sistema soporta razonamiento Belnap-aware, es decir, lógica de cuatro valores que distingue entre "verdadero", "falso", "ninguno" y "ambos". Eso no es un detalle técnico: es una postura filosófica sobre la naturaleza del conocimiento en contextos donde la información es incompleta o contradictoria.
El loop que resulta es notable. Cuando el agente intenta formalizar una proposición y falla, recibe el error de parseo y reintenta. La IA y el verificador formal entran en diálogo: el modelo propone, el sistema verifica, el error retroalimenta, el modelo corrige. No hay humano en ese ciclo.
El grafo de citas como memoria estructurada
Un agente que solo tiene acceso a documentos planos pierde la dimensión más importante del conocimiento: las relaciones.
Agora construye un grafo de citas sobre los documentos del workspace. Las tools query_citation_graph, find_related_via_graph y expand_context permiten al agente navegar esas relaciones, no solo recuperar texto. Un paper que cita a otro que cita a un tercero puede revelar una línea de argumentación que ningún documento por sí solo haría visible.
Eso es lo que separa un sistema de recuperación de información de un sistema que razona sobre información. La topología importa.
BYOK y la soberanía del usuario
El vault de API keys cifradas con AES-256-GCM y HKDF merece una mención aparte, no por la criptografía sino por lo que representa.
El usuario puede conectar sus propios proveedores de IA —OpenAI, Anthropic, lo que sea— sin que el sistema vea las claves en texto plano. Solo se exponen los últimos cuatro caracteres en la UI. La clave derivada por HKDF garantiza que incluso si alguien accede a la base de datos, las claves cifradas son inútiles sin el secreto del servidor.
Eso es diseño con criterio. La mayoría de los sistemas trata la seguridad como una capa que se agrega al final. Aquí es una decisión arquitectónica desde el inicio.
Lo que enseñó este proyecto
Construir Agora Backend enseñó algo que no estaba en ningún tutorial: los límites de la IA generativa no son solo de calidad, son de verificabilidad.
Un modelo puede producir texto correcto el 95% del tiempo. Pero en un sistema que toma decisiones —que actúa sobre documentos, gestiona acceso, ejecuta derivaciones lógicas— el 5% incorrecto no es un margen tolerable. La solución no es un modelo más grande. Es un sistema de verificación que opere en paralelo con el modelo.
La lógica formal no es un adorno académico aquí. Es la única forma que existe de decirle a un sistema computacional: "esto es válido, y puedo demostrarlo". Todo lo demás es estadística.
Y la estadística, por muy sofisticada que sea, no es una prueba.