SSD Nodes Learn Hosting plans →
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-10-21

مقارنة أدوات تتبّع إنفاق Claude Code

قارن بين محلّلات سجلات Claude Code المحلية، وشاشات الاستخدام المضمّنة، ومكدّس OpenTelemetry لتعرف ما الذي يقيسه كل خيار وما الذي لا يراه.

ما الذي يقرأه متتبّع إنفاق Claude Code فعلياً

يقرأ كل متتبّع لإنفاق Claude Code أحد ثلاثة مصادر للبيانات، ويحدّد المصدر السؤال الذي يمكنه الإجابة عنه. يقرأ محلّل السجلات ملفات نصوص الجلسات المخزّنة على قرصك أنت. وتقرأ لوحة المعلومات سجلات الاستخدام التي تحتفظ بها Anthropic لحسابك أو مؤسستك. أما مخزن المقاييس، فيقرأ تدفق OpenTelemetry (OTel) الذي يصدره Claude Code عند تفعيله. يمكن أن تكون المصادر الثلاثة صحيحة في الوقت نفسه، ومع ذلك تختلف نتائجها، لأنها تحسب أشياء مختلفة.

لا يعيد هذا الدليل شرح الرموز المميزة. يشرح كيفية احتساب Claude Code لاستخدام الرموز المميزة، بما في ذلك الإدخال والإخراج وعمليات كتابة ذاكرة التخزين المؤقت وقراءتها، ولن يكون لأي لوحة معلومات معنى كبير قبل فهم ذلك الجزء. السؤال هنا أضيق نطاقاً: ما الذي يمكن لكل نوع من الأدوات رؤيته، وما الذي لا يمكنه رؤيته مطلقاً؟

لماذا ظهرت ثلاث أدوات لتتبّع إنفاق Claude Code في يوم واحد

نُشرت ثلاث أدوات منفصلة لتتبّع إنفاق Claude Code في اليوم نفسه. لم تكن ثلاث إصدارات من الأداة نفسها، وهذه هي النقطة المفيدة. كانت إحداها تحلّل ملفات الجلسات المحلية. وكانت الثانية تلتف حول شاشات استخدام الحساب. أما الثالثة فكانت واجهة خلفية مستضافة لتتبّع العمليات، وتديرها بنفسك.

ظهرت معاً لأن تكلفة جلسة الوكيل لم تعد واضحة. تبلغ تكلفة المحادثة تقريباً ما تراه على الشاشة. لكن الوكيل يقرأ 20 ملفاً، ويشغّل مجموعة الاختبارات، ويعيد إرسال المحادثة كاملة في كل دورة، لذلك تحدد التكلفةَ معلوماتُ السياق التي لم تكتبها بنفسك. في الاشتراك، يُعد رقم الدولار الذي يعرضه Claude Code للجلسة تقديراً تقول Anthropic إنه غير ذي صلة بالفوترة. أما الرقم المهم فهو شريط الاستخدام الذي يفرغ في بعض الأيام أسرع من غيرها. تعالج كل أداة من الأدوات الثلاثة جانباً مختلفاً من هذه الفجوة.

الشكل 1: محلل سجلات محلي يوضح تكلفة استخدامك اليوم

يخزّن Claude Code كل محادثة بتنسيق JSON Lines (JSONL) في ~/.claude/projects/<project>/<session-id>.jsonl، حيث يشير <project> إلى مسار دليل العمل لديك بعد استبدال الأحرف غير الأبجدية الرقمية بـ -. يحتوي كل دور للمساعد في هذا الملف على أعداد الرموز المميزة الخاصة بطلبه. يجمع محلل السجلات هذه الأعداد ويحسب تكلفتها.

يختار معظم الأشخاص ccusage. ولا يتطلب تثبيته أي شيء:

npx ccusage@latest daily
npx ccusage@latest daily --breakdown
npx ccusage@latest blocks
npx ccusage@latest session --json

