कोड की क्वालिटी को बेहतर बनाना: Antigravity CLI और SDK की मदद से, एआई की सहायता से कोड की समीक्षा करना

1. परिचय

वाइब कोडिंग में, एआई एजेंट का इस्तेमाल करके नैचुरल लैंग्वेज प्रॉम्प्ट से कोड लिखा जाता है. इससे डेवलपर की भूमिका, लेखक से बदलकर ऑर्केस्ट्रेटर और समीक्षक की हो जाती है. हम सही कॉन्टेक्स्ट तैयार करने पर भरोसा करते हैं. साथ ही, हमें एआई एजेंट पर भरोसा है कि वे हमारे लिए सभी काम करेंगे. ये काम, स्पेसिफ़िकेशन दस्तावेज़ बनाने से लेकर यह पक्का करने तक हो सकते हैं कि कोड सभी ज़रूरी शर्तों को पूरा करता हो. जोखिम: तेज़ी से दोहराए जाने वाले साइकल में, फ़ंक्शनल कोड को सुरक्षा से जुड़ी पूरी समीक्षा किए बिना ही मंज़ूरी मिल जाती है. आधुनिक एजेंट अक्सर डिफ़ॉल्ट रूप से सुरक्षित कोड जनरेट करते हैं. हालांकि, "अक्सर" का मतलब "हमेशा" नहीं होता. साथ ही, मैन्युअल तरीके से समीक्षा करने पर, कई कमज़ोरियां नज़र नहीं आतीं.

इस कोडलैब में, इन समस्याओं को हल करने का तरीका बताया गया है. इसके लिए, Antigravity को समीक्षक के तौर पर इस्तेमाल करने के दो तरीके बताए गए हैं: पहला, सीएलआई की मदद से डेवलपमेंट के दौरान इंटरैक्टिव तरीके से (आप समीक्षा करें, ठीक करें, और फिर पीआर करें) और दूसरा, एसडीके की मदद से लगातार इंटिग्रेशन में अपने-आप (एजेंट हर पुल अनुरोध की समीक्षा करता है और नतीजों को टिप्पणी के तौर पर पोस्ट करता है)

आपको क्या-क्या जानने को मिलेगा

आपने Leads CRM ऐप्लिकेशन को वाइब-कोड किया है. एआई एजेंट ने आपके लिए पूरा स्टैक बनाया है: Express बैकएंड, SQLite डेटाबेस, React फ़्रंटएंड. यह काम करता है. इसके बाद, आपने एजेंट से दो नई सुविधाएं जोड़ने के लिए कहा: लीड खोजने की सुविधा और एडमिन के आंकड़ों के साथ एक साथ कई आइटम इंपोर्ट/एक्सपोर्ट करने की सुविधा. एजेंट ने दोनों काम जल्दी कर दिए. कोड चलता है, सुविधाएं काम करती हैं, और पीआर तैयार हैं.

हालांकि, समस्या यह है कि आपने यह कोड नहीं लिखा है. आपने इसे स्वीकार किया है. आपको कैसे पता चलेगा कि खोज एंडपॉइंट, एसक्यूएल इंजेक्शन के जोखिम से सुरक्षित है? आपको कैसे पता कि एडमिन के पास हार्डकोड किया गया पासवर्ड नहीं है? आपको ऐसा करने की ज़रूरत नहीं है. साथ ही, एआई से जनरेट किए गए कोड की हर लाइन को पढ़ने से, कोडिंग करने में लगने वाला समय बढ़ जाता है.

इस कोडलैब में, इस समस्या को हल करने के दो तरीके बताए गए हैं:

  • पहला मामला – इंटरैक्टिव समीक्षा: कमज़ोरियों वाली किसी फ़ीचर ब्रांच को देखें. इसके बाद, अंतर की समीक्षा करने, समस्याओं को ठीक करने, और साफ़-सुथरा पीआर बनाने के लिए, एजेंट की क्षमताओं के साथ बेहतर बनाए गए Antigravity CLI का इस्तेमाल करें.
  • दूसरा मामला – अपने-आप होने वाली समीक्षा: Antigravity SDK की मदद से, GitHub ऐक्शन सेट अप करें. यह ऐक्शन, पीआर की अपने-आप समीक्षा करता है. साथ ही, टिप्पणियों के तौर पर स्ट्रक्चर्ड फ़ाइंडिंग पोस्ट करता है. इसके अलावा, जब डेवलपर समीक्षा के बारे में फ़ॉलो-अप सवाल पूछते हैं, तो यह ऐक्शन उनके जवाब भी देता है.

8e05b6954f30ee3b.jpeg

आपको क्या सीखने को मिलेगा

  • वाइब कोडिंग से सुरक्षा से जुड़े जोखिम कैसे पैदा हो सकते हैं और अपने-आप होने वाली समीक्षा, मैन्युअल समीक्षा में छूट गई चीज़ों को क्यों पकड़ लेती है
  • Antigravity CLI को सुरक्षा और कोड रिव्यू से जुड़ी बेहतर सुविधाएं देने के लिए, कम्यूनिटी की ओर से बनाए गए एजेंट स्किल को इंस्टॉल और इस्तेमाल करने का तरीका
  • किसी फ़ीचर ब्रांच के अंतर की समीक्षा करने, जोखिम की समस्याओं को ठीक करने, और साफ़ तौर पर पीआर बनाने के लिए, इंटरैक्टिव तरीके से सीएलआई का इस्तेमाल करने का तरीका
  • डिक्लेरेटिव सुरक्षा नीतियों और लाइफ़साइकल हुक के साथ, सिर्फ़ पढ़ने के लिए कोड रिव्यू एजेंट बनाने के लिए, Antigravity SDK टूल का इस्तेमाल करने का तरीका
  • समीक्षा करने वाले एजेंट को GitHub ऐक्शन के तौर पर कैसे डिप्लॉय करें, ताकि वह पीआर की समीक्षा कर सके और पीआर की टिप्पणी के तौर पर नतीजे पोस्ट कर सके

