A stolen key can't drain it
We took the real agent key and tried to break the vault. Every attack reverted on-chain with a named error.
Running on HashKey Chain testnet
Flow lets an AI agent trade on HSKSwap by itself. Your money sits in a vault contract that checks every trade, so a bad prompt or a stolen key can't cost more than the limits you set.
Desktop apps for macOS and Windows are coming soon. Testnet today, mainnet next.
Default limits, enforced on-chain. The $51.50 bound is for both vaults together and covers every trade path while the Supra price feed is live. Price moves on what the vault holds are handled by the stop-loss, not the contract.
Give the agent a hot wallet and hope.
Put the money in a vault that checks every trade.
What you get
We took the real agent key and tried to break the vault. Every attack reverted on-chain with a named error.
≤ $51.50
The most bad trades can cost across both vaults in one UTC day, on every path, while the Supra price is live. That's $25.75 per vault.
Tell it what you want. Tightening applies at once; loosening asks you first.
Trades, skips and vetoes go into a hash-chained journal. Each trade puts its reason hash on-chain and gets an EAS attestation, so anyone can match what happened to why.
The guardian key lives off the agent's machine. It pauses the vault in one transaction. Only the owner can unpause.
Flow speaks MCP. Our trader runs on Claude; any MCP agent can use the same tools.
Apache-2.0. The vault contract has 148 tests and fuzzed invariants, and the deployed source is verified on Sourcify.
148 tests
How it works
Flow deploys one vault per market (WHSK/USDT and WBTC/USDT) and you fund it. You choose the per-trade, per-day and exposure caps. The owner and guardian keys stay on your own devices, never on the agent's machine.
Flow watches the HSKSwap pools, the Supra price and the HashKey Global order books, and lines up candidate trades. The agent picks one, sizes it down or skips. The vault checks the trade on-chain and swaps on HSKSwap. The output stays in the vault.
Every decision lands in the journal with its reason. Trades carry the reason hash on-chain and an EAS attestation. Stop-loss and take-profit run without asking the model, and you can pause any time.
Proof, not promises
These are real transactions on HashKey Chain testnet (chain 133) with test tokens, from 2 Nov 2026. Nobody else trades the test pools, so we moved two pool prices with our own swaps to create a gap; rows that depend on that say “staged”. Mainnet is next.
Same source on both, verified on Sourcify (HSK, BTC). limits() reads $100 / $250 / $150.
0x4ff2…9c0d0x1f04…98f80xfb0a…695bThe trade event carries the journal record hash; the attestation repeats it.
TradeCapExposureSlippagePairNotAllowedNotOwnerNotOwnerEach link opens a failed transaction from the agent key, with the decoded error.
Use cases
Three people Flow is built for. These are use cases, not quotes from customers.
You built a trading agent and want to leave it running overnight. Connect it to Flow's MCP server. It gets candidates, quotes and an execute tool, and the vault decides what's allowed.
You want to know the worst case before you fund anything. Set the caps once. A bad prompt or a stolen key can't go past them, and you can pause from another device.
You need to check what happened and why. Each trade's ID matches a journal record, its reason hash is in the event, and an EAS attestation ties them together.
Flow runs on your computer. macOS and Windows apps are coming soon.