Version: Current
Historical release snapshot. These docs are frozen. Read current docs.
Balance watch: 2026-10-21
Historical, as of 2026-10-21. This is one dated balance-watch ledger. The
balances, account names and flags below are what a run saw on 2026-10-21 and
have not been re-measured; run tools/balance-watch.sh for current balances.
Owner directive: “keep an eye on balances … ask me if anything needs recharging.”
This is the standing answer. tools/balance-watch.sh collects every prepaid
balance the estate can read, the acumen spend ledger, and the known expiry
clocks, writes a dated ledger, and raises one of three flags per row. It does
not recharge anything: a run that reports RECHARGE means the operator gets
asked, not that money moved.
Last run in this document: 2026-10-21T22:50:59Z from edge, exit 1
(two recharges outstanding, three rows a human must resolve).
What it reads
Section titled “What it reads”| Row | Source | Where the key lives | How it is used |
|---|---|---|---|
| DeepSeek direct balance | GET api.deepseek.com/user/balance |
~/.secrets/deepseek-api-key on edge (path only) |
curl reads the header from its config stream (-K -), so the value never reaches argv |
| OpenRouter credits | GET openrouter.ai/api/v1/credits |
OPENROUTER_API_KEY in the acumen env file on tcp |
the request is executed on tcp over ssh; only provider JSON comes back |
| acumen spend ledger | loopback GET /v1/router/keys and GET /metrics |
operator admin key on tcp | read on tcp; the key never crosses the ssh boundary |
| Expiry calendar | static table in the script | — | dates resolved against the run date |
Credential values are never printed, logged, put on a command line, or written into the ledger. The script reads key files by path; the two remote values are read only by the remote shell that already owns them.
Flags and exit codes
Section titled “Flags and exit codes”| Flag | Meaning |
|---|---|
| OK | balance at or above the low threshold (default $5) |
| RECHARGE | balance below the threshold, or a renewal falls inside the horizon (default 14 days) |
| HUMAN-CHECK | the number or the clock could not be established — never silently OK |
Exit 0 all rows OK · 3 no recharge but at least one human check (cannot
certify) · 1 at least one recharge · 2 usage error.
The rule behind that table: a watcher that reports OK when it cannot read a number is worse than no watcher. Every unavailable source becomes HUMAN-CHECK, and the caveat list says which source failed.
Standing recharge priority
Section titled “Standing recharge priority”Ranked by when a human has to act, not by balance size.
| # | Account | Figure | Flag | Why it is ranked here | Ask |
|---|---|---|---|---|---|
| 1 | Minimax subscription seat (MINIMAX_API_KEY on acumen) |
expires 2026-10-22 (1 day) | RECHARGE | no balance API; the seat simply lapses | renew or drop — decide before tomorrow |
| 2 | Fireworks | $1.00 stored balance | RECHARGE | under threshold; the 2026-10-20 upstream probe answered 412 (funding) on this seat | top up, or disable the seat so it stops being a candidate |
| 3 | Ollama Cloud subscription | $60/mo non-rolling credit, no balance endpoint | HUMAN-CHECK | the provider enforces the credit itself; no local poller exists by design (decision D3) | confirm the subscription is still wanted at renewal |
| 4 | DeepSeek direct (edge key) | $22.39 live | OK | healthy, but it is the key this fleet’s own agents run on, so it moves during a working day | none today |
| 5 | OpenRouter | $14.29 remaining of $15.00 granted, $0.71 used | OK | healthy; also the prepaid seat acumen last polled cleanly | none |
| 6 | DeepInfra | $10.00 stored balance | OK | acumen last-polled figure, not a live provider read | none, but see gaps |
| 7 | Charm | no balance figure — $2.04 observed spend | OK (not a balance) | spend-only provider in the acumen ledger | none |
| 8 | Groq | no balance figure — $0.0001 observed spend | OK (not a balance) | free tier; spend is rounding noise | none |
Consumer keys (the acumen key list, 9 keys) are all at cap: $0.0973 today and
month-to-date, 0.2% of the 50 USD monthly cap on the only key that has moved
(edge-orchestrator). No consumer key is near a cap, so no cap-driven recharge
is pending.
Expiry calendar
Section titled “Expiry calendar”| Item | Date | Days left | Flag | Note |
|---|---|---|---|---|
| Minimax subscription seat | 2026-10-22 | 1 | RECHARGE | renew or drop before it lapses |
| DeepSeek search/fetch free window | 2026-10-31 | 10 | HUMAN-CHECK | the v1/tools/search and v1/tools/fetch endpoints leave free preview; $0.75 per 1,000 calls after. Decide whether the door keeps using them |
| OVH trial (30 days) | unknown | n/a | HUMAN-CHECK | the 30-day clock exists, its start date is recorded nowhere on the fleet |
| Cerebras trial (30 days) | unknown | n/a | HUMAN-CHECK | Cerebras grants a 30-day trial and no Cerebras key exists on the estate yet |
The horizon is 14 days by default (--horizon). A dated renewal inside the
horizon is RECHARGE; a dated price change or an undated trial is HUMAN-CHECK,
because neither one is a top-up.
The ledger this produced
Section titled “The ledger this produced”balance-watch 2026-10-21T22:50:59Z (edge)remote: tcp [ok] thresholds: low $5, horizon 14 daysVERDICT ask the operator: 2 recharge, 3 human check
BALANCES PROVIDER REMAINING FLAG SOURCE deepseek 22.39 OK api.deepseek.com/user/balance openrouter 14.29 OK openrouter.ai/api/v1/credits deepinfra 10.00 OK acumen:/metrics (stored poll) fireworks 1.00 RECHARGE acumen:/metrics (stored poll)
STORED-POLL DRIFT (acumen figure beside the live provider figure) deepseek live $ 22.39 stored poll $ 3.13 (stale; the live figure wins)
SPEND (acumen observed, not a balance) charm $2.0400 deepinfra $0.2500 opencode-go $0.0800 ollama-cloud $0.0600 deepseek $0.0500 opencode-go-2 $0.0100 groq $0.0000
CONSUMER KEYS 9 keys · today $0.0973 · this month $0.0973 NAME DAY MONTH CAP/MO LAST-USED open-webui-rerot2 0.0000 0.0000 50 2026-10-21T21:46:46 acumen-operator-admin-20261020T195252Z 0.0000 0.0000 0 2026-10-21T22:50:59 hindsight-reflect 0.0000 0.0000 50 2026-10-21T00:05:44 console-20261020T182707Z 0.0000 0.0000 0 2026-10-21T22:50:56 edge-orchestrator 0.0973 0.0973 50 2026-10-21T22:50:52 openviking-vlm 0.0000 0.0000 50 2026-10-21T22:50:58 hindsight-core 0.0000 0.0000 50 2026-10-20T18:29:25 dsh-platform 0.0000 0.0000 500 2026-10-20T20:21:05 acumen-operator-admin 0.0000 0.0000 0 2026-10-20T19:53:21
EXPIRY CALENDAR ITEM DATE DAYS FLAG NOTE minimax subscription seat 2026-10-22 1 RECHARGE MINIMAX_API_KEY seat on acumen; renew or drop before it lapses DeepSeek search/fetch free window 2026-10-31 10 HUMAN-CHECK /v1/tools/search and /v1/tools/fetch leave free preview; $0.75 per 1,000 calls after OVH trial (30 days) unknown n/a HUMAN-CHECK 30-day trial clock; the start date is not recorded on the estate Cerebras trial (30 days) unknown n/a HUMAN-CHECK Cerebras grants a 30-day trial and no Cerebras key exists on the estate yet
FLAGS OK 3 · RECHARGE 2 · HUMAN-CHECK 3
CAVEATS - acumen /metrics carries 228 balance rows, most of them 0 for seats that are never polled; only non-zero rows are carried here - the stored deepseek balance is acumen-owned last-poll state, not the provider reading; the live row winsThe JSON twin is reports/balance-watch/2026-10-21.json (schema: "balance-watch/1"). Every row carries provider, remaining_usd, flag and
source; expiries carry days_left and kind. No credential appears in
either file.
Gaps and drift this run found
Section titled “Gaps and drift this run found”- The acumen deepseek balance is stale by ~$19. Acumen’s stored poll says $3.13; the provider says $22.39. The stored figure is acumen’s last poll, not a provider reading, so the watcher prints both and trusts the live one. Any budget display that reads only the metrics endpoint is understating available credit on this seat by a factor of seven.
- 228 of acumen’s balance rows are zero and unpolled. Only non-zero rows are carried; zero means “never polled” for most seats, not “empty”. A zero row must never be read as a warning, and a non-zero row must never be read as current unless its provider is one of the two live sources.
- The direct DeepSeek balance moved during collection: $22.87 → $22.51 → $22.39 across 22:46–22:50Z. This agent session itself runs on that key, so the measurement is partly self-inflicted. Acknowledge the direction, do not extrapolate a daily burn from a five-minute window.
- Fireworks is the only seat flagged for money, and it is not a polling gap: the 2026-10-20 upstream probe returned 412 (funding) on it, so the $1.00 is a real ceiling rather than a stale number.
- No Cerebras or OVH credential exists on the estate. Their trial clocks cannot be computed from any host; the table says so instead of inventing a date.
Running it
Section titled “Running it”tools/balance-watch.sh # default: tcp remote, $5 low, 14-day horizontools/balance-watch.sh --low 10 # raise the recharge thresholdtools/balance-watch.sh --out-dir /var/tmp/balance-watchOverrides: BALANCE_HOST (ssh target; empty disables every remote row and
turns them into HUMAN-CHECK), BALANCE_DEEPSEEK_KEY,
BALANCE_ACUMEN_ENV, BALANCE_ACUMEN_ADMIN_KEY, BALANCE_ACUMEN_BASE,
BALANCE_OUT_DIR, BALANCE_LOW_USD, BALANCE_HORIZON_DAYS.
Not installed: no timer or cron entry was created for this. The watcher is run on demand; scheduling it is a separate decision, and a timer that mails on exit 1 would be the natural next step if the operator wants to stop running it by hand.
bash -n, shellcheck -x (0.10.0, zero findings), and the harness gate
(npm run verify) all pass on this branch; see the PR for the exit codes.