ज़रूरी शर्तें

  • Google Cloud खाता
  • GitHub खाता
  • टर्मिनल, वर्शन कंट्रोल, और सीआई/सीडी के बारे में बुनियादी जानकारी

2. एनवायरमेंट सेटअप करना

इस चरण में, Leads CRM ऐप्लिकेशन की repo को फ़ोर्क किया जाता है. साथ ही, इसे Cloud Shell में क्लोन किया जाता है. इसके अलावा, Antigravity CLI को सेटअप किया जाता है और पुष्टि की जाती है.

रिपॉज़िटरी को फ़ोर्क करना

आपको रिपो की अपनी कॉपी की ज़रूरत होगी, क्योंकि आपको GitHub Actions की मदद से कमिट पुश करने होंगे और पीआर बनाने होंगे.

इस रिपॉज़िटरी पर जाएं

इसके बाद, फ़ोर्क करें पर क्लिक करें. फ़ोर्क बनाने वाले पेज पर, "सिर्फ़ main ब्रांच कॉपी करें" चेकबॉक्स से सही का निशान हटाएं. आपको अपनी फ़ोर्क की गई कॉपी में अन्य फ़ीचर ब्रांच (feature/lead-search और feature/bulk-operations) शामिल करनी होंगी.

3f996e391d2d5cf4.png7e4089174c2adb07.png

Cloud Shell खोलें

अपने ब्राउज़र में Cloud Shell खोलें. Cloud Shell में, पहले से कॉन्फ़िगर किया गया एनवायरमेंट मिलता है. इसमें इस कोडलैब के लिए ज़रूरी सभी टूल मौजूद होते हैं. जब कहा जाए, तब अनुमति दें पर क्लिक करें

इसके बाद, टर्मिनल खोलने के लिए "व्यू" -> "टर्मिनल" पर क्लिक करें.आपका इंटरफ़ेस कुछ ऐसा दिखना चाहिए

86307fac5da2f077.png

यह हमारा मुख्य इंटरफ़ेस होगा, जिसमें आईडीई सबसे ऊपर और टर्मिनल सबसे नीचे होगा

GitHub से पुष्टि करना

डिफ़ॉल्ट रूप से, Cloud Shell में GitHub के क्रेडेंशियल कॉन्फ़िगर नहीं होते हैं. हालांकि, इसमें gh CLI पहले से इंस्टॉल होता है. पुष्टि करने की सुविधा सेट अप करें, ताकि बाद में कमिट पुश किए जा सकें और पीआर बनाए जा सकें:

gh auth login

303f60fa2e73b305.png

Github.com चुनें

97e55d4bb4a167af.pngHTTPS चुनें ( या अगर आपको किसी अन्य तरीके के बारे में पता है, तो उसे चुनें )

561493764dbe64ef.png

इसके बाद, Y चुनें

ed05929c1bcb731.png

इसके बाद, Login with a web browser चुनें

**,**आपको एक बार इस्तेमाल किया जा सकने वाला कोड कॉपी करने के लिए कहा जाएगा. इसे ब्राउज़र में लॉगिन पेज खोलने पर डालें. https://github.com/login/device यूआरएल खोलने के लिए, टर्मिनल में मौजूद यूआरएल पर Ctrl + Click क्लिक करें. आपको वह खाता चुनने के लिए कहा जाएगा जिसमें आपको लॉग इन करना है. इसके बाद, आपको कोड डालना होगा.

915314584db6766d.png

इसके बाद, Cloud Shell कंसोल पेज पर वापस जाएं. आपको टर्मिनल का आउटपुट इस तरह दिखेगा

✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
! Authentication credentials saved in plain text
✓ Logged in as alphinside-joonix

इसका मतलब है कि आपने Cloud Shell पर, अपने GitHub खाते की पुष्टि करने की सुविधा सेट अप कर ली है.

फ़ोर्क की गई अपनी रिपॉज़िटरी को क्लोन करना

इसके बाद, फ़ोर्क की गई अपनी रिपॉज़िटरी को क्लोन करें. <YOUR_GITHUB_USERNAME> को अपने GitHub उपयोगकर्ता नाम से बदलें:

git clone https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo.git
cloudshell workspace leads-crm-app-demo && cd leads-crm-app-demo

सुविधा वाली ब्रांच की पुष्टि करना

इसके बाद, पुष्टि करें कि पहले से मौजूद कमज़ोरियों वाली दोनों फ़ीचर ब्रांच, रिमोट में उपलब्ध होनी चाहिए:

git branch -a | grep feature/

आपको यह आउटपुट दिखेगा

remotes/origin/feature/bulk-operations
remotes/origin/feature/bulk-operations-solution
remotes/origin/feature/email-composer
remotes/origin/feature/lead-search

Antigravity CLI की पुष्टि करना

इसके बाद, आइए पुष्टि करें कि Cloud Shell में Antigravity CLI पहले से इंस्टॉल है. पुष्टि करें कि यह सुविधा उपलब्ध है या नहीं:

agy --version

आपको इंस्टॉल किए गए Antigravity CLI का वर्शन दिखेगा. उदाहरण के लिए, 1.0.13

अगर आपने अब तक Antigravity CLI की पुष्टि नहीं की है, तो पुष्टि करने की प्रोसेस के बारे में ज़्यादा जानने के लिए, इस कोडलैब पर जाएं.

इस समय आपके पास ये चीज़ें होनी चाहिए:

  • फ़ोर्क की गई रिपॉज़िटरी का क्लोन बनाया गया हो
  • दोनों फ़ीचर ब्रांच दिख रही हैं
  • agy निर्देश उपलब्ध है और इसकी पुष्टि हो चुकी है

3. समस्या – वाइब्रेशन कोड वाली सुविधाओं में कमज़ोरियां छिपी हैं