يعرض daily الإجماليات حسب التاريخ. يقسم --breakdown كل صف حسب النموذج، وبذلك تعرف أن فترة بعد الظهر واحدة باستخدام Opus قد تمثل معظم استخدامك خلال الأسبوع. يجمع blocks البيانات حسب نافذة الساعات الخمس التي يُعاد فيها ضبط الاشتراك. يحسب session الإجمالي لكل محادثة، بينما يجمع daily --instances البيانات حسب المشروع لتعرف أي مستودع أعلى تكلفة. أضف --since و--until لتحديد نطاق التاريخ، وشغّل npx ccusage@latest daily --help لمعرفة تنسيق التاريخ الذي يتوقعه إصدارك. اعتباراً من October 2026، يقرأ أيضاً سجلات أدوات CLI أخرى للوكلاء، بما في ذلك Codex وOpenCode، وهذا مهم إذا كنت تقارن بينها.

تأتي الأسعار من جدول أسعار النماذج، وتوفّر الأداة ثلاثة أوضاع لحساب التكلفة. يستخدم --mode auto قيمة costUSD التي كتبها Claude Code في الملف عند توفرها، ويحسب التكلفة من أعداد الرموز المميزة عند عدم توفرها. يحسب --mode calculate التكلفة دائماً من أعداد الرموز المميزة ويتجاهل أي تكلفة مسجلة. يعرض --mode display التكاليف المسجلة فقط، ويطبع $0.00 للصفوف التي لا تحتوي على تكلفة مسجلة. إذا بدا أحد الإجماليات غير صحيح، فشغّل التقرير نفسه باستخدام calculate، ثم باستخدام display. تعني الفجوة الكبيرة بين النتيجتين أن معظم الإدخالات لا تحتوي على تكلفة مسجلة، ولذلك فإن كل ما تقرؤه تقديري. إذا كنت تدفع أسعاراً تعاقدية، فإن pricingOverrides ضمن defaults في ملف إعداد ccusage.json يستبدل سعر النماذج الفردية.

يمكن استخدام البيانات نفسها في موجهك. يطبع ccusage statusline سطراً موجزاً لشريط حالة Claude Code، ويُربط بـ ~/.claude/settings.json مثل أي أمر آخر لسطر الحالة. راجع إنشاء سطر حالة في Claude Code لمعرفة كتلة الإعدادات والحقول التي يستقبلها.

لا يستطيع محلل السجلات رؤية أي شيء لم يحدث على هذا الجهاز. فالحاسوب المحمول الثاني، والجلسة على claude.ai، وعمل أحد أعضاء الفريق، كلها محفوظة في سجلات موجودة على تلك الأجهزة. كما أن البيانات القديمة قد تكون مفقودة، لأن النصوص تُنظَّف بعد 30 يوماً افتراضياً وفق إعداد cleanupPeriodDays. لذلك لن تجد بيانات الربع السابق ما لم تكن قد أرشفتها.

هناك خطر آخر، وهو خطر بنيوي. توضّح وثائق Anthropic أن تنسيق الإدخالات داخلي في Claude Code ويتغير بين الإصدارات، ولذلك قد تتعطل البرامج النصية التي تحلل هذه الملفات مباشرة مع أي إصدار جديد. وينطبق ذلك على كل أداة من هذا النوع. ولهذا السبب أيضاً فإن كتابة سطر jq يدوياً لتحليل JSONL أسوأ مما تبدو عليه: فالمحللات التي تتم صيانتها تتابع تغييرات التنسيق، بينما سيعرض سطر الأوامر الذي كتبته رقماً خاطئاً بثقة في اليوم الذي يُعاد فيه تسمية أحد الحقول.

أخيراً، يحتاج الرقم بالدولار إلى توضيح عند استخدام اشتراك. لا تُحاسَب على الاستخدام ضمن حد خطتك من Pro أو Max لكل رمز مميز، ولذلك يعبّر الرقم عن التكلفة التي كانت ستنتج عن رموزك المميزة وفق أسعار API المعلنة. إنه يقيس حجم استخدامك، وليس قيمة فاتورتك. والاستثناء هو أرصدة الاستخدام: إذا فعّلتها، فستُحاسَب على الاستخدام الذي يتجاوز حد الخطة وفق أسعار API القياسية، باعتباره رسماً منفصلاً، ويعرض claude.ai إنفاق ذلك الشهر ضمن Settings > Usage. إذا كان السؤال الفعلي هو اختيار الخطة المناسبة، فهذه مقارنة مستقلة: راجع فوترة API مقارنة باشتراك Claude.

النهج 2: تخبرك شاشات الاستخدام المضمّنة بالنموذج الذي استهلك الميزانية

