বৈশিষ্ট্য

ব্যবহারের সীমা

সর্বশেষ আপডেট ১৯ অক্টোবর, ২০২৬
ccam 0.6.0 এবং Claude Code 2.1.302 দিয়ে যাচাই করা

এই পাতাটি ইংরেজি থেকে মেশিনে অনুবাদ করা হয়েছে। সংশোধন স্বাগত। 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) মানে সেগুলো এন্ডপয়েন্ট থেকে নয়, সংরক্ষিত ফাইল থেকে এসেছে। শেষ লাইনটি ১০০%-এর নিচে সবচেয়ে কম ৫ ঘণ্টার ব্যবহারের অ্যাকাউন্টের নাম দেয়, এবং শুধু একাধিক অ্যাকাউন্ট থাকলে দেখা যায়। লগইন না করা অ্যাকাউন্ট দেখায় 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] Ctrl+C না চাপা পর্যন্ত প্রতি N সেকেন্ডে আবার আঁকে। শুধু --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 স্ট্যান্ডার্ড ইনপুট থেকে Claude Code-এর স্ট্যাটাস লাইন JSON পড়ে। এর একমাত্র অপশন --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 প্রতি অ্যাকাউন্টে একটি goroutine চালু করে। সবগুলো একটি http.Client শেয়ার করে, তাই এন্ডপয়েন্টের সংযোগগুলো আবার ব্যবহার হয়। সংযোগে ২ সেকেন্ড লাগতে পারে, এবং প্রতিটি অ্যাকাউন্ট মোট ৩ সেকেন্ড পায়। ক্লায়েন্ট রিডাইরেক্ট অনুসরণ করে না, কারণ রিডাইরেক্ট টোকেনটি অন্য কোথাও আবার পাঠাত, এবং উত্তরের সর্বোচ্চ 1 MB পড়ে।
  3. প্রতিটি অ্যাকাউন্ট শেষ হলে তার সারি আবার আঁকা হয়। যে অ্যাকাউন্ট ব্যর্থ হয় বা সময়মতো উত্তর দেয় না, সেটি সংরক্ষিত সংখ্যায় ফিরে যায়, তাই একটি ধীর অ্যাকাউন্ট কখনও অন্যগুলোকে আটকে রাখে না।

প্রতিটি অ্যাকাউন্ট এন্ডপয়েন্টের বিরুদ্ধে নিজস্ব goroutine-এ চলে; যেটির সময় শেষ হয়ে যায় সেটি এর বদলে তার সংরক্ষিত সংখ্যা দেখায়।

personal ও work সময়মতো উত্তর দেয় এবং লাইভ সংখ্যা দেখায়। side ৩ সেকেন্ডের বেশি নেয়, তাই fallback() তার দুটি ক্যাশ ফাইল পড়ে এবং যেটি শেষে লেখা হয়েছে সেটি ব্যবহার করে। usage.Table() সারিগুলো আঁকে আর usage.Best() শেষ লাইনে উল্লেখিত অ্যাকাউন্টটি বেছে নেয়।

একটি অ্যাকাউন্টের জন্য Fetcher.Fetch এই যাচাইগুলো ক্রমানুসারে করে:

  1. --source cache দিলে এটি সরাসরি fallback()-এ যায়।
  2. --no-cache নির্ধারিত না থাকলে ~/.local/state/ccam/usage/<name>.json-এ ৬০ সেকেন্ডের (CacheTTL) কম পুরোনো লাইভ ফলাফল যেমন আছে তেমনই ফেরত দেওয়া হয়। পরপর দুবার ccam usage চালালে প্রতি অ্যাকাউন্টে একটি অনুরোধ খরচ হয়।
  3. readCredentials() .credentials.json (বা macOS Keychain) না বদলে পড়ে, এবং শুধু claudeAiOauth কী ডিকোড করা হয়। সাবস্ক্রিপশন লগইন না থাকলে মানে not logged in, অথবা .claude.json-এ API কী থাকলে no limits (API)।
  4. মেয়াদোত্তীর্ণ অ্যাক্সেস টোকেন ব্যবহার করা হয় না। --refresh ছাড়া অ্যাকাউন্টটি মেয়াদোত্তীর্ণ হিসেবে চিহ্নিত সংরক্ষিত সংখ্যা দেখায়।
  5. অন্যথায় ccam এন্ডপয়েন্ট ডাকে। 401 বা 403 মেয়াদোত্তীর্ণ লগইন হিসেবে গণ্য হয়, অন্য যেকোনো স্ট্যাটাস বা পড়া যায় না এমন বডি ত্রুটি হিসেবে গণ্য হয়, এবং দুটোই সংরক্ষিত সংখ্যায় ফিরে যায়।
  6. ভালো উত্তর মাপার সময়সহ <name>.json-এ লেখা হয়।

fallback() <name>.json ও <name>.statusline.json দুটোই পড়ে এবং নতুনতরটি রাখে। সংরক্ষিত সংখ্যা দেখানোর আগে এটি প্রতিটি উইন্ডোর রিসেটের সময় যাচাই করে: সংখ্যাগুলো সংরক্ষণের পর যে উইন্ডো রিসেট হয়েছে সেটি ০% দেখায়, কারণ পুরোনো শতাংশ আর প্রযোজ্য নয়। এ কারণেই ওপরে personal রিসেটের সময় ছাড়া 0% দেখায়।