यहां एक उदाहरण दिया गया है: टीम के किसी सदस्य ने Leads CRM ऐप्लिकेशन में दो सुविधाएं जोड़ने के लिए, एआई एजेंट का इस्तेमाल किया. ये सुविधाएं हैं: लीड खोजने की सुविधा और एक साथ कई लीड इंपोर्ट/एक्सपोर्ट करने की सुविधा. दोनों सुविधाएं काम करती हैं. दोनों को सुरक्षा जांच के बिना ही तेज़ी से शिप कर दिया गया. मर्ज करने से पहले, आपको दोनों ब्रांच की समीक्षा करनी होगी. एक की समीक्षा, सीएलआई के साथ इंटरैक्टिव तरीके से की जाएगी. वहीं, दूसरी की समीक्षा GitHub ऐक्शन की मदद से अपने-आप की जाएगी.

पहली फ़ीचर ब्रांच की जांच करना

feature/lead-search पर अंतर देखें:

git diff main...origin/feature/lead-search

इस ब्रांच में, खोज के लिए एंडपॉइंट जोड़ा गया है. डिफ़ को स्कैन करें. आपको SQL क्वेरी में स्ट्रिंग कॉनकैटेनेशन, इनपुट की पुष्टि न होना, डीबग लॉगिंग से क्वेरी की जानकारी लीक होना, और क्लाइंट को दिखाए गए रॉ गड़बड़ी के मैसेज जैसी समस्याएं दिखनी चाहिए.

