الميزات
حدود الاستخدام
تُرجمت هذه الصفحة آليًا من الإنجليزية. التصحيحات مرحب بها. عدّل هذه الصفحة على GitHub
يعرض ccam usage مقدار ما استخدمه كل حساب من حدّي الخمس ساعات والأسبوع، مع الوقت المتبقي حتى إعادة ضبط كل نافذة. استخدمه قبل أن تبدأ مهمة طويلة، أو عندما يخبرك 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) أنها تأتي من ملف محفوظ، لا من نقطة النهاية. يذكر السطر الأخير الحساب الأقل استخدامًا في نافذة الخمس ساعات دون 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 |
يتجاهل ذاكرة التخزين المؤقت ذات الستين ثانية ويطلب من نقطة النهاية مرة أخرى | معطّل |
--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.
- يحمّل
cli.usageCmdالملفconfig.tomlوينشئusage.Accountواحدًا لكل حساب: مجلده~/.local/share/ccam/profiles/<name>/، ومجلد جلساته (لمعرفة هل يعمل)، وهل استُورد في مكانه. - يبدأ
Fetcher.FetchAllروتينًا متزامنًا (goroutine) واحدًا لكل حساب. وكلها تتشاركhttp.Clientواحدًا، فيُعاد استخدام الاتصالات بنقطة النهاية. قد يستغرق الاتصال 2 s، ولكل حساب 3 s إجمالًا. ولا يتبع العميل إعادة التوجيه، لأن إعادة التوجيه سترسل الرمز إلى مكان آخر، ويقرأ 1 MB على الأكثر من الرد. - عندما ينتهي كل حساب، يُعاد رسم صفه. والحساب الذي يفشل أو لا يستجيب في الوقت المحدد يلجأ إلى الأرقام المحفوظة، فلا يؤخّر حساب بطيء الحسابات الأخرى أبدًا.
يعمل كل حساب في روتينه الخاص مقابل نقطة النهاية؛ والحساب الذي تنتهي مهلته يعرض أرقامه المحفوظة بدلًا من ذلك.
يستجيب personal وwork في الوقت المحدد ويعرضان أرقامًا حية. أما side فيستغرق أكثر من 3 s، لذلك يقرأ fallback() ملفي ذاكرة التخزين المؤقت الخاصين به ويستخدم الأحدث كتابةً منهما. يرسم usage.Table() الصفوف، ويختار usage.Best() الحساب المذكور في السطر الأخير.
لحساب واحد، يجري Fetcher.Fetch هذه الفحوص بالترتيب:
- مع
--source cache، ينتقل مباشرة إلىfallback(). - ما لم يُعيَّن
--no-cache، تُرجَع النتيجة الحية الموجودة في~/.local/state/ccam/usage/<name>.jsonكما هي إذا كان عمرها أقل من 60 ثانية (CacheTTL). فتشغيلccam usageمرتين متتاليتين يكلّف طلبًا واحدًا لكل حساب. - يقرأ
readCredentials()الملف.credentials.json(أو سلسلة المفاتيح على macOS) دون تغييره، ولا يُفك إلا المفتاحclaudeAiOauth. وعدم وجود تسجيل دخول باشتراك يعنيnot logged in، أوno limits (API)عندما يحتوي.claude.jsonعلى مفتاح API. - لا يُستخدم رمز الوصول المنتهي. ودون
--refresh، يعرض الحساب أرقامه المحفوظة معلَّمة بأنها منتهية. - وإلا يستدعي ccam نقطة النهاية. يُعدّ الرد 401 أو 403 تسجيل دخول منتهيًا، وأي حالة أخرى أو محتوى لا يستطيع قراءته يُعدّ خطأ، وفي الحالتين يلجأ إلى الأرقام المحفوظة.
- يُكتب الرد السليم في
<name>.jsonمع وقت قياسه.
يقرأ fallback() الملفين <name>.json و<name>.statusline.json ويحتفظ بالأحدث. وقبل أن يعرض الأرقام المحفوظة، يتحقق من وقت إعادة ضبط كل نافذة: النافذة التي أُعيد ضبطها منذ حفظ الأرقام تظهر بقيمة 0%، لأن النسبة القديمة لم تعد صحيحة. ولهذا يعرض personal أعلاه 0% دون وقت لإعادة الضبط.
لنقطة النهاية تنسيقان للاستجابة. الأحدث فيه مصفوفة limits تحتوي على المدخلات session (الخمس ساعات) و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:
- يرفض الحسابات المسجلة في مكانها باستخدام
ccam import، لأنclaudeالعادي قد يستخدم ذلك التسجيل دون علم ccam؛ - يرفض تسجيلات الدخول المخزنة في سلسلة المفاتيح على macOS؛
- يأخذ ملف قفل،
$XDG_RUNTIME_DIR/ccam/profile-<name>.refresh.lock(أو تحت~/.local/state/ccam/locks/عندما لا يكون ذلك المتغير معيّنًا)، فلا تجدّد عمليتان من ccam الرمز نفسه مرتين أبدًا؛ - تحت القفل، يرفض إذا كانت جلسة للحساب تعمل، ويتخطى الطلب إذا كانت عملية أخرى قد جدّدت الرمز بالفعل؛
- يرسل رمز التحديث إلى نقطة نهاية الرموز، ويكتب الرموز الجديدة في
.credentials.jsonباستخدامfsutil.AtomicWrite، مع الإبقاء على كل المفاتيح الأخرى في الملف.
جامع بيانات سطر الحالة
يشغّل Claude Code أمر سطر الحالة ويمرّر إليه مستند JSON. يقرأ ccam منه اسم النموذج وrate_limits:
- يجد
runStatuslineالحساب منCCAM_PROFILE، الذي يعيّنه ccam عندما يشغّل Claude Code، وإلا فبمطابقةCLAUDE_CONFIG_DIRمع مجلدات الحسابات. - يقرأ
ParseStatusLineالقيمتينrate_limits.five_hourوrate_limits.seven_day. لا يحتوي JSON على حدود للطلبات في حسابات مفاتيح API، أو قبل أول رد في الجلسة؛ وعندها لا يُحفظ شيء. - يكتب
SaveStatusLineالملف~/.local/state/ccam/usage/<name>.statusline.json. ويستخدمهccam usageعندما لا تستجيب نقطة النهاية. - يطبع ccam السطر
[name] · model · 5h N% · 7d N%. ومع--wrap، يشغّل أمرك عبرsh -cبالإدخال نفسه ويطبع بدلًا من ذلك[name]متبوعًا بأول سطر من مخرجات الأمر.
للأمر المغلَّف ثانيتان. بعدها يُنهى، ويعرض السطر اسم الحساب وحده، فلا يستطيع أمر بطيء أن يعطّل سطر الحالة في 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. - لا تحتوي ملفات ذاكرة التخزين المؤقت إلا على النسب وأوقات إعادة الضبط، ولا تحتوي على رموز أبدًا.