Claude Code agent_summary: टोकन खर्च मापें और घटाएँ

Claude Code के पृष्ठभूमि एजेंटों की प्रगति बताने वाले अनुरोधों का खर्च मापें। एक टीम के 16.4% अनुमान की तुलना टीम द्वारा बताए गए कुल 2% और टर्मिनल के 6% से करें। स्थानीय OpenTelemetry रिसीवर से अपना हिस्सा जानें, फिर 2.1.311+ के कैश सुधार, एजेंट नियंत्रण और सामुदायिक पैच की सीमाएँ समझें।

विषय-सूची
Claude Code agent_summary: टोकन खर्च मापें और घटाएँ

Claude Code को 2.1.311 या बाद के संस्करण पर अपडेट करें, फिर OpenTelemetry से agent_summary मापें। एजेंट सुविधाएँ बंद करने से पहले जाँचें कि प्रगति-सारांश के ये अनुरोध आपके खर्च में कितना जोड़ते हैं। चर्चित 16.4% एक टीम की अनुमानित लागत का हिस्सा है; यह सभी के टोकन खर्च पर समान अतिरिक्त शुल्क नहीं है।

agent_summary क्या करता है

agent_summary मॉडल को अलग अनुरोध भेजकर काम की प्रगति बताने वाले छोटे लेबल बनाता है। Claude Code 2.1.312 पर dblumenau की रिपोर्ट में हर अनुरोध सक्रिय पृष्ठभूमि एजेंट की बातचीत का इतिहास उसी एजेंट के मॉडल को भेजता था। मॉडल से तीन से पाँच शब्दों का लेबल माँगा जाता था। उस उदाहरण में Haiku इस्तेमाल हुआ था, इसलिए यह प्रक्रिया केवल Opus तक सीमित नहीं है।

काम कर रहे पृष्ठभूमि एजेंट लगभग हर 30 सेकंड में ऐसे अनुरोध भेज सकते हैं। इतिहास न बदलने पर अगला अनुरोध छोड़ा जा सकता है, जैसा आधिकारिक बदलावों की सूची में बताया गया है। वास्तविक अनुरोध गिनें; बीते मिनटों को दो से गुणा करके संख्या न मान लें।

इसलिए दिखाई देने वाले लेबल की लंबाई से अधिक असर बड़े संदर्भ का हो सकता है। खर्च जाँचते समय दर्ज मॉडल और कैश का उपयोग देखें।

यह टर्मिनल की अपनी अनुकूलित स्थिति-पंक्ति से अलग है। कस्टम स्थिति-पंक्ति के दस्तावेज़ एक स्थानीय स्क्रिप्ट बताते हैं, जो API टोकन नहीं खर्च करती। उस स्क्रिप्ट को हटाने से सारांश बनाने वाले अलग मॉडल अनुरोध बंद नहीं होते।

16.4%, 2% और 6% वास्तव में क्या मापते हैं

लागत के ये तीन प्रतिशत अलग-अलग समूहों के हैं। 2026-11-01 तक प्रकाशित संबंधित आँकड़े ये हैं:

रिपोर्टसमूह और अवधिसारांशों की लागत का बताया गया हिस्सागणना का आधार
Flamerix AIएक टीम का एक सप्ताह का मापन16.4%Claude Code के हर अनुरोध का cost_usd अनुमान
Claude Code टीम के सदस्य edwinarbusटेलीमेट्री भेजने वाले उपयोगकर्ता; 29 अक्टूबर के उत्तर से पिछला सप्ताहलगभग 2%API की सूचीबद्ध दरों से लागत
उसी उत्तर में टर्मिनल वाला उपसमूहउसी टेलीमेट्री नमूने के भीतर टर्मिनल उपयोगलगभग 6%API की सूचीबद्ध दरों से लागत

Flamerix ने अलग से बताया कि सारांशों का हिस्सा कुल API अनुरोधों में 19.7% था। अनुरोधों का प्रतिशत कुल अनुरोधों पर आधारित है, जबकि लागत का प्रतिशत कुल अनुमानित लागत पर। इनमें से कोई भी यह नहीं बताता कि सारांश आपकी सदस्यता की उपयोग-सीमा का कितना हिस्सा खर्च करते हैं।