এন্ডপয়েন্টের দুটি রেসপন্স ফরম্যাট আছে। নতুনটিতে আছে একটি limits অ্যারে, যাতে session (৫ ঘণ্টা), weekly_all ও weekly_scoped (মডেলভিত্তিক) এন্ট্রি থাকে। পুরোনোটিতে আছে five_hour, seven_day, seven_day_opus ও seven_day_sonnet অবজেক্ট। ParseLive দুটোই পড়ে: limits অ্যারে অগ্রাধিকার পায়, আর পুরোনো অবজেক্টগুলো সেটি যা কভার করে না তা পূরণ করে। কোনো সীমাই নেই এমন বডিকে বদলে যাওয়া ফরম্যাট হিসেবে জানানো হয়, যা ccam doctor আপনাকে জানায়।

টোকেন নবায়ন

রিফ্রেশ টোকেন ঘোরে: একটি নবায়ন করলে আপনি নতুন রিফ্রেশ টোকেন পান এবং পুরোনোটি অকার্যকর হয়। একই অ্যাকাউন্ট হিসেবে Claude Code চলার সময় ccam লগইন নবায়ন করলে ওই সেশনটি সাইন আউট হয়ে যেত। তাই আপনি --refresh না দিলে ccam usage টোকেন পড়ে কিন্তু কখনও লেখে না। তখন Fetcher.refresh:

  1. ccam import দিয়ে নিজের জায়গায় নিবন্ধিত অ্যাকাউন্ট প্রত্যাখ্যান করে, কারণ সাধারণ claude ccam-এর অজান্তে ওই লগইন ব্যবহার করতে পারে;
  2. macOS Keychain-এ সংরক্ষিত লগইন প্রত্যাখ্যান করে;
  3. একটি লক ফাইল নেয়, $XDG_RUNTIME_DIR/ccam/profile-<name>.refresh.lock (ওই ভেরিয়েবল নির্ধারিত না থাকলে ~/.local/state/ccam/locks/-এর নিচে), যাতে দুটি ccam প্রসেস কখনও একই টোকেন দুবার নবায়ন না করে;
  4. লকের অধীনে, অ্যাকাউন্টের কোনো সেশন চলতে থাকলে প্রত্যাখ্যান করে, এবং অন্য প্রসেস আগেই টোকেন নবায়ন করে থাকলে অনুরোধ বাদ দেয়;
  5. রিফ্রেশ টোকেন টোকেন এন্ডপয়েন্টে পাঠায় এবং নতুন টোকেনগুলো fsutil.AtomicWrite দিয়ে .credentials.json-এ আবার লেখে, ফাইলের অন্য প্রতিটি কী রেখে।

স্ট্যাটাস লাইন সংগ্রাহক

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] ও তারপর কমান্ডের প্রথম লাইন প্রিন্ট করে।

র‍্যাপ করা কমান্ড ২ সেকেন্ড পায়। এরপর এটি বন্ধ করে দেওয়া হয় এবং লাইনটি শুধু অ্যাকাউন্টের নাম দেখায়, তাই ধীর কমান্ড Claude Code-এর স্ট্যাটাস লাইন আটকাতে পারে না।

ccam statusline install প্রতিটি অ্যাকাউন্টের settings.json-এ statusLine লেখে। কোনো অ্যাকাউন্টের আগে থেকেই স্ট্যাটাস লাইন কমান্ড থাকলে ccam সেটি --wrap '<old command>' হিসেবে রাখে। গ্রুপের মাধ্যমে শেয়ার করা settings.json তার লিংকের মধ্য দিয়ে একবার লেখা হয়, তাই গ্রুপের প্রতিটি অ্যাকাউন্ট সেটি পায়। আবার চালালে যে ফাইলগুলো আগে থেকেই ccam ব্যবহার করে সেগুলোর জন্য (already set) প্রিন্ট হয়।

নিরাপত্তা ও বিশেষ ক্ষেত্র

  • আপনি --refresh না দিলে ccam usage কখনও টোকেন ফাইল বদলায় না। লগইনের মেয়াদ শেষ হলে ccam <name> দিয়ে অ্যাকাউন্টটি একবার চালান, Claude Code সেটি নবায়ন করবে।
  • --refresh কখনও চলমান অ্যাকাউন্ট, ইমপোর্ট করা অ্যাকাউন্ট বা Keychain লগইন স্পর্শ করে না। প্রত্যাখ্যাত নবায়ন সংরক্ষিত সংখ্যা ও কারণ দেখায়।
  • ব্যবহার এন্ডপয়েন্ট প্রকাশ্যে ডকুমেন্ট করা নয় এবং বদলে যেতে পারে। বদলালে আপনি তবুও সংরক্ষিত সংখ্যা দেখেন, এবং ccam doctor ফরম্যাটের পরিবর্তন জানায়।
  • সংরক্ষিত সংখ্যা ও উত্তর কোনোটিই না থাকলে সারিটি lookup failed: ও কারণ দেখায়, যেমন --source cache দিলে no saved usage।
  • ক্যাশ ফাইলে শুধু শতাংশ ও রিসেটের সময় থাকে, কখনও টোকেন নয়।