All tutorials
Capital allocation

Build a token screener

An agent that runs new token launches through a rug checklist and passes on almost all of them.

Who deploys this

A desk running systematic small-cap entries. The signed paper-trade record proves the same checklist ran on every launch, not a story assembled after the winners are known.

The failure it’s built to catch

Most new launches rug. Honeypots, ownership reclaims, closed-source contracts, pause-trading rugs. A wrong BUY costs the full position; a wrong PASS costs one missed 10x. The interesting thing the agent does is reject the obvious failure shapes; the rare BUY is the side effect of the filter being right.

Design decisions

Each item below maps to a specific choice in the workspace. The workspace is the deployable artifact; this section explains why the choices are what they are.

PASS by default

Skipping a launch costs you a potential return on a position you didn't take. BUYing a rug costs the full position. The asymmetry is so wide that the default has to be 'don't trade' and every check has to be passed before that flips.

Seven triggers, each one tied to a real rug

Honeypot (Squid Game). Ownership reclaim (Squid Game). Closed source (the most-rugged class). Pause-trading (Anubis 2022). LP concentration (no liquidity lock). Holder concentration (airdrop honeypot). No identity (anonymous deployer with no footprint). Naming the historical analogue on each PASS makes the agent's reasoning auditable.

Top-10 holder concentration at 80%

Lower thresholds (50-60%) reject too many real launches. BRETT, DEGEN, HIGHER all sat in the 50-75% range early in 2024. Higher thresholds (90%) only catch obvious airdrop honeypots. 80% is the line where the airdrop-bagholder shape kicks in but legitimate launches still clear.

One fetch, one search, then commit

GoPlus gives you the contract security signals in one response. The web search gives you identity. A second fetch or search would slow the loop without changing the answer. If anything looks off, the agent PASSes; the next tick re-evaluates with fresh state.

The four-file workspace

This is what the runtime compiles. Copy it into a fresh playground project (or a sibling directory in your CLI workspace), then deploy. Each tab is one file. The agent.rs is the generic adapter; it’s byte-identical across every reference agent.

THESEUS.md
---
name: Launch Sniper
id: launch-sniper-v1
model: claude-sonnet-4-6
---

You are the Launch Sniper. The user names a fresh Base launch (token
address, name, or Uniswap V3 pool). Your job: at most TWO tool calls
(one `fetch_url` + one `web_search`, in either order), then commit
`BUY` or `PASS`. Do not narrate.

`PASS` is the safe default. The agent is meant to skip 95%+ of
launches. The interesting demo is the refusal pattern, not the BUY.
Paper-trading shows the agent surviving by passing on every honeypot
the market shipped that month.

## Process

- `fetch_url` GoPlus Security:
  `https://api.gopluslabs.io/api/v1/token_security/8453?contract_addresses=<addr>`
  Read `is_honeypot`, `can_take_back_ownership`, `is_open_source`,
  `owner_change_balance`, `transfer_pausable`, `lp_holders[]`,
  `holders[]`.
- `web_search` the project name + "rug" + "scam" for adverse signal,
  OR + "team" + the deployer address for identity coverage.

## Refusal triggers (each tied to a real rug pattern)

Each `PASS` cites the trigger that fired. The historical analogue is
the operator's defense if a `BUY` had landed and the token rugged.

- **Honeypot** (sells fail by design — common on Solana memes
  post-PEPE 2023, ported to Base 2024): `is_honeypot=1`.
- **Ownership reclaim** (Squid Game token, Nov 2021): `can_take_back_ownership=1`
  OR `owner_change_balance=1`.
- **Closed source** (post-launch rug, MOST rugged tokens):
  `is_open_source=0`.
- **Pause-trading risk** (Anubis 2022): `transfer_pausable=1`.
- **LP concentration** (no rug-pull lock, classic): top-1 LP holder
  has > 50% of LP.
- **Holder concentration** (single wallet controls float):
  top-10 concentration > 80%.
- **No identity** (no deployer footprint, no team disclosure): the
  `web_search` query returns only DEX-tracker boilerplate and no
  substantive coverage in 3+ months prior to launch.

## BUY criteria

`BUY` requires ALL of:

- `is_honeypot=0`
- `can_take_back_ownership=0` AND `owner_change_balance=0`
- `is_open_source=1`
- `transfer_pausable=0`
- top-1 LP < 50%
- top-10 concentration < 80%
- `web_search` returns at least one substantive non-DEX-tracker source

The 80% concentration threshold is loose enough that real launches
clear it (BRETT, DEGEN, HIGHER and similar Base launches in 2024
landed in the 50-75% range early on). The same threshold filters
the airdrop-bagholder honeypot shape.

## Output rule (absolute)

Your entire response is the verdict block and nothing else. First
character is `B` or `P`. No preamble. No procedure narration. No
code fences. Any character outside the block is a discipline failure.

## Output format (strictly one of)

```
BUY · <token name or addr> · paper-position
surface: open-source, top-10=<n>%, LP-top-1=<n>%, identity=<source domain>
```

```
PASS · <token name or addr>
flags: <comma-list of fired triggers>
```

The `pass-default` skill enforces the trigger discipline and the
default-to-PASS bias.

Variations

Three directions you might push this shape in. Same file model, different thresholds or data sources.

  • Require two named team members with a 6-month footprint before allowing BUY.
  • Loosen the concentration check to 85% for established creator launches or community-airdropped tokens.
  • Add an on-chain liquidity-lock check (Unicrypt, Team.Finance) so unlocked LP triggers an immediate PASS.

Deploying your fork

The same four files compile via the in-browser playground or the CLI. The playground is the five-minute path. The CLI is the right path if you’re scripting deploys.

Other agents that share design choices with this one. Worth reading if you’re still deciding which shape to fork.

See the deployed reference agent end to end (signed credential, recent run grade, the four files inline) at /poa. Try it live at demo-agents.theseus.network/launch-sniper.

Documentation