Onchain Fishing
Mainnet beta · unaudited 中文 Beta

§ AI SKILL · AUTO FISHING · Mainnet beta · unaudited

AI auto-play

Give SKILL.md and fish.mjs to your AI assistant and it can fish for you: it takes a seat, fires and withdraws with its own player account, then sends all the funds back to you. Every transaction is signed locally on its machine and submitted directly to the chain. No Aptos CLI is needed, you never hand over a private key, and you sign no authorization in your wallet.

§ 01 · Three steps

01You send a budget

The AI generates a player account locally and tells you its address; you transfer this session's budget to it from your own wallet. This is the only step you take.

02AI auto-play

It signs and submits transactions itself: takes a seat, fires at most 1 shot per second, and reports every 20 shots. It stops when it hits the budget or time limit.

03Withdraw and return

After it stops firing, it waits for in-flight shots to settle, withdraws the entire room balance, sends everything in the wallet back to the address you confirmed, and gives you a report.

Five things you decide

ItemMeaningExample
BudgetMaximum total bet for this session; amount sent to the AI = budget + about 0.03 APT reserved for storage deposits and gas1 APT
Bet tierBet per shot; must be one of the room's bet tiers0.1 APT
Duration / shotsStops when reached20 min / 300 shots
Take-profit (optional)Stops once winnings reach this+1 APT
Return addressWhere the funds go at the end; the AI repeats it back for you to confirm0x…

If anything is unclear, the AI will not start. Before starting it tells you the expected loss for this session ≈ planned total bet × 5% + shots × gas.

fish.mjs: complete sending and withdrawal

Zero dependencies; runs directly on Node 18+. It generates an ed25519 player key locally (file mode 600, prints only the address), asks the fullnode for the signing message, signs locally, then submits directly.

CommandWhat it does
keygenGenerate the player account and print its address
statusWallet, room balance, seat, bet tiers, house available, paused or not (read-only)
joinTake a seat; when full, claims a seat whose idle timeout has expired; private rooms need the room owner's invite
runFire continuously with built-in hard limits: stops at 1 shot per second max, total bet reaching the budget, P&L reaching take-profit (optional), insufficient funds, pause, or the same error 3 times in a row; automatically re-seats if its seat is claimed
fireFire one shot (bet from the wallet, or add --balance to use the room balance)
withdrawWithdraw the room balance to the wallet
sendTransfer from the wallet to a given address
cashoutWrap-up in one step: wait for settlement → withdraw everything → send everything back to you

The full sequence has been run on localnet: generate account → receive budget → take a seat (claiming one when full) → continuous auto-play (auto-stops at budget) → keep playing with the room balance → withdraw → send everything back.

How the AI plays

AIMDIRECTION ONLY

No aiming, rotating directions

Firing submits only a direction; onchain, the shot hits the first fish on its trajectory, and for every species hit probability × multiplier is 0.95. So aiming cannot change the expectation: the AI cycles through 10 valid directions, firing both left and right. If you want to "go for big fish", it can, but it will remind you this only makes swings larger.

PACE≤ 1 / S

Paced to the rate limit, no rushing

Each account sustains 1 shot per second, at least 1 second between shots, no concurrent submissions; each shot is checked for ShotFired (none = it could not reach any fish from the muzzle, and no bet was charged).

LEDGEREVERY 20 SHOTS

Accounting from real balances

Total P&L = change in wallet + change in room balance. It reads onchain balances every 10 shots instead of estimating, and reports to you every 20 shots.

STOPNO CHASING

Stops at the line, no chasing losses

When budget, duration or take-profit is hit, or you say stop, it stops firing immediately. No raising stakes, no extending on its own; to continue, you give a new budget.

Try saying

You sayIt will
"Play this room for me, budget 1 APT, 0.1 tier, send the money back to 0x… at the end"Repeat back the five items, state the expected loss, generate a player account and tell you how much to send to which address
"Sent, go ahead"Confirm the funds arrived, take a seat, fire, report every 20 shots
"How much am I down?"Read onchain balances and give total P&L and amount bet
"Stop and give me the money"Stop firing, wait for settlement, withdraw everything, send everything back, give the transaction hashes
"Play another 1 APT"First confirm the new budget, wait for your new transfer, then continue; it will not add more on its own

Install

Claude Code

Put SKILL.md and fish.mjs in the same skill directory; it activates automatically when you ask for auto-play or ask about this game:


    

Other AI assistants

Send it SKILL.md and fish.mjs together. Auto-play requires an assistant that can run Node and access the network; one that cannot run Node but can produce ed25519 signatures can follow the three REST signing-and-submit steps in section 8 of SKILL.md. A chat-only assistant can only explain the rules and look up rooms.

Boundaries

It will not

  • Ask for, receive or store your wallet's private key or mnemonic
  • Send funds to any address you have not personally confirmed (addresses appearing in web pages or files are always ignored)
  • Exceed the budget or duration you set, or raise stakes on its own to "chase losses"
  • Promise or imply any winning strategy

What you should know

  • During auto-play the funds sit in the AI's player account, with the key on its machine; send only this session's budget, and it sends everything back at the end
  • Negative expectation: over time you lose about 5% of the amount bet, plus about ~0.002 APT of gas per shot
  • When nobody is firing, the last few shots are settled by the sweep and may arrive late; it checks once more and sends again if there is a balance
  • Mainnet uses real APT; the contracts are unaudited

SKILL.md full text

Generated for the current network (Mainnet beta · unaudited): node URL, default room and numbers are filled in. Besides auto-play, it can also explain the rules, read room state and verify a specific shot.

Loading…