डिलीट किया, मापा, एक नियम टूटा
CLAUDE.md डिलीट करने का मतलब है वह instruction फ़ाइल हटाना जिसे Claude Code हर बातचीत की शुरुआत में पढ़ता है। Claude Code के निर्माता Boris Cherny ने स्टेज पर कहा था कि इसे हर छह महीने में डिलीट कर दो। सात हफ्तों में बाईस वीडियो ने उनकी बात दोहराई। किसी ने भी कोई repository नहीं खोली।
यह लेख वह करता है जो उन वीडियो ने नहीं किया: यह एक असली app लेता है, जिसमें 177 लाइन का CLAUDE.md, तीन skills, चार commands और एक hook है, पांच रोज़मर्रा के टास्क फ़ाइल के साथ और बिना फ़ाइल के चलाता है, और गिनता है। चवालीस runs के बाद, ठीक एक नियम टूटा। हर टास्क पर फ़ाइल की कीमत tokens में चुकानी पड़ी, हर बार अलग मात्रा में, और उसकी एक लाइन ऐसी थी जिसे कोई फॉलो नहीं कर सका।
क्लिप, शब्द दर शब्द, और वो दो पंक्तियां जो उनकी नहीं
यह क्लिप Boris Cherny की YC Startup School talk से है, जो Opus 5 शिप होने के अगले दिन रिकॉर्ड हुई थी। उनके शब्द: हर छह महीने में, अपना CLAUDE.md डिलीट करो, अपने skills डिलीट करो, अपने hooks डिलीट करो। देखो मॉडल क्या करता है, हो सकता है यह आपको हैरान कर दे। Opus 5 के लिए, वे कहते हैं, Anthropic सच में इसे आज़माने की सलाह देता है: शायद मॉडल को अब उन सारे निर्देशों की ज़रूरत ही न हो।
तीस सेकंड पहले वाली वह शर्त आती है जिसे कोई कोट नहीं करता। Anthropic पूरा codebase डिलीट नहीं करता। वह बहुत कुछ डिलीट करता है, और उसे ablation कहता है। लिखित transcript में यह लाइन आज भी पूरी मौजूद है। Claude Code के system prompt का अस्सी प्रतिशत हिस्सा इसी तरह गया: सब कुछ डिलीट करो, एक-एक करके वापस लाओ, हर लाइन को नापो।
दो वाक्य जो reaction वीडियो उनके मुंह में डालते हैं, talk में कहीं नहीं हैं। "Context, goals, and a definition of done" कहीं नज़र नहीं आता; इसके सबसे करीब वे task, guardrails, exit criteria कहते हैं। "Sixty-four agents rewriting Bun" भी उनका नंबर नहीं है: यह Jarred Sumner का है, Bun वाली पोस्ट में। Cherny ग्यारह दिन कहते हैं, और जब गिनती पूछी जाती है, तो हज़ारों का अनुमान लगाते हैं।
सात हफ्तों में बाईस वीडियो ने इस क्लिप को कोट किया। किसी ने भी टेस्ट नहीं चलाया। तो यह लेख वही करता है जो उन्होंने असल में बताया था: डिलीट करो, एक-एक टुकड़ा वापस लाओ, नापो।
औज़ार: ablation, deletion नहीं
एक ablation किसी configuration का एक हिस्सा एक बार में हटाकर उसका असर नापता है, बजाय इसके कि सब कुछ डिलीट करके अंदाज़ा लगाया जाए। CLAUDE.md हर बातचीत की शुरुआत में और फिर हर turn पर दोबारा पढ़ा जाता है; skills सिर्फ तभी लोड होते हैं जब उन्हें invoke किया जाए। यही फ़र्क है जो नापा गया।
Anthropic delete switch खुद देता है: एक साधारण flag, वही variable जिसका नाम Cherny स्टेज पर लेते हैं। Repository मेरा अपना एक असली app है: 177 लाइन के निर्देश, तीन skills, चार commands, और एक hook जो हर search पर चलता है।
| Dimension | Value |
|---|---|
| रोज़मर्रा के टास्क | 5 (नया component, edit, refactor, store change, architecture question) |
| Configurations | 5 (पूरा, फ़ाइल नहीं, skills नहीं, hook नहीं, कुछ नहीं) |
| Model | एक, फिक्स्ड |
| Environment | खाली config directory, हर run से पहले नया clone |
| Runs | 44 |
| Cost | $39 |
हर run को एक जैसे तरीके से, एक ही clone पर, हाथ से नहीं बल्कि एक script से नापा गया। क्या टूटा हुआ माना गया: repository के अपने नियम (imports, types, design tokens, translations) plus typecheck और lint।
इस तरह के ablation के लिए बना इकलौता tool, Caliper, skills और MCP servers को ablate करता है लेकिन फ़ाइल को कभी नहीं छूता; CLAUDE.md का बदलाव हाथ से किया गया। सीमाएं, एक बार बताई गईं: एक repository, एक model, per cell दो runs, कोई transcript नहीं। पहले नतीजे ने ही टोन तय कर दी: refactor टास्क फ़ाइल के साथ और बिना फ़ाइल के बिल्कुल एक जैसा आया, चौंसठ सेंट फ़ाइल के साथ और तिरसठ सेंट बिना फ़ाइल के।
क्या टूटा: एक नियम, नई फ़ाइलों पर
जो नियम टूटा वह एक internationalisation नियम है, फ़ाइल के अपने शब्दों में: हमेशा English और French दोनों जोड़ो, कभी भी user को दिखने वाली string hardcode मत करो। नए component वाले टास्क पर, फ़ाइल के साथ, सभी चार runs ने translation फ़ाइल लिखी। बिना फ़ाइल के, चार में से तीन runs ने heading hardcode कर दी। वही टास्क, वही repository, वही model, वही prompt।
| नया component | Translation फ़ाइल लिखी |
|---|---|
| CLAUDE.md के साथ | 4 में से 4 |
| CLAUDE.md के बिना | 4 में से 1 |
Edit टास्क बाकी आधा हिस्सा बताता है। हर configuration इसे सही करती है, यहां तक कि कुछ भी न होने पर भी, क्योंकि पड़ोसी कोड सिखा देता है: edit किए गए component के बगल का हर component पहले से एक translation फ़ाइल रखता है। बाकी सब कुछ सभी चवालीस runs में टिका रहा: import alias, interface की जगह type, design tokens, store pattern। कोड यह दिखाता है, फ़ाइल सिर्फ दोहराती है।
ETH Zurich के एक पेपर ने 138 असली issues पर यही नापा। इसका निष्कर्ष: context files सफलता नहीं बढ़ातीं और लगभग बीस प्रतिशत ज़्यादा खर्च कराती हैं, और मॉडल निर्देशों को फॉलो तो करता ही है। एक शर्त: बिना फ़ाइल वाले एक run ने भी translation फ़ाइल लिख दी। नियम फ़ाइल के बिना असंभव नहीं है, बस अविश्वसनीय है। एक नियम टूटा, वही जिसे कोड नहीं सिखा सका। और जो run उस काम को छोड़ गया, वही सबसे सस्ता भी था।
फ़ाइल की कीमत, टास्क दर टास्क
CLAUDE.md की token लागत वह फ़र्क है जो फ़ाइल के साथ पढ़े गए tokens और उसी run में बिना फ़ाइल के पढ़े गए tokens के बीच है।
| Task | फ़ाइल के बिना कम पढ़े गए tokens |
|---|---|
| नया component | 61% |
| Edit | 15% |
| Refactor | 5% |
| Store change | 4% |
| Architecture question | 14% |
| दस runs पर कुल | 32% tokens, 22% पैसा |
बत्तीस प्रतिशत वह नंबर है जिसे हर वीडियो headline बनाएगा, और यह गलत नंबर है। सबसे बड़ी बचत उस run से आती है जिसने translation फ़ाइल नहीं लिखी: सस्ता इसलिए क्योंकि उसने कम काम किया। जहां output एक जैसा था, वहां फ़ाइल की कीमत चार से चौदह प्रतिशत रही। यही इसकी असली कीमत है, और पेपर का बीस प्रतिशत ठीक इन दोनों नंबरों के बीच बैठता है।
यह mechanism लगभग 1,800 tokens का है, जो हर turn पर दोबारा पढ़ा जाता है। Skills, hook और knowledge graph ने मौजूद होने या न होने, दोनों हालात में कोई नापने लायक फ़र्क पैदा नहीं किया। Noise इसमें से ज़्यादातर से बड़ा है: वही टास्क, वही फ़ाइल, एक run पर $2.11 और दूसरे पर $1.33। दो runs turn cap पर पहुंचे, एक फ़ाइल के साथ और एक बिना फ़ाइल के। तो फ़ाइल हर जगह थोड़ी कीमत लेती है और सिर्फ एक बार अपनी जगह कमाती है, बशर्ते वह झूठ भी न बोले।
वो पंक्तियां जो झूठ बोलती थीं
झूठ बोलने वाली लाइन वह निर्देश है जिसे मॉडल फॉलो नहीं कर सकता या जिससे कुछ नहीं बदलता। ऊपर टीज़ की गई लाइन: design-tokens alias से theme import करो। यह alias मौजूद ही नहीं है: TypeScript config सिर्फ एक prefix map करता है, और tokens folder में कोई theme फ़ाइल नहीं है। हर run में, फ़ाइल के साथ या बिना, वही किया गया जो पड़ोसी करते हैं, वही import line चवालीस बार।
फ़ाइल में architecture overview की बयासी लाइनें हैं। वही सवाल, छह जवाब: सभी छह ने backend से screen तक वही नौ फ़ाइलें, उसी क्रम में ढूंढीं, overview के साथ और बिना। एक block एक knowledge graph की ओर इशारा करता है जो clone में मौजूद ही नहीं है; graph मौजूद होने पर भी सवाल की कीमत वही रही।
| Measure | Value |
|---|---|
| Anthropic का size नियम | 200 लाइनों से कम |
| यह फ़ाइल | 177 लाइनें |
| reporails 30k-repo dataset में median फ़ाइल | 50 items, 12 directives |
| इस फ़ाइल में directive लाइनें | 177 में से 24 |
दो टकराते नियमों में कौन जीतेगा, यह position तय करती है, और मॉडल कभी यह नहीं बताता, एक vendor के टेस्ट में लगभग नब्बे points। Overview शायद किसी ऐसे टास्क में मदद करे जो यहां नहीं चलाया गया: एक probe, एक जवाब। तो तीन तरह की लाइनें हुईं: वह जिसने अपनी जगह कमाई, वे जो कोड सिखाता है, और वे जो झूठ बोलती हैं।
रखो, ले जाओ, डिलीट करो: संक्षिप्त सूची
तीन ढेर, और हर एक के पीछे की नाप।
| ढेर | उसमें क्या जाता है | नाप |
|---|---|---|
| रखो | वह नियम जो कोड नहीं दिखा सकता | 6 लाइनें जिन्होंने 4 runs बचाए |
| ले जाओ | Architecture overview और commands | 107 लाइनें, कोई नापा हुआ फायदा नहीं |
| डिलीट करो | वो लाइनें जो झूठ बोलती हैं, और वो जो tree पहले से दिखा देता है | 44 एक जैसे runs |
वही रखो जो मॉडल ने दो बार गलत किया: यही Anthropic का खुद का मापदंड है फ़ाइल के लिए। Overview और commands को ज़रूरत पड़ने पर लोड होने वाली फ़ाइलों के tree में ले जाओ; Anthropic की जुलाई वाली पोस्ट central repository को एक मिथक बताती है। Hooks बने रहें: कोई gate मॉडल के बेहतर होने पर खत्म नहीं हो जाता। जो prose इससे आगे निकल गया उसे काटो, gate रखो।
बाद वाली फ़ाइल: लगभग सत्तर लाइनें, वो छह जिन्होंने अपनी जगह कमाई, ऊपर से। यही है Cherny का तरीका, पूरा पढ़ें: डिलीट करो, एक-एक लाइन वापस लाओ, नापो। एक repository, एक model, per cell दो runs; आपके ढेर अलग होंगे, तरीका नहीं। डिलीट करने से एक नियम टूटा और बचत बहुत कम हुई। जो जीत मिली वह उन लाइनों को ढूंढने से मिली जो झूठ बोलती थीं।
AIDive