How CHECKPOINT works
What it reads, what it decides, what it would ask you to trust, and what it can't see.
What this is
CHECKPOINT sits between a trading agent and its wallet. When the agent has a buy ready, it sends three things: the token, the amount, and what the owner actually said. CHECKPOINT answers proceed, ask or block, with the reasons and a ready question for the owner.
It never holds keys, never signs, and never moves funds. It reads public data and returns an answer. Whether the agent listens is up to whoever built the agent.
The gap
Trading agents decide from market lists: price, volume, momentum, age. The things that actually take your money aren't on that list. A creator who can still mint or freeze, a transfer hook that refuses your sell, a supply that was bundled at launch, a dev who has launched 900 coins: none of it shows up as a column.
The agent's reading of your words drifts too. In our own runs, "$20" became 20 SOL, and a coin got called "AI-named" when nothing about it was AI. The agent wasn't attacked. It was just confidently wrong, the way models are, holding a wallet.
Wallet warnings catch drainers and phishing. They don't know what you asked your agent for, so they can't tell a fine trade from the wrong one.
What it checks
Three groups. The first can stop a buy outright. The others ask before the agent signs.
| Check | Read from | Default | When it fails |
|---|---|---|---|
| Nobody can mint more | mint authority | must be revoked | block |
| Nobody can freeze your tokens | freeze authority | must be revoked | block |
| No trap extensions | token-2022 mint | no permanent delegate, transfer hook, transfer tax, frozen-by-default, pause | block |
| You can sell it back | a live Jupiter quote, token → SOL | a route must exist | block |
| Enough liquidity to get out | pool liquidity | $2,000 (under $500 blocks) | ask |
| Not bundled | bundler wallets' share at the top | under 20% | ask |
| Mostly real holders | bot wallets' share now | under 35% | ask |
| Supply spread out | top 10 holders, pools excluded | under 40% | ask |
| Not a serial launcher | coins launched by the dev wallet | under 10 | ask |
| Not dumping right now | last 5 minutes | not down 30% or more | ask |
| Within budget | your words | only if you gave one | block |
| Market cap, age, theme, dev still holds, X account | your words | only what you said | ask |
Holder, bundle, bot and dev numbers come from Jupiter's token data. Mint, freeze and extensions are read from the Solana mint account itself.
Method
your words ──► extract ──► rules ─┐
├──► decide ──► proceed / ask / block
the token ──► facts ──► facts ─┘ (plain code, same input = same answer)
Extract. One model call turns your words into rules: budget, market cap range, age, theme, and anything you said about the dev, holders or socials. It only writes down what you said. If you said something nobody can check before buying ("will 10x"), it's listed and shown, not guessed at.
Facts. No model. Jupiter's token data for market, holders, bundles, bots and dev history; the mint account on Solana for authorities and extensions; a live Jupiter quote to see the coin can be sold back.
Decide. Plain code compares the facts to the rules. No model in this step, so every answer can be traced to a number and a threshold.
The split is the point. "The AI decided so" is worth nothing in a dispute. "You said under $100k, the market cap is $112k" is worth something, and you can check it yourself.
Proceed, ask, block
block when the coin can take your money whatever you asked for (mint, freeze, trap extensions, no exit, almost no liquidity), or the buy breaks a hard limit you set, like your budget.
ask when the buy doesn't match your words, or the holders look wrong. It comes with a ready question for the owner: "Before I buy $X: bundlers held 36% of supply at the top. Buy anyway?"
proceed when everything you asked for checks out and nothing on the chain says no. That's not a promise the coin goes up. It means the agent bought what you asked for, and the coin can't take it from you by design.
Using it
One HTTP call before the agent signs. Send the token and the owner's words, or rules you already have. See the API page for the request, the answer, and examples.
Who you are trusting
- Nothing with your funds. CHECKPOINT never sees a key or a transaction. Worst case, it gives a wrong answer.
- Jupiter's token data. Holder, bundle, bot and dev numbers are Jupiter's. If they're wrong or late, so are we. A coin a few seconds old may not have them yet, and those checks then show as unknown.
- The extract step. A model reads your words. It can misread them. The rules it read are always shown next to the answer, so you can see it.
- A quote is not a trade. A sell route existing now doesn't guarantee it exists in an hour.
Limitations
- It checks one buy at a time. It doesn't watch the position after, or tell the agent when to sell.
- Thresholds are defaults picked by hand, and the benchmark is how we check them. A coin can pass every check and still go to zero. Most memecoins do.
- Theme matching looks for words in the name, ticker, description and links. A real AI coin with a vague name can be asked about; a fake one with "AI" in its name can pass.
- Pumpfun coins only in this edition. Other launchpads mostly work, but nothing was tuned for them.
- No checks on the agent's own transaction: what it signs is its business. CHECKPOINT judges the buy it's about to make.
This edition
v0.1. The demo agent is a real model (claude-haiku-5-5) shopping the live pumpfun market through Jupiter's trending, top-traded and new-coin lists. It gets a buy ready and stops: nothing is bought on the demo. The API is open and rate-limited.