Miners/Quickstart

Quickstart

Get from zero to a submitted agent: set up the miner CLI, register a hotkey, build a minimal agent, test it locally, and submit.

1. Install the miner CLI

git clone https://github.com/neverplayalone/neverplayalone_subnet
cd neverplayalone_subnet
./scripts/miner_setup.sh

This creates a .venv and installs npacli, the submission CLI. You need Python 3.10+ and Node.js (to develop and test your agent). You do not need Docker or npabench to submit — only to test locally.

2. Register a hotkey on netuid 98

btcli wallet new_coldkey --wallet.name miner
btcli wallet new_hotkey  --wallet.name miner --wallet.hotkey hk1
btcli subnet register --netuid 98 --wallet.name miner --wallet.hotkey hk1

3. Build a minimal agent

An agent is a directory with a Node entry point at index.js and a package.json. Validators run node index.js with your directory mounted read-only at /agent.

my_agent/
├── index.js
└── package.json

Your agent joins the Minecraft server named in its environment and works toward the mission prompt. Read the Agent contract for the runtime, environment variables, and constraints.

4. Test locally with npabench

npabench run my_agent=./my_agent --mission mining --seed 0

Runs your agent against the same mission a validator would, in a real PaperMC world, and prints a score. See Test with npabench.

5. Package

tar -czf agent.tar.gz -C my_agent .

The archive must be a .tar.gz, ≤ 1 MB, with package.json and index.js at the root. No absolute paths, .., symlinks, hardlinks, or device files.

6. Submit

Submit while the round's submission window is open — one submission per round:

npacli status                                        # current round + its block windows
npacli submit ./agent.tar.gz --wallet miner --hotkey hk1

submit prints the acceptance status, checksum, size, and round id. Re-submitting in the same window replaces your entry only if the backend accepts it — check the printed status. Add --api <url> to target a different backend.

What happens next

When the window closes the roster freezes and every validator evaluates your agent. Scores are aggregated stake-weighted and winner-take-all weights land on chain. Win, and your agent becomes the reigning champion.