يأتي Claude Code مزوداً بتقارير خاصة به، ومع ذلك لا يفتحها معظم المستخدمين. شغّل /usage داخل جلسة. يعرض قسم Session في الأعلى عدد الرموز المميزة حسب النموذج وتكلفة بالدولار للجلسة الحالية. ويُحسب ذلك محلياً من أعداد الرموز المميزة وفق الأسعار القياسية المعلنة، ما لم يضبط أحد المسؤولين جدول modelPricing في الإعدادات المُدارة. في هذه الحالة، يذكر السطر Total cost القيمة at your organization's configured rates. في كلتا الحالتين، تُعد هذه القيمة تقديرية وقد تختلف عن فاتورتك. وفي خطتي Pro أو Max، توضح Anthropic أن هذه القيمة لا ترتبط بالفوترة، لأن هذا الاستخدام مشمول في الخطة. تُصفَّر الإجماليات عند بدء /clear لمحادثة جديدة.

في خطط Pro أو Max أو Team أو Enterprise القائمة على المقاعد، تعرض الشاشة نفسها مقدار الحد المضمّن في خطتك الذي استخدمته. أما Enterprise القائمة على الاستخدام، فلا تتضمن حداً يمكن استنفاده، لأن كل رمز مميز يُحاسب وفق أسعار API. وفي هذه الخطط، تنسب الشاشة أيضاً الاستخدام الأخير إلى المهارات والوكلاء الفرعيين والمكونات الإضافية وخوادم MCP الفردية، كنسبة مئوية من الإجمالي. كما تضع علامة على السلوكيات التي تمثل 10% أو أكثر من الاستخدام الأخير، مثل السياق الطويل أو حالات فقدان ذاكرة التخزين المؤقت. اضغط d أو w للتبديل بين آخر 24 ساعة وآخر 7 أيام. هذه الأرقام تقريبية ومحسوبة من سجل الجلسات المحلي على هذا الجهاز، ولذلك لا يُحتسب جهاز ثانٍ. عندما يكون هذا الشريط فارغاً، لا منخفضاً فحسب، تخبرك الشاشة بأن النافذة أُغلقت، لكنها لا توضح كيفية متابعة العمل. أما ما يجب فعله بعد بلوغ الحد فهو قرار منفصل يتعلق بالنموذج والسياق والخطة.

عندما يتجاوز العدد مطوراً واحداً، تنتقل الأرقام إلى مستوى الحساب. تحصل مؤسسة API على صفحة الاستخدام في Console، ولوحة Claude Code تعرض الإنفاق والأسطر المقبولة لكل عضو، إضافة إلى Claude Code Analytics API التي تُرجع المقاييس اليومية نفسها لكل مستخدم باستخدام مفتاح مسؤول. وتحصل خطتا Teams وEnterprise على تقرير إنفاق في وحدة تحكم المسؤول مع إمكانية تصديره بصيغة CSV، ويُحدَّث يومياً. لكن هذا التقرير يغطي الإنفاق من أرصدة الاستخدام؛ فلا يُقاس الاستخدام داخل مخصصات المقاعد بالدولار. وتضيف Enterprise واجهة analytics API. ويعتمد ما تراه من ذلك على طريقة تسجيل دخول كل مطور، ولذلك تقرأ المؤسسة المختلطة تقريرين وتجمعهما يدوياً.

لتقدير الميزانية، يبلغ الرقم المنشور في وثائق تكاليف Anthropic، اعتباراً من October 2026، متوسطاً يقارب $13 لكل مطور في يوم نشط و$150 إلى $250 لكل مطور شهرياً، مع بقاء 90% من المستخدمين دون $30 في اليوم النشط. تعامل مع ذلك باعتباره معياراً منشوراً من عمليات نشر مؤسسية، لا تنبؤاً بفريقك. شغّل مجموعة تجريبية وقِس النتائج قبل التعميم.

لا تستطيع لوحات المعلومات رؤية أي شيء أدق من اليوم والمستخدم. ستخبرك بأن Opus استُخدم معظم يوم الثلاثاء، لكنها لن تخبرك بأي prompt أو مستودع أو مهمة CI تسبب في ذلك. كما أنها تتأخر، لأن تقارير المؤسسة تُحدَّث يومياً. لذلك فهي أداة للمراجعة، وليست وسيلة لاكتشاف وكيل منفلت في فترة بعد الظهر نفسها. يتطلب إيقاف الوكيل المنفلت حدوداً، لا تقارير، وهذا هو موضوع ضبط تكاليف الوكيل على VPS.

