leestijd : 14 minutes

Tijdens maanden heb ik de regels voor agentgovernance opgestapeld. Bestanden EAGER, luie checklists, eind‑sessie protocollen in zes stappen. En toch bleef een vraag onbeantwoord: hoe weet de LLM wat het heeft hij het recht om met een bestand om te gaan ?

Het antwoord staat niet in een prompt. Het staat in het bestandssysteem.

Hier is de architectuurspecificatie die het antwoord bruikbaar maakt — la LLM-governancematrix.

Het Probleem: Prompt Engineering is een zandkasteel

Als je een bestand aan een LLM geeft, geef je het alles. De inhoud, ja — Maar ook het ontbreken van beschermende maatregelen. De LLM weet niet of dit bestand bevat Een geheim, een speculatieve mening, of geslotenbroncode. Het zal het indexeren. samenvatten, citeren, mengen met andere gegevens — en mogelijk het publiceren in een openbare embedding of een gebruikersreactie.

De klassieke parade is de prompt :

"Tu es un assistant sécurisé. Ne divulgue jamais d'informations confidentielles.
Si tu détectes un secret, ignore-le. Si tu détectes une opinion, ne la répète pas."

Deze prompt heeft drie problemen :

  1. Het rust op de goede wil van het LLM. Een model groot genoeg voor

Het oplossen van complexe bugs is groot genoeg om een instructie te omzeilen. van veiligheid verdrinkt in 200k tokens van context.

  1. Het is contextueel, niet structureel. Verander van prompt, verander van LLM,

Verander van sessie — en de regel verdwijnt.

  1. Hert schaalt niet. Elk nieuw bestandstype, elk nieuw niveau

of confidentiality requires a new clause. Your prompt becomes an Een regelgevingstekst die niemand volledig leest.

De veiligheid van een systeem mag nooit afhangen van een instructie die men peut oublier, contourner, ou ne pas charger. Elle doit dépendre d’une drempel die je niet kunt passeren zonder het expresse te willen

Mijn Antwoord: de Matrix 4×4

De oplossing dat ik heb geïmplementeerd in mijn workspace is een matrix zone × toegangsrecht LLM. Ze vraagt de LLM niet om voorzichtig te zijn. Zij maakt De onvoorzichtigheid die structureel onmogelijk is

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title Matrix van bestuur LLM — Zone × Toegangsrecht
package "" {

  rectangle "RACINE\n(Cirkel 0)\n━━━━━━\nBrain dump\nVrije gedachten\n[INTERDIT LLM]" as Z0 #FFB3B3
  rectangle "configuration/\n(Cirkel 1)\n━━━━━━\nSecrets, tokens\nPrivé infra\n[INTERDIT LLM]" as Z1 #FFB3B3
  rectangle "office/\n(Cirkel 2)\n━━━━━━\nRedactionele data\nArtikelen, kaders\n[FILTRÉ Vision]" as Z2 #FFF3B3
  rectangle "foundry/private/\n(Cirkel 3)\n━━━━━━\nGesloten broncode\n[DATASET PRIVÉ]" as Z3 #B3D9FF
  rectangle "foundry/public/\n(Cirkel 3)\n━━━━━━\nOpen broncode\nApache 2.0\n[ACCÈS LIBRE]" as Z4 #B3FFB3

}

Z0 -[hidden]-> Z1
Z1 -[hidden]-> Z2
Z2 -[hidden]-> Z3
Z3 -[hidden]-> Z4

@enduml

De Vijf Zones (Ruimtelijke Dimensie — AVG)

Elke zone van de werkruimte heeft een AVG‑niveau dat bepaalt waar het bestand kan gerouteerd zijn :

Zone RGPD-niveau Inhoud Publiek recht op toegang RAG

wortel

0 — intiem

Braindumps, gesprekken LLM

VERBODEN— nooit geïndexeerd

configuration/

1 — Beperkte eigenaar

Geheimen, tokens, API-sleutels

VERBODEN— nooit geïndexeerd

office/

2 — Beperkte samenwerking

Redactionele gegevens, omkadering, opleidingen

GEFILTERD— Visie alleen

foundry/private/

3 — Voorwaardelijk geopend

Gesloten-broncode, SaaS niet openbaar

VERBODEN— uitsluitend privé dataset

foundry/public/

4 — Inheems publiek

Apache 2.0-licentie, gepubliceerde plug-ins

VRIJ— volle indexering

De regel is eenvoudig: het bestandspad bepaalt wat de LLM ermee kan doen. Geen metadata om te onderhouden, geen tag toe te voegen aan het frontmatter, geen handmatige classificatie bij elke commit. Het bestand is in`OSS/`? Het is openbaar. Het is in`configuration/`Hij is onaanraakbaar.

De epistemologische classificatie (tweede dimensie)

De ruimtelijke dimensie zegt waar te routeren. Maar er is een tweede as, loodrecht : quoi router. Sommige bestanden in een geautoriseerd gebied bevatten informatie. die niet als zodanig verdund zouden moeten worden :

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 240

title De Double Cascade — Spatiaal Filter + Epistemisch Filter
start

