AgentTrust
AgentTrust
verification

Live evidence

Every AgentTrust claim with an independently checkable artifact — Kani proofs, devnet tx signatures, localnet tests, cron jobs, hosted endpoints. One page.

Every claim on this page is checkable from a terminal in under five minutes. No login. No clone (unless you want to re-run the proofs locally). Each row links to the artifact directly.

Captured 2026-05-08 against main post-Phase Q1.

Three programs deployed on devnet

ProgramAddressExplorerIDL
policy_vault8Y6f…QTROpenpublished
trustgateHF8z…ih2NOpenpublished
validation_registryCx4R…KhtvOpenpublished

Verify executable status:

for p in 8Y6fGeNEHgmWmbt8JsRcF72jxbeBfJhomMjG6SuoJQTR \
         HF8zHfoyA7b5mhLViopTnRMprc6ZT5KActHTdkFrih2N \
         Cx4RFa6ysw3qXYhugPkF8pFSWBkmKq59h2dWgF2tKhtv; do
  solana program show "$p" --url devnet | grep Executable
done

Six Kani proofs

6 / 6 invariants formally verified

PolicyVault safety properties are machine-checked by Kani in CI — 635 sub-checks, zero failures.

  • paused_implies_no_allow
  • velocity_counter_le_limit
  • counterparty_tier_monotone
  • validation_expiry_correct
  • multisig_threshold_enforced
  • gate_payment_strict_correctness
#InvariantSub-checksTime
1paused_implies_no_allow1260.25 s
2velocity_counter_le_limit90.03 s
3counterparty_tier_monotone80.02 s
4validation_expiry_correct850.23 s
5multisig_threshold_enforced14977.17 s
6gate_payment_strict_correctness (J5)258 (131 + 127)~0.9 s

Total: 635 sub-checks, 6/6 proven, ~80 s on a single CI runner. Workflow: .github/workflows/kani-prove.yml. Per-harness deep-dive: Kani proofs.

Reproduce:

git clone https://github.com/agenttrust-labs/agenttrust && cd agenttrust
cargo install --locked kani-verifier
cargo kani --manifest-path programs/policy-vault/Cargo.toml \
  --harness paused_killswitch_implies_no_allow

Pay.sh + AgentTrust atomic settlement (live devnet)

A real signed SPL transfer flowed through demo.agenttrust.tech/protected, completed gate_payment + transfer + emit_feedback atomically, and wrote a FeedbackEmissionLog PDA on chain (2026-05-06).

