
कोडिंग एजेंटों को आपका लैपटॉप नहीं, बल्कि एक डिस्पोजेबल Linux VM दें
किसी कोडिंग एजेंट को अपनी मशीन नहीं, बल्कि उसका अपना डिस्पोज़ेबल Linux मशीन दें।
इंस्टॉल करें · क्विकस्टार्ट · VM क्यों? · यह कैसे काम करता है · तुलना · FAQ · दस्तावेज़
एक कोडिंग एजेंट तभी उपयोगी होता है जब आप उसे वास्तव में काम करने देते हैं: पैकेज इंस्टॉल करना, उसके द्वारा लिखा गया कोड चलाना, सर्वर शुरू करना, नेटवर्क का उपयोग करना। आपकी अपनी मशीन पर यह दो बुरे विकल्प छोड़ता है। आप हर कमांड को मंज़ूरी देते हैं (और हर कुछ सेकंड में एक प्रॉम्प्ट पर नज़र रखते हैं), या आप --dangerously-skip-permissions चलाते हैं और उम्मीद करते हैं कि कुछ भी महत्वपूर्ण एक rm -rf या एक लीक हुए टोकन की दूरी पर न हो।
clawk एक तीसरा विकल्प है। किसी रेपो में cd करें, clawk टाइप करें, और Claude Code (या Codex, या pi, या एक शेल) एक डिस्पोज़ेबल Linux VM के अंदर काम कर रहा है (आपका कोड अंदर माउंट किया गया है, गेस्ट में रूट, कोई अनुमति प्रॉम्प्ट नहीं) जबकि आपकी फ़ाइलें, आपका कीचेन, और आपकी बाकी मशीन पहुंच से बाहर रहती है। एजेंट को आपकी मशीन के बजाय उसकी अपनी मशीन मिलती है।
एक काम करने वाले एजेंट के लिए एक कमांड; किसी अज्ञात सर्वर को डेटा भेजने का एक प्रयास, नेटवर्क अनुमति-सूची द्वारा अवरुद्ध; clawk attach बाद में सत्र को फिर से शुरू करता है।
सीमा कोई प्रॉम्प्ट में लिखा नियम नहीं है जिससे एजेंट को बात करके हटाया जा सके। यह एक अलग मशीन है, और एकमात्र खुले रास्ते वही हैं जिन्हें आपने माउंट किया है। सैंडबॉक्स के अंदर एक शेल से:```console $ curl https://tracker.evil.example # not on the allow-list: blocked curl: (7) Failed to connect to tracker.evil.example port 443 after 2 ms: Connection refused
$ cat ~/.ssh/id_rsa # your keys never entered the VM cat: /home/agent/.ssh/id_rsa: No such file or directory
$ git push # ...yet this works: ssh-agent is forwarded Enumerating objects: 5, done.
सीमाओं के बारे में ईमानदार होने के लिए, अनुमति-सूची *अज्ञात* सर्वरों से कनेक्शन ब्लॉक करती है, न कि उन सर्वरों से जिन्हें आपने अनुमति दी है: github.com पहले से अनुमत है और फॉरवर्ड किया गया ssh-agent पुश कर सकता है, इसलिए एजेंट जो कुछ भी पढ़ सकता है उसे ऐसा समझें जिसे वह प्रकाशित कर सकता है। [सुरक्षा मॉडल](#security-model-and-its-limits) इसे विस्तार से बताता है।
और अगर एजेंट VM को तोड़ देता है, तो `clawk destroy && clawk` चलाएँ: एक नया VM, वही रिपॉजिटरी, और `--resume` बातचीत को पुनर्स्थापित करता है।
> [!IMPORTANT]
> **Pre-1.0 और तेज़ी से आगे बढ़ना।** रिलीज़ के बीच ब्रेकिंग बदलाव और कभी-कभी खुरदरे किनारों की उम्मीद करें; चीज़ें टूट सकती हैं और टूटेंगी। कृपया issues दर्ज करें; वह फीडबैक 1.0 को आकार दे रहा है।
## मुख्य विशेषताएं
- **एजेंट को कुछ भी करने दें।** यह एक डिस्पोज़ेबल VM में प्रतिबंधित नेटवर्क के साथ चलता है, इसलिए `rm -rf`, पैकेज इंस्टॉल, और अविश्वसनीय कोड आपके होस्ट, आपकी फ़ाइलों, या किसी भी चीज़ तक नहीं पहुँच सकते जिसे आपने स्पष्ट रूप से साझा नहीं किया।
- **एक कमांड में काम करना।** एक रिपॉजिटरी में `cd` करें और `clawk` चलाएँ। कोई Dockerfile, devcontainer, या सेटअप फ़ाइल नहीं। पहला बूट आपकी इमेज से rootfs बनाता है; उसके बाद हर बूट में सेकंड लगते हैं।
- **बिना कुछ खोए इसे तोड़ें।** स्वतंत्र रूप से नष्ट करें और फिर से बनाएँ; आपका कोड और एजेंट की बातचीत होस्ट पर रहती है। केवल डिस्पोज़ेबल VM डिस्क खो जाती है।
- **एक वास्तविक Linux बॉक्स, आपका टूलचेन।** कोई भी OCI इमेज rootfs है: एक पूर्ण OS जिसमें ठीक वही टूल हैं जिनकी आपके प्रोजेक्ट को ज़रूरत है। कोई Docker daemon आवश्यक नहीं।
- **रहस्य आपकी मशीन पर रहते हैं।** आउटबाउंड ट्रैफ़िक अनुमति-सूचीबद्ध है और आपका ssh-agent फॉरवर्ड किया जाता है, इसलिए VM में कुंजियाँ दर्ज किए बिना `git push` काम करता है।
- **प्रति प्रोजेक्ट या टिकट एक सैंडबॉक्स।** एक साथ कई चलाएँ; मल्टी-रिपोजिटरी टिकटों को प्रति रिपॉजिटरी एक git worktree मिलता है जिसमें समन्वित PR होते हैं। निष्क्रिय VM स्वचालित रूप से मेमोरी मुक्त करते हैं और डिस्क पर सस्पेंड हो जाते हैं, इसलिए एक भूला हुआ सैंडबॉक्स (लगभग) कुछ भी खर्च नहीं करता।
## VM क्यों?
clawk स्वायत्त कोडिंग एजेंटों के लिए एक सामान्य-उद्देश्यीय स्थानीय वातावरण है। VM ही मुख्य बिंदु है: यह एक पूरी मशीन है जिसे एजेंट अपना सकता है, न कि एक प्रक्रिया जो आपके उपयोग में आने वाली मशीन पर नीतियों में लिपटी हो।
- **एक अलग कर्नेल।** गेस्ट अपना खुद का Linux कर्नेल चलाता है, इसलिए होस्ट फाइलसिस्टम deny नियमों के पीछे छिपा नहीं है; यह कभी माउंट ही नहीं हुआ था।
- **एक पारंपरिक Linux वातावरण।** मानक कर्नेल, मानक userland, `/dev/kvm`-आकार की अपेक्षाएँ, इसलिए टूल वैसे ही व्यवहार करते हैं जैसे उनके दस्तावेज़ कहते हैं, बिना किसी syscall-फ़िल्टर आश्चर्य के।
- **गेस्ट में रूट।** सिस्टम पैकेज इंस्टॉल करें, `/etc` संपादित करें, एक मॉड्यूल लोड करें, एक विशेषाधिकार प्राप्त पोर्ट बाइंड करें। यह एजेंट का बॉक्स है जिसे वह पुनः कॉन्फ़िगर कर सकता है।
- **एक डिस्पोज़ेबल जीवनचक्र।** तोड़ना सस्ता और फिर से बनाना त्वरित; एक बर्बाद VM केवल एक `clawk destroy && clawk` दूर है, आपकी रिपॉजिटरी और बातचीत होस्ट पर अछूती रहती हैं।
- **होस्ट से मजबूत अलगाव।** अलगाव प्रोसेस-सैंडबॉक्स नीति को बिल्कुल सही पाने के बजाय हाइपरवाइज़र सीमा पर निर्भर करता है।
यह संयोजन उन वर्कलोड को चलाता है जिन पर एक प्रतिबंधित प्रोसेस सैंडबॉक्स आपसे लड़ने लगता है:
- पैकेज और नेटिव निर्भरताएँ इंस्टॉल करना;
- बैकग्राउंड सेवाएँ चलाना (डेटाबेस, कतारें, dev सर्वर);
- अविश्वसनीय बिल्ड और टेस्ट को पूरी गति से निष्पादित करना;
- सिस्टम-स्तरीय Linux टूलिंग का उपयोग करना जो एक वास्तविक मशीन की अपेक्षा करता है;
- और, समर्थित हार्डवेयर पर KVM-सक्षम गेस्ट कर्नेल के साथ, कंटेनर और Kubernetes dev वर्कफ़्लो जैसे Docker या Kind जो सैंडबॉक्स के *अंदर* चलते हैं। यह ऑप्ट-इन और हार्डवेयर-गेटेड है; सटीक आवश्यकताओं के लिए [Images](https://github.com/clawkwork/clawk/blob/main/docs/images.md#guest-kernel-override) देखें।
इनमें से कोई भी *उत्पाद* नहीं है; clawk सामान्य रूप से स्थानीय एजेंट कार्य के लिए है। Docker और Kubernetes केवल "एक वास्तविक मशीन चाहिए, सैंडबॉक्स्ड प्रोसेस नहीं" का सबसे तीखा उदाहरण हैं।
## इंस्टॉल
Apple silicon पर macOS 14+ की आवश्यकता है। (Linux firecracker के माध्यम से समर्थित है और वर्तमान में प्रयोगात्मक है — **[docs/linux-quickstart.md](https://github.com/clawkwork/clawk/blob/main/docs/linux-quickstart.md)** से शुरू करें, जो सेटअप, वर्कफ़्लो और अंतराल को कवर करता है। यह README macOS-प्रथम है।)```sh
brew install clawkwork/tap/clawk
स्रोत से (योगदानकर्ता, या यदि आप Homebrew का उपयोग नहीं करते हैं), Go 1.26+ की आवश्यकता है:```sh git clone https://github.com/clawkwork/clawk && cd clawk make install
किसी भी तरह से कोई अतिरिक्त होस्ट टूलिंग नहीं है: कोई Docker नहीं, कोई qemu नहीं, कोई sudo नहीं।
हाइपरवाइज़र Apple का Virtualization.framework है, जो बाइनरी में लिंक किया गया है, और
रिलीज़ बाइनरी में इन-गेस्ट एजेंट पहले से बिल्ट होता है — इसलिए Go टूलचेन की
ज़रूरत केवल तब होती है जब आप स्रोत से बिल्ड करते हैं, और उस स्थिति में आपके पास वह होती है। पहली बार चलाने पर
किसी भी लापता चीज़ की जाँच होती है और उसे ठीक करने की पेशकश की जाती है।