One token, five agents, zero humans in the loop.
FiveClaw is a swarm of five autonomous agents ("claws") that collectively manage a Printr-launched token on Solana. Each claw has a single job: one claims fees, one buys, one burns, one anchors liquidity, and one distributes. Once deployed, no human signs anything.
Creator fees the token generates are routed back into the token via the agents. Every cycle of claimed value is split three ways — half burned forever, a quarter locked as permanent DAMM v2 liquidity, and the final quarter airdropped to diamond hands.
One job per claw. No coordinator.
Claims creator fees from Printr's DBC pool every cycle. Fires claim_dbc_fees and distribute_telecoin_quote_fees in a single atomic transaction, then unwraps wSOL back to the agent wallet.
Converts the claimed SOL into tokens through Jupiter's swap aggregator. Quotes first, checks slippage against BUYBACK_SLIPPAGE_BPS, then sends the tx. Hands the bought tokens off to Burner, Anchor and Distributor.
Burns BURN_PERCENTAGE of cycle value on-chain via createBurnCheckedInstruction from the agent's own ATA. Those tokens leave circulating supply forever. If the burn tx fails, the untouched share rolls into the airdrop.
Deposits LP_PERCENTAGE of cycle value into the token's Meteora DAMM v2 pool as a paired token + SOL position, then permanently locks the position NFT. Liquidity can never be withdrawn — only trading fees are retained by the swarm. Pre-graduation the LP share rolls into the airdrop so holders never wait.
Splits the airdrop share of cycle value pro-rata across every diamond-hand wallet. Batched SPL transfers (20 per tx), auto-retrying any failed recipient individually so one bad ATA never sinks the batch. Diamond hands are defined by two holder snapshots — wallets in both sets get paid.
Eight stages. One payout. Repeat forever.
Snapshot 1
The swarm pulls every holder via Helius DAS (RPC fallback) and pins the list to the cycle_run. LP, pool, vault and whale accounts are flagged and excluded before anyone is written down as eligible.
Claim Printr fees
Collector calls Printr's claim_dbc_fees and distribute_telecoin_quote_fees in one transaction and closes the wSOL account. Claimed SOL lands native in the agent wallet.
Wait
The swarm sleeps for CYCLE_MINUTES (default 20). Anyone who sells, flips or moves tokens in this window drops out of the next snapshot.
Snapshot 2 + diamond hands
A fresh snapshot is taken. The intersection of Snapshot 1 and Snapshot 2 is the diamond-hand set. Percentages are re-normalised over the survivors only.
Buyback
Buyer swaps the buyback share of claimed SOL on Jupiter. Post-graduation a slice (LP_PERCENTAGE / 2) of the claim is held back as SOL for Anchor before the swap fires.
Burn 50%
Burner calls createBurnCheckedInstruction on the agent ATA and removes BURN_PERCENTAGE of cycle value from circulating supply forever.
Anchor 25% LP
Anchor pairs the LP-token share with the reserved SOL and deposits it into the DAMM v2 pool. The position NFT is then sent to the burn address — permanent lock. Pre-graduation this stage is a no-op and the LP share rolls into the airdrop instead.
Airdrop 25%
Distributor sends the remaining share pro-rata to the diamond-hand set. Each transfer is batched 20-per-tx. Five thoughts get logged and the cycle ends.
Supply drops. Liquidity deepens. Holders get paid.
Every cycle, the agent wallet ends up holding the freshly bought tokens plus a small reserved slice of SOL that never made it through the buyback. Anchor carves out the LP share first (pair the LP-token slice with the reserved SOL, deposit into the DAMM v2 pool, burn the position NFT), then Burner calls createBurnCheckedInstruction on BURN_PERCENTAGE of cycle value. What remains is handed to Distributor.
Pre-graduation (while the token is still on Printr's bonding curve) no DAMM v2 pool exists yet, so Anchor stands down and the LP share rolls into the airdrop bucket — holders never wait. Post-graduation the three-way split is the steady state. The rounding residual (< 1 atom) rolls into the airdrop so nothing is ever stuck on the agent wallet.
createBurnChecked on the agent ATA. Supply drops by exactly this amount every cycle the claim is above MIN_BUYBACK_SOL.
Paired token + SOL deposit into the Meteora DAMM v2 pool. Position NFT permanently locked so the LP is non-withdrawable. Trading fees stay inside the position.
Pro-rata SPL transfers, batched 20 per tx. Only wallets present in both snapshots of this cycle receive anything.
The split is configurable via BURN_PERCENTAGE, AIRDROP_PERCENTAGE and LP_PERCENTAGE (each 0-100). They must sum to 100; any misconfigured residual gets rolled into the airdrop bucket automatically so holders never get shortchanged.
Hold through both snapshots. No appeals.
A diamond hand is any wallet that appears in both snapshots of a cycle. Snapshot 1 fires when the cycle starts and fees are claimed. Snapshot 2 fires when the cycle finalises roughly CYCLE_MINUTES later.
Wallets that sold, flipped, or moved tokens out during the wait window drop out of the set and receive nothing that cycle. LP vaults, pool programs, the agent wallet itself and any address above MAX_HOLDING are flagged as non-holders and excluded regardless.
Payout is pro-rata by token balance at Snapshot 2. Bigger bags get bigger slices, but every eligible wallet gets paid every cycle they stay in.
TypeScript. Solana. Nothing exotic.
@solana/web3.jsConnection, versioned transaction assembly, signing, confirmations.@solana/spl-tokenToken-2022 + legacy, ATA derivation, transferChecked and burnChecked.@meteora-ag/dynamic-bonding-curve-sdkResolves the DBC pool address the Printr claim tx needs.@meteora-ag/cp-amm-sdkDAMM v2 pool lookup, createPositionAndAddLiquidity, and permanentLockPosition for Anchor's LP deposits.Jupiter v1 swap APISOL to token buyback. Handles pre- and post-graduation routes automatically.@supabase/supabase-jscycle_state, cycle_runs, cycle_snapshot, distributions, activity and agent_thoughts.Helius DAS APIFast getTokenAccounts for holder snapshots. Falls back to RPC getParsedProgramAccounts.Supabase for state. Solana for truth.
Every cycle writes to Supabase: cycle_state (singleton with live phase + totals), cycle_runs (append-only history including LP deposit signatures), cycle_snapshot (Snapshot 1 holders for the active run), distributions (per-holder lifetime totals), and activity (the rolling event log you see on the dashboard).
The agent wallet's private key is only loaded in the Vercel function runtime. It never touches the database. Supabase only sees aggregated stats and signed transaction signatures.
One Vercel project. One cron. Config via env.
A single route (/api/cron) ticks every 3 minutes. Based on the current phase it either starts a new cycle, waits, or finalises an in-flight one. Atomic Supabase transitions prevent two Vercel instances from running the same cycle.
MINT_ADDRESSThe Printr mint the swarm manages.AGENT_PRIVATE_KEYKeypair used for every on-chain action. Base58 or JSON array.RPC_URLSolana RPC endpoint. Helius is auto-detected from the query string.CYCLE_MINUTESLength of the wait window between snapshot 1 and snapshot 2. Default 20.BURN_PERCENTAGEShare of cycle value burned. Default 50.AIRDROP_PERCENTAGEShare of cycle value airdropped to diamond hands. Default 25.LP_PERCENTAGEShare of cycle value committed to permanent LP. Default 25. BURN + AIRDROP + LP must sum to 100.DAMM_POOL_ADDRESSOptional override for the Meteora DAMM v2 pool. Auto-detected post-graduation when unset.LP_SLIPPAGE_BPSMax slippage on LP deposits. Default 500 (5%).MIN_HOLDING / MAX_HOLDINGEligibility band. Wallets below MIN are dust, above MAX are flagged as whales.BUYBACK_SLIPPAGE_BPSMax slippage quoted against Jupiter. Default 500 (5%).MIN_BUYBACK_SOLSkip buyback + burn + LP + airdrop if the buyback budget falls below this floor.See on-chain proof for every transaction the claws have ever executed and agent thoughts for the latest narration.