
Framework de Python para construir flujos de trabajo de LLM como máquinas de estado con verificación formal mediante demostración de teoremas Z3, verificación de modelos CTL y predicción conforme para extracción de datos demostrablemente correcta.
Demuestra que tu agente de IA es seguro frente a inyecciones, cumple con la especificación y no actuará fuera de los límites — antes de publicarlo.
Un verificador en tiempo de diseño para agentes LLM — no un guardrail en tiempo de ejecución. Importa tu agente de LangGraph / CrewAI / AutoGen / MCP y Aura demuestra cinco cosas sobre el agente que ya escribiste, y luego te entrega el contraejemplo exacto o un certificado. Z3 · verificación de modelos CTL · flujo de información/taint · calibración conformal. Se ejecuta localmente, en CI, sin clave de API.
Verifica un diseño → importa un agente real desde su código → la trifecta letal se ilumina con la ruta exacta → guarda una línea base y bloquea las regresiones. · ▶ mira el recorrido completo
pip install aura-state # or: uv pip install aura-state · uv add aura-state
$ aura-state demo # no keys, no config, no agent of your own needed
aura-state check · support-ticket-agent · 4 nodes
✗ trifecta [send]: lethal trifecta closed — prompt injection at 'fetch' (untrusted)
can reach external sink 'send' unsanitized while 'draft' brings private data into
scope. Path: fetch → lookup → draft → send. Break it with a sanitizer between
'fetch' and 'send', or remove one of the three capabilities.
✗ NOT PROVEN — 1 blocking finding(s) # exit 1 → CI fails
checked: trifecta closed · taint proven · reachability proven · obligations proven · policy 0 flagged
La inyección de prompts es solo una de ellas.
| Propiedad | En palabras simples | |
|---|---|---|
| 🔒 | Seguro — taint + tríada letal | no se le puede engañar para que filtre datos |
| ✅ | Correcto — obligaciones Z3/SMT | las salidas obedecen tus reglas (amount ≤ limit) |
| ♻️ | Vivo — verificación de modelos CTL | termina, cada paso es alcanzable, sin callejones sin salida |
| 📊 | Calibrado — intervalos split-conformal | sabe cuán seguro está realmente |
| 🛑 | Gobernado — abstención con control de riesgo | se niega a actuar cuando no está seguro |
aura-state check my_agent.json # a studio export
aura-state check your_agent.py # a LangGraph / CrewAI / AutoGen source file — parsed, never executed
aura-state check ./my-agent-repo/ # a whole directory
uvx aura-state check agents/*.json # zero-install via uv — perfect for CI
Más allá de la trifecta, check también demuestra:
"manifest": { "side_effects": ["read"] } a tu flujo:
✗ least-privilege [Pay]: 'Pay' can external 'payment.charge', outside the declared manifest
~/.cursor/mcp.json y pásalo como parámetro"). Estático — nunca se conecta a un servidor.Demuéstralo — luego demuestra la prueba. Emite un certificado verificable y vuelve a comprobarlo sin confiar en quien lo emitió:
aura-state certify your_agent.py --out cert.json # design + verdict, content-hashed
aura-state verify-cert cert.json # re-runs the verifier — catches any tamper
Se asigna al Art. 12 del Reglamento de IA de la UE / ISO 42001 (evidencia, no solo documentación).
Somételo a benchmark. aura-state bench ejecuta un corpus etiquetado (precisión sobre pares seguros/vulnerables — sound, por lo que el recall es 100% por construcción; el número medido es la precisión) más la cobertura de importación sobre agentes reales de MCP/frameworks ingeridos sin modificaciones.
Existen verificadores de agentes previos a la ejecución — pero cada uno hace una cosa y te obliga a reescribir tu agente en su formalismo. La ventaja de Aura es ser la herramienta ya publicada que ingiere el agente que ya escribiste y ejecuta el conjunto completo:
| ¿Estático (antes de que se ejecute)? | ¿Flujo de datos de seguridad? | ¿Importa tu agente real? | |
|---|---|---|---|
| AgentProof | ✅ | ❌ solo topología | ✅ |
| AgentFlow | ✅ | ✅ | ❌ su propio DSL de políticas |
| FIDES (Microsoft) | ❌ en tiempo de ejecución | ✅ | ❌ planificador construido con él |
| Aura-State | ✅ | ✅ | ✅ LangGraph / CrewAI / AutoGen / MCP |
No inventamos estos métodos — la investigación es abundante y parte de ella es más rigurosa que la nuestra. Somos el que puedes pip install y apuntar a tu agente existente hoy mismo. Y es sound / fail-closed: una capacidad desconocida se muestra como un aviso, nunca se deja pasar en silencio.
Colócalo en CI y cada PR queda verificado:
# .github/workflows/aura.yml
- uses: your-org/aura-state@v0
with: { paths: "agents/*.json" }
La trifecta letal es el modo de fallo más aterrador para un agente que usa herramientas: en el momento en que puede (1) leer datos privados, (2) ingerir contenido no confiable y (3) comunicarse externamente — todo en una única ruta alcanzable — una inyección de prompt oculta en ese contenido puede leer tus datos y enviarlos al exterior. Todo el mundo lo advierte. Aura demuestra que tu agente no puede cerrarla, de forma estática, antes de que lo publiques:
$ aura-state check dev_assistant.tools.json # ← your MCP tools/list export
✗ trifecta [slack_post_message]: lethal trifecta closed — prompt injection at 'fetch'
(untrusted) can reach external sink 'slack_post_message' unsanitized while 'read_file'
brings private data into scope. Path: fetch → Agent → slack_post_message.
Break it with a sanitizer between 'fetch' and 'slack_post_message'.