النمط 3: تخبرك حزمة OpenTelemetry الخاصة بك بأي مطالبة تراجعت جودتها

يُصدر Claude Code مقاييس وأحداث OpenTelemetry بعد ضبط متغير بيئة واحد، وهذا هو الخيار الوحيد الذي يرسل بيانات الرموز المميزة والتكلفة لكل مستخدم إلى نظام تتحكم فيه، في وقت قريب من الفعلي. تشمل المقاييس claude_code.cost.usage بالدولار الأمريكي، وclaude_code.token.usage بالرموز المميزة، وclaude_code.session.count وclaude_code.active_time.total.

مقياس الرموز المميزة هو الأهم بسبب سماته. تحمل كل نقطة بيانات type، وهي input أو output أو cacheRead أو cacheCreation، بالإضافة إلى model وquery_source، وهي main أو subagent أو auxiliary. وتحمل أيضاً agent.name وskill.name وmcp_server.name وmcp_tool.name. تصل أسماء خوادم MCP التي ضبطتها بنفسك وأسماء الوكلاء الفرعيين المخصصين لك على شكل custom، ما لم تضبط OTEL_LOG_TOOL_DETAILS=1، الذي يضيف أيضاً أوامر Bash ومدخلات الأدوات إلى أحداث الأدوات. يكفي ذلك للإجابة عن أسئلة لا يستطيع أي dashboard الوصول إليها: ما نسبة الفاتورة التي يستهلكها الوكلاء الفرعيون بدلاً من جولاتك أنت، وهل ضاعف أحد خوادم MCP رموز الإدخال، وهل انهارت قراءات الذاكرة المؤقتة بعد أن عدّل شخص ما CLAUDE.md. غالباً ما يكمن الجزء المفاجئ في سلوك الذاكرة المؤقتة، وتشرح متى تحقق تخزين المطالبات مؤقتاً عائده ما تراه.

هناك تصحيح مهم ينبغي توضيحه، لأنه يتكرر في كل نقاش حول هذا الموضوع. يُعد Langfuse خلفية جيدة للتتبّع ذاتية الاستضافة، ويغطي استضافة Langfuse ذاتياً لتتبّع الوكلاء تشغيله على VPS. تقبل نقطة نهاية OTLP فيه عمليات التتبّع فقط. يصدّر Claude Code افتراضياً المقاييس وأحداث السجل، وليس الامتدادات، لذلك يؤدي توجيه OTEL_EXPORTER_OTLP_ENDPOINT إلى Langfuse إلى إبقاء المشروع فارغاً، ولا يعطيك خطأ مفيداً لقراءته. تصدير الامتدادات متاح فعلاً، لكنه يبقى معطلاً في الإصدار التجريبي إلى أن تضبط CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 وOTEL_TRACES_EXPORTER. يتبع تكامل Langfuse الخاص بـ Claude Code مساراً مختلفاً: إذ يقرأ Stop hook، أو plugin يثبّت واحداً منه، نصوص الجلسات بعد كل استجابة ويحوّلها إلى عمليات تتبّع، ولذلك يشارك محلل السجل القيود المحلية نفسها. يُعد Langfuse الأداة المناسبة للوكلاء الذين تبنيهم بنفسك باستخدام API، حيث ينشئ كودك الخاص كل امتداد مع المطالبة والنموذج والتكلفة. أما للحصول على إجماليات الإنفاق من CLI الخاص بـ Claude Code، فمخزن المقاييس هو الخيار المناسب.

إعداد تتبع إنفاق Claude Code على VPS الخاص بك

تكفي خدمتان: جامع لاستقبال المقاييس، وPrometheus لتخزينها. أبقِ كليهما خارج الإنترنت العام، لأن منفذ OTLP المفتوح يقبل عمليات الكتابة من أي جهة تعثر عليه. اكتب /opt/ccmetrics/compose.yaml:

services:
  collector:
    image: otel/opentelemetry-collector-contrib:latest
    command: ["--config=/etc/otel/config.yaml"]
    volumes:
      - ./collector.yaml:/etc/otel/config.yaml:ro
    ports:
      - "10.8.0.1:4318:4318"
    restart: unless-stopped
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prom-data:/prometheus
    ports:
      - "127.0.0.1:9090:9090"
    restart: unless-stopped