StepTx
emit_feedback PDA-signed CPI → Quantu give_feedbackupdate_statsjMobmWJUAXuL8…
signed SPL transferChecked (the proof Pay.sh's CLI would produce)5iV8EYmJh9XS…

Resulting on-chain artefacts:

ArtefactAddress
FeedbackEmissionLog PDA (owned by trustgate, score=100, slot 460466788)HB4BBi9j…
Tier-3 agent_account5Pfa…K8y
Tier-3 atom_stats4z9R…f5mv
Asset (Metaplex Core)C6cu…Vi8B
Facilitator authority PDA4TWq…Z5Bg

Reproduce: see Devnet smoke.

Chained validation — third ERC-8004 leg, full lifecycle (live devnet)

Four signatures prove the third leg actually closes the loop. Subject = the same Quantu tier-3 agent the Pay.sh trace used; capability = usdc-payment-policy.v1 (2026-05-06).

StepTx
gate_payment (no attestation) → RequireValidation3oKW7QugBLJ7…
request_validation2KbXYCF67D2f…
respond_to_validation (creates attestation PDA 8YKq…xt2q)67CzMS9GEt…
gate_payment (with attestation) → AllowdEXkCEeSn8…

ValidationAttestation PDA: 8YKq…xt2q. Reproduce + full trace: Chained validation.

Ten capability namespaces seeded (live devnet)

Every PDA exists on chain. Auto-generated lookup with per-namespace Explorer URLs: Reference → Capability namespaces. Every name decomposes to MAX_NAME_LEN = 32 per the on-chain bound; the playbook-level descriptive labels live in the schema-URI document.

Reproduce: pnpm --filter ./examples/attestor-demo run seed:namespaces is idempotent.

Hosted services (Fly.io)

ServiceURLHealthz
Demodemo.agenttrust.techGET /health
Facilitator (/verify + /settle)api.agenttrust.techGET /healthz
MCP HTTP endpointmcp.agenttrust.techGET /healthz (returns version: "0.4.5", toolCount: 21)

Singapore region, shared-cpu-1x@256MB, two machines for HA, min_machines_running = 1. Lets-Encrypt certs on every subdomain.

Atomic-tx invariant — three layers + on-chain anchor

LayerWhat it provesEvidence
Compile-time literal-type guardAtomicityEnforced is { atomicityEnforced: true } (literal true). TS rejects false, missing, or boolean widening.trustgate/sdk/src/atomicity.ts lines 31-33
Runtime guardassertAtomicityEnforced throws AtomicityNotEnforcedError for any value that isn't strictly === true. Catches as any casts.trustgate/sdk/src/atomicity.ts lines 51-58
Composer structurecomposeAtomicSettleTx returns one Transaction with exactly three instructions in canonical order.trustgate/sdk/test/atomicity.test.ts describe("composeAtomicSettleTx") (5 cases)
Single-tx atomic revert (localnet)Bundled tx with failing inner ix reverts the whole bundle; gate_payment_strict rolls back.tests/atomic-tx-invariant.spec.ts describe("B. single-tx atomic revert")
Split-tx corruption (localnet)Splitting the bundle leaves VelocityLedger dirty after the transfer reverts — the fault model A+B prevents.tests/atomic-tx-invariant.spec.ts describe("C. split-tx anti-pattern corrupts state")
On-chain anchorgate_payment_strict_correctness Kani proof binds strict Ok(()) to composer Allow.programs/policy-vault/src/proofs/inv_gate_payment_strict_correctness.rs

Full deep-dive: Atomic-tx invariant. Background writeup: docs/proofs/transfer-hook-atomicity.md.

Adversarial harness — fourteen hostile-scenario assertions

tests/adversarial.spec.ts exercises the gate against malformed PDAs, replayed proofs, corrupted state, schema-version drift, expired attestations, off-curve attestor pubkeys, and more. Per-scenario detail: Adversarial harness.

Test coverage

LayerCountWhere
Rust unit tests113cargo test --workspace --lib
Kani formal proofs6 / 635 sub-checkscargo kani per proof harness
Anchor TS end-to-end50anchor test --provider.cluster devnet
Adversarial harness14tests/adversarial.spec.ts
SDK unit tests56 (+ 16 INTEGRATION-gated)cd trustgate/sdk && pnpm test
Server adapter tests146cd trustgate/server && pnpm test
MCP unit tests76 (+ 3 INTEGRATION + 21 protocol-conformance)cd mcp && pnpm test
pay-sh-demo flow7 (+ 1 INTEGRATION)cd examples/pay-sh-demo && pnpm test
attestor-demo lifecycle6 (INTEGRATION-gated)cd examples/attestor-demo && pnpm test
Total~360 tests + 6 formal proofs + 14 adversarial scenariosAll green on main

CI workflows (15 total)

WorkflowPurpose
kani-prove.ymlAll 6 Kani proofs on every PR
kani-budget.ymlTotal runtime ceiling for Kani
anchor-test.ymlFull Anchor end-to-end with Quantu mainnet clones
ts-test.ymlSDK + server + web + demo + MCP build/test
adapter-contract-conformance.ymlAdapter-contract walk
mcp-protocol-conformance.yml21 MCP protocol assertions
bundle-size.ymlSDK npm pack-size budget
daily-devnet-smoke.ymlCron — full devnet round-trip every 24h
devnet-integration.ymlGated on DEVNET_FACILITATOR_KEYPAIR secret
idl-diff.ymlABI-stability gate vs deployed IDL
link-check.ymlREADME + MDX dead-link sweep
lint-and-format.ymltsc + cargo fmt + clippy
lockfile-freshness.ymlpnpm + Cargo.lock drift
secret-scan.ymlgitleaks against the diff
build.ymlcargo + anchor build

Latest run summary: docs/proofs/ci-runs.md.

Phase reports

PhaseDateReport
F (verification)2026-05-06phase-f-verification-report.md
G2026-05-07phase-g-report.md
H (hosting + npm)2026-05-07phase-h-report.md
J (Kani strict-correctness)2026-05-07phase-j-report.md
M (MCP comprehensive E2E)2026-05-07phase-m-mcp-e2e.md
P (real-LLM tool routing)2026-05-08phase-p-llm-routing.md
Atomic-tx invariant proof2026-05-07transfer-hook-atomicity.md

On this page

⌘I