Operator FAQ
Questions that come up most in support threads, with the shortest accurate answer for each. Each answer points to the relevant screen + page for deeper context.
Health & gates (S1)
Why is my Reserve gate failing during warmup?
It's normal during the first 10–30 minutes. Reserve fills to 65,536 chunks at depth, and chunks only arrive as peers push them to you. See S5 Warmup; the reserve-fill row tracks this explicitly.
If it's still failing 60+ minutes in, your bins are starving (S6) or you're NAT-trapped (S7).
What does Bin saturation = STARVING mean?
Some kademlia bin near your depth has fewer than 8 connected peers — bee-go's hardcoded saturation threshold. Bee won't forward / receive chunks well in that bin. See S6. Usually self-resolves within 30 min on a public node.
Chain RPC shows Δ +5
Bee thinks the chain tip is 5 blocks ahead of what it's
processed. Small lags flicker; sustained Δ ≥ +5 means slow
RPC. Bee can't fix it — switch your --blockchain-rpc-endpoint.
Wallet funded gate is failing
Either BZZ is 0 (can't issue stamps) or native is 0 (can't pay gas). Top up the operator wallet. From a faucet on testnet; from your treasury on mainnet.
Stamps (S2)
What does ⏳ pending mean on a stamp?
usable = false — the on-chain batch-buy transaction hasn't
been confirmed yet (~10 blocks on Gnosis ≈ 2 min). If it
sits pending > 10 min, your operator wallet is out of gas;
check S8 pending transactions. See
S2.
My batch utilization says 14 % but uploads fail
Bee's utilization field is the peak bucket count, not
the average. A batch with 1023 empty buckets and one 95 %
bucket reads utilization = 14 % while the worst bucket is
about to overflow. The cockpit's "WORST BUCKET" column
shows the truth. Drill in (Enter) for the histogram.
Should I use immutable or mutable batches?
Default to immutable. Mutable silently overwrites old chunks when a bucket fills — you lose data without warning. Immutable rejects the upload, which is annoying but obvious. See S2 § Immutable vs mutable.
TTL is dropping faster than expected
batch_ttl = paid_balance / current_price. When network
price goes up, every batch's remaining time shrinks
proportionally. You didn't lose money; the batch just got
shorter. Topup if needed.
SWAP / cheques (S3)
"Tight chequebook" — what now?
Cash out the largest received cheque (S3 Pane 2 top row).
That moves uncashed BZZ into your available chequebook
balance. There's no in-cockpit cashout — use
POST /chequebook/cashout/<peer> via curl. Don't cash tiny
amounts (gas eats them).
All my settlements are negative
You're forwarding more chunks than you store. Normal for low-radius nodes near the kademlia roots. Increase your radius / depth if it bothers you. See S3 § Common scenarios.
Total received BZZ is huge but available is tiny
Most of received is uncashed cheques sitting in S3 Pane 2. Cash them out.
Lottery (S4)
Why am I not earning rewards?
Walk the decision tree on S4. Tl;dr:
- Stake card says Unstaked → deposit stake
- Stake card says InsufficientGas → top up native
- Stake card says Frozen → wait it out
- Stake card says Unhealthy → see S5 Warmup
- Healthy + bad rchash → reserve too slow; check disk
- Healthy + good rchash + still unlucky → it's stochastic; wait
What's a normal rchash duration?
Below 10 s on a healthy node with SSD storage. If it's approaching the 95-second commit deadline, your node will silently miss every round. Slow disk, network-attached storage, or competing I/O are the usual causes.
My stake card says Unhealthy but I'm not frozen
Bee's is_healthy checks multiple internal preconditions
(reserve, depth, samples). A node can be unfrozen but still
un-healthy during warmup or if reserve drops. Wait one or
two rounds; if persistent, drop to S5.
Network (S7)
Why is my reachability flickering Public ↔ Private?
Symmetric NAT. AutoNAT can't pin you down. The "stable for Xm" counter on S7 will keep resetting. Either set up port forwarding (TCP 1634), run on a public VPS, or accept that you're outbound-only. See S7.
I have 142 peers but Inbound shows 0
You're outbound-only — peers can't dial you back. Firewall or NAT. Even with high outbound, chunks won't arrive properly. Fix the firewall / NAT.
What's a "Private" underlay?
An advertised multiaddr that's RFC 1918 (10.*,
172.16.*, 192.168.*), link-local, or loopback. Bee
advertises everything it binds to; private addresses are
dimmed because peers outside your LAN can't dial them.
Transactions (S8)
How do I clear a stuck transaction?
The cockpit doesn't do it for you. From outside:
curl -X POST http://localhost:1633/transactions/<hash>/cancel
# or to bump gas + resend:
curl -X POST http://localhost:1633/transactions/<hash>
Add -H "Authorization: Bearer <token>" if your node has
auth. Check S8 again to confirm it's gone.
p99 latency spiked to 5 s
Bee is busy. Reserve worker tick (every 30 min), large
upload pushing chunks, or slow disk. If it stays high, run
iotop and check disk health. See
S8.
Tags / uploads (S9)
Why is my tag stuck at 99 % synced?
Last 1 % is the slow tail — receipts haven't all come back. Wait 5 min. If still stuck, check chequebook (S3) — Bee pauses pushing when it can't pay forwarders.
My tag says Pending forever
You used a streaming endpoint that doesn't pre-declare chunk count. The upload still works; the tag just doesn't track meaningfully. See S9.
Operations
How do I switch between nodes?
Two ways:
Ctrl+N(or:nodes, v1.10+) — opens a picker overlay listing every[[nodes]]entry; ↑/↓ to select, Enter to switch, Esc to cancel. The active row is marked●and thedefault = truerow is marked★.:context <name>— typed switch (alias:ctx). Same flow under the hood.
Define the nodes in config.toml. See
:context.
Can bee-tui start Bee for me, or only talk to a running one?
Both. By default bee-tui connects to whatever [[nodes]]
profile is active — that's the "talk to a running Bee" path
and it works against local or remote nodes. Set [bee].bin
and [bee].config in config.toml (or pass --bee-bin /
--bee-config on the CLI) and bee-tui will spawn that
binary, wait for its API to come up, then open the cockpit
on top. The wrapper sits over the connect path; it isn't a
separate mode.
How do I turn on webhook alerts for unhealthy gates?
Set [alerts].webhook_url in config.toml to a Slack-compatible
incoming webhook URL. Optionally tune [alerts].debounce_secs
(default 60). bee-tui will POST on every gate transition worth
pinging on. The top bar shows alerts ● whenever it's
configured. See config.md and
S1 § Webhook alerts.
How do I run :durability-check continuously?
:watch-ref <ref> [interval-seconds] runs the same check as a
daemon (default cadence 60 s, clamp 10..86400). The top bar
chip watch N confirms how many are running. :watch-ref-stop <ref> cancels one; :watch-ref-stop with no arg cancels all.
The S12 Watchlist screen shows results as they arrive.
Can I use bee-tui from CI / cron without the TUI?
bee-tui --once <verb> [args] [--json] runs a single verb,
prints one line (or JSON), and exits with 0 (ok), 1
(unhealthy / failed), or 2 (usage error). 24 verbs available
— readiness, inspect, durability-check, plan-batch,
buy-preview, etc. See --once. The
exit codes + JSON shape are part of the semver-stable surface,
so CI gates that depend on them won't break across minor
upgrades.
Where does the diagnostic bundle go?
$TMPDIR/bee-tui-diagnostic-<timestamp>.txt. The status
line prints the full path. Bearer tokens are NEVER captured
— safe to share. See :diagnose.
Can I run :pins-check while the cockpit is busy?
Yes. It runs in the background and streams to a file. You
can keep navigating screens. The cockpit won't slow down.
See :pins-check.
My terminal won't render Unicode
bee-tui --ascii or set [ui].ascii_fallback = true in
config. See Theme & accessibility.
How do I see what HTTP calls the cockpit is making?
The bottom log pane underneath every screen — a live tail of
every request, with method / path / status / elapsed. See
the log-pane page (file kept at its
old s10-log.md path for stable links).
Things the cockpit deliberately won't do
"Why can't I cash out cheques from the cockpit?"
Cashing is on-chain and costs gas. The cockpit is read-mostly
— mutating endpoints that move money are intentionally off
the keymap so you don't fat-finger them. Use curl + the
/chequebook/cashout/<peer> endpoint when you mean it.
"Why can't I buy stamps from the cockpit?"
Same. Stamp purchase is on-chain, costs gas, has knobs
(depth, amount) you should think about. The cockpit shows
existing stamps' state; the buy itself is bee postage buy
or curl.
"Why can't I configure logging persistently?"
:set-logger is runtime-only. Bee's persistent logging
config is in its config.yaml; the cockpit doesn't write
to it. By design — you might want push-sync at debug for
30 min, not forever.
"Why no in-cockpit connect <peer>?"
Bee's kademlia handles peer dialing automatically.
Manual connect is a debugging escape hatch, not normal
operator behaviour. If you need it, use curl.
Where to ask the question this FAQ doesn't answer
- GitHub issues for bee-tui: cockpit bugs, doc errors, feature requests
- Swarm Discord
#node-operators: Bee questions that aren't cockpit-specific - bee-rs / bee-py / bee-go for client questions