+  app.get("/api/leads/search", (req, res) => {
+    const query = req.query.q as string;
+
+    if (!query) {
+      return res.status(400).json({ error: "Search query is required" });
+    }
...

दूसरी फ़ीचर ब्रांच की जांच करना

git diff main...origin/feature/bulk-operations

इस ब्रांच में, बल्क इंपोर्ट/एक्सपोर्ट एंडपॉइंट और एडमिन के लिए आंकड़ों वाला डैशबोर्ड जोड़ा गया है. यहां मौजूद जोखिम की संभावनाओं में, एडमिन के क्रेडेंशियल को हार्ड कोड करना, बिना पुष्टि किए एडमिन के एंडपॉइंट, एक साथ कई आइटम इंपोर्ट करने पर इनपुट की पुष्टि न करना, और एक्सपोर्ट किए गए फ़ाइल नाम को हैंडल करने में पाथ ट्रैवर्सल का जोखिम शामिल है.

...
+  const ADMIN_PASSWORD = "admin123";
+
+  app.post("/api/admin/import", (req, res) => {
+    const { password, leads } = req.body;
+
+    if (password !== ADMIN_PASSWORD) {
+      return res.status(401).json({ error: "Invalid admin password" });
+    }
...

इन दोनों ब्रांच में, काम की सुविधाएं जोड़ी गई हैं. दोनों में सुरक्षा से जुड़ी समस्याएं हैं. सवाल यह है कि इन्हें कैसे पकड़ा जाए — सीएलआई की मदद से मैन्युअल तरीके से (पहला तरीका) या GitHub Action की मदद से अपने-आप (दूसरा तरीका).

4. पहला उदाहरण : Antigravity CLI की मदद से इंटरैक्टिव समीक्षा करना

इंटरैक्टिव सीएलआई की समीक्षा, वाइब-कोडिंग सेशन के ठीक बाद सबसे ज़्यादा फ़ायदेमंद होती है. इससे, अभी-अभी लिखे गए कोड की समीक्षा की जा सकती है. साथ ही, टीम के सदस्यों के पुल अनुरोध की समीक्षा की जा सकती है. अगर हम वाइब-कोडिंग की बात करें, तो एआई एजेंट ने आपकी सुविधा के लिए कोड को तेज़ी से जनरेट किया. हालांकि, ऐसा हो सकता है कि आपको उसकी हर लाइन पूरी तरह से समझ न आए. साथ ही, एजेंट को फ़ंक्शन के लिए ऑप्टिमाइज़ किया जा सकता है, लेकिन ज़रूरी नहीं कि वह सुरक्षा के लिए भी ऑप्टिमाइज़ हो. यह इस बात पर निर्भर करता है कि सुविधा डेवलप करते समय, कॉन्टेक्स्ट कॉन्फ़िगरेशन कैसा है.

इस उदाहरण में, हमारे पास ऐसे कोड हैं जिनमें सुरक्षा से जुड़ी कमियां हैं. हम कोड की समीक्षा करने के लिए, Antigravity CLI का इस्तेमाल करेंगे, ताकि कोड की इंटरैक्टिव तरीके से समीक्षा की जा सके. एजेंट-समीक्षा-एजेंट पैटर्न, उन कमियों का पता लगाता है जो डेवलपर की भूमिका में बदलाव होने पर नज़र नहीं आती हैं. जैसे, कोड लिखने से लेकर एआई से जनरेट किए गए कोड को मंज़ूरी देने तक. यह तब भी लागू होता है, जब आपको CI से पहले, मैन्युअल तरीके से लिखे गए अपने कोड या टीम के किसी सदस्य की ब्रांच की समीक्षा करनी हो. बातचीत को कंट्रोल करना: एजेंट से किसी फ़ाइल पर फ़ोकस करने, किसी समस्या के बारे में ज़्यादा जानकारी पाने या तुरंत सुधार लागू करने के लिए कहें.

एजेंट की क्षमताओं के बिना भी, Antigravity CLI कोड की समीक्षा कर सकता है. हालांकि, यह अपनी सामान्य ट्रेनिंग की जानकारी पर निर्भर करता है. इसलिए, हो सकता है कि यह डोमेन के हिसाब से पैटर्न का पता न लगा पाए या अलग-अलग सेशन में समीक्षा के मानदंड अलग-अलग लागू करे. एजेंट की स्किल से, एजेंट को स्ट्रक्चर्ड प्लेबुक मिलती है: क्वालिटी के लिए पांच-ऐक्सिस की समीक्षा और प्राथमिकता तय करने के लिए गंभीरता का लेबल. इससे समीक्षा को दोहराया जा सकता है और यह ज़्यादा सटीक होती है. इससे कोई फ़र्क़ नहीं पड़ता कि आपने प्रॉम्प्ट में किस तरह के शब्दों का इस्तेमाल किया है.

इस चरण में, एजेंट की क्षमताओं के साथ Antigravity CLI का इस्तेमाल किया जाता है. इससे feature/lead-search ब्रांच की समीक्षा की जाती है, कमियों को ठीक किया जाता है, और एक साफ़ पीआर बनाया जाता है.

सुविधा वाली ब्रांच देखें

सबसे पहले, अपनी ब्रांच को Case 1 ब्रांच में बदलते हैं:

git checkout feature/lead-search

इसके बाद, समीक्षा करने के लिए एजेंट की स्किल का इस्तेमाल करके, Antigravity CLI को अपग्रेड करें

एजेंट की स्किल क्या होती हैं

स्किल, डिक्लेरेटिव मार्कडाउन फ़ाइलें होती हैं. इनसे एजेंट को किसी विषय के बारे में खास जानकारी मिलती है. इंस्टॉल होने के बाद, ये स्लैश कमांड (जैसे, /code-review-and-quality) बन जाती हैं. इन्हें इस तरह समझें कि ये सामान्य मकसद वाले एजेंट को, सीनियर इंजीनियर की सुरक्षा से जुड़ी प्लेबुक उपलब्ध कराती हैं.

इन स्किल को अलग-अलग एजेंट (Antigravity, Claude Code, Cursor वगैरह) के साथ इस्तेमाल किया जा सकता है. साथ ही, इन्हें Git के ज़रिए शेयर किया जा सकता है. Antigravity CLI के लिए, वर्कस्पेस (प्रोजेक्ट/लोकल) की सेटिंग, प्रोजेक्ट रूट में मौजूद � at the project root में सेव होती हैं..agents/skills/ वहीं, ग्लोबल स्किल ~/.gemini/config/skills/ में मौजूद होती हैं. ज़्यादा जानकारी के लिए, यह दस्तावेज़ पढ़ें

एजेंट की स्किल दिखाने के लिए, यह कोडलैब addyosmani/agent-skills से कोड रिव्यू स्किल का इस्तेमाल करेगा:

  • code-review-and-quality – पांच सिद्धांतों के आधार पर समीक्षा की जाती है. ये सिद्धांत हैं: सही होना, पढ़ने में आसान होना, आर्किटेक्चर, सुरक्षा, और परफ़ॉर्मेंस. साथ ही, गड़बड़ी के लेवल के हिसाब से लेबलिंग की जाती है.

कोड रिव्यू एजेंट स्किल इंस्टॉल करना

नीचे दी गई कमांड का इस्तेमाल करके, स्किल को मौजूदा वर्किंग डायरेक्ट्री में डिफ़ॉल्ट रूप से .agents/skills/ में इंस्टॉल किया जाएगा. यह वर्कस्पेस-लेवल का इंस्टॉलेशन होता है. इसका मतलब है कि ये नियम, रिपॉज़िटरी का हिस्सा बन जाते हैं और आपके कोड के साथ कमिट किए जा सकते हैं. इसलिए, प्रोजेक्ट पर काम करने वाले हर डेवलपर (और सीआई पाइपलाइन) को समीक्षा करने की एक जैसी सुविधाएं अपने-आप मिल जाती हैं.

npx skills add addyosmani/agent-skills --skill code-review-and-quality -y

यहां उस स्किल के बारे में ज़्यादा जानकारी दी गई है जिसकी जांच .agents/skills/code-review-and-quality/SKILL.md फ़ाइल में की जा सकती है:

name: code-review-and-quality
description: Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch.

मुख्य सुविधाएं:

  • पांच पहलुओं के आधार पर समीक्षाएं: सटीक होना, पढ़ने में आसान होना, आर्किटेक्चर, सुरक्षा, और परफ़ॉर्मेंस
  • समस्याओं को गंभीरता के हिसाब से लेबल करता है, ताकि आप सबसे पहले गंभीर समस्याओं को ठीक कर सकें
  • अनुमति देने का स्टैंडर्ड लागू करता है: "अगर कोड की क्वालिटी बेहतर होती है, तो अनुमति दें. भले ही, कोड पूरी तरह से सही न हो"

अब हम कुछ काम करने के लिए तैयार हैं. आइए, Antigravity CLI में जाकर स्किल की पुष्टि करें

AGY लॉन्च करना और कौशल की पुष्टि करना

Antigravity CLI को चलाएं

agy --dangerously-skip-permissions

इसके बाद, यह कमांड चलाएं

/skills

आपको Workspace कौशल में, दोनों कौशल इस तरह दिखने चाहिए

490090ce9f955d1c.png

सुविधा के अंतर की कोड रिव्यू करना

सुरक्षा से जुड़ी स्किल को चालू करें और उससे अपनी शाखा की समीक्षा करने के लिए कहें. यह प्रॉम्प्ट टाइप करें:

Review the git diff between main and my current branch. Find any issues based on the agent skills that are appropriate for this. Write the findings and plan to fix them to code_review.md in the current working directory. Do not apply fixes yet.

एजेंट, काम की code-review-and-quality स्किल का पता लगाता है और उसे अपने-आप चालू कर देता है. यह अंतर को पढ़ता है, जोखिम से जुड़ी आशंकाओं की पहचान करता है, और code_review.md को ठीक करने के प्लान के साथ नतीजे लिखता है.

86c054f06c122df8.png

स्कैनिंग पूरी होने के बाद, आपको अपनी वर्किंग डायरेक्ट्री में code_review.md फ़ाइल दिखेगी. साथ ही, इसे एडिटर में देखा जा सकता है

bcd382689b0a95fa.png2b6892e261c046b2.png

हर समस्या और उसे ठीक करने के सुझाए गए तरीके की समीक्षा करें. जब आप प्लान से संतुष्ट हो जाएं, तो एजेंट से इसे लागू करने के लिए कहें:

Apply the proposed fixes from code_review.md

एजेंट, प्लान को पढ़ता है और प्लान में बताए गए हर सुधार को सोर्स फ़ाइलों पर लागू करता है.

cc1e5bb5ad9533c7.png

अब, अगर आपको यह देखना है कि समस्या ठीक होने के बाद ऐप्लिकेशन सही तरीके से काम कर रहा है या नहीं, तो डिपेंडेंसी इंस्टॉल करें और उसे रन करें

npm install
npm run dev

ऐप्लिकेशन ठीक से चलना चाहिए. अगर ऐसा नहीं होता है, तो Antigravity CLI से इसे ठीक करने के लिए कहा जा सकता है

कमिट करना और पीआर बनाना

अब अगर आपको बदलावों को अपनी रिपॉज़िटरी में पुश करना है, तो ऐसा किया जा सकता है. अगले केस पर जाने से पहले, आइए पहले बदलावों को मौजूदा ब्रांच में सेव करें.

अगर आपने अब तक Git आइडेंटिटी कॉन्फ़िगर नहीं की है, तो पहले हमें इसे कॉन्फ़िगर करना होगा. इसके लिए, अपने नाम और ईमेल पते का इस्तेमाल करें:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

इसके बाद, बदलावों को सेव करें

git add .
git commit -m "fix: address security vulnerabilities in lead search feature"

अब आपने इंटरैक्टिव समीक्षक के तौर पर, Antigravity CLI का इस्तेमाल कर लिया है. इन स्किल की मदद से, इसे स्ट्रक्चर्ड तरीके से काम करने का तरीका मिला. जैसे, पांच ऐक्सिस के हिसाब से कोड रिव्यू करना. यह सुविधा तब काम करती है, जब डेवलपर के तौर पर आपको एआई से जनरेट किए गए कोड, अपने कोड या टीम के किसी सदस्य के कोड की समीक्षा करनी हो. अगले सेक्शन में, हम इस पूरे फ़्लो को ऑटोमेट करेंगे, ताकि इसे आपके कोड रिपॉज़िटरी में एक स्केलेबल ऑटोमेटेड प्रोसेस के तौर पर इस्तेमाल किया जा सके. इसके लिए, हम GitHub का उदाहरण देंगे

5. दूसरा मामला : Antigravity SDK की मदद से अपने-आप होने वाली समीक्षा - पहला हिस्सा ( एजेंट बनाना )

इस चरण में, Antigravity SDK का इस्तेमाल करके, अपने-आप होने वाली समीक्षा का एजेंट तैयार किया जाता है. इसे GitHub ऐक्शन के तौर पर डिप्लॉय किया जाता है. साथ ही, इसे दूसरी फ़ीचर ब्रांच के ख़िलाफ़ टेस्ट किया जाता है. एजेंट, अनुरोध पर पीआर की समीक्षा करता है और पीआर की टिप्पणियों के तौर पर नतीजे पोस्ट करता है.

अपने-आप होने वाली समीक्षा की सुविधा क्यों इस्तेमाल की जाती है

इंटरैक्टिव सीएलआई की समीक्षा (पहला मामला) तब काम करती है, जब डेवलपर सक्रिय रूप से समीक्षा करता है. टीमों को एक ऐसी समीक्षा की ज़रूरत होती है जो हर पीआर पर अपने-आप हो. इससे किसी भी योगदानकर्ता, टूल या समय की समस्याओं का पता चल सके. Antigravity SDK (google-antigravity), Python लाइब्रेरी के तौर पर, CLI की तरह ही एजेंट रनटाइम उपलब्ध कराता है. नीतियों और हुक को कोड में कॉन्फ़िगर किया जाता है.

GitHub Actions, GitHub का बिल्ट-इन कंटीन्यूअस इंटिग्रेशन/कंटीन्यूअस डेवलपमेंट (सीआई/सीडी) प्लैटफ़ॉर्म है. यह वर्कफ़्लो चलाता है. वर्कफ़्लो, YAML में तय की गई ऑटोमेटेड स्क्रिप्ट होती हैं. ये स्क्रिप्ट, रिपॉज़िटरी इवेंट के जवाब में काम करती हैं. जैसे, पीआर खोलना, कमिट पुश करना या टिप्पणी पोस्ट करना. वर्कफ़्लो, GitHub पर होस्ट की गई वर्चुअल मशीन पर चलते हैं. साथ ही, इनके पास रिपॉज़िटरी कोड का ऐक्सेस होता है. इस मामले में, हर बार पीआर बनाने पर, GitHub Action का इस्तेमाल करके सुरक्षा की समीक्षा करने वाले एजेंट को चलाया जाता है.

अपने-आप होने वाली समीक्षा की प्रोसेस इस तरह काम करती है:

393f76210e797217.png

Antigravity SDK ( google-antigravity) Python लाइब्रेरी के तौर पर, CLI के जैसा ही एजेंट रनटाइम उपलब्ध कराता है. आपको एक Python स्क्रिप्ट लिखनी होगी जो नीतियों और हुक के साथ एजेंट को कॉन्फ़िगर करती है, इसे GitHub Action में रन करें, और नतीजों को पीआर टिप्पणी के तौर पर पोस्ट करें.

Gemini API पासकोड पाना

शुरू करने से पहले, हमें Gemini API के पासकोड की ज़रूरत होगी, ताकि Antigravity SDK इसका इस्तेमाल कर सके. Google AI Studio API पासकोड पर जाएं और एपीआई पासकोड बनाएं. इसके बाद, जब भी ज़रूरत हो, एपीआई पासकोड को कॉपी करें

57b306d2292c60bf.png

इस कुंजी का इस्तेमाल, समीक्षा एजेंट को स्थानीय तौर पर चलाने के लिए किया जाएगा. साथ ही, बाद में इसे GitHub Actions के सीक्रेट के तौर पर इस्तेमाल किया जाएगा

पहला हिस्सा: समीक्षा करने वाला एजेंट बनाना

अब दूसरे मामले के लिए, अपनी मौजूदा वर्किंग डायरेक्ट्री को feature/bulk-operations ब्रांच पर स्विच करें:

git checkout feature/bulk-operations

यह सुविधा, इस उदाहरण की दूसरी सुविधा ब्रांच है. यह सीआरएम ऐप्लिकेशन में एक साथ कई आइटम इंपोर्ट/एक्सपोर्ट करने वाले एंडपॉइंट और एडमिन के लिए आंकड़ों वाला डैशबोर्ड जोड़ती है.

Python प्रोजेक्ट सेट अप करना

फ़िलहाल, Antigravity SDK सिर्फ़ Python में उपलब्ध है. इसलिए, इसे डेवलप करने के लिए हमें Python एनवायरमेंट की ज़रूरत होगी. हम अपने Python प्रोजेक्ट मैनेजर के लिए uv का इस्तेमाल करेंगे. uv एक तेज़ Python पैकेज और प्रोजेक्ट मैनेजर है. इसे Rust में लिखा गया है ( docs). इस कोडलैब में, इसे तेज़ी से और आसानी से इस्तेमाल करने के लिए इस्तेमाल किया गया है. अगर इस ट्यूटोरियल के लिए cloudshell का इस्तेमाल किया जाता है, तो यह इंस्टेंस में पहले से इंस्टॉल होता है. अगर आपको इसे अपने लोकल के लिए इंस्टॉल करना है, तो यह ट्यूटोरियल देखें

uv का इस्तेमाल करके, समीक्षा करने वाले एजेंट के लिए Python प्रोजेक्ट शुरू करें:

uv init code_review_agent
uv add --project code_review_agent google-antigravity==0.1.7

इससे एक नई डायरेक्ट्री code_review_agent बनेगी जिसमें हमारे ज़रूरी कोड रिव्यू एजेंट फ़ाइलें होंगी.

समीक्षा करने की सुविधा इंस्टॉल करना

समीक्षा करने वाले एजेंट को, पहले मामले में इस्तेमाल की गई सुरक्षा और कोड रिव्यू करने की वही क्षमताएं चाहिए. इन्हें code_review_agent/skills/ में इंस्टॉल करें, ताकि एसडीके एजेंट इन्हें रनटाइम पर लोड कर सके:

npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
cp -r .agents/skills code_review_agent/skills

समीक्षा करने वाला एजेंट बनाना

अब, code_review_agent/review_agent.py बनाएं . यह कमांड चलाएं

cloudshell edit code_review_agent/review_agent.py

इसके बाद, इस कॉन्टेंट को फ़ाइल में कॉपी करें

#!/usr/bin/env python3
import asyncio
import json
import os
import sys

import pydantic

from google.antigravity import Agent, LocalAgentConfig, CapabilitiesConfig
from google.antigravity.hooks import hooks, policy
from google.antigravity import types


class Finding(pydantic.BaseModel):
    file: str
    line: int
    severity: str
    category: str
    description: str
    proposed_fix: str = ""


class ReviewResult(pydantic.BaseModel):
    findings: list[Finding]


SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
OUTPUT_FILE = "code_review.md"
SKILLS_PATHS = [
    os.path.join(SCRIPT_DIR, "skills", "code-review-and-quality"),
]

review_policies = [
    policy.deny_all(),
    policy.allow("view_file"),
    policy.allow("list_directory"),
    policy.allow("search_directory"),
    policy.allow("find_file"),
    policy.allow("run_command"),
    policy.allow("finish"),
]

@hooks.post_tool_call
async def log_tool_results(data: types.ToolResult):
    result_str = str(data.result) if data.result else ""
    preview = result_str[:200] + "..." if len(result_str) > 200 else result_str
    print(f"[audit] tool={data.name} result_len={len(result_str)} error={data.error} preview={preview}", flush=True)

@hooks.pre_tool_call_decide
async def enforce_safe_tools(data: types.ToolCall) -> types.HookResult:
    print(f"[audit] calling tool={data.name} args_keys={list(data.args.keys())}", flush=True)

    if data.name == "run_command":
        cmd = str(data.args.get("CommandLine", ""))
        if not cmd.startswith("git "):
            return types.HookResult(
                allow=False,
                message=f"Only git commands are allowed. Blocked: {cmd}"
            )
    return types.HookResult(allow=True)

async def review_code(target_dir: str) -> dict:
    prompt = f"""Run `git diff main...HEAD -- ':!.github' ':!code_review_agent'` in {target_dir} to get the changes on this branch.
Review ONLY the changed code for security vulnerabilities and code quality issues.
"""

    config_kwargs = dict(
        system_instructions=(
            "You are a code review agent. "
            "You review code diffs for vulnerabilities and quality issues using the loaded skills. "
            "You can run git commands to inspect the diff. "
            "You NEVER modify files."
        ),
        response_schema=ReviewResult,
        skills_paths=SKILLS_PATHS,
        policies=review_policies,
        hooks=[log_tool_results, enforce_safe_tools],
    )

    if os.environ.get("GEMINI_API_KEY"):
        config_kwargs["api_key"] = os.environ["GEMINI_API_KEY"]
    else:
        config_kwargs["vertex"] = True
        config_kwargs["project"] = os.environ.get("GOOGLE_CLOUD_PROJECT")
        config_kwargs["location"] = os.environ.get("GOOGLE_CLOUD_LOCATION", "global")

    config = LocalAgentConfig(**config_kwargs)

    async with Agent(config) as agent:
        response = await agent.chat(prompt)

        last_step = -1
        final_text_chunks = []
        async for chunk in response.chunks:
            if isinstance(chunk, types.ToolCall):
                final_text_chunks.clear()
            if hasattr(chunk, "text") and hasattr(chunk, "step_index"):
                if chunk.step_index != last_step:
                    final_text_chunks.clear()
                    last_step = chunk.step_index
                final_text_chunks.append(chunk.text)

        final_text = "".join(final_text_chunks)
        if final_text:
            print(final_text)

        data = await response.structured_output()

        if data and "findings" in data:
            return {"findings": data["findings"]}

        try:
            parsed = json.loads(final_text)
            if isinstance(parsed, list):
                return {"findings": parsed}
            if isinstance(parsed, dict) and "findings" in parsed:
                return {"findings": parsed["findings"]}
        except json.JSONDecodeError:
            pass

    return {"findings": final_text}


SEVERITY_EMOJI = {"critical": "🔴", "high": "🟠", "medium": "🟡", "low": "🔵"}

def format_markdown(result: dict) -> str:
    findings = result.get("findings", [])
    if isinstance(findings, str):
        return f"## AI Security Review\n\n{findings}\n"
    if not findings:
        return "## AI Security Review\n\nNo security issues found.\n"
    lines = ["## AI Security Review\n"]
    for f in findings:
        emoji = SEVERITY_EMOJI.get(f.get("severity", "").lower(), "⚪")
        lines.append(f"### {emoji} [{f.get('severity', 'unknown').upper()}] {f.get('category', '')}\n")
        lines.append(f"**{f.get('file', '')}:{f.get('line', '')}**\n")
        lines.append(f"{f.get('description', '')}\n")
        proposed_fix = f.get('proposed_fix', '')
        if proposed_fix:
            lines.append(f"**Proposed fix:** {proposed_fix}\n")
    lines.append("---\n*Powered by Antigravity SDK*")
    return "\n".join(lines)


if __name__ == "__main__":
    target = sys.argv[1] if len(sys.argv) > 1 else "."
    result = asyncio.run(review_code(target))
    markdown = format_markdown(result)
    with open(OUTPUT_FILE, "w") as f:
        f.write(markdown)
    print(f"Review written to {OUTPUT_FILE}")
    print(json.dumps(result, indent=2))

इस एजेंट के डिज़ाइन से जुड़े मुख्य फ़ैसलों के बारे में जानकारी दो:

  • डिफ़ॉल्ट रूप से अनुमति न देने वाली नीतियां: policy.deny_all() सभी कार्रवाइयों को ब्लॉक करता है. इसके बाद, सिर्फ़ फ़ाइल पढ़ने वाले टूल और run_command (git के लिए) को अनुमति देता है.
  • दो लेयर पर लागू करना: नीतियां, फ़्रेमवर्क लेवल पर पाबंदी लगाती हैं. साथ ही, enforce_safe_tools हुक दूसरी लेयर उपलब्ध कराता है. इससे run_command के ज़रिए सिर्फ़ git कमांड की अनुमति मिलती है.
  • Git diff स्कोपिंग: एजेंट, सिर्फ़ बदले गए कोड की समीक्षा करने के लिए git diff main...HEAD चलाता है. यह पूरे कोडबेस की समीक्षा नहीं करता.
  • फ़ॉलबैक के साथ स्ट्रक्चर्ड आउटपुट: response_schema=ReviewResult, एसडीके के फ़िनिश टूल के ज़रिए JSON स्ट्रक्चर लागू करता है. अगर पार्सिंग नहीं हो पाती है, तो फ़ॉलबैक चेन, text() को JSON के तौर पर पार्स करने की कोशिश करती है. इसके बाद, यह सामान्य टेक्स्ट दिखाता है.
  • पुष्टि करने की फ़ॉलबैक सुविधा: अगर GEMINI_API_KEY उपलब्ध है, तो इसका इस्तेमाल किया जाता है. अगर यह उपलब्ध नहीं है, तो ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल के ज़रिए Vertex AI पर वापस आ जाता है.
  • फ़ाइल आउटपुट: फ़ॉर्मैट की गई मार्कडाउन फ़ाइल में नतीजे लिखता है. GitHub ऐक्शन इस फ़ाइल को पढ़ता है और बाद में इसे पीआर टिप्पणी के तौर पर पोस्ट करता हैcode_review.md

समीक्षा करने वाले एजेंट को टेस्ट करना

प्रोजेक्ट के रूट से टेस्ट करें. SDK टूल, एनवायरमेंट से GEMINI_API_KEY को पढ़ेगा. इसलिए, आइए कुंजी को एनवायरमेंट में डालें

export GEMINI_API_KEY=YOUR_API_KEY

इसके बाद, इसे स्थानीय तौर पर चलाने के लिए यह कमांड चलाएं

uv run --project code_review_agent code_review_agent/review_agent.py .

इसे चलाने पर, कंसोल का कुछ आउटपुट दिखेगा. इससे पता चलेगा कि फ़िलहाल कौनसे टूल इस्तेमाल किए जा रहे हैं. साथ ही, आपको यह भी दिखेगा कि यह security-and-hardening और code-review-and-quality एजेंट की स्किल को ऐक्सेस कर रहा है

[audit] calling tool=view_file args_keys=['AbsolutePath', 'IsSkillFile']
[audit] tool=view_file result_len=47 error=None preview=Read security and hardening skill documentation
[audit] calling tool=view_file args_keys=['AbsolutePath', 'IsSkillFile']
[audit] tool=view_file result_len=48 error=None preview=Read code review and quality skill documentation
[audit] calling tool=run_command args_keys=['CommandLine', 'Cwd', 'WaitMsBeforeAsync']
...

एजेंट, git diff main...HEAD को चलाता है. इसके बाद, सिर्फ़ बदले गए कोड की समीक्षा करता है. इसके बाद, फ़ॉर्मैट की गई समस्याओं को code_review.md में लिखता है और स्ट्रक्चर्ड JSON को कंसोल पर प्रिंट करता है. नीचे दिए गए तरीके से, एडिटर में लिखे गए code_review.md की जांच की जा सकती है

e8f97c737aaf934b.png

यह सुविधा स्थानीय तौर पर पहले से ही काम कर रही है. अब हम अगले हिस्से पर चलते हैं. Github ऐक्शन कॉन्फ़िगरेशन बनाना

6. दूसरा मामला : Antigravity SDK की मदद से अपने-आप होने वाली समीक्षा - दूसरा हिस्सा ( Github Actions को कॉन्फ़िगर करना)

शुरू करने से पहले, अगर पहले से कोई code_review.md फ़ाइल मौजूद है, तो उसे मिटा दें.

rm -f code_review.md

अब हमें Github Action की YAML कॉन्फ़िगरेशन फ़ाइल बनानी होगी.

mkdir -p .github/workflows
cloudshell edit .github/workflows/code_review.yml

इसके बाद, फ़ाइल में यह कॉन्टेंट जोड़ें

name: AI Code Security and Quality Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write

    container:
      image: ghcr.io/astral-sh/uv:python3.12-bookworm

    steps:
      - name: Install git
        run: apt-get update && apt-get install -y git
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Run security review
        env:
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        run: |
          git config --global --add safe.directory $GITHUB_WORKSPACE
          uv run --project code_review_agent code_review_agent/review_agent.py .
      - name: Post findings as PR comment
        if: always()
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const body = fs.readFileSync('code_review.md', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.payload.pull_request.number,
              body: body
            });

पीआर खोलने या अपडेट करने पर, वर्कफ़्लो अपने-आप ट्रिगर हो जाएगा. यह पीआर ब्रांच को पूरी गिट हिस्ट्री के साथ चेक आउट करता है. इसकी ज़रूरत git diff main...HEAD के लिए होती है. यह समीक्षा एजेंट को चलाता है, जो code_review.md में नतीजे लिखता है. साथ ही, फ़ाइल के कॉन्टेंट को पीआर टिप्पणी के तौर पर पोस्ट करता है.

अब सभी बदलावों को सेव करें और उन्हें Github रिमोट पर पुश करें. अब हम इस इंटिग्रेशन की जांच करने के लिए तैयार हैं

git add .
git commit -m "Add AI code security-quality review agent and GitHub Action"
git push origin feature/bulk-operations

7. दूसरा मामला : Antigravity SDK की मदद से अपने-आप होने वाली समीक्षा - तीसरा हिस्सा (अपने-आप होने वाली कोड की समीक्षा की टेस्टिंग)

अब हम आपकी फ़ोर्क की गई रिपॉज़िटरी https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo वेब पेज पर जाते हैं और Settings पर क्लिक करते हैं

15e07c4d8c425e33.png

इसके बाद, बाएं पैनल में जाकर Secrets and variables ढूंढें. इसके बाद, Actions पर क्लिक करके उसे चुनें

67d1b299fcd242b4.png

इसके बाद, GEMINI_API_KEY सीक्रेट को कॉन्फ़िगर करने के लिए New repository secret पर क्लिक करें

b8c270070e1613c9.png

इसके बाद, Pull Request चुनें और अपनी रेपो की feature/bulk_operations ब्रांच से main ब्रांच में नया पुल अनुरोध बनाएं

e37f57b56a143d9c.pngda9b78d57c0aec4e.png

पुल का अनुरोध बनाने के बाद, यह Github Actions को चलाएगा. इसकी जांच Checks मेन्यू में या Merge pull request बटन के पास की जा सकती है

b9b811c4430f7702.png

कार्रवाइयों की जानकारी देखने के लिए, चालू कार्रवाइयों पर क्लिक करें. कार्रवाइयां पूरी होने पर, समीक्षा के नतीजे पुल अनुरोध की टिप्पणी के तौर पर पोस्ट किए जाएंगे. जैसे, यहां दिखाया गया है

544d4d820019e58.png

8. आखिर में खास जानकारी

बधाई हो!

आपने सुरक्षा से जुड़ी जोखिम की संभावनाओं का पता लगाने के लिए, वाइब कोडिंग की सुविधाओं के लिए दो पूरे कोड रिव्यू वर्कफ़्लो बनाए हैं:

  • पहला मामला (इंटरैक्टिव): Antigravity CLI ने एजेंट की क्षमताओं के साथ, फ़ीचर ब्रांच के अंतर की समीक्षा की. साथ ही, एसक्यूएल इंजेक्शन और अन्य गड़बड़ियों का पता लगाया. इसके बाद, ओडब्ल्यूएएसपी पैटर्न के मुताबिक उन्हें ठीक किया और एक साफ़ पीआर तैयार किया.
  • दूसरा मामला (ऑटोमेटेड): Antigravity SDK ने GitHub Action को बेहतर बनाया. यह हर पीआर की अपने-आप समीक्षा करता है और पीआर की टिप्पणियों के तौर पर, सुरक्षा से जुड़ी स्ट्रक्चर्ड फ़ाइंडिंग पोस्ट करता है.

आपने क्या सीखा

  • वाइब कोडिंग से सुरक्षा से जुड़े जोखिम कैसे पैदा होते हैं और अपने-आप होने वाली समीक्षा, मैन्युअल समीक्षा में छूट गई चीज़ों को कैसे पकड़ती है
  • Antigravity CLI को सुरक्षा से जुड़ी विशेषज्ञता देने के लिए, एजेंट स्किल इंस्टॉल करने और उनका इस्तेमाल करने का तरीका
  • किसी फ़ीचर ब्रांच के अंतर की इंटरैक्टिव तरीके से समीक्षा करने, समस्याओं को ठीक करने, और साफ़-सुथरा पीआर बनाने का तरीका
  • डिफ़ॉल्ट रूप से अनुमति न देने वाली नीतियों और लाइफ़साइकल हुक का इस्तेमाल करके, Antigravity SDK की मदद से सिर्फ़ समीक्षा करने वाला एजेंट बनाने का तरीका
  • इंटरैक्टिव फ़ॉलो-अप सपोर्ट के साथ, GitHub ऐक्शन के तौर पर अपने-आप होने वाली समीक्षा पाइपलाइन को डिप्लॉय करने का तरीका

खाली करने के लिए जगह

पीआर बंद करना

GitHub में अपने फ़ोर्क पर मौजूद हर पीआर पर जाएं और पुल का अनुरोध बंद करें पर क्लिक करें. feature/bulk-operations पीआर को मर्ज न करें. इसमें अब भी बिना पैच किया गया जोखिम की आशंका वाला कोड मौजूद है.

फ़ोर्क की गई रिपॉज़िटरी मिटाना (ज़रूरी नहीं)

अगर आपको फ़ोर्क की ज़रूरत नहीं है, तो GitHub पर अपने फ़ोर्क पर जाएं: Settings -> Danger Zone तक स्क्रोल करें -> Delete this repository.

आगे क्या करना है