volumes:
  prom-data:

10.8.0.1 هو عنوان الخادم داخل نفق WireGuard، لذلك يمكن الوصول إلى الجامع من أجهزتك فقط، وليس من أي مكان آخر. العنوان الموضوع قبل المنفذ مهم هنا فعلاً، لأن منافذ Docker المنشورة لا يرشحها ufw: راجع سبب تجاوز منافذ Docker المنشورة لـ ufw. أما إعداد النفق نفسه فموضح في شبكة WireGuard VPN على VPS الخاص بك.

/opt/ccmetrics/collector.yaml:

receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:

exporters:
  prometheus:
    endpoint: 0.0.0.0:8889

service:
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [prometheus]

/opt/ccmetrics/prometheus.yml. لا يُنشر المنفذ 8889 إلى المضيف مطلقاً، لأن Prometheus يصل إلى الجامع عبر شبكة Compose باستخدام اسم الخدمة:

global:
  scrape_interval: 30s

scrape_configs:
  - job_name: claude-code
    static_configs:
      - targets: ["collector:8889"]
cd /opt/ccmetrics
docker compose up -d
docker compose logs collector

يجب أن ينتهي سجل الجامع بـ Everything is ready. Begin running and processing data.. يعني توقف السجل بسبب خطأ في الإعداد أن YAML لم يُحلَّل، وأن الحاوية ستُعاد إعادة تشغيلها في حلقة.

وجّه Claude Code إليه الآن. على كل جهاز يشغّل Claude Code، أضف ما يلي إلى ~/.claude/settings.json:

{
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
    "OTEL_METRICS_EXPORTER": "otlp",
    "OTEL_LOGS_EXPORTER": "none",
    "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
    "OTEL_EXPORTER_OTLP_ENDPOINT": "http://10.8.0.1:4318",
    "OTEL_METRIC_EXPORT_INTERVAL": "10000"
  }
}

ابدأ جلسة، وأرسل مطالبة واحدة، وانتظر فترة التصدير (10 ثوانٍ هنا، و60 ثانية افتراضياً)، ثم اطلب من Prometheus عرض ما تعلّمه:

curl -s http://localhost:9090/api/v1/label/__name__/values | grep -o 'claude_code[a-z_]*'

يجب أن تحصل على عدة أسماء تبدأ بـ claude_code_. يعيد المصدّر كتابة النقاط إلى شرطات سفلية، ويضيف الوحدة، لذلك تعتمد السلاسل الدقيقة على إصدار الجامع لديك. تعني النتيجة الفارغة أن شيئاً لم يصل. تحقق من تطابق البروتوكول والمنفذ، لأن http/protobuf يستخدم المنفذ 4318، بينما grpc يستخدم المنفذ 4317، ويؤدي عدم التطابق إلى فشل صامت. شغّل claude --debug-file /tmp/claude-debug.log وابحث في ذلك الملف عن أسطر [3P telemetry]، إذ يبلّغ Claude Code عن أخطاء تصدير OTel فيها.

إذا كان لديك جهاز واحد ولا تريد استخدام خادم، فتجاوز كل ما سبق. اضبط OTEL_METRICS_EXPORTER=prometheus، وسيعرض Claude Code نقطة نهاية لجمع المقاييس على http://localhost:9464/metrics نفسه. عندما يكون prometheus هو المصدّر الوحيد المدرج، يحذف Claude Code وحدات USD وtokens وs من المقاييس المصدّرة، لكي يظل الجمع متوافقاً مع تنسيق نص Prometheus. لا تتغير أسماء المقاييس، ويُبقي إعداد يجمع بين المصدّرات، مثل otlp,prometheus، على الوحدات.

يرتبط هذا التصميم بقرار يتعلق بالخصوصية. افتراضياً، لا يغادر الجهاز سوى الأعداد والبيانات الوصفية، ولا يغادره نص المطالبة أو ناتج الأدوات. يضيف OTEL_LOG_USER_PROMPTS=1 نص المطالبة إلى الأحداث المصدّرة، ويضيف OTEL_LOG_TOOL_CONTENT=1 ناتج الأدوات إلى امتدادات التتبع، لذلك سيحتوي صندوق القياس عن بُعد لديك على الشيفرة المصدرية وأي محتوى آخر كان موجوداً في السياق بمجرد تصدير أي من الإشارتين. فعّل هذين الخيارين عمداً، واقرأ أولاً إبقاء الأسرار خارج سياق الوكيل.

