Можливості

Ліміти використання

Останнє оновлення 19 жовтня 2026 р.
Перевірено з ccam 0.6.0 і Claude Code 2.1.302

Цю сторінку перекладено з англійської машинним способом. Виправлення вітаються. Редагувати цю сторінку на GitHub

На цій сторінці

ccam usage показує, яку частку 5-годинного та тижневого лімітів використав кожен обліковий запис, і час до скидання кожного вікна. Використовуйте цю команду перед початком довгого завдання або коли Claude Code попереджає, що ліміт близько, щоб побачити, в якого облікового запису ще є запас. ccam statusline — це команда рядка стану для Claude Code: вона показує назву облікового запису й використання всередині Claude Code і зберігає числа для ccam usage.

Використання

ccam usage                  # every account, once
ccam u                      # the same, shorter
ccam usage --watch          # redraw every 60 seconds until Ctrl+C
ccam usage --watch=10       # redraw every 10 seconds
ccam usage -v               # add per-model weekly limits and the data source
ccam usage --json           # machine-readable, one object per account
ccam usage --source cache   # saved numbers only, no network
ccam usage --refresh        # also renew expired logins of accounts not running
ccam statusline install     # set the status line in every account's settings.json
$ ccam usage
 Account     5-hour        Resets    Weekly        Resets    As of
 1 personal  ░░░░░░░░   0% -         ██████░░  70% 2d 16h    9h 36m ago (cached)
 2 work      ██░░░░░░  24% 2h 29m    ███░░░░░  41% 3d 11h    just now (cached)
 3 side      login expired, run `ccam side` once to refresh
→ Most headroom: personal   (open it with ccam next --auto)

У терміналі таблиця з'являється одразу з fetching… у кожному рядку, і кожен рядок перемальовується, щойно відповідає його обліковий запис. As of показує давність чисел; (cached) означає, що вони взяті зі збереженого файлу, а не з кінцевої точки. Останній рядок називає обліковий запис із найменшим 5-годинним використанням нижче 100% і з'являється лише тоді, коли у вас більше одного облікового запису. Обліковий запис без входу показує not logged in → ccam login <name>, а обліковий запис із ключем API — no limits (API).

Після ccam statusline install Claude Code показує рядок на кшталт [work] · Opus · 5h 24% · 7d 41%.

Параметри

Параметр Дія За замовчуванням
--json Вивести звіти у форматі JSON: name, slot, status, limits, source, at, error вимкнено
--watch[=N] Перемальовувати кожні N секунд, доки ви не натиснете Ctrl+C. Сам --watch або значення 0 чи менше означає 60 вимкнено
-v, --verbose Показувати тижневі ліміти для окремих моделей і рядок source: (live, cache або statusline) вимкнено
--no-cache Ігнорувати 60-секундний кеш і знову запитати кінцеву точку вимкнено
--source live|cache cache ніколи не запитує кінцеву точку й показує лише збережені числа; live — поведінка за замовчуванням live
--refresh Оновлювати прострочені токени доступу лише для облікових записів, які не запущено вимкнено
--dry-run Приймається: ccam usage не змінює нічого, крім власного кешу. Відхиляється разом із --refresh: --dry-run cannot be combined with --refresh, which rewrites login tokens вимкнено

Будь-яке інше значення --source завершується помилкою --source must be live or cache. ccam usage не приймає аргументів.

ccam statusline читає JSON рядка стану Claude Code зі стандартного введення. Його єдиний параметр — --wrap <command>: наявна команда рядка стану, до першого рядка виводу якої додається назва облікового запису. ccam statusline install не має параметрів. Обидві команди відхиляють --dry-run з повідомленням --dry-run is not supported by `ccam statusline`; nothing was changed.

Як це працює

Числа надходять із двох джерел: незадокументованої кінцевої точки використання Anthropic, GET https://api.anthropic.com/api/oauth/usage, яку викликають із власним входом кожного облікового запису, і значень, які Claude Code передає своїй команді рядка стану. Усе це міститься в internal/usage.

  1. cli.usageCmd завантажує config.toml і будує по одному usage.Account на обліковий запис: його теку ~/.local/share/ccam/profiles/<name>/, теку сеансів (щоб побачити, чи він запущений) і чи імпортовано його на місці.
  2. Fetcher.FetchAll запускає по одній горутині на обліковий запис. Усі вони використовують один http.Client, тож з'єднання з кінцевою точкою використовуються повторно. Встановлення з'єднання може тривати 2 с, а кожен обліковий запис загалом має 3 с. Клієнт не переходить за переспрямуваннями, бо переспрямування надіслало б токен деінде, і читає не більше 1 МБ відповіді.
  3. Щойно кожен обліковий запис завершує, його рядок перемальовується. Обліковий запис, який зазнає невдачі або не відповідає вчасно, переходить на збережені числа, тож один повільний обліковий запис ніколи не затримує інших.

Кожен обліковий запис звертається до кінцевої точки у власній горутині; той, що перевищує час очікування, натомість показує збережені числа.

personal і work відповідають вчасно й показують актуальні числа. side відповідає довше за 3 с, тож fallback() читає два його файли кешу й використовує той, що був записаний пізніше. usage.Table() малює рядки, а usage.Best() вибирає обліковий запис, названий в останньому рядку.

