Agent spend-control · 0G + Privy

Keep your agents on a leash.

Give an AI agent its own wallet, then bound it: a per-transfer cap it cannot raise, an allowlist it cannot widen, and one on-chain write that cuts it off everywhere.

Simulated. The real leash lives in the console.

DENY
agent · 0xA91f…3e · research-agentslack 62% · cap 0.01 0G / transfer
The problem

This already went wrong for other people.

In January 2026, ungoverned trading agents at Step Finance moved 27 to 30 million dollars. A prompt injection drained roughly 150 to 200 thousand dollars from Grok and Bankr users after a guardrail was silently rewritten. The lesson is simple.

Instructions don't survive a clever prompt. Contracts do.

So LEASH puts the boundary where prompts can't reach it: enforced on-chain, not by a system prompt the agent can be talked out of.

The console, live

You watch every move it makes.

This isn't a screenshot. It's the real console chrome, breathing — a fleet card whose tether tautens as spend nears the cap, and a verdict stream adjudicating each transfer in real time. The same approval card reaches you on your phone, through the LEASH Telegram bot.

  • The tension meter is the budget — slack when there's room, taut near the cap.
  • Every verdict flashes in once, jade for allow, garnet for deny — then rests.
  • One cut revokes it on-chain, everywhere a rail resolves the record.

Simulated console. The real one, with your fleet, lives behind sign-in.

FleetLIVE · rail settling
research-agent
0xA91f…3e
Active
slack 62%$188 / $500 today
reasoning over the rail…
Allowapi.exa.ai$4.20
Deny0x9c…f1 · off-list$240.00
Allowapi.openai.com$12.80
How the leash holds

Three bounds it cannot loosen. One cut you can make.

The policy lives in a contract on 0G Chain. The contract checks it before every settle. The agent signs — it never sets.

CAP

A ceiling it can't raise

Per-transfer, daily and weekly caps are fields in the policy contract on 0G Chain. The contract reads them, compares, and settles only within them.

MAX_PER_TRANSFER = 0.01 0G · MAX_WINDOW = 0.05 0G
ALLOWLIST

A reach it can't widen

Funds only move to payees the owner added. The agent has no path to extend its own allowlist.

REVOKE

One write that cuts it off

Revoke is a single on-chain write. Every rail resolving that record stops honoring the agent — at once.

HONEST BOUNDARY

What the leash actually is

Control, not custody. Caps are a soft budget the rail enforces on settle; the allowlist defaults so the agent can't widen its own reach; revoke is on-chain-resolved. It is not a trustless vault — it's a leash you hold and can cut.

REFUSED

Refused. Over the per-transfer cap.

The contract held. You didn't have to be awake.

REVOKED

Revoked in one move.

The record stays: hash-chained, yours alone.

Live rail

Every move, adjudicated.

Allow or deny, with the reason and the on-chain receipt. This is what the rail writes as your fleet spends.

Verdict stream · livesettled today $1,284
Allowsupabase-agent → api.stripe.comsettled$18.000x51a2…
Denyscraper-agent → 0x9c…f1OFF_ALLOWLIST$240.00—
Allowresearch-agent → api.exa.aisettled$4.200xb2c0…
Denyops-agent → api.render.comOVER_DAILY_CAP$620.00—
Allowresearch-agent → api.openai.comsettled$12.800x7c9d…

Stream simulated. The contracts enforcing it are real, on 0G Galileo testnet:AgentRegistry ↗LeashAccountFactory ↗a live revoke ↗— both Sourcify-verified.

By the numbers

The whole guarantee, in three figures.

0.01 0Ghard per-transfer cap the agent cannot raise
1on-chain write to revoke, everywhere
0ways an agent widens its own reach

When you're done, you cut it.

LEASH · keep your agents on a leash0G Chain · 0G Compute · 0G Storage · Privy