:De LLM komt een bestand tegen;

if (Zone physique ?) then (Cercle 0-1)
  :ACCis BLOQUen\n(geheim, hersendump);
  stop
elseif (Zone CSS/)
  :DROIT D'ACCÈS PRIVÉ\n→ dataset fine-tuning;
  :Epistemologisch filter\nVisie/Opinion;
  if (Classification ?) then (VISION)
    :Gegevenset privaat\n → training toegestaan;
  else (OPINION)
    :CONFINÉ\n→ geen training;
  endif
elseif (Zone office/)
  :DROIT D'ACCÈS FILTRÉ\n→ voorwaardelijke toegang;
  :Epistemologisch filter\nVisie/Opinion/Stratégie;
  if (Classification ?) then (VISION)
    :DILUTION COMPLÈTE\n→ docs basismap + blog;
  elseif (STRATÉGIE)
    :DILUTION RESTREINTE\n→ alleen documenten van de hoofddirectory;
  else (OPINION)
    :CONFINEMENT\n→ office/ alleen;
  endif
else (Zone OSS/)
  :ACCÈS LIBRE\n→ volledige indexatie;
endif

stop

@enduml

Het epistemische classificatierooster, gegraveerd in regel 2bis van mijn bestuur. agent :

| Status | Definitie | Signal LLM | Bestemming | | VISION | Gestabiliseerde architectuur, getest patroon | Declaratieve taal, verwijzingen sessies/tests | Volledige verdunning + blog | | STRATEGIE | Zakelijke positionering, prijsstelling | Woordenboek markt, concurrentie | Alleen basisdocumenten | | MEENING | Speculatie, niet-gevalideerde hypothese | Hypothletische taal, intuïtie | Beperking Cirkel 0 |

De combinatie van de twee dimensies — fysiek gebied × epistemische classificatie — Vorm hetvolledige matrix:

@startuml
skinparam backgroundColor #FEFEFE

title De Volledige Matrix — Zone × Classificatie
salt
{
{T
+ Zone | VISION | STRATÉGIE | OPINION
+ Racine (0) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ configuration/ (1) | ✗ Interdit | ✗ Interdit | ✗ Interdit
+ office/ (2) | ✓ Docs + Blog | ✓ Docs seulement | ✗ Confiné
+ CSS/ (3) | ✓ Dataset privé | ✓ Dataset privé | ✗ Confiné
+ OSS/ (4) | ✓ Public libre | ✓ Public libre | ✓ Public libre
}
}

@enduml

Hoe verbruikt de LLM deze matrix?

De matrix is geen document dat de LLM leest. Het is een beperking implicite gecodeerd in de samengestelde contextvector (EPIC 9 — in uitvoering) van implementatie)

Dit is wat de LLM ontvangt bij elke sessie:

VECTEUR COMPOSITE DE CONTEXTE
├── RAG pgvector → OSS/ + office/Vision
│   (similarité sémantique sur contenu publiable)
├── Knowledge Graph graphify → OSS/
│   (relations exactes entre artéfacts publics)
├── Knowledge Graph privé → CSS/
│   (relations entre code closed source — jamais exporté)
├── Métadonnées de zone → chaque fichier taggé par zone physique
│   (le LLM sait s'il est dans office/ ou OSS/)
└── Historique des décisions → WORKSPACE_VISION.adoc
    (contexte temporel des arbitrages)

Concreet, wanneer de LLM zegt :

Je vais indexer le contenu de edster/ pour enrichir le knowledge graph...

De zone‑metadata reageert zelfs voordat het LLM zijn zin heeft voltooid : edster/`is in`CSS/, niveau 3 →toegang geweigerd tot de publieke knowledge graph. De RAG ziet het niet. De grafiek raakt het niet. Het gebruikersantwoord niet Hij citeert het niet.

De ruimtelijke ontologie werkt als eenUnix-machtigingvoor de LLM. Je vraagt niet aan een proces om voorzichtig te zijn met`/etc/shadow`— U ontzegt hem leestoegang. Hetzelfde principe.

Implementatie: Getypeerde Gradle-taken

De matrix is geen filosofie. Het is code. Hier is de taakopdracht. Gradle die het implementeert:

abstract class ZoneAwareIndexer @Inject constructor(
    private val rootDir: DirectoryProperty,
    private val configServer: ConfigServerProperty  // → configuration/
) : DefaultTask() {

    @Input
    val zoneFilter: SetProperty<Zone> = project.objects.setProperty(Zone::class.java)

    @OutputFile
    val ragIndex: RegularFileProperty = project.objects.fileProperty()

    @TaskAction
    fun index() {
        val allowedPaths = zoneFilter.get().flatMap { it.resolve(rootDir.get()) }
        val forbiddenPaths = Zone.RESTRICTED.resolve(rootDir.get())
                            + Zone.INTIMATE.resolve(rootDir.get())
        // Le RAG ne voit jamais configuration/ ni la racine
        // CSS/ alimente un index privé, pas celui-ci
        // office/ est filtré par le classifieur Vision/Opinion
    }
}

enum class Zone {
    INTIMATE,      // Cercle 0 — racine
    RESTRICTED,    // Cercle 1 — configuration/
    EDITORIAL,     // Cercle 2 — office/
    CLOSED_SOURCE, // Cercle 3 — foundry/private/
    OPEN_SOURCE    // Cercle 3 — foundry/public/
}

De taak is testable. Je kunt een test schrijven die controleert :

@Test
fun `le RAG n'indexe jamais configuration`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE, Zone.EDITORIAL))
    index.index()

    assertThat(index.ragIndex).doesNotContain("configuration/")
}