Для одного облікового запису Fetcher.Fetch виконує такі перевірки по черзі:

  1. З --source cache він одразу переходить до fallback().
  2. Якщо не задано --no-cache, актуальний результат у ~/.local/state/ccam/usage/<name>.json, молодший за 60 секунд (CacheTTL), повертається як є. Два запуски ccam usage поспіль коштують один запит на обліковий запис.
  3. readCredentials() читає .credentials.json (або в'язку ключів macOS), не змінюючи його, і декодується лише ключ claudeAiOauth. Відсутність входу за підпискою означає not logged in або no limits (API), коли .claude.json містить ключ API.
  4. Прострочений токен доступу не використовується. Без --refresh обліковий запис показує свої збережені числа, позначені як прострочені.
  5. Інакше ccam викликає кінцеву точку. 401 або 403 вважається простроченим входом, будь-який інший статус або тіло, яке не вдається прочитати, вважається помилкою, і в обох випадках використовуються збережені числа.
  6. Коректна відповідь записується до <name>.json разом із часом вимірювання.

fallback() читає і <name>.json, і <name>.statusline.json та залишає новіший. Перш ніж показати збережені числа, він перевіряє час скидання кожного вікна: вікно, яке скинулося після збереження чисел, показує 0%, бо старий відсоток уже не актуальний. Саме тому personal вище показує 0% без часу скидання.

Кінцева точка має два формати відповіді. Новіший містить масив limits із записами session (5-годинний), weekly_all і weekly_scoped (для окремих моделей). Старіший містить об'єкти five_hour, seven_day, seven_day_opus і seven_day_sonnet. ParseLive читає обидва: масив limits має пріоритет, а старі об'єкти доповнюють те, чого він не охоплює. Тіло без жодних лімітів вважається зміною формату, про яку повідомляє ccam doctor.

Оновлення токенів

Токени оновлення ротуються: оновлення видає новий токен оновлення й робить старий недійсним. Якби ccam оновив вхід, поки Claude Code працює від імені того самого облікового запису, той сеанс було б виведено із системи. Тому ccam usage читає токени й ніколи їх не записує, якщо ви не передасте --refresh. Тоді Fetcher.refresh:

  1. відхиляє облікові записи, зареєстровані на місці через ccam import, бо звичайний claude може використовувати цей вхід без відома ccam;
  2. відхиляє входи, збережені у в'язці ключів macOS;
  3. бере файл блокування $XDG_RUNTIME_DIR/ccam/profile-<name>.refresh.lock (у ~/.local/state/ccam/locks/, коли цю змінну не задано), тож два процеси ccam ніколи не оновлюють той самий токен двічі;
  4. під блокуванням відмовляє, якщо запущено сеанс облікового запису, і пропускає запит, якщо інший процес уже оновив токен;
  5. надсилає токен оновлення до кінцевої точки токенів і записує нові токени назад у .credentials.json через fsutil.AtomicWrite, зберігаючи всі інші ключі у файлі.

Збирач рядка стану

Claude Code запускає команду рядка стану й передає їй через конвеєр документ JSON. ccam читає з нього назву моделі та rate_limits:

  1. runStatusline визначає обліковий запис за CCAM_PROFILE, яку ccam задає під час запуску Claude Code, або ж зіставляючи CLAUDE_CONFIG_DIR з теками облікових записів.
  2. ParseStatusLine читає rate_limits.five_hour і rate_limits.seven_day. Для облікових записів із ключем API або до першої відповіді в сеансі JSON не містить лімітів; тоді нічого не зберігається.
  3. SaveStatusLine записує ~/.local/state/ccam/usage/<name>.statusline.json. ccam usage використовує цей файл, коли кінцева точка не відповідає.
  4. ccam виводить [name] · model · 5h N% · 7d N%. З --wrap він запускає вашу команду через sh -c з тим самим введенням і натомість виводить [name], а за ним перший рядок команди.

Обгорнута команда має 2 секунди. Після цього її примусово завершують, і рядок показує лише назву облікового запису, тож повільна команда не може заблокувати рядок стану Claude Code.

ccam statusline install записує statusLine у settings.json кожного облікового запису. Коли обліковий запис уже має команду рядка стану, ccam зберігає її як --wrap '<old command>'. settings.json, спільний через групу, записується один раз через своє посилання, тож його отримує кожен обліковий запис групи. Повторний запуск виводить (already set) для файлів, які вже використовують ccam.

Безпека та граничні випадки

  • ccam usage ніколи не змінює файл токенів, якщо ви не передасте --refresh. Коли вхід прострочено, запустіть обліковий запис один раз через ccam <name>, і Claude Code оновить його.
  • --refresh ніколи не чіпає запущені облікові записи, імпортовані облікові записи чи входи у в'язці ключів. Відхилене оновлення показує збережені числа й причину.
  • Кінцева точка використання не задокументована публічно й може змінитися. Коли це станеться, ви все одно бачитимете збережені числа, а ccam doctor повідомить про зміну формату.
  • Якщо збережених чисел немає й відповіді немає, рядок показує lookup failed: і причину, наприклад no saved usage з --source cache.
  • Файли кешу містять лише відсотки й час скидання, але ніколи не токени.