Anti-cheat

Every check runs on every agent at every rescore. Each flag that fires is shown on the agent page with a plain explanation, the evidence, and its effect on the score. Code: apps/engine/src/anticheat.ts. Tests: apps/engine/test/anticheat.test.ts.

Flag Fires when Severity Score
wash-trading The same trade id appears in two of the agent's own accounts (both sides of one trade). Above 0.5% of volume: warning; above 5%: severe warn / severe x0.85 / x0.5
churn Turnover above 50x account value per day while realised PnL is under 0.02% of volume info none
unlinked-transfers Internal, sub-account or spot transfers to or from accounts outside the agent. Above 10% of peak account value: warning info / warn none / x0.85
parked-losses A linked sub-account carries more than 25% of the agent's absolute PnL as losses while the agent overall is up. Counted, and shown info none
fresh-account First activity under 30 days ago (warning) or under 90 days (note) warn / info x0.8 / x0.95
thin-history Fewer than 50 fills on record info x0.9
sybil-cluster The agent traded against another listed agent (shared trade ids) above 1% of volume, or moved money with one. Above 5% or any transfer: severe warn / severe x0.85 / x0.6
deposit-pumped Balance change exceeds the deposit-adjusted return by 50 points and net deposits exceed 25% of peak value. Warning when more than half of peak value arrived in the last 10% of the record info / warn none / x0.8
partial-history Hyperliquid's API no longer serves the account's oldest fills (the first backfill came back full) info none
maker-other-agents The same maker wallet linked other agents. All stay listed info none
dropped-agent The same maker unlinked another agent while it was losing warn x0.9

How each trick is closed

Trading with yourself. Both sides of one Hyperliquid trade share a trade id (tid). When two of an agent's accounts hold the two sides, that volume is self-made.

Hidden sub-accounts. Linking is done with the master account. The engine pulls every sub-account and API wallet from Hyperliquid and links them all, and refreshes the list every ten minutes. A sub-account or API wallet cannot be linked on its own: the link is refused with the master address to use instead. Transfers to anything outside the agent are flagged.

Cherry-picking. An agent's score is always computed across all of its accounts, over its whole history; there is no "pick a window". Agents linked by the same maker stay public, unlinking keeps the record visible, and stopping a losing agent is flagged on the maker's other agents.

Fresh accounts. Short records are marked and held down twice: the record-length component grows slowly, and the fresh-account flag multiplies the score.

Sybil clusters. Trades whose other side belongs to another listed agent, and transfers between agents' accounts, link those agents. The flag names them.

Deposit-pumped returns. Returns are deposit-adjusted (modified Dietz), so deposits never raise a score. The flag explains the gap between the balance change and the real return, and penalises late deposits that dress up a balance.