De drie harde invariants
monsys.ai’s AI observability is bewust smaller dan de meeste tools in deze categorie. Drie invariants vatten samen wat we niet doen, ongeacht klant-vraag.
1. Passief, nooit autonoom
Section titled “1. Passief, nooit autonoom”monsys.ai voert nooit prompts uit. Het neemt geen acties. Het blokkeert niets inline. Het is een observability-laag — bewijsmateriaal achteraf, geen control plane.
Geen AI die andere AI bestuurt. Punt.
In de praktijk:
- Geen “auto-fix” knoppen die een prompt herschrijven.
- Geen “AI judge” die je traces classificeert (LLM-as-judge zit in Langfuse, niet hier).
- Geen request-blocking proxy. Onze SDK draait buiten je request-path en faalt silent als de hub onbereikbaar is.
Waarom: AI-systemen die andere AI-systemen besturen creëren verantwoordings-vacuüm. Wie was de operator? Wie bevestigde de actie? De AI Act (art. 14) eist menselijk toezicht. Een passieve laag laat mensen oordelen.
2. PII geredacteerd aan de bron
Section titled “2. PII geredacteerd aan de bron”EU-PII wordt vóór opslag herkend met checksum-validatie en vervangen door een kind-gelabeld hash-token. Wat wordt gedetecteerd:
- IBAN — 36 SEPA-landen (ISO 13616 mod-97). Het kind-suffix is de
ISO-landcode in kleine letters:
[IBAN_BE],[IBAN_NL],[IBAN_FR],[IBAN_DE],[IBAN_ES],[IBAN_IT],[IBAN_PT],[IBAN_LU],[IBAN_AT], … 0 false positives op random strings. - Rijksregister (BE) — mod-97 op de 9-cijferige basis + 2 controle. Werkt voor zowel pre-2000 als post-2000 geboorten.
- BTW-BE / KBO — mod-97 op de 8 + 2 nummers.
- BSN (NL) — gewogen-som mod-11. We weigeren BSNs die met 0 beginnen (gereserveerd in de praktijk).
- NIR (FR) — mod-97 over de 13 basisdigits, eerste digit ∈ {1,2,3,4} (sexe + foreign-born varianten).
- Telefoon (E.164) —
+CCmet 8–15 digits totaal. Universeel voor alle landen. - E-mail — RFC-conform regex.
Format van het token in pattern-redact mode: [KIND] of voor IBAN
specifiek [IBAN_<land>]. In hash-only mode wordt een 12-char SHA256
prefix toegevoegd: [IBAN_BE:43d1151bbe0b].
Raw PII bereikt nooit het hub-bestand of de DB.
In de praktijk:
- De redactie loopt in
hub/api/ai/redaction.go, vóór de content-blob wordt gehasht en opgeslagen. - Mod-97 checksum-validatie betekent dat we 0 false positives hebben op niet-valide nummers — een random 11-cijferige string lijkt niet op een Rijksregisternummer.
- Het hash-token blijft consistent voor dezelfde PII binnen dezelfde trace, zodat je in span-content nog kan zien dat “dezelfde IBAN” werd herhaald, zonder hem te kennen.
Het tenant-attribuut redaction_level controleert het gedrag:
| Level | Wat er bewaard wordt |
|---|---|
off | Volledige inhoud (alleen sandbox) |
hash-only | Alleen SHA256 van de redacted content |
pattern-redact | Inhoud met PII vervangen door tokens (default) |
full-content-strip | Lege strings voor prompt/completion |
3. Evidence packs met Ed25519
Section titled “3. Evidence packs met Ed25519”Elke maand (of elke aangevraagde periode) genereert monsys.ai een Ed25519-getekend tarball. Het manifest bevat:
pack_id,tenant_id,app_id,period_start,period_endtrace_count,span_count,blob_counttraces_sha256,spans_sha256,blob_index[](hash per blob)signing_public_hex(de Ed25519 public key)- Signature in
manifest.sigover de bytes vanmanifest.json
Je auditor kan offline verifiëren, zonder monsys-account.
Het script tools/evidence-pack-verify.py (zonder monsys-dependencies,
alleen cryptography) gebruikt de public key uit het manifest zelf.
De auditor kruisverifieert die key tegen wat monsys publiek vermeldt
(bv. een security-pagina, of een gedrukt certificaat dat we leveren).
Tamper-detectie
Section titled “Tamper-detectie”Als ook maar één byte van een blob, traces.jsonl of spans.jsonl gewijzigd is, faalt de hash-vergelijking en exit code = 1. De script zegt expliciet welk artifact niet klopt.
Wat dit niet is
Section titled “Wat dit niet is”Niet een prompt engineering tool. Geen playground, geen versioned prompts, geen A/B-experimenten. Voor dat gebruik Langfuse of een vergelijkbaar product — en stuur de output naar monsys voor het audit-deel.
Niet een eval framework. Geen LLM-as-judge, geen ingebouwde datasets. Je kan eval-output wel injecteren als attributes op een span.
Niet een blocking guardrail layer. Voor real-time policy enforcement zijn er gespecialiseerde tools — wij draaien in async/parallel naast je inference path.