تتبّع الإنفاق لعمليات التشغيل البرمجية وعمليات CI

تفاجئ عمليات التشغيل غير التفاعلية المستخدمين لأنها تعمل من دون أن يراقب أحد الشاشة. يبلّغ claude -p مع --output-format json عن تكلفة عملية التشغيل هذه ضمن حمولة النتيجة:

claude -p "summarise the failing tests" --output-format json | jq '.total_cost_usd'

تتضمن الحمولة total_cost_usd بالإضافة إلى تفصيل حسب كل نموذج، لذلك يمكن لمهمة CI تسجيل إنفاقها بنفسها من دون استخدام لوحة معلومات. وكما هي الحال مع كل قيمة محلية، فهذا تقدير من جهة العميل، كما أن عملية التشغيل التي تتابع محادثة مع --continue أو --resume تبلغ عن إجمالي المحادثة بأكملها، بما في ذلك عمليات التشغيل السابقة. ألحِق القيمة بملف، أو أرسلها كمقياس إلى الجامع المذكور أعلاه. هذا أرخص تتبّع مفيد للإنفاق متاح، ولا يتطلب سوى استدعاء jq واحد لكل عملية تشغيل.

أوضاع الفشل وما ستراه

التقرير فارغ. تعني npx ccusage@latest daily التي تعرض صفوفاً بلا بيانات أنه لا يقرأ الموقع الذي يكتب فيه Claude Code. تنقل CLAUDE_CONFIG_DIR هذا الموقع، ويجب إبلاغ المحلّل بالموقع الجديد. إذا وُجدت صفوف لكنها تتوقف قبل نحو شهر، فهذا يعني أن cleanupPeriodDays تعمل وفق التصميم: تُحذف السجلات النصية بعد 30 يوماً افتراضياً.

تعرض آلتان إجماليين مختلفين. هذا متوقع وليس خطأ. يقرأ تفصيل /usage وأي محلّل للسجلات سجل الجلسات المحلي فقط، ولذلك لا يظهر الاستخدام من جهاز آخر أو من claude.ai في أيٍّ منهما.

لا يطابق الإجمالي المحلي الفاتورة. تُحسب الأرقام المحلية من أعداد الرموز وفق أسعار القائمة القياسية، ما لم تضبط أسعاراً تعاقدية: جدول modelPricing في الإعدادات المُدارة لـ /usage، أو pricingOverrides لـ ccusage. في الاشتراك، لا يُحاسَب الاستخدام ضمن حد الخطة لكل رمز، بل تُحاسَب أرصدة الاستخدام فقط. وتُعد صفحة الاستخدام في Console المرجع المعتمد لفوترة API.

ارتفعت التكلفة رغم أنك نفذت العمل نفسه. تحقّق من أعمدة التخزين المؤقت أولاً. تعيد الجلسة الطويلة إرسال سجلها الكامل في كل دورة، ويُسعَّر ذلك بسعر التخزين المؤقت ما دام التخزين المؤقت فعالاً، وبسعر الإدخال الكامل بعد انتهاء صلاحيته. لذلك قد تؤدي فترة توقف طويلة واحدة إلى معالجة المحادثة كاملة من جديد. يظهر ذلك في صورة رقم إدخال كبير بجوار رقم إخراج صغير، ويوضح تسعير رموز الإدخال مقابل رموز الإخراج سبب تحرك الرقمين بشكل مستقل.

يبدو يوم استخدمت فيه الوكلاء الفرعيين غير منطقي. يشغّل كل وكيل فرعي نافذة سياق خاصة به، ولذلك يزداد استخدام الرموز بحسب عدد الوكلاء الذين عملوا ومدة عمل كل منهم. في الخطة، يعرض إسناد /usage حصة الوكلاء الفرعيين لهذا الجهاز كنسبة مئوية. وللحصول على التفاصيل لكل طلب، تفصل بيانات OTel بينها من خلال السمة query_source على claude_code.token.usage. سيعرض محلّل السجلات الإجمالي ويتركك تحاول معرفة السبب.

