خصوصیات
استعمال کی حدیں
اس صفحے کا انگریزی سے مشینی ترجمہ کیا گیا ہے۔ اصلاحات کا خیرمقدم ہے۔ اس صفحے میں 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 key والا اکاؤنٹ 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] |
Ctrl+C دبانے تک ہر N سیکنڈ بعد دوبارہ بناتا ہے۔ صرف --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، Claude Code کی اسٹیٹس لائن JSON اسٹینڈرڈ اِن پٹ سے پڑھتا ہے۔ اس کا واحد آپشن --wrap <command> ہے: اسٹیٹس لائن کی ایک موجودہ کمانڈ، جس کے آؤٹ پٹ کی پہلی لائن کے شروع میں اکاؤنٹ کا نام لگ جاتا ہے۔ ccam statusline install کوئی آپشن نہیں لیتا۔ دونوں --dry-run کو --dry-run is not supported by `ccam statusline`; nothing was changed کے ساتھ مسترد کرتے ہیں۔
یہ کیسے کام کرتا ہے
اعداد دو جگہوں سے آتے ہیں: Anthropic کا غیر دستاویزی usage اینڈ پوائنٹ، 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 پڑھتا ہے۔- جیسے ہی ہر اکاؤنٹ مکمل ہوتا ہے، اس کی قطار دوبارہ بنتی ہے۔ جو اکاؤنٹ ناکام ہو یا وقت پر جواب نہ دے وہ محفوظ اعداد پر چلا جاتا ہے، اس لیے ایک سست اکاؤنٹ کبھی باقیوں کو نہیں روکتا۔
ہر اکاؤنٹ اینڈ پوائنٹ کے لیے اپنی goroutine میں چلتا ہے؛ جس کا وقت ختم ہو جائے وہ اس کے بجائے اپنے محفوظ اعداد دکھاتا ہے۔
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 Keychain) کو تبدیل کیے بغیر پڑھتا ہے، اور صرفclaudeAiOauthkey ڈی کوڈ ہوتی ہے۔ سبسکرپشن لاگ اِن نہ ہو توnot logged in، یا جب.claude.jsonمیں API key ہو توno limits (API)۔- میعاد ختم ہونے والا ایکسیس ٹوکن استعمال نہیں ہوتا۔
--refreshکے بغیر اکاؤنٹ اپنے محفوظ اعداد میعاد ختم ہونے کے نشان کے ساتھ دکھاتا ہے۔ - ورنہ ccam اینڈ پوائنٹ کو کال کرتا ہے۔ 401 یا 403 کو میعاد ختم ہونے والا لاگ اِن سمجھا جاتا ہے، کوئی اور اسٹیٹس یا ایسا جواب جو پڑھا نہ جا سکے غلطی شمار ہوتا ہے، اور دونوں صورتوں میں محفوظ اعداد دکھائے جاتے ہیں۔
- درست جواب ناپنے کے وقت کے ساتھ
<name>.jsonمیں لکھا جاتا ہے۔
fallback()، <name>.json اور <name>.statusline.json دونوں پڑھتا ہے اور نئی والی رکھتا ہے۔ محفوظ اعداد دکھانے سے پہلے یہ ہر ونڈو کے ری سیٹ کا وقت جانچتا ہے: جو ونڈو اعداد محفوظ ہونے کے بعد ری سیٹ ہو چکی ہو وہ 0% دکھاتی ہے، کیونکہ پرانا فیصد اب درست نہیں۔ اسی لیے اوپر personal، ری سیٹ کے وقت کے بغیر 0% دکھاتا ہے۔
اینڈ پوائنٹ کے جواب کے دو فارمیٹ ہیں۔ نئے فارمیٹ میں ایک limits array ہوتا ہے جس میں session (5 گھنٹے)، weekly_all اور weekly_scoped (ماڈل کے لحاظ سے) اینٹریز ہوتی ہیں۔ پرانے فارمیٹ میں five_hour، seven_day، seven_day_opus اور seven_day_sonnet آبجیکٹس ہوتے ہیں۔ ParseLive دونوں پڑھتا ہے: limits array کو ترجیح ملتی ہے، اور جو وہ شامل نہ کرے وہ پرانے آبجیکٹس سے بھرا جاتا ہے۔ جس جواب میں کوئی حد ہی نہ ہو اسے بدلا ہوا فارمیٹ بتایا جاتا ہے، جس کے بارے میں ccam doctor آپ کو بتاتا ہے۔
ٹوکنز کی تجدید
ریفریش ٹوکنز بدلتے رہتے ہیں: ایک کی تجدید سے نیا ریفریش ٹوکن ملتا ہے اور پرانا ناکارہ ہو جاتا ہے۔ اگر ccam لاگ اِن کی تجدید اس وقت کرے جب Claude Code اسی اکاؤنٹ کے طور پر چل رہا ہو، تو وہ سیشن سائن آؤٹ ہو جائے گا۔ اس لیے ccam usage ٹوکنز پڑھتا ہے اور انہیں کبھی نہیں لکھتا، جب تک آپ --refresh نہ دیں۔ تب Fetcher.refresh:
ccam importسے اپنی جگہ پر رجسٹر کیے گئے اکاؤنٹس کو مسترد کرتا ہے، کیونکہ سادہclaudeccam کے علم کے بغیر وہ لاگ اِن استعمال کر سکتا ہے؛- macOS Keychain میں محفوظ لاگ اِن مسترد کرتا ہے؛
- ایک لاک فائل لیتا ہے،
$XDG_RUNTIME_DIR/ccam/profile-<name>.refresh.lock(وہ ویری ایبل مقرر نہ ہو تو~/.local/state/ccam/locks/کے اندر)، تاکہ دو ccam پروسیس کبھی ایک ہی ٹوکن کی دو بار تجدید نہ کریں؛ - لاک کے تحت، اکاؤنٹ کا کوئی سیشن چل رہا ہو تو انکار کرتا ہے، اور اگر کوئی دوسرا پروسیس پہلے ہی ٹوکن کی تجدید کر چکا ہو تو درخواست چھوڑ دیتا ہے؛
- ریفریش ٹوکن، ٹوکن اینڈ پوائنٹ کو بھیجتا ہے اور نئے ٹوکنز
fsutil.AtomicWriteسے واپس.credentials.jsonمیں لکھتا ہے، اور فائل کی باقی ہر key برقرار رکھتا ہے۔
اسٹیٹس لائن کلیکٹر
Claude Code اسٹیٹس لائن کمانڈ چلاتا ہے اور اسے ایک JSON دستاویز دیتا ہے۔ ccam اس میں سے ماڈل کا نام اور rate_limits پڑھتا ہے:
runStatuslineاکاؤنٹ کوCCAM_PROFILEسے تلاش کرتا ہے، جسے ccam، Claude Code شروع کرتے وقت مقرر کرتا ہے، ورنہCLAUDE_CONFIG_DIRکو اکاؤنٹ فولڈرز سے ملا کر۔ParseStatusLine،rate_limits.five_hourاورrate_limits.seven_dayپڑھتا ہے۔ API key والے اکاؤنٹس کے لیے، یا سیشن کے پہلے جواب سے پہلے، JSON میں ریٹ لمٹس نہیں ہوتیں؛ تب کچھ محفوظ نہیں ہوتا۔SaveStatusLine،~/.local/state/ccam/usage/<name>.statusline.jsonلکھتا ہے۔ جب اینڈ پوائنٹ جواب نہ دے توccam usageاسے استعمال کرتا ہے۔- ccam
[name] · model · 5h N% · 7d N%پرنٹ کرتا ہے۔--wrapکے ساتھ یہ آپ کی کمانڈ کو اسی اِن پٹ کے ساتھsh -cسے چلاتا ہے اور اس کے بجائے[name]کے بعد کمانڈ کی پہلی لائن پرنٹ کرتا ہے۔
لپیٹی گئی کمانڈ کو 2 سیکنڈ ملتے ہیں۔ اس کے بعد اسے بند کر دیا جاتا ہے اور لائن میں صرف اکاؤنٹ کا نام دکھتا ہے، اس لیے کوئی سست کمانڈ Claude Code کی اسٹیٹس لائن کو نہیں روک سکتی۔
ccam statusline install ہر اکاؤنٹ کی settings.json میں statusLine لکھتا ہے۔ جب کسی اکاؤنٹ میں پہلے سے اسٹیٹس لائن کی کمانڈ ہو تو ccam اسے --wrap '<old command>' کی صورت میں برقرار رکھتا ہے۔ کسی گروپ کے ذریعے شیئر کی گئی settings.json اپنے لنک کے ذریعے ایک بار لکھی جاتی ہے، اس لیے گروپ کے ہر اکاؤنٹ کو یہ مل جاتی ہے۔ دوبارہ چلانے پر ان فائلوں کے لیے (already set) پرنٹ ہوتا ہے جو پہلے سے ccam استعمال کر رہی ہیں۔
حفاظت اور خاص صورتیں
ccam usageکبھی ٹوکن فائل تبدیل نہیں کرتا جب تک آپ--refreshنہ دیں۔ جب کسی لاگ اِن کی میعاد ختم ہو جائے تو اکاؤنٹ کو ایک بارccam <name>سے چلائیں، Claude Code اس کی تجدید کر دے گا۔--refreshکبھی چلتے ہوئے اکاؤنٹس، امپورٹ کیے گئے اکاؤنٹس یا Keychain لاگ اِن کو نہیں چھیڑتا۔ مسترد کی گئی تجدید محفوظ اعداد اور وجہ دکھاتی ہے۔- usage اینڈ پوائنٹ عوامی طور پر دستاویزی نہیں ہے اور بدل سکتا ہے۔ جب ایسا ہو تو آپ کو پھر بھی محفوظ اعداد نظر آتے ہیں، اور
ccam doctorفارمیٹ کی تبدیلی کی اطلاع دیتا ہے۔ - محفوظ اعداد اور جواب دونوں نہ ہوں تو قطار میں
lookup failed:اور وجہ دکھتی ہے، مثلاً--source cacheکے ساتھno saved usage۔ - کیش فائلوں میں صرف فیصد اور ری سیٹ کے اوقات ہوتے ہیں، کبھی ٹوکنز نہیں۔