Skip to main content

AION Protocol

tests

The trust layer for AI agents — identity, limits, and court-ready proof for every agent action.

AI agents don't just chat anymore — they spend money, run code, delete files, and call other agents. What they're missing is a bank-grade control layer. AION gives every agent:

  • 🪪 Identity — a signed Intent Mandate (budget + payee allowlist + expiry) the agent cannot exceed
  • 🚦 Limits — one-time, amount-and-payee-bound payment authorizations (replay-proof)
  • 🧾 Proof — hash-chained receipts, externally anchorable, secrets auto-redacted
  • ⚖️ Disputes — exportable, third-party-verifiable evidence bundles (math, not trust)

AION doesn't move money — rails like x402 do. AION decides whether a payment is allowed, and proves what happened.

Quickstart

pip install aion-core

Package name note: AION ships as aion-core on PyPI (v2.1+). The older aion-protocol package (v2.0.0) predates the Payment Trust Rails and x402 adapter — use aion-core for the full trust layer.

1. Scan — find risky patterns in your agent's code:

aion scan .

2. Guard — allow, block, or require approval for actions:

aion guard-demo

3. Payments — give your agent a spending mandate and let it pay safely:

# Create a signed mandate: agent:shopbot can spend max 500/payment, 1000 total, only these payees
aion mandate-create agent:shopbot 500 1000 "api:weather,api:news"

# Agent requests a one-time payment auth (bound to exact amount + payee)
aion pay <mandate_id> 300 api:weather

# Settle it with the on-chain/off-chain reference
aion settle <jti> x402:tx_0xabc123

# Verify as a third party / export court-ready dispute evidence
aion pay-verify <jti>
aion dispute <mandate_id> --save

Attack table (all enforced, all tested):

Attack AION response
Replay a settled payment ALREADY_SETTLED
Spend over per-payment limit AMOUNT_LIMIT
Spend over total budget (race-safe) BUDGET_EXHAUSTED
Pay an unapproved payee PAYEE_NOT_ALLOWED
Tamper with stored payment terms INVALID_SIGNATURE
Tamper with the receipt chain chain_intact: false
Rogue sub-agent AGENT_MISMATCH

4. x402 adapter — enforce the human's intent on real x402 payments:

# Seller asks for 0.003 USDC on base-sepolia (x402 PAYMENT-REQUIRED body)
# Agent pre-flights it: does the signed mandate allow this exact payment?
aion x402-pay <mandate_id> @x402-requirements.json

# Seller-side: is this agent's payment actually allowed? (called inside /verify)
aion x402-check <mandate_id> @x402-requirements.json <jti>

# Bind the on-chain settlement hash into the receipt chain
aion x402-settle <jti> @x402-response.json

x402's own spec says funds "must only move in accordance with client intentions" — but the protocol has no way to sign, bind, or prove those intentions. AION adds that missing layer: a signed mandate the agent cannot exceed, one-time authorizations bound to exact amount + payee, and settlement hashes chained into verifiable receipts. Overcharge, rogue payee, double-spend, and prompt-injected terms are all blocked.

External anchoring — evidence a third party can trust

A locally hash-chained history is tamper-evident, but the operator still holds the store. Anchoring closes that gap: publish the chain's root to a place you don't control (a git repo, a gist, a cloud endpoint) and anyone can later prove the history is intact — or that it was modified:

aion anchor <mandate_id>        # publish current root to .aion/anchors/roots.jsonl
aion anchor-verify <mandate_id> # VERIFIED / MODIFIED_SINCE_ANCHOR / CHAIN_BROKEN
aion anchors                    # list the published-root ledger

Commit roots.jsonl to git — the commit history becomes your append-only compliance ledger. See THREAT_MODEL.md for exactly what is cryptographically verifiable vs operator-held, and the full attack table.

Why not just trust the model?

A modern model writes clean code — that was never the problem. The problem is authority: an agent that can act on the real world needs the same thing humans got from banks: card limits, one-time OTPs, receipts, and chargebacks. AION is that layer. It doesn't depend on the agent's goodwill — only on signatures and state the agent cannot touch.

Receipts

Every allowed/blocked/approved action gets a tamper-evident receipt (sha256-chained, secrets auto-redacted):

aion receipts 10

Optional: hosted verification API

Local mandates and receipts are free and offline. For third-party verification, revocation, and cross-company agent trust, run the API server:

pip install "aion-core[cloud]"
uvicorn aion.api:app

Endpoints: /issue, /enforce, /verify/{jti}, /revoke/{jti}, /health. The server boots in degraded mode if the database is down and reports it in /health.

Status

  • Scan: ✅ | Guard: ✅ | Authority (one-time tokens + delegation): ✅
  • Receipts + audit chain: ✅
  • Payment Trust Rails (mandate → bound auth → settlement → dispute bundle): ✅
  • x402 adapter (client pre-flight, seller-side verify, settlement binding): ✅
  • External chain-root anchoring (anchor / anchor-verify): ✅
  • CI (Python 3.10 + 3.12, full suite on every push): ✅
  • Hosted verification network: 🟡 live at https://aion-protocol.onrender.com

Built by Sourabh Ranjan Sahoo.

Release files for aion-core 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aion-core 2.2.0
File Size Uploaded
aion_core-2.2.0.tar.gz 44.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aion-core 2.2.0
File Interpreter ABI Platform
aion_core-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 88.9 kB

Release files / aion_core-2.2.0.tar.gz

Download URL aion_core-2.2.0.tar.gz
Size 44.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4712a93988e2c12a19a9871a6f30bca9dd0cb35856bc7fddd1f02975e070c8cf
BLAKE2b-256 checksum
How to use checksums
6f37769078f44b9ac7e48750c03260bc3b6ae462bca756ced171abf331edc1dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / aion_core-2.2.0-py3-none-any.whl

Download URL aion_core-2.2.0-py3-none-any.whl
Size 44.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
04448527fee791ae7ca9a8f90b993ee3f18fb9e3ce61e16f85c72c2ce312a53f
BLAKE2b-256 checksum
How to use checksums
e2c457931c5ad0819bcd01f32c75d973eb679984d8bb2ae94704eb0e79b03646
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release history Release notifications | RSS feed

2.3.3

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

This release

2.2.0 This release

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page