
node9-proxy v1.67.1
एजेंटिक युग के लिए निष्पादन सुरक्षा परत। स्वायत्त AI एजेंटों के लिए नियतात्मक "Sudo" शासन और ऑडिट लॉग प्रदान करना।
🛡️ Node9
आपके AI एजेंट ने वास्तव में क्या किया? पता लगाएं।
Node9 आपके AI एजेंट और उसके द्वारा उपयोग किए जा सकने वाले टूल के बीच बैठता है — पता लगाएं कि वह पहले से क्या कर रहा है, सुरक्षा करें वास्तविक समय में जोखिम भरी कार्रवाइयों से, और समीक्षा करें कि किसी भी समय सीमा में क्या हुआ।
Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · किसी भी MCP सर्वर के साथ काम करता है।
Node9 क्या करता है
- 🔍 खोजें — क्रेडेंशियल लीक, एजेंट लूप, अवरुद्ध संचालन और हर वह रहस्य जो आपकी डिस्क पर एजेंट अभी पहुँच सकता है, के लिए हर पिछले AI सत्र को स्कैन करें
- 🛡 सुरक्षा करें — खतरनाक कमांड चलने से पहले उनकी समीक्षा या अवरोध करें —
rm -rf,git push --force,DROP TABLE, क्रेडेंशियल पढ़ना,curl | bash, AWS/GitHub/Stripe कुंजी लीक - 📊 समीक्षा करें — अवधि-खिड़की रिपोर्ट (आज / सप्ताह / महीना / 90 दिन) — प्रति एजेंट लागत, शीर्ष उपकरण, सक्रिय शील्ड, विस्फोट त्रिज्या
पूर्वव्यापी स्कैन
यह मेरी अपनी मशीन है — Node9 बनाते हुए 90 दिन। स्कोर 25/100, 5 क्रेडेंशियल फ़ाइलें जिन तक AI एजेंट अभी पहुँच सकता है।
npx node9-ai scan # स्थापना से पहले, ~10 सेकंड में चलता है, कुछ भी अपलोड नहीं होता
node9 scan # स्थापना के बाद, समान आउटपुट
Node9 scan scorecard
सुरक्षा स्थिति स्कोरकार्ड
node9 posture यह ग्रेड करता है कि यह मशीन किसी समझौता किए गए एजेंट के लिए कितनी खुली है — अलगाव, निकास, डिस्क पर रहस्य, आपूर्ति श्रृंखला, विशेषाधिकार — और आपको प्रत्येक निष्कर्ष को ठीक करने के लिए सटीक कमांड देता है।
node9 posture # स्कोरकार्ड जिसमें #1 जोखिम और प्रत्येक निष्कर्ष के लिए सुधार
node9 posture --ship # एक संपादित स्नैपशॉट आपके node9 डैशबोर्ड पर भेजें (फ्लीट व्यू)
निष्कर्ष उनके अनुसार समूहीकृत हैं जो उन्हें ठीक कर सकते हैं: 🔒 वे जिन्हें node9 कम करता है (बस कमांड चलाएँ) और 🧱 वे जिन्हें केवल आप कर सकते हैं। प्रत्येक में सरल भाषा में क्या / क्यों / कौन और एक वास्तविक सुधार होता है — उदाहरण के लिए "एजेंट होस्ट पर बिना सैंडबॉक्स के चल रहा है" निष्कर्ष सीधे node9 sandbox run (नीचे) की ओर इशारा करता है।
🛡️ Node9 Posture — agent on this host Score: 100/100 (Good)
2 advisories below don't affect the score — OS-level exposure, yours to weigh.
🟢 node9 is already protecting you
✅ Secrets node9 DLP is blocking this
✅ Egress node9 egress is approval-gating this
✅ Approval gate node9 is blocking this
✅ Privilege node9 is approval-gating this
🔒 node9 reduces these — run the command, the rest is yours
⚠️ Isolation Running directly on the host — no container
The agent runs loose on your whole machine, not in a sandbox.
→ node9 sandbox run <agent> — jail it: kernel egress + scoped mounts + node9 inside
→ node9 shield enable project-jail — or shrink the blast radius, keep host access
⚠️ Network exposure 4 services on 0.0.0.0 (node :3000/:4000, PostgreSQL :5432, Redis :6379)
Reachable from your whole network, not just this laptop.
→ node9 shield enable postgres|redis — node9 blocks DROP TABLE / FLUSHALL
→ bind to 127.0.0.1 / firewall the port (your part)
✅ Supply chain no issues found
✅ Coverage no issues found
Track this across your fleet & keep it green → node9.ai
एक रिपॉजिटरी स्कैन करें — एजेंट-CI सुरक्षा
node9 scan-repo किसी भी रिपॉजिटरी (या स्थानीय फ़ोल्डर) की जाँच करता है कि कहीं GitHub Actions में वायर्ड AI एजेंट को बाहरी व्यक्ति द्वारा हाईजैक किया जा सकता है या नहीं — इंजेक्टेबल वर्कफ़्लो, एजेंट-पहुंच योग्य रहस्य, अनपिन किए गए MCP सर्वर, अत्यधिक व्यापक एजेंट कॉन्फ़िगरेशन और विषाक्त निर्देश फाइलें। स्थिर और केवल पार्स: यह केवल प्रतिबद्ध कॉन्फ़िगरेशन पढ़ता है, रिपॉजिटरी कोड कभी निष्पादित नहीं करता। सार्वजनिक रिपॉजिटरी के लिए कोई इंस्टॉल या टोकन की आवश्यकता नहीं।
npx node9-ai scan-repo <owner/repo> # कोई भी सार्वजनिक रिपॉजिटरी, बिना इंस्टॉल के
node9 scan-repo . # स्थानीय चेकआउट — कोई नेटवर्क नहीं
node9 scan-repo <owner/repo> --json # मशीन-पठनीय
🛡️ node9 scan-repo · node9-ai/agent-security-demo · ⚠️ agent-security risk found
inspected 2 config file(s), 2 finding(s)
🔴 CRITICAL Injectable agent workflow — untrusted input reaches a tool-using agent with secrets
.github/workflows/vulnerable-example.yml · CI-2
• runs with base-repo secrets (pull_request_target)
• checks out the untrusted PR head into the workspace root
• allowed_non_write_users: "*" — any user can trigger the agent
• no effective actor gate
🔴 CRITICAL Exfiltratable secrets reachable by an injectable agent
.github/workflows/vulnerable-example.yml · CI-4
• agent has arbitrary shell (bare Bash) → can read env and exfiltrate
यह क्या जाँचता है:
| जाँच | झंडे |
|---|---|
| CI-1 | प्रतिबद्ध एजेंट कॉन्फ़िगरेशन जो व्यापक टूल को पूर्व-अधिकृत करता है या रिमोट हुक चलाता है |
| CI-2 | इंजेक्टेबल एजेंट वर्कफ़्लो — एक बाहरी व्यक्ति एजेंट को ट्रिगर कर सकता है और उसे हाईजैक कर सकता है |
| CI-3 | अनपिन / @latest MCP सर्वर या इनलाइन क्रेडेंशियल (आपूर्ति श्रृंखला) |
| CI-4 | एक इंजेक्टेबल एजेंट द्वारा एक्सफ़िल्ट्रेट किए जा सकने वाले रहस्य |
| CI-6 | CLAUDE.md / AGENTS.md / स्किल्स में विषाक्त या खतरनाक निर्देश |
प्रत्येक PR को गेट करें — वही इंजन जो GitHub Action के रूप में है, ताकि हाईजैक करने योग्य कॉन्फ़िगरेशन मर्ज न हो सके:
# .github/workflows/agent-security.yml
- uses: node9-ai/agent-security-action@v1
with:
fail-on: high # या 'never' केवल टिप्पणी करने के लिए
मार्केटप्लेस: node9 Agent Security Check
लाइव निगरानी
Node9 monitor dashboard
node9 monitor दो दृश्यों के साथ एक इंटरैक्टिव टर्मिनल डैशबोर्ड खोलता है:
[1]रीयलटाइम — लाइव गतिविधि, अनुमोदन, सुरक्षा अलर्ट, वर्तमान जोखिम स्कोर[2]रिपोर्ट — अवधि-खिड़की सारांश: लागत, शीर्ष उपकरण, सक्रिय शील्ड, विस्फोट त्रिज्या
रिपोर्ट
अवधि-खिड़की सारांश के लिए मॉनिटर में [2] दबाएँ। [T]oday · [W]eek · [M]onth · [N]inety के साथ विंडो टॉगल करें — ऊपर स्कैन के समान पैनल, आपके पोस्ट-इंस्टॉल ऑडिट लॉग द्वारा संचालित।
Node9 monitor [2] Report
node9 monitor # रिपोर्ट दृश्य के लिए [2] दबाएँ
node9 report --period 7d # CLI रूप, बिना TUI के
स्थापित करें
# macOS / Linux
brew tap node9-ai/node9 && brew install node9
# या npm के माध्यम से (किसी भी प्लेटफ़ॉर्म पर)
npm install -g node9-ai
node9 init # सभी पहचाने गए एजेंट + MCP सर्वर को स्वचालित रूप से वायर करता है
node9 doctor # सुनिश्चित करें कि सब कुछ सही ढंग से वायर्ड है
Node.js 18+ आवश्यक है।
शील्ड — क्यूरेटेड नियम पैक
प्रत्येक शील्ड एक सेवा या डोमेन के लिए एक क्यूरेटेड नियम सेट है। केवल वही सक्षम करें जिसकी आपको आवश्यकता है।
| शील्ड | यह क्या पकड़ता है | सक्षम करें |
|---|---|---|
project-jail | ~/.ssh, ~/.aws, .env, Bash और Read टूल के माध्यम से क्रेडेंशियल पढ़ना को अवरुद्ध करता है | node9 shield enable project-jail |
bash-safe | curl | bash, rm -rf /, डिस्क ओवरराइट, रिमोट का eval | node9 shield enable bash-safe |
postgres | DROP TABLE, TRUNCATE, DROP COLUMN, WHERE के बिना DELETE | node9 shield enable postgres |
mongodb | dropDatabase, drop(), deleteMany({}), इंडेक्स ड्रॉप | node9 shield enable mongodb |
redis | लाइव सर्वर पर FLUSHALL, FLUSHDB, CONFIG SET | node9 shield enable redis |
aws | S3 डिलीट, EC2 टर्मिनेट, IAM बदलाव, RDS डिस्ट्रॉय | node9 shield enable aws |
k8s | नेमस्पेस डिलीट, helm uninstall, क्लस्टर रोल वाइप | node9 shield enable k8s |
docker | system prune, volume prune, कंटेनर rm -f | node9 shield enable docker |
github | gh repo delete, रिमोट ब्रांच डिलीटन, सेटिंग्स बदलाव | node9 shield enable github |
filesystem | chmod 777, /etc/, /boot/, /usr/ के अंतर्गत लिखना | node9 shield enable filesystem |
mcp-tool-gating | अनुमोदित नहीं MCP टूल चुपचाप नई क्षमताएँ सक्रिय कर रहे हैं | node9 shield enable mcp-tool-gating |
node9 shield list # सभी शील्ड + स्थिति दिखाएँ
हमेशा चालू — कोई कॉन्फ़िगरेशन आवश्यक नहीं
- Git —
git push --force,git reset --hard,git clean -fdको पकड़ता है - SQL —
WHEREके बिनाDELETE/UPDATE,DROP TABLE,TRUNCATEको पकड़ता है - Shell —
curl | bash, अनधिकृतsudoको पकड़ता है - DLP — AWS कुंजी, GitHub टोकन, Stripe कुंजी, किसी भी टूल तर्क, फ़ाइल सामग्री या शेल कॉन्फ़िगरेशन (
~/.zshrc,~/.bashrc) में PEM प्राइवेट कुंजियों को फ़्लैग करता है - प्रतिक्रिया DLP — पृष्ठभूमि स्कैनर Claude की वार्तालाप इतिहास पढ़ता है और आपको सचेत करता है यदि Claude ने अपने प्रतिक्रिया टेक्स्ट में कोई रहस्य लिखा है
- ऑटो-अनडू — प्रत्येक AI फ़ाइल संपादन से पहले git स्नैपशॉट →
node9 undoपूर्ववत करने के लिए - स्किल्स पिनिंग — सत्रों के बीच स्थापित Claude स्किल्स/प्लगइन्स का SHA-256 सत्यापन
समीक्षा संकेत — अपने एजेंट के अंदर इनलाइन अनुमोदन
जब node9 किसी कार्रवाई को समीक्षा के लिए फ़्लैग करता है (जैसे git push --force, एक DROP TABLE), तो अनुमोदन/अस्वीकार संकेत एजेंट वार्तालाप में इनलाइन प्रस्तुत होता है — कोई फ्रोजन सत्र नहीं, कोई अलग टर्मिनल नहीं, कोई हुक-टाइमआउट दौड़ नहीं। node9 अभी भी पूर्ण मूल्यांकनकर्ता चलाता है और निर्णय लेता है; केवल संकेत सतह एजेंट की ओर बढ़ती है।
- डिफ़ॉल्ट रूप से चालू Claude Code और GitHub Copilot CLI के लिए — वे एजेंट जिनके हुक अनुबंध मूल
askका समर्थन करते हैं। बाकी सभी एजेंट (Codex, Gemini, Antigravity, Hermes, Cursor, OpenCode, Pi) node9 के अपने अनुमोदक का उपयोग करते हैं। - इसे नियंत्रित करें
reviewChannelके साथ~/.node9/config.jsonमें (या हुक पर--no-ask):
{
"settings": {
"reviewChannel": "ask", // "ask" = इनलाइन एजेंट संकेत (डिफ़ॉल्ट) | "approver" = node9 का अपना अनुमोदक
},
}
- टीम सेटअप: जब क्लाउड/टीम अनुमोदक कॉन्फ़िगर किया गया हो (
approvers.cloud: true), समीक्षाएँ उस अनुमोदक के पास रूट होती हैं — node9 किसी इनलाइन स्व-अनुमोदन को रूटेड/द्वितीय-पक्ष अनुमोदन को बायपास नहीं करने देगा।
सैंडबॉक्स — एक एजेंट को जेल में चलाएँ
जब निगरानी पर्याप्त नहीं है, तो node9 sandbox एजेंट को एक डिस्पोजेबल कंटेनर के अंदर कर्नेल-लागू निकास अनुमति सूची और स्कोप्ड माउंट के साथ चलाता है — जबकि node9 के हुक बॉक्स के अंदर हर टूल कॉल को नियंत्रित और ऑडिट करते हैं। सुरक्षा का कठोर संस्करण: एजेंट केवल उस फ़ोल्डर को छू सकता है जिसे आप माउंट करते हैं और केवल उन होस्ट तक पहुँच सकता है जिन्हें आप अनुमति देते हैं; बाकी सब कर्नेल पर छोड़ दिया जाता है।
cd ~/my-project
node9 sandbox new # node9.sandbox.yaml लिखें — क्या माउंट करना है + किन होस्ट को अनुमति देना है
node9 sandbox run # जेल किए गए एजेंट को बनाएं + बूट करें (आपका प्रोजेक्ट /workspace पर)
node9 sandbox tail # होस्ट से एजेंट की कार्रवाइयों को लाइव देखें
- डिस्पोजेबल — कंटेनर बाहर निकलने पर नष्ट हो जाता है; आपके प्रोजेक्ट संपादन आपकी वास्तविक डिस्क पर उतरते हैं, कुछ और नहीं बचता।
- समान नीति — आपके मौजूदा शील्ड / निकास नियम / अनुमोदन बॉक्स के अंदर लागू होते हैं, उसी ऑडिट लॉग और डैशबोर्ड पर स्ट्रीम किए जाते हैं।
- आसन लूप को बंद करता है — इसे चलाने से अलगाव / निकास निष्कर्ष हरे हो जाते हैं।
ईमानदार दायरा (चरण 1): एकल कंटेनर, Claude पहले (Codex अगला); एजेंट के पास अभी भी बॉक्स में अपने खुद के क्रेडेंशियल हैं (निकास दीवार उन्हें अनुमत होस्ट तक सीमित करती है) — "एजेंट कभी भी कोई रहस्य नहीं रखता" रोडमैप पर क्रेडेंशियल-ब्रोकर चरण है। Docker आवश्यक है।
MCP गेटवे
किसी भी MCP सर्वर को पारदर्शी रूप से लपेटें। एजेंट वही सर्वर देखता है — Node9 प्रत्येक टूल कॉल को इंटरसेप्ट करता है।
{
"mcpServers": {
"postgres": {
"command": "node9",
"args": ["mcp", "--upstream", "npx -y @modelcontextprotocol/server-postgres postgresql://..."]
}
}
}
या बस node9 init चलाएँ — यह आपके मौजूदा MCP सर्वर को स्वचालित रूप से लपेटता है।
🔐 MCP टूल पिनिंग — रग-पुल रक्षा
MCP सर्वर सत्रों के बीच अपने टूल परिभाषाएँ बदल सकते हैं। एक समझौता या दुर्भावनापूर्ण सर्वर आपके पहले भरोसा करने के बाद चुपचाप टूल जोड़, हटा या बदल सकता है — एक रग पुल हमला।
Node9 पहले उपयोग पर टूल परिभाषाओं को पिन करता है:
- पहला कनेक्शन — गेटवे प्रत्येक टूल के नाम, विवरण और स्कीमा का SHA-256 हैश रिकॉर्ड करता है
- बाद के कनेक्शन — हैश की तुलना की जाती है; यदि टूल बदल गए हैं, तो सत्र को संगरोध में डाल दिया जाता है और प्रत्येक टूल कॉल को तब तक अवरुद्ध कर दिया जाता है जब तक कोई मानव समीक्षा और परिवर्तन को अनुमोदित नहीं करता
- दूषित पिन स्थिति — बंद होने पर विफल (ब्लॉक), चुपचाप पुनः विश्वास नहीं करता
node9 mcp pin list # सभी पिन किए गए सर्वर और हैश दिखाएँ
node9 mcp pin update <serverKey> # पिन हटाएँ, अगले कनेक्शन पर पुनः पिन करें
node9 mcp pin reset # सभी पिन साफ़ करें
अन्य कमांड
ऊपर दिए गए तीन प्रवाह कमांड (scan / monitor / report) के अलावा:
| कमांड | यह क्या दिखाता है | कब उपयोग करें |
|---|---|---|
node9 blast | AI एजेंट अभी क्या एक्सेस कर सकता है — फ़ाइलें, क्रेडेंशियल, env | किसी भी मशीन पर पहली चीज़ चलाएँ |
node9 tail | प्रत्येक टूल कॉल का लाइव स्ट्रीम (केवल टेक्स्ट, कोई TUI नहीं) | अन्य टूल, CI, लॉग में पाइप करने के लिए |
node9 sessions | प्रॉम्प्ट, टूल ट्रेस, लागत, स्नैपशॉट के साथ सत्र इतिहास | किसी हैंडऑफ़ या पिछले कार्य की समीक्षा करना |
node9 dlp | Claude प्रतिक्रिया टेक्स्ट में क्रेडेंशियल-लीक निष्कर्ष | किसी भी समय DLP डेस्कटॉप अलर्ट फायर करता है |
node9 mask | स्थानीय सत्र इतिहास फ़ाइलों से सादा-पाठ रहस्य संपादित करें | DLP निष्कर्ष के बाद — स्थानीय डिस्क साफ़ करता है |
साथ ही आपके Claude Code स्टेटसलाइन में एक लाइव HUD:
🛡 node9 | standard | [bash-safe] | ✅ 12 allowed 🛑 2 blocked 🚨 0 dlp | ~$0.43
📊 claude-opus-4-7 | ctx [████████░░░] 54% | 5h [██░░░░░░░░] 12% | 7d [█░░░░░░░] 7%
🗂 2 CLAUDE.md | 8 rules | 3 MCPs | 4 hooks
डेटा पढ़ना — संख्याओं का क्या अर्थ है
Node9 सिग्नल को सतह पर लाता है। यहाँ जानने लायक पैटर्न हैं:
| संकेत | संभावित अर्थ |
|---|---|
एक सप्ताह में Would have blocked ≥ 5 | एजेंट उच्च-प्रभाव वाले ऑपरेशन का प्रयास कर रहा है; शील्ड समीक्षा के लायक हैं |
एकल review-git-push नियम >50% निष्कर्षों का | आपका अपना नियम इच्छानुसार फायर कर रहा है — जोखिम नहीं, बस पर्यवेक्षण |
user-prompt टूल में DLP निष्कर्ष | आपने अपने प्रॉम्प्ट में एक रहस्य चिपका दिया — कुंजी घुमाएँ |
| एक ही फ़ाइल पर एजेंट लूप ×50+ | एजेंट संपादन/परीक्षण/सुधार चक्र में फँसा हुआ है — संदर्भ जाँचें या धीमा करें |
| MCP टूल पिन बेमेल | सर्वर ने अपने टूल बदल दिए हैं — पुनः विश्वास करने से पहले समीक्षा करें |
| बड़ा MCP प्रतिक्रिया चेतावनी | वह सर्वर प्रत्येक बाद के मोड़ के लिए आपके संदर्भ विंडो को फुला रहा है |
Response DLP अलर्ट | Claude ने अपने प्रतिक्रिया टेक्स्ट में एक रहस्य लिखा — अवरुद्ध नहीं, तुरंत घुमाएँ |
tool-result में DLP निष्कर्ष | Claude ने एक रहस्य वाली फ़ाइल पढ़ी (.env, क्रेडेंशियल) — कुंजी घुमाएँ और node9 mask चलाएँ |
[Shell] में DLP निष्कर्ष | ~/.zshrc या ~/.bashrc में सादा-पाठ रहस्य — हर AI सत्र इसे देख सकता है |
एकल-बार के संकेत सामान्य हैं; लगातार पैटर्न वे हैं जिन पर आप कार्रवाई करते हैं।
Python SDK — किसी भी Python एजेंट को शासित करें
from node9 import configure, protect
configure(agent_name="my-agent", policy="require_approval")
@protect("bash")
def run_command(cmd: str) -> str:
...
Python SDK → · CI कोड समीक्षा एजेंट उदाहरण →
हुड के नीचे
- स्कैन
~/.claude/projects/,~/.gemini/tmp/,~/.gemini/antigravity-*/brain/,~/.copilot/session-state/,~/.codex/sessions/से कच्चा एजेंट इतिहास पढ़ता है — कोई API कॉल नहीं, पूरी तरह से ऑफ़लाइन - रनटाइम प्री-एक्ज़ीक्यूशन हुक (Claude Code, Codex, Antigravity, GitHub Copilot CLI, Gemini CLI, Opencode, Pi) या MCP गेटवे (Cursor, Windsurf, VSCode, Claude Desktop) के माध्यम से टूल कॉल को इंटरसेप्ट करता है। सभी निर्णय
~/.node9/audit.logमें एटॉमिकली पहुँचते हैं। - MCP गेटवे एक stdio प्रॉक्सी है;
tools/list+tools/callJSON-RPC को इंटरसेप्ट करता है, बाकी फॉरवर्ड करता है - नीति इंजन bash AST विश्लेषण के लिए mvdan-sh का उपयोग करता है — बैकस्लैश एस्केपिंग, वेरिएबल सब्स्टीट्यूशन, रिमोट डाउनलोड के eval के माध्यम से अस्पष्टता को हराता है
- ऑटो-अनडू के लिए शैडो रिपॉजिटरी
~/.node9/snapshots/<hash16>/पर रहती है — आपके.gitको कभी नहीं छूती - सैंडबॉक्स एक Dockerfile + एंट्रीपॉइंट उत्पन्न करता है जो एक
ipset/iptablesडिफ़ॉल्ट-अस्वीकार निकास दीवार को सील करता है, फिर node9 के डेमॉन + हुक के साथ अंदर चल रहे एक गैर-रूट एजेंट पर ड्रॉप करता है; केवल एजेंट की क्रेडेंशियल फ़ाइल माउंट होती है, कभी आपका पूरा~/.claudeनहीं
पूर्ण दस्तावेज़
कॉन्फ़िगरेशन संदर्भ, स्मार्ट नियम, स्टेटफुल नियम, विश्वसनीय होस्ट, अनुमोदन मोड, CLI संदर्भ — node9.ai/docs पर।
संबंधित परियोजनाएँ
- node9-python — Python SDK
- node9-pr-agent — GitHub Action जो Node9 के माध्यम से PR की समीक्षा करता है
एंटरप्राइज़
Node9 Pro में गवर्नेंस लॉकिंग, SAML/SSO, केंद्रीय ऑडिट निर्यात और VPC तैनाती जोड़ता है। node9.ai देखें।
लाइसेंस
Apache-2.0
☕ और स्वस्थ पैरानोया के साथ बनाया गया।