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
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
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
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
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
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.