बारह दिन: 'अगर आप यह चाहते हैं' से Tetris तक
Claude Code Mods TypeScript मॉड्यूल हैं जो Claude Code इंजन के अंदर चलते हैं और उसके events को functions के रूप में hook करते हैं। Boris Cherny, जो Anthropic में Claude Code का नेतृत्व करते हैं, ने पांच शब्दों में इसकी घोषणा की: "Claude mods are landing now." इस पोस्ट को 2,400 likes मिले, और तब तक किसी ने टर्मिनल के अंदर Tetris बना भी दिया था। Tetris, Doom, और एक pet जो तब बढ़ता है जब Claude आपके tests चलाता है — ये सब prompt के ऊपर rendered होते हैं, zero tokens पर।
इस घोषणा में किसी docs page का लिंक नहीं है। इसके बजाय यह 12 दिन पहले एक Anthropic engineer द्वारा खोले गए एक GitHub issue से लिंक करती है, जिसमें एक शर्त लिखी हुई थी। Alice Poteat ने लिखा कि community की प्रतिक्रिया ही यह तय करेगी कि यह feature शिप होगा या नहीं। 177 comments के बाद, लोगों ने flagged binary को जमकर आज़माया, उसके timeouts मापे, और उस पर games बना दिए।
| पैमाना | मान |
|---|---|
| घोषणा पर likes | 2,400 |
| GitHub issue पर comments | 177 |
| इस हफ़्ते के build में typed surface | 10,700 lines |
| Nouns पर events (issue-thread build) | 84 (19 पर) |
| 48 घंटों के अंदर GitHub पर Mods | 31 |
लेखन के समय docs page 404 लौटाता है। यह लेख Claude Code को बढ़ाने के चार तरीके, जानबूझकर बनाया और तोड़ा गया एक उपयोगी Mod, और शिप करने से पहले अभी भी क्या अस्थिर है — इन सबको कवर करता है।
एक Mod बीच में बैठा एक फ़ंक्शन है
Source tree इसे एक वाक्य में परिभाषित करता है: एक Mod एक Claude Code plugin है जिसका व्यवहार एक hooks module में रहता है। एक register entry इंजन के events को functions के रूप में hook करती है। डिस्क पर, यह एक plugin folder, ठीक एक module का नाम लेने वाला एक hooks manifest, और वह module खुद है।
हर hook तीन चीज़ों का एक function है: $, वह दरवाज़ा जिससे हर side effect गुज़रता है; event; और continuation, यानी आपके नीचे की बची हुई chain। Hooks middleware की तरह nest होते हैं। जो पहले register होता है वह event का मालिक होता है, और उसके नीचे की कोई भी चीज़ उसे रोक नहीं सकती। यह क्रम configuration से तय होता है, install होने के क्रम से नहीं। Alice Poteat के शब्दों में, क्रम configuration से सेट होता है, न कि आपने उन्हें कब install किया इससे।
कोई ambient access नहीं है। एक Mod जो भी करता है वह $ से होकर गुज़रता है, इसलिए एक admin किसी भी event को audit, allow, deny या log कर सकता है। एक commenter ने इसे इस तरह summarise किया: एक plugin ने जो किया वही ठीक-ठीक वे calls हैं जो उसने कीं। * पर एक ही hook हर event देख लेता है, इसलिए एक audit log सिर्फ एक function है। एक Mod draw कर सकता है, क्योंकि interface React है। यह Bun पर in process चलता है, 99वें percentile पर 50 microseconds में। एक environment variable इसे on करता है। $ पर असल में क्या रहेगा, यह अभी भी early-access partners के साथ design किया जा रहा है।
Claude Code को बढ़ाने के चार तरीके, और कौन सा किसके लिए
एक shell hook एक script है जिसे इंजन एक तय पल पर बुलाता है। इसे standard input पर JSON मिलता है और यह एक exit code से जवाब देता है। जवाब की एक सीमा है: वापस 8,000 characters का context, और कुछ hooks के लिए 2,000। Pratham के शब्दों में, Windows पर ये अक्सर अजीब तरीकों से टूट जाते हैं।
एक plugin एक box है। एक manifest skills, agents, hooks, और MCP servers को बंडल करता है। यह किसी marketplace से install होता है या डिस्क पर किसी folder से सीधे load होता है, और कुछ भी चलने से पहले एक command उस box को validate करता है।
एक skill prose है जिसे model ज़रूरत पड़ने पर पढ़ता है। इसका body तभी load होता है जब कोई matching prompt आता है। यह व्यवहार बदलने का सबसे सस्ता तरीका बना रहता है।
एक Mod वही box है, बस एक और file के साथ: एक hooks manifest जो एक module का नाम लेता है, और वह module TypeScript है, typed, in process, इंजन के हर event पर। बस यही पूरा फ़र्क़ है।
| Mechanism | यह क्या है | कैसे चलता है | सीमा |
|---|---|---|---|
| Shell hook | एक तय पल पर बुलाया गया script | Subprocess, exit code | वापस 8,000 chars (कुछ hooks के लिए 2,000) |
| Plugin | Skills, agents, hooks, MCP servers का bundle | Install या डिस्क से load | चलने से पहले validated |
| Skill | Matching prompt पर load होने वाला prose | Model के context में | सबसे सस्ता बदलाव |
| Mod | Plugin plus एक TypeScript hooks module | In process, हर event पर | Typed, early access |
Types एक slash command से आते हैं, जो $ जो कुछ भी देता है उसकी पूरी listing सीधे आपके project में लिख देता है। पुराने shell hooks wrap किए गए हैं, retire नहीं। एक early build पर, Spencer Morley ने wrapper को load होने में fail होते और फिर भी declared बना रहते देखा। सामान्य नियम: Claude जो जानता है उसे बदलने के लिए एक skill लिखें; किसी पल पर script चलाने के लिए, एक shell hook; एक bundle शिप करने के लिए, एक plugin; इंजन के अंदर बैठने के लिए, एक Mod। Shell hook अब भी वहां हर जगह काम करता है जहां flag off है।
Anthropic के अपने तीन, सोर्स से पढ़े गए
तीन Mods binary के अंदर शिप होते हैं और उनका source GitHub पर है: एक security default, एक diff pane, और telemetry।
Security default सबसे बाहर बैठता है। managed settings वाली किसी मशीन पर, या किसी Team या Enterprise organisation में, कोई व्यक्ति जो भी install करे वह इसके ऊपर नहीं जा सकता। यह 12 events को hook करता है, और हर hook तीन में से एक move करता है: user tier को आगे जाने दे, user tier के किसी caller को नाम से मना कर दे, या pass कर दे। यह fail closed होता है, और doc comment दो शब्दों में यही कहता है। यही वह हिस्सा है जिसकी thread को परवाह थी: एक admin $ से एक affordance हटा देता है, और उसके नीचे register हुआ कुछ भी उसे invoke नहीं कर सकता। एक commenter के शब्दों में, यह किसी plugin से कुछ न करने को कहने से categorically अलग है।
Diff transcript के बगल में एक pane है, जो session के uncommitted changes को file दर file दिखाता है, Claude के edit करते ही refresh होता है। यह session शुरू होने पर register होता है और 27 helper files तक फैला है, कोई toy नहीं।
Telemetry engine creation के अंदर से $ में एक noun जोड़ता है। यह नीचे जो कुछ है उसे await करता है और वह plus खुद को लौटाता है। यह सिर्फ internal builds में चलता है।
README कहती है कि source से एक चलाएं और source से एक test करें। आज के build की help में validate, eval, और details सूचीबद्ध हैं। सूची में test नहीं है, हालांकि test help अब भी जवाब देती है। Built-in tier आपकी copy को भी मना कर देता है: उन नामों में से किसी एक नाम से एक plugin शिप करें, और binary अपना ही load करता है।
बयालीस लाइनें: एक Mod जो मॉडल से secrets छुपाता है
Types लिखने वाला slash command, इस build पर, 11,700 lines produce करता है: 23 nouns में 84 events। Tool call hook एक result या एक deny के साथ जवाब देता है, कभी text के साथ नहीं। यह हिस्सा core तय करता है।
Mod तीन files है: plugin manifest, अपनी एक लाइन वाला hooks manifest, और module। Module 42 lines का है। यह नीचे जो कुछ है उसे await करता है, result को scrub करता है, और उसे वापस सौंप देता है। चार patterns दो vendor key shapes, एक GitHub token, और key, secret या token नाम के किसी भी variable को assign की गई चीज़ को कवर करते हैं।
Validate चलने से पहले source पढ़ता है। यह उस event का नाम लेता है जिसे module hook करता है और वह एक चीज़ जो यह $ पर call करता है। इकलौती warning एक missing author की है। Flag on के साथ डिस्क से load होने पर, test file में दो keys हैं, दोनों निर्माण से ही fake, और model "redacted" पढ़ता है। अपने ही शब्दों में, values redacted होकर वापस आईं, इसलिए यह नहीं देख सकता कि उनमें क्या है।
| पैमाना | मान |
|---|---|
| Module length | 42 lines |
| Hop latency, worker सहित | 28 ms |
| Session में जोड़े गए tokens | 0 |
इंजन hop को एक hooks module द्वारा resolved के रूप में log करता है। Inventory कोई skills नहीं दिखाता, कोई agents नहीं, कुछ भी हमेशा-on नहीं। एक सीमा बनी रहती है: model से छुपा होना screen से छुपा होना नहीं है। Transcript अब भी वही दिखाता है जो tool ने print किया। वह एक अलग Mod है, जैसा Ship Notes में Max ने एक लाइन में बताया।
इसे तोड़ें: एक धीमा guard एक बायपास हुआ guard है
वही Mod, एक जोड़ी गई line के साथ: नीचे की call से पहले 15-second की sleep। दस सेकंड बाद, इंजन उस पर हार मान लेता है, report करता है कि hook अपना budget पार कर गया और skip कर दिया गया, और उसके नीचे जो है वह उसकी जगह चलता है। Command फिर भी चलता है और "hi" print करता है।
Sleep की जगह एक throw रखें: 574 milliseconds, वही फैसला, skipped, और command चलता है।
| केस | समय | फैसला |
|---|---|---|
| Healthy hook | 28 ms | Resolved |
| Throw | 574 ms | Skipped, command चला |
| Hang | 10 s से ज़्यादा | Skipped, command चला |
दोनों failures एक ही शब्द पर ख़त्म होते हैं: skipped। Thread ने एक हफ़्ते पहले ही इस असंगति को माप लिया था। Load पर missing एक capability fail closed होती है। अपना budget पार कर चुका एक hook fail open होता है: loud लेकिन bypassed, Spencer Morley के शब्दों में। बिना किसी कारण के एक block model को बस किसी दूसरे tool पर भेज देता है। Pratham ने इसे एक अलग tool चुनते और फिर भी file लिखते देखा।
मेज़ पर जवाब एक catch है। Alice Poteat hook के return पर एक catch का प्रस्ताव रखती हैं, जो तब चलता है जब आप बहुत देर लगाएं या throw करें। एक rewrite हुई write को अब भी model के लिए एक note चाहिए: यह वही देखता है जो उसने लिखने को कहा था, caching कारणों से, इसलिए आप एक context line जोड़ते हैं। Budget ही isolation भी है। Hooks worker अलग चलता है, और जब यह crash होता है, इंजन इसे respawn करता है और session के लिए hooks को off कर देता है। समाधान लंबा budget नहीं बल्कि एक declared catch है।
Mods के अड़तालीस घंटे, और एक वाक्य क्या खरीदता है
दो दिन में: prompt के ऊपर Tetris और सात अन्य games, Claude के काम करते समय खेलने लायक, zero tokens पर। Doom, वही 1993 वाला original, अपनी ही process में चलता है; Mod local HTTP पर इस तक पहुंचता है और इसे प्रति सेकंड 10 बार redraw करता है। Spinner में एक breathing pacer है, और hooks worker के अंदर चलता 260,000 parameters वाला एक story model है, zero API tokens के साथ।
Registry ने validate के साथ 31 Mods scan किए। 14 host processes चला सकते हैं। 13 हर tool call देखते हैं।
Community thread की Demo 8 ने वादा किया था कि एक वाक्य ऐसा plugin लिखता है जो model के पढ़ने से पहले secrets छुपा देता है। हमने एक मांगा।
| पैमाना | मान |
|---|---|
| Time | 4 min |
| Turns | 34 |
| Cost | $1.23 |
| Lines (plus एक test file) | 190, हमारे 42 के मुक़ाबले |
| Tests | एक सेकंड के एक-तिहाई में 4 pass |
यह जो छुपाता है उसे kind के हिसाब से label करता है, clean validate होता है, और इसे न किसी API key की ज़रूरत है न किसी model call की। एक reply ने इसे यूं कहा: allowlists ही product हैं, Tetris तो बस demo है।
फैसला: अभी एक बनाएं, बाद में शिप करें
Registry के अपने आंकड़े ही चेतावनी हैं। 31 में से 14 Mods host processes चला सकते हैं, और इकलौती जांच एक static footprint है। Eval help खुद यही कहती है: एक passing suite कोई security vetting नहीं है।
| संकेत | मान |
|---|---|
| 8वीं तारीख़ को events | 20 |
| 15वीं तारीख़ को events | 84 |
| एक पखवाड़े में CLI versions | 14 |
| Hacker News points | 2 |
| Compatibility question के replies | 0 |
10-second budget runtime में रहता है, types में नहीं, जैसा Marat ने बताया। कोई changelog line नहीं, कोई docs page नहीं, कोई launch post नहीं। एक rival कहता है कि Anthropic ने इसे कॉपी किया: Ahmad Awais Command Code के mods की ओर इशारा करता है, और वह उनका example mod लिखता है, तो इसे तौलकर देखें। "early access, APIs may change" वाली post को 357 likes मिले।
अगर आप पहले से hooks लिखते हैं और audit, redaction या एक pane चाहते हैं, तो अभी एक बनाएं। अगर आप किसी team को शिप करने वाले हैं और contract अभी नहीं लिखा गया, तो रुकें। वही openness है जिसकी वजह से fail-open budget, MCP call type mismatch, और wrapper failure दिनों में users ने ढूंढ निकाले।
AIDive