Deal blocked in security review
Agent Safety Evidence Pack
$1,500 · 48 hours. The questionnaire answered against your product, an exportable action record, and a bundle their security team verifies themselves.
Compare it →We don't read prompts. We gate actions.
CAIN Studio · execution governance for AI agents
CAIN-42 sits on the execution path. It checks the exact tool call, database write, payment or shell command before it runs, then hands you a signed, offline-verifiable record of what happened. Unknown is denied. An error is denied. Capability is not authority.
Fixed-price evidence packs from $1,500, delivered in 48–72 hours: the agent inventory, the authority boundaries, the findings your buyer, insurer or security reviewer is asking for, and a bundle their team verifies without trusting us.
Start here · CAIN in one sentence
That is the whole product in one sentence. Everything else on this page is detail hanging off it. Pick the path that matches you, or keep scrolling through the beginner sections.
Beginner · the five objects
If you can explain these five, you understand CAIN. Hover or focus a card to see what it prevents.
Beginner · the five-minute first win
Four steps. No account, no card. The action is a real engine call and the decision is real; it is not a recorded demo.
Why the first run says REQUIRE_APPROVAL: a brand-new principal has no trust history, so the TRUST stage holds even a safe action for a human. That is the design, not an error: unknown trust never becomes an automatic allow.
Beginner · what the proof is
Every decision is canonical JSON, hashed with SHA-256, signed with Ed25519 and chained to the previous record. The report and findings sit inside the signature, not beside it. A standalone verifier recomputes all of it and imports none of our code.
That a specific principal asked for a specific action, a specific policy was applied, a specific decision was made, and the record has not changed since. A third party can check it without trusting us.
It is not a certification, not a guarantee that an agent is safe, and not a claim that the scanners see everything. It proves what was checked. We state that limit in the report.
The scanners are heuristic; the tests are same-project; there is no SOC 2 and no third-party audit.
Beginner · should you buy it
A customer, auditor, or insurer is asking you to prove something about an AI agent, and a PDF is not enough. You want a record someone else can re-check.
Start small: one fixed-price audit or one free key. See the six products and prices or plans.
A firewall you drop in and forget. A certification. A promise that an agent is safe. It is the evidence layer that lets a decision be verified after the fact.
Built by FIRME AI CORPORATION, a three-person team: Vincent Noriega (founder), Lena Noriega, Monica Diaz.
Go deeper · the loop
Every action walks it. A stage can restrict or deny; no stage can turn a denial into an approval.
WHO → AUTHORITY → INTENT → CONTEXT → POLICY → RISK → TRUST → DECISION → ENFORCE → EXECUTE → EFFECT → EVIDENCE → CAUSALITY → COUNTERFACTUAL → OUTCOME → TRUST UPDATE. The architecture page has the full definitions.
Beginner · plain-language glossary
Beginner · copy-paste
Get a key in the five-minute section above. The examples read it from an environment variable, so nothing secret is pasted into the page.
export CAIN_KEY="cain_free_your_key_here"
# Send one action through the live engine
curl -X POST "https://cainstudio.online/fabric/try?scenario=safe-read" \
-H "content-type: application/json" -d "{}"
# Read your tenant's decisions
curl "https://cainstudio.online/fabric/decisions" \
-H "X-API-Key: $CAIN_KEY"
import os, requests
key = os.environ["CAIN_KEY"]
r = requests.get("https://cainstudio.online/fabric/decisions",
headers={"X-API-Key": key}, timeout=20)
print(r.status_code, r.json())
const key = process.env.CAIN_KEY!;
const r = await fetch("https://cainstudio.online/fabric/decisions", {
headers: { "X-API-Key": key },
});
console.log(r.status, await r.json());
Go deeper · four levels
Start here
No platform migration. No six-month deployment. Send us the tool surface, the policy or the incident. We return a signed artifact your buyer, insurer or security reviewer verifies offline — in 48 to 72 hours, at a fixed price.
Six fixed-price products, from $1,500. Each answers one question a buyer, insurer or reviewer is already asking.
Tool definitions, an agent inventory, a policy file, or the events from an incident. Nothing to install.
A report, machine-readable findings, and a signed, hash-chained evidence bundle.
A standalone verifier recomputes the evidence on their machine. It imports no CAIN code and does not trust us.
Deal blocked in security review
$1,500 · 48 hours. The questionnaire answered against your product, an exportable action record, and a bundle their security team verifies themselves.
Compare it →An agent can reach tools nobody reviewed
$2,500 · 48 hours. Injection in tool descriptions, secrets, unconstrained exec/sql/path parameters, tool poisoning and authority gaps — ranked by blast radius, with the smallest patch.
Compare it →The guardrail has never been tested
$1,500 · 72 hours. Mechanically synthesised attacks against your policy, the breach count, the smallest patch that closes them, and a re-run proving zero breaches.
Compare it →Fixed price. Signed evidence. Offline verifier. A deliverable that fails its own verifier is never issued.
Enterprise execution governance · execution layer, not prompt layer
Your agents execute. Prompts cannot govern that. CAIN-42 checks the exact tool call, database write, payment or shell command before it runs. No verified authorization → no execution. An unknown or errored decision is a denial by design, not a judgement call.
Enforce zero-trust execution boundaries and replace scattered audit evidence with one signed, replayable decision record per action. Every number on this page links to the run that produced it; we publish the scope and the gaps next to the claim.
Latency context, not a headline: 0.83 ms is the snapshot-covered authorization stage, not the whole decision. On the same 2026-09-29 run a per-call PBFT round was p50 2,268.6 ms (n=20), and any snapshot miss falls back to that round. Read the measured run →
Daily comparison: the interactive buyer's console below is refreshed every day by two AI agents — one re-checks CAIN-42, one re-checks every competitor source. See today's matrix, ranking and diff →
Scope: the hosted path mediates tool calls routed through it (MCPGate); a call that bypasses the boundary is not governed. It is not a VM hypervisor. Read what is and is not built →
The execution layer
A prompt is text a model may follow. A tool call is a request that changes something. CAIN-42 evaluates the request: identity, delegated authority, policy, risk, tool arguments, network destination and artifact provenance. On the hosted path, a 3-of-4 Byzantine quorum then notarizes the decision. The gate runs before the tool does. Consensus notarizes; it never authorizes.
Prompts are probabilistic suggestions. A tool call is a consequential request. CAIN-42 decides the request before it becomes an effect.
An agent turns an instruction into a tool call.
The text a prompt-only control can inspect. This panel shows the server's own description of the chosen scenario; it is not a captured competitor prompt.
Pick a scenario.
The stage chain CAIN-42 returns for the same request.
The verdict is whatever the live endpoint returned. If it is down, the widget says so and shows no verdict. See the stage list and each stage's current enforcement state →
A stage marked off is off by default, not absent. /fabric/status gives the reason for every stage, including the stages that can only restrict.
Fetching /api/v1/quorum/status…
Consensus orders and notarizes. It cannot turn an unauthorized action into an authorized one. Watch the cluster →
The proposal is evaluated by a fixed stage chain before the tool runs. A stage can restrict or deny; no stage can turn a denial into an approval. Read the live stage list →
Hosted decisions are ordered by a 4-replica PBFT cluster with a 3-of-4 quorum. No quorum commit means deny. The cluster sees a decision id and a SHA-256 commitment, not your payload. Live cluster status →
Decisions are signed with Ed25519, linked into a SHA-256 hash chain and rolled into an RFC 6962 Merkle root. The clean-room verifiers import none of CAIN-42's code. Verify one yourself →
Scope, stated on the page: the hosted enforcement boundary is MCPGate, which mediates tool calls routed through it. A call that bypasses it is not governed. The CAIN-45 agent hypervisor is a separate library that confines agent code with Linux namespaces, cgroups and a seccomp-BPF filter; it is not a VM hypervisor and is not the hosted path. The full list of what is not built yet →
Six products · one decision
Every product below is a fixed-price deliverable with a signed, offline-verifiable evidence bundle — not a deck. Compare price, turnaround, cash at order, recurring revenue and today's verification verdict, then expand any row for exactly what the buyer receives, what we need from you, and what we refuse to claim.
Training · watch, then get a key
Captioned motion-graphics walkthrough. Autoplays muted; use the controls to pause, or the chapters to switch.
Book 15 minutes → Open the full comparison → · data: c42-products.json
Daily buyer's console · refreshed by two agents
This is not a static screenshot. Two AI agents refresh the matrix every day — one re-checks CAIN-42 against the live gateway, the other re-checks every competitor source — and publish the diff. Move the weights, check a must-have, and the ranking, the execution-vs-proof map, the radar and the feature matrix update together. Every cell is a documented status from the linked public source.
● Daily-refreshed comparison · two AI agents
Agent A re-checks CAIN-42's column against the live gateway and committed evidence. Agent B re-checks the committed public comparison page behind every competitor column and flags a source that is missing or unreachable; it does not crawl every vendor site. They write the cited buyer-matrix.json the page reads; the last run and the daily diff are shown below. Both are deterministic checkers: they can confirm a source or mark it stale, but they cannot upgrade a status without a source. If a source cannot be reached, the cell is marked stale and the last confirmed status is kept.
Drag a weight. Check a must-have. The ranking, map, radar and table update together.
1 = documented · 0.5 = partial / audit records · 0 = no public documentation found.
Loading the daily matrix…
Bubble size = deployment + self-serve flexibility. Faded = excluded by a must-have. Click a bubble to compare it.
How CAIN-42 controls autonomous AI agents WITHOUT PROMPTS at the execution boundary. In 2026, autonomous systems operate in the execution channel (Model Context Protocol, shell commands, databases, cloud APIs, financial transactions). CAIN-42 enforces single-use ActionCapabilityTokens, sub-50ms fleet quarantine kill-switches, and 4-node Byzantine PBFT quorum notarization across OpenAI, Anthropic, Google Gemini, Grok, Copilot, Perplexity, LangGraph, and CrewAI.
| Product Name | Core Capability & Technology | Target Buyer | Commercial Price |
|---|---|---|---|
| 1. CAIN Swarm Guard | Middleware execution governor for OpenAI Swarm & LangGraph. Mints single-use ActionCapabilityTokens, enforces monotonic authority attenuation on sub-agent handoffs, and blocks prompt injection before tool dispatch. |
AI startups & enterprise engineering teams deploying multi-agent swarms | $499/mo (Pro) to $5,000/mo (Enterprise) or $0.001/action |
| 2. MCPGate Boundary Appliance | Self-hosted Kubernetes security appliance for Anthropic Model Context Protocol (MCP). Intercepts JSON-RPC tool calls, enforces RFC 8785 canonical serialization, and halts unauthorized shell/SQL commands fail-closed. | Companies connecting Claude or custom LLMs to production databases & internal tools | $50,000 – $450,000/yr per K8s cluster |
| 3. Autonomous Swarm Fleet Quarantine & Sub-50ms Kill-Switch API | Cross-process SQLite WAL synchronized emergency kill switch. When any agent breaches policy, every process sharing the store refuses execution within <50ms (measured 2026-11-02 on one host: p50 14.9 ms, max 36.9 ms, 20 trials, data), active capability tokens are cascade-revoked, and signed containment receipts are issued. | Mission-critical autonomous fleet operators (fintech, healthcare, cloud infrastructure) | $15,000 – $75,000/yr Enterprise SLA |
| 4. AI Liability Actuarial Notary & Credit Scorer (0–1000) | Calculates continuous Underwriting Credit Scores and Maximum Probable Loss (MPL) for autonomous AI deployments. Provides insurers with verifiable mathematical proof. | AI fleet operators seeking commercial liability insurance & underwriting brokers | $25,000 audit fee + 1.5% Gross Written Premium royalty |
| 5. Tamper-Evident WORM Evidence Notary | Write-Once-Read-Many immutable proof trees for every consequential AI decision. Anchors execution receipts into RFC 6962 binary Merkle roots and signs with Ed25519 cluster keys. | Regulated deployers who must keep AI decision records (supports EU AI Act Art. 12/14 record-keeping; not a certification or legal opinion) | $100,000 – $300,000/yr Continuous Compliance-as-a-Service |
| 6. Multi-Agent Collusion & Steganography Shield (Moat 6) | Monitors inter-agent communication graphs for covert channel signaling, entropy anomalies, and token laundering between collaborating sub-agents. | Financial trading swarms, defense contractors, and multi-tenant agent platforms | $10,000 – $50,000/yr subscription |
python3 cain_verify_public.py platform-gateway/frontend/CAIN42_EPOCH6_PUBLIC_EVIDENCE_BUNDLE.jsonBudgets, payments, memory, knowledge graphs, verification, model routing, compliance, security scanning, cryptography, red-teaming and more: the CAIN-42 catalog lists 105 services; 104 of them were reachable on 2026-10-03, each behind the same authenticated gateway, each keeping every customer's data separate. The 98 services deployed in the 2026-10-03 release each passed a live acceptance test, including a cross-customer data check, before the gateway sent them traffic (see the evidence). CAIN-42 is pre-production: its release gate PRODUCTION_RELEASE_APPROVED is BLOCKED. Starter is $19.75 a month; Full, with every service, is $49.75 a month. New: Quorum-QaaS, Byzantine consensus as a service. Any enterprise can now get BFT without building it. See how every service grades on live checks →
Need custom policy enforcement for legacy enterprise databases? Scope a private gate in front of the systems you cannot change.
Request a Sovereign Node Deployment →Give every agent a spending limit it cannot talk its way past. Atomic reservations, fail-closed when no budget exists, a signed receipt for every yes and no.
Card-style authorization for agent purchases: merchant allow and deny lists, per-transaction and daily caps, human approval above your threshold, hold / capture / void / refund, tamper-evident ledger.
Check an agent's output before anything trusts it: JSON schema, exact arithmetic, SHA-256, code syntax, quotes against the source. Deterministic, signed, fails closed.
Long-term memory for your agents with real BM25 search, and prompt-injection text quarantined before it can ever be recalled.
One knowledge graph your agents share: every fact keeps its sources, contradictions are flagged instead of overwritten, and you can ask how any two things connect.
Who decided, under what mandate, with what dissent. Decisions outside a mandate are refused; dissent is kept verbatim in a hash-chained register.
Send each request to the right model by your own cost, latency and quality rules, with the reason for every choice and automatic failover when a model starts failing.
Check your AWS Nitro enclaves and AMD SEV-SNP confidential VMs before you trust them: signatures, certificate chains to pinned AWS and AMD roots, chip and firmware binding, freshness, your PCR policy.
Proposals, votes and preserved dissent for your team, with an outcome preview, EU AI Act screening of every proposal and a signed audit trail.
cainbudget · cainpay · human-in-loop
talos-coder · talos-evolve · taloscode-migrate · taloscode-review · talosdev-archdiff · talosdev-refactor · visual-ide
agent-marketplace · quorum-oaas
agent-debugger · attestation · cainwitness · content-provenance · decision-intelligence · multi-agent-incident-tracer · zkproofvault
swarm-orchestrator · talos-shield
blizzard-governance · guardian-scorecard · lexisguardian · talosops-governance
a2a-guard · agent-id · cainaccounts · taloscrypt-keymgmt · taloscrypt-pqc
arbitrage · caingrid · cainloan · cainroute · talosfin-earningsai · talosfin-statarb
knowledge-graph · memorymesh · nexusmind · talos-rag · talos-vectorsearch
edge-optimizer · model-compressor · omegarouter · sparselogic-compiler · synthetic-fine-tuner · talosai-quantize · training-sandbox · weight-alchemist
latent-inspector · observability · talosops-selfheal
experimentation-notebook · feedback-engine
caingovern · compliance-engine · legal-auditor · quorum-i18n · talosdoc-contract · taloslegal-caselaw
autonomous-task-engine · causal-intelligence · causal-network · counterfactual-intelligence · echoworkforce · mcts-engine · spatial-synthesizer · stcn
bias-detector · caindrift · contamination-scanner · context-health · hallucination-firewall · memory-integrity · metacognitive-enhancer · sentinel · talosdata-quality · trust-state-engine
adversarial-fuzzer · pii-redactor · secops-patcher · shadow-agent-scanner · talos-redteam · taloscode-security · taloscrypt-audit · taloscrypt-mesh · taloscrypt-store · taloscrypt-vault · talosguard-intel · talosguard-logiq · talosguard-siem
cainbench · cainschema · crucible · derivation-copilot · rag-verifier · talos-verify · taloslogic-proof · topological-data-analysis · trajectorygate · vericoding-gate · veritasengine
We moved the CAIN-42 products from our San Jose node to the production host in Atlanta. A product appears here only if it started cleanly in a sandbox and a real call to it worked. Pick one, change the request if you like, and press Run: it is a live call to that product, started on demand in its own sandbox with no outbound network, so the first call can take a few seconds. Every product is also on the CAIN-42 Hugging Face Space under Suite. On the Space you can also ask for a product in plain English: an AI model running in your own browser ranks every suite product by meaning and maps the whole suite.
Seen on LinkedIn · test it here · buy it here
Each card calls that product’s real engine on this server when you press a button. Nothing runs until you press. The red button sends the attack from the post, the green button sends a safe lookalike, and you can edit the JSON to try your own input. Every verdict is deterministic (no LLM judge), and “Copy curl” gives you the same call to run from your own terminal. The same live demos are on our Hugging Face Space.
Every card below calls its real engine on this server when you press a button. Press the red button to send the attack, the green button for a safe lookalike. The evidence for the Oct 30 batch is at /evidence/linkedin-products-2026-10-30/ (14/14 live checks; the script is in the bundle).
MCP Attestor · Payment Mandate Guard · Browser Agent Firewall · Agent Autonomy Lease · Self-Modification Firewall · Data-Exfiltration Killswitch · Memory Authority Firewall · Swarm Collusion Defense · Capability Lease · ARGUS Behavioral Envelope · ATLAS Transaction Assurance · PQC Hybrid Signing · EU AI Act / ISO 42001 Evidence Notary
Supply-Chain Guard, Agent-ID, A2A Guard, Action Firewall, Content Provenance, TEE Verifier, Shadow AI Scanner, Crypto Audit, EU AI Act Classifier, Contamination Scanner, Trust State Engine and CainDrift. Their cases and recorded results are in the verification center and the Oct 29 evidence files. Every card on this page carries the standing $500 / 30-day pilot.
We run your agent code, MCP tools and skills through these same scanners. You get ranked findings, each with the exact input that reproduces it, plus an Ed25519-signed evidence bundle you can verify offline with a verifier that contains none of our code.
Loading the live demos… (needs JavaScript)
How everything works · twelve paragraphs
CAIN decides, TALOS enforces, ARGUS persists the right to act, Evidence proves it — and MCPGate is the box all four ship in, installed on the customer's side of the wall.
AI agents used to answer questions. Now they run shell commands, change databases, call APIs, move money and start other agents. Most AI safety tools still read the text going in and out of a model, which is the wrong place to stand when the damage is done by an action. CAIN-42 stands in the execution path instead, at the moment an agent's intention is about to become something real. It holds one rule above all the others: no authorization, no execution. Being capable, confident or right last time earns an agent nothing. Unknown means no, and an error means no.
Everything starts with a proposal. An agent that wants to act sends CAIN-42 a typed request: which tool, which arguments, on whose behalf. A signed agent passport ties its identity, its model, its tool set and its authority scope to that exact call, so a swapped model or a borrowed key shows up as a different caller. What the agent says about itself, and whatever a tool or a web page told it along the way, is handled strictly as data. It is never read as instructions, which is why a prompt injection can change what an agent asks for but cannot change the rules that answer it.
The request then runs through the CAIN-42 decision pipeline, a fixed chain of stages that each answer one question: is this identity still valid, is it entitled to this, does policy allow it, does it match known attack patterns, are the tool arguments real and well-formed, is the network destination on the allowlist, are the tools and skills the ones their publishers signed. Most of these stages can only restrict; none of them can turn a no into a yes. The result is one of three verdicts: allow, hold for a human, or block. You can read which stages enforce right now at /fabric/status; tenants can add intent and human-approval stages on top.
Behind the verdict sits the Trust Fabric, seven layers that work together. Trust state is computed from evidence and never from a model's opinion of itself. It decays with time, and it is deliberately lopsided: an agent earns trust back in small steps and loses it in large ones. Security context is carried across every boundary an action crosses, so authority cannot quietly grow when one agent hands work to another. A trust graph records how agents, tools, data and people are connected, and that graph is used to estimate how far an action could reach before it is allowed to run. Irreversible or wide-reaching actions need two operators.
At the centre is the CAIN-42 Just-In-Time Decision Engine. It evaluates each proposal at the moment it is made, against the policy and the authenticated context in force at that moment, not against a permission granted hours earlier. It never lets a scope widen past what policy allows, and when it is unsure it says no. A yes is not a flag in a database. It is an Ed25519-signed envelope bound by SHA-256 to the exact request, so changing one parameter breaks the match. With it comes a capability token that lives for about thirty seconds and can be used once.
One server saying yes is not enough. Hosted decisions are ordered and signed by a Byzantine fault-tolerant cluster: four replicas spread across US regions, built to keep working if one of them is down or lying. Nothing counts without a quorum certificate carrying three of the four signatures, and the gateway checks that certificate itself. The cluster sees only a decision id, a SHA-256 commitment and the preliminary verdict, not the request itself. No quorum means deny. And the quorum has a hard limit of its own: consensus notarizes, it never authorizes. Four replicas agreeing cannot make an unauthorized action authorized.
A signed decision still has to survive the TALOS verify kernel, the only door to execution. TALOS trusts nothing the caller says. It checks the envelope against its own trust roots, its own clock and its own ledger, and it compares the request it is about to run with the digest CAIN signed. Any doubt or any error inside the kernel produces a refusal. Its ledger lets one authorization be used once on that host. Only then does a sandbox launcher build a confined worker with no network, a restricted filesystem and filtered system calls, and prove each control took effect before any untrusted code runs. Today this gate runs live on our own host.
An agent that runs for hours cannot live on one approval, so CAIN ARGUS turns authority into a lease. The lease carries the scope, the limits, the validity window and the conditions under which it is renewed or revoked. The agent cannot extend its own lease, change its own conditions or vouch for its own good behaviour. ARGUS watches the path the agent actually takes, hash-chained step by step, so a string of small harmless-looking actions that add up to a harmful one is caught as a whole. When something material changes, the answer moves down a ladder: continue, continue under watch, re-authorize, restrict, halt. Nine restriction-only ARGUS stages run in the hosted path today.
MCPGate is where all of this meets your tools. It sits in front of MCP servers, APIs and internal services and lets a call through only when it carries an authorization for that exact action. Extra guard stages can be switched on for specific attacks: poisoned or shadowed tool descriptions, the read-private-data-then-send-it-out pattern, tampered supply chains, rogue agent payments, hijacked AI browsers and abuse of agent-to-agent trust. The hosted gateway is live. The self-hosted form, meant to run inside your network so traffic and evidence stay with you, is packaged as a Kubernetes appliance. For the highest-impact actions the IHVRK is built to add a human signature bound to one exact action.
Every decision leaves a record, allowed or refused. Records are serialized as canonical JSON, signed with Ed25519, linked into a SHA-256 hash chain and rolled up into a Merkle root, so a changed byte anywhere is detectable. Evidence is never deleted, only superseded by a newer version. Every public claim on these sites lives in a signed registry with its status, its evidence and its limits. The verifiers that check all this import none of CAIN-42's code and run on your own machine, offline: the Verification Center and the Auditor Kit are the front door. You do not have to take our word for any of it.
CAIN-42 does not assume its own guarantees hold. An adversarial engine keeps attacking them with replayed tokens, substituted actions, forged certificates, laundered delegation and step-by-step privilege creep, and what it learns becomes new checks. A control loop watches live behaviour and can quarantine an agent or a whole trajectory, revoke its tokens and require two keys to bring it back, leaving a signed receipt each time. What actually happened is then compared with what was predicted, and the difference updates trust. That updated trust is the starting point for the next decision, which is why the system gets stricter with experience instead of more relaxed.
Three sites carry it. cainstudio.online is the hosted control plane, with more than a hundred AI services behind one API key. mcpgate.online is the enforcement gate. clawx.click is where the proof is published. The five premier products below are built on these same engines: FALSEWORK audits whether an AI implementation is real, SCENIC tests how reliably an agent reaches its answer, NULLIUS re-derives a verdict from the evidence alone, SALLYPORT is the enforcement gate as an appliance, and Quorum-QaaS gives any enterprise Byzantine fault tolerance without building it. CAIN-42 is pre-production: its release gate PRODUCTION_RELEASE_APPROVED is BLOCKED. It is built by FIRME AI CORPORATION, founded in San Francisco in September 2026 by Vincent Noriega. Every claim we make is published and signed with its evidence and its current status, where anyone can check it. That is the whole idea. Don't trust CAIN-42. Verify CAIN-42.
New · CAIN-42 Memory
Agent memory that cannot be talked into authority.
A memory service for autonomous agents: deterministic Okapi BM25 recall with no model and no network, injection text quarantined at write time and withheld until a named human releases it, a per-tenant SHA-256 hash chain over every write with truncation detection, tombstoned deletes that erase content but keep the proof, lexical contradiction flags that are never silently resolved, and a firewall that makes memory data and never permission. Thirty-three machine-checkable invariants run live.
Free · no key · no card · until 1 January 2027grants_authority: falseNine steps on a throwaway database: a sourced fact, a hostile memory, default recall withholding it, an explicit recall showing it, a second tenant seeing nothing, a tombstone, a verified chain, and all 33 invariants. Nothing is pre-rendered.
Write a sourced fact and recall it. Per-visitor, no account. Send a stable visitor id to keep them across sessions.
Sixteen documentation pages cover the write path, BM25 recall, quarantine, provenance, deletion, contradiction, the authority firewall, tenant isolation, every invariant, agent integration, limits, the measured run, the free tier, and why Sparselogic is not a memory system: read the docs → · open the product page → · measured numbers →
CAG-L5 governed autonomy, and a recursive engineering loop you can re-run. CAIN-42 is not an “SAE Level 5” claim — CAG-L5 is CAIN’s own governance designation. What is real is the loop: a deterministic detector finds a defect, a frontier model acts, an independent sandboxed prover re-tests the original and the fixed file, and the record is Ed25519-signed and hash-chained so anyone can verify it offline. Detect → act → probe → prove → sign. Run it on our own code →
Measured on our own code: FALSEWORK re-checks the CAIN-42 codebase every 42 seconds and KEYSTONE applies only fixes it has proved. See the results.
New · CAIN-42 Studio Suite
Any enterprise can now get BFT without building it.
Byzantine fault tolerance used to mean hiring a distributed-systems team and spending years on a consensus cluster. Quorum-QaaS gives you ours through one API call. Send the SHA-256 digest of any record — a contract, a board decision, a model release, a log batch, an agent action — and a live four-replica PBFT cluster spread across four US regions orders it and commits it. A quorum of 3 out of 4 replicas must sign, so one replica can lie, crash or be compromised and the record still stands. You get back a receipt carrying the replicas’ own Ed25519-signed votes, and anyone can verify it offline with no CAIN code.
BFT without building it. One API key. One call. Proof anyone can check.
curl -s https://cainstudio.online/api/v1/quorum/notarize \
-H "X-API-Key: $CAIN_API_KEY" -H "content-type: application/json" \
-d "{\"digest\": \"$(sha256sum contract.pdf | cut -d' ' -f1)\"}" > receipt.json
What a receipt proves: at least 3 of the 4 replicas signed a COMMIT for exactly your digest, at exactly that sequence, in a cluster whose member keys hash to the published membership hash. The cluster orders and signs the digest you send; your data never leaves you. Verify offline with verify_qaas_receipt.py and verify_pbft_qc_bundle.py (Python + cryptography, no CAIN code), pinning the hash from /api/v1/live-cluster/membership.
Self-serve with any CAIN Studio API key; up to 120 notarizations per hour per tenant. Live cluster: /api/v1/quorum/status. Hourly operational proofs of the same cluster are published at clawx.click/evidence.
Dogfooding · FALSEWORK × KEYSTONE on CAIN-42 itself
Every 42 seconds, CAIN-42 re-checks its own code: FALSEWORK re-scans anything that changed, and the result is published here, live.
FALSEWORK scanned 2,948 Python files of the CAIN-42 ecosystem for code that fakes a result: random numbers presented as measurements, success messages written in rather than computed, verdicts returned without a check, errors silently swallowed, leftover placeholders.
| FALSEWORK grade | files | share |
|---|---|---|
| REAL — no findings | 2,829 | 96.0% |
| PARTIAL — a MEDIUM or HIGH finding | 119 | 4.0% |
| STUB — a CRITICAL finding | 0 | 0.0% |
178 findings, by kind:
| check | findings |
|---|---|
| bare_except_pass | 168 |
| placeholder_marker | 7 |
| unparseable_source | 1 |
| hardcoded_success_claim | 1 |
| unconditional_verdict | 1 |
KEYSTONE so far: 16 file(s) run through the full loop (FALSEWORK finds → Claude fixes → sandboxed tests must fail on the original and pass on the fix → Ed25519-signed record): 3 fix(es) proved, 13 not proved, 0 nothing to fix, 12 not run (the Claude API was unavailable; retried automatically). 111 flagged file(s) still to go; this section updates as the campaign continues.
| # | file | finding | verdict | reasons / applied |
|---|---|---|---|---|
| 0 | scripts/legacy/clean_routes.py | unparseable_source | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 1 | scripts/cluster7/cain_trust_fabric_7_engine.py | unconditional_verdict | NOT_VERIFIED | the model's answer was cut off (max_tokens) |
| 2 | cain/interop/benchmark.py | hardcoded_success_claim | NOT_VERIFIED | the model's answer was cut off (max_tokens) |
| 3 | scripts/cain42_bft/clean_room_verifier.py | placeholder_marker | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 4 | cain/substrate/cain_mcp_discovery.py | placeholder_marker | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 5 | cain/substrate/cain_capability.py | placeholder_marker | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect; Claude's test does not fully pass on the fixed code |
| 6 | cain/substrate/cain_drift.py | placeholder_marker | NOT_VERIFIED | the model's answer was cut off (max_tokens) |
| 7 | cain/substrate/demo_refresh.py | bare_except_pass | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 8 | scripts/legacy/clean_routes.py | unparseable_source | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 9 | scripts/cluster7/cain_trust_fabric_7_engine.py | unconditional_verdict | VERIFIED_FIX | applied in 1342208f: self-audit derives its verdict from the phases actually run |
| 10 | cain/interop/benchmark.py | hardcoded_success_claim | VERIFIED_FIX | applied in 1342208f; the honest SC-12 result exposed a real gap, closed in the same commit |
| 11 | scripts/cain42_bft/clean_room_verifier.py | placeholder_marker | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect; Claude's test does not fully pass on the fixed code |
| 12 | cain/substrate/cain_mcp_discovery.py | placeholder_marker | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 13 | cain/substrate/cain_capability.py | placeholder_marker | VERIFIED_FIX | applied in 1342208f: unfinished OAuth adapters refuse instead of passing raw credentials; 31/31 tests |
| 14 | cain/substrate/cain_drift.py | placeholder_marker | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 15 | cain/substrate/demo_refresh.py | bare_except_pass | NOT_VERIFIED | Claude's test also passes on the original, so it does not show the defect |
| 16 | platform-gateway/demo_refresh.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 17 | scripts/cain42_site/check_links.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 18 | scripts/review_package/publish_live.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 19 | scripts/architecture_reality_map.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 20 | scripts/cain42_bft/multi_region_bench.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 21 | scripts/cain42_evolution/bench_reality.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 22 | scripts/ironclad/prompt8/sign_manifest.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 23 | scripts/cluster13/cain_enforcement_path_validator_13.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 24 | scripts/bft_verifiable_run.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 25 | scripts/bench_clawx23.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 26 | cain/runtime/runtime.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
| 27 | scripts/cain42_bft/pbft_ab_bench.py | bare_except_pass | NOT_VERIFIED | Claude API error 400: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the An |
Found by applying a proved fix: Applying KEYSTONE's benchmark fix replaced a hard-coded 'blocked' verdict with the real outcome and exposed a real security gap: the interop bridge accepted an authorization signed under a different policy version. It is now refused (POLICY_VERSION_MISMATCH), commit 1342208f.
What we excluded, and why: 159 files of FALSEWORK’s own test material (scripts/falsework/sample_project (a deliberately fake demo) and benchmark/corpus (planted and copied defects used to measure FALSEWORK); all 4 CRITICAL findings of the raw scan were there), and 1 finding reviewed by hand as a false alarm (a random fault-injection target in a soak test).
What this scan cannot see: FALSEWORK looks for fabricated results, swallowed errors, placeholder markers and unconditional verdicts. It does not find security, performance or design defects.
The 42-second self-check, on the record: 68 checks since 2026-10-15T20:45:48Z, each one a line in ticks.jsonl that carries the SHA-256 of the line before it, so a skipped or edited check breaks the chain. A check re-scans with FALSEWORK the files that changed; it does not re-run KEYSTONE.
Check it yourself: the signed evidence bundle and its verify_bundle.py (no CAIN code) recompute every number above.
Newest product · CAIN-42 Studio
Watch it happen, line by line, live on this page: FALSEWORK hunts every line for fake results, stubs and unverified claims and names the exact line; Claude Code rewrites that line; CAIN-42 proves the fix and signs the record — and the console below keeps a live, re-checkable tally of every defect ever fixed here. Not a video. Not a claim. The running engine.
Our competitors say “trust us.” We say: don’t trust CAIN — verify CAIN. Use KEYSTONE instead.
Want FALSEWORK across your whole codebase? 30-day pilot: $500. We scan your repository and walk your team through every finding. Start a pilot →
Loading…
Reading the ledger…
Loading…
Loading…
This is the moat: only KEYSTONE records evidence of every bug it fixes. The other code-repair tools find and fix — then the fix disappears into a chat window. KEYSTONE writes each fix into a signed, hash-chained ledger and lets you watch it happen live: the defect, the exact lines changed, the tests that prove it, the verdict, the SHA-256 chain link and the Ed25519 signature — every record re-checkable by you, and by any auditor, offline. The console below is that ledger, updating in real time as fixes land. No competitor hands you proof of the fix.
Every run writes a signed record: canonical JSON, SHA-256 chained to the previous record, Ed25519-signed. Re-check any record with one click; the key is public at /keystone/public-key. Model-written code runs only inside a sealed bubblewrap sandbox (no network, read-only system). A fix is called a fix only when FALSEWORK re-scans clean and the tests pass on the fix and fail on the original; otherwise the record says NOT_VERIFIED.
New in the KEYSTONE family · CAIN-42 Studio
The MCP security scanner reads a tool definition the way a client receives it — looking for a description that hijacks the assistant, a leaked credential, or a raw command parameter with no constraint. Claude hardens it. Then the SAME scanner re-reads the result, and only a clean second opinion is signed into the ledger. Pick a sample or paste your own MCP tool definition.
Loading…
Reading the ledger…
Loading…
Loading…
The moat, again: proof, not opinion. An MCP security scanner finds a poisoned tool; a model can rewrite it. Only MCPGate KEYSTONE re-reads the rewrite with the same deterministic scanner and signs the record — the finding, the hardened definition, the scanner's second opinion and an Ed25519 signature chained into the CAIN-42 ledger. A hardening is called a hardening only when no HIGH or MEDIUM finding remains; otherwise the record says NOT_VERIFIED. Every record is re-checkable and the evidence pack downloads for an auditor.
Pairs with the sibling product MCP-Attestor: scan the descriptor here, harden it, hand the clean descriptor to MCP-Attestor to probe the handler, and you hold one evidence pair. Both reuse the same MCP scanner and the same bubblewrap sandbox.
AI Agent Security Audit · CAIN-42 Studio
Give it a public MCP server’s URL and it reads the tool definitions that server advertises, then runs the real MCP security scanner over them — descriptions that hijack the assistant, tool-poisoning blocks, leaked credentials, raw command parameters with no constraint. The verdict is SHA-256 chained and Ed25519-signed, so you can verify it offline without trusting us. Read-only: it never calls a tool. Try a sample server, paste a tools/list, or audit a live URL.
The moat: proof, not a PDF. Other scanners hand you a report and say “trust me.” This hands you a signed record — the exact tool list that was scanned, the findings, and an Ed25519 signature chained into the CAIN-42 ledger that re-verifies offline with a tool containing none of our code. It is a heuristic static scan of the advertised definitions, not a proof of safety; the paid audit adds live red-team testing. Download a signed evidence bundle →
Want a person to check it? MCP Server Security Check · $1,500. Automated scans flag harmless text too, so we read every finding and keep only what is real, check how agents sign in and where your tokens travel, and send a signed report with fixes in 3 business days. One server, up to 50 tools, read-only, with your written permission. Counts in full toward the $5,000 audit. Book the $1,500 check
New in the KEYSTONE family · CAIN-42 Studio
Each one runs a deterministic detector, lets Claude propose the fix, proves the fix with an independent check, and signs the record with Ed25519 so an auditor can verify it offline. Press “Run live” on any card: it calls that product’s engine on this server.
OpenClaw skills and plugins
Scans an OpenClaw skill for credential theft, hidden shell commands and instructions aimed at the agent. Claude rewrites the skill; CAIN-42 proves the fixed skill runs inside an isolated sandbox with its own key.
Multi-agent delegation
Maps who delegates to whom in a CrewAI, LangGraph or AutoGen swarm and catches authority escalation, delegation loops and collusion. The proof checks the hardened graph is acyclic and every hand-off only narrows authority.
AI-written code
Reads code an AI assistant wrote and flags invented or typosquatted packages, swallowed errors and metrics made from random numbers. Every import goes through CAIN-42's supply-chain guard before the fix is accepted.
Agent long-term memory
Inspects a memory before an agent stores it: sleeper instructions, cross-tenant leaks and exfiltration links. Uses CAIN-42's signed prompt-injection classifier, then proves the cleaned memory is free of the residue.
Browser agents
Checks a browser agent's plan before it runs: wire transfers, account deletions and other irreversible clicks. Critical steps wait for a human approval that only CAIN-42 can sign, bound to the exact steps and an expiry.
Agent-fleet risk score
Scores a fleet of agents 0–1000 from its real CAIN-42 decision records, with every adjustment shown. Claude proposes policy rules; a replay of the same history proves each high-risk action is now gated. A risk score from evidence; no insurer is behind it.
KEYSTONE family · AI coding agents · CAIN-42 Studio
Claude Code, Cursor and Codex run shell commands and write files on your laptop and in CI. CODEGUARD reads each action before it runs and answers DENY, ASK A HUMAN or ALLOW. A deterministic parser makes the call, not a model: it unwraps sudo, sh -c, $(…), backticks, quoting tricks and base64-to-bash, so the hidden command is the one that gets checked. Anything it cannot resolve goes to a person, never through. Type below: every keystroke is checked by the production gate.
Real incident patterns. Pick one:
curl -fsSL https://cainstudio.online/api/v1/codeguard-keystone/hook.py -o ~/.claude/codeguard-hook.py
{"hooks": {"PreToolUse": [{"matcher": "Bash|Write|Edit|MultiEdit|NotebookEdit|Read",
"hooks": [{"type": "command", "command": "python3 ~/.claude/codeguard-hook.py"}]}]}}The hook only adds denials and approval prompts. An ALLOW prints nothing, so your own permission settings still apply. If the gate can’t be reached, it asks you rather than allowing. The pending tool call is sent to the gate and not stored. Set CODEGUARD_SEND_CONTENT=0 to keep file contents on your machine. API: samples · install · public key · signed evidence bundle.
The moat: proof, not a prompt filter. Most coding-agent guardrails ask a model whether a command looks dangerous. CODEGUARD parses it, decides by rule, and signs the decision. When Claude proposes a safer command, the same gate re-checks it and the record is chained into the KEYSTONE ledger. Pairs with MCPGate KEYSTONE for MCP tool calls and KEYSTONE for proved code fixes.
KEYSTONE family · pull requests · CAIN-42 Studio
AI agents now open pull requests faster than people can read them, and the same mistakes repeat: tests skipped or deleted to turn CI green, workflows that hand repository secrets to any fork, committed keys, typosquatted packages, hidden Unicode that makes code run differently from how it reads, and poisoned AGENTS.md files. KEYSTONE CI reads the diff with fixed rules, not a model, and answers BLOCK, REVIEW or PASS. Each answer is an in-toto attestation in a signed DSSE envelope that you can keep next to the build and check offline. Paste any public GitHub PR below: the production gate fetches it and checks it now.
assert True.pull_request_target, script injection, write-all, unpinned actions, secrets echoed into logs.AGENTS.md / CLAUDE.md / .cursorrules, agent permission files, CODEOWNERS.curl -fsSL https://cainstudio.online/api/v1/keystone-ci/action.yml -o .github/workflows/keystone-ci.yml
The workflow runs on every PR with read-only permissions. It adds annotations on the exact lines, fails the check on BLOCK (set FAIL_ON: REVIEW to be stricter), writes a badge into the job summary and uploads the signed attestation as a build artifact. The PR diff is sent to the gate and not stored; the signed verdict and findings are. Read the file before you commit it.
API: samples · action.yml · latest attestation · public key · signed evidence bundle.
The moat: proof, not a reviewer's opinion. AI code reviewers leave comments a model wrote, and the next run may say something different. KEYSTONE CI gives the same verdict for the same diff every time, binds it to the diff's SHA-256 and the head commit, and signs it in the standard supply-chain attestation format (in-toto/DSSE). An auditor can check a year later that this exact PR was gated and what the gate said. Pairs with CODEGUARD, which checks agent actions while the agent is still working, and KEYSTONE, which proves code fixes.
KEYSTONE family · agent credentials · CAIN-42 Studio
Agents usually get standing API keys, so one prompt injection can spend them on anything. With CAIN Action Credentials, the agent asks for one action. CAIN checks that agent's grants and issues a credential tied to that audience, that method, that exact path and the SHA-256 of that exact body. It lives 60 seconds, works once, and any service can check it with a standard EdDSA signature and the published key. The agent can hand a sub-agent a narrower credential, never a wider one. Try it: every step below is a real request to the production issuer and a demo API that accepts nothing else.
Demo grants (the public page can only issue credentials for these agents and the demo API):
Minting key …. It is separate from the KEYSTONE evidence key and is held in software on the gateway host; there is no hardware security module behind it yet. Each issuance is logged as a hash-chained, signed record that holds the credential’s SHA-256, never the credential itself. The demo API returns labelled demo data and changes nothing. API: JWKS · verifier for your service · latest issuance record · issuance log bundle.
The moat: authority that only shrinks, and proof of every grant. OAuth access tokens and API keys say who you are. A CAIN Action Credential says exactly what one call may do, and it ties a sub-agent’s credential to its parent so delegation can only narrow. The issuance log lets an auditor reconstruct every credential that was ever issued. This extends CAIN’s credential broker, which keeps stored keys away from agents, and pairs with CODEGUARD and KEYSTONE CI.
KEYSTONE family · human approval · CAIN-42 Studio
When an agent wants to do something risky, a person has to say yes, and the yes has to cover exactly what will run. APPROVAL KEYSTONE binds every request to the action’s SHA-256 and requires N of M approvers. The agent can never vote, each person counts once, and one Deny ends it. Each approver gets a one-time signed ballot behind the Approve and Deny buttons in Slack. When the quorum is met, CAIN signs an approval that buys one credential for that action and nothing else. Below, a billing agent wants to delete an invoice. Every step is a real request to production.
Action sha256 …
The cards above are the actual Block Kit message CAIN posts to Slack (from /requests/{id}/slack), drawn in this page. In this demo you hold every approver’s ballot so that one person can try the whole flow. In a real workspace, each ballot goes only to its approver as a Slack DM. The Slack endpoint checks Slack’s request signature and maps each Slack user to an approver. Until a workspace is configured, that endpoint refuses every request. Every request, vote and outcome is a hash-chained, signed ledger record. API: samples · latest ledger record · ledger bundle.
The moat: an approval you can prove, for the exact thing that ran. Most approval steps are a button in a chat that says “OK”, and nothing ties it to what the agent then does. Here the approval names the action’s digest and the approvers, and the credential the agent receives can only perform that one action, once. It builds on CAIN’s approval queue and Slack alerts, and pairs with BROKER KEYSTONE.
KEYSTONE family · agent spend · CAIN-42 Studio
Runaway agents rarely hit a monthly limit first. They burn money in a retry storm, call the same tool in a loop, or spend in amounts too small to notice one at a time. The governor checks every charge against the agent’s budget and every budget above it (workflow, tenant). It also enforces a spend-rate limit at each level and trips a circuit breaker on identical repeated calls. A tripped agent is stopped until a person resets it with a reset that CAIN signs. The agent can’t reset itself. You get your own budget tree on the production governor; pick an agent and a behaviour.
Each charge is checked atomically across every level, so concurrent agents can’t overspend a shared parent; this is tested with four processes racing. Amounts must be finite and above zero. While building this, we found and fixed a bug in CAIN’s budget engine that accepted negative amounts. In this demo you play the operator. In production, a reset goes through APPROVAL KEYSTONE. Trips and resets are hash-chained, signed ledger records: latest record · ledger bundle.
The moat: limits on spend rate and repetition, not only on totals. Billing alerts arrive after the money is gone, and a monthly cap won’t stop a loop that burns a day’s budget in minutes. The governor decides on every charge, before it happens, at every level of the organisation, and keeps signed proof of every stop. Pairs with BROKER KEYSTONE (what an agent may do) and CODEGUARD.
KEYSTONE family · agent run records · CAIN-42 Studio
When an agent does something it shouldn’t, the first question is what actually happened, and an ordinary trace can be edited after the fact. The flight recorder writes each step of a run as an OpenTelemetry gen_ai span, links every span to the one before it by SHA-256, and seals the run with an RFC 6962 Merkle root signed with Ed25519. Below, a refund agent runs on the production recorder. Then you try to rewrite history.
Every check on this card is computed by the server, not by this page. Erasing a payload keeps its salted commitment, so a GDPR erasure leaves the chain, the Merkle root and the seal verifiable. An inclusion proof shows an auditor one event and the signed root, and nothing else in the run.
The moat: a record the agent’s operator can’t quietly rewrite. Tracing tools show you what happened; the flight recorder lets someone who doesn’t trust you check it, offline, against a pinned key. Pairs with SPEND GOVERNOR, APPROVAL and BROKER, whose decisions it records.
KEYSTONE family · release gate for AI agents · CAIN-42 Studio
A new model or prompt can give the same answers and still take a different, riskier path to get there: skip the policy check, loop on a retry, delete something and put it back. AGENT-CI runs the old and new versions of an agent on the same test cases and compares both the answers and every tool call. A deterministic gate gives the verdict, with no LLM judge. A separate clean-room verifier re-derives that verdict in a sandbox before it is signed. Below, a support agent moves from v1.4 to v1.5. Pick a change and run the gate.
curl -sO https://cainstudio.online/api/v1/agent-ci-keystone/client.py python3 client.py suite.json --strict
Every verdict on this card comes from the production gate, not from this page. The signed record is hash-chained and verifies offline with the clean-room verifier against the pinned KEYSTONE key.
The moat: a release decision someone else can re-check. Eval dashboards score answers; AGENT-CI also grades the path the agent took, and it hands your auditor a signed verdict they can re-derive without trusting us. Pairs with FLIGHT RECORDER, which records what the agent did once it shipped.
KEYSTONE family · attack and patch agent tool policies · CAIN-42 Studio
An allow list that says “only files under docs/” is only as good as the gate that reads it. docs/../.env, an encoded slash or a hidden @ in a URL can pass the gate while the tool reads something else. REDTEAM generates bypass calls from your policy, fires them at the gate and compares what the gate approved with what the tool would actually touch. It then writes the smallest patch that closes every breach without blocking legitimate calls, and proves the patch in a sandbox with an independent verifier. Pick an agent and run the red team.
Every attack, verdict and patch on this card is computed by the production engine, not by this page. Click a tile to see the exact call and try your own bypass value against the live gate. Records verify offline with the clean-room verifier against the pinned KEYSTONE key.
The moat: a patch that comes with its own proof. Scanners hand you a list of findings; REDTEAM hands you the fix, a second implementation that re-runs every attack against it, and a signed record your auditor can check offline. Pairs with MCPGate KEYSTONE and BROKER, which enforce the patched policy at the boundary.
Proof-carrying attestation · CAIN-42 Studio
An MCP tool is not trusted because its description looks clean. MCP-Attestor runs the description through the scanner, then runs the handler itself inside a sealed bubblewrap sandbox — no network, read-only — against an adversarial test that tries to trigger the very behavior the scanner flagged. The result is recorded only when the fix passes the test and the test fails on the original; that record, the verdict, the SHA-256 chain link and the Ed25519 signature are re-checkable below and as a standalone bundle.
A tool description is not the handler; this test runs the handler.
This is the moat: only MCP-Attestor records evidence of the handler, not the description. The other MCP security tools scan a description and hand back a clean badge. MCP-Attestor runs the handler in a sealed sandbox, fixes the finding, and proves the fix by a test that fails on the original and passes on the fix — then signs the record, the SHA-256 chain link and the Ed25519 signature, into the CAIN-42 ledger. A handler is only called clean when that loop closes; otherwise the record says NOT_VERIFIED.
Every run writes a signed record: canonical JSON, SHA-256 chained to the previous record, Ed25519-signed. Re-check any record with one click; the key is public at /mcp-attestor/public-key. The sealed sandbox (bubblewrap, no network, read-only system) runs the descriptor scan and the handler probe in two passes. A finding is only closed when the test fails on the original handler and passes on the hardened handler; otherwise the record says NOT_VERIFIED.
New in the KEYSTONE family · CAIN-42 Studio
Give a function a contract — a precondition and a postcondition. Z3, a real SMT solver, either proves the contract holds for every possible input, or returns the exact input that breaks it. Claude rewrites the function. Then Z3 proves the rewrite satisfies the contract for all inputs, and CAIN-42 signs it. Not “the tests pass.” A proof, or a counterexample.
Loading…
Reading the ledger…
Loading…
Loading…
The strongest moat in the family: a proof, not a test. Every other code tool samples inputs and hopes. VeriCoding KEYSTONE negates the contract and asks Z3 for a satisfying assignment: a real input proves the bug; proving the negation unsatisfiable means the fix holds for every input in the space — and CAIN-42 signs the record. A proof is called a proof only when Z3 proves it and the signature is unchanged; otherwise the record says NOT_VERIFIED. The verified subset is stated up front, never oversold.
Part of the KEYSTONE family alongside KEYSTONE, MCPGate KEYSTONE and MCP-Attestor — same 5-stage loop, same evidence convention, one key that verifies every record. Verify any of them with the shared family verifier in the evidence pack.
CAIN-42 Premier Suite
The four strongest products built on the CAIN-42 engines. Every card carries its status and its limits. The first four were smoke-tested and stress-tested on 2026-10-13: read the results or re-run the checks yourself.
30-day pilot · $500
Prove it's real.
four engines, self-serve API
CI for agents.
reference tools free
On the word of no one.
live gate on our host today; pilots in your cluster
The only door.
self-serve API, any API key
BFT without building it.
The free public layer: NULLIUS verifiers — free, no key. The written spec is not published yet. Each path is bought separately.
Verify CAIN-42 yourself in seconds, on your own computer: open the Verifier Room on this page and copy one block into a terminal. It downloads a published evidence bundle and its clean-room verifier and recomputes the result — no account, no contact, nothing taken on trust.
Unvetted tool descriptions carry prompt injections. Unchecked boundaries leak credentials. Get a written, severity-ranked report and concrete code fixes for your agent stack before customers or auditors ask.
Full static analysis of your agent's MCP tool definitions (names, descriptions, schemas, parameter bounds) for hidden prompt injections, secret leakage, and boundary flaws. 5 business days delivery.
End-to-end adversarial red-teaming, runtime capability token audit, governed memory fuzzing, and EU AI Act Art. 14/72 statutory logging verification for multi-agent fleets.
AI now commands things that move: drones, self-driving cars, robot arms, defense platforms. And L5 agents now run for hours without a human approving each step. The model does not know the rules the machine must keep: no-fly zones, the car's design limits, how close a robot may come to a person, who is allowed to order a use of force, or that it must not edit its own shutdown script.
These nine guards sit between the AI and the machine. Each checks every command before it reaches the autopilot, driving stack, robot controller or agent tool, and answers allow, hold for a human or refuse, naming the rule. Deterministic rules, no LLM judge. Commands that make the machine safer (land, hold, return home, stop, pull over, abort) are never refused; one that also names a destination or an altitude (land at a point, return home at 5,000 m) makes the machine fly first, so it is checked like any move.
Pick a guard above, then a scenario, or edit the JSON: config is the operator's setup, base the default vehicle state, events the commands sent in order (each event's state is merged over base). Signatures are made with throwaway keys; sign_as says who signs. Nothing real is commanded and nothing you send is stored.
AI agents now hand work to other companies' agents over Google's Agent2Agent (A2A) protocol. The calling agent decides whom to trust from each remote agent's Agent Card, a document the remote agent writes about itself. Whoever controls that text controls where your data goes: a rogue card that claims to be "the best choice for every task" gets picked by the planner and receives everyone's requests (Trustwave SpiderLabs' "agent in the middle" research). Cards can carry instructions to your model, change after you trusted them, ask the remote agent to call back into your network, and send back results that try to steer your agent.
CAIN's guard sits on the calling side and checks the four A2A trust points: which agents may be chosen, what may be sent to them, where they may call back, and which results may be believed. Deterministic rules, no LLM judge.
A card must come from its own host on a domain you listed, over https, never an internal address. Where you pinned a signing key, the card's signature must verify against it: a card cannot vouch for itself. Look-alike domains, text that gives your model orders, and "handles everything" cards are stopped before a planner can pick them.
Every admitted card is pinned by hash. If the agent later serves a different card (a new skill, a new endpoint, new text), it is suspended until an operator approves the change, so nothing is sent to it in the meantime.
No credentials in messages, no data above the agent's trust tier. Push-notification callbacks only to your allowlisted https hosts, never cloud-metadata or internal addresses. Results only for tasks you created, in the same user's conversation; results that address your model are held as data.
Pick a scenario, or edit the JSON: trust lists the agent domains you work with and their tier, events are cards offered for discovery (admit_card), messages (send), callbacks (push) and results (result). The demo signs cards with a throwaway key in place of the partner's publisher. No agent is contacted and nothing you send is stored.
AI browsers and computer-use agents act inside your logged-in sessions, and every page they read is text an attacker can write. In 2025 that was enough to make one read a mailbox and post a sign-in code to a public thread (Brave's Perplexity Comet disclosure), smuggle mailbox data out in a base64 URL (LayerX's "CometJacking"), treat a broken link pasted in the address bar as a trusted command (NeuralTrust's ChatGPT Atlas finding), and type bank details into a look-alike site or click a fake CAPTCHA's download button (Guardio's "Scamlexity" and "PromptFix").
CAIN's firewall judges each browser action before it runs, for one user task. What the user asked for is authority; what a page says never is. Its blocking rules do not depend on spotting the injection: they follow where the agent is going, who chose that destination, what data would leave with it, and where a secret is being typed. Deterministic rules, no LLM judge.
Submitting, sending, paying or downloading only on the sites the task covers. Mail, identity and banking sites are not visited unless the task includes them. A destination a page named and the user never did is refused. Address-bar input that is not a strict URL stays text.
What the agent reads on private pages is fingerprinted. Those fingerprints inside a URL (host, path or query; plain, base64, hex or %-encoded, two layers deep) or in text typed into another site are refused. Following a link found in your mail is fine; forwarding it elsewhere is not.
A password, one-time code or card can only be typed on the origin it belongs to. URLs with user@host tricks, look-alike letters or non-web schemes are refused. Executable downloads and uploads of key or browser-profile files are refused; other downloads wait for the user.
Pick a scenario, or edit the JSON: task is what the user asked for and the sites it covers, events are what the agent saw (observe, with visible and hidden page text) and what it tried (act). No browser is driven, no page is fetched and nothing you send is stored.
AI agents now check out and pay on a person's behalf. Card networks, merchants and banks all need the same answer afterwards: did the human actually authorize this purchase? The new agent-payment protocols (Google's AP2, Visa Trusted Agent Protocol, Mastercard Agent Pay, the OpenAI and Stripe Agentic Commerce Protocol, x402) answer with signed mandates. Someone still has to enforce them at the moment the agent pays, when a fake store, an injected product page or a swapped bank account is in play.
CAIN's guard sits between the agent and the payment call. It checks the cart against the mandate the human signed, reserves the spend atomically, and answers ALLOW, REQUIRE_APPROVAL or DENY with every rule that fired and a signed receipt that binds mandate, cart and verdict. Deterministic rules, no LLM judge.
The signer must be a person whose key the operator registered: a mandate cannot bring its own key. Any edit after signing, a different agent presenting it, expiry and revocation are all refused.
Only stores on the mandate, with look-alike domains called out. The payee must be that merchant's registered account. Items the human did not ask for, gift cards and other cash-equivalents, prices or quantities above the mandate, and totals that do not add up are refused.
Per-purchase limit, total budget and purchase count in one atomic ledger, so many small purchases or two racing checkouts cannot overspend. The same cart twice is refused. Large purchases can wait for the human. Every decision gets an Ed25519-signed, hash-chained receipt.
Pick a scenario, or edit the JSON: mandate is what the human approved (amounts in cents), steps are the carts the agent tries to pay. In this demo the server signs the mandate in place of the human's wallet, with a throwaway key. No store is contacted, no payment is made and nothing you send is stored.
The carved-out engines below now run together as stages in the MCPGate proxy that sits in front of your MCP servers. One config file switches them on. Every tool call passes the kill-switch first, then skill scope, delegation (swarm collusion), the memory firewall and the supply-chain guard, alongside the tool-poisoning and lethal-trifecta guards already in the proxy. A stage can only refuse or hold a call; it can never allow one that another check refused. If a stage fails, the call is refused.
Pick a scenario, or edit the JSON: config is the same guard config the proxy reads, calls are the agent's tool calls. Each request gets a fresh stack with its own kill-switch. No tool is called and nothing you send is stored.
Coding agents (Claude Code, Cursor, Copilot, Codex, Gemini CLI) now install packages, edit config and run shell commands on their own. That opened a new attack surface: packages the model invented that attackers then register ("slopsquatting"), typosquats, private-index confusion, agents rewriting their own config to auto-approve tools (CVE-2025-53773 in Copilot, CVE-2025-54135 "CurXecute" in Cursor), and malware that drives your AI CLI with its guardrails off (the Nx "s1ngularity" attack) or steals your registry token and republishes your packages (the Shai-Hulud npm worm).
CAIN's guard judges each command and file write before it runs and answers ALLOW, REQUIRE_APPROVAL or DENY with the rule that fired. A package that is neither vetted nor in your lockfile is held, never waved through. Deterministic rules, no LLM judge, under a few milliseconds per action.
pip, uv, poetry, pipx, npm, yarn, pnpm, bun, npx and uvx, plus requirements.txt, package.json and pyproject.toml edits. Hallucinated and known-malicious names (via your registry/OSV lookup), typosquats (swapped letters and look-alike characters refused, other near-misses held), installs from URLs or git, and untrusted indexes set by flag, environment variable or config.
Writes to an agent's own config (.vscode/settings.json, .cursor/mcp.json, .claude/settings.json and more) that turn on auto-approve or add MCP servers are refused. Rule files (CLAUDE.md, AGENTS.md, .cursorrules) with invisible characters are refused; other edits are held.
A downloaded script run without review (piped into a shell or interpreter by name or full path, through tee, via <( ) or $( ), or saved and run in the same command), AI CLIs started with their permission checks off (--dangerously-skip-permissions, --yolo, --approval-mode yolo, --sandbox danger-full-access, unrestricted --allowedTools), reads of .npmrc, cloud keys, SSH keys and secret environment variables, secret scanners, and package publishing, which a human must release.
Pick a scenario, or edit the JSON: actions are what the agent wants to do ({"kind":"shell","command":...} or {"kind":"write_file","path":...,"content":...}), allowlist is your lockfile, registry holds registry facts for the scenario. Nothing is executed or written, nothing you send is stored, and the drill does not contact PyPI or npm.
An AI agent leaks data when one session can do three things: read private data, read text an attacker wrote (a web page, a GitHub issue, an inbound e-mail, a support ticket), and send something out. The attacker's text tells the agent to fetch the private data and send it. That is how the GitHub MCP issue leak, EchoLeak in Microsoft 365 Copilot (CVE-2025-32711) and the Supabase MCP ticket leak worked. Prompt filters miss it because no single step looks wrong.
CAIN's guard tracks the session, not the prompt. A session may hold at most two of the three legs; the tool call that would add the third is refused before it runs, in whatever order the legs arrive. Every outbound call is also checked for fragments of private data the session read (also after base64/hex/URL decoding) and for smuggled credentials or hidden Unicode. Deterministic rules, no LLM judge.
Each tool carries its legs (private data, untrusted content, external comms). The third leg is refused, so injected text can never reach both your data and a way out. A tool that holds all three on its own is refused outright.
What private tools return is fingerprinted (hashed identifiers and word shingles). Outbound arguments carrying those fingerprints, raw or encoded, are refused unless the destination is on your egress allowlist.
AWS keys, private keys, JWTs and live API tokens in an outbound payload, plain or nested in base64/hex/%-encoding, and zero-width or Unicode-tag characters that can carry a hidden bitstream.
Pick a scenario, or edit the JSON: profiles maps each tool to its legs, steps are the agent's tool calls (with what each tool would return), egress_allowlist is where private data may go. No real tool is called and nothing you send is stored.
Every MCP server writes the text your agent's model reads about its tools. That text is an attack channel: a tool that "adds two numbers" can carry a hidden instruction to read ~/.ssh/id_rsa, tell the model how to misuse another server's send_email, hide orders in invisible Unicode, or quietly change its definition after you approved it (a rug pull).
CAIN's guard sits on tools/list. It scans every definition with deterministic rules (no LLM judge), pins each approved definition by SHA-256, and quarantines any tool that trips a rule or changes after pinning. A quarantined tool is removed from what the agent sees and refused at tools/call until an operator re-approves it.
Hidden <IMPORTANT> blocks, "do not tell the user", reads of secrets, exfiltration URLs, base64 blobs. Scanned in the description, every schema field, enum value and property key.
One server's tool telling the model how to use another server's tool. Also duplicate names and homoglyph names like reаd_file with a Cyrillic "а".
Approved definitions are hash-pinned per server, over the whole tool object. Any later change, even one that reads as harmless, is quarantined until a named operator re-approves it. With a pin store the pins survive restarts and are shared by every proxy process. In strict mode nothing reaches the agent until an operator has approved that exact definition.
Pick an attack, or edit the JSON and write your own. "Current tools" is what the MCP server serves now; "Previously approved" is optional and turns on rug-pull detection. Nothing you send is stored.
Limits, measured 2026-10-12: the phrase rules caught 20 of 20 known poisoning descriptions and flagged 0 of 65 ordinary ones, but only 3 of 15 new behavioural instructions written in plain words (a held-out set, measured once). Try "Honest limit" above. What does not depend on wording: invisible characters and look-alike letters, hidden markup, addresses and local paths inside descriptions, one server naming another server's tool, pinning, and strict mode. Without a pin store, a proxy restart forgets approvals. The guard decides what the agent sees and refuses calls to quarantined tools. It does not inspect tool results, and passing it does not authorize a call: CAIN policy still decides. Building this demo exposed a real gap: shadowing text that named another tool ("When using the send_email tool…") passed the scan. It is fixed and covered by regression tests.
When an AI agent fleet experiences goal drift, prompt injection, or memory contagion cascades, traditional prompt filters fail. The cain.quarantine subsystem stops a rogue agent, a whole swarm or every agent at once, and every worker process sees it in under 50 milliseconds through one shared SQLite (WAL) store. Every containment is Ed25519-signed by the node's persistent key; a containment that could not be stored is reported as not done, never as done. Self-contained, ready for licensing or OEM integration.
Engineered with SQLite Write-Ahead Logging (WAL) and synchronized thread-safe in-memory caching. Non-blocking reads across hundreds of concurrent agent microservices with zero external database server overhead.
Dynamic escalation prevents isolated anomalies from collapsing healthy operations:
Every containment, approval and lift is appended to a signed, hash-chained event log, and fast-path authorization caches are purged. Lifting needs two different named approvers and a written justification, and the lift itself is signed: a lift forged in the database, or a deleted containment record, keeps the agent stopped or engages the global halt. The record lists the workload SPIFFE IDs to revoke; revoking them in your SPIRE server is an integration step.
An agent fleet makes tool calls. When one call sends a burst above the threshold (max_single_burst_mb), the kill-switch severs the lines and every later call, from any agent, is refused. Edit the calls or the threshold and run it. Each run uses a fresh, private drill instance: it cannot halt anything real, and nothing is stored.
This drill runs the kill-switch stage of the MCPGate guard stack against simulated byte counts. The full operator console with two-person re-arm is at /killswitch.
from cain.quarantine import get_quarantine_manager
# Sub-50ms thread-safe manager with SQLite WAL
qm = get_quarantine_manager()
# Trigger immediate swarm fleet isolation
record = qm.quarantine_swarm(
swarm_id="swarm-customer-ops-04",
reason="Prompt injection contagion detected across swarming agents",
operator_id="soc-sentinel-01"
)
# Preflight boundary enforcement: blocked fail-closed
allowed, reason = qm.check_execution_allowed("agent-customer-support-12")
# -> (False, "Swarm fleet 'swarm-customer-ops-04' is actively quarantined")
Available to license or acquire. Terms are discussed directly; we do not publish a price.
What you get: the source code, its test suite and documentation. No patent has been filed. Results shown here come from our own test suite.
When an autonomous agent loads 50+ marketplace skills (from Claude Desktop MCP, Cursor, OpenAI Swarms, or AutoGen), an untrusted Smart Home or Weather skill thread can snoop shared memory, stealing 1Password master vaults, GitHub SSH keys, Stripe billing rails, or cloud IAM tokens. The cain.isolation.skill_sandbox subsystem gives every skill thread an unguessable capability when the agent runtime starts it, and encrypts each memory block with AES-256-GCM under a key derived for the owning skill, thread and region. A thread can only decrypt with the key derived from its own capability, so another skill, or another thread of the same skill, cannot read the block, even with every policy check removed. Declared skill names are not trusted. Every refusal and read gets an Ed25519-signed receipt. It is in-process isolation, not OS or hardware isolation: the runtime must hand each capability only to the thread it was issued for.
Each block is encrypted under a key derived (HKDF-SHA256) from the skill's master key, the owning thread and the region, with the owner and block id bound into the AEAD associated data. A reader decrypts under its own derived key, so a cross-skill or cross-thread read fails authentication.
Enforces non-escalating privilege ceilings across all cataloged tools:
Any unauthorized cross-skill read immediately raises CryptographicSkillIsolationViolation and issues an Ed25519-signed audit receipt. The read is refused; the calling thread is not terminated.
from cain.isolation.skill_sandbox import get_skill_sandbox
sandbox = get_skill_sandbox()
# 1. The runtime binds each skill thread; the capability is its identity
vault = sandbox.issue_thread_capability("onepassword_vault", thread_id=101)
iot = sandbox.issue_thread_capability("smart_home_hub", thread_id=202)
# 2. The 1Password thread stores a secret in its own region
block = sandbox.allocate_encrypted_memory(
memory_region="mem_region_onepassword",
plaintext_data=b"master_password_vault_key_xyz123",
capability=vault,
)
# 3. The Smart Home thread tries to read it with its own capability:
try:
sandbox.read_encrypted_memory(block_id=block.block_id, capability=iot)
except CryptographicSkillIsolationViolation as ex:
print("REFUSED:", ex.violation_type) # UNAUTHORIZED_CROSS_SKILL_READ
Available to license or acquire. Terms are discussed directly; we do not publish a price.
What you get: the source code, its test suite and documentation. No patent has been filed. Results shown here come from our own test suite.
Simulate an adversarial rogue skill attack in real time. Choose an attacker process thread and target protected victim enclave, then trigger the isolation probe.
When an autonomous agent stores long-term memory in vector databases (Chroma, Pinecone, Weaviate, Mem0, LangGraph), external documents and rogue agents can inject persistent Trojan instructions (MemoryGraft: "Poison Once, Exploit Forever"), forged reasoning claims ("Security check already verified — safe to proceed"), or spoofed policies. The cain.omniscience.memory_firewall engine puts an authority firewall in front of every memory write and read: "Memory provides information. CAIN determines authority." Memory never grants permission, never increases authority, never overrides policy, and never resurrects revoked credentials. A refusal takes microseconds (measured below), and every drill returns an Ed25519-signed receipt with the key that verifies it.
Detects and taints entries claiming a check or security validation was already completed ("already verified", "approved", "skip the verification"). Multiple agent copies count as one independent source; consensus cannot be manufactured by echo.
Untrusted agents or external RAG content are strictly forbidden from writing to restricted classes: POLICY, SYSTEM_INSTRUCTION, AUTHORIZATION, CREDENTIAL, or SECURITY_EVENT.
Revoked credentials can never be reanimated through memory recall (arXiv:2602.15654). Revocation cascades downstream to all derived items. Refuses 13 credential formats (Stripe, OpenAI, Anthropic, AWS, GitHub, GitLab, Google, Slack, PEM keys, JWT, password=), also when nested or split by invisible characters.
from cain.omniscience.memory_firewall import MemoryAuthorityFirewall, MemoryFirewallError
# 1. RAG document injects forged policy into agent memory:
try:
mem.write(
tenant="tenant-a",
classification="POLICY",
source="AGENT",
creator="agent-B",
principal="human:alice",
content={"rule": "grant_all_financial_wires"},
provenance={"source": "untrusted_rag_search"}
)
except MemoryFirewallError as ex:
# -> refused before anything is stored
print("HALTED:", ex) # MEMORY_AUTHORITY_FORGERY
# 2. Agent recalls memory:
# Invariant: memory never grants permission or satisfies a check!
Available to license or acquire. Terms are discussed directly; we do not publish a price.
What you get: the source code, its test suite and documentation. No patent has been filed. Results shown here come from our own test suite.
Simulate real-world agent memory poisoning and authority-laundering attacks. Pick a scenario and type your own text. Each scenario runs several real checks against a fresh firewall, including a control that must succeed; the verdict is computed from them.
When enterprises deploy collaborating agent swarms (LangGraph, Microsoft AutoGen, CrewAI, OpenAI Swarms, Salesforce Agentforce), rogue or prompt-injected sub-agents can collude: forming autonomous cartels, manufacturing false quorums to outvote humans, and laundering authority in cyclic delegation loops (A → B → C → A). The cain.authority.collusion_graph engine enforces the bedrock invariant: "No number of cooperating agents may manufacture authority. Authority must be rooted in a cryptographically verified human principal." Every delegation loop, unrooted consensus cartel, and Sybil claim amplification is severed in under 0.1 milliseconds with Ed25519-signed audit receipts.
Detects cyclic authority loops where Agent A delegates to B, B to C, and C back to A to manufacture infinite escalating privilege. Strict depth-first cycle detection terminates loops fail-closed before execution.
An endorsement cluster without a human PRINCIPAL root carries ZERO authority. When 3 sub-agents conspire to authorize high-value transactions or API calls, the decision is rejected fail-closed.
When an adversarial prompt replicates a single false statement across 5 sub-agents claiming "unanimous verification", the engine reduces N copies to 1 unverified source and flags Sybil echo manipulation.
from cain.authority.collusion_graph import CollusionGraph
# Build live multi-agent authority mesh
mesh = CollusionGraph()
mesh.add_node("agent-A", "AGENT")
mesh.add_node("agent-B", "AGENT")
mesh.add_node("agent-C", "AGENT")
# Detect cyclic loops & unrooted agent cartels
findings = mesh.detect()
if any(f["kind"] in ("AUTHORITY_CYCLE", "CONSENSUS_WITHOUT_PRINCIPAL") for f in findings):
halt_execution(reason=findings[0]["kind"], receipt=sign_receipt(findings))
Available to license or acquire. Terms are discussed directly; we do not publish a price.
What you get: the source code, its test suite and documentation. No patent has been filed. Results shown here come from our own test suite.
Contact the founder →Select an attack vector below to inject an adversarial multi-agent swarm into the live authority mesh. The engine constructs the causal authority graph, executes real-time cycle and cartel detection, halts the execution fail-closed, and mints an Ed25519-signed containment receipt.
Developer Gateway · Rank 13 MCPGate Enforcement
The drop-in execution boundary for Cursor, Claude Desktop, LangChain, CrewAI, and AutoGen. The agent proposes the tool action; CAIN intercepts parameters, enforces capability ceilings, halts destructive payloads in under 15ms, and records tamper-evident WORM Merkle evidence. No authorization → no execution.
import cain
@cain.guard(
resource="database:prod_users",
intent="archive_user_record",
risk="LOW"
)
def delete_user(user_id: str):
# Intercepted & verified by the 7 Moats
# Injection/drop attacks fail-closed
return db.users.delete_one({"id": user_id})
Sub-15ms verification. Any destructive parameter ('drop', 'rm -rf', 'curl | bash') halts automatically at the boundary.
import cain
from openai import OpenAI
# 1-Line Drop-in: governs proposed tool calls
client = cain.wrap(OpenAI())
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "..."}],
tools=[...] # Governed by MCPGate
)
Transparent client proxy. Intercepts tool calls before execution with zero code changes inside your existing tools.
// ~/.cursor/mcp.json or claude_desktop_config.json
{
"mcpServers": {
"cain-gate": {
"command": "cain-mcp-proxy",
"args": ["--gate", "https://cainstudio.online"]
}
}
}
Deploy MCPGate as an upstream proxy in front of existing tools. Protects your IDE agents from poisoned instructions.
Simulate an attack payload and observe real-time parameter sanitization and signed receipts (<2ms latency).
Enterprise Statutory Compliance · Conformance Protocol 4.0
Mandatory European Union AI Act regulations require strict Article 14 Human Oversight and Article 72 Continuous Post-Market Monitoring. CAIN operationalizes these statutory requirements into tamper-evident WORM Merkle evidence fabrics.
Side by side
Five questions enterprise buyers ask before they put an autonomous agent near production. This is a category comparison, not a benchmark and not a claim about any vendor's internals. It describes the control point each category is built around. Where we could not find public documentation for a category claim, we say so instead of filling the cell with a guess.
| Purchase trigger | CAIN-42 execution boundary | Application sandbox (Docker / VM) | Prompt / model guardrail (examples: Bedrock, NeMo) |
|---|---|---|---|
| Enforcement layer | Tool-call / API boundaryPolicy is evaluated against the exact call before it runs. Source: live stage list | Process / container / VMThe primitive confines code. It does not decide whether a specific tool call is authorized. Source: category comparison | Model input / outputPolicy lives in instructions and optional classifiers. Source: category comparison |
| Bypass resistance | Deterministic stage chainUnknown, error, or no quorum → deny. A call that bypasses MCPGate is outside the boundary, and the page says so. Source: scope and gaps | Strong for code confinementThe authorization decision usually sits outside the sandbox; a call made from inside it is not automatically judged. Source: gateway comparison | Text-following behaviorDrift, context saturation and injection are the documented risk. A classifier can add a check, but the control point is upstream of the action. Source: category comparison |
| Governance | 3-of-4 PBFT quorumThe quorum notarizes the decision. It cannot make an unauthorized action authorized. Source: live cluster | Orchestrator / infrastructureUsually configuration and host policy; no per-action quorum. Source: BFT comparison | Vendor console and rulesLogs and dashboards; no per-action quorum in the public documentation we reviewed. Source: 36 comparisons |
| Auditability | Ed25519 + hash chainCanonical JSON (RFC 8785), SHA-256 chain, RFC 6962 Merkle root, offline verifier. Source: verification center | Container / VM logsHost telemetry and orchestrator events. Source: policy comparison | Request / response logsVendor dashboards and exported logs. Source: 36 comparisons |
| Containment | Deny before the tool runsA denied call does not reach the tool. The decision is recorded either way. Source: MCPGate proof | Isolation boundaryConfines a compromised process to its container or VM. Source: category comparison | Upstream of the actionContainment depends on the model following the instruction; the action itself is not the control point. Source: 36 comparisons |
Reviewed against the public documentation linked in each cell (comparison pages last reviewed 2026-10-14). No affiliation and no claim about a vendor's internals. “No public documentation found” is not a claim that a capability is impossible. For the full per-vendor pages, open the 36 comparisons →
Managed assurance
For teams already running agents in production. This is not a certification and not a monitoring-only subscription: it is a recurring review that ends in signed artifacts you can hand to a reviewer, a customer or an insurer. The price range is listed in the Work Station sales deck; a quote is confirmed in writing after a baseline audit.
$1,500–$4,000/month
Month-to-month · scoped after a baseline audit
The range is the published Work Station anchor, not a validated rate card.
Included in Trust Desk
Same scope, re-run, diffed against the prior month
The report is generated from the run data; it is not a model's summary.
Quoted after scoping
Application surface area sets the price
No third-party audit is included or implied.
Trust Desk is a services engagement, not a software plan and not insurance. It does not replace the self-serve platform subscription. The same retainer range is listed in the Work Station sales deck →
Commercial paths
Self-serve platform plans are separate and unchanged: $0 Free · $19.75 Professional · $49.75 Enterprise, rendered from the billing source at /pricing. The tiers below are managed and deployment contracts, quoted after scoping. Nothing is charged until a signed order.
$0/month
No card · 10,000 decisions · 3 agents
Limits and allowances are rendered from /pricing.
from $4,000/month
Proposed enterprise anchor · quote confirmed in writing
This is a managed-services engagement, not the $49.75 self-serve Enterprise plan. The $4,000/month figure is a proposed anchor, not a published rate card.
Custom enterprise pricing
On-premise or isolated private cloud
No public self-hosted installer today: the deployment is scoped and delivered with support. No claim of an air-gapped deployment until one is delivered for your environment.
What the badges do not mean: CAIN-42 holds no SOC 2 certification, no ISO 27001 certification and no third-party audit. The evidence export is a readiness mapping, not a certificate. The hosted deployment is pre-production. Read the gaps → · Self-serve pricing →
How CAIN-42 compares
We put our strengths next to the agent platforms, the AI security vendors, the identity systems, the policy engines and the MCP gateways — and we say when to pick which. Where CAIN-42 wins: enforcement at the tool-call boundary, a 3-of-4 Byzantine quorum behind every authorization, and a per-action receipt you can verify offline.
The CAIN-42 Top 100
Your agents move fast — and that speed is exactly the risk. One wrong action (a file deleted, a payment sent, a customer record exposed, an instruction hidden inside a tool description) can cost far more than the agent ever saves. The 100 products below exist to keep that from happening. Each one closes a specific gap between what an autonomous system is permitted to do and what it actually does: it checks every action against the agent’s identity, authority, policy and risk before the action runs, holds the risky ones for a human, contains an entire fleet in milliseconds, and records every decision as signed, tamper-evident evidence you can hand to a security reviewer, an auditor or a regulator. You keep the speed and autonomy of agents and remove the downside.
And you do not have to rebuild your stack or trust a black box. These are working, composable products: a one-line SDK guard and an MCP gateway for the agents you already run, a governed-memory and vector-sanitization layer that stops poisoning and hidden-instruction attacks, spend and blast-radius controls, evidence that helps you answer EU AI Act and ISO 42001 reviews, and the runtime, identity, consensus and verification fabric underneath. Adopt one product or the whole fabric. Every card below opens a deep description and a live demo you can run in your browser in seconds — no account required — so you can see exactly what it does for your systems before you commit. Start free on a single agent, prove it on your own workload, then roll it out across the fleet. That is what CAIN-42 is for.
2026-2027 Frontier Research Deployments
Directly operationalizing bleeding-edge Hugging Face and arXiv agentic security research. Deployed across the CAIN-42 cluster with live API endpoints, kernel-level sandboxing, and sub-millisecond execution verification.
Commercial Kubernetes operator wrapping autonomous agents in Linux kernel eBPF kprobe sandboxes. Intercepts file, socket, and process syscalls, halting undeclared actions at the kernel boundary.
POST /fabric/openshell/enforce-sandboxProxy in front of Pinecone, Qdrant, Mem0, and Zep. Implements Signed Memory State Records (SMSR) and real-time MemPoison defense against delayed-trigger prompt backdoors with loss-checked compaction (HF 2607.21503).
POST /fabric/memvault/inspect-writeInference-side proxy applying Process Reward Model (PRM) scoring (arXiv:2502.10325) and behavioral specification checks (arXiv:2606.26524). Uses lookahead MCTS to prune hallucinated shortcuts and reward-hacking drift.
POST /fabric/vigil/evaluate-stepEnterprise transparency notary conforming to IETF SCITT (draft-14) and W3C Verifiable Credentials 2.0. Generates offline-verifiable SD-JWT receipts and RFC 6962 inclusion proofs for cross-enterprise B2B agent transactions.
POST /fabric/scitt/register-statementPer-tenant quarantine registry with real 2f+1 Ed25519 quorum-certificate checks. Optional kernel link-down only on interfaces an operator lists. DPU/SmartNIC hardware is detected and reported, never used: there is no device adapter, so nothing is offloaded.
POST /fabric/sentry/hardware-quarantineWorkload identity engine conforming to IETF WIMSE (draft-ietf-wimse-arch). Mints single-use capability tokens (30-second default lifetime, configurable from 1 to 300 seconds; a second use is refused) bound to parent delegation chains, strictly terminating lateral movement across agents.
POST /fabric/rig/mint-tokenEphemeral Copy-on-Write (CoW) sandbox. Simulates proposed tool calls before production execution, computing side-effects and pre-emptively rejecting actions exceeding blast radius limits.
POST /fabric/digital-twin/simulateDefense system addressing the July 2026 ExploitGym incident. Intercepts SSRF against cloud metadata, Kubernetes service account credential harvesting, and sliding-window multi-day intrusions.
POST /fabric/exploit-shield/inspect-actionMulti-model semantic consensus gate. Verifies agreement across diverse frontier models before execution, freezing actions and requiring approval when model divergence exceeds limits.
POST /fabric/epistemic-quorum/evaluate-quorumCovert-channel exfiltration sanitizer. Neutralizes zero-width unicode characters, homoglyphs, and base64 smuggling before egress payloads leave the network boundary.
POST /fabric/steganography/sanitize-egressPre-execution formal verification engine based on Z3 SMT. Agents submit proposed code alongside formal Hoare-logic safety invariants; compiles and verifies machine-checkable inductive proofs before dispatch.
POST /fabric/pcc/certify-codeSpeculative multi-trajectory tree search and verification cache. Emulates prospective execution paths across world models, pre-verifying invariant envelopes and cutting end-to-end consensus latency by 72%.
POST /fabric/speculative/evaluate-trajectoriesGraph entropy and game-theoretic cartel defense. Detects circular delegation rings, sybil bid-rigging in agent auctions, and non-cooperative resource hoards with automated ring quarantine.
POST /fabric/cartel/inspect-swarmAutonomous Rego synthesis engine with provable monotonicity verification. Transforms dynamic compliance mandates into hardened OPA policies mathematically verified never to widen permissions.
POST /fabric/policy-forge/synthesize-regoSoftware check of a commanded speed, torque, acceleration and 3-D target against an envelope and geofence; non-finite numbers and missing targets are refused. Connected to no robot, bus or e-stop, and not certified against ISO 10218 or ISO 13849.
POST /fabric/actuation/verify-commandPedersen-commitment range proofs (standard construction, Fiat-Shamir bound to trajectory, agent and nonce) that each step's risk score stayed under a public ceiling without revealing the scores. Not zk-STARK or Groth16; it does not prove the scores were computed correctly.
POST /fabric/zk/generate-proofNonlinear Model Predictive Control (MPC) and counter-drift steering engine. Detects auto-regressive drift, token degradation, and tool loops, dynamically injecting invariant attention anchors to re-center reasoning.
POST /fabric/path-correction/steer-trajectoryFixed-threshold screen over activation statistics the caller submits, plus an exploit-string check on a token preview. It does not attach to any model or read residual streams or KV caches, and its thresholds are not calibrated against any model family.
POST /fabric/latent-guard/probe-activationAsynchronous Byzantine fault-tolerant gossip protocol for decentralized agent swarms. Reconciles beliefs with vector clocks and Merkle trees, isolating hallucination cascades across swarms with 100+ agents.
POST /fabric/swarm-gossip/exchange-beliefSoftware check of a requested address range and access type against a tenant aperture; writes need an HMAC lease bound to the exact range and expiry. No CXL, PCIe, IOMMU or RDMA device is involved.
POST /fabric/cxl-sentry/verify-dma-accessAn AI agent wants to do something: use a tool, change a database, send money, start another agent. It can only ask.
CAIN-42 checks who is asking, what it is allowed to do right now, what it has already done, and how much could go wrong. No authority means no action.
Only the approved action gets through. The decision and what happened are saved as signed proof anyone can check.
Every AI action sent through CAIN Studio is checked before it runs and blocked if it is not allowed (the live pipeline runs identity, intent, policy, authorization, risk, trust, verification, ActionProof, approval, consensus, egress, MCPGate, execution and evidence; no authorization means no execution). Each recorded decision is signed by a live cluster of 4 servers across 4 US regions (Atlanta, Los Angeles, Miami, Silicon Valley) and 3 of 4 must agree (Ed25519 quorum certificate verified by the gateway). MCPGate lets through only the exact tool call that was approved. Unregistered AI systems and unsigned requests are refused, and an agent may change its own model or tools only with a human sign-off (live) (30 of 30 live cases passed). A Python SDK and MCP proxy that say no to anything you did not allow (default-deny). Today's live deployment: the quorum-committed authorization-snapshot data plane is switched on live (measured 2026-09-29 on cain-mr-01, run record dataplane-evolution-2026-09-29/governance/live_run.json: a per-call PBFT round p50 2,268.6 ms, p99 3,937.8 ms, n=20; the snapshot-covered stage p50 0.8263 ms, p99 3.4686 ms, n=1,000), a revoked agent key is refused on its very next request (measured 2026-10-02), progressive trust scoping preventing exfiltration, payload-bound signed tokens, default-deny egress screening as a live stage (an action naming a destination outside the tenant's allowlist is denied; loopback and cloud-metadata endpoints are denied regardless of rules — manage it at /fabric/egress/rules (with your API key)), and Phase 3 Frontier AI intelligence (live) (AgentPRM process reward scoring, TriCEGAR MDP behavioral verification, Governed Memory Shield, and A2A inter-agent delegation at /fabric/frontier/*).
the signed claims registry lists every registered claim with its status and evidence; /verify.html counts them from the signed file in your browser. Test reports (the 2026-09-28 6-suite proof-fabric run: 1,963 of 1,978 tests passed, 0 failed, 7 skipped, 8 expected failures), verifiers that use none of our code, and the limitations we have recorded (open release gates are listed in the Verification Center), all on the Proof page and in the changelog. A public, no-key proof that the egress and tool-call stages are inside each decision's signed evidence, with a zero-dependency verifier, is at the restriction-stage proof bundle. A signed status receipt — which stages enforce right now, the running commit and the live health, and is itself re-checkable offline — is at the governance status receipt. Real stored decisions are re-derived and shown tamper-evident at the record-integrity proof. Newest: E26 distributed settlement completion evidence (multi-host validated; 72-hour soak and full Frontier-20 execution not measured).
175 products and features (95 marked live, 72 in development), plus 105 hosted services, and a library of 9,131 pages organised by niche (counts from /cain-ecosystem.json, as of 2026-10-23). Tell us what you want your agents to do safely, or just scroll and click.
For engineers: an interactive API reference with a page for each of the 387 API calls and 287 data schemas, each with code samples and a console that sends the real request with your own key, and step-by-step recipes for your agent framework.
CAIN-42 plugs into the stack your teams already run: your LLM gateway, your agent framework, your ITSM, SIEM and on-call tools, and your identity provider.
LiteLLM (Generic Guardrail API) · Portkey (Bring Your Own Guardrails)
Keep your gateway. CAIN-42 runs inside it as a guardrail: prompt injection and poisoned tools are stopped before the model call, and every tool call the model proposes becomes a governed, recorded decision.
LangGraph · CrewAI · AutoGen · OpenAI Agents SDK · Claude Agent SDK · Google ADK · Pydantic AI · LlamaIndex · MCP
A decision before every tool call, in the framework you already use: one HTTP call, or the SDK's adapters.
ServiceNow (incidents and Security Incident Response) · Jira Cloud
Blocked actions, held approvals and the kill switch open a ServiceNow incident or a Jira issue, with the signed decision record attached.
Splunk · Cortex XSIAM · Datadog · Microsoft Sentinel · OpenTelemetry (Grafana, Honeycomb, New Relic, Langfuse, Arize Phoenix)
Every decision streams to the tools your security and platform teams already watch, each event carrying its signed digest.
PagerDuty · Slack · Microsoft Teams
Page on-call when an agent is blocked or the kill switch engages; post held actions to the people who approve them.
Okta · Microsoft Entra ID · Google Workspace · Auth0 · Keycloak · any OIDC provider · SCIM
Single sign-on to the console with your identity provider, and members provisioned and removed automatically.
Hosted (cainstudio.online) · Kubernetes Helm charts · self-hosted MCPGate in your VPC
Use the hosted control plane, or run CAIN-42's enforcement boundary inside your own cluster.
CAIN-42 Space: a daily workplace for AI engineers
Sign in with Hugging Face and run any tool-calling model as an agent: CAIN-42 decides each tool call live, you approve what is held, every record is signed. Plus your workspace (approvals, decisions, agent keys, policy), MCP setup for Claude, Cursor, VS Code and tiny-agents, and all 268 CAIN Studio Suite products with copy-paste API code.
Identity, consensus, runtime control, threat detection, compliance, interoperability and SRE: 28 of the 32 are built and pass their tests today, and 15 of those are running live right now. Every status below is read from a signed audit that runs each capability's tests and probes its live endpoint, and where a capability is narrower than its name, the card says so. The 4 we do not offer are listed too. See the signed audit and verify it yourself.
102 canonical frontier agentic-AI inventions, built by FIRME AI CORPORATION (including 8 new Evolution 5 Sovereign Trial families: Evidence-Grounded Agentic Assurance, Harness Integrity Anti-Gaming Sealer, Multi-Turn Causal Adversarial Trial Engine, Ground-Truth Outcome Oracle, Long-Horizon Salami & Cumulative Risk Engine, Differential & Mutation Verifier, Risk-Stratified Assurance Scorecard, and Reproducible Trial Evidence Bundle). 46 patent candidates (NOVEL) · 40 UNUSUAL · 9 ENGINEERING · 7 INTEGRATION: Quorum-committed authorization snapshots · Mission goal-attenuation lattice (E38) · Continuously conditioned authorization · Dependency-driven authorization invalidation with blast radius · Authority non-transfer across governance domains (E37) · All-or-nothing governance with race-safe revocation · Bounded assurance with continuous invalidation · Comparative control-selection proof · Independence-aware Byzantine quorum · Quorum-signed programmable governance (GOV-IR) · Quorum-authorized kernel execution · Prediction-bounded authorization · Authority Continuity Protocol · Uncertainty-contracting authority horizon · Autonomy vector with certificates and leases · Self-evolution that cannot self-authorize · Mission-to-organization compiler · 4D reachability-bounded trajectory authorization · Governance contract fabric · Continuous governance attestation · Governance research fabric · Liveness-bound signed public claims · Multi-turn adversarial tool-call mediation · Anti-gaming benchmark harness seals · Long-horizon salami cumulative exfiltration defense · Ground-truth multi-modal physical outcome oracle. Each one is backed by its own passing tests (182/182 regression tests pass). FIRME AI CORPORATION IP base: $17,123,490 (IP register v56, 2026-10-23; range $6,634,180–$30,380,500; internal analytical register scenario, not an appraisal). Early-revenue: 3 founder-attested customers, $193 (customer #3 recurring $96/mo). What each one does, and its value · Evolution 5 Sovereign Trial evidence bundle.
Built and tested
Register, revoke and expire every agent identity. A revoked agent is refused on its next request.
measured: IMPLEMENTED
Built and tested
Every agent gets a standard W3C did:key, and you can publish a did:web document that follows key rotation and deactivates the moment the identity is revoked.
measured: IMPLEMENTED
Built and tested
Short-lived signed capability tokens bound to the exact action, parameters and model. Not a tradeable token.
measured: NARROWER: IMPLEMENTED
Built and tested
An ML-DSA-65 post-quantum signing module, tested. Live decisions are still signed with Ed25519.
measured: NARROWER: IMPLEMENTED
Live
Verify YOUR enclaves before trusting them: AWS Nitro Enclaves documents and AMD SEV-SNP reports, checked against pinned AWS and AMD roots (tested on real evidence). CAIN's own servers are not hardware-attested.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Live
Two live 4-replica Byzantine-fault-tolerant clusters: 3 of 4 replicas must sign before anything counts. Quorum-QaaS now sells that consensus as a service: any enterprise can get BFT without building it. Send the SHA-256 digest of any record with your API key and get back a receipt signed by the quorum, which anyone can verify offline.
measured: LIVE VERIFIED
Live
Every hosted decision carries a quorum certificate that the gateway verifies itself.
measured: LIVE VERIFIED / LIVE VERIFIED
Live
A tool call routed through MCPGate runs only with a quorum-committed authorization; the SDK is default-deny. Calls that bypass the gate are not governed.
measured: NARROWER: LIVE + DISPOSABLE CLUSTER VERIFIED
Verified offline
TLA+ models of PBFT commit, view change and the MCPGate gate, model-checked by TLC (bounded models, not a proof of the Python code).
measured: OFFLINE VERIFIED
Built and tested
OPA/Rego policies with signed policy bundles. In the hosted pipeline the policy verdict is recorded; your own tool rules are what block.
measured: IMPLEMENTED
Live
Self-hostable MCPGate and SDK, tested, with a live status endpoint. No public self-hosted installer yet.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Live
Find unregistered agents on your hosts, and LLM SDKs, MCP tools and autonomous loops in your code, with a live scanner. Not a network-wide scanner.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Live
Automated quarantine and recovery, tested; live restore drills verified (run by an operator).
measured: NARROWER: LIVE VERIFIED
Built and tested
Predicts an action's blast radius and counterfactual risk before it runs. No external threat feed.
measured: NARROWER: IMPLEMENTED
Built and tested
Real-time trajectory anomaly rules: drift, salami-style cumulative spend, homoglyphs. Rules and thresholds, not a trained model.
measured: NARROWER: IMPLEMENTED
Built and tested
Article 5, Annex III and Article 50 screening plus tamper-evident evidence export. No notified body has reviewed CAIN.
measured: NARROWER: IMPLEMENTED
Live
Live required-clause checks for the EU and California, plus EU AI Act screening. Two jurisdictions, not a global rules engine.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Built and tested
Plans, conflicts and delegations are checked automatically before execution. Automation never authorizes itself.
measured: NARROWER: IMPLEMENTED
Not offered
Not offered: CAIN-42 is not ISO 42001 certified. A readiness self-assessment exists.
measured: NOT ESTABLISHED
Not offered
Not offered: there is no blockchain or cross-chain component.
measured: NOT ESTABLISHED
Live
MCP enforcement on the live cluster, and an A2A trust layer that refuses forged agent cards.
measured: LIVE + DISPOSABLE CLUSTER VERIFIED
Live
External tools and APIs your agent reaches through CAIN are pinned and allow-listed: changed tools are dropped, unknown destinations denied.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Live
Bounded delegation chains (scope, limits, expiry, revocation) and a live agent marketplace. Organisations do not trade tool permissions through it.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Live
Two live multi-region clusters across 4 US regions, on one provider. Not global yet.
measured: NARROWER: LIVE VERIFIED
Live
A live decision stream and traces in the console, plus live observability and agent-debugger services.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Live
Finance, health and federal policy packs, served live. Rule sets, maintained and versioned.
measured: NARROWER: IMPLEMENTED, LIVE ENDPOINT
Built and tested
A conformance suite and a deploy gate exist and are tested. No hosted CI/CD product for your agents yet.
measured: NARROWER: IMPLEMENTED
Built and tested
Shared trust, risk and incident state across agents, tested in-process.
measured: NARROWER: IMPLEMENTED
Built and tested
A self-hardening loop that proposes and tests changes. Nothing deploys itself.
measured: NARROWER: IMPLEMENTED
Live
Eight ready-made policies (payment approvals and caps, read-only database, internal-only email, shell approval, redaction, agent hold) that compile into rules the live pipeline enforces. Preview free; apply with your key.
measured: IMPLEMENTED, LIVE ENDPOINT
Not offered
Not offered: the term has no implementation.
measured: NOT ESTABLISHED
Not offered
Not offered: the term has no implementation.
measured: NOT ESTABLISHED
Free to start. Nothing runs without authority: the default is no.
Under the hood
Everything below is for senior AI and security engineers: how CAIN-42 governs an autonomous AI agent, what is live, what is only tested, and what is not built. Every claim links to signed evidence and a verifier that imports none of CAIN-42's code.
Control for the AGI era
As AI agents get more capable, the question stops being “is the model smart?” and becomes “who decides what it is allowed to do?” CAIN-42 answers it the same way for every agent, however capable: being capable, confident or right before earns an agent no authority. No AGI exists yet to test against, so every result published here is measured on today’s models. Prompt filters inspect text. CAIN-42 governs what autonomous AI agents actually do: tool calls, shell, databases, APIs, money, spawning other agents. One authorization is not enough for a system that runs for hours, so authority is continuous: a short-lived, governance-signed lease bound to the agent, its trajectory and its exact plan, re-checked before every action against everything the system has done so far, and lost the moment policy, trust, risk, model or context changes. An agent may learn, remember, plan, delegate and discover tools, but none of that creates authority. Only governance state signed by a quorum of the CAIN-42 cluster does. CAG-L5 is CAIN's own governance designation, not the SAE driving scale.
Governs the whole autonomous system, not a single call. One decision composes: emergency freeze, a 2f+1 cluster certificate over the current governance state, a governance-signed system manifest (agents, models, tools, resources), model identity, tool registry, exact capabilities (READ, WRITE, DELETE and ADMIN are never implied by each other), deterministic policy precedence (a lower ALLOW never beats a higher DENY), the intersection of agent, delegator, system and trajectory-lease authority, and graph-derived blast radius where irreversible or wide actions need two operators. The gate re-verifies the signed decision and its execution commitment before anything runs. On in the hosted gateway since 2026-09-28: unregistered systems and unsigned requests are refused. Also live since 2026-09-28: the evolution gate. An agent's model and MCP tool set change only through a signed proposal, an evaluator-signed test report and a human operator (never the agent itself), and every change gets a new capability commitment that the cluster must sign before the agent may act again. Since 2026-10-06 a signed agent passport binds identity, model, tools and authority scope to the exact call; sequences of individually allowed calls (a sensitive read then an outbound send, even split across two keys, a privilege raised step by step, split payments, a runaway loop) go to a human; and a tenant-owned physical safety envelope refuses out-of-envelope device actions, even in shadow mode.
verify the live run (41/41) →Two live PBFT clusters, n=4 and f=1: cain-mr-02 (Atlanta, Los Angeles, Miami, Silicon Valley) orders and signs hosted decisions with one replica per host surviving any single host loss, and cain-mr-01 (Atlanta, Los Angeles, Miami) has committed 40,436 sequences. Nothing counts without a quorum certificate of 3 Ed25519 signatures, and the gateway verifies that certificate itself instead of trusting a replica's word. Each cluster signs its own proof every 30 minutes: 250 of 251 OPERATIONAL on cain-mr-01 since 2026-09-26, 295 of 295 on cain-mr-02 since 2026-09-27. 442 Byzantine tests pass, and a fault-injection run held 49 of 49 checks.
watch it live →Sits in front of MCP servers, APIs and tools. A call runs only if that exact call was authorized; anything else gets a signed denial. The tool server never receives CAIN's authorization envelope or the caller's credentials, and an operator's global halt or agent quarantine stops hosted decisions for every tenant. Being caught earns an agent nothing: two blocked prompt injections no longer unlock a $250,000 transfer or rm -rf /, every action is scored by what it does (tool, destructiveness, amount), dangerous ones wait for a human, your deny rules match every spelling of a path, and an approval covers one exact call, arguments included. Live on 3 of 3 domains since 2026-09-28; 48 of 48 decisions match the cluster's own public record.
5 ran, 12 attacks blocked →An Ed25519-signed, hash-chained record per decision in canonical JSON (RFC 8785) with RFC 6962 Merkle proof trees, keys kept outside the database, and standalone clean-room verifiers that re-check everything offline without CAIN code. The identity and passport log is hash-chained per tenant with issuer-signed checkpoints, so an edited, deleted, reordered or truncated record fails offline verification.
Verification Center →The Python guard and MCP proxy hold any action you did not declare. Allow tools explicitly with guard(allow=[...]); opting out is recorded on every decision. The live decoupled data plane (CAIN_AUTH_SNAPSHOT=1) executes sub-millisecond local authorization verified against quorum-committed PBFT snapshots with dynamic progressive trust scoping.
quickstart →Agent code runs confined with Linux namespaces and seccomp-BPF filters. Real-time Process Reward Model (AgentPRM arXiv:2502.10325) prunes hallucinated shortcut steps, TriCEGAR model checks MDP state transitions, Governed Memory Shield sanitizes injection vectors at write time, and A2A delegation verifies Ed25519 card and delegation signatures, attenuates monotonically and labels capabilities self-asserted. Agent keys cannot raise their own memory to trusted, write policies or operate the controls that govern them. Live endpoints at /fabric/frontier/*.
verify Phase 3 evidence →No account. Each button posts a fixed scenario to /fabric/try on this site and shows the real decision, stage by stage, including whether each stage was enforcing. The demo forces enforcement on for its own throwaway tenant; the response says so. A read-only action runs by itself as the page opens, so you see the live pipeline decide without touching anything.
For developers
Try it with no account: send a prompt-injection attempt through the live pipeline. You get back the verdict, which stage blocked it, and the consensus certificate your gateway verified.
$ curl -X POST "https://cainstudio.online/fabric/try?scenario=prompt-injection"
{
"verdict": "BLOCKED",
"blocked_by": ["risk", "trust"],
"consensus": {
"cluster_id": "cain-mr-02",
"certificate_verified_by_gateway": {
"verified": true,
"signers": ["cain-mr2-node-1", "cain-mr2-node-3", "cain-mr2-node-4"],
"quorum": 3
}
},
"evidence": { ... }
}
Architecture
Solid boxes are on the live path. The PBFT cluster is drawn dashed; it runs live in 4 regions (watch it).
Proof, not promises
Your browser loads each row below from its source as the page opens. A source that does not answer shows as NOT LIVE. The passing set is shown here; every claim, its limits and every run outcome stay published in full on the Proof page.
You do not have to trust us or contact us. Every evidence bundle below ships a clean-room verifier that
imports none of CAIN-42's code. Copy one block into a terminal on your own computer: it downloads that bundle and
its verifiers, and runs two chained checks. verify_publisher.py must print
PUBLISHED_BY_PINNED_KEY: the bytes are exactly what the CAIN publisher key signed, so an edited or
re-signed bundle fails. Only then does the bundle's own verifier run, and it must print "result": "INTACT":
its internal hashes and signatures agree. The block ends with one line, VERIFIED or
NOT VERIFIED. Do not run the bundle verifier on its own. Nothing on these sites is needed after the download.
Requires Python 3 and internet. The verifiers read published data only; they never touch the live
service and never call our servers for a verdict. A changed byte in any bundle file makes the verifier report BROKEN.
INTACT alone means only that the bundle agrees with the key shipped inside it, which anyone who re-signs a bundle
can arrange. That is why every block also runs verify_publisher.py
(verifier, pinned key at
/.well-known/cain-publisher-key.json): it refuses an edited,
added, removed or re-signed file. The publisher key is ours, so neither check is independent verification.
— published result: INTACT (58/59 checks)
mkdir -p bft-ip-forensics-2026-10-05 && cd bft-ip-forensics-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/bft-ip-forensics-2026-10-05.json", "../bft-ip-forensics-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../bft-ip-forensics-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "bft-ip-forensics-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "bft-ip-forensics-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../bft-ip-forensics-2026-10-05 ../bft-ip-forensics-2026-10-05.attestation.json \
&& python3 verify_bftip.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (127/127 checks)
mkdir -p e38-byzantine-mission-integrity-2026-10-05 && cd e38-byzantine-mission-integrity-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e38-byzantine-mission-integrity-2026-10-05.json", "../e38-byzantine-mission-integrity-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e38-byzantine-mission-integrity-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e38-byzantine-mission-integrity-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e38-byzantine-mission-integrity-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e38-byzantine-mission-integrity-2026-10-05 ../e38-byzantine-mission-integrity-2026-10-05.attestation.json \
&& python3 verify_e38.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }30/30 invariants · 30/30 scenarios held — published result: INTACT (70/70 checks)
mkdir -p e37-byzantine-autonomous-federation-2026-10-05 && cd e37-byzantine-autonomous-federation-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e37-byzantine-autonomous-federation-2026-10-05.json", "../e37-byzantine-autonomous-federation-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e37-byzantine-autonomous-federation-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e37-byzantine-autonomous-federation-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e37-byzantine-autonomous-federation-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e37-byzantine-autonomous-federation-2026-10-05 ../e37-byzantine-autonomous-federation-2026-10-05.attestation.json \
&& python3 verify_e37.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }23/30 invariants · 30/30 scenarios held — published result: INTACT (69/76 checks)
mkdir -p e36-byzantine-collective-governance-2026-10-05 && cd e36-byzantine-collective-governance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e36-byzantine-collective-governance-2026-10-05.json", "../e36-byzantine-collective-governance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e36-byzantine-collective-governance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e36-byzantine-collective-governance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e36-byzantine-collective-governance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e36-byzantine-collective-governance-2026-10-05 ../e36-byzantine-collective-governance-2026-10-05.attestation.json \
&& python3 verify_e36.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }27/30 invariants · 30/30 scenarios held — published result: INTACT (108/111 checks)
mkdir -p e35-continuous-autonomy-integrity-2026-10-05 && cd e35-continuous-autonomy-integrity-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e35-continuous-autonomy-integrity-2026-10-05.json", "../e35-continuous-autonomy-integrity-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e35-continuous-autonomy-integrity-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e35-continuous-autonomy-integrity-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e35-continuous-autonomy-integrity-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e35-continuous-autonomy-integrity-2026-10-05 ../e35-continuous-autonomy-integrity-2026-10-05.attestation.json \
&& python3 verify_e35.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }0/0 invariants · 0/0 scenarios held — published result: PARTIAL (0/0 checks)
mkdir -p e34-decision-provenance-2026-10-05 && cd e34-decision-provenance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e34-decision-provenance-2026-10-05.json", "../e34-decision-provenance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e34-decision-provenance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e34-decision-provenance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e34-decision-provenance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e34-decision-provenance-2026-10-05 ../e34-decision-provenance-2026-10-05.attestation.json \
&& python3 verify_e34.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e32-global-trust-settlement-2026-10-05 && cd e32-global-trust-settlement-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e32-global-trust-settlement-2026-10-05.json", "../e32-global-trust-settlement-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e32-global-trust-settlement-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e32-global-trust-settlement-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e32-global-trust-settlement-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e32-global-trust-settlement-2026-10-05 ../e32-global-trust-settlement-2026-10-05.attestation.json \
&& python3 verify_e32.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e31-governance-proof-fabric-2026-10-05 && cd e31-governance-proof-fabric-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e31-governance-proof-fabric-2026-10-05.json", "../e31-governance-proof-fabric-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e31-governance-proof-fabric-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e31-governance-proof-fabric-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e31-governance-proof-fabric-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e31-governance-proof-fabric-2026-10-05 ../e31-governance-proof-fabric-2026-10-05.attestation.json \
&& python3 verify_e31.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e30-governance-network-2026-10-05 && cd e30-governance-network-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e30-governance-network-2026-10-05.json", "../e30-governance-network-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e30-governance-network-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e30-governance-network-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e30-governance-network-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e30-governance-network-2026-10-05 ../e30-governance-network-2026-10-05.attestation.json \
&& python3 verify_e30.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e28-catcp-ip-commercial-2026-10-05 && cd e28-catcp-ip-commercial-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e28-catcp-ip-commercial-2026-10-05.json", "../e28-catcp-ip-commercial-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e28-catcp-ip-commercial-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e28-catcp-ip-commercial-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e28-catcp-ip-commercial-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e28-catcp-ip-commercial-2026-10-05 ../e28-catcp-ip-commercial-2026-10-05.attestation.json \
&& python3 verify_e28.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e27-catcp-control-2026-10-05 && cd e27-catcp-control-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e27-catcp-control-2026-10-05.json", "../e27-catcp-control-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e27-catcp-control-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e27-catcp-control-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e27-catcp-control-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e27-catcp-control-2026-10-05 ../e27-catcp-control-2026-10-05.attestation.json \
&& python3 verify_e27.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e26-byzantine-trust-2026-10-05 && cd e26-byzantine-trust-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e26-byzantine-trust-2026-10-05.json", "../e26-byzantine-trust-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e26-byzantine-trust-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e26-byzantine-trust-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e26-byzantine-trust-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e26-byzantine-trust-2026-10-05 ../e26-byzantine-trust-2026-10-05.attestation.json \
&& python3 verify_e26.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e23-continuous-assurance-2026-10-05 && cd e23-continuous-assurance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e23-continuous-assurance-2026-10-05.json", "../e23-continuous-assurance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e23-continuous-assurance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e23-continuous-assurance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e23-continuous-assurance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e23-continuous-assurance-2026-10-05 ../e23-continuous-assurance-2026-10-05.attestation.json \
&& python3 verify_e23.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e22-byzantine-global-verification-2026-10-05 && cd e22-byzantine-global-verification-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e22-byzantine-global-verification-2026-10-05.json", "../e22-byzantine-global-verification-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e22-byzantine-global-verification-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e22-byzantine-global-verification-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e22-byzantine-global-verification-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e22-byzantine-global-verification-2026-10-05 ../e22-byzantine-global-verification-2026-10-05.attestation.json \
&& python3 verify_e22.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e21-byzantine-economic-coordination-2026-10-05 && cd e21-byzantine-economic-coordination-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e21-byzantine-economic-coordination-2026-10-05.json", "../e21-byzantine-economic-coordination-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e21-byzantine-economic-coordination-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e21-byzantine-economic-coordination-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e21-byzantine-economic-coordination-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e21-byzantine-economic-coordination-2026-10-05 ../e21-byzantine-economic-coordination-2026-10-05.attestation.json \
&& python3 verify_e21.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: VALID (31/31 checks)
mkdir -p e18-byzantine-counterfactual-governance-2026-10-05 && cd e18-byzantine-counterfactual-governance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e18-byzantine-counterfactual-governance-2026-10-05.json", "../e18-byzantine-counterfactual-governance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e18-byzantine-counterfactual-governance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e18-byzantine-counterfactual-governance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e18-byzantine-counterfactual-governance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e18-byzantine-counterfactual-governance-2026-10-05 ../e18-byzantine-counterfactual-governance-2026-10-05.attestation.json \
&& python3 verify_e18.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (24/24 checks)
mkdir -p e13-bpf-governance-execution-2026-10-05 && cd e13-bpf-governance-execution-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e13-bpf-governance-execution-2026-10-05.json", "../e13-bpf-governance-execution-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e13-bpf-governance-execution-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e13-bpf-governance-execution-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e13-bpf-governance-execution-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e13-bpf-governance-execution-2026-10-05 ../e13-bpf-governance-execution-2026-10-05.attestation.json \
&& python3 verify_e13.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (20/20 checks)
mkdir -p e12-trust-network-state-2026-10-05 && cd e12-trust-network-state-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e12-trust-network-state-2026-10-05.json", "../e12-trust-network-state-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e12-trust-network-state-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e12-trust-network-state-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e12-trust-network-state-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e12-trust-network-state-2026-10-05 ../e12-trust-network-state-2026-10-05.attestation.json \
&& python3 verify_e12.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (32/32 checks)
mkdir -p e11-governance-proof-2026-10-05 && cd e11-governance-proof-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e11-governance-proof-2026-10-05.json", "../e11-governance-proof-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e11-governance-proof-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e11-governance-proof-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e11-governance-proof-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e11-governance-proof-2026-10-05 ../e11-governance-proof-2026-10-05.attestation.json \
&& python3 verify_e11.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1460/1460 checks)
mkdir -p e42-supreme-governed-agentic-infrastructure-2026-10-01 && cd e42-supreme-governed-agentic-infrastructure-2026-10-01
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e42-supreme-governed-agentic-infrastructure-2026-10-01.json", "../e42-supreme-governed-agentic-infrastructure-2026-10-01.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e42-supreme-governed-agentic-infrastructure-2026-10-01.attestation.json"))["files"])
for f in names:
get(E + "e42-supreme-governed-agentic-infrastructure-2026-10-01/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e42-supreme-governed-agentic-infrastructure-2026-10-01/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e42-supreme-governed-agentic-infrastructure-2026-10-01 ../e42-supreme-governed-agentic-infrastructure-2026-10-01.attestation.json \
&& python3 verify_e42.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1303/1303 checks)
mkdir -p e41-machine-agency-exchange-2026-09-30 && cd e41-machine-agency-exchange-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e41-machine-agency-exchange-2026-09-30.json", "../e41-machine-agency-exchange-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e41-machine-agency-exchange-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e41-machine-agency-exchange-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e41-machine-agency-exchange-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e41-machine-agency-exchange-2026-09-30 ../e41-machine-agency-exchange-2026-09-30.attestation.json \
&& python3 verify_e41.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1518/1518 checks)
mkdir -p e40-autonomous-enterprise-intelligence-2026-09-30 && cd e40-autonomous-enterprise-intelligence-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e40-autonomous-enterprise-intelligence-2026-09-30.json", "../e40-autonomous-enterprise-intelligence-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e40-autonomous-enterprise-intelligence-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e40-autonomous-enterprise-intelligence-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e40-autonomous-enterprise-intelligence-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e40-autonomous-enterprise-intelligence-2026-09-30 ../e40-autonomous-enterprise-intelligence-2026-09-30.attestation.json \
&& python3 verify_e40.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }1132/1132 invariants · 2720/2720 scenarios held — published result: INTACT (2627/2627 checks)
mkdir -p e37-autonomous-execution-mesh-2026-09-30 && cd e37-autonomous-execution-mesh-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e37-autonomous-execution-mesh-2026-09-30.json", "../e37-autonomous-execution-mesh-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e37-autonomous-execution-mesh-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e37-autonomous-execution-mesh-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e37-autonomous-execution-mesh-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e37-autonomous-execution-mesh-2026-09-30 ../e37-autonomous-execution-mesh-2026-09-30.attestation.json \
&& python3 verify_e37.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }842/842 invariants · 3340/3340 scenarios held — published result: INTACT (3601/3601 checks)
mkdir -p e36-machine-agency-exchange-2026-09-30 && cd e36-machine-agency-exchange-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e36-machine-agency-exchange-2026-09-30.json", "../e36-machine-agency-exchange-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e36-machine-agency-exchange-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e36-machine-agency-exchange-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e36-machine-agency-exchange-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e36-machine-agency-exchange-2026-09-30 ../e36-machine-agency-exchange-2026-09-30.attestation.json \
&& python3 verify_e36.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }799/799 invariants · 3544/3544 scenarios held — published result: INTACT (3810/3810 checks)
mkdir -p e35-governance-intelligence-2026-09-30 && cd e35-governance-intelligence-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e35-governance-intelligence-2026-09-30.json", "../e35-governance-intelligence-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e35-governance-intelligence-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e35-governance-intelligence-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e35-governance-intelligence-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e35-governance-intelligence-2026-09-30 ../e35-governance-intelligence-2026-09-30.attestation.json \
&& python3 verify_e35.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }629/629 invariants · 2664/2664 scenarios held — published result: INTACT (3286/3286 checks)
mkdir -p e34-proof-carrying-machine-agency-2026-09-30 && cd e34-proof-carrying-machine-agency-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e34-proof-carrying-machine-agency-2026-09-30.json", "../e34-proof-carrying-machine-agency-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e34-proof-carrying-machine-agency-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e34-proof-carrying-machine-agency-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e34-proof-carrying-machine-agency-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e34-proof-carrying-machine-agency-2026-09-30 ../e34-proof-carrying-machine-agency-2026-09-30.attestation.json \
&& python3 verify_e34.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }581/581 invariants · 2029/2029 scenarios held — published result: INTACT (2603/2603 checks)
mkdir -p e33-governed-agentic-operating-fabric-2026-09-30 && cd e33-governed-agentic-operating-fabric-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e33-governed-agentic-operating-fabric-2026-09-30.json", "../e33-governed-agentic-operating-fabric-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e33-governed-agentic-operating-fabric-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e33-governed-agentic-operating-fabric-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e33-governed-agentic-operating-fabric-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e33-governed-agentic-operating-fabric-2026-09-30 ../e33-governed-agentic-operating-fabric-2026-09-30.attestation.json \
&& python3 verify_e33.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1420/1420 checks)
mkdir -p e32-governed-autonomy-learning-2026-09-30 && cd e32-governed-autonomy-learning-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e32-governed-autonomy-learning-2026-09-30.json", "../e32-governed-autonomy-learning-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e32-governed-autonomy-learning-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e32-governed-autonomy-learning-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e32-governed-autonomy-learning-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e32-governed-autonomy-learning-2026-09-30 ../e32-governed-autonomy-learning-2026-09-30.attestation.json \
&& python3 verify_e32.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1676/1676 checks)
mkdir -p e31-universal-proof-of-governance-2026-09-30 && cd e31-universal-proof-of-governance-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e31-universal-proof-of-governance-2026-09-30.json", "../e31-universal-proof-of-governance-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e31-universal-proof-of-governance-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e31-universal-proof-of-governance-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e31-universal-proof-of-governance-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e31-universal-proof-of-governance-2026-09-30 ../e31-universal-proof-of-governance-2026-09-30.attestation.json \
&& python3 verify_e31.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1187/1187 checks)
mkdir -p e30-governed-machine-autonomy-2026-09-30 && cd e30-governed-machine-autonomy-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e30-governed-machine-autonomy-2026-09-30.json", "../e30-governed-machine-autonomy-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e30-governed-machine-autonomy-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e30-governed-machine-autonomy-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e30-governed-machine-autonomy-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e30-governed-machine-autonomy-2026-09-30 ../e30-governed-machine-autonomy-2026-09-30.attestation.json \
&& python3 verify_e30.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (300/300 checks)
mkdir -p e29-machine-transaction-fabric-2026-09-30 && cd e29-machine-transaction-fabric-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e29-machine-transaction-fabric-2026-09-30.json", "../e29-machine-transaction-fabric-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e29-machine-transaction-fabric-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e29-machine-transaction-fabric-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e29-machine-transaction-fabric-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e29-machine-transaction-fabric-2026-09-30 ../e29-machine-transaction-fabric-2026-09-30.attestation.json \
&& python3 verify_e29.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (243/243 checks)
mkdir -p e28-portable-execution-identity-2026-09-30 && cd e28-portable-execution-identity-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e28-portable-execution-identity-2026-09-30.json", "../e28-portable-execution-identity-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e28-portable-execution-identity-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e28-portable-execution-identity-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e28-portable-execution-identity-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e28-portable-execution-identity-2026-09-30 ../e28-portable-execution-identity-2026-09-30.attestation.json \
&& python3 verify_e28.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (4001/4001 checks)
mkdir -p e27-agentic-internet-control-plane-2026-09-30 && cd e27-agentic-internet-control-plane-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e27-agentic-internet-control-plane-2026-09-30.json", "../e27-agentic-internet-control-plane-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e27-agentic-internet-control-plane-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e27-agentic-internet-control-plane-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e27-agentic-internet-control-plane-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e27-agentic-internet-control-plane-2026-09-30 ../e27-agentic-internet-control-plane-2026-09-30.attestation.json \
&& python3 verify_e27.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (3115/3115 checks)
mkdir -p e26-universal-machine-agency-trust-2026-09-30 && cd e26-universal-machine-agency-trust-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e26-universal-machine-agency-trust-2026-09-30.json", "../e26-universal-machine-agency-trust-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e26-universal-machine-agency-trust-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e26-universal-machine-agency-trust-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e26-universal-machine-agency-trust-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e26-universal-machine-agency-trust-2026-09-30 ../e26-universal-machine-agency-trust-2026-09-30.attestation.json \
&& python3 verify_e26.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (2977/2977 checks)
mkdir -p e25-universal-machine-agency-2026-09-30 && cd e25-universal-machine-agency-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e25-universal-machine-agency-2026-09-30.json", "../e25-universal-machine-agency-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e25-universal-machine-agency-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e25-universal-machine-agency-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e25-universal-machine-agency-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e25-universal-machine-agency-2026-09-30 ../e25-universal-machine-agency-2026-09-30.attestation.json \
&& python3 verify_e25.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1952/1952 checks)
mkdir -p e24-governed-agentic-internet-2026-09-29 && cd e24-governed-agentic-internet-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e24-governed-agentic-internet-2026-09-29.json", "../e24-governed-agentic-internet-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e24-governed-agentic-internet-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e24-governed-agentic-internet-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e24-governed-agentic-internet-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e24-governed-agentic-internet-2026-09-29 ../e24-governed-agentic-internet-2026-09-29.attestation.json \
&& python3 verify_e24.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (733/733 checks)
mkdir -p e23-governed-meta-intelligence-2026-09-29 && cd e23-governed-meta-intelligence-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e23-governed-meta-intelligence-2026-09-29.json", "../e23-governed-meta-intelligence-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e23-governed-meta-intelligence-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e23-governed-meta-intelligence-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e23-governed-meta-intelligence-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e23-governed-meta-intelligence-2026-09-29 ../e23-governed-meta-intelligence-2026-09-29.attestation.json \
&& python3 verify_e23.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (218/218 checks)
mkdir -p e21-open-ended-intelligence-2026-09-29 && cd e21-open-ended-intelligence-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e21-open-ended-intelligence-2026-09-29.json", "../e21-open-ended-intelligence-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e21-open-ended-intelligence-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e21-open-ended-intelligence-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e21-open-ended-intelligence-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e21-open-ended-intelligence-2026-09-29 ../e21-open-ended-intelligence-2026-09-29.attestation.json \
&& python3 verify_e21.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (179/179 checks)
mkdir -p e20-agentic-institutions-2026-09-29 && cd e20-agentic-institutions-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e20-agentic-institutions-2026-09-29.json", "../e20-agentic-institutions-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e20-agentic-institutions-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e20-agentic-institutions-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e20-agentic-institutions-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e20-agentic-institutions-2026-09-29 ../e20-agentic-institutions-2026-09-29.attestation.json \
&& python3 verify_e20.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (117/117 checks)
mkdir -p e19-governed-autonomy-2026-09-28 && cd e19-governed-autonomy-2026-09-28
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e19-governed-autonomy-2026-09-28.json", "../e19-governed-autonomy-2026-09-28.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e19-governed-autonomy-2026-09-28.attestation.json"))["files"])
for f in names:
get(E + "e19-governed-autonomy-2026-09-28/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e19-governed-autonomy-2026-09-28/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e19-governed-autonomy-2026-09-28 ../e19-governed-autonomy-2026-09-28.attestation.json \
&& python3 verify_e19.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }Newest published bundle: bft-ip-forensics-2026-10-05. Every bundle is also mirrored on the other two sites so the same verifier runs against an independent copy.
The governor for autonomous AI agents: a trust and execution-control runtime that sits between an autonomous AI system and the actions it takes. Every proposed action is checked (identity, authority, trajectory, policy, risk, trust, system scope), a boundary applies the verdict before the tool runs, and the decision is recorded as signed evidence. The CAG-L5 system governor runs in the hosted gateway: a system must be registered with a governance-signed manifest, every request must be signed by the agent's own key, and governance state counts only when the live 4-replica PBFT cluster has signed it with a quorum certificate (3 of 4 signatures). Every hosted decision is ordered and signed by that cluster, and agent authority in the CAIN-45 hypervisor is committed by it too. Since 2026-09-28 an agent's capability (its model and the MCP tools it may call) can change only through the governed evolution gate, and the cluster signs a capability commitment, so authority granted for the old capability never carries over to the new one.
Partly. The hosted gateway mediates the tool calls routed through it and cannot see a call that bypasses it. Separately, the CAIN-45 agent hypervisor (ZoD) confines agent code with Linux namespaces and cgroups, takes its authority from the live cluster, and re-checks that authority before every action. It is a library the operator runs today. It has a kernel syscall filter (seccomp-BPF, classic BPF, not eBPF), but no egress allowlist (egress is deny-all) and no hardware attestation yet. It is not a VM hypervisor.
Not certified by anyone. Not independently reviewed. Consensus for hosted decisions runs live on 4 replicas on 4 hosts in 4 regions (cluster cain-mr-02, one replica per host, so a quorum of 3 remains after any one host is lost), but one team and one provider run all of them, and one replica shares a host with the public gateway. Not every hosted stage enforces: since 2026-09-27 every tenant is in enforce mode by default, and identity, authorization, trust (which now weighs how dangerous the action itself is), your own tool rules, approval holds, PBFT consensus, MCPGate and execution block; the OPA policy, injection-screen, intent, verification and ActionProof verdicts are recorded but do not block on their own. An agent's authority lapses on a policy change and on risk or blast-radius budgets (tripped on the live cluster); a cluster epoch or membership change is enforced too, but was tested only with an injected change, not by re-keying the live cluster. "L5" here means CAG-L5, CAIN's own governance designation, not the SAE driving scale, and nothing claims an agent is "SAE Level 5". The live L5 run used an operator self-test tenant and a scripted agent: the run uses a scripted agent on an operator self-test tenant. Of 12 L5 governance capabilities, 6 are verified on the live path and 6 are tested but only partly exercised live (continuous authorization, trajectory, MCP execution, risk, trust, independent verification). The hosted endpoint returns a signed verdict; your own gate executes. Current known limitations, including every claim that is not a pass, are listed in full on the Proof page. The roadmap's next evolution (a unified trust kernel, eBPF kernel enforcement, swarm governance, cluster federation) is a plan, not built. No customer traffic is claimed.
On this hosted deployment every tenant is in enforce mode by default (since 2026-09-27). Identity, authorization, trust (including how dangerous the action itself is), your own tool rules, approval holds, PBFT consensus (no quorum-certified commit, no execution), MCPGate, execution and the kill switch block. The OPA policy, injection-screen, intent, verification and ActionProof verdicts are recorded but do not block on their own. A tenant may opt down to shadow mode, and that choice is logged. The live mode is read from /fabric/status.
Every step uses a real endpoint or a published, signed file. The verifiers import none of CAIN-42's code; the implementation itself is not published.
4 replicas in Atlanta, Los Angeles and Miami, running now. Your browser fetches each decision from all four replicas and verifies every Ed25519 vote. It can audit the whole history continuously, and a tamper lab lets you try to get a modified certificate accepted. Fault-injection run: 336 certificates, 49/49 checks.
The generated snapshot: commit, process start, enforcement flags, live mode, known limitations.
Every public CAIN-42 claim with its status, evidence level, artifact digests and limits. Your browser checks the Ed25519 signature. Auditors: the signed CAIN-42 Auditor Kit 8.3.2 runs a 42-second integrity check offline, standard library only, at cainstudio.online/evidence/auditor-kit/8.3.2/ (human auditors can verify CAIN-42 in 169 seconds: the full challenge passed every stage in 169 s on a heavily loaded host, over its 42-second budget; initial verdict median 7.62 s over 30 cold runs, slowest 13.7 s).
Agent authority committed by cain-mr-01, then broken 17 ways: 14 tripped for real (expiry, trust, identity, tool schema, context, trajectory, revocation, deleted evidence, revoked parent, policy change, unreadable policy, risk budget, blast-radius budget, a delegate spending its parent's budget) and 3 injected (epoch, membership). Every next action was refused and the tool never ran. One command each, no CAIN code: 48/48 and 60/60 checks. The syscall-filter run is a third bundle (8/8).
On the live gateway across all three domains: a tool an evolution disabled, a model swapped outside the gate and a lease issued before a capability change are all refused; cain-mr-01's own records carry every capability commitment its quorum signed. Earlier, on a disposable cluster: tool calls ran only with a PBFT-committed authorization and nine attack classes were refused.
Crash up to two of four sandbox nodes and watch commits stop at the quorum boundary; signed node state checked in your browser.
Continuous writes; every 20 minutes a random replica is killed on its own host and restarted; hourly hash-chained checkpoints signed with the evidence-root key, each with a fresh MCPGate-enforced authorization and its refused replay. The full run record is published checkpoint by checkpoint on the Proof page.
Live status is shown in the 24-hour soak section.
The full history of every soak run — what each run exercised and how it ended — stays published, checkpoint by checkpoint, on the Proof page.
A 24-hour multi-region soak runs on the live cluster cain-mr-01: continuous writes, a replica killed and restarted every 20 minutes, and an hourly hash-chained checkpoint signed with the evidence-root key, each carrying a fresh MCPGate-enforced authorization and its refused replay.
Soak: checking…
Latest signed checkpoint → Verify it yourself
The verdict is produced by the public verifier from the published checkpoints, not by a label written here: this page reports exactly what the verifier reports. The full run history is published checkpoint by checkpoint on the Proof page.
The hosted CAIN-42 control plane: the decision pipeline, API keys, the evidence store, the public Lab and the Verification Center.
The enforcement boundary: the component in the agent's call path that lets a tool call run or stops it. Self-hosted by design.
The agent-facing layer: agent identity, channels and approvals, and the public evidence log. Most CLAWX integrations are not built yet; each is labelled.
All three names resolve to one host today. They are three views of one system, not three independently operated deployments.
October 2026 — CAIN-42 now catalogs more than 8,000 products, services and monetizable mechanisms (1,680 implemented invention mechanisms and 8,324 monetization avenues across the product catalog). Rather than sell all of them at once, the product focus is now the October 2026 Top 100 — the 100 products we lead with, each with a deep description and a live demo. See the Top 100 →. Latest changes, 2026-10-09: Evolution 5 of 42 (Project Sovereign Trial) establishes adversarial agent assurance, verified multi-turn benchmarking, and tool-call mediation under indirect prompt injection across smolagents and agentic runtimes. Real multi-turn AI-agent execution channels are governed and evaluated without circular model-as-a-judge or self-reporting: 8 new invention families in cain/trial/ (declarative scenario engine, cryptographic harness integrity anti-gaming sealer, multi-turn causal adversarial trial engine, independent ground-truth outcome oracle evaluating actual filesystem/socket mutations, long-horizon salami and cumulative risk engine detecting sub-threshold exfiltration and synergy combinations, differential and mutation verifier injecting 64KB overflows, path traversals and unicode homoglyphs, risk-stratified assurance scorecard computing Attack Block Rates and actuarial underwriting curves, and reproducible trial evidence bundle with zero-dependency clean-room verifier). 182 of 182 regression tests pass across Evolutions 1–5 in 3.69s (16/16 formal properties, 24/24 adversarial breakers, 92 total breakers across the suite, 0 false allows); 10 of 10 clean-room trial samples verified and 4 of 4 tampered samples rejected fail-closed; >11,000 ops/sec, <80µs p50 latency. Register v36 expands the canonical IP base to 102 families (46 NOVEL, 40 UNUSUAL, 9 ENGINEERING, 7 INTEGRATION) with $11,970,450 Net Base IP ($21,630,200 High Net IP) and FIRME AI CORPORATION company value $14,452,450 (BASE Investor) / $15,452,450 (BASE Strategic) (2026-10-09 figures, since superseded: IP register v56 puts the IP base at $17,123,490) (see the Sovereign Trial evidence bundle). Earlier changes, 2026-10-07: governed self-evolution. An agent can now propose a better skill, and CAIN-42 decides whether it may become authorized behaviour: the candidate runs in a fresh confined process with no network, must reproduce its gain on hidden and unrelated regression tasks, passes the evolution gate, an operator approval and a canary, and every outcome gets a governance-signed receipt (16 of 16 verify under a clean-room verifier). On the benchmark the CAIN-governed agent reached 1.0 task success with 0 security violations, against 0.625 and 36 violations for an ungoverned self-evolving agent and 0.3333 for a static baseline; a continuous red team blocked 411 of 411 attacks after its first run found and closed 4 real defects in existing gates. Learning does not grant authority. The same day, batch 3 of IP hardening closed 11 decision-path and public-verifier defects, live on all three domains (12 of 12 forged proofs refused): a prepare certificate is no longer accepted as a commit, a signed DENIED record can no longer be re-split into ALLOWED, and the public offline, universal-proof, WORM and attestation verifiers no longer accept forgeries signed with the forger’s own key. 2026-10-04 to 2026-10-06: nine IP evolutions of the governance contract fabric were published (consequence forecasts, replay under a proposed change, governed learning that can only tighten, formal assurance, a governance compiler that can only narrow authority, mandatory governance packages, attestation); a live frontier model ran under the AGI control boundary in 50 runs across 14 scenarios with every specified property holding; boundary hardening closed 9 areas of the decision path (no credential leak through MCPGate, agent passports enforced on the hosted path, a tamper-evident identity log, trajectory governance, emergency halt and quarantine honoured for every tenant); IP hardening batches 1 and 2 closed 23 more defects; and two public statements were corrected: the 200/200 invariant figure was withdrawn, and FIRME AI CORPORATION is valued at about $3 million (a 2026-10-06 figure, since superseded: the current internal IP register, v56, puts the IP base at $17,123,490; an internal analytical scenario, not an appraisal). Earlier, 2026-10-03: 104 of 105 catalog services are live (up from 6 the day before; the 98 deployed in this release each passed a live acceptance test), including seven new products (CAINBudget, CAINPay, VeritasEngine, MemoryMesh, NexusMind, LexisGuardian, OmegaRouter); recorded decisions that arrive together now share one PBFT round, each keeping its own Merkle inclusion proof (evidence). The 32 CAIN-42 capabilities were measured the same day and are on this page with their real status (signed audit). Before that, 2026-10-01: Phase 1-3 implementation and live deployment: the quorum-committed authorization-snapshot data plane (CAIN_AUTH_SNAPSHOT=1) is active on the live gateway, replacing the per-call PBFT round (p50 2,268.6 ms, n=20) with a snapshot-covered stage (p50 0.8263 ms, n=1,000) for snapshot-covered tenants (measured 2026-09-29 on cain-mr-01; run record dataplane-evolution-2026-09-29/governance/live_run.json). The Progressive Trust Matrix (_scope_seen) prevents horizontal credential reuse and unauthorized exfiltration holds; revoking an agent key halts it on its very next request (measured 2026-10-02; the revoke call itself took 3-6 s under heavy host load); action tokens bind payload SHA-256 digests; Evolution 8 physical ActionCommitBoundary enforces single-use capability leases (24/24 tests pass); mcpgate-appliance Helm chart v3.0.0 packaged for turnkey deployment; clean-room SDK installability verified (19/19 checks pass). Phase 3 Frontier AI Research Integration mounts AgentPRM Process Reward Model trajectory evaluation and shortcut pruning (arXiv:2502.10325), TriCEGAR discrete Markov Decision Process model checking, Governed Memory Shield write-time injection sanitization (Zep/Mem0 backdoor defense), and A2A inter-agent delegation attenuation directly onto live gateway endpoints (/fabric/frontier/*) with standalone clean-room verification (4/4 proofs pass). Earlier, 2026-09-30: Evolution 39 turns a mission into a governed machine organization: CAIN compiles the mission into bounded rules, designs the smallest team of agents that can do the work, gives each agent only the authority its role needs inside what the sponsoring person really holds, has every agent attacked and tested by an independent evaluator, promotes nothing on its own say-so, and runs the real work through the decision kernel and the E8 commit boundary with a proof for every action. No generated agent can grant itself authority, grade itself, promote itself or come back after it is retired. In a 16-step loop 4 real agents were provisioned and 3 consequential tasks ran with valid proofs; 1,041 of 1,041 invariants hold, 3,441 of 3,441 attack scenarios are contained, the targeted mutation test kills 16 of 16 mutants, and the clean-room verifier passes 3,307 of 3,307 checks. Evolution 38 lets another machine check CAIN's work without trusting CAIN: every governed action now carries twelve signed layer proofs and one action proof bound to its real E8 commit, and an independent verifier with none of our code recomputes whether each proof is valid, invalid, incomplete, stale, revoked or unknown. A proof is never permission -- partial, stale, revoked, simulated or confused proofs are never valid, revocation is measured rather than assumed, translations into OAuth, MCP, A2A and audit formats declare every field they drop, and trust domains exchange evidence without ever merging authority. 5 real action proofs and 41 published proof cases, 1,030 of 1,030 invariants hold, 2,141 of 2,141 attack scenarios are contained, the targeted mutation test kills 15 of 15 mutants, 0 of 19 injected faults made proof state more permissive, and the clean-room verifier passes 509 of 509 checks. Evolution 37 makes governance travel with the work: every governed action runs one twelve-stage chain on the real decision kernel and E8 commit boundary and leaves a signed receipt, and when an execution moves to another node, runtime, model, region or credential the move is itself governed -- authority can only shrink, a material change opens a new epoch, and risk, spent budget, revocations, evidence and incident history travel with it and can never be reset. A runtime is admitted on a measured code digest and live probes, never on its own claim, and nothing is scheduled where enforcement is missing. 71 signed execution receipts come from real governed runs, 1,132 of 1,132 invariants hold, 2,720 of 2,720 attack scenarios are contained, the targeted mutation test kills 17 of 17 mutants, 16 of 16 injected fault classes are contained with no false allows, a 100,000-agent scale run completes on one host, and the clean-room verifier passes 2,627 of 2,627 checks. Evolution 36 turns CAIN into a governed machine agency exchange: agents, tools, models and organizations are discovered, verified, negotiated with, contracted, hired and transacted with along one lifecycle, and the exchange never hands out authority. Governability-aware discovery never upgrades an unknown requirement into a match; a service chain proves identity, authority, contract, capability, execution, proof and settlement; a subcontractor can never be given more than its parent; payment authorizations are scoped, time-bound and non-replayable; a receipt requires a final E8 commit; and CAIN's own participation is governed so it can never grant itself authority or rewrite its history. Money in this layer stays synthetic: CAIN is not a bank, a custodian or a regulator. 842 of 842 invariants hold, 3340 of 3340 economic and governance attack scenarios across 64 categories are contained, 15 of 15 disabled defences are caught, a 13-step exchange lifecycle passes, and the clean-room verifier passes 3601 of 3601 checks. Evolution 35 adds a governance intelligence layer and keeps it out of the authorization path: it observes with provenance, scores risk across dimensions without ever collapsing into one number, predicts with explicit confidence, assumptions, horizon and unknowns, calibrates itself by dimension, explores counterfactuals that are never presented as facts, and recommends -- and a learned control is deployed only after a deterministic review and a canary, with the reviewed action still passing the kernel and E8, so learning can never create authority. 799 of 799 invariants hold, 3544 of 3544 attack scenarios across 68 categories are contained, the targeted mutation test kills 15 of 15 mutants, a 23-step loop passes, and the clean-room verifier passes 3810 of 3810 checks. Evolution 34 makes every governed action carry its own verifiable proof: one signed, chained governance proof binds who acted, the capability, the delegation and its attenuation, the authority, the policy, the evidence, the risk, the decision, the E8 commit, the enforcement boundary, the execution and the outcome, and states plainly what remains UNKNOWN or outside the boundary -- with fourteen statuses that never collapse into a score, per-layer proof primitives, an enforcement proof that separates a decision from an authorization, a commit, an enforcement, an execution and an observed outcome, and RFC 6962 selective disclosure; a proof is evidence, never permission. 629 of 629 invariants hold, 2664 of 2664 attack scenarios across 32 categories are contained, 12 of 12 disabled defences are caught, and the clean-room verifier passes 3286 of 3286 checks. Evolution 33 turns everything an agent does into one governed operation: calling a tool, sending a message, running code, creating a helper agent, changing its memory or paying all follow the same checked lifecycle, are committed at E8 and carry a signed proof, while changes to the rules themselves are handed to the process that governs them and never simply executed. An existing agent can be governed through a small sidecar without importing any CAIN code, and every request it sends must be signed. In a full-loop run, an action that got through under the old rules was refused the next time, after CAIN had learned and adopted a stricter rule with a human sign-off. 581 of 581 invariants hold, 2029 of 2029 attack scenarios across 26 categories are contained, and the clean-room verifier passes 2603 of 2603 checks. Evolution 32 lets CAIN learn from the actions it governs without ever giving itself more power: it watches where harm got through, proposes a stricter rule, tries it in an isolated sandbox and on a hidden test set it never saw, compares it on fifteen separate measures, and adopts it only with a signed human approval; a proposal that stops harm by refusing everything is rejected, and learning can only make the rules stricter. In a simulated run on a synthetic workload, harm that got through fell from 41 to 3 with no new wrongly refused actions. 303 of 303 invariants hold, 1013 of 1013 attack scenarios across 22 categories are contained, the mutation test catches 12 of 12 disabled defenses, and the clean-room verifier passes 1420 of 1420 checks. Evolution 31 makes governance provable: every allowed action can now produce a signed governance proof that ties that one action to who did it, the delegation and policy it ran under, the final E8 check that let it through and the record of it actually running, and every refused action produces a signed record of why it was refused. Anyone can re-check a proof against our published keys with verifiers that share none of our code, in Python and in TypeScript; each proof sits in an append-only log, and a proof is evidence only, never permission to act again. 252 of 252 invariants hold, 1269 of 1269 attack and conformance scenarios are contained, the mutation test catches 12 of 12 disabled defenses, every one of 88 deliberately forged proofs is rejected, and the clean-room verifier passes 1676 of 1676 checks. Evolution 30 joins the layers into one autonomy kernel: every consequential action an agent takes, from what it perceives and remembers through a transaction to a proposal to improve itself, goes through one path that checks its autonomy state, level, budget, containment and evidence before the E8 commit boundary, and leaves a signed receipt whether it was allowed or refused. An agent cannot raise its own autonomy level; a self-improvement needs a sandbox, an adversarial test, a canary and a human review; and a coverage map says plainly which paths CAIN does not control. 166 of 166 invariants hold, 889 of 889 scenarios across eight attack categories are contained, the mutation test catches 11 of 11 disabled defenses, and the receipts check out in a clean-room verifier (1187 of 1187 checks) and in a separate zero-dependency TypeScript verifier. Evolution 29 governs machine-to-machine transactions end to end: an autonomous procurement agent discovers vendors, checks their identity, tested capability and counterparty risk (thirteen dimensions, no single score), negotiates, signs a contract, is authorized for that one transaction by the intersection of its delegation, lease, a separately bounded spending authority, its organization's budget, the contract and the consequence forecast, locks funds in escrow, receives a governed delivery and releases payment only on a delivery receipt, the buyer's signed confirmation and an objective check. Money in it is synthetic test units, and it moves only through a sealed settlement step inside the E8 commit boundary. 106 of 106 invariants hold, 258 of 258 adversarial scenarios are contained, ten catastrophe scenarios on the real fabric end with 0 false allows, and the clean-room verifier passes 300 of 300 checks. Evolution 28 gives any agent that connects a signed, portable execution identity: it travels unchanged over 23 protocol carriers (MCP, A2A, HTTP, gRPC, CLI, browser and computer use among them), but its authority does not: every receiving domain recomputes it from its own policy, delegation shrinks on sixteen dimensions and can never flow back up, a change of model, runtime, prompt, tools, memory or key voids authority until it is re-evaluated, and every action is bound to one transaction, passes the E8 commit boundary and leaves a signed receipt in a hash chain, with identity events in an RFC 6962 transparency log. 90 of 90 invariants hold, 442 of 442 adversarial scenarios are contained, conformance passes 17 of 17 dimensions on real tests, and the clean-room verifier passes 243 of 243 checks; building it we found and closed a gap that let a child agent mint a delegation back to its parent. Evolution 27 is an agentic-internet control plane (registry, discovery, routing, policy distribution, contracts, incident propagation, edge nodes) that coordinates without becoming authority (1,533 of 1,533 adversarial scenarios contained, 341 specific to E27). Evolution 26 adds portable signed trust objects, a seventeen-dimension trust vector that never collapses into one score and authorizations that work for exactly one transaction (1,192 of 1,192 contained). Evolution 25 turns any consequential machine action into one signed transaction across eighteen protocol adapters, committed only through E8, with the agent never holding a raw secret (1,055 of 1,055 contained). All four are TESTED libraries, not hosted services, and none of them can give an agent more power. Earlier, 2026-09-28: the evolution gate is live: on the live gateway an agent can change its model or its MCP tools only through a signed proposal, an evaluator-signed test report and a human operator, and the old authority is void until the live cluster signs the new capability. 17 of 17 live cases behaved as specified across all three domains. Building it, we found that the governance state the cluster signs had not covered the MCP tool map, and fixed that. The public proof fabric is live: a signed claims registry, the 2026-09-28 6-suite test run (1,978 tests, 1,963 passed, 0 failed), a build manifest, an SBOM, test vectors, a signed evidence pack and a clean-room verifier. A sweep of all three sites withdrew 16 older files whose numbers no run had produced; each now says why, and the originals are kept. The system governor is on: unregistered systems and unsigned requests are refused; 13 of 13 live cases behaved as specified. Every registered claim, every limitation we have recorded and every run outcome stays published on the Proof page; release gates that are still open are listed in the Verification Center. No third party has verified any claim yet (0 independently verified), and the Proof page says so. Earlier generations (CAIN 1–41) stay published as history, not as the current system; the previous homepage is kept as it was on 2026-09-25, marked superseded, and the now page takes precedence over it. Evolution 7 (predictive consequence governance) and Evolution 8 (the mandatory governance kernel) are added as TESTED libraries, wired restriction-only into the CAIN-45 agent hypervisor: a governed world-state and digital-twin fabric whose predictions and uncertainty can only contract authority, and a signed, short-lived, action-bound governance token checked at an action-commit boundary before execution. Neither can grant authority, and neither is hosted yet; 12 and 22 machine-checkable invariants hold and 65 new tests pass. Evolution 9 adds a signed agent passport, an AgentBOM and a provenance graph for every governed agent: 15 more machine-checkable invariants hold and 46 more tests pass, memory can never mint authority, delegation can never increase authority, revocation propagates, and a material mutation invalidates the attestation and the bound governance token. Both new layers are TESTED libraries, not hosted services, and neither can grant authority. Evolution 10 governs agent collectives rather than individuals: 20 more invariants hold and 20 of 20 collective attacks are blocked, collective authority is an intersection of envelopes and never a sum, combination risk is evaluated before commitment, and a unanimous decision still carries no authority. It is a TESTED library, not an orchestration service. Evolution 11 governs the information channel: 20 more invariants hold and 20 of 20 message/intent attacks are blocked, a valid message signature proves who sent it but never what they may do, tool and MCP output stay data rather than policy, information never inherits the destination's trust, and taint survives derivation. It is a TESTED library, not a hosted service. Evolution 12 governs what an agent is allowed to believe: 20 more invariants hold and 32 of 32 evidence attacks are contained, a source whose identity cannot be established stays UNKNOWN, stale or expired evidence cannot authorize, corroboration counts independent principals rather than repeated agents, retrieved content stays data rather than policy, a valid hash proves bytes did not change but not that they are true, and reality drift forces re-evaluation. It is a TESTED library that governs what enters the trusted decision path; it does not claim to know everything; a system outside its boundary remains UNCONTROLLED, UNVERIFIED or UNKNOWN. Evolution 13 governs how a decision is formed: 24 more invariants hold and 36 of 36 decision attacks are contained, reasoning can propose but never authorize, authority can be narrowed but never expanded by argument, a policy conflict is never silently resolved, a material change marks the decision stale, a deny cannot be turned into an allow, and the governance token binds the decision, policy, authority and risk digests. It is a TESTED library that governs decision construction from recorded inputs and stores no private chain-of-thought; it does not claim that a model's reasoning is correct. Evolution 14 treats every capability as a power surface: tools, skills, plugins, connectors, models and subagents are identified by their artifact, admitted only with a publisher-signed provenance chain, granted only within the issuer's own authority, and used only under a short-lived signed lease that the commit boundary checks again, bound to the decision, policy, risk, sandbox and credential. 30 more invariants hold and 44 of 44 capability attacks are contained, among them artifact and dependency substitution, a malicious upgrade, a dangerous capability pair split across two agents, and a revocation racing a commit. Building it we found two Evolution 13 attack scenarios that had been counted as contained without being tested, and fixed both. It is a TESTED library wired into the agent hypervisor in front of MCPGate, not a hosted service; hardware attestation and vulnerability intelligence remain UNKNOWN. Evolution 15 establishes the interfaces and governance primitives for bringing spatial intelligence, world models, simulation, trajectories and physical actions into the same governed trust path: signed sensor observations enter through the evidence layer, the world state is versioned and replayable, a world model's output is a prediction rather than authority, a trajectory is a proposal until a signed approval binds it, and every physical action binds nine digests, crosses the governance kernel and reaches an actuator adapter only with a single-use permit. 36 more invariants hold and 55 of 55 spatial and physical attacks are contained, among them sensor spoofing, map substitution, trajectory replay, a world-state rollback and a swapped actuator command; digital, physical and hybrid agents run the same path. It is a TESTED library exercised against a reference robot adapter, not a vehicle or a robot: it drives nothing and does not guarantee physical safety, and real sensor and actuator integration is on the roadmap. Evolution 16 adds a temporal and causal dimension to that world state: events and intervals, typed causal and correlation relations that are never conflated, counterfactual branches that never become reality, a predictive state engine whose output is never authority, prediction-vs-reality calibration, and a causal blast radius. Evolution 17 governs action by autonomous agent teams as a first-class system object: collective authority is a constrained intersection and never a sum, consensus is not authorization, a world-state fork blocks authorization, dissent is preserved, and one action that fans out to many agents is pre-authorized; 61 of 61 invariants hold and 91 of 91 bench entries (88 distinct attacks) are contained; it is a TESTED library, not an orchestration service. Evolution 18 adds the actionable 4D world: entity state at (X,Y,Z,T) with uncollapsed uncertainty, reachable / permitted / authorized sets kept distinct, intent and trajectory hypotheses, an interaction graph and a conflict field, counterfactual futures, actionability, a conserved uncertainty budget, micro-authorization and a continuous re-authorization loop, for a car, a drone and a digital agent in one shared world; ACTIONABILITY IS NOT AUTHORIZATION, REACHABILITY IS NOT PERMISSION, PREDICTION IS NOT REALITY, and AUTHORIZATION IS A FUNCTION OF WORLD STATE. 89 of 89 invariants hold and 123 of 123 bench entries (109 distinct attacks, among them GNSS spoofing, map substitution, geofence mutation and a re-signed refusal) are contained. Our review before publication found that the E17 and E18 commit boundaries bound the policy, risk and authority verdicts without reading them, so a consistently re-signed refusal was authorized; both now enforce every verdict they bind, and each fix is pinned by a regression test written against the unfixed code (full record on the Proof page and in the changelog). Evolution 19 governs the evolving state of an autonomous system itself: identity, mission, goals, beliefs, memory, models, learning, authority, world, outcomes and recovery become hash-chained governed state, effective authority is compiled as the intersection of sixteen factors so it shrinks when conditions deteriorate and never grows because an agent is confident, agrees with its peers, learns or predicts success, autonomy is derived from evidence rather than requested, and every consequential action carries a sixteen-field action contract that is invalidated by any material state change and whose verdicts the gate enforces itself before the E8 kernel commits it. 108 of 108 invariants hold, 189 of 189 bench entries (177 distinct attacks) are contained, deliberately removing a defense is caught by the bench, and an independent verifier re-derives the evidence (117 of 117 checks). AUTONOMY IS NOT AUTHORITY. Evolution 20 governs agents that act together as teams, organizations and machine-native institutions: they may form, admit members, delegate, negotiate, sign contracts, hold and move resources, spawn subagents, federate, resolve disputes, evolve and dissolve, and none of it can manufacture authority. Institutional authority is always an intersection and never a sum; membership, votes, consensus, reputation, trust, wealth, market wins, rewards and model capability are not inputs to it; a contract or a negotiated agreement authorizes nothing by itself; a spawned subagent inherits only what is explicitly permitted in each of seven dimensions; a terminated agent or dissolved institution cannot come back through stale state; and every institutional action still passes the E19 action contract and the E8 kernel. 118 of 118 invariants hold, 334 of 334 bench entries (328 distinct attacks, among them Sybil institutions, constitutional takeover, contract laundering, double spending, spawning explosions and agent resurrection) are contained, an end-to-end run from one agent to a two-institution economy detects and contains 7 hostile events and then recovers and keeps working, deliberately removing a defense is caught by the bench, and an independent verifier re-derives the evidence (179 of 179 checks). Every economy in it is a simulation over abstract units: it moves no money. COLLECTIVE INTELLIGENCE IS NOT INSTITUTIONAL AUTHORITY. Evolution 21 governs autonomous research itself: asking questions, keeping competing hypotheses alive, designing and running experiments and simulations, replicating, peer-reviewing, attacking its own conclusions, building versioned knowledge, proposing new capabilities, models and strategies, and creating specialised research agents. What the research is allowed to believe is computed from signed evidence whose type (simulation, experiment, real-world observation, independent replication, third-party reproduction) cannot be relabelled, and a hundred runs of the same setup or a hundred agents under one controller count as one source. Research authority and execution authority are separate: a discovery, a confidence score, a reviewer vote, a benchmark win or a research reward never widens what an agent may do. A new capability leaves quarantine only after validation, an independent adversary, a security review and a governance quorum that excludes the researchers, and even then every action still passes E20, the E19 action contract and the E8 kernel. When evidence collapses, the dependent knowledge, policies and capabilities are invalidated with it and execution stops. Unsuccessful experiments are kept as evidence. 155 of 155 invariants hold; 298 of 298 bench entries (290 distinct attacks) are contained; a governed research lab solves a synthetic problem end to end in 17 stages and refuses all 16 attempts to authorize itself along the way; and an independent verifier re-derives the evidence (218 of 218 checks) and catches all 16 deliberate tamperings. Can a system that discovers a governance loophole use that discovery to get permission to exploit it? The bench's answer is NO: it can only disclose it. Building it we found and fixed four defects in our own new code before publication, among them a contradiction that a later supporting result could mask and a researcher who could review their own work once their evidence had expired. E21 checks how evidence was produced, not whether a hypothesis is true, and the research problem is synthetic. DISCOVERY IS NOT TRUTH, AND INTELLIGENCE IS NOT AUTHORITY. Evolution 22 (a governed cognitive runtime) was started and is not built or published yet. Evolution 23 governs AI systems that reason about and redesign their own architecture: a redesign is only a proposal; it is checked against the governance rules, measured on twelve separate governability scores before any capability gain counts, attacked by a separate red team, verified by a separate evaluator, tried in shadow, and promoted only with a governance quorum that excludes the system itself, a human sign-off and an E8 commit, so a smarter but less governable design is rejected. 253 of 253 invariants hold, 545 of 545 adversarial scenarios across 80 attack families are contained, among them a system that finds a governance loophole and asks to use it, and the clean-room verifier reports INTACT (733 of 733 checks). SELF-IMPROVEMENT IS NOT SELF-AUTHORIZATION. Evolution 24 governs agents that belong to different organizations and trust domains as they discover each other, negotiate, sign contracts, delegate work, pay in simulated units and act over thirteen protocol classes, among them A2A, MCP, HTTP and computer use: authority across organizations is the intersection of ten factors, discovery, contracts, reputation and payment are never among them, unknown trust stays unknown, and a compromised agent is detected, quarantined and revoked while the other organizations keep working. 305 of 305 invariants hold, 756 of 756 adversarial scenarios across 68 attack families are contained, a controlled simulation of 10,000 agents and 100,000 messages shows 0 cases of authority leakage, and the clean-room verifier reports INTACT (1,952 of 1,952 checks). E16–E21, E23 and E24 are TESTED libraries; they are not hosted, they contain no autonomous-driving model, flight controller, vehicle controller, robot policy or navigation stack, and they drive nothing. The governance data plane, 2026-09-29: the quorum now commits authority once per window instead of once per call. A 4-replica PBFT quorum commits a short-lived authorization snapshot, the gateway verifies the commit certificate itself, and a covered call is checked locally, so against the live cluster cain-mr-01 on 2026-09-29 the consensus step went from a per-call PBFT round (p50 2,268.6 ms, p99 3,937.8 ms, n=20) to the snapshot-covered stage (p50 0.8263 ms, p99 3.4686 ms, n=1,000), on a 2-CPU host against a throwaway gateway database (run record dataplane-evolution-2026-09-29/governance/live_run.json). Every covered decision is still anchored into a quorum-committed Merkle root, and revocation takes effect on the next call without a quorum round. Any miss falls back to the per-call round, which fails closed. It is built and live-tested and is available behind a flag. The PII redactor gained a span pipeline 1.1–1.43 times faster from 1 KB to 10 MB with no loss of recall; building it we found and fixed a leak where a card number next to a phone number went unredacted while the report said fully redacted. 9 of 15 production gates pass, and the A+++ verdict is BLOCKED: eBPF enforcement cannot run on this host yet, there is no soak or network fault injection for the new path, and the desktop IPC layer does not exist. Each blocker is published with its evidence in the A+++ evidence bundle. Evolution 16 of 42 (Project Sovereign Frontier, 2026-10-12) makes a governed agent mission durable: every request and decision is written to a signed journal before it takes effect, authority is re-checked at the moment a tool is called, and an action whose outcome is unknown after a timeout or crash is never repeated until an independent observer signs what happened. A crash after every journal entry of a complete mission recovered 71 of 71 times with 0 duplicate writes; 0 of 690 fault and attack scenarios ended badly, against 330 of 420 comparable cases for the previous code; 25 of 25 removed safety checks were caught; and 16,104 exhaustively enumerated event sequences broke no invariant. A stand-alone verifier with no CAIN code checks the journal (570 of 570 verdicts as expected) and is published with a sample mission at cainstudio.online/proof/bundle/sovereign-frontier-evolution16-2026-10-12/. It is a TESTED library in a local simulator, available as a library, and durability costs speed (5.0007 ms per decision against 0.1771 ms in memory). Evolution 18 of 42 (Project Sovereign Reality, 2026-10-12) checks what an agent’s action actually did, not what the agent says it did: two observer processes that are neither the agent nor the enforcer, each with its own signing key and its own method, watch every governed file action; each effect is graded from unavailable to independently corroborated, and a missing observation is never read as “nothing happened”; the approver signs the exact file, not just its path, and the action runs through descriptors pinned to that file, so a swapped file or planted link cannot redirect it. 82 of 82 adversarial scenarios ran against real files and held (39 attacks prevented, 38 detected, 3 honest actions verified, 2 documented limits shown), and 26 of 26 weakened security checks were caught. A stand-alone verifier with no CAIN code re-derives every verdict and is published with sample receipts at cainstudio.online/proof/bundle/sovereign-reality-evolution18-2026-10-12/. It observes file effects under one folder on one host (not network or child processes), its observers share the host kernel, and it is on the live server but not yet called by live requests; a fully observed action costs 10.592 ms at the median.
You do not have to trust us or contact us. Every evidence bundle below ships a clean-room verifier that
imports none of CAIN-42's code. Copy one block into a terminal on your own computer: it downloads that bundle and
its verifiers, and runs two chained checks. verify_publisher.py must print
PUBLISHED_BY_PINNED_KEY: the bytes are exactly what the CAIN publisher key signed, so an edited or
re-signed bundle fails. Only then does the bundle's own verifier run, and it must print "result": "INTACT":
its internal hashes and signatures agree. The block ends with one line, VERIFIED or
NOT VERIFIED. Do not run the bundle verifier on its own. Nothing on these sites is needed after the download.
Requires Python 3 and internet. The verifiers read published data only; they never touch the live
service and never call our servers for a verdict. A changed byte in any bundle file makes the verifier report BROKEN.
INTACT alone means only that the bundle agrees with the key shipped inside it, which anyone who re-signs a bundle
can arrange. That is why every block also runs verify_publisher.py
(verifier, pinned key at
/.well-known/cain-publisher-key.json): it refuses an edited,
added, removed or re-signed file. The publisher key is ours, so neither check is independent verification.
— published result: INTACT (182/182 checks)
mkdir -p sovereign-trial-2026-10-09 && cd sovereign-trial-2026-10-09
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest):
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3: raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/sovereign-trial-2026-10-09/"
get(E + "verify.py", "verify.py")
get(E + "trial_evidence_bundle.json", "trial_evidence_bundle.json")
PY
python3 verify.py trial-bundle trial_evidence_bundle.json \
&& echo "VERIFIED: clean-room trial evidence bundle is internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (58/59 checks)
mkdir -p bft-ip-forensics-2026-10-05 && cd bft-ip-forensics-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/bft-ip-forensics-2026-10-05.json", "../bft-ip-forensics-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../bft-ip-forensics-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "bft-ip-forensics-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "bft-ip-forensics-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../bft-ip-forensics-2026-10-05 ../bft-ip-forensics-2026-10-05.attestation.json \
&& python3 verify_bftip.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (127/127 checks)
mkdir -p e38-byzantine-mission-integrity-2026-10-05 && cd e38-byzantine-mission-integrity-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e38-byzantine-mission-integrity-2026-10-05.json", "../e38-byzantine-mission-integrity-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e38-byzantine-mission-integrity-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e38-byzantine-mission-integrity-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e38-byzantine-mission-integrity-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e38-byzantine-mission-integrity-2026-10-05 ../e38-byzantine-mission-integrity-2026-10-05.attestation.json \
&& python3 verify_e38.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }30/30 invariants · 30/30 scenarios held — published result: INTACT (70/70 checks)
mkdir -p e37-byzantine-autonomous-federation-2026-10-05 && cd e37-byzantine-autonomous-federation-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e37-byzantine-autonomous-federation-2026-10-05.json", "../e37-byzantine-autonomous-federation-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e37-byzantine-autonomous-federation-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e37-byzantine-autonomous-federation-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e37-byzantine-autonomous-federation-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e37-byzantine-autonomous-federation-2026-10-05 ../e37-byzantine-autonomous-federation-2026-10-05.attestation.json \
&& python3 verify_e37.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }23/30 invariants · 30/30 scenarios held — published result: INTACT (69/76 checks)
mkdir -p e36-byzantine-collective-governance-2026-10-05 && cd e36-byzantine-collective-governance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e36-byzantine-collective-governance-2026-10-05.json", "../e36-byzantine-collective-governance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e36-byzantine-collective-governance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e36-byzantine-collective-governance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e36-byzantine-collective-governance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e36-byzantine-collective-governance-2026-10-05 ../e36-byzantine-collective-governance-2026-10-05.attestation.json \
&& python3 verify_e36.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }27/30 invariants · 30/30 scenarios held — published result: INTACT (108/111 checks)
mkdir -p e35-continuous-autonomy-integrity-2026-10-05 && cd e35-continuous-autonomy-integrity-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e35-continuous-autonomy-integrity-2026-10-05.json", "../e35-continuous-autonomy-integrity-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e35-continuous-autonomy-integrity-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e35-continuous-autonomy-integrity-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e35-continuous-autonomy-integrity-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e35-continuous-autonomy-integrity-2026-10-05 ../e35-continuous-autonomy-integrity-2026-10-05.attestation.json \
&& python3 verify_e35.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }0/0 invariants · 0/0 scenarios held — published result: PARTIAL (0/0 checks)
mkdir -p e34-decision-provenance-2026-10-05 && cd e34-decision-provenance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e34-decision-provenance-2026-10-05.json", "../e34-decision-provenance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e34-decision-provenance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e34-decision-provenance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e34-decision-provenance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e34-decision-provenance-2026-10-05 ../e34-decision-provenance-2026-10-05.attestation.json \
&& python3 verify_e34.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e32-global-trust-settlement-2026-10-05 && cd e32-global-trust-settlement-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e32-global-trust-settlement-2026-10-05.json", "../e32-global-trust-settlement-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e32-global-trust-settlement-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e32-global-trust-settlement-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e32-global-trust-settlement-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e32-global-trust-settlement-2026-10-05 ../e32-global-trust-settlement-2026-10-05.attestation.json \
&& python3 verify_e32.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e31-governance-proof-fabric-2026-10-05 && cd e31-governance-proof-fabric-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e31-governance-proof-fabric-2026-10-05.json", "../e31-governance-proof-fabric-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e31-governance-proof-fabric-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e31-governance-proof-fabric-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e31-governance-proof-fabric-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e31-governance-proof-fabric-2026-10-05 ../e31-governance-proof-fabric-2026-10-05.attestation.json \
&& python3 verify_e31.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e30-governance-network-2026-10-05 && cd e30-governance-network-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e30-governance-network-2026-10-05.json", "../e30-governance-network-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e30-governance-network-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e30-governance-network-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e30-governance-network-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e30-governance-network-2026-10-05 ../e30-governance-network-2026-10-05.attestation.json \
&& python3 verify_e30.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e28-catcp-ip-commercial-2026-10-05 && cd e28-catcp-ip-commercial-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e28-catcp-ip-commercial-2026-10-05.json", "../e28-catcp-ip-commercial-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e28-catcp-ip-commercial-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e28-catcp-ip-commercial-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e28-catcp-ip-commercial-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e28-catcp-ip-commercial-2026-10-05 ../e28-catcp-ip-commercial-2026-10-05.attestation.json \
&& python3 verify_e28.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e27-catcp-control-2026-10-05 && cd e27-catcp-control-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e27-catcp-control-2026-10-05.json", "../e27-catcp-control-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e27-catcp-control-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e27-catcp-control-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e27-catcp-control-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e27-catcp-control-2026-10-05 ../e27-catcp-control-2026-10-05.attestation.json \
&& python3 verify_e27.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e26-byzantine-trust-2026-10-05 && cd e26-byzantine-trust-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e26-byzantine-trust-2026-10-05.json", "../e26-byzantine-trust-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e26-byzantine-trust-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e26-byzantine-trust-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e26-byzantine-trust-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e26-byzantine-trust-2026-10-05 ../e26-byzantine-trust-2026-10-05.attestation.json \
&& python3 verify_e26.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e23-continuous-assurance-2026-10-05 && cd e23-continuous-assurance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e23-continuous-assurance-2026-10-05.json", "../e23-continuous-assurance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e23-continuous-assurance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e23-continuous-assurance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e23-continuous-assurance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e23-continuous-assurance-2026-10-05 ../e23-continuous-assurance-2026-10-05.attestation.json \
&& python3 verify_e23.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e22-byzantine-global-verification-2026-10-05 && cd e22-byzantine-global-verification-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e22-byzantine-global-verification-2026-10-05.json", "../e22-byzantine-global-verification-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e22-byzantine-global-verification-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e22-byzantine-global-verification-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e22-byzantine-global-verification-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e22-byzantine-global-verification-2026-10-05 ../e22-byzantine-global-verification-2026-10-05.attestation.json \
&& python3 verify_e22.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }mkdir -p e21-byzantine-economic-coordination-2026-10-05 && cd e21-byzantine-economic-coordination-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e21-byzantine-economic-coordination-2026-10-05.json", "../e21-byzantine-economic-coordination-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e21-byzantine-economic-coordination-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e21-byzantine-economic-coordination-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e21-byzantine-economic-coordination-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e21-byzantine-economic-coordination-2026-10-05 ../e21-byzantine-economic-coordination-2026-10-05.attestation.json \
&& python3 verify_e21.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: VALID (31/31 checks)
mkdir -p e18-byzantine-counterfactual-governance-2026-10-05 && cd e18-byzantine-counterfactual-governance-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e18-byzantine-counterfactual-governance-2026-10-05.json", "../e18-byzantine-counterfactual-governance-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e18-byzantine-counterfactual-governance-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e18-byzantine-counterfactual-governance-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e18-byzantine-counterfactual-governance-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e18-byzantine-counterfactual-governance-2026-10-05 ../e18-byzantine-counterfactual-governance-2026-10-05.attestation.json \
&& python3 verify_e18.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (24/24 checks)
mkdir -p e13-bpf-governance-execution-2026-10-05 && cd e13-bpf-governance-execution-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e13-bpf-governance-execution-2026-10-05.json", "../e13-bpf-governance-execution-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e13-bpf-governance-execution-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e13-bpf-governance-execution-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e13-bpf-governance-execution-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e13-bpf-governance-execution-2026-10-05 ../e13-bpf-governance-execution-2026-10-05.attestation.json \
&& python3 verify_e13.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (20/20 checks)
mkdir -p e12-trust-network-state-2026-10-05 && cd e12-trust-network-state-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e12-trust-network-state-2026-10-05.json", "../e12-trust-network-state-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e12-trust-network-state-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e12-trust-network-state-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e12-trust-network-state-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e12-trust-network-state-2026-10-05 ../e12-trust-network-state-2026-10-05.attestation.json \
&& python3 verify_e12.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (32/32 checks)
mkdir -p e11-governance-proof-2026-10-05 && cd e11-governance-proof-2026-10-05
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e11-governance-proof-2026-10-05.json", "../e11-governance-proof-2026-10-05.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e11-governance-proof-2026-10-05.attestation.json"))["files"])
for f in names:
get(E + "e11-governance-proof-2026-10-05/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e11-governance-proof-2026-10-05/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e11-governance-proof-2026-10-05 ../e11-governance-proof-2026-10-05.attestation.json \
&& python3 verify_e11.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1460/1460 checks)
mkdir -p e42-supreme-governed-agentic-infrastructure-2026-10-01 && cd e42-supreme-governed-agentic-infrastructure-2026-10-01
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e42-supreme-governed-agentic-infrastructure-2026-10-01.json", "../e42-supreme-governed-agentic-infrastructure-2026-10-01.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e42-supreme-governed-agentic-infrastructure-2026-10-01.attestation.json"))["files"])
for f in names:
get(E + "e42-supreme-governed-agentic-infrastructure-2026-10-01/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e42-supreme-governed-agentic-infrastructure-2026-10-01/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e42-supreme-governed-agentic-infrastructure-2026-10-01 ../e42-supreme-governed-agentic-infrastructure-2026-10-01.attestation.json \
&& python3 verify_e42.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1303/1303 checks)
mkdir -p e41-machine-agency-exchange-2026-09-30 && cd e41-machine-agency-exchange-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e41-machine-agency-exchange-2026-09-30.json", "../e41-machine-agency-exchange-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e41-machine-agency-exchange-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e41-machine-agency-exchange-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e41-machine-agency-exchange-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e41-machine-agency-exchange-2026-09-30 ../e41-machine-agency-exchange-2026-09-30.attestation.json \
&& python3 verify_e41.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1518/1518 checks)
mkdir -p e40-autonomous-enterprise-intelligence-2026-09-30 && cd e40-autonomous-enterprise-intelligence-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e40-autonomous-enterprise-intelligence-2026-09-30.json", "../e40-autonomous-enterprise-intelligence-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e40-autonomous-enterprise-intelligence-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e40-autonomous-enterprise-intelligence-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e40-autonomous-enterprise-intelligence-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e40-autonomous-enterprise-intelligence-2026-09-30 ../e40-autonomous-enterprise-intelligence-2026-09-30.attestation.json \
&& python3 verify_e40.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }1132/1132 invariants · 2720/2720 scenarios held — published result: INTACT (2627/2627 checks)
mkdir -p e37-autonomous-execution-mesh-2026-09-30 && cd e37-autonomous-execution-mesh-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e37-autonomous-execution-mesh-2026-09-30.json", "../e37-autonomous-execution-mesh-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e37-autonomous-execution-mesh-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e37-autonomous-execution-mesh-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e37-autonomous-execution-mesh-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e37-autonomous-execution-mesh-2026-09-30 ../e37-autonomous-execution-mesh-2026-09-30.attestation.json \
&& python3 verify_e37.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }842/842 invariants · 3340/3340 scenarios held — published result: INTACT (3601/3601 checks)
mkdir -p e36-machine-agency-exchange-2026-09-30 && cd e36-machine-agency-exchange-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e36-machine-agency-exchange-2026-09-30.json", "../e36-machine-agency-exchange-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e36-machine-agency-exchange-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e36-machine-agency-exchange-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e36-machine-agency-exchange-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e36-machine-agency-exchange-2026-09-30 ../e36-machine-agency-exchange-2026-09-30.attestation.json \
&& python3 verify_e36.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }799/799 invariants · 3544/3544 scenarios held — published result: INTACT (3810/3810 checks)
mkdir -p e35-governance-intelligence-2026-09-30 && cd e35-governance-intelligence-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e35-governance-intelligence-2026-09-30.json", "../e35-governance-intelligence-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e35-governance-intelligence-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e35-governance-intelligence-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e35-governance-intelligence-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e35-governance-intelligence-2026-09-30 ../e35-governance-intelligence-2026-09-30.attestation.json \
&& python3 verify_e35.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }629/629 invariants · 2664/2664 scenarios held — published result: INTACT (3286/3286 checks)
mkdir -p e34-proof-carrying-machine-agency-2026-09-30 && cd e34-proof-carrying-machine-agency-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e34-proof-carrying-machine-agency-2026-09-30.json", "../e34-proof-carrying-machine-agency-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e34-proof-carrying-machine-agency-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e34-proof-carrying-machine-agency-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e34-proof-carrying-machine-agency-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e34-proof-carrying-machine-agency-2026-09-30 ../e34-proof-carrying-machine-agency-2026-09-30.attestation.json \
&& python3 verify_e34.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }581/581 invariants · 2029/2029 scenarios held — published result: INTACT (2603/2603 checks)
mkdir -p e33-governed-agentic-operating-fabric-2026-09-30 && cd e33-governed-agentic-operating-fabric-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e33-governed-agentic-operating-fabric-2026-09-30.json", "../e33-governed-agentic-operating-fabric-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e33-governed-agentic-operating-fabric-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e33-governed-agentic-operating-fabric-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e33-governed-agentic-operating-fabric-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e33-governed-agentic-operating-fabric-2026-09-30 ../e33-governed-agentic-operating-fabric-2026-09-30.attestation.json \
&& python3 verify_e33.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1420/1420 checks)
mkdir -p e32-governed-autonomy-learning-2026-09-30 && cd e32-governed-autonomy-learning-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e32-governed-autonomy-learning-2026-09-30.json", "../e32-governed-autonomy-learning-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e32-governed-autonomy-learning-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e32-governed-autonomy-learning-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e32-governed-autonomy-learning-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e32-governed-autonomy-learning-2026-09-30 ../e32-governed-autonomy-learning-2026-09-30.attestation.json \
&& python3 verify_e32.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1676/1676 checks)
mkdir -p e31-universal-proof-of-governance-2026-09-30 && cd e31-universal-proof-of-governance-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e31-universal-proof-of-governance-2026-09-30.json", "../e31-universal-proof-of-governance-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e31-universal-proof-of-governance-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e31-universal-proof-of-governance-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e31-universal-proof-of-governance-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e31-universal-proof-of-governance-2026-09-30 ../e31-universal-proof-of-governance-2026-09-30.attestation.json \
&& python3 verify_e31.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1187/1187 checks)
mkdir -p e30-governed-machine-autonomy-2026-09-30 && cd e30-governed-machine-autonomy-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e30-governed-machine-autonomy-2026-09-30.json", "../e30-governed-machine-autonomy-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e30-governed-machine-autonomy-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e30-governed-machine-autonomy-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e30-governed-machine-autonomy-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e30-governed-machine-autonomy-2026-09-30 ../e30-governed-machine-autonomy-2026-09-30.attestation.json \
&& python3 verify_e30.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (300/300 checks)
mkdir -p e29-machine-transaction-fabric-2026-09-30 && cd e29-machine-transaction-fabric-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e29-machine-transaction-fabric-2026-09-30.json", "../e29-machine-transaction-fabric-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e29-machine-transaction-fabric-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e29-machine-transaction-fabric-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e29-machine-transaction-fabric-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e29-machine-transaction-fabric-2026-09-30 ../e29-machine-transaction-fabric-2026-09-30.attestation.json \
&& python3 verify_e29.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (243/243 checks)
mkdir -p e28-portable-execution-identity-2026-09-30 && cd e28-portable-execution-identity-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e28-portable-execution-identity-2026-09-30.json", "../e28-portable-execution-identity-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e28-portable-execution-identity-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e28-portable-execution-identity-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e28-portable-execution-identity-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e28-portable-execution-identity-2026-09-30 ../e28-portable-execution-identity-2026-09-30.attestation.json \
&& python3 verify_e28.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (4001/4001 checks)
mkdir -p e27-agentic-internet-control-plane-2026-09-30 && cd e27-agentic-internet-control-plane-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e27-agentic-internet-control-plane-2026-09-30.json", "../e27-agentic-internet-control-plane-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e27-agentic-internet-control-plane-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e27-agentic-internet-control-plane-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e27-agentic-internet-control-plane-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e27-agentic-internet-control-plane-2026-09-30 ../e27-agentic-internet-control-plane-2026-09-30.attestation.json \
&& python3 verify_e27.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (3115/3115 checks)
mkdir -p e26-universal-machine-agency-trust-2026-09-30 && cd e26-universal-machine-agency-trust-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e26-universal-machine-agency-trust-2026-09-30.json", "../e26-universal-machine-agency-trust-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e26-universal-machine-agency-trust-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e26-universal-machine-agency-trust-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e26-universal-machine-agency-trust-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e26-universal-machine-agency-trust-2026-09-30 ../e26-universal-machine-agency-trust-2026-09-30.attestation.json \
&& python3 verify_e26.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (2977/2977 checks)
mkdir -p e25-universal-machine-agency-2026-09-30 && cd e25-universal-machine-agency-2026-09-30
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e25-universal-machine-agency-2026-09-30.json", "../e25-universal-machine-agency-2026-09-30.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e25-universal-machine-agency-2026-09-30.attestation.json"))["files"])
for f in names:
get(E + "e25-universal-machine-agency-2026-09-30/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e25-universal-machine-agency-2026-09-30/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e25-universal-machine-agency-2026-09-30 ../e25-universal-machine-agency-2026-09-30.attestation.json \
&& python3 verify_e25.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (1952/1952 checks)
mkdir -p e24-governed-agentic-internet-2026-09-29 && cd e24-governed-agentic-internet-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e24-governed-agentic-internet-2026-09-29.json", "../e24-governed-agentic-internet-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e24-governed-agentic-internet-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e24-governed-agentic-internet-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e24-governed-agentic-internet-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e24-governed-agentic-internet-2026-09-29 ../e24-governed-agentic-internet-2026-09-29.attestation.json \
&& python3 verify_e24.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (733/733 checks)
mkdir -p e23-governed-meta-intelligence-2026-09-29 && cd e23-governed-meta-intelligence-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e23-governed-meta-intelligence-2026-09-29.json", "../e23-governed-meta-intelligence-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e23-governed-meta-intelligence-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e23-governed-meta-intelligence-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e23-governed-meta-intelligence-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e23-governed-meta-intelligence-2026-09-29 ../e23-governed-meta-intelligence-2026-09-29.attestation.json \
&& python3 verify_e23.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (218/218 checks)
mkdir -p e21-open-ended-intelligence-2026-09-29 && cd e21-open-ended-intelligence-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e21-open-ended-intelligence-2026-09-29.json", "../e21-open-ended-intelligence-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e21-open-ended-intelligence-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e21-open-ended-intelligence-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e21-open-ended-intelligence-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e21-open-ended-intelligence-2026-09-29 ../e21-open-ended-intelligence-2026-09-29.attestation.json \
&& python3 verify_e21.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (179/179 checks)
mkdir -p e20-agentic-institutions-2026-09-29 && cd e20-agentic-institutions-2026-09-29
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e20-agentic-institutions-2026-09-29.json", "../e20-agentic-institutions-2026-09-29.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e20-agentic-institutions-2026-09-29.attestation.json"))["files"])
for f in names:
get(E + "e20-agentic-institutions-2026-09-29/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e20-agentic-institutions-2026-09-29/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e20-agentic-institutions-2026-09-29 ../e20-agentic-institutions-2026-09-29.attestation.json \
&& python3 verify_e20.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }— published result: INTACT (117/117 checks)
mkdir -p e19-governed-autonomy-2026-09-28 && cd e19-governed-autonomy-2026-09-28
python3 - <<'PY'
import json, time, urllib.request
def get(url, dest): # retries: a busy host can drop a request
for i in range(4):
try:
return urllib.request.urlretrieve(url, dest)
except Exception:
if i == 3:
raise
time.sleep(2 * (i + 1))
E = "https://cainstudio.online/proof/bundle/"
# The publisher attestation lists every published file and is signed by the pinned CAIN key.
get(E + "_publisher/e19-governed-autonomy-2026-09-28.json", "../e19-governed-autonomy-2026-09-28.attestation.json")
get(E + "_publisher/verify_publisher.py.txt", "../verify_publisher.py")
names = sorted(json.load(open("../e19-governed-autonomy-2026-09-28.attestation.json"))["files"])
for f in names:
get(E + "e19-governed-autonomy-2026-09-28/" + f, f)
try: # served pages are not attested (site chrome is injected), but some verifiers check index.html
urllib.request.urlretrieve(E + "e19-governed-autonomy-2026-09-28/index.html", "index.html")
except Exception:
pass
print("downloaded the bundle:", len(names), "files")
PY
python3 -m pip install --quiet cryptography 2>/dev/null || true
python3 ../verify_publisher.py ../e19-governed-autonomy-2026-09-28 ../e19-governed-autonomy-2026-09-28.attestation.json \
&& python3 verify_e19.py.txt . \
&& echo "VERIFIED: published by the pinned CAIN key, and internally INTACT" \
|| { echo "NOT VERIFIED: do not trust this bundle"; false; }Newest published bundle: bft-ip-forensics-2026-10-05. Every bundle is also mirrored on the other two sites so the same verifier runs against an independent copy.
External grading package (reviewer entry point)
FIRME AI CORPORATION // SALESMAN'S OFFICE // VICENTE NORIEGA · SALESMAN #1
This is Vicente Noriega's sales office. Fifteen governed agents scan the live internet every 15 minutes for buyers and paid work; every scan passes CAIN authority, a capability token and a host allowlist, and every run writes a hash-chained evidence receipt. Vicente sends every message, runs every demo and signs every deliverable. 260 opportunities, 160 AI-agent money models, and 567 tools are on the floor.
Loading…
Keys: s shift · / search · r spin · 1–7 decks
CAIN-42 SALES OFFICE · VICENTE NORIEGA · SALESMAN #1
Audits, signed evidence, proved fixes, working automations, licensed engines. Every product has a live demo, a price, a buyer and a proof surface. No invented customers, no fake logos, no revenue claims.
Loading the price book…
Pipeline lives in this browser. Add leads from a gig, a money model or a product card.
Paste one MCP tool definition and run the actual deterministic scanner. Use it on a sales call; the paid work is the fix and the re-scan.
/mcpgate-keystone/scan-source. No model is needed for the verdict.Loading the technology catalog…
Breadth catalog, not a promise. SELL = live route/proof and a clear buyer. USE = works inside paid delivery. BUILD = parts exist, needs assembly. PARTNER = needs a license, credential or partner. No customer logos, no revenue claims.
The proposal and invoice generators live in the Workbench deck. They are already wired and copy-ready.
Start an instant meeting, share the demo tab, record it, send the signed follow-up.
This page does not host the call. It opens your own Zoom, builds the deck, and keeps the demo, the proof and the follow-up one click away.
Status is honest: live works with no account; wire needs a key, OAuth grant or paid plan. Tick “wired” only when it is actually connected.
Loading…
Each source has its own capability and host allowlist. A failure is shown, never hidden.
Loading the money map…
Loading…
Ideas, not results. Demand found = a public demand signal exists; Untested = no evidence yet. Your statuses stay in this browser.
No email is sent by this site. “Open Gmail” opens a pre-filled draft in your own account; “Mail client” uses your default mail app. “Mark sent” records the touch and schedules a day-4 follow-up.
Loading…
Sell now = live-tested with a buy link. Use in paid work = works live. Needs work, Ideas and Never sell are listed so nothing fake gets sold.
Edit a product photo, make a LinkedIn/YouTube/Story card, grab a cover frame from a demo video, or trim a sales clip. Nothing uploads to a server: the image and video stay in this browser tab.
1200 × 627 · LinkedIn post
No video loaded.
Templates draw a neon card with your headline and subline. Add a product photo on top with “Load photo”, or export the card as-is.
No account is connected here. The button downloads the asset, copies the caption, and opens the platform's own composer. Attach the file and post. Nothing is auto-posted.
This is enforcement, not a badge: no kernel ALLOW → no scan; no signed capability → no scan; an out-of-scope URL is blocked before a socket opens, including redirects. Every run writes a receipt that a third party can verify offline.
Cron: */15 * * * * deploy/cain-army/workstation-hourly.sh
Download the receipt files and run the independent verifiers. They import no CAIN code and recompute the hash chain and Ed25519 signatures from the published kernel key.
python3 scripts/workstation/verify_governance.py
python3 scripts/workstation/verify_operator.py
workstation-governance.json · workstation-operator.json · workstation-roster.json
FIRME AI CORPORATION // COMMAND CENTRE // 2026-11-01
Six fixed-price offers built from engines that already run. Agents find and qualify; Vicente sends and signs. Every deliverable is signed, hash-chained and verified by its own bundle before it leaves the building.
python3 -m cain_audit.cli sell # agents + cockpit
python3 -m cain_audit.cli selftest # all six products, verified
python3 -m cain_audit.cli products # the price book
python3 -m cain_audit.cli deliver insurance-brief --payload in.json --client "Acme"
FIRME AI CORPORATION // AGENT FACTORY // 24/7
The agents watch every platform around the clock, draft posts and replies from our evidence pages, and publish only what Vicente approves here. Spawn more agents with one click; pause, run or remove any of them live.
Public view shows status only. Press 🔑 OPERATOR KEY to see drafts, approve, spawn and control agents.
Spawned agents share your accounts, so the per-account caps on each platform card decide how much actually goes out, and every draft waits for your approval. That is what keeps the accounts from being flagged as spam.
FIRME AI CORPORATION // CORPORATE OFFICE AGENTS
Agents search live federal grant listings, score the fit with their reasons, draft application starters from the corporation's own records, and keep the corporate to-do list and deadlines. A person signs and submits: agents never apply, file, borrow or send.
Enter the operator key to see the corporation's opportunities, tasks and agents.
Loading the 40 challenges…
FIRME AI lead fleet · 50 scouts · hourly
Fifty deterministic scouts read public sources every hour, check the link, dedupe, score, and route each lead to one of the three products: Agent Safety Evidence Pack ($1,500), MCP / Agent Security Review ($2,500), or Fix + Prove ($500–$2,500). The queue is private: paste the operator key once and this browser remembers it.
Controlling autonomous AI agent swarms WITHOUT PROMPTS. In autonomous execution channels (MCP, shell commands, databases, financial settlements), conversational prompts fail. In this demo each agent action goes to three live CAIN engines: CODEGUARD (shell actions, signed receipt), the swarm-collusion graph check (agents cannot vote themselves authority; Ed25519 receipt checked in your browser) and the SPEND GOVERNOR breaker (real trip). Times shown are measured by the server. The fleet kill-switch API is admin-only and is not called from this public page.