Robicop
Serve & protect the trenches · Robinhood Chain

Your agent doesn’t know what to avoid on chain.

Robicop has read every block Robinhood Chain has ever mined. We tag the wallets that rug, extract and clip, and hand the list to your trading agent before it buys.

Latest block
00,000,000
Wire your trading agent · one line · free
claude mcp add robicop --transport http https://robicop.com/mcp
See the patrol → How agents use it
The beat

What we book wallets for.

Every tag is a behaviour with a threshold fitted to this chain. Each one carries the transaction that proves it.

Rugger

live

Drains ≥80% of a coin’s curve inside 25 blocks — about five seconds. Solo dev or swarm.

Side wallet

live

One actor, several addresses — first buys landing within 8 blocks of each other, again and again.

Extractor

live

In cheap and early, out at profit onto the buyers behind it, across rugged coins.

One-clipper

live

One sell that takes ≥25% of a coin’s curve — craters the chart at any market cap. A trait, not a crime.

Live patrol · what the machine is doing
Access

The present is free. The past is earned.

FREE · FOR EVERYONE

The live layer

  • The patrol — every booking of the last 3 days, with its proof transaction
  • Coin verdicts before entry: clear · caution · avoid
  • Wallet rap sheets, live bookings, block-by-block watch
  • The MCP server — your trading agent calls it mid-decision, unmetered
claude mcp add robicop --transport http https://robicop.com/mcp
HOLDERS · 500K $ROBICOP

The full record

  • Every entity from the whole chain history — hundreds of groups, thousands of wallets
  • Released in four batches as your holding time climbs: 1h → 24h
  • Exportable .txt lists, a proof transaction on every line — feed them straight to your bot
  • Tenure read from the chain. Not your browser, not a form, not trust
See the ranks →
Method

How the machine books a wallet.

01
Watch every trade, as it happens

Robicop reads the entire chain, block by block, around the clock. Every coin, every wallet, every trade — nothing is sampled, nothing is skipped.

02
Spot the exit, not the noise

A rug has a shape: a coin’s money drained in about a second, with real buyers left holding it. We measure that shape directly — so it means the same thing on a tiny coin as on a big one.

03
Clear the innocent first

Panic sellers, routine liquidity moves, normal launch behaviour — all filtered out before anyone is named. Losing money in a rug makes you a victim, never a suspect.

04
Book on repetition, prove with receipts

One bad exit could be luck, so it earns a watch — not a badge. The same wallet doing it again on another coin gets booked, and every single claim links to the exact transaction on the public explorer.

Read the full method →
On patrol
00,000,000

Wallets — alone or as a swarm — that drained a coin’s curve, on more than one coin. Repetition is the claim; one exit is never enough.

Integration

One line in your agent's config.

Robinhood opened trading to agents over MCP — 70,000+ agentic accounts across Claude, ChatGPT, Cursor and Grok. Robicop speaks the same protocol, so your agent checks a coin before it trades it.

Their stack

Robinhood's agent runs on MCP.

Trading MCP server

Account data, market feeds and order placement over agent.robinhood.com/mcp/trading — around 50 tools.

Guardrails exist already

Sandboxed accounts, spending limits, manual approvals. They control how much an agent can lose — not who it trades against.

Install

Add Robicop next to it.

claude mcp add robinhood-trading --transport http https://agent.robinhood.com/mcp/trading

What your agent asks

> check_coin("0xeb576c467d69e084…")

  VERDICT   avoid
  reason    2 booked ruggers sold this pool
  ──────────────────────────────────────────
  rugger    0xcaf681a6…   2 coins
  rugger    0xef6869e7…   2 coins
  ──────────────────────────────────────────
  proof     /tx/0xb376fa637859a675…
Access

Rewarding real holders.

The patrol and the live MCP layer are free for everyone. The historic database is for holders of at least 500,000 $ROBICOP — batches unlock as your holding time climbs, read from the chain, not your browser.

Not connected

Connect an EVM wallet on Robinhood Chain (4663) to check your rank.

Cadet
Not on the force yet — connect to enlist.
0h
held
Hold $ROBICOP for 1 hour to unlock the first batch.

Your batch

Documentation

How Robicop works.

A wallet-intelligence layer for Robinhood Chain, built for autonomous trading agents. This is the complete method — the data plane, the maths, and the rules every claim has to survive.

Overview

The problem an agent can't solve alone.

A trading agent evaluating a token sees a price, a pool and a clock. It cannot see that four of the top holders are the same person, that the wallet that just added liquidity has drained six pools this week, or that the buyer ahead of it has sold into a collapse on every coin it has ever touched.

That information exists — it is in the chain's own history — but it is not available at the speed or shape a decision needs. Robicop reads the entire chain continuously, resolves behaviour into a small set of evidenced classes, and exposes the result as a single call an agent makes before it commits capital.

Scope

The whole chain — bonding curve through migration and beyond. Every class is proportional to the market it hit, so the same rule means the same thing at a 7k market cap and at 7M.

Contract

Read-only. Robicop returns a verdict and its evidence. It never places an order, never requests an approval, never holds a key.

