Failover preflight — cost before a run spends anything (cyberine route, cyberine run)
Both cyberine route "<task>" (dry run, nothing dispatched) and cyberine run "<task>"
(foreground and --bg, printed once to stderr before dispatch, no prompt) print one compact
preflight block: the primary workers, the ranked failover chain with each hop's billing class,
current headroom where readable, an estimated cost per hop, and the remaining daily cap:
cyberine route "fix the pagination bug"
# preflight: primary claude, muse (failover chain + cost; nothing spent yet)
# 1. loop-commandcode-free-build (free; 2 credits remaining; 5h 0/5 used; weekly 0/10 used; est free)
# 2. codex (subscription; 5h 42% used; weekly 10% used; est subscription, no marginal cost)
# 3. loop-deepseek-build (credits; credit backend with readable headroom; est ~$0.0123 upper bound (worker))
# daily cap remaining: $8.50 of $10.00 remaining
cyberine route --json "fix the pagination bug" # same data as structured fields under `preflight`Per-hop cost reuses the existing estimators only: free for the free lane,
subscription, no marginal cost for subscription workers, the run-history footprint upper bound
with its basis (worker = this worker's own history for this kind, kind = every worker blended)
for metered workers, and unknown when the history has no signal. No prices are invented.
Known Limitations and Deferred Work — failover preflight
- Headroom is read, cost is estimated. Command Code credits and 5-hour/weekly windows, Claude
seat quota status, and codex 5-hour/weekly windows are live reads; anything unreadable degrades
to
headroom unknown, never blocks dispatch, and never invents a number. - Only
cyberine runprints it.cyberine run(foreground) andcyberine run --bgprint the block to stderr before dispatch; a pinned--fleetshows as primary, an auto-routed run shows(router picks at dispatch). The headroom reads are capped at 3 seconds, after which the block is skipped with one line and the dispatch continues. Chat/run, the TUI's new-task key, queue/cron and autopilot do not print it: they sharelaunchBackgroundRun, and a stderr block there would tear an Ink frame or land in a log nobody reads. Autopilot is therefore Known Limitations work, not covered by this block.
0. Global cyberine command (cross-directory run monitor, à la claude agents)
After npm link, the cyberine command works from ANY directory:
Wait for / digest a background run — cyberine wait, cyberine digest
A background run (cyberine run --bg, chat /run, npm run wf) prints a runId. Two commands turn that id into a hands-off operator loop without polling run.json by hand: