Bittensor Staking
Stake, unstake and move TAO safely across subnets.
Bundled with Minerva and active by default — there is nothing to install.
Skill metadata
| Path | skills/bittensor/bittensor-staking |
| Version | 1.1.0 |
| Author | moy-boy (@moy-boy), Minerva Agent |
| License | MIT |
| Platforms | linux, macos, windows |
| Tags | Bittensor, TAO, Staking, Delegation, Alpha, Slippage, dTAO, btcli, Blockchain |
| Related skills | bittensor-validator, bittensor-analytics, bittensor-miner |
Reference: full SKILL.md
The following is the complete skill definition that Minerva loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
Staking TAO
Fast path
Start with the one-call tools; they join chain, dashboards, Discord and the curated knowledge for you:
bittensor_knowledge(question, optional netuid): terms, rules, subnet facts and playbooks.bittensor_profile(any name or key): the person's coldkey, every hotkey on every subnet with rank, incentive and king status, linked names with sources, subnets they own.bittensor_subnet_profile(netuid or name): owner by name, team on Discord, current king and dethronements, top miners by name, owner burn share, market data.bittensor_changes(any name or key): rank and incentive changes over the last days.
They may appear with a prefix such as mcp_bittensor_research_. Lead with names; give keys as support.
For someone who holds TAO and wants it earning, not someone running a validator. If the user
operates a validator or is choosing child hotkeys and takes, use bittensor-validator instead.
Every command here signs an extrinsic and moves real money. None of them are guesses: the
syntax below comes from btcli stake --help on btcli 9.23.2. Re-read it before advising if the
installed version differs — btcli --version.
Read before you write
Answer with the read-only chain tools first. bittensor_subnets ranks subnets by price, emission
and market cap; bittensor_subnet gives one subnet's pool and rate; bittensor_account shows what
a coldkey already holds. None of them need a wallet or a key. Only reach for btcli once the user
has decided what to do.
btcli stake list --wallet-name W is the read that matters before any change: it shows every
position across all subnets, which is the thing users are usually wrong about.
The one hazard that loses money: slippage
Staking into a dynamic subnet is not a deposit. It buys that subnet's alpha token through an AMM pool, so the rate you get depends on pool depth and on what else lands in the same block. A large stake into a thin pool can fill far off the quoted rate.
btcli defends against this and the defaults are already correct — say so rather than pasting flags the user does not need:
| Flag | Default | What it does |
|---|---|---|
--safe / --safe-staking | enabled | Aborts if the rate moves more than the tolerance |
--tolerance | 0.05 (5%) | Maximum rate change allowed |
--partial / --allow-partial-stake | disabled | Fill what fits rather than aborting |
--unsafe | — | No rate protection at all |
btcli stake add --amount 100 --netuid 1 --safe --tolerance 0.1 --no-partial # abort if >10% move
btcli stake add --amount 300 --safe --partial --tolerance 0.1 # fill what fits
Never suggest --unsafe. If a stake keeps aborting, the pool is too thin for the size — the
answer is a smaller amount or a different subnet, not removing the guard. Explain that rather than
handing over the flag.
--mev-protection exists on stake add for the same family of problem. Leave it at its default
unless the user asks.
Root versus dynamic subnets
Netuid 0 is root. Staking there earns in TAO directly. Staking on any other netuid buys that subnet's alpha, and the value of your position moves with that subnet's price — you are taking a position on the subnet, not just earning yield. Make sure the user knows which one they are doing; this is the most common misunderstanding.
Root emissions have their own handling:
btcli stake set-claim # how root (subnet 0) emissions are handled for this coldkey
btcli stake process-claim # manually claim accumulated root emissions
The commands
| Intent | Command | Signs |
|---|---|---|
| See every position | btcli stake list --wallet-name W | no |
| Stake | btcli stake add --netuid N --amount X --wallet-name W --hotkey H | yes |
| Unstake | btcli stake remove --netuid N --amount X --wallet-name W --hotkey H | yes |
| Same coldkey, new hotkey | btcli stake move | yes |
| Same hotkey, new coldkey | btcli stake transfer | yes |
| Change subnet | btcli stake swap | yes |
| Guided movement | btcli stake wizard | yes |
| Auto-stake destination | btcli stake auto / btcli stake set-auto | set-auto yes |
move, transfer and swap are three different operations and users conflate them. Say which
axis changes: move keeps the coldkey and changes hotkey, transfer keeps the hotkey and changes
coldkey, swap keeps the coldkey-hotkey pair and changes subnet. A swap crosses two AMM pools,
so it carries slippage on both sides.
Running them
Signing commands go through the terminal tool and are approval-gated — the user sees the exact command before it runs. Do not paste a wallet password, and do not offer to store one.
Before any signing command, state in one line: which netuid, how much, which wallet and hotkey, and whether it buys alpha or root TAO. If the user has not said the amount, ask; never infer it from a balance.
Completion
The work is done when the user's stake has moved as intended and btcli stake list shows it. If a
command aborted on tolerance, that is a successful outcome of the guard — report the rate move
and offer a smaller amount, not --unsafe.