
Framework Python per costruire flussi di lavoro LLM come macchine a stati con verifica formale tramite dimostrazione di teoremi Z3, model checking CTL, e predizione conforme per estrazione dati dimostrabilmente corretta.
Dimostra che il tuo agente AI è sicuro contro le injection, conforme alle specifiche e non agirà fuori dai limiti — prima di rilasciarlo.
Un verificatore a design-time per agenti LLM — non un guardrail a runtime. Importa il tuo agente LangGraph / CrewAI / AutoGen / MCP e Aura dimostra cinque proprietà sull'agente che hai già scritto, poi ti consegna il controesempio esatto o un certificato. Z3 · CTL model checking · information-flow/taint · conformal calibration. Eseguito localmente, in CI, senza API key.
Verifica un design → importa un agente reale dal suo codice → la lethal trifecta si accende con il percorso esatto → salva una baseline e blocca le regressioni. · ▶ guarda la walkthrough completa
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 prompt injection è solo una di queste.
| Proprietà | In parole semplici | |
|---|---|---|
| 🔒 | Sicuro — taint + lethal trifecta | non può essere ingannato per divulgare dati |
| ✅ | Corretto — obblighi Z3/SMT | gli output rispettano le tue regole (amount ≤ limit) |
| ♻️ | Live — model checking CTL | termina, ogni passo è raggiungibile, nessun vicolo cieco |
| 📊 | Calibrato — intervalli split-conformal | conosce il suo reale livello di confidenza |
| 🛑 | Governato — astensione a rischio controllato | rifiuta di agire quando non è sicuro |
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
Oltre alla trifecta, check dimostra anche:
"manifest": { "side_effects": ["read"] } al tuo flow:
✗ least-privilege [Pay]: 'Pay' can external 'payment.charge', outside the declared manifest
~/.cursor/mcp.json e passalo come parametro"). Statico — non si connette mai a un server.Dimostralo — poi dimostra la prova. Emetti un certificato verificabile e ricontrollalo senza fidarti di chi lo ha emesso:
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
Mappa sull'Art. 12 dell'EU AI Act / ISO 42001 (evidenza, non solo documentazione).
Misuralo con benchmark. aura-state bench esegue un corpus etichettato (accuratezza su coppie sicure/vulnerabili — sound, quindi il recall è 100% per costruzione; il numero misurato è la precisione) più la copertura di import su agenti MCP/framework reali importati senza modifiche.
Esistono verificatori di agenti pre-esecuzione — ma ciascuno fa una cosa e ti costringe a riscrivere il tuo agente nel loro formalismo. Il vantaggio di Aura è essere lo strumento pronto all'uso che importa l'agente che hai già scritto ed esegue l'intero set:
| Statico (prima dell'esecuzione)? | Dataflow di sicurezza? | Importa il tuo agente reale? | |
|---|---|---|---|
| AgentProof | ✅ | ❌ solo topologia | ✅ |
| AgentFlow | ✅ | ✅ | ❌ il suo DSL di policy |
| FIDES (Microsoft) | ❌ runtime | ✅ | ❌ planner da costruire con esso |
| Aura-State | ✅ | ✅ | ✅ LangGraph / CrewAI / AutoGen / MCP |
Non abbiamo inventato questi metodi — la ricerca è ricca e parte di essa è più rigorosa della nostra. Siamo quello che puoi pip install e puntare al tuo agente esistente oggi stesso. Ed è sound / fail-closed: una capacità sconosciuta viene segnalata come avviso, mai passata silenziosamente.
Inseriscilo nella CI e ogni PR viene controllata:
# .github/workflows/aura.yml
- uses: your-org/aura-state@v0
with: { paths: "agents/*.json" }
La trifecta letale è la modalità di fallimento più spaventosa per un agente che utilizza strumenti: nel momento in cui può (1) leggere dati privati, (2) acquisire contenuti non attendibili e (3) comunicare verso l'esterno — tutto su un unico percorso raggiungibile — un prompt injection nascosto in quei contenuti può leggere i tuoi dati e trasmetterli all'esterno. Tutti lo mettono in guardia. Aura dimostra che il tuo agente non può chiuderla, staticamente, prima che tu lo rilasci:
$ 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'.