Concept internals
Gebruiksregistratie
Wat het is
- Haalt gebruik en quota van providers rechtstreeks op via het gebruikseindpunt van elke provider. Geen geschatte providerfacturering; alleen door de provider gerapporteerde abonnementsnamen, quotavensters, saldo's, uitgaven, budgetten, dagelijkse kostengeschiedenis, toewijzing aan tokens/modellen of samenvattingen van de accountstatus.
- Voor mensen leesbare uitvoer van quotavensters wordt genormaliseerd naar
X% left, zelfs wanneer een provider verbruikt quota, resterend quota of alleen ruwe aantallen rapporteert. Providers zonder opnieuw instelbare quotavensters tonen in plaats daarvan samenvattingstekst van de provider (bijvoorbeeld een saldo). /statusop sessieniveau en de toolsession_statusvallen terug op het transcriptlogboek van de sessie wanneer de live momentopname van de sessie geen token-/modelgegevens bevat. Die terugval vult ontbrekende token-/cachetellers aan, kan het actieve label van het runtimemodel herstellen en geeft de voorkeur aan het hogere promptgerichte totaal wanneer sessiemetadata ontbreekt of lager is (totalTokensFresh !== true, nul of lager dan de uit het transcript afgeleide waarde). Live waarden die niet nul zijn, hebben altijd voorrang op de terugval.
Waar het verschijnt
/statusin chats: statuskaart met sessietokens en geschatte kosten (alleen modellen met API-sleutel). Providergebruik wordt, indien beschikbaar, getoond voor de provider van het huidige model, als een genormaliseerdX% left-venster of als samenvattingstekst van de provider./usage off|tokens|fullin chats: gebruiksvoettekst per antwoord./usage costin chats: lokaal kostenoverzicht, samengevoegd uit OpenClaw-sessielogboeken.- CLI:
openclaw status --usagetoont een volledige uitsplitsing van gebruik en quota per provider. - CLI:
openclaw models statusvermeldt OAuth-/tokenauthenticatieprofielen en toont naast elke provider die er een heeft een samenvatting van het gebruiksvenster. - Besturingsinterface: Gebruik toont kaarten voor providerabonnementen en facturering boven OpenClaws op sessies gebaseerde analyse van tokens en geschatte kosten. Referenties voor de Anthropic- en OpenAI Admin API voegen door de provider gerapporteerde uitgaven van vandaag, 7 dagen en 30 dagen toe, evenals dagelijkse trends, tokentotalen, populairste modellen en kostencategorieën.
- Besturingsinterface: de pop-over van de contextring in de chatcomponist toont abonnementsgebruik voor abonnementsproviders — balken per venster (5 uur, wekelijks, modelspecifiek) met hersteltijden, het providerabonnement indien bekend (bijvoorbeeld
Max (20x)) en tegoeden voor extra gebruik. Sessies die via een abonnement worden gefactureerd, verbergen dollarschattingen per token; via de API gefactureerde sessies behoudenEst. costen de uitsplitsing van kosten per type. Configuraties met de Claude Code CLI (claude-cli) gebruiken hetzelfde Anthropic-abonnementsgebruik. - macOS-menubalk: wanneer momentopnamen van providergebruik beschikbaar zijn, verschijnt onder Context een hoofdsectie ‘Gebruik’. Zie Menubalk.
openclaw channels list toont geen providergebruik meer; het verwijst gebruikers in plaats daarvan naar openclaw status of openclaw models list.
Kostengeschiedenis van Anthropic en OpenAI
Abonnementsquota en API-facturering zijn verschillende provideroppervlakken:
- Referenties voor Anthropic-abonnementen/configuraties blijven Claude-quotavensters en optionele budgetten voor extra gebruik tonen. Stel
ANTHROPIC_ADMIN_KEYofANTHROPIC_ADMIN_API_KEYin om in plaats daarvan de geschiedenis van de Usage and Cost API van de organisatie te tonen. Een Anthropic-providerreferentie die begint metsk-ant-adminwordt automatisch gedetecteerd. - OAuth voor OpenAI ChatGPT/Codex blijft het abonnement, quotavensters en tegoedsaldo tonen. Stel
OPENAI_ADMIN_KEYin om in plaats daarvan de kosten- en voltooiingsgebruiksgeschiedenis van de organisatie te tonen; stel eventueelOPENAI_PROJECT_IDin om deze tot één project te beperken. OpenClaw verzendt nooit inferentiereferenties uitOPENAI_API_KEY, providerconfiguratie of authenticatieprofielen naar organisatie-API's, omdat die sleutels bij aangepaste eindpunten kunnen horen.
Beheerdersreferenties hebben voorrang omdat ze de werkelijke organisatiefacturering leveren. OpenClaw combineert deze door de provider gerapporteerde totalen niet met zijn lokale sessieschattingen; de twee secties beantwoorden bewust verschillende vragen.
Standaardmodus voor de gebruiksvoettekst
/usage off|tokens|full stelt de voettekst voor een sessie in en wordt voor die
sessie onthouden. messages.responseUsage initialiseert die modus voor sessies die er nog
geen hebben gekozen, zodat de voettekst standaard ingeschakeld kan zijn zonder elke keer /usage te typen.
Stel één modus in voor elk kanaal, of een kaart per kanaal met een default-terugval:
{ "messages": { "responseUsage": "tokens", // of: { "default": "off", "discord": "full" } },}Geaccepteerde waarden: "off", "tokens", "full" en de verouderde alias "on" (behandeld als "tokens").
Drie afzonderlijke sessiestatussen
Het veld responseUsage van een sessie heeft drie weergeefbare statussen, elk met
een andere semantiek:
| Status | Opgeslagen waarde | Effectieve modus |
|---|---|---|
| Niet ingesteld / overnemen | undefined (afwezig) |
Valt terug op de configuratiestandaard messages.responseUsage en daarna off. |
| Expliciet uit | "off" (opgeslagen) |
Altijd uit; een configuratiestandaard die niet ‘uit’ is, kan de voettekst niet opnieuw inschakelen. |
| Expliciet aan | "tokens" of "full" (opgeslagen) |
Die modus, ongeacht de configuratiestandaard. |
Voorrang
Effectieve modus = sessieoverschrijving → kanaalconfiguratie-item → default → off.
Een expliciete /usage off wordt in de sessie permanent opgeslagen als de letterlijke waarde "off",
en is niet hetzelfde als ‘niet ingesteld’. Een standaardwaarde voor messages.responseUsage
die niet ‘uit’ is, kan de voettekst niet opnieuw inschakelen nadat de gebruiker deze expliciet heeft uitgeschakeld.
Opnieuw instellen versus uitschakelen
/usage offschakelt de voettekst gedwongen uit en slaat die keuze permanent op. Een geconfigureerde standaardwaarde die niet ‘uit’ is, kan dit niet overschrijven./usage reset(aliassen:default,inherit,inherited,clear,unpin) wist de sessieoverschrijving. De sessie neemt vervolgens de effectieve configuratiestandaard (messages.responseUsage) over. Als er geen standaardwaarde is geconfigureerd, blijft de voettekst uitgeschakeld.- Een volledige sessiereset (
/resetof/new) of een sessieovergang behoudt de expliciete voorkeur voor de gebruiksmodus, zodat de weergavekeuze van de gebruiker sessieovergangen overleeft. Alleen/usage reset(en de bijbehorende aliassen) wist de overschrijving.
Schakelgedrag
/usage zonder argumenten doorloopt: uit → tokens → volledig → uit. Het beginpunt
van de cyclus is de effectieve huidige modus (de sessieoverschrijving die, wanneer deze
niet is ingesteld, terugvalt op de configuratiestandaard), zodat de cyclus altijd overeenkomt met wat
de gebruiker momenteel in de voettekst ziet.
Configuratie
Zonder configuratie blijft het eerdere gedrag gelden (voettekst uit tot /usage). Gebruik
/usage reset om een sessieoverschrijving te wissen en de geconfigureerde standaardwaarde opnieuw over te nemen.
Aangepaste /usage full-voettekst
/usage tokens geeft altijd een eenvoudige Usage: X in / Y out-regel weer (plus achtervoegsels voor cache en
geschatte kosten wanneer beschikbaar). Alleen /usage full geeft de hieronder beschreven uitgebreidere
voettekst weer.
/usage full toont een ingebouwde compacte voettekst met model, redenering, snel/langzaam,
contextvenster en kosten wanneer die velden beschikbaar zijn. Voor de ingebouwde voettekst is
geen sjabloonbestand vereist.
messages.usageTemplate is alleen bedoeld voor geavanceerde aangepaste indelingen. De waarde is een
pad naar een JSON-bestand (ondersteunt ~) of een inline object, en vervangt de ingebouwde
voettekst wanneer deze geldig is. Een bestandspad wordt bewaakt en bij wijzigingen direct opnieuw geladen.
{ "messages": { "usageTemplate": "~/.openclaw/usage-footer.json" }}Ontbrekende of lege sjablonen vallen zonder melding terug op de ingebouwde voettekst. Onleesbare of ongeldige geconfigureerde sjablonen (ongeldige JSON of een structuur zonder weergeefbare uitvoeronderdelen) vallen eveneens terug op de ingebouwde voettekst en geven een waarschuwing voor de beheerder.
Baseer aangepaste sjablonen eerst op de ingebouwde structuur en bewerk daarna de onderdelen die je wilt wijzigen:
{ "schema": "openclaw.usageBar.v1", "scales": { "braille": "⠐⡀⡄⡆⡇⣇⣧⣷⣿", "block": "░▏▎▍▌▋▊▉█", "shade": "░▒▓█", "moon": "🌑🌘🌗🌖🌕", "level": "▁▂▃▄▅▆▇█", "weather": ["🥶", "☁️", "🌥", "⛅️", "🌤", "☀️"], "plants": ["", "🍂", "🌱", "☘️", "🍀", "🌿"], "moons6": ["🌑", "🌚", "🌘", "🌗", "🌖", "🌝"], }, "aliases": { "models": { "claude-opus-4-6": "opus46", "claude-opus-4-8": "opus48", "claude-sonnet-4-6": "sonnet46", "claude-haiku-4-5": "haiku45", "gpt-5.5": "gpt5.5", }, "reasoning": { "off": "🌑", "minimal": "🌚", "low": "🌘", "medium": "🌗", "high": "🌕", "xhigh": "🌝", }, }, "output": { "sep": "", "default": [ { "text": "{model.provider}{identity.emoji|🤖}{model.display_name|alias:models}" }, { "map": "model.is_fallback", "cases": { "true": "🔄" } }, { "map": "model.is_override", "cases": { "true": "📌" } }, { "when": "model.reasoning", "text": "{model.reasoning|alias:reasoning}" }, { "map": "state.fast_mode", "cases": { "true": "⚡️", "false": "🐌" } }, { "when": "context.max_tokens", "text": " | 📚[{context.pct_used|meter:5:braille}]{context.max_tokens|num}", }, { "when": "cost.turn_usd", "text": " 💰{cost.turn_usd|fixed:4}" }, ], "surfaces": { "discord": [ { "text": "-# -\n" }, { "text": "-# {model.provider}{identity.emoji|🤖}{model.display_name|alias:models}" }, { "map": "model.is_fallback", "cases": { "true": "🔄" } }, { "map": "model.is_override", "cases": { "true": "📌" } }, { "when": "model.reasoning", "text": "{model.reasoning|alias:reasoning}" }, { "map": "state.fast_mode", "cases": { "true": "⚡️", "false": "🐌" } }, { "when": "context.max_tokens", "text": " | 📚[{context.pct_used|meter:5:braille}]{context.max_tokens|num}", }, { "when": "cost.turn_usd", "text": " 💰{cost.turn_usd|fixed:4}" }, ], }, },}Structuur
{ "schema": "openclaw.usageBar.v1", "scales": { "<name>": "tekens van laag naar hoog" }, // tekenreeks (1 teken/karakter) of array "aliases": { "<table>": { "<value>": "<label>" } }, "output": { "sep": "", // voegt resterende onderdelen samen "default": [/* pieces */], // terugval voor elk oppervlak "surfaces": { "discord": [/* pieces */], "telegram": [/* pieces */], }, },}Elk oppervlak is een geordende lijst met onderdelen; de engine geeft elk onderdeel weer, verwijdert
lege onderdelen en voegt de resterende samen met sep. Een oppervlak zonder item gebruikt
output.default.
Contractpaden
Een onderdeel leest waarden uit het contract per beurt via een puntpad. Ontbrekende waarden zijn
leeg (zodat een when-voorwaarde of een |fallback het onderdeel schoon houdt).
| Pad | Betekenis |
|---|---|
surface |
kanaal-id (discord/telegram/enz.) |
agentId / chat_type |
id van de beherende agent / type chatinterface |
model.id / model.display_name / model.provider |
model-id / weergavenaam / provider-id |
model.actual, model.resolved_ref |
daadwerkelijk voor de beurt gebruikte provider-/modelreferentie |
model.requested |
aangevraagde provider-/modelreferentie (vóór fallback) |
model.reasoning |
inspanning (off tot en met xhigh) |
model.is_fallback / model.is_override |
booleaans: fallback gebruikt / model vastgezet |
model.override_source / model.auth_mode |
label van de overschrijvingsbron / referentiemodus (oauth, api-key, token, mixed, aws-sdk, unknown) |
state.fast_mode |
booleaans: snel versus langzaam |
state.compactions |
aantal Compactions voor de sessie |
context.max_tokens / context.used_tokens / context.pct_used |
vensterbudget / bezette tokens / 0-100 gebruikt |
usage.input_tokens / usage.output_tokens / usage.total_tokens |
totaal voor de beurt |
usage.cache_read_tokens / usage.cache_write_tokens |
tokens voor cachelezingen en cacheschrijfbewerkingen voor de beurt |
usage.has_tokens / usage.has_split_tokens / usage.has_total_only_tokens |
voorwaarden voor tokenweergave |
usage.cache_hit_pct |
aandeel cachelezingen van het totale aantal prompttokens |
usage.last.input_tokens / usage.last.output_tokens / usage.last.cache_hit_pct |
alleen de laatste modelaanroep (heeft ook cache_read_tokens, cache_write_tokens, total_tokens) |
cost.turn_usd / cost.available |
geschatte kosten van de beurt / of een kostentabel is gevonden |
timing.duration_ms |
duur van de beurt volgens de klok |
identity.name / identity.emoji / identity.avatar |
naam / emoji / avatar van de agentidentiteit |
session.id |
sessie-id |
(Vensters voor snelheidslimieten van providers maken geen deel uit van dit contract; er is momenteel geen pad met een arraywaarde, dus een each-onderdeel heeft niets om over te itereren.)
Werkwoorden
Leid een waarde van links naar rechts door werkwoorden; een segment dat geen werkwoord is, dient als fallback.
| Werkwoord | Effect | Voorbeeld |
|---|---|---|
num |
compact aantal | 272000 -> 272k |
fixed:N |
N decimalen (0..100, standaard 2) |
0.0377 |
dur |
seconden naar tijdsduur | 14820 -> 4h07m |
pct |
voeg % toe |
96 -> 96% |
inv |
100 - x |
om gebruikt naar resterend om te zetten |
alias:TABLE |
opzoeken in aliases, ongewijzigd weergeven indien niet vermeld |
medium -> 🌗 |
meter:W:SCALE |
glyphbalk van W cellen voor een waarde van 0-100 | [⣿⣿⠐⠐⠐] (meter:1 = één glyph) |
fixed:N accepteert alleen een volledig decimaal geheel getal van 0 tot en met 100. Ongeldige
precisieargumenten maken die interpolatie leeg.
meter:W:SCALE accepteert alleen een volledige decimale gehele breedte van 1 tot en met 100. Laat de breedte leeg om de standaardwaarde 5 (meter::braille) te gebruiken; ongeldige
breedtes maken die interpolatie leeg.
Onderdeelvormen
{ "text": "📚 {context.max_tokens|num}" }: letterlijke tekst + interpolatie.{ "when": "<path>", "text": "..." }: alleen renderen als het pad een waarheidswaarde heeft.{ "map": "<path>", "cases": { "true": "⚡", "false": "🐌" } }: waarde naar glyph (een_default-geval dekt waarden zonder overeenkomst).{ "each": "<array-path>", "item": "{label}" }: itereren over een pad met een arraywaarde (geen enkel huidig contractpad is een array).
Voorbeeld
{ "schema": "openclaw.usageBar.v1", "scales": { "braille": "⠐⡀⡄⡆⡇⣇⣧⣷⣿" }, "aliases": { "reasoning": { "medium": "🌗", "high": "🌕" } }, "output": { "surfaces": { "discord": [ { "text": "{model.display_name}" }, { "when": "model.reasoning", "text": " {model.reasoning|alias:reasoning}" }, { "map": "state.fast_mode", "cases": { "true": " ⚡", "false": " 🐌" } }, { "when": "context.max_tokens", "text": " | 📚 [{context.pct_used|meter:5:braille}]{context.max_tokens|num}", }, ], }, },}rendert bijvoorbeeld claude-sonnet-4-6 🌗 🐌 | 📚 [⣿⣿⣿⣿⣧]272k.
Providers + referenties
Gebruik wordt verborgen wanneer geen bruikbare providerreferenties voor gebruik kunnen worden gevonden. OpenClaw
ontdekt automatisch ingeschakelde providerplugins die
contracts.usageProviders declareren en zowel resolveUsageAuth als
fetchUsageSnapshot implementeren; er is geen afzonderlijke allowlist voor providers in de kern. Het statische
contract houdt de ontdekking afgebakend zonder elke providerplugin te importeren. Elke
plugin beheert zijn eigen upstream-eindpunt en responstoewijzing. De
gedeelde momentopname houdt plannamen, quotavensters, saldi, uitgaven en budgetten
providerneutraal voor gebruikers van de CLI, app en Control UI.
- Anthropic (Claude): OAuth-tokens in authenticatieprofielen. Als het OAuth-token het
bereik
user:profilemist, wordt teruggevallen op eenclaude.ai-websessie (CLAUDE_AI_SESSION_KEY,CLAUDE_WEB_SESSION_KEYof eensessionKey=-cookie inCLAUDE_WEB_COOKIE) indien ingesteld. Modelspecifieke limieten en ingeschakelde extra maandelijkse gebruiksuitgaven/-budgetten worden opgenomen wanneer Anthropic deze rapporteert. Een expliciete Anthropic Admin API-sleutel, of een automatisch gedetecteerdsk-ant-admin...-providerprofiel, toont in plaats daarvan de organisatiekosten over 30 dagen en de geschiedenis van de Messages API. - ClawRouter: API-sleutel (
CLAWROUTER_API_KEY). Toont een maandelijks budgetvenster en een getypeerd budget in USD wanneer dit is geconfigureerd; anders worden de totale uitgaven en een overzicht van aanvragen/tokens/kosten weergegeven. - DeepSeek: API-sleutel via omgeving/configuratie/authenticatieopslag (
DEEPSEEK_API_KEY). Toont elk door de provider gerapporteerd valutasaldo. - GitHub Copilot: OAuth-tokens in authenticatieprofielen.
- Gemini CLI: OAuth-tokens in authenticatieprofielen.
- MiniMax: API-sleutel of MiniMax OAuth-authenticatieprofiel. OpenClaw behandelt
minimax,minimax-cnenminimax-portalals hetzelfde MiniMax-quotaoppervlak, geeft waar aanwezig de voorkeur aan opgeslagen MiniMax OAuth en valt anders terug opMINIMAX_CODE_PLAN_KEY,MINIMAX_CODING_API_KEYofMINIMAX_API_KEY. Bij het opvragen van gebruik wordt de Coding Plan-host afgeleid vanmodels.providers.minimax-portal.baseUrlofmodels.providers.minimax.baseUrlwanneer deze zijn geconfigureerd; anders wordt de MiniMax CN-host gebruikt. De onbewerkte veldenusage_percent/usagePercentvan MiniMax betekenen resterend quota, dus OpenClaw keert ze vóór weergave om; op aantallen gebaseerde velden hebben voorrang wanneer ze aanwezig zijn.- Vensterlabels zijn afkomstig van de uren-/minutenvelden van de provider wanneer deze aanwezig zijn en
vallen vervolgens terug op het bereik
start_time/end_time. - Als het coding-plan-eindpunt
model_remainsretourneert, geeft OpenClaw de voorkeur aan de chatmodelvermelding, leidt het vensterlabel af uit tijdstempels wanneer expliciete veldenwindow_hours/window_minutesontbreken en neemt de modelnaam op in het planlabel.
- Vensterlabels zijn afkomstig van de uren-/minutenvelden van de provider wanneer deze aanwezig zijn en
vallen vervolgens terug op het bereik
- OpenAI (Codex/ChatGPT-abonnement): OAuth-tokens in authenticatieprofielen (
ChatGPT-Account-Id- header wordt verzonden wanneer een account-id aanwezig is). Toont het ChatGPT-abonnement, resetbare Codex-vensters en een tegoedsaldo wanneer dit wordt gerapporteerd. Tegoeden blijven providertegoeden; OpenClaw labelt ze niet als dollars.OPENAI_ADMIN_KEYvoegt organisatiekosten over 30 dagen en de gebruiksgeschiedenis van completions toe wanneer de sleutel toegang tot het Usage Dashboard heeft. Referenties voor inferentie worden nooit doorgestuurd naar organisatie-API's. - OpenRouter: API-sleutel of door OAuth ondersteunde API-sleutel (
OPENROUTER_API_KEYof een authenticatieprofiel). Combineert het eindpunt voor accounttegoeden met het eindpunt voor het sleutelquotum, zodat accountsaldo/-uitgaven, sleutelbudget en dagelijks/wekelijks/maandelijks gebruik worden weergegeven wanneer de referentie er toegang toe heeft. Elk eindpunt kan de momentopname onafhankelijk verrijken. - Venice: API-sleutel via omgeving/configuratie/authenticatieopslag (
VENICE_API_KEY). Toont USD- en DIEM-saldi plus het gebruik van DIEM-epochtoewijzingen wanneer dit wordt gerapporteerd. - Xiaomi MiMo: twee afzonderlijke gebruiksoppervlakken. Betalen naar gebruik gebruikt een API-sleutel
(
XIAOMI_API_KEY); het Token Plan gebruikt een afzonderlijke sleutel (XIAOMI_TOKEN_PLAN_API_KEY). Geen van beide rapporteert momenteel quotavensters. - z.ai: API-sleutel via omgeving/configuratie/authenticatieopslag (
ZAI_API_KEYofZ_AI_API_KEY).