Install
openclaw skills install @voronindenis5/aquarium-cycle-stockerUse when starting or restocking a fish tank: fishless nitrogen-cycle planning with dosing schedule, bioload-safe stocking plans (adult-size IOU rule), compatibility screening, and a nitrate-driven water-change scheduler. Prevents new-tank syndrome and overstocking deaths.
openclaw skills install @voronindenis5/aquarium-cycle-stockerMost fish deaths happen in the first 6 weeks — "new tank syndrome" — because ammonia and nitrite are invisible killers that spike before beneficial bacteria colonize. And most overcrowded tanks were stocked by inches-of-fish rules of thumb that ignore adult size, biomass, and filter capacity. This skill plans the fishless cycle with an exact ammonia dosing calendar, computes a bioload-safe stocking plan from adult sizes (not the cute juveniles in the store), screens species compatibility, and turns your nitrate readings into a water-change schedule that keeps up with production.
Don't use for: reef/marine chemistry (this is freshwater logic; saltwater adds Ca/Alk/Mg budgeting), or medication dosing (follow the product + quarantine protocol).
fish waste / decaying food → NH₃/NH₄⁺ (ammonia, TOXIC >0.25 ppm)
→ Nitrosomonas (colonize ~2-3 wk at 25-27°C) → NO₂⁻ (nitrite, TOXIC; blocks blood O₂)
→ Nitrobacter/Nitrospira (~1-2 wk later) → NO₃⁻ (nitrate; safe <40, best <20)
→ removed only by water changes / plants / (anaerobic denitrification in deep substrate)
Fishless cycling (the humane method): dose pure ammonia to 2–4 ppm, wait for nitrite spike then fall, wait for nitrate rise, then dose again — "bottle of ammonia to a full cycle" in ~3–6 weeks. The script prints the dated calendar with what you'll test each day.
Speedups: bottled bacteria (Tetra SafeStart, FritzZyme 900, Fluval Cycle) genuinely shorten to 1–2 weeks; higher temp (27–28°C, no fish!), pH ≥7, oxygenation help. Pure ammonia must be surfactant-free (shake test: no foam).
scripts/tank_plan.py cycle --volume 75 --temp 26 [--bacteria] → dated dosing and
testing calendar with expected readings per phase and a "safe to stock" gate
(0 ammonia, 0 nitrite, nitrates present, processes 2 ppm in ≤24 h).scripts/tank_plan.py stock --volume 75 --fish "6 harlequin rasbora" --fish "1 honey gourami" ...
→ adult-size biomass totals, IOU warning (buy juveniles = adult bioload), compatibility
screen (temp/pH/hardness overlap, aggression classes, schooling minimums), verdict.scripts/tank_plan.py wc --volume 75 --nitrate 35 --target 20 → water-change size
and frequency to hold nitrate at target given tap nitrate.$ python3 scripts/tank_plan.py cycle --volume 75 --temp 26 --bacteria
Day 1 (2026-10-24): dose ammonia to 3 ppm; test NH₃/NO₂ baseline
Day 7: NO₂ spike phase (can exceed 5 ppm — toxic, no fish!). Keep NH₃ at 2-3 ppm.
Day 17: CLEARANCE TEST — dose 2 ppm NH₃; if NH₃=0 AND NO₂=0 within 24h: CYCLED
→ safe to stock: add ONE wave (see stocking plan), feed lightly, test daily 1 week.
Expected ~10 days seeded (vs 4-6 wk unseeded); the GATE is the 24-h clearance test, not dates.
$ python3 scripts/tank_plan.py stock --volume 75 --fish "10 neon tetra" --fish "6 corydoras" --fish "1 betta"
BIOMASS: adult bioload 85.7/75 = 114% → MAX (heavy: strict water changes + weekly NH₃ tests)
COMPATIBILITY: betta + neon tetra = RISKY (neons nip betta fins; prefer ember/chili rasbora)
SCHOOLING: neons ≥6 ✓ (10), corydoras ≥6 ✓
TEMP 24-26°C overlap ✓ | pH 6.5-7.0 overlap ✓
STOCK IN WAVES: tetras week 1 → +14d → cories → +14d → betta last.
Try instead: 8 ember tetra + 6 corydoras + 1 honey gourami = 64% load, zero conflicts.
$ python3 scripts/tank_plan.py wc --volume 75 --nitrate 35 --target 20 --tap 8 --production 12
ONE-SHOT to target: change 56% (42 L) now.
HOLD at target with production 12 ppm/wk: needs ~62% weekly — or cut feeding/add plants.