
LLM-आधारित AI एजेंट सुरक्षा — इनबाउंड इंजेक्शन डिटेक्शन + आउटबाउंड प्राइवेसी सुरक्षा
रामायण में, जटायु वह गरुड़ था जिसने रावण द्वारा सीता के अपहरण को देखा था। उसने किसी पैटर्न के मिलने का इंतजार नहीं किया। उसने खतरे को देखा, स्थिति का आकलन किया और बिना किसी हिचकिचाहट के अकेले ही कार्य किया। यही जटायु है।
टूल-उपयोग करने वाले AI एजेंटों के लिए रनटाइम प्राधिकरण परत। स्ट्रिंग को नहीं, एक्शन को गेट करें।
जटायु — नियतात्मक रूप से — यह तय करता है कि किसी एजेंट का एक्शन चलने की अनुमति है या नहीं, प्रभाव की हानि × इनपुट की उत्पत्ति × आपकी क्षमता नीति के आधार पर। एक एजेंट जिसने हमलावर-नियंत्रित वेब पेज पढ़ा है, वह अभी भी उसे सारांशित कर सकता है; उसे केवल शेल कमांड चलाने, रहस्य पढ़ने, या आपके डेटा को POST करने के लिए धोखा नहीं दिया जा सकता है जो हमलावर चाहता था। इस कोर के चारों ओर यह रक्षा-गहराई स्क्रीनिंग (इनबाउंड इंजेक्शन, आउटबाउंड गोपनीयता, एक्सफिल्ट्रेशन चैनल, कौशल आपूर्ति-श्रृंखला) और रीप्ले करने योग्य ऑडिट ट्रेस जोड़ता है।
अधिकांश एजेंट-सुरक्षा उपकरण हमले के टेक्स्ट का पता लगाने की कोशिश करते हैं। यह एक हारने वाली हथियारों की दौड़ है: एक अनुकूली हमलावर बस स्ट्रिंग को तब तक फिर से लिखता है जब तक क्लासिफायर चूक नहीं जाता। जटायु का सिद्धांत — जिस पर 2026 के मानक (OWASP एजेंटिक टॉप 10, NIST) सहमत हुए — वह यह है कि टिकाऊ सीमा एक्शन है, जिसका निर्णय इस बात से होता है कि प्रभावशाली इनपुट कहां से आया:
v0.3.1 — अल्फा। अभी तक PyPI पर नहीं है। GitHub से इंस्टॉल करें (नीचे देखें)। API 1.0 से पहले भी बदल सकता है। प्रत्येक रिलीज़ में क्या आया, इसके लिए CHANGELOG.md देखें और डिज़ाइन के लिए ARCHITECTURE.md देखें।
# Core (effect boundary + regex pre-filter, no LLM deps)
pip install git+https://github.com/saikrishnarallabandi/jataayu.git
# With cloud LLM backends (OpenAI + Anthropic) for the optional slow path
pip install "jataayu[llm] @ git+https://github.com/saikrishnarallabandi/jataayu.git"
# With Ollama (local, free slow path)
pip install "jataayu[ollama] @ git+https://github.com/saikrishnarallabandi/jataayu.git"
Python ≥ 3.10 की आवश्यकता है। एकमात्र हार्ड डिपेंडेंसी requests है; LLM बैकएंड वैकल्पिक अतिरिक्त हैं।
प्रभाव की हानि × इनपुट की उत्पत्ति के आधार पर निर्णय लें, नियतात्मक रूप से (कोई LLM नहीं):
from jataayu import jataayu_authorize_action
decision = jataayu_authorize_action(
"shell.exec",
{"cmd": "rm -rf /tmp/cache"},
untrusted=True, # these params were influenced by untrusted inbound content
)
# {tool_name, effect_class: 'shell', provenance: 'untrusted',
# decision: 'allow'|'deny'|'needs_approval', reason, violations, commit_token}
if decision["decision"] == "deny":
raise SecurityError(decision["reason"])
शेल / कोड-इवल / सीक्रेट-रीड प्रभाव में अविश्वसनीय-व्युत्पन्न इनपुट को अस्वीकार कर दिया जाता है; नेटवर्क / फाइल-राइट / मेमोरी-राइट में इसे मानवीय अनुमोदन की आवश्यकता होती है; बाकी सब की अनुमति है।
प्रवर्तित निष्पादन के लिए, PREVIEW → COMMIT ऑब्जेक्ट API का उपयोग करें — commit_token सटीक
अनुरोध को बांधता है, इसलिए प्राधिकरण के बाद एक्शन को बदलना अस्वीकार कर दिया जाता है:
from jataayu import EffectBoundary, Value, Provenance
eb = EffectBoundary()
preview = eb.preview(
"file.write",
{"path": "notes.md", "text": text},
values=[Value(text, Provenance.TRUSTED, source="user")],
)
if preview.approved:
eb.commit(preview, {"path": "notes.md", "text": text}, lambda: write_file("notes.md", text))
# commit() raises CommitRejected if the preview wasn't ALLOW or the params changed
इंजेक्टेड सामग्री को एजेंट को एक अपारदर्शी हैंडल के रूप में भी दिया जा सकता है जिसमें एक सीमित सारांश होता है, ताकि एक्सफिल्ट्रेशन का प्रयास केवल एक हैंडल रखता है, न कि कच्चा रहस्य (रीड-बाउंड्री कंफाइनमेंट)।
इंजेक्शन पहले संदेश पर, टूल परिणामों पर, और एजेंट ने स्मृति से जो कुछ भी याद किया उस पर आता है। वही इंजन, सही सतह — इसे प्रभाव सीमा को खिलाने वाले टेंट स्रोत के रूप में मानें, न कि अपनी गारंटी के रूप में:
from jataayu import (
jataayu_check_inbound,
jataayu_check_tool_return,
jataayu_check_memory_write,
jataayu_check_memory_read,
)
result = jataayu_check_inbound(github_issue_body, surface="github-issue")
if result["status"] == "HIGH":
raise SecurityError(f"Blocked: {result['findings']}")
# Returns: {status: 'SAFE'|'LOW'|'MEDIUM'|'HIGH', findings, risk_score, threat_types, blocked}
# A tool result or a memory recall can carry an injection — check before the agent consumes it
r = jataayu_check_tool_return(api_response, tool_name="web.search")
if r["blocked"]:
raise SecurityError(r["findings"])
jataayu_check_memory_write(note) # before persisting
jataayu_check_memory_read(recalled) # before it re-enters context
साझा सतहों पर भेजने से पहले PII/रहस्यों को हटा दें, और — इससे भी महत्वपूर्ण बात — डेटा-ले जाने वाले URL / स्वतः-प्राप्त छवि को ब्लॉक करें जो शून्य क्लिक के साथ संदर्भ लीक करता है (EchoLeak / AgentFlayer / Notion क्लास)। PII स्कैनर उस पेलोड को कभी नहीं देखता; इग्रेस गार्ड देखता है:
from jataayu import jataayu_check_outbound, jataayu_check_egress
result = jataayu_check_outbound(
draft_reply, surface="discord-channel",
protected_names=["Alice", "Bob"], # names that must never leak
)
safe_text = result["redacted"] if result["status"] in ("WARN", "BLOCK") else draft_reply
r = jataayu_check_egress(
"Task complete! ",
surface="github-comment",
context_secrets=[api_key], # optional: confirm exfil if a known secret rides in the URL
)
if r["status"] == "BLOCK":
safe_text = r["redacted"] # offending URL neutralized, human text kept
केवल डोमेन अनुमति सूची को अपर्याप्त माना जाता है — AgentFlayer बाईपास Azure Blob, एक विश्वसनीय होस्ट के माध्यम से रूट किया गया था — इसलिए अनुरोध-पकड़ने वाले और दुरुपयोग किए गए क्लाउड रिले (webhook.site,
*.blob.core.windows.net, ngrok, ...) को एक्सफिल बीकन के रूप में हार्ड-ब्लॉक किया जाता है। यह OutboundGuard के अंदर स्वचालित रूप से चलता है (PrivacyConfig.check_egress के साथ टॉगल करें, egress_allowed_domains के माध्यम से अपने स्वयं के CDN को अनुमति दें)।