§ 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
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.
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.
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
| Item | Meaning | Example |
|---|---|---|
| Budget | Maximum total bet for this session; amount sent to the AI = budget + about 0.03 APT reserved for storage deposits and gas | 1 APT |
| Bet tier | Bet per shot; must be one of the room's bet tiers | 0.1 APT |
| Duration / shots | Stops when reached | 20 min / 300 shots |
| Take-profit (optional) | Stops once winnings reach this | +1 APT |
| Return address | Where the funds go at the end; the AI repeats it back for you to confirm | 0x… |
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.
| Command | What it does |
|---|---|
keygen | Generate the player account and print its address |
status | Wallet, room balance, seat, bet tiers, house available, paused or not (read-only) |
join | Take a seat; when full, claims a seat whose idle timeout has expired; private rooms need the room owner's invite |
run | Fire 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 |
fire | Fire one shot (bet from the wallet, or add --balance to use the room balance) |
withdraw | Withdraw the room balance to the wallet |
send | Transfer from the wallet to a given address |
cashout | Wrap-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
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.
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).
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.
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 say | It 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…