@Test
fun `le code closed source est exclu du RAG public`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE))  // OSS only

    assertThat(index.ragIndex).doesNotContain("edster")
}

380 testen, 380 PASS. Net als bij plantuml-gradle — de veiligheid wordt getest, niet verwacht.

Waarom het een manifest is, geen gewone spec

Dit document is een architectuurspecificatie omdat hij definieert:

  • desdimensies(ruimtelijke, epistemische)

  • vandeterministische regels(zone → toegangsrecht)

  • Un taakcontract(Getypeerde Gradle, testbaar)

  • Eenreferentie‑implementatie(mijn workspace)

Maar het is ook eenmanifestOmdat hij een standpunt inneemt in een debat breder : Hoe de toegang van een LLM tot gegevens regelen ?

De reactie van de industrie, dat is prompt engineering + de guardrails
de post-hoc classifiers. mijn antwoord is: zet je bestanden in de goede dossiers. De rest is automatisch.

Dit manifest zegt niet "de LLMs moeten worden afgestemd". Het zegt : "de uitlijning van een LLM op uw veiligheidsregels is een gevolg van uw systeem van bestanden, niet van uw prompt.

De Complete Cascade — van Brain Dump tot blogartikel

Om de volledige cyclus te illustreren, zie hier hoe dit idee van een matrix is ontstaan. en is verdund :

Session 4 mai 2026 — Feedback global du workspace
  │
  ├→ Le LLM identifie : "la dualité public/privé est invisible"
  │   → Classifié VISION (constat architectural vérifiable)
  │
  ├→ PICTURE_ME_ROLLIN_MATRICE_4X4.adoc — STIMULUS (Cercle 0)
  │   → Brain dump structuré, classification VISION confirmée
  │
  ├→ DILUTION → WORKSPACE_AS_PRODUCT.adoc (section Matrice 4×4)
  │   → La spec vit dans les documents racine
  │
  ├→ DILUTION → WORKSPACE_ORGANIZATION.adoc (OSS/CSS)
  │   → La granularisation est documentée
  │
  └→ ARTICLE 0117 (ce document) → cheroliv.com
      → La VISION est publiée

Wat begon als een observatie tijdens de sessie (« hé, het RAG weet niet dat edster is closed source") is geword een architectuurspecificatie Gepubliceerd in minder dan één sessie. Dit is het patroon STIMULUS in actie.

Voor/tegen

Deze aanpak (Ruimtelijke ontologie + Matrix) De klassieke aanpak (Prompt + Guardrails)

Mecanisch — het bestandssysteem blokkeert de toegang, niet het LLM

Declaratief — het prompt vraagt aan de LLM om voorzichtig te zijn.

Testable — De Gradle-taakcontract wordt geverifieerd door 380+ tests

Niet testbaar — "de LLM heeft de regel gerespecteerd?" is een open vraag

Onafhankelijk van het LLM — verander van model, de mappen blijven.

Afhankelijk van de LLM — elk model interpreteert de prompt anders

Schaalbaar — nieuw type gegevens = nieuwe map, geen codewijziging

Niet schaalbaar — nieuw datatype = nieuw prompt‑clausule, nieuw regressierisico

Controleerbaar — het bestandssysteem is de controlespoor

niet auditabel — de prompt heeft geen geschiedenis, geen diff, geen blame

Beperking : vereist een initiële organisatiediscipline

Contraint: vereist een schrijfdiscipline bij elke sessie voor het opstellen van prompts.

Conclusie: Organiseer je bestanden, niet je prompts

De LLM‑governance‑matrix die ik zojuist heb beschreven is geen product. Het is eenarchitectuurspecificatie— en daarom is zij publiceerbaar.

Wat het robuust maakt, is dat ze niets vraagt aan de LLM. Zij niet hem vertrouwt niet. Zij steunt niet op zijn uitlijning, haar begrip. van het Frans, of zijn goede wil. Ze rust op het bestandssysteem — de onderste, meest stabiele en meest geteste laag van de hele stack

Wanneer ik tegen mijn LLM zeg "je kunt alles indexeren in`OSS/, niets in `configuration/, et `office/`alleen als het is geclassificeerd als Vision" — Dit is geen instructie. Het is een filter — geïmplementeerd in Kotlin, Geverifieerd door 380 tests, uitgevoerd voordat het LLM de gegevens ziet.

Dat is het verschil tussen tegen iemand zeggen "kijk niet in deze lade En sluiten de sleutellade. De governance‑agent die ik sinds aan het bouwen ben De maanden is de sleutel. De matrix is het plan van het meubel.

Gerelateerde artikelen