Concept internals
Monitoramento de uso
O que é
- Obtém o uso e a cota do provedor diretamente do endpoint de uso de cada provedor. Não há estimativa de cobrança do provedor; somente nomes de planos, janelas de cota, saldos, gastos, orçamentos, histórico de custos diários, atribuição de tokens/modelos ou resumos do estado da conta informados pelo provedor.
- A saída legível das janelas de cota é normalizada como
X% left, mesmo quando um provedor informa a cota consumida, a cota restante ou apenas contagens brutas. Provedores sem janelas de cota redefiníveis exibem um texto de resumo do provedor (por exemplo, um saldo). - O
/statusno nível da sessão e a ferramentasession_statusrecorrem ao log de transcrição da sessão quando o instantâneo da sessão ativa não contém dados de tokens/modelo. Esse recurso preenche contadores ausentes de tokens/cache, pode recuperar o rótulo do modelo de runtime ativo e prefere o maior total orientado ao prompt quando os metadados da sessão estão ausentes ou são menores (totalTokensFresh !== true, zero ou abaixo do valor derivado da transcrição). Valores ativos diferentes de zero sempre prevalecem sobre esse recurso.
Onde aparece
/statusnos chats: cartão de status com os tokens da sessão e o custo estimado (somente modelos com chave de API). Quando disponível, o uso do provedor é exibido para o provedor do modelo atual, como uma janela normalizadaX% leftou um texto de resumo do provedor./usage off|tokens|fullnos chats: rodapé de uso por resposta./usage costnos chats: resumo local de custos agregado com base nos logs de sessão do OpenClaw.- CLI:
openclaw status --usageimprime uma análise completa do uso e da cota por provedor. - CLI:
openclaw models statuslista os perfis de autenticação OAuth/token e exibe um resumo da janela de uso ao lado de cada provedor que tenha uma. - Interface de Controle: Uso exibe cartões do plano e da cobrança do provedor acima da análise de tokens e custos estimados do OpenClaw derivada da sessão. As credenciais da API Admin da Anthropic e da OpenAI acrescentam gastos informados pelo provedor referentes a hoje, 7 dias e 30 dias, tendências diárias, totais de tokens, principais modelos e categorias de custos.
- Interface de Controle: o popover do anel de contexto do compositor do chat exibe o uso do plano para provedores de assinatura — barras por janela (5 horas, semanal e específica do modelo), com horários de redefinição, o plano do provedor quando conhecido (por exemplo,
Max (20x)) e créditos de uso adicional. Sessões cobradas por meio de um plano ocultam estimativas monetárias por token; sessões cobradas via API mantêmEst. coste a análise de custos por tipo. Configurações da CLI do Claude Code (claude-cli) reutilizam o mesmo uso da assinatura da Anthropic. - Barra de menus do macOS: uma seção raiz "Uso" aparece abaixo de Contexto quando estão disponíveis instantâneos de uso do provedor. Consulte Barra de menus.
openclaw channels list não imprime mais o uso do provedor; em vez disso, direciona os usuários para openclaw status ou openclaw models list.
Histórico de custos da Anthropic e da OpenAI
A cota de assinatura e a cobrança da API são superfícies diferentes do provedor:
- As credenciais de assinatura/configuração da Anthropic continuam exibindo as janelas de cota do Claude e orçamentos opcionais de uso adicional. Defina
ANTHROPIC_ADMIN_KEYouANTHROPIC_ADMIN_API_KEYpara exibir o histórico das APIs de Uso e Custo da organização. Uma credencial do provedor Anthropic que comece comsk-ant-adminé detectada automaticamente. - O OAuth do OpenAI ChatGPT/Codex continua exibindo o plano, as janelas de cota e o saldo de créditos. Defina
OPENAI_ADMIN_KEYpara exibir o histórico de custos e uso de conclusões da organização; opcionalmente, definaOPENAI_PROJECT_IDpara restringi-lo a um projeto. O OpenClaw nunca envia credenciais de inferência deOPENAI_API_KEY, da configuração do provedor ou dos perfis de autenticação para APIs da organização, pois essas chaves podem pertencer a endpoints personalizados.
As credenciais administrativas têm precedência porque fornecem a cobrança real da organização. O OpenClaw não combina esses totais informados pelo provedor com suas estimativas locais de sessão; as duas seções respondem intencionalmente a perguntas diferentes.
Modo padrão do rodapé de uso
/usage off|tokens|full define o rodapé de uma sessão e essa configuração é lembrada para essa
sessão. messages.responseUsage inicializa esse modo para sessões que ainda não
escolheram um, permitindo que o rodapé fique ativado por padrão sem digitar /usage todas as vezes.
Defina um modo para todos os canais ou um mapa por canal com um fallback default:
{ "messages": { "responseUsage": "tokens", // or: { "default": "off", "discord": "full" } },}Valores aceitos: "off", "tokens", "full" e o alias legado "on" (tratado como "tokens").
Três estados distintos da sessão
O campo responseUsage de uma sessão tem três estados representáveis, cada um com
uma semântica diferente:
| Estado | Valor armazenado | Modo efetivo |
|---|---|---|
| Não definido / herdar | undefined (ausente) |
Recorre ao padrão da configuração messages.responseUsage e depois a off. |
| Desativado explicitamente | "off" (armazenado) |
Sempre desativado; um padrão de configuração diferente de off não pode reativar o rodapé. |
| Ativado explicitamente | "tokens" ou "full" (armazenado) |
Esse modo, independentemente do padrão da configuração. |
Precedência
Modo efetivo = substituição da sessão → entrada de configuração do canal → default → off.
Um /usage off explícito é persistido como o valor literal "off" na
sessão, o que não equivale a "não definido". Um padrão messages.responseUsage
diferente de off não pode reativar o rodapé depois que o usuário o desativou explicitamente.
Redefinir em comparação com desativar
/usage offforça a desativação do rodapé e persiste essa escolha. Um padrão configurado diferente deoffnão pode substituí-la./usage reset(aliases:default,inherit,inherited,clear,unpin) limpa a substituição da sessão. A sessão passa então a herdar o padrão efetivo da configuração (messages.responseUsage). Se nenhum padrão estiver configurado, o rodapé permanecerá desativado.- Uma redefinição completa da sessão (
/resetou/new) ou uma rotação de sessão preserva a preferência explícita do modo de uso, para que a escolha de exibição do usuário sobreviva às rotações de sessão. Somente/usage reset(e seus aliases) limpa a substituição.
Comportamento da alternância
/usage sem argumentos percorre: off → tokens → full → off. O ponto inicial
do ciclo é o modo atual efetivo (a substituição da sessão recorre
ao padrão da configuração quando não está definida), portanto o ciclo sempre corresponde ao que
o usuário vê atualmente no rodapé.
Configuração
Sem configuração, o comportamento anterior é mantido (rodapé desativado até o uso de /usage). Use
/usage reset para limpar uma substituição da sessão e voltar a herdar o padrão configurado.
Rodapé personalizado de /usage full
/usage tokens sempre renderiza uma linha simples Usage: X in / Y out (além de sufixos de cache e
custo estimado, quando disponíveis). Somente /usage full renderiza o rodapé mais
detalhado descrito abaixo.
/usage full exibe um rodapé compacto integrado com modelo, raciocínio, modo rápido/lento,
janela de contexto e custo quando esses campos estão disponíveis. Nenhum arquivo de modelo
é necessário para o rodapé integrado.
messages.usageTemplate destina-se apenas a layouts personalizados avançados. O valor é um
caminho de arquivo JSON (compatível com ~) ou um objeto embutido, e substitui o rodapé
integrado quando é válido. Um caminho de arquivo é monitorado e recarregado em tempo real quando alterado.
{ "messages": { "usageTemplate": "~/.openclaw/usage-footer.json" }}Modelos ausentes ou vazios recorrem silenciosamente ao rodapé integrado. Modelos configurados ilegíveis ou inválidos (JSON inválido ou uma estrutura sem partes de saída renderizáveis) também recorrem ao rodapé integrado e emitem um aviso ao operador.
Comece os modelos personalizados com a estrutura integrada e depois edite as partes que deseja alterar:
{ "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}" }, ], }, },}Estrutura
{ "schema": "openclaw.usageBar.v1", "scales": { "<name>": "low-to-high glyphs" }, // string (1 glyph/char) or array "aliases": { "<table>": { "<value>": "<label>" } }, "output": { "sep": "", // joins surviving pieces "default": [/* pieces */], // fallback for any surface "surfaces": { "discord": [/* pieces */], "telegram": [/* pieces */], }, },}Cada superfície é uma lista ordenada de partes; o mecanismo renderiza cada uma, descarta
as vazias e une as restantes com sep. Uma superfície sem entrada usa
output.default.
Caminhos do contrato
Uma parte lê valores do contrato por turno por meio de um caminho com pontos. Valores ausentes ficam
vazios (portanto, uma proteção when ou um |fallback mantém a parte limpa).
| Caminho | Significado |
|---|---|
surface |
id do canal (discord/telegram/etc.) |
agentId / chat_type |
id do agente proprietário / tipo de superfície de chat |
model.id / model.display_name / model.provider |
id do modelo / nome de exibição / id do provedor |
model.actual, model.resolved_ref |
referência de provedor/modelo efetivamente usada no turno |
model.requested |
referência de provedor/modelo solicitada (antes do fallback) |
model.reasoning |
esforço (off a xhigh) |
model.is_fallback / model.is_override |
bool: fallback usado / modelo fixado |
model.override_source / model.auth_mode |
rótulo da origem da substituição / modo de credencial (oauth, api-key, token, mixed, aws-sdk, unknown) |
state.fast_mode |
bool: rápido vs. lento |
state.compactions |
contagem de Compaction da sessão |
context.max_tokens / context.used_tokens / context.pct_used |
orçamento da janela / tokens ocupados / percentual usado de 0 a 100 |
usage.input_tokens / usage.output_tokens / usage.total_tokens |
agregado do turno |
usage.cache_read_tokens / usage.cache_write_tokens |
tokens de leitura e gravação do cache no turno |
usage.has_tokens / usage.has_split_tokens / usage.has_total_only_tokens |
condições de exibição dos tokens |
usage.cache_hit_pct |
parcela de leituras do cache no total de tokens do prompt |
usage.last.input_tokens / usage.last.output_tokens / usage.last.cache_hit_pct |
somente a chamada final do modelo (também tem cache_read_tokens, cache_write_tokens, total_tokens) |
cost.turn_usd / cost.available |
custo estimado do turno / se uma tabela de custos foi encontrada |
timing.duration_ms |
duração do turno em tempo decorrido |
identity.name / identity.emoji / identity.avatar |
nome / emoji / avatar da identidade do agente |
session.id |
id da sessão |
(As janelas de limite de taxa do provedor não fazem parte deste contrato; atualmente não há nenhum caminho com valor de matriz, portanto uma parte each não tem nada sobre o que iterar.)
Verbos
Passe um valor pelos verbos da esquerda para a direita; um segmento que não seja verbo é o fallback.
| Verbo | Efeito | Exemplo |
|---|---|---|
num |
contagem compacta | 272000 -> 272k |
fixed:N |
N casas decimais (padrão: 2) | 0.0377 |
dur |
segundos para duração | 14820 -> 4h07m |
pct |
acrescenta % |
96 -> 96% |
inv |
100 - x |
de usado para restante |
alias:TABLE |
busca em aliases; repete se não estiver na lista |
medium -> 🌗 |
meter:W:SCALE |
barra de glifos com W células para um valor de 0–100 | [⣿⣿⠐⠐⠐] (meter:1 = um glifo) |
Formatos das partes
{ "text": "📚 {context.max_tokens|num}" }: literal + interpolação.{ "when": "<path>", "text": "..." }: renderiza somente se o caminho tiver valor verdadeiro.{ "map": "<path>", "cases": { "true": "⚡", "false": "🐌" } }: valor para glifo (um caso_defaultabrange valores sem correspondência).{ "each": "<array-path>", "item": "{label}" }: itera sobre um caminho com valor de matriz (nenhum caminho do contrato atual é uma matriz).
Exemplo
{ "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}", }, ], }, },}renderiza, por exemplo, claude-sonnet-4-6 🌗 🐌 | 📚 [⣿⣿⣿⣿⣧]272k.
Provedores + credenciais
O uso fica oculto quando não é possível encontrar uma autenticação de uso válida para o provedor. O OpenClaw
descobre automaticamente Plugins de provedor habilitados que declaram
contracts.usageProviders e implementam tanto resolveUsageAuth quanto
fetchUsageSnapshot; não há uma lista de permissões separada para provedores no núcleo. O contrato
estático mantém o escopo da descoberta sem importar todos os Plugins de provedor. Cada
Plugin é responsável pelo próprio endpoint upstream e pelo mapeamento de respostas. O
snapshot compartilhado mantém nomes de planos, janelas de cota, saldos, gastos e orçamentos
independentes do provedor para consumidores da CLI, do aplicativo e da interface de controle.
- Anthropic (Claude): tokens OAuth em perfis de autenticação. Se o token OAuth não tiver
o escopo
user:profile, usa como fallback uma sessão web doclaude.ai(CLAUDE_AI_SESSION_KEY,CLAUDE_WEB_SESSION_KEYou um cookiesessionKey=emCLAUDE_WEB_COOKIE), quando configurada. Limites específicos por modelo e gastos/orçamentos mensais habilitados para uso adicional são incluídos quando a Anthropic os informa. Uma chave explícita da Anthropic Admin API ou um perfil de provedorsk-ant-admin...detectado automaticamente exibe, em vez disso, o custo da organização em 30 dias e o histórico da Messages API. - ClawRouter: chave de API (
CLAWROUTER_API_KEY). Exibe uma janela de orçamento mensal e um orçamento tipado em USD quando configurado; caso contrário, exibe o gasto agregado e um resumo de solicitações/tokens/custos. - DeepSeek: chave de API via ambiente/configuração/armazenamento de autenticação (
DEEPSEEK_API_KEY). Exibe o saldo de cada moeda informado pelo provedor. - GitHub Copilot: tokens OAuth em perfis de autenticação.
- Gemini CLI: tokens OAuth em perfis de autenticação.
- MiniMax: chave de API ou perfil de autenticação OAuth da MiniMax. O OpenClaw considera
minimax,minimax-cneminimax-portalcomo a mesma superfície de cota da MiniMax, dá preferência ao OAuth armazenado da MiniMax quando disponível e, caso contrário, usa como fallbackMINIMAX_CODE_PLAN_KEY,MINIMAX_CODING_API_KEYouMINIMAX_API_KEY. A consulta de uso deriva o host do Coding Plan demodels.providers.minimax-portal.baseUrloumodels.providers.minimax.baseUrlquando configurado; caso contrário, usa o host da MiniMax CN. Os campos brutosusage_percent/usagePercentda MiniMax representam a cota restante, portanto o OpenClaw os inverte antes da exibição; campos baseados em contagem têm prioridade quando presentes.- Os rótulos das janelas vêm dos campos de horas/minutos do provedor quando presentes e depois
usam como fallback o intervalo entre
start_time/end_time. - Se o endpoint do plano de codificação retornar
model_remains, o OpenClaw dá preferência à entrada do modelo de chat, deriva o rótulo da janela dos carimbos de data e hora quando os campos explícitoswindow_hours/window_minutesestão ausentes e inclui o nome do modelo no rótulo do plano.
- Os rótulos das janelas vêm dos campos de horas/minutos do provedor quando presentes e depois
usam como fallback o intervalo entre
- OpenAI (plano Codex/ChatGPT): tokens OAuth em perfis de autenticação (o cabeçalho
ChatGPT-Account-Idé enviado quando há um id de conta). Exibe o plano do ChatGPT, as janelas redefiníveis do Codex e um saldo de créditos quando informado. Os créditos continuam sendo créditos do provedor; o OpenClaw não os identifica como dólares.OPENAI_ADMIN_KEYadiciona o custo da organização em 30 dias e o histórico de uso de conclusões quando a chave tem acesso ao Usage Dashboard. As credenciais de inferência nunca são encaminhadas às APIs da organização. - OpenRouter: chave de API ou chave de API baseada em OAuth (
OPENROUTER_API_KEYou um perfil de autenticação). Combina o endpoint de créditos da conta com o endpoint de cota da chave, de modo que saldo/gastos da conta, orçamento da chave e uso diário/semanal/mensal apareçam quando a credencial puder acessá-los. Qualquer um dos endpoints pode enriquecer o snapshot de forma independente. - Venice: chave de API via ambiente/configuração/armazenamento de autenticação (
VENICE_API_KEY). Exibe saldos em USD e DIEM, além do uso da alocação por época do DIEM quando informado. - Xiaomi MiMo: duas superfícies de uso separadas. O pagamento conforme o uso utiliza uma chave de API
(
XIAOMI_API_KEY); o Token Plan utiliza uma chave separada (XIAOMI_TOKEN_PLAN_API_KEY). Atualmente, nenhum deles informa janelas de cota. - z.ai: chave de API via ambiente/configuração/armazenamento de autenticação (
ZAI_API_KEYouZ_AI_API_KEY).