A wallet your AI agent can't run away with.

Put tokens in a locker on Robinhood Chain. Your agent gets a key that can only swap between them, inside limits the contract enforces on every trade.

See the four checks
1function an agent key can call: trade()
0%protocol fee at launch, capped at 0.2% in the contract

Worst day if the agent goes rogue

%

Worst day

-

Bad prices are all a rogue key can leak: it cannot withdraw, send or approve. Market moves are capped by the drawdown stop.

Open a locker
  • Swap only

    The agent key can call trade() and nothing else. No withdraw, no transfer, no approve.

  • Chainlink floor

    Every swap must return at least the oracle price less your max slippage, or it reverts.

  • One-tap exit

    exit() pauses every agent and sends every token back to you in one transaction.

One key for the agent. Four checks on every trade.

Your agent says

Agent keycan call trade() on this locker, nothing else
The locker checks Ready
    Pick a request to see what the locker does.

    Daily allowance

    tradeleft today

      Drawdown stop

        Every token a locker can hold, priced by Chainlink.

        WETH, USDG and the Robinhood stock tokens that have a Chainlink feed.

        tokenChainlink price

          Set it up in three steps.

          One transaction opens the locker. The agent keeps its own key; you keep the owner key.

          1. Open a locker

            Pick the tokens it may hold (WETH, USDG and up to 10 stocks), set a drawdown stop and send a first deposit in ETH. One transaction.

            Open a locker
          2. Paste the agent's address

            On the agent's machine, init prints a fresh agent address. Paste it with its limits: per trade, per day, max slippage, expiry.

          3. Add the MCP to Claude

            One config block with your locker address. The agent then quotes and trades through five tools, and the locker checks each swap.

            LOCKER_VAULT=0x...

          What the agent can do, and what it cannot.

          Read straight from the contract. There is no admin switch that widens an agent's key.

          The agent can

          • Swap between the locker's listed tokens through Uniswap v3, with the output landing back in the locker.
          • Quote first. preview() tells it the floor the locker will demand and why a trade would be refused.
          • Trade within its limits: a dollar cap per trade and per UTC day, valued at Chainlink.
          • Use the gas you send it with the grant, and only for its own transactions.

          The agent cannot

          • Withdraw, transfer or approve. Only the owner can take anything out.
          • Touch a token you did not list, or route the output anywhere but the locker.
          • Sell below the Chainlink floor. A pushed pool or a bad route makes the swap revert.
          • Keep trading past the stop, after expiry, after you pause, or after you revoke it.

          Pull everything out in one tap.

          The panic button is exit(). It needs no price feed and no agent, so it works when everything else is down.

          Pull everything out

          exit(owner)
          1. Pauses every agent in the same transaction.
          2. Sends the whole balance of every listed token to your wallet.
          3. Skips a token that refuses the transfer, so one broken token cannot hold the rest.
          Pull everything out

          In the app it asks you to confirm first.

          The whole agent setup is one block.

          Your locker address goes in LOCKER_VAULT. The agent key stays on the agent's machine; the owner key stays in your wallet.

          
                  

          Questions, briefly.

          Who holds the keys?

          You hold the owner key in your own wallet: it alone can deposit, withdraw, list tokens, set limits and exit. The agent holds a separate key made on its own machine, which can only call trade(). Nobody else has a key to your locker.

          What happens over weekends?

          Chainlink stock feeds stop when markets close. The locker accepts a feed answer up to the max age you set (4 days for stocks by default, 2 days for dollars and ETH). Older than that, trades in that token are refused until the feed updates. Withdrawals and exit never need a feed.

          Are there fees?

          The factory admin can set a protocol fee of at most 0.2% of each agent trade, paid in the input token. It starts at 0, and the cap is written into both contracts. Deposits, withdrawals and exit carry no fee. You pay Robinhood Chain gas.

          Is it audited?

          No. The contracts have unit tests and a fork test against the real Uniswap pools and Chainlink feeds, but no audit. There is no upgrade path, so what you see on chain is what runs. Start small.

          What is the worst a rogue agent can do?

          About its daily limit times its max slippage per day, leaked to bad prices. It cannot move tokens out. If prices fall against what it bought, the drawdown stop halts every agent once the locker's unit price drops below your limit.

          Which agents work with it?

          Anything that speaks MCP: Claude Desktop, Claude Code and other MCP clients. A plain script can call trade() directly with the agent key; the locker runs the same checks.

          Who picks the price feeds?

          The owner does, when listing a token. The app proposes the official Chainlink feed for WETH, USDG and each stock token. The board ranks only lockers whose every feed is the known one, since an owner could list a fake feed.

          Can I have several lockers or agents?

          Yes. Open as many lockers as you like, each with up to 12 tokens and 16 agents, each agent with its own limits.