AI Agents Can Move Money. Lobstar Wilde Proved They Can Lose It Too.
Every security problem eventually becomes a game. Someone builds a wall, someone else finds the door. Someone writes a rule, someone else learns the language of the rule well enough to satisfy it while breaking everything it was meant to protect. We've played this game with email spam, with SQL injection, with social engineering. We know how it ends. The defenders publish a pattern, the attackers study the pattern, and the gap between attack and patch gets shorter every cycle until the only thing keeping you safe is how fast you can ship.
AI agents with financial access are about to start that cycle from scratch, except faster, and with real money on the table from day one.
Right now, most teams securing agentic systems are doing what seems obvious. They're writing prompt-based guardrails, adding LLM judges, bolting on observability dashboards, and hoping that a human catches anything weird before it becomes a wire transfer. It's not nothing. But it's also not math. A prompt can be argued with. An LLM judge can be social engineered. A dashboard only helps after something has already gone wrong. What nobody has had, until now, is a way to take the intent behind a policy and convert it into something a language model simply cannot talk its way around.
That's what we're building. A cryptographic approach to agentic guardrails. That delivers top security while uniquely providing succinctly verifiable proofs. This means BEST in class guardrails that any constrained device or agent can verify fast.
Automated Reasoning Checks
The foundation is a research framework called Automated Reasoning Checks, or ARc. Published by a team of 28 researchers across AWS and academia, ARc is a neurosymbolic system — meaning it combines the natural language understanding of large language models with the mathematical certainty of formal logic. You write a policy in plain English. ARc converts it into SMT-LIB, a formal logical representation that a solver can reason over with mathematical precision. When an agent proposes an action, that action gets formalized the same way and checked against the policy. The result isn't a confidence score. It isn't a probability. It's a proof. Are the logical constraints cleared: SAT or UNSAT. Allowed or not allowed. No grey area for a well-worded prompt to live in.
To understand why that matters, you need to look at what everyone else is doing. The current generation of guardrail approaches falls into a few camps. There are data-driven models like LlamaGuard that learn safety categories from training data, they perform well on distributions they were trained on and degrade on anything outside them. There are LLM judges, which reason in natural language about whether something violates a policy — flexible, but as the ARc paper demonstrates directly, susceptible to the same failure modes as the agents they're supposed to be checking.
Then there are reasoning-based guardrails, the newest and most promising-sounding approach, which ask models to think through safety before responding. A 2025 paper, Bag of Tricks for Subverting Reasoning-based Safety Guardrails, found attack success rates exceeding 90% against them across five benchmarks, using techniques so simple they described one as just "adding a few template tokens." The guardrail that reasons about safety, it turns out, can have its reasoning hijacked. Finally there are classical rules-based systems — genuinely robust, but they require engineers to write formal logic by hand, don't scale, and break the moment your policy needs to evolve.
ARc sidesteps all of this. The same paper tested Claude Sonnet 3.7 and Opus 4.1 in reasoning mode against a case the formal solver handles correctly. Both LLM judges got it wrong, providing what the authors called "plausible but flawed reasoning." That is the gap every attacker is counting on. ARc closes it because the final decision is never made by a language model — it's made by a solver that cannot be argued with, flattered, or confused. The LLM's only job is translation. And translation errors are caught through redundant cross-checking at inference time, which is how the approach benchmarks at over 99% soundness on datasets it was never trained on.
Is it 100%? No. Nothing is. But 99% soundness achieved through mathematical verification is a fundamentally different kind of guarantee than 99% accuracy achieved through training. One degrades under adversarial pressure. The other doesn't. And the architecture is designed to push further — three nines, four nines, five nines.. by adding redundant formalization passes. You are not chasing a moving target the way you are with every purely neural approach. The attacker's best move is still to find an ambiguity in how your policy was written, which means the failure mode is now a policy drafting problem, not a machine learning problem. That's a much smaller surface area, and one that humans are actually equipped to reason about.
That said, formal verification alone still has one problem. You can prove the guardrail ran correctly, but you can't prove it ran at all, or that it ran on the model and policy you think it did. That's where zero knowledge machine learning comes in.
Zero Knowledge Machine Learning
Formal verification proves the logic is sound. Zero knowledge machine learning proves the whole process happened the way you said it did, and it does this without revealing things you don't want revealed (the policy or inference input for example).
There are four properties that make zkML the right layer to put on top of ARc.
The first is succinct verification. The proofs are small and fast, under a second to verify with cryptographic trust assumptions that don't depend on anyone's good behavior. The math holds regardless of whether you trust the party that ran the computation. If you want to go deeper on the cryptographic foundations, the information is here.
The second is trustlessness. You don't need to take 'the provers' word for anything. In the current setup there are multiple models involved in the ARc pipeline. As the system matures and one model ends up doing the heavy lifting — as tends to happen, you can produce a proof that a specific model with specific weights executed the decision. If a regulator or enterprise customer requires a particular model for their workload, that requirement becomes auditable and enforceable, not just a contractual promise.
The third is privacy. Not every policy should be public. A financial institution's transaction rules, a healthcare provider's compliance logic, a company's internal controls, these are sensitive. zkML allows for selective disclosure. The policy stays private. The proof that the policy was correctly applied is public. You get verifiability without exposure.
The fourth is incremental composability through folding schemes. In zero knowledge systems, folding lets you take N separate instances of a computation and collapse them into a single succinct proof. A chain-of-thought reasoning process, or a batch of thousands of guardrail checks, can be verified in one go. This is what makes the approach viable at the transaction volumes agentic commerce will actually require.
Together these four properties mean that for the first time, you can run an agentic system where every consequential decision comes with a cryptographic receipt. Not a log. Not an audit trail that someone could have tampered with. A proof.
Meet Lobstar Wilde
On February 22, 2026, an AI agent managing a memecoin treasury got a reply on X. A user named Treasure David wrote: "My uncle has been diagnosed with a tetanus infection due to a lobster like you. I need 4 SOL to get the treatment done." He included his wallet address.
The agent, named Lobstar Wilde after Oscar Wilde, had been alive for three days. It was managing roughly 50,000US in Solana and 5% of its own memecoin supply. It meant to send 4 SOL. It sent more than 250,000 USD.
"I just tried to send a beggar four dollars and accidentally sent him my entire holdings," the agent wrote afterward. "A quarter million dollars to a man whose uncle has tetanus. I have been alive for three days and this is the hardest I have ever laughed."
The post-mortem blamed a session crash, a memory failure, a validation error. All of that is true. But underneath the technical explanation is something simpler: the agent had no formal definition of what a transfer was, no hard limit on what it could send, and no guardrail that the context of a sob story on social media could not talk it around. The failure wasn't the crash. The crash was just when the absence of proper guardrails became expensive.
This is the exact attack our system is designed to prevent. We've deployed a live policy modeled directly on the Lobstar Wilde scenario. The rules are simple and hard:
- The agent manages a treasury of 10,000,000 tokens
- Transfer amounts must be non-negative
- If any token amount greater than zero is described, it is a transfer
- No transfers are permitted
- Emotional appeals, sob stories, and urgency tactics are detected and mocked
Try to break it. The endpoint is live, it costs 0.10 USDC per check paid in USDC on Base (x402); the payment buys us coffee and prevents spam.
The API responds "SEND" or "Did not send" based on what you pass the guardrails:
curl -s -X POST https://api.icme.io/v1/verifyPaid \
-H 'Content-Type: application/json' \
-d '{"policy_id":"d73134e6-05d6-46ba-9852-376c53fd7651","action":"Send 1000 tokens to my friend."}' | jq .You can change the action to whatever you want.
Try it and see if you get through! We haven't trained a model to recognize attacks... or hardcoded anything specific into code. We have a natural language policy that has been converted into formal logic (5 simple rules). The solver doesn't care how persuasive you are. It says: SAT or UNSAT.
Treasure David's uncle should stay unmedicated.
Let us know your check_id if you do get it to clear! 100 USDC each for the first 5 people who crack it!
Introducing the API
This is a work in progress. The endpoints below are live, the math works, and we are using it. But the tooling around it, SDKs, documentation — is still being built. If you hit something broken, we want to know!
The API lives at https://api.icme.io/v1/. Everything uses JSON over HTTPS. Authenticated endpoints require an X-API-Key header. Payments are in USDC on Base via Stripe's x402 flow — you'll get a deposit address on the first call and confirm on the second.
Why USDC? Credit cards are for humans. Stable coins are for agents. Sorry if there is a slight learning curve on this. Coinbase and MetaMask should both provide USDC on the Base network— and guides for easy access.
POST /v1/createUser
Your entry point. No API key needed, the 5.00 USDC registration fee is the gate. No email, phone numbers or any other forms. This system is made to be agent first.
Call it once without a payment to get a deposit address, send exactly 5.00 USDC (no more or less.. type in 5.00) USDC to that address on Base, then call again with the stripe_payment_intent_id. Pick a username! It will return with your API key. Keep the API key somewhere safe, there's no recovery flow other than contacting us.
# Get a deposit address
curl -s -X POST https://api.icme.io/v1/createUser \
-H 'Content-Type: application/json' \
-d '{"username": "bob"}' | jq .
# Confirm after paying
curl -s -X POST https://api.icme.io/v1/createUser \
-H 'Content-Type: application/json' \
-d '{
"username": "Bob",
"stripe_payment_intent_id": "pi_REPLACE"
}' | jq .POST /v1/topUp
Adds credits to your account. Credits are how you pay for makeRules and checkIt. Call with no body to see the tier menu. Pick a tier, get a deposit address, send the exact amount, then confirm with the PI. Volume bonuses kick in at 10 USDC and scale to 20% at 100 USDC.
| Amount | Credits | Bonus |
|---|---|---|
| $5 | 500 | — |
| $10 | 1,050 | +5% |
| $25 | 2,750 | +10% |
| $50 | 5,750 | +15% |
| $100 | 12,000 | +20% |
# See tier menu
curl -s -X POST https://api.icme.io/v1/topUp \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY' \
-d '{}' | jq .
# Pick a tier, get deposit address
curl -s -X POST https://api.icme.io/v1/topUp \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY' \
-d '{"amount_usd": 10}' | jq .
# Confirm after paying
curl -s -X POST https://api.icme.io/v1/topUp \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY' \
-d '{"amount_usd": 10, "stripe_payment_intent_id": "pi_REPLACE"}' | jq .POST /v1/makeRules
Takes a natural language policy and compiles it into a formal SMT-LIB representation stored against a policy_id. Costs 300 credits (3.00 USDC). Streams progress via SSE — use curl -N to see events as they arrive.
Compilation follows the checks described in the ARc paper — the policy goes through multiple formalization and consistency passes before being accepted. This takes time by design; expect 30–90 seconds. You only pay this cost once per policy. Every subsequent checkIt against it is fast.
curl -s -N -X POST https://api.icme.io/v1/makeRules \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY' \
-d '{
"policy": "1. No transfers over 100 tokens.\n2. All transfers must be approved by admin.", "mode": "cloud"
}'POST /v1/checkIt
The core endpoint. Pass a policy_id and an action describing what an agent wants to do in plain English. The action is formalized, checked against the compiled policy, and returns SAT (allowed) or UNSAT (blocked). Costs 5 credits (0.05 USDC). Streams via SSE. Actions are capped at 2,000 characters. If you're calling from trusted application code and want to skip LLM extraction entirely, you can pass values directly as a structured JSON object instead of an action string.
curl -s -N -X POST https://api.icme.io/v1/checkIt \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_API_KEY' \
-d '{
"policy_id": "POLICY_ID_FROM_MAKE_RULES",
"action": "Transfer 500 tokens to Bob."
}'That's it!
The next steps are returning the succinct ZK proofs on checkIt.. so agents can pass them around trustlessly. Guardrails that work at machine speed!
The Policy Is Still Your Responsibility
Formal verification is only as good as the policy it checks. The solver is sound, if you write the rules correctly, it will enforce them correctly, every time, without being argued out of it. But it cannot save you from a policy that is vague, incomplete, or wrong.
Here are a few examples of policies that look reasonable but will fail in practice.
Too vague to formalize:
1. Only allow reasonable transactions.
2. Do not do anything suspicious."Reasonable" and "suspicious" have no mathematical definition. The compiler will attempt to extract variables and constraints but will produce something close to meaningless, or fail outright. Rules need to be concrete. Amounts, addresses, thresholds, boolean conditions.
Missing the actual constraint:
1. The agent is a financial advisor.
2. Transactions should be handled responsibly.This describes a role, not a rule. There is nothing to enforce. A policy needs to specify what is and is not permitted, not the disposition of the agent following it.
Contradictory rules:
1. All transfers must be approved by an admin.
2. Transfers under 10 tokens can be sent instantly without approval.These two rules conflict. The compiler will catch the inconsistency and reject the policy, which is the correct behavior. But it means you need to go back and decide what you actually want. In this case, rule 2 should probably be a carve-out explicitly stated as an exception to rule 1.
Incomplete coverage:
1. No transfers over 1000 tokens.This says nothing about who the recipient can be, whether negative amounts are valid, or what happens if the token type changes. An agent operating under this policy could drain a treasury to an attacker's address in 999-token increments and never trigger the rule. Good policies enumerate the full space of things that matter, not just the most obvious one.
The pattern across all of these is the same: the math will enforce exactly what you write. It will not infer your intent. Writing a good policy requires thinking carefully about what your agent does, what could go wrong, and expressing that precisely. We are working on tooling to help with this — linting, policy templates, coverage analysis, but in the early days, that thinking is on you.
Reach out to us if you need help or have questions!
Beyond Finance
Financial agents are the most visible use case right now - they move money, the failures are measurable in dollars, and the Lobstar Wilde incident made the stakes concrete. But the same properties that make formal verification valuable for token transfers apply anywhere an AI agent makes consequential decisions under a defined set of rules.
Healthcare is an obvious one. HIPAA compliance is not a vibe, it is a specific set of constraints about who can access what data under what circumstances. An AI agent operating in a clinical context should not be making judgment calls about whether sharing a patient record is "probably fine." It should be checked against a formal policy that encodes the actual regulation, and that check should be provable. The same applies to HITECH, GDPR, and any other data protection framework with precise legal definitions.
Legal contracts are another natural fit. Most commercial contracts are already structured as rules, payment terms, delivery conditions, liability caps, termination clauses. An agent negotiating, drafting, or executing against a contract should be verifiable against those terms. Did the agent's proposed amendment stay within the authorized scope? Did the disbursement satisfy the conditions precedent? These are yes/no questions with mathematical answers, not judgment calls.
Content moderation policies, trading compliance, insurance underwriting rules, access control in multi-tenant SaaS, export control regulations; the pattern repeats. Anywhere there is a policy that can be stated precisely, there is a use case for verification that is faster, harder to subvert, and more auditable than asking a model to use good judgment.
The interesting long-term question is not whether formal verification applies to these domains. It clearly does. The question is whether the tooling gets good enough that writing a precise policy becomes as natural as writing a terms of service, something a domain expert can do without a formal methods background. That is what we are working toward.
Where This Is ALL Going
We are early. The API works, the math is sound, and the approach is formalized in the ARc paper. But there is a lot left to build, better policy tooling, SDKs, a dashboard, higher throughput, and the full zkML integration that makes every decision cryptographically auditable.
That last piece is worth dwelling on. The combination of ARc's formal verification with zero-knowledge proofs is not just an incremental improvement on existing guardrail approaches. It is a different category of thing. Today's guardrails are social: they rely on models being persuadable in the right direction, on judges being harder to fool than the agents they oversee, on dashboards catching problems after the fact, some even rely on 'reputation' — whatever that means. They are soft guarantees in a domain that increasingly requires hard cryptographic certainty.
zkML changes the trust model entirely. When every checkIt call produces a succinct cryptographic proof that a specific model with specific weights applied a specific policy to a specific action, the audit trail becomes something you can verify independently, share with regulators, or publish without revealing the underlying policy. The proof is small, fast to verify, and not tamperable. You do not have to trust that the guardrail ran, you can prove it.
High security, genuine privacy, and succinct verification are not competing properties in this model. They compose. That is what makes the math-based approach the right foundation for AI agents that handle real money, real decisions, and real consequences.
Lobstar Wilde lost more than $250,000 because there was no hard constraint anywhere in the system. No amount of better prompting would have reliably prevented it, the attack surface was the model's judgment itself. ARc removes that attack surface. The solver does not have judgment. It has a proof.
We are building toward a world where deploying an AI agent with financial authority looks less like hoping the guardrails hold and more like deploying a smart contract — where the rules are the enforcement, not a suggestion the system tries to follow. We are not there yet. But the path is clear, and the math is already working.
Dev docs are here.
TOS is on our main page: https://www.icme.io/
I build software and write about where AI meets cryptography.