Concept internals
Seguimiento del uso
Qué es
- Obtiene el uso y la cuota del proveedor directamente desde el endpoint de uso de cada proveedor. No se estima la facturación del proveedor; solo se incluyen los nombres de planes, períodos de cuota, saldos, gastos, presupuestos, historial de costes diarios, atribución de tokens/modelos o resúmenes del estado de la cuenta comunicados por el proveedor.
- La salida legible de los períodos de cuota se normaliza a
X% left, incluso cuando un proveedor informa de la cuota consumida, la cuota restante o solo recuentos sin procesar. Los proveedores sin períodos de cuota restablecibles muestran en su lugar el texto de resumen del proveedor (por ejemplo, un saldo). - El
/statusde nivel de sesión y la herramientasession_statusrecurren al registro de transcripción de la sesión cuando la instantánea de la sesión activa no contiene datos de tokens/modelos. Ese mecanismo alternativo completa los contadores de tokens/caché que falten, puede recuperar la etiqueta del modelo de ejecución activo y prefiere el total más alto orientado al prompt cuando faltan los metadatos de la sesión o son inferiores (totalTokensFresh !== true, cero o por debajo del valor derivado de la transcripción). Los valores activos distintos de cero siempre prevalecen sobre el mecanismo alternativo.
Dónde aparece
/statusen los chats: tarjeta de estado con los tokens de la sesión y el coste estimado (solo modelos con clave de API). Cuando está disponible, se muestra el uso del proveedor del modelo actual, como un períodoX% leftnormalizado o como texto de resumen del proveedor./usage off|tokens|fullen los chats: pie de uso por respuesta./usage costen los chats: resumen de costes locales agregado a partir de los registros de sesión de OpenClaw.- CLI:
openclaw status --usageimprime un desglose completo del uso y la cuota por proveedor. - CLI:
openclaw models statusenumera los perfiles de autenticación OAuth/token y muestra un resumen de los períodos de uso junto a cada proveedor que disponga de uno. - Interfaz de control: Uso muestra tarjetas del plan y de facturación del proveedor sobre el análisis de tokens y costes estimados derivado de las sesiones de OpenClaw. Las credenciales de la API de administración de Anthropic y OpenAI añaden el gasto comunicado por el proveedor de hoy, de 7 días y de 30 días, tendencias diarias, totales de tokens, modelos principales y categorías de costes.
- Interfaz de control: la ventana emergente del anillo de contexto del redactor de chats muestra el uso del plan para los proveedores de suscripción: barras por período (5 horas, semanal y específico del modelo) con horas de restablecimiento, el plan del proveedor cuando se conoce (por ejemplo,
Max (20x)) y créditos de uso adicional. Las sesiones facturadas mediante un plan ocultan las estimaciones monetarias por token; las sesiones facturadas mediante API conservanEst. costy el desglose de costes por tipo. Las configuraciones de la CLI de Claude Code (claude-cli) reutilizan el mismo uso de la suscripción de Anthropic. - Barra de menús de macOS: aparece una sección raíz «Uso» debajo de Contexto cuando hay disponibles instantáneas de uso del proveedor. Consulte Barra de menús.
openclaw channels list ya no imprime el uso del proveedor; en su lugar, dirige a los usuarios a openclaw status o openclaw models list.
Historial de costes de Anthropic y OpenAI
La cuota de suscripción y la facturación de la API son superficies distintas del proveedor:
- Las credenciales de suscripción/configuración de Anthropic siguen mostrando los períodos de cuota de Claude y los presupuestos opcionales de uso adicional. Configure
ANTHROPIC_ADMIN_KEYoANTHROPIC_ADMIN_API_KEYpara mostrar en su lugar el historial de las API de uso y costes de la organización. Las credenciales de proveedor de Anthropic que comiencen porsk-ant-adminse detectan automáticamente. - OAuth de OpenAI ChatGPT/Codex sigue mostrando el plan, los períodos de cuota y el saldo de crédito. Configure
OPENAI_ADMIN_KEYpara mostrar en su lugar el historial de costes y uso de finalizaciones de la organización; opcionalmente, configureOPENAI_PROJECT_IDpara limitarlo a un proyecto. OpenClaw nunca envía credenciales de inferencia deOPENAI_API_KEY, de la configuración del proveedor ni de los perfiles de autenticación a las API de la organización, ya que esas claves pueden pertenecer a endpoints personalizados.
Las credenciales de administración tienen prioridad porque proporcionan la facturación real de la organización. OpenClaw no combina estos totales comunicados por el proveedor con sus estimaciones de sesión locales; las dos secciones responden deliberadamente a preguntas diferentes.
Modo predeterminado del pie de uso
/usage off|tokens|full establece el pie de una sesión y se recuerda durante esa
sesión. messages.responseUsage inicializa ese modo para las sesiones que no han
elegido uno, de modo que el pie pueda estar activado de forma predeterminada sin escribir /usage cada vez.
Configure un modo para todos los canales o un mapa por canal con un valor alternativo default:
{ "messages": { "responseUsage": "tokens", // o bien: { "default": "off", "discord": "full" } },}Valores aceptados: "off", "tokens", "full" y el alias heredado "on" (tratado como "tokens").
Tres estados de sesión distintos
El campo responseUsage de una sesión tiene tres estados representables, cada uno con
una semántica diferente:
| Estado | Valor almacenado | Modo efectivo |
|---|---|---|
| Sin definir / heredado | undefined (ausente) |
Recurre al valor predeterminado de configuración messages.responseUsage y después a off. |
| Desactivado explícitamente | "off" (almacenado) |
Siempre desactivado; un valor predeterminado de configuración distinto de desactivado no puede volver a activar el pie. |
| Activado explícitamente | "tokens" o "full" (almacenado) |
Ese modo, independientemente del valor predeterminado de configuración. |
Precedencia
Modo efectivo = anulación de la sesión → entrada de configuración del canal → default → off.
Un valor /usage off explícito se conserva como el valor literal "off" en la
sesión; no equivale a «sin definir». Un valor predeterminado messages.responseUsage
distinto de desactivado no puede volver a activar el pie después de que el usuario lo haya desactivado explícitamente.
Restablecer frente a desactivar
/usage offfuerza la desactivación del pie y conserva esa elección. Un valor predeterminado configurado distinto de desactivado no puede anularla./usage reset(alias:default,inherit,inherited,clear,unpin) borra la anulación de la sesión. La sesión pasa entonces a heredar el valor predeterminado efectivo de la configuración (messages.responseUsage). Si no hay ningún valor predeterminado configurado, el pie permanece desactivado.- Un restablecimiento completo de la sesión (
/reseto/new) o una rotación de sesión conserva la preferencia explícita del modo de uso, de modo que la opción de visualización del usuario sobreviva a las rotaciones de sesión. Solo/usage reset(y sus alias) borra la anulación.
Comportamiento de alternancia
/usage sin argumentos recorre: desactivado → tokens → completo → desactivado. El punto de partida
del ciclo es el modo actual efectivo (la anulación de la sesión recurre
al valor predeterminado de configuración cuando no está definida), por lo que el ciclo siempre coincide con lo que
el usuario ve actualmente en el pie.
Configuración
Sin configuración, se conserva el comportamiento anterior (pie desactivado hasta /usage). Utilice
/usage reset para borrar una anulación de sesión y volver a heredar el valor predeterminado configurado.
Pie /usage full personalizado
/usage tokens siempre representa una línea Usage: X in / Y out sencilla (además de los sufijos de caché y
coste estimado cuando están disponibles). Solo /usage full representa el pie más completo
descrito a continuación.
/usage full muestra un pie compacto integrado con el modelo, el razonamiento, el modo rápido/lento,
la ventana de contexto y el coste cuando esos campos están disponibles. No se requiere ningún archivo de plantilla
para el pie integrado.
messages.usageTemplate está destinado únicamente a diseños personalizados avanzados. El valor es una
ruta de archivo JSON (admite ~) o un objeto en línea, y sustituye al pie integrado
cuando es válido. La ruta de archivo se supervisa y se vuelve a cargar en directo cuando cambia.
{ "messages": { "usageTemplate": "~/.openclaw/usage-footer.json" }}Las plantillas ausentes o vacías recurren silenciosamente al pie integrado. Las plantillas configuradas que no puedan leerse o no sean válidas (JSON incorrecto o una estructura sin elementos de salida representables) también recurren al pie integrado y emiten una advertencia para el operador.
Parta de la estructura integrada para crear plantillas personalizadas y, a continuación, edite las partes que desee cambiar:
{ "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}" }, ], }, },}Estructura
{ "schema": "openclaw.usageBar.v1", "scales": { "<name>": "glifos de menor a mayor" }, // cadena (1 glifo/carácter) o matriz "aliases": { "<table>": { "<value>": "<label>" } }, "output": { "sep": "", // une los elementos restantes "default": [/* pieces */], // alternativa para cualquier superficie "surfaces": { "discord": [/* pieces */], "telegram": [/* pieces */], }, },}Cada superficie es una lista ordenada de elementos; el motor representa cada uno, descarta
los vacíos y une los restantes con sep. Una superficie sin entrada utiliza
output.default.
Rutas del contrato
Un elemento lee valores del contrato de cada turno mediante una ruta de puntos. Los valores ausentes están
vacíos (por lo que una protección when o un |fallback mantiene limpio el elemento).
| Ruta | Significado |
|---|---|
surface |
id del canal (discord/telegram/etc.) |
agentId / chat_type |
id del agente propietario / tipo de superficie de chat |
model.id / model.display_name / model.provider |
id del modelo / nombre para mostrar / id del proveedor |
model.actual, model.resolved_ref |
referencia de proveedor/modelo utilizada realmente para el turno |
model.requested |
referencia de proveedor/modelo solicitada (antes de la alternativa) |
model.reasoning |
esfuerzo (off a xhigh) |
model.is_fallback / model.is_override |
booleano: se usó una alternativa / modelo fijado |
model.override_source / model.auth_mode |
etiqueta de origen de la anulación / modo de credenciales (oauth, api-key, token, mixed, aws-sdk, unknown) |
state.fast_mode |
booleano: rápido frente a lento |
state.compactions |
recuento de Compaction de la sesión |
context.max_tokens / context.used_tokens / context.pct_used |
presupuesto de ventana / tokens ocupados / porcentaje usado de 0 a 100 |
usage.input_tokens / usage.output_tokens / usage.total_tokens |
agregado del turno |
usage.cache_read_tokens / usage.cache_write_tokens |
tokens de lectura y escritura de caché del turno |
usage.has_tokens / usage.has_split_tokens / usage.has_total_only_tokens |
protecciones de visualización de tokens |
usage.cache_hit_pct |
proporción de lecturas de caché respecto al total de tokens del prompt |
usage.last.input_tokens / usage.last.output_tokens / usage.last.cache_hit_pct |
solo la llamada final al modelo (también contiene cache_read_tokens, cache_write_tokens, total_tokens) |
cost.turn_usd / cost.available |
coste estimado del turno / si se resolvió una tabla de costes |
timing.duration_ms |
duración del turno según el tiempo transcurrido real |
identity.name / identity.emoji / identity.avatar |
nombre de identidad del agente / emoji / avatar |
session.id |
id de la sesión |
(Las ventanas de límite de frecuencia del proveedor no forman parte de este contrato; actualmente no hay ninguna ruta con valor de matriz, por lo que una pieza each no tiene nada sobre lo que iterar).
Verbos
Pase un valor por los verbos de izquierda a derecha; un segmento que no sea un verbo es la alternativa.
| Verbo | Efecto | Ejemplo |
|---|---|---|
num |
recuento compacto | 272000 -> 272k |
fixed:N |
N decimales (0..100, 2 de forma predeterminada) |
0.0377 |
dur |
segundos a duración | 14820 -> 4h07m |
pct |
añadir % |
96 -> 96% |
inv |
100 - x |
para convertir usado en restante |
alias:TABLE |
buscar en aliases, repetir si no aparece |
medium -> 🌗 |
meter:W:SCALE |
barra de glifos de W celdas sobre un valor de 0 a 100 | [⣿⣿⠐⠐⠐] (meter:1 = un glifo) |
fixed:N solo acepta un entero decimal completo de 0 a 100. Los argumentos de
precisión no válidos hacen que esa interpolación quede vacía.
meter:W:SCALE solo acepta un ancho entero decimal completo de 1 a 100. Deje el ancho en blanco para usar el valor predeterminado 5 (meter::braille); los
anchos no válidos hacen que esa interpolación quede vacía.
Formas de las piezas
{ "text": "📚 {context.max_tokens|num}" }: literal + interpolación.{ "when": "<path>", "text": "..." }: renderizar solo si la ruta es verdadera.{ "map": "<path>", "cases": { "true": "⚡", "false": "🐌" } }: valor a glifo (un caso_defaultabarca los valores sin coincidencia).{ "each": "<array-path>", "item": "{label}" }: iterar una ruta con valor de matriz (ninguna ruta del contrato actual es una matriz).
Ejemplo
{ "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}", }, ], }, },}se renderiza, por ejemplo, como claude-sonnet-4-6 🌗 🐌 | 📚 [⣿⣿⣿⣿⣧]272k.
Proveedores y credenciales
El uso se oculta cuando no se puede resolver ninguna autenticación de uso del proveedor que sea válida. OpenClaw
descubre automáticamente los plugins de proveedor habilitados que declaran
contracts.usageProviders e implementan tanto resolveUsageAuth como
fetchUsageSnapshot; no hay una lista de proveedores permitidos separada en el núcleo. El contrato
estático mantiene acotado el descubrimiento sin importar todos los plugins de proveedor. Cada
plugin es responsable de su endpoint ascendente y de la asignación de respuestas. La instantánea
compartida mantiene los nombres de planes, las ventanas de cuota, los saldos, el gasto y los presupuestos
independientes del proveedor para los consumidores de la CLI, la aplicación y la interfaz de control.
- Anthropic (Claude): tokens OAuth en los perfiles de autenticación. Si el token OAuth carece del
ámbito
user:profile, recurre a una sesión webclaude.ai(CLAUDE_AI_SESSION_KEY,CLAUDE_WEB_SESSION_KEYo una cookiesessionKey=enCLAUDE_WEB_COOKIE) cuando está configurada. Se incluyen los límites específicos del modelo y los gastos/presupuestos mensuales habilitados de uso adicional cuando Anthropic los notifica. En su lugar, una clave explícita de la API de administración de Anthropic, o un perfil de proveedorsk-ant-admin...detectado automáticamente, muestra el coste de la organización de los últimos 30 días y el historial de la API de mensajes. - ClawRouter: clave de API (
CLAWROUTER_API_KEY). Muestra una ventana de presupuesto mensual y un presupuesto tipado en USD cuando está configurado; de lo contrario, muestra el gasto agregado y un resumen de solicitudes/tokens/costes. - DeepSeek: clave de API mediante entorno/configuración/almacén de autenticación (
DEEPSEEK_API_KEY). Muestra cada saldo de divisa notificado por el proveedor. - GitHub Copilot: tokens OAuth en los perfiles de autenticación.
- Gemini CLI: tokens OAuth en los perfiles de autenticación.
- MiniMax: clave de API o perfil de autenticación OAuth de MiniMax. OpenClaw considera
minimax,minimax-cnyminimax-portalcomo la misma superficie de cuota de MiniMax, prefiere el OAuth de MiniMax almacenado cuando está disponible y, de lo contrario, recurre aMINIMAX_CODE_PLAN_KEY,MINIMAX_CODING_API_KEYoMINIMAX_API_KEY. El sondeo de uso obtiene el host de Coding Plan demodels.providers.minimax-portal.baseUrlomodels.providers.minimax.baseUrlcuando están configurados y, de lo contrario, usa el host de MiniMax para China. Los campos sin procesarusage_percent/usagePercentde MiniMax representan la cuota restante, por lo que OpenClaw los invierte antes de mostrarlos; los campos basados en recuentos tienen prioridad cuando están presentes.- Las etiquetas de ventana provienen de los campos de horas/minutos del proveedor cuando están presentes y, después,
recurren al intervalo
start_time/end_time. - Si el endpoint del plan de codificación devuelve
model_remains, OpenClaw prefiere la entrada del modelo de chat, obtiene la etiqueta de la ventana de las marcas de tiempo cuando no existen campos explícitoswindow_hours/window_minutese incluye el nombre del modelo en la etiqueta del plan.
- Las etiquetas de ventana provienen de los campos de horas/minutos del proveedor cuando están presentes y, después,
recurren al intervalo
- OpenAI (plan Codex/ChatGPT): tokens OAuth en los perfiles de autenticación (se envía el encabezado
ChatGPT-Account-Idcuando hay un id de cuenta). Muestra el plan de ChatGPT, las ventanas restablecibles de Codex y un saldo de créditos cuando se notifican. Los créditos siguen siendo créditos del proveedor; OpenClaw no los etiqueta como dólares.OPENAI_ADMIN_KEYañade el coste de la organización de los últimos 30 días y el historial de uso de completados cuando la clave tiene acceso al panel de uso. Las credenciales de inferencia nunca se reenvían a las API de la organización. - OpenRouter: clave de API o clave de API respaldada por OAuth (
OPENROUTER_API_KEYo un perfil de autenticación). Combina el endpoint de créditos de la cuenta con el endpoint de cuota de la clave, de modo que aparecen el saldo/gasto de la cuenta, el presupuesto de la clave y el uso diario/semanal/mensual cuando la credencial puede acceder a ellos. Cualquiera de los endpoints puede enriquecer la instantánea de forma independiente. - Venice: clave de API mediante entorno/configuración/almacén de autenticación (
VENICE_API_KEY). Muestra los saldos en USD y DIEM, además del uso de la asignación por época de DIEM cuando se notifica. - Xiaomi MiMo: dos superficies de uso independientes. El pago por uso utiliza una clave de API
(
XIAOMI_API_KEY); Token Plan utiliza una clave independiente (XIAOMI_TOKEN_PLAN_API_KEY). Actualmente, ninguna de las dos informa de ventanas de cuota. - z.ai: clave de API mediante entorno/configuración/almacén de autenticación (
ZAI_API_KEYoZ_AI_API_KEY).