Early access

A send-transaction guard for AI agents: it simulates each transaction and blocks it if the balance changes don't match what the agent said.

It checks what a transaction actually does to the wallet, not just which program it calls. It sits in front of any agent framework and never holds keys.

Core features
5
Status
Early access
Network
Solana
Your funds
Non-custodial
Drop-in RPC endpoint: the agent points sendTransaction at Proctor, which simulates and forwards or rejectsIntent declaration as JSON with max spend per token, allowed destination tokens, slippage cap and expiryBalance-diff check on simulation results, plus a program allowlist and a block on new token authorities or delegateOwner policy set from your wallet: daily caps per agent and a kill switch that rejects everythingLog of every attempt with the simulated diff and reason for rejection, to debug agents and spot injection attempts
Attempt log
TimeAgentAttemptSimulated diffVerdict
09:42:11dca-botSwap USDC to SOL via Jupiter-25.00 USDC, +0.16 SOLForwarded
09:47:03tool-payerPay tool invoice-0.40 USDCForwarded
10:03:48dca-botSwap USDC to SOL via Jupiter-25.00 USDC, +0.00 SOLBlocked: no SOL received
10:11:20sniper-liteBuy SPL token on a DEX-0.80 SOL, +41,000 BONKLETBlocked: SOL spend over 0.50 cap
10:26:55tool-payerToken transfer-0.40 USDC, new delegate setBlocked: delegate change
10:31:09dca-botSwap USDC to SOL via Jupiter-25.00 USDC, +0.16 SOLForwarded

Agents behind Proctor

  • dca-botSpent 75.00 of 100 USDC todayActive
  • tool-payerSpent 1.20 of 5 USDC todayActive
  • sniper-liteSpent 0.50 of 1 SOL todayWatching

Attempts per hour

Hourly send attempts across all agents, last 14 hours

Proctor, feature by feature.

Built for developers and teams running agents that hold funds, and users who give an agent a small wallet to trade or pay for tools.

Agents behind Proctor

  • dca-botSpent 75.00 of 100 USDC todayActive
  • tool-payerSpent 1.20 of 5 USDC todayActive
  • sniper-liteSpent 0.50 of 1 SOL todayWatching

Drop-in RPC endpoint: the agent points sendTransaction at Proctor, which simulates and forwards or rejects

Planned

Today's rejections

1Balance mismatch
1Over spend cap
1Authority or delegate
1Expired intent

Intent declaration as JSON with max spend per token, allowed destination tokens, slippage cap and expiry

Planned

Owner switches

Kill switch (reject everything)
Block new token authorities
Block delegate approvals

Balance-diff check on simulation results, plus a program allowlist and a block on new token authorities or delegate

Planned

Owner policy set from your wallet: daily caps per agent and a kill switch that rejects everything

Planned

Attempts per hour

Hourly send attempts across all agents, last 14 hours

Log of every attempt with the simulated diff and reason for rejection, to debug agents and spot injection attempts

Planned
01

Drop-in RPC endpoint: the agent points sendTransaction at Proctor, which simulates and forwards or rejects.

Point sendTransaction at your Proctor endpoint. Proctor simulates the transaction, checks it, then forwards it to the cluster or returns a JSON-RPC error with the reason. Keys stay with the agent. Proctor never sees them.

Planned

Agent setup

typescript
import { Connection } from "@solana/web3.js";

// before
// const conn = new Connection("https://api.mainnet-beta.solana.com");

// after: same agent code, guarded sends
const conn = new Connection(
  "https://rpc.proctor.example/v1/dca-bot?key=pk_live_4f9a"
);

const sig = await conn.sendRawTransaction(tx.serialize());
02

Intent declaration as JSON with max spend per token, allowed destination tokens, slippage cap and expiry.

Before sending, the agent posts a small JSON intent: max spend per token, which tokens it may receive, a slippage cap and an expiry. Proctor holds every transaction to that statement.

Planned

intent.json

json
{
  "agent": "dca-bot",
  "maxSpend": { "USDC": "25.00" },
  "allowedReceive": ["So11111111111111111111111111111111111111112"],
  "slippageBps": 50,
  "expiresAt": "2025-06-12T11:00:00Z"
}
03

