मैंने एक proxy टूल बनाया है जिससे पता चल सकता है कि Claude Code किस रूप में Claude.md को सर्वर पर भेजता है, और skill का मूल टेक्स्ट सर्वर पर कैसे भेजा जाता है।
(github.com/kangraemin)Claude Code के साथ काम करते हुए अचानक मेरे मन में यह सवाल आया कि CLAUDE.md फ़ाइल, skills, rules / memory जैसे डेटा को Claude server आखिर किस तरह पहचानता है?
इसलिए मैंने खुद एक MITM proxy बनाकर ट्रैफ़िक देखने वाला टूल तैयार किया।
यह टूल Claude Code चलाते समय baseURL बदलकर, Claude Code के भीतर होने वाले HTTP communication को capture करके दिखाता है।
इस टूल से जो बातें पता चलीं, वे ये हैं।
सिर्फ hello कहने पर भी 12KB जुड़कर भेजा जाता है
- यह वह स्थिति है जब Claude Code खोलते ही
helloभेजा गया। content[0]में skills की सूची ~2KB,content[1]में CLAUDE.md ~10KB, औरcontent[2]में वास्तविक inputhelloटेक्स्ट भेजा जाता है।- यानी अगर CLAUDE.md 500 लाइन का है, तो हर request में वह पूरा का पूरा भेजा जाता है, और यही वजह है कि CLAUDE.md को संक्षिप्त रखना चाहिए।
जैसे-जैसे बातचीत बढ़ती है, हर request बर्फ़ के गोले की तरह बड़ा होता जाता है
- हर request पर पूरा
messages[]फिर से भेजा जाता है। — 1 turn 15KB, 10 turn 200KB, 30 turn 1MB+ - यहाँ तक कि Claude के दिए गए जवाब भी request message में शामिल होकर जाते हैं।
- इससे समझ में आया कि अगर context window को समय-समय पर
/clearन किया जाए, तो token की बर्बादी के साथ पहले का context बाद के context से हमेशा जुड़ा रहता है, जिससे performance में गिरावट आ सकती है।
MCP tools केवल ज़रूरत पड़ने पर ही load होते हैं
- शुरुआत में सिर्फ built-in N tools (Claude version के अनुसार अलग हो सकते हैं) load होते हैं, और जब MCP tool का उपयोग करना हो, तब server
ToolSearchको call करके इस्तेमाल करने वाले tools ढूँढता है। - उसके बाद हर call में ऊपर मिले हुए tools जोड़कर call किया जाता है।
- यानी MCP Tool dynamic तरीके से load होते हैं, इसलिए जिन MCP tools का उपयोग नहीं हुआ, वे वास्तव में बड़े token consumption का कारण नहीं बनते।
subagent पूरी तरह अलग-थलग context में चलता है
- subagent ऐसा है मानो parent conversation history के बिना एक नया session खुल गया हो।
- Inspector में आप parent/subagent दोनों calls को साथ-साथ देखकर तुलना कर सकते हैं।
एक image attachment सैकड़ों KB और जोड़ देता है
- screenshot attach करने पर वह base64 encoding होकर JSON body में inline insert हो जाता है।
- image request को कितना बड़ा बना रही है, यह real time में देखा जा सकता है।
इसे नीचे दिए गए command से install किया जा सकता है।
brew install --cask kangraemin/tap/claude-inspector && sleep 2 && open -a "Claude Inspector"
GitHub: https://github.com/kangraemin/claude-inspector
फ़िलहाल यह केवल macOS के लिए है और शुरुआती version है, इसलिए अगर आप सुधार के सुझाव दें तो मैं उन्हें सक्रिय रूप से अपनाऊँगा।
इसे इस्तेमाल करके देखें, उम्मीद है यह सीखने में मदद करेगा। धन्यवाद!
4 टिप्पणियां
suspiciously precise floats, or,
how I got Claude's real limits लेख में यह विश्लेषण था कि API लागत से अलग, subscription plan में cache read की कोई लागत नहीं होती। सेशन जितना लंबा होता है, ऐसा भी लगता है कि गणना की गई लागत और वास्तविक लागत के बीच कुछ अंतर हो सकता है।
ओह .... यह पोस्ट तो मुझे बिल्कुल पता ही नहीं थी ... मैं एक बार इसे चेक करूँगा! धन्यवाद
https://github.com/badlogic/lemmy/tree/main/apps/claude-trace
मैंने इससे prompt और कौन-कौन से tools इस्तेमाल हुए, यह देखा था, अब लगता है आपने जो बनाया है उसे भी आज़माना पड़ेगा।
शेयर करने के लिए धन्यवाद। :+1:
इसके अलावा, request के बाद response के अंदर उस request में इस्तेमाल हुए token की मात्रा भी देखी जा सकती है!
मॉडल: claude-sonnet-4-6
request आकार: 68.9 KB
"usage": {
"input_tokens": 3,
"cache_creation_input_tokens": 12394,
"cache_read_input_tokens": 6499,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 12394
},
"output_tokens": 74,
"service_tier": "standard",
"inference_geo": "not_available"
}
साथ ही, मैंने मॉडल-वार कीमत लागू करके प्रति request cost भी कैलकुलेट कर दी है, इसलिए खूब इस्तेमाल करें, हाहा
cache read: 6.5K tok × $0.3/MTok = $0.0019
cache write: 12.4K tok × $3.75/MTok = $0.0465
uncached input: 3 tok × $3/MTok = $0.0000
output: 74 tok × $15/MTok = $0.0011
कुल: $0.0495
cache hit rate: 34%