FAQ

هل يعرض ccusage ما أُحاسَب عليه فعلياً ضمن خطة Max؟

لا. لا تُحاسَب على الاستخدام الواقع ضمن حد خطة الاشتراك لكل token، لذلك يحسب محلل السجلات تكلفة tokens وفق أسعار API القياسية، ويعرض ما كانت ستكلفه العملية نفسها عبر API. وهذا مقياس نسبي جيد لحجم العمل في اليوم، كما يفيد في مقارنة المشاريع أو النماذج ببعضها. لمعرفة المبلغ المستحق عليك، تعرض صفحة استخدام Console فواتير API، بينما تعرض صفحة فواتير الخطة تفاصيل الاشتراك. إذا فعّلت أرصدة الاستخدام، فستُحاسَب على الاستخدام الذي يتجاوز الحد وفق أسعار API القياسية، ويعرض claude.ai هذه التكلفة ضمن Settings > Usage.

أين يخزّن Claude Code ملفات الجلسات التي تقرؤها هذه الأدوات؟

في ~/.claude/projects/<project>/<session-id>.jsonl، حيث يمثّل <project> مسار دليل العمل بعد استبدال المحارف غير الأبجدية الرقمية بـ-. كل سطر هو كائن JSON لرسالة واحدة أو لاستخدام أداة أو لإدخال بيانات وصفية. ينقل CLAUDE_CONFIG_DIR الدليل بالكامل، ويتحكم cleanupPeriodDays في settings.json بفترة الاحتفاظ البالغة 30 يوماً. توثّق Anthropic تنسيق الإدخالات باعتباره داخلياً وقابلاً للتغيير بين الإصدارات، لذلك حلّله باستخدام أداة تتم صيانتها بدلاً من استخدام script خاص بك.

هل يمكنني إرسال بيانات القياس عن بُعد من Claude Code إلى Langfuse؟

ليس باستخدام بيانات القياس عن بُعد الافتراضية. تقبل نقطة نهاية Langfuse ‏OTLP آثار التتبّع، لكن Claude Code يصدّر افتراضياً المقاييس وأحداث السجل بدلاً من المقاطع، لذلك لا تجد البيانات وجهة تستقبلها. تصدير المقاطع ميزة تجريبية يجب تفعيلها، بينما يستخدم تكامل Langfuse الخاص بـClaude Code خطاف Stop يحوّل نصوص الجلسات إلى آثار تتبّع بدلاً من ذلك. للحصول على إجماليات التكلفة، أرسل مقاييس Claude Code إلى مجمّع OpenTelemetry وخزّنها في Prometheus. استخدم Langfuse للوكلاء الذين تبنيهم بنفسك عبر API، حيث يصدر كودك الخاص مقاطع تحمل prompt والنموذج والتكلفة.

لماذا لا تتطابق الأرقام المحلية مع صفحة استخدام Console؟

لأنها تُحسَب بطرق مختلفة. يجمع /usage ومحللات السجلات أعداد tokens من ملفات الجلسات على الجهاز الذي تعمل عليه، ثم يحسبان تكلفتها وفق أسعار القائمة القياسية ما لم تُضبط أسعار متعاقد عليها، وذلك عبر modelPricing في الإعدادات المُدارة لـ/usage أو pricingOverrides في ccusage. تعرض Console ما فُرض فعلياً على مؤسستك، عبر جميع الأجهزة وجميع المفاتيح، بعد تطبيق أي خصم. عدم التطابق أمر طبيعي. أما الفارق الكبير جداً فعادةً ما يعني وجود جهاز ثانٍ، أو مشغّل CI، أو عضو آخر في الفريق يحمّل التكلفة على الحساب نفسه.

كيف أتابع تكلفة تشغيل claude -p في CI؟

شغّله باستخدام --output-format json، واقرأ total_cost_usd من النتيجة، مثلاً باستخدام claude -p "..." --output-format json | jq '.total_cost_usd'. تتضمن الحمولة نفسها تفصيلاً حسب النموذج ومعرّف الجلسة. سجّل هذه القيمة لكل مهمة، وستحصل على تكلفة كل pipeline من دون agent أو لوحة معلومات أو خدمة إضافية.

هل كان هذا المقال مفيدًا؟