Concept internals
Відстеження використання
Що це таке
- Отримує дані про використання та квоти постачальника безпосередньо з кінцевої точки використання кожного постачальника. Жодних оцінок оплати постачальника; лише повідомлені постачальником назви планів, вікна квот, баланси, витрати, бюджети, щоденна історія вартості, атрибуція токенів і моделей або зведення стану облікового запису.
- Зручний для читання вивід вікна квоти нормалізується до
залишилося X%, навіть якщо постачальник повідомляє використану квоту, залишок квоти або лише необроблені лічильники. Для постачальників без вікон квот зі скиданням натомість відображається текстове зведення постачальника (наприклад, баланс). /statusна рівні сеансу та інструментsession_statusвикористовують журнал транскрипту сеансу як резервне джерело, якщо в актуальному знімку сеансу відсутні дані про токени або модель. Це резервне джерело заповнює відсутні лічильники токенів і кешу, може відновити мітку активної моделі середовища виконання та надає перевагу більшому загальному значенню, орієнтованому на запит, якщо метадані сеансу відсутні або містять менше значення (totalTokensFresh !== true, нуль чи значення нижче за отримане з транскрипту). Ненульові актуальні значення завжди мають перевагу над резервними.
Де це відображається
/statusу чатах: картка стану з токенами сеансу та орієнтовною вартістю (лише для моделей із ключем API). Дані про використання постачальника відображаються для постачальника поточної моделі, якщо доступні, як нормалізоване вікнозалишилося X%або текстове зведення постачальника./usage off|tokens|fullу чатах: примітка про використання для кожної відповіді./usage costу чатах: локальне зведення вартості, агреговане з журналів сеансів OpenClaw.- CLI:
openclaw status --usageвиводить повну розбивку використання та квот за постачальниками. - CLI:
openclaw models statusперелічує профілі автентифікації OAuth/токеном і показує зведення вікна використання біля кожного постачальника, для якого воно доступне. - Інтерфейс керування: Використання показує картки плану й оплати постачальника над отриманим із сеансу OpenClaw аналізом токенів та орієнтовної вартості. Облікові дані Anthropic і OpenAI Admin API додають повідомлені постачальником витрати за сьогодні, 7 і 30 днів, щоденні тенденції, загальну кількість токенів, найпопулярніші моделі та категорії вартості.
- Інтерфейс керування: спливне вікно кільцевого індикатора контексту в полі введення чату показує використання плану для постачальників із підпискою — смуги для кожного вікна (5-годинного, тижневого, обмеженого моделлю) із часом скидання, план постачальника, якщо він відомий (наприклад,
Max (20x)), і кредити додаткового використання. Для сеансів, що оплачуються через план, оцінки вартості кожного токена приховано; сеанси з оплатою через API зберігаютьОрієнт. вартістьі розбивку вартості за типами. Налаштування Claude Code CLI (claude-cli) повторно використовують ті самі дані про використання підписки Anthropic. - Рядок меню macOS: кореневий розділ «Використання» з'являється під розділом «Контекст», коли доступні знімки використання постачальника. Див. Рядок меню.
openclaw channels list більше не виводить дані про використання постачальника; натомість команда спрямовує користувачів до openclaw status або openclaw models list.
Історія вартості Anthropic і OpenAI
Квота підписки та оплата API — це різні поверхні постачальника:
- Облікові дані підписки або налаштування Anthropic і надалі показують вікна квот Claude та необов'язкові бюджети додаткового використання. Установіть
ANTHROPIC_ADMIN_KEYабоANTHROPIC_ADMIN_API_KEY, щоб натомість показувати історію організації з API використання та вартості. Облікові дані постачальника Anthropic, що починаються зsk-ant-admin, виявляються автоматично. - OAuth OpenAI ChatGPT/Codex і надалі показує план, вікна квот і кредитний баланс. Установіть
OPENAI_ADMIN_KEY, щоб натомість показувати історію вартості організації та використання завершень; за потреби встановітьOPENAI_PROJECT_ID, щоб обмежити її одним проєктом. OpenClaw ніколи не надсилає облікові дані для інференсу зOPENAI_API_KEY, конфігурації постачальника або профілів автентифікації до API організації, оскільки ці ключі можуть належати власним кінцевим точкам.
Облікові дані адміністратора мають пріоритет, оскільки надають фактичні дані про оплату організації. OpenClaw не поєднує ці повідомлені постачальником підсумки зі своїми локальними оцінками сеансів; ці два розділи навмисно відповідають на різні запитання.
Типовий режим примітки про використання
/usage off|tokens|full задає примітку для сеансу, і цей вибір зберігається для цього
сеансу. messages.responseUsage задає початкове значення режиму для сеансів, у яких його ще
не вибрано, тому примітку можна ввімкнути типово без введення /usage щоразу.
Установіть один режим для кожного каналу або карту режимів за каналами з резервним значенням default:
{ "messages": { "responseUsage": "tokens", // або: { "default": "off", "discord": "full" } },}Допустимі значення: "off", "tokens", "full" і застарілий псевдонім "on" (обробляється як "tokens").
Три окремі стани сеансу
Поле responseUsage сеансу має три можливі стани, кожен із
власною семантикою:
| Стан | Збережене значення | Ефективний режим |
|---|---|---|
| Не задано / успадкувати | undefined (відсутнє) |
Переходить до типового значення конфігурації messages.responseUsage, а потім до off. |
| Явно вимкнено | "off" (збережено) |
Завжди вимкнено; типове значення конфігурації, відмінне від off, не може ввімкнути примітку. |
| Явно ввімкнено | "tokens" або "full" (збережено) |
Цей режим незалежно від типового значення конфігурації. |
Пріоритет
Ефективний режим = перевизначення сеансу → запис конфігурації каналу → default → off.
Явний виклик /usage off зберігається в сеансі як буквальне значення "off",
а не як стан «не задано». Типове значення messages.responseUsage, відмінне від off,
не може повторно ввімкнути примітку після того, як користувач явно її вимкнув.
Скидання та вимкнення
/usage offпримусово вимикає примітку та зберігає цей вибір. Налаштоване типове значення, відмінне відoff, не може його перевизначити./usage reset(псевдоніми:default,inherit,inherited,clear,unpin) очищає перевизначення сеансу. Після цього сеанс успадковує ефективне типове значення конфігурації (messages.responseUsage). Якщо типове значення не налаштовано, примітка залишається вимкненою.- Повне скидання сеансу (
/resetабо/new) чи перехід до нового сеансу зберігає явну перевагу режиму використання, щоб вибраний користувачем спосіб відображення зберігався під час переходів між сеансами. Лише/usage reset(і його псевдоніми) очищає перевизначення.
Поведінка перемикання
/usage без аргументів циклічно перемикає: off → tokens → full → off. Початковою точкою
циклу є ефективний поточний режим (перевизначення сеансу з переходом
до типового значення конфігурації, якщо його не задано), тому цикл завжди відповідає тому,
що користувач наразі бачить у примітці.
Конфігурація
Без конфігурації зберігається попередня поведінка (примітку вимкнено до виклику /usage). Використовуйте
/usage reset, щоб очистити перевизначення сеансу й знову успадкувати налаштоване типове значення.
Власна примітка /usage full
/usage tokens завжди відображає простий рядок Використання: X вхідних / Y вихідних (а також суфікси кешу й
орієнтовної вартості, якщо вони доступні). Лише /usage full відображає розширену
примітку, описану нижче.
/usage full показує вбудовану компактну примітку з моделлю, міркуванням, швидким/повільним режимом,
вікном контексту та вартістю, якщо ці поля доступні. Для вбудованої примітки
файл шаблону не потрібен.
messages.usageTemplate призначений лише для розширених власних макетів. Значенням є
шлях до файлу JSON (підтримує ~) або вбудований об'єкт; якщо воно коректне, то замінює вбудовану
примітку. Зміни у файлі за вказаним шляхом відстежуються, і файл автоматично перезавантажується.
{ "messages": { "usageTemplate": "~/.openclaw/usage-footer.json" }}Якщо шаблон відсутній або порожній, без повідомлень використовується вбудована примітка. Нечитабельні або некоректні налаштовані шаблони (помилковий JSON чи структура без придатних до відображення частин) також замінюються вбудованою приміткою, а оператор отримує попередження.
Почніть власний шаблон із вбудованої структури, а потім змініть потрібні частини:
{ "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}" }, ], }, },}Структура
{ "schema": "openclaw.usageBar.v1", "scales": { "<name>": "low-to-high glyphs" }, // рядок (1 гліф/символ) або масив "aliases": { "<table>": { "<value>": "<label>" } }, "output": { "sep": "", // об'єднує частини, що залишилися "default": [/* частини */], // резервний варіант для будь-якої поверхні "surfaces": { "discord": [/* частини */], "telegram": [/* частини */], }, },}Кожна поверхня є впорядкованим списком частин; рушій відображає кожну з них, відкидає
порожні та об'єднує решту за допомогою sep. Поверхня без відповідного запису використовує
output.default.
Шляхи контракту
Частина зчитує значення з контракту для кожного ходу за шляхом із крапками. Відсутні значення
є порожніми (тому захисна умова when або |fallback зберігає частину чистою).
| Шлях | Значення |
|---|---|
surface |
ідентифікатор каналу (discord/telegram/тощо) |
agentId / chat_type |
ідентифікатор агента-власника / тип поверхні чату |
model.id / model.display_name / model.provider |
ідентифікатор моделі / відображувана назва / ідентифікатор провайдера |
model.actual, model.resolved_ref |
посилання на провайдера/модель, фактично використане для ходу |
model.requested |
запитане посилання на провайдера/модель (до резервного переходу) |
model.reasoning |
рівень зусиль (від off до xhigh) |
model.is_fallback / model.is_override |
логічне значення: використано резервний варіант / модель закріплено |
model.override_source / model.auth_mode |
мітка джерела перевизначення / режим облікових даних (oauth, api-key, token, mixed, aws-sdk, unknown) |
state.fast_mode |
логічне значення: швидкий чи повільний режим |
state.compactions |
кількість Compaction у сеансі |
context.max_tokens / context.used_tokens / context.pct_used |
бюджет вікна / зайняті токени / використано від 0 до 100 |
usage.input_tokens / usage.output_tokens / usage.total_tokens |
сукупні значення за хід |
usage.cache_read_tokens / usage.cache_write_tokens |
токени читання з кешу та запису до кешу за хід |
usage.has_tokens / usage.has_split_tokens / usage.has_total_only_tokens |
умови відображення токенів |
usage.cache_hit_pct |
частка токенів запиту, прочитаних із кешу, від їх загальної кількості |
usage.last.input_tokens / usage.last.output_tokens / usage.last.cache_hit_pct |
лише останній виклик моделі (також містить cache_read_tokens, cache_write_tokens, total_tokens) |
cost.turn_usd / cost.available |
орієнтовна вартість ходу / чи вдалося визначити таблицю вартості |
timing.duration_ms |
фактична тривалість ходу |
identity.name / identity.emoji / identity.avatar |
ім’я ідентичності агента / емодзі / аватар |
session.id |
ідентифікатор сеансу |
(Вікна обмеження частоти запитів провайдера не входять до цього контракту; наразі немає шляху зі значенням-масивом, тому частині each немає чого перебирати.)
Операції
Передавайте значення через операції зліва направо; сегмент, що не є операцією, слугує резервним значенням.
| Операція | Ефект | Приклад |
|---|---|---|
num |
компактне представлення кількості | 272000 -> 272k |
fixed:N |
N десяткових знаків (типово 2) | 0.0377 |
dur |
перетворення секунд на тривалість | 14820 -> 4h07m |
pct |
додавання % |
96 -> 96% |
inv |
100 - x |
з використаного у залишок |
alias:TABLE |
пошук в aliases, без збігу повертає значення |
medium -> 🌗 |
meter:W:SCALE |
смуга з W комірок для значення від 0 до 100 | [⣿⣿⠐⠐⠐] (meter:1 = один символ) |
Форми частин
{ "text": "📚 {context.max_tokens|num}" }: літерал + інтерполяція.{ "when": "<path>", "text": "..." }: відображати, лише якщо значення за шляхом істинне.{ "map": "<path>", "cases": { "true": "⚡", "false": "🐌" } }: перетворення значення на символ (варіант_defaultохоплює значення без збігу).{ "each": "<array-path>", "item": "{label}" }: перебір значень за шляхом-масивом (жоден поточний шлях контракту не є масивом).
Приклад
{ "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}", }, ], }, },}відображається, наприклад, як claude-sonnet-4-6 🌗 🐌 | 📚 [⣿⣿⣿⣿⣧]272k.
Провайдери й облікові дані
Дані про використання приховуються, якщо не вдається визначити придатні облікові дані для доступу до даних про використання провайдера. OpenClaw автоматично виявляє ввімкнені Plugin провайдерів, які оголошують contracts.usageProviders і реалізують як resolveUsageAuth, так і fetchUsageSnapshot; окремого списку дозволених провайдерів у ядрі немає. Статичний контракт обмежує область виявлення без імпорту кожного Plugin провайдера. Кожен Plugin відповідає за свою зовнішню кінцеву точку та зіставлення відповіді. Спільний знімок зберігає назви планів, вікна квот, баланси, витрати й бюджети нейтральними щодо провайдера для споживачів у CLI, застосунку та інтерфейсі керування.
- Anthropic (Claude): токени OAuth у профілях автентифікації. Якщо токен OAuth не має області дії
user:profile, за наявності використовується резервний вебсеансclaude.ai(CLAUDE_AI_SESSION_KEY,CLAUDE_WEB_SESSION_KEYабо файл cookiesessionKey=уCLAUDE_WEB_COOKIE). Обмеження для окремих моделей і ввімкнені місячні витрати/бюджети додаткового використання включаються, коли Anthropic їх повідомляє. Натомість явний ключ Anthropic Admin API або автоматично виявлений профіль провайдераsk-ant-admin...показує витрати організації за 30 днів та історію Messages API. - ClawRouter: ключ API (
CLAWROUTER_API_KEY). Показує місячне бюджетне вікно та типізований бюджет у доларах США, якщо його налаштовано; інакше показує сукупні витрати та зведення запитів, токенів і вартості. - DeepSeek: ключ API через середовище/конфігурацію/сховище автентифікації (
DEEPSEEK_API_KEY). Показує баланс у кожній валюті, повідомлений провайдером. - GitHub Copilot: токени OAuth у профілях автентифікації.
- Gemini CLI: токени OAuth у профілях автентифікації.
- MiniMax: ключ API або профіль автентифікації MiniMax OAuth. OpenClaw розглядає
minimax,minimax-cnіminimax-portalяк одну поверхню квоти MiniMax, надає перевагу збереженому MiniMax OAuth за його наявності, а інакше використовуєMINIMAX_CODE_PLAN_KEY,MINIMAX_CODING_API_KEYабоMINIMAX_API_KEYяк резервний варіант. Опитування використання визначає хост Coding Plan ізmodels.providers.minimax-portal.baseUrlабоmodels.providers.minimax.baseUrl, якщо його налаштовано, а інакше використовує хост MiniMax CN. Необроблені поля MiniMaxusage_percent/usagePercentозначають залишок квоти, тому OpenClaw інвертує їх перед відображенням; за наявності поля на основі кількості мають пріоритет.- Мітки вікон формуються з полів годин/хвилин провайдера за їх наявності, а потім
як резервний варіант використовують проміжок
start_time/end_time. - Якщо кінцева точка плану для програмування повертає
model_remains, OpenClaw надає перевагу запису моделі чату, визначає мітку вікна з часових позначок, коли явні поляwindow_hours/window_minutesвідсутні, і включає назву моделі до мітки плану.
- Мітки вікон формуються з полів годин/хвилин провайдера за їх наявності, а потім
як резервний варіант використовують проміжок
- OpenAI (план Codex/ChatGPT): токени OAuth у профілях автентифікації (заголовок
ChatGPT-Account-Idнадсилається за наявності ідентифікатора облікового запису). Показує план ChatGPT, вікна Codex зі скиданням і кредитний баланс, коли провайдер їх повідомляє. Кредити залишаються кредитами провайдера; OpenClaw не позначає їх як долари.OPENAI_ADMIN_KEYдодає витрати організації за 30 днів та історію використання запитів завершення, якщо ключ має доступ до Usage Dashboard. Облікові дані для інференсу ніколи не передаються API організації. - OpenRouter: ключ API або ключ API на основі OAuth (
OPENROUTER_API_KEYчи профіль автентифікації). Поєднує кінцеву точку кредитів облікового запису з кінцевою точкою квоти ключа, тому баланс/витрати облікового запису, бюджет ключа та денне/тижневе/місячне використання відображаються, коли облікові дані надають до них доступ. Кожна кінцева точка може незалежно збагачувати знімок. - Venice: ключ API через середовище/конфігурацію/сховище автентифікації (
VENICE_API_KEY). Показує баланси USD і DIEM, а також використання розподілу DIEM за епоху, коли провайдер їх повідомляє. - Xiaomi MiMo: дві окремі поверхні використання. Оплата за фактичне використання застосовує ключ API
(
XIAOMI_API_KEY); план Token Plan застосовує окремий ключ (XIAOMI_TOKEN_PLAN_API_KEY). Наразі жодна з них не повідомляє вікна квот. - z.ai: ключ API через середовище/конфігурацію/сховище автентифікації (
ZAI_API_KEYабоZ_AI_API_KEY).