Architecture

Four planes, decoupled on purpose.

INGEST sequencer feedpush · ordering log tailpull · outcome backfill fleethistory, downward ARCHIVE object store immutable chunks {from}-{to}.jsonl.gz names ARE coverage append only no deletes, no edits CLASSIFY price enginetick series per pool universe gatepad provenance detectors+ attribution SERVE MCP serveragent tools REST + exportbatched by rank public patrolcached snapshot INVARIANT No request path ever touches the archive. Serving reads published artifacts only, so traffic cannot slow ingestion and ingestion cannot stall a response. Every plane is restartable from its cursor. A crash costs the work in flight, never the run.
Ingest writes, classification reads, serving reads published output. Nothing reaches backwards.
01 · Ingestion

A chain speaks twice, in two voices.

Most indexers listen to one. Both are required, because each is silent about something the other hears.

Sequencer feed

The sequencer broadcasting transactions as it orders them. Push, unauthenticated, no rate limit.

Delivers intent and ordering: signed transactions and calldata, at sequencing time, before execution. Carries a monotonic sequence number.

Log tail

eth_getLogs over a moving cursor against a provider pool.

Delivers outcome: emitted events, amounts, resulting prices. Cannot see a reverted transaction, because a revert writes no logs.

02 · The RPC layer

The only component that doesn't scale.

Everything else is parallel. RPC capacity is the hard ceiling on how fast history closes and how tight the live edge sits, so it is treated as a managed budget rather than a dependency.

Tiered provider pool

Dedicated paid endpoints for range reads, where eth_getLogs windows run to thousands of blocks. Free tiers are reserved for point queries — several cap ranges at ten blocks, which is slower than the public node for backfill and faster for single lookups.

Role separation, not round-robin

Each endpoint has a job: range reads, point reads, or standby. Rotating blindly across providers means every worker rediscovers the same limit independently, and each rediscovery looks like missing data.

Shared token bucket

Workers draw from one pacer per endpoint rather than backing off individually, so the fleet converges on the provider's real capacity instead of oscillating around it.

Adaptive windows

A range doubles while results stay under the log ceiling and halves on a cap error. Log density varies by orders of magnitude across a chain's life, so a fixed window is wrong everywhere except one place.

Failure taxonomy. Not every failure is missing data, and treating them alike corrupts the coverage record:

429 / rate limited     -> slow down, retry           never a gap
5xx / non-JSON body    -> provider unhealthy          never a gap
range cap exceeded     -> halve window, retry same    never a gap
timeout                -> retry with backoff          gap only after budget
empty result           -> genuinely no logs           coverage, not absence

A range is recorded as missing only after a transient budget is exhausted — nine attempts with backoff to sixty seconds. The live tail always holds priority; backfill yields to it, because currency cannot be recovered later and completeness can.

03 · Storage

Coverage is arithmetic, not a counter.

The archive is append-only object storage. Chunks are named by the block range that was requested and answered, and are written even when a range legitimately returns nothing.

chain-rh/logs/000051302535-000051302734.jsonl.gz
              └──────┬─────┘ └──────┬─────┘
                  from            to

coverage = union of every name
holes    = the complement of that union

This makes coverage a set operation on filenames rather than a number a process maintains. Counters reset on restart, double-count retries, and drift from reality silently. Names cannot: an object exists precisely because that range was fetched and stored.

Sequence numbers from the feed give the same guarantee on the live edge. They are monotonic and gapless by construction, so a dropped socket is arithmetic rather than a mystery — hold 51,579,398 and 51,579,400 without 399 and the missing range is known exactly, immediately, and can be refetched.

04 · Price engine

Ticks, not floating point.

Every concentrated-liquidity swap log carries sqrtPriceX96, liquidity and tick. The obvious move is to reconstruct price and compare. It fails silently at exactly the scale this product operates at.

a coin worth ~1e-9 in the quote asset

  sqrtPriceX96 / 2^96   ->  ~1e-13
  ( … )^2               ->  ~1e-26

double precision is exhausted; unrelated prices
collapse toward zero and every comparison reports
a total loss.

A tick is an exact integer with price = 1.0001^tick. A proportional move is therefore a fixed tick delta at every scale, for every decimals configuration, with no precision loss:

Δtick = ln(ratio) / ln(1.0001)

  −90%  →  −23,026 ticks
  −95%  →  −29,957 ticks
  −99%  →  −46,052 ticks

Because a collapse is a ratio, detection needs no fiat feed at all. Quote-denominated price comes from the chain; a single reference rate converts it for display only, and never enters a threshold. A price layer that can be disagreed with is a price layer that can move a verdict.

05 · Universe

The gate that makes everything downstream affordable.

Robicop's universe is launchpad coins with a bonding curve and a migration path. Provenance is a property of the token record, not a filter applied at query time — a token without a resolved launchpad never gets a row.

Why a join, not a score

A risk classifier has false negatives, and a false negative costs a user money. Provenance is deterministic: a token either was created by a registered launchpad or it was not.

Why it pays for itself

The gate collapses the candidate set by orders of magnitude before any expensive computation runs, which is what makes full-history classification tractable at all.

Contracts outside that universe are still read — liquidity events are tracked chain-wide, since a pool can be drained anywhere — but they never produce a wallet class.

06 · Detection

Sliding windows over a bimodal distribution.

"Did price fall 90% within W blocks" is a property of every window in a series. Measuring peak-to-trough instead answers a different question — all-time high to all-time low — and is slow by construction, which hides exactly the events that matter.

Across a sampled cross-section of the chain the distribution separates cleanly:

fall of >=90% inside W blocks, by window

  W =    5   (~1s)     engineered exit
  W =   25   (~5s)          "
  W =   50  (~10s)     ── flat ──
  W =  250  (~50s)     ── flat ──
  W = 5000  (~17m)     ordinary decline

Nothing occurs between ten and fifty seconds. That flat interval is a real structural boundary between two different phenomena — an engineered exit and an ordinary decline — and it is why the window is 5 blocks. The threshold is read off the distribution rather than chosen, which means it can be re-derived by anyone with the same data.

07 · Attribution

Two events, one chart shape.

A pool that collapses because holders sold and a pool that collapses because liquidity was withdrawn look identical on a price series. Only one has a culprit, and conflating them is the single most common way a scanner publishes false accusations.

A sell

Token moves into the pool, quote moves out. The sending address is a seller, and appears in the candle's cohort.

A pull

Burn, or a negative liquidity delta. A provider withdrawing. Recorded as its own event class; no wallet is tagged.

Account abstraction. ERC-4337 is live on this chain, so the transaction sender is frequently a bundler rather than the trader. Actor identity resolves through UserOperationEvent.sender. An indexer that reads tx.from attributes thousands of unrelated trades to a handful of bundler addresses, and nothing in its output reveals the error.

Causal window. Only the opening blocks of a collapse carry causation. Wallets selling several blocks later are reacting to the move, not creating it, and are excluded from the cohort by design.

08 · Classification

Behaviour is only evidence when it beats chance.

Every class carries a measured base rate — how often ordinary wallets do the same thing. Without one, a detector simply flags the whole chain, because most predatory-looking behaviour is also ordinary behaviour.

  • Base rate first. Selling before a collapse is common. Only doing it far more often than the population rate is signal, and the class threshold is expressed relative to that rate rather than as an absolute count.
  • Correction for multiple testing. Testing tens of thousands of wallets at conventional significance returns thousands of false positives by construction. Thresholds are corrected against the number of tests actually performed.
  • Two tiers, never merged. Qualifying (meets the behavioural criteria) and confirmed (also beats the corrected bar) are different claims and are published separately.
  • Watching is a state, not an accusation. A wallet seen in one event is held in view with its evidence visible. It is promoted only when the behaviour repeats across separate coins.
  • Descriptive classes stay descriptive. Where a behaviour is common, the output is a count, never a rarity claim, and never a verdict.
  • Labels carry their query and expire. Every tag stores the evidence that produced it and can be re-run. Anything that no longer reproduces is removed rather than inherited.
09 · Classes

What we book, and what it takes.

Rugger

live

Sold into a ≥90% collapse inside 5 blocks, on more than one coin. Cohort limited to the causal blocks; liquidity pulls excluded before any wallet is considered.

Side wallet

live

One actor across several addresses — first buys landing within a tight block window, repeatedly, across coins. A structural link: they move together. Intent is not claimed.

Extractor

live

Enters cheap and early, exits at profit onto the buyers behind it, repeatedly across coins that later collapse. Requires the market-cap layer.

One-clipper

live

A single sell taking ≥25% of the coin’s curve reserve — proportional, so it means the same crater at every market cap. Descriptive: shipped as a count, never as a verdict.

10 · Serving

Built for the call an agent makes before it buys.

Robinhood exposes trading to agents over the Model Context Protocol. Robicop speaks the same protocol, so it installs beside the trading server and becomes available as tools the agent can call mid-decision.

claude mcp add robicop --transport http https://robicop.xyz/mcp
check_coin(ca)        verdict + booked wallets currently holding
check_wallet(addr)    every class on an address, with proofs
watch_launches()      new bonding-curve launches, pre-filtered
export(batch)         the wallet list, by access rank

Classification output is published as an immutable artifact; the API and MCP server read that artifact. No request path reaches the archive, so response latency is independent of ingestion load and a traffic spike cannot slow collection.

Public patrol

A cached snapshot, served free. Recent window, full evidence, rate limited.

Holder stream

Classification as blocks mine, unmetered, with the database released in batches earned by holding tenure read from chain.

11 · Guarantees

What every claim has to survive.

It opens its transaction

Not the wallet page — the exact event, on the public explorer. A claim without a transaction behind it does not ship.

It reproduces, or it dies

Each tag stores the query that produced it. Re-run it and the tag survives or is deleted. No claim outlives its evidence.

Behaviour, never intent

We describe what an address did on chain. We do not assert who controls it or why.

Read-only, always

A verdict is returned. Nothing is signed, approved, ordered or custodied.