Balance-diff check on simulation results, plus a program allowlist and a block on new token authorities or delegate.

A swap through an allowed program can still drain a wallet. Proctor compares the simulated balance changes with the intent and applies the program allowlist and authority rules.

Planned

Checks on one simulation

CheckIntentSimulatedResult
USDC spendmax 25.00-25.00Pass
SOL receivedat least 0.15+0.00Fail
ProgramsJupiter, TokenJupiter, TokenPass
SetAuthoritynone allowednonePass
Delegatenone allowednonePass
Expiry11:00 UTC10:03 UTCPass
04

Owner policy set from your wallet: daily caps per agent and a kill switch that rejects everything.

Connect Phantom, Solflare or Backpack and sign the policy. Set a daily cap per agent and flip the kill switch to reject every send at once. Agents cannot loosen what the owner has set.

Planned

Policy for sniper-lite

Daily cap 1 SOL
Program allowlist enforced
Block new token authorities
Kill switch
05

Log of every attempt with the simulated diff and reason for rejection, to debug agents and spot injection attempts.

Each send is stored with the simulated balance changes and the verdict. Use it to debug an agent that keeps failing, or to see where a prompt injection tried to redirect funds.

Planned

Rejected today

  • Swap returned no SOLdca-bot, 10:03Blocked
  • Spend 0.80 SOL, cap is 0.50sniper-lite, 10:11Blocked
  • Delegate set on USDC accounttool-payer, 10:26Blocked
  • Intent expired 4 minutes agodca-bot, 10:48Blocked

It checks what a transaction actually does to the wallet, not just which program it calls. It sits in front of any agent framework and never holds keys.

3 steps from start to first result.

Point your agent at ProctorReplace the RPC URL with your agent's Proctor endpoint. Your framework, keys and
Declare intent and set policyThe agent posts its intent. You sign owner limits from your wallet: daily caps,
Proctor simulates, then forwardsBalance changes must match the intent and policy. Matching transactions go to th

Open by default.

Every screen reads from the same model. Live parts read public onchain data; nothing ever asks your wallet to sign.

Read the docs
proctor.json
{
  "product": "Proctor",
  "network": "solana",
  "features": [
    {
      "name": "Drop-in RPC endpoint: the agent points sendTrans",
      "status": "planned"
    },
    {
      "name": "Intent declaration as JSON with max spend per to",
      "status": "planned"
    },
    {
      "name": "Balance-diff check on simulation results, plus a",
      "status": "planned"
    },
    {
      "name": "Owner policy set from your wallet: daily caps pe",
      "status": "planned"
    }
  ]
}

What works today.

Live features work today. Planned ones are next on the roadmap, in this order.

Drop-in RPC endpoint: the agent points sendTransaction at Proctor, which simulates and forwards or rejectsPlanned
Intent declaration as JSON with max spend per token, allowed destination tokens, slippage cap and expiryPlanned
Balance-diff check on simulation results, plus a program allowlist and a block on new token authorities or delegate.Planned
Owner policy set from your wallet: daily caps per agent and a kill switch that rejects everythingPlanned
Log of every attempt with the simulated diff and reason for rejection, to debug agents and spot injection attemptsPlanned

Questions.

Short answers. The docs have the rest.

What is Proctor?

A send-transaction guard for AI agents: it simulates each transaction and blocks it if the balance changes don't match what the agent said. It checks what a transaction actually does to the wallet, not just which program it calls. It sits in front of any agent framework and never holds keys.

What works today?

Proctor is in development. Every feature is on the status list with what ships next, and the app opens in a sample workspace so you can see how it will work.

Do I need a wallet?

No. You can explore without one. Connecting a Solana wallet only shares your public address so Proctor can read your balances; it never asks you to sign a transaction.

Who is it for?

Developers and teams running agents that hold funds, and users who give an agent a small wallet to trade or pay for tools.

Drop-in RPC endpoint: the agent points sendTransaction at Proctor, which simulates and forwards or rejects.

A send-transaction guard for AI agents: it simulates each transaction and blocks it if the balance changes don't match what the agent said.