इन रिपोर्टों को अपना काम मापने का कारण मानें। कई लंबे काम एजेंटों को सौंपने वाली टीम का परिणाम मुख्य बातचीत में काम करने वाले डेवलपर से काफी अलग हो सकता है।

पहले अपडेट करें, लेकिन तय बचत न मानें

Claude Code टीम के उत्तर के अनुसार, 2.1.311+ में प्रॉम्प्ट कैश का उपयोग न कर पाने वाले महँगे सारांश अनुरोधों के लिए सुधार शामिल है। यह कैश का सुधार है; सारांश अनुरोध हटाने का दावा नहीं है। इससे आपके सत्रों के लिए बचत का कोई तय प्रतिशत साबित नहीं होता।

नेटिव इंस्टॉलर से हुई स्थापना के लिए Bash में यह चलाएँ:

claude --version
claude update
claude --version

अपडेट के बाद Claude Code फिर शुरू करें। यदि स्थापना पैकेज मैनेजर संभालता है, तो आधिकारिक स्थापना निर्देशों में उसकी अपडेट कमांड अपनाएँ। अपडेट के बाद संस्करण संख्या जाँचें; अपडेट चैनल या संगठन की नीति उपलब्ध संस्करण सीमित कर सकती है।

उसी उत्तर में छोटे नोट्स और छोटे मॉडल से चलने वाले सस्ते मोड पर काम का उल्लेख है। उसके जारी होने की तारीख नहीं दी गई है। 2026-11-01 तक उसे चालू करने की कोई सार्वजनिक सेटिंग दस्तावेज़ों में नहीं है। अभी बजट में उसकी बचत न जोड़ें।

OpenTelemetry से अपना सत्र मापें

claude_code.api_request लॉग घटनाएँ इकट्ठी करें और उन्हें query_source के आधार पर समूहों में बाँटें। निगरानी संदर्भ इस गुण, दर्ज model और अनुमानित cost_usd को समझाता है। query_source बताता है कि अनुरोध किस उपप्रणाली ने भेजा।

यदि आपका संगठन पहले से ये घटनाएँ इकट्ठी करता है, तो उसी निगरानी प्रणाली का उपयोग करें। एक सत्र या तय अवधि चुनें, API अनुरोधों की घटनाएँ गिनें और हर स्रोत के लिए cost_usd जोड़ें। मॉडलों की तुलना के लिए model के आधार पर दूसरा समूह बनाएँ।

इस स्थानीय उदाहरण के लिए Bash, Python 3 और Claude Code चाहिए। Claude Code का प्रमाणीकरण पहले से पूरा होना चाहिए। इसे ऐसी मशीन पर चलाएँ जहाँ टेलीमेट्री कहाँ भेजी जाती है, यह आप नियंत्रित कर सकें। यह कुल आँकड़े मेमोरी में रखता है और मेटाडेटा दिखाता है; मूल प्रॉम्प्ट या उत्तर दर्ज करना आवश्यक नहीं है।

स्थानीय रिसीवर शुरू करें

पहले टर्मिनल में यह कोड चलाएँ। यह स्थानीय लूपबैक पते पर OTLP HTTP JSON स्वीकार करता है और हर स्रोत के जमा होते कुल आँकड़े दिखाता है:

python3 -u - <<'PY'
import gzip, json, math
from collections import defaultdict
from http.server import BaseHTTPRequestHandler, HTTPServer

rows = defaultdict(lambda: [0, 0.0, 0])
models = defaultdict(set)
seen = set()

def scalar(value):
    return next((value[k] for k in ("stringValue", "doubleValue", "intValue", "boolValue")
                 if k in value), None)

def report():
    count = sum(row[0] for row in rows.values())
    cost = sum(row[1] for row in rows.values())
    missing = sum(row[2] for row in rows.values())
    print("\nquery_source\trequests\trequest_%\tknown_USD\tcost_%\tmissing_cost\tmodels")
    for source, (n, usd, absent) in sorted(rows.items()):
        share = f"{100 * usd / cost:.2f}" if cost > 0 and not missing else "n/a"
        names = ",".join(sorted(models[source]))
        print(f"{source}\t{n}\t{100 * n / count:.2f}\t{usd:.6f}\t{share}\t{absent}\t{names}")
    print(f"Total API records: {count}; missing costs: {missing}", flush=True)

class Receiver(BaseHTTPRequestHandler):
    def log_message(self, *args):
        pass

    def do_POST(self):
        if self.path != "/v1/logs":
            self.send_error(404)
            return
        raw = self.rfile.read(int(self.headers.get("Content-Length", "0")))
        try:
            if self.headers.get("Content-Encoding") == "gzip":
                raw = gzip.decompress(raw)
            data = json.loads(raw)
        except (ValueError, OSError):
            self.send_error(400)
            return
        for resource in data.get("resourceLogs", []):
            for scope in resource.get("scopeLogs", []):
                for record in scope.get("logRecords", []):
                    a = {item["key"]: scalar(item["value"])
                         for item in record.get("attributes", [])}
                    event = a.get("event.name") or scalar(record.get("body", {}))
                    if event in ("user_prompt", "claude_code.user_prompt"):
                        print("Received user_prompt event.", flush=True)
                    if event not in ("api_request", "claude_code.api_request"):
                        continue
                    identity = a.get("request_id") or json.dumps(record, sort_keys=True)
                    if identity in seen:
                        continue
                    seen.add(identity)
                    source = str(a.get("query_source") or "(missing)")
                    models[source].add(str(a.get("model") or "(missing)"))
                    row = rows[source]
                    row[0] += 1
                    try:
                        usd = (float(a["cost_usd"]) if a.get("cost_usd") is not None
                               else float(a["cost_usd_micros"]) / 1_000_000)
                        if not math.isfinite(usd) or usd < 0:
                            raise ValueError()
                        row[1] += usd
                    except (KeyError, ValueError, TypeError):
                        row[2] += 1
        self.send_response(200)
        self.send_header("Content-Type", "application/json")
        self.end_headers()
        self.wfile.write(b"{}")
        report()

server = HTTPServer(("127.0.0.1", 4318), Receiver)
print("Listening on 127.0.0.1:4318. Stop after Claude exits with Ctrl+C.", flush=True)
try:
    server.serve_forever()
except KeyboardInterrupt:
    pass
finally:
    server.server_close()
    report()
PY

मापा जाने वाला सत्र शुरू करें

दूसरे टर्मिनल में यह चलाएँ। कोष्ठकों के भीतर की उप-शेल वातावरण के ये बदलाव केवल मापी जा रही प्रक्रिया तक सीमित रखती है:

(
  export CLAUDE_CODE_ENABLE_TELEMETRY=1
  export OTEL_LOGS_EXPORTER=otlp
  export OTEL_METRICS_EXPORTER=none
  export OTEL_TRACES_EXPORTER=none
  export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/json
  export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://127.0.0.1:4318/v1/logs
  export OTEL_LOGS_EXPORT_INTERVAL=1000
  claude
)

ऐसा सामान्य काम चुनें जिसमें पृष्ठभूमि में काम करना उपयोगी हो। उदाहरण के लिए, किसी पृष्ठभूमि एजेंट से फ़ाइलें बदले बिना प्रमाणीकरण के परीक्षणों की समीक्षा करने को कहें। मुख्य बातचीत में काम जारी रखें और जाँचें कि पृष्ठभूमि एजेंट सच में शुरू हुआ है।

सत्र को इंटरैक्टिव रखें और Claude का आउटपुट पाइप में न भेजें। उसकी जगह claude -p चलाने से निष्पादन मोड बदलता है और सारांशों का व्यवहार बदल सकता है।

प्रॉम्प्ट भेजने के बाद पहले टर्मिनल में पहले Received user_prompt event. दिखना चाहिए। उसके बाद API अनुरोधों की पंक्तियाँ आनी चाहिए। काम पूरा होने दें, Claude से सामान्य तरीके से बाहर निकलें और अंतिम टेलीमेट्री आने दें। फिर Ctrl+C से रिसीवर रोकें और टर्मिनल के पुराने आउटपुट से अंतिम तालिका कॉपी करें।

परिणाम समझें और गायब डेटा की जाँच करें

मापी गई अवधि की agent_summary पंक्ति देखें। request_% का आधार सभी दर्ज API अनुरोध घटनाओं की कुल संख्या है। cost_% का आधार सभी दर्ज API अनुरोधों की कुल अनुमानित लागत है:

summary cost share = 100 × summary estimated USD / all captured estimated USD

models कॉलम हर स्रोत के लिए दर्ज मॉडल दिखाता है। मौजूदा निगरानी प्रणाली में कैश जाँचते समय input_tokens, cache_read_tokens, cache_creation_tokens और output_tokens भी देखें।

जिन अनुरोधों का स्रोत नहीं मिलता, रिसीवर उन्हें (missing) समूह में रखता है और कुल गणना में शामिल करता है। किसी भी दर्ज अनुरोध की लागत अमान्य या गायब होने पर लागत के प्रतिशत n/a दिखते हैं। इसे पूरा विवरण मानने से पहले गायब फ़ील्ड का कारण दूर करें।

agent_summary की पंक्ति न होने का मतलब केवल इतना है कि उस अवधि में ऐसे अनुरोध नहीं देखे गए। इससे सुविधा बंद होने की पुष्टि नहीं होती। पहले जाँचें कि प्रॉम्प्ट घटनाएँ, API अनुरोध घटनाएँ और वास्तविक पृष्ठभूमि कार्य मौजूद थे।

कुछ भी न आए तो जाँचें कि रिसीवर चल रहा है, प्रोटोकॉल http/json है और एंडपॉइंट का अंत /v1/logs से होता है। संगठन का तय किया हुआ गंतव्य स्थानीय सेटिंग पर प्राथमिकता पा सकता है। आगे की जाँच के लिए उसी उप-शेल में claude --debug-file ./otel-debug.log चलाएँ। निगरानी गाइड के अनुसार [3P telemetry] वाली एक्सपोर्टर त्रुटियाँ देखें।

बातचीत के रिकॉर्ड, /usage और बिल अलग क्यों दिख सकते हैं

इतिहास में अनुरोध दर्ज न हो तो उसके खर्च का स्रोत छिप सकता है। फिर भी सत्र का कुल हिसाब सही हो सकता है। इश्यू #104358 में rabitlord1324 ने पृष्ठभूमि अनुरोधों के रिकॉर्ड गायब बताए, लेकिन Claude Code के आंतरिक हिसाब को सही बताया।

मौजूदा उपयोग दस्तावेज़ सत्र के कुल और हर मॉडल के उपयोग को समझाते हैं। यहाँ जरूरी query_source के अनुसार विवरण उनमें नहीं मिलता। केवल इतिहास पढ़ने वाला उपकरण सारांश छोड़ देता है, इसलिए हर सारांश /usage से भी गायब है, ऐसा न मानें।

cost_usd अब भी एक अनुमान है। Claude Code सामान्यतः सूचीबद्ध दरें लेता है, लेकिन संगठन की प्रबंधित modelPricing तालिका रिपोर्ट में इस्तेमाल होने वाली दरें बदल सकती है। सदस्यता की उपयोग-सीमा और API के शुल्क अलग मात्राएँ हैं। उपयोग के हिसाब से भुगतान करते समय अपने प्रदाता के वास्तविक रिकॉर्ड से नतीजे मिलाएँ।

BetterToken के लिए Claude Code का दस्तावेज़ों में दिया गया Base URL https://bettertoken.ai है। 2026-11-01 तक उसके कैटलॉग में claude-opus-5-5 दर्ज है। मापी गई अवधि को कंसोल में मॉडल, टोकन उपयोग और शुल्क से मिलाएँ।

उपयोगी काम बचाते हुए खर्च घटाने का तरीका चुनें

मापा गया अतिरिक्त खर्च महत्वपूर्ण हो तो पहले काम का दायरा या पृष्ठभूमि एजेंटों की संख्या घटाएँ। 2026-11-01 तक वातावरण चर और सबएजेंट संदर्भों में केवल सारांश बंद करने वाला स्विच दस्तावेज़ित नहीं है।

विकल्पक्या बदलता हैसमझौता या सीमा
कम या छोटे पृष्ठभूमि कार्यइतिहास का सारांश बार-बार बनाने के अवसर घटते हैंउपयोगी समानांतर काम कम हो सकता है; पूरा होने का समय जाँचें
सीमित काम वाले सबएजेंट के लिए छोटा मॉडलसौंपा गया काम करने वाला मॉडल बदलता हैपरिणाम की गुणवत्ता और टेलीमेट्री में दर्ज मॉडल जाँचें
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 claudeसंबंधित टूलों से पृष्ठभूमि में निष्पादन व्यापक रूप से बंद करता हैClaude आगे बढ़ने से पहले सबएजेंटों के पूरा होने की प्रतीक्षा करता है
CLAUDE_CODE_FORK_SUBAGENT=0 claudeअपने-आप बातचीत की अलग शाखाएँ बनाना बंद करता हैसबएजेंट अब भी पृष्ठभूमि में चल सकते हैं; सारांश रुकने की गारंटी नहीं है
समुदाय का Bun preload पैचसारांश बनाने वाला टाइमर रोकने की कोशिश करता हैClaude Code के भीतर तीसरे पक्ष का कोड चलता है; अपडेट के बाद पैच काम करना बंद कर सकता है

पृष्ठभूमि कार्यों वाला वातावरण चर run_in_background हटाता है और संबंधित टूलों से काम अपने-आप पृष्ठभूमि में भेजना रोकता है। MCP कार्यों, Monitor टूल और अलग पृष्ठभूमि सत्रों के लिए अपवाद या अलग नियंत्रण हैं। यह सभी पृष्ठभूमि गतिविधियाँ बंद करने वाला स्विच नहीं है।

बातचीत की शाखाएँ बनाने वाले fork मोड का नियंत्रण दस्तावेज़ों में है। लेकिन उसके असर से सारांश भी रुकेंगे, इसकी गारंटी नहीं है। 2.1.312 पर chrisvaillancourt ने macOS में सारांश रुकने की रिपोर्ट दी। dblumenau को Linux पर अनुरोध अब भी दिखे। दोनों रिपोर्टों की सेटिंग और निष्पादन मोड अलग हैं।

नया सत्र शुरू करने से पहले नियंत्रण सेट करें। ~/.claude/settings.json और परियोजना की सेटिंग में विरोधी env प्रविष्टियाँ जाँचें; वे शेल से मिले मान बदल सकती हैं।

Flamerix preload को समुदाय का प्रयोगात्मक उपाय मानें। इस्तेमाल पर विचार करने से पहले किसी निश्चित रिविज़न का कोड जाँचें और वही रिविज़न तय रखें। हर क्लाइंट अपडेट के बाद अनुरोध गिनें; केवल लेबल स्थिर हो जाने से अनुरोध रुकने की पुष्टि नहीं होती।

सीमित शोध कार्यों के लिए केवल पढ़ने वाले सबएजेंट का मॉडल जाँचने की गाइड देखें। यदि टूलों की लंबी परिभाषाएँ संदर्भ बढ़ाती हैं, तो MCP संदर्भ की लागत तुलना से जाँचें कि कम टूल रखना मदद करता है या नहीं।

एक बार में एक ही चर बदलें। स्रोत के अनुसार लागत के साथ समान काम, मॉडल, संदर्भ की स्थितियाँ, स्वीकार्य परिणाम और लगा समय तुलना में रखें। उपयोगी समानांतर काम खोने की कीमत मापी गई बचत से अधिक हो तो पृष्ठभूमि कार्य वापस चालू करें।

अपना LLM वर्कफ़्लो बेहतर बनाना चाहते हैं?

एक API से मॉडल जोड़ें, कुंजियाँ प्रबंधित करें और AI खर्च नियंत्रित करें।

मुफ़्त शुरू करें