Waktu membaca: 14 minutes

Selama berbulan-bulan, saya menumpuk aturan tata kelola agen. Beberapa file EAGER, daftar periksa LAZY, protokol akhir sesi dalam enam langkah. Namun, satu pertanyaan masih belum terjawab : bagaimana LLM mengetahui apa yang memiliki hak untuk melakukan dengan sebuah file ?

Jawaban tidak ada dalam prompt. Dia berada dalam sistem berkas.

Berikut spesifikasi arsitektur yang membuat respons dapat digunakan — la matriks tata kelola LLM.

Masalah: Prompt Engineering adalah sebuah benteng pasir

Ketika Anda memberikan sebuah file ke sebuah LLM, Anda memberinya semuanya. Kontennya, ya — dan juga ketidakhadiran pengaman. LLM tidak tahu apakah file ini berisi rahasia, pendapat spekulatif, atau kode sumber tertutup. Dia akan mengindeksnya merangkum, mengutip, mencampur dengan data lain — dan potensial mempublikasikannya dalam embedding publik atau respons pengguna.

Parade klasik, itu adalah 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."

Prompt ini memiliki tiga masalah :

  1. Bergantung pada niat baik LLM. Sebuah model yang cukup besar untuk

Menyelesaikan bug kompleks cukup besar untuk mengelilingi sebuah instruksi keamanan yang terendam dalam 200k token konteks

  1. Itu kontekstual, bukan struktural. Ganti prompt, ganti LLM,

ganti sesi — dan aturan menghilang.

  1. Tidak dapat diskalakan. Setiap jenis file baru, setiap level baru

Privasi menuntut klausa baru. Prompt Anda menjadi sebuah teks peraturan yang tidak ada yang membacanya sepenuhnya

Keamanan sebuah sistem tidak boleh pernah bergantung pada sebuah instruksi yang mungkin lupa, menghindar, atau tidak dimuat. Dia harus bergantung pada sebuah halangan yang tidak dapat disebrangi tanpa ingin secara eksplisit

Jawaban saya: matriks 4×4

Solusi yang saya terapkan di workspace saya adalah matriks zona × hak akses LLM. Dia tidak meminta LLM untuk berhati-hati. Dia memberi ketidakwaspadaan yang secara struktural mustahil

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

title Matriks Tata Kelola LLM — Zona × Hak Akses
package "Ruang Kerja" {

  rectangle "AKAR
(Lingkaran 0)
━━━━━━
Brain dump
pikiran bebas
[DILARANG LLM]" as Z0 #FFB3B3
  rectangle "configuration/
(Lingkaran 1)
━━━━━━
Rahasia, token
Infrastuktur pribadi
[DILARANG LLM]" as Z1 #FFB3B3
  rectangle "office/
(Lingkaran 2)
━━━━━━
Data redaksi
Artikel, penataan
[Visifilter]" as Z2 #FFF3B3
  rectangle "foundry/private/\n(Lingkaran 3)\n━━━━━━\nCode closed source\n[DATASET PRIBADI]" as Z3 #B3D9FF
  rectangle "foundry/public/\n(Lingkaran 3)\n━━━━━━\nKode sumber terbuka\nApache 2.0\n[AKSES BEBAS]" as Z4 #B3FFB3

}

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

@enduml

Lima Zona (Dimensi Spasial — RGPD)

Setiap zona workspace memiliki tingkat GDPR yang menentukan di mana file dapat dirujuk :

Zona

Tingkat GDPR

Konten

Hak akses RAG publik

Akar

0 — Pribadi

Brain dumps, percakapan LLM

dilarang— tidak pernah diindeks

configuration/

1 — Pemilik yang dibatasi

Rahasia, token, kunci API

dilarang— tidak pernah diindeks

office/

2 — Kolaboratif terbatas

Data redaksi, penataan, pelatihan

terfilter— Hanya visi

foundry/private/

3 — Terbuka bersyarat

Kode bersumber tertutup, SaaS tidak publik

DILARANG— dataset priadi secara eksklusif

foundry/public/

4 — Publik asli

Kode Apache 2.0, plugin yang dipublikasikan

BEBAS— indeksasi lengkap

Aturan sederhana: jalur file menentukan apa yang dapat dilakukan LLM dengannya. Tidak ada metadata yang perlu dipertahankan, tidak ada tag yang perlu ditambahkan di frontmatter, tidak ada klasifikasi manual di setiap commit. File berada di`OSS/? Ini publik. Ini berada di`configuration/? Dia tidak bisa disentuh.

Klasifikasi Epistemik (Dimensi Kedua)

Dimensi spasial mengatakan où router. Tetapi ada sebuah sumbu kedua, tegak lurus: quoi router. Beberapa file di zona yang diizinkan berisi informasi yang tidak boleh diencerkan seperti semula:

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

title Kaskade Ganda — Filter Spasial + Filter Epistemik
start

:Le LLM rencontre un fichier;

if (Zone physique ?) then (Cercle 0-1)
  :ACCÈS BLOQUÉ\n(secret, brain dump);
  stop
elseif (Zone CSS/)
  :DROIT D'ACCÈS PRIVÉ\n→ dataset fine-tuning;
  :Filtre épistémique\nVision/Opinion;
  if (Classification ?) then (VISION)
    :Dataset privé\n→ entraînement autorisé;
  else (OPINION)
    :CONFINÉ\n→ pas d'entraînement;
  endif
elseif (Zone office/)
  :DROIT D'ACCÈS FILTRÉ\n→ accès conditionnel;
  :Filtre épistémique\nVision/Opinion/Stratégie;
  if (Classification ?) then (VISION)
    :DILUTION COMPLÈTE\n→ docs racine + blog;
  elseif (STRATÉGIE)
    :DILUTION RESTREINTE\n→ docs racine seulement;
  else (OPINION)
    :CONFINEMENT\n→ office/ uniquement;
  endif
else (Zone OSS/)
  :ACCÈS LIBRE\n→ indexation complète;
endif

stop

@enduml

Matriks klasifikasi epistemik, diukir dalam Aturan 2bis dari pengelolaanku agen :

| Status | Definisi | Signal LLM | Tujuan | | VISION | Arsitektur yang stabil, pola yang telah diuji | Bahasa deklaratif, referensi sesi/uji | Pengenceran lengkap + Blog | | STRATEGI | Penempatan bisnis, harga | Kosakata pasar, persaingan | Hanya dokumen akar | | OPINION | Spekulasi, hipotesis belum divalidasi | Bahasa hipotetis, intuisi | Penahanan Lingkaran 0 |

Kombinasi dari dua dimensi — zona fisik × klasifikasi epistemik — membentukmatriks lengkap:

@startuml
skinparam backgroundColor #FEFEFE

title Matriks Lengkap — Zona × Klasifikasi
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

Bagaimana LLM Mengkonsumsi Matriks Ini

Matriks bukanlah dokumen yang dibaca oleh LLM. Ini adalah sebuah kendala implisit dikodekan dalam vektor komposit konteks (EPIC 9 — sedang berlangsung penerapan)

Ini adalah apa yang LLM terima di setiap sesi:

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)

Secara konkrit, ketika LLM berkata kepada saya:

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

Metadata zona merespons bahkan sebelum LLM menyelesaikan kalimatnya : edster/`ada di`CSS/, level 3 →Akses dilarang pada graf pengetahuan umum. RAG tidak melihatnya. Graf tidak menyentuhnya. respons pengguna Dia tidak mengutipnya.

Ontologi spasial berfungsi sebagai sebuahizin Unixuntuk LLM. Anda tidak meminta sebuah proses untuk berhati-hati dengan`/etc/shadow`— Anda menolak akses baca untuknya. Prinsip yang sama.

Implementasi : Tugas Gradle yang Bertipe

Matriks bukanlah sebuah filosofi. Ini adalah kode. Berikut kontrak tugas. Gradle yang mengimplementasikannya:

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/
}

Tugas ini dapat diuji. Anda dapat menulis sebuah ujian yang memeriksa :

@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 tes, 380 LULUS. Seperti pada plantuml-gradle — keamanan diuji, tidak diharapkan.

Mengapa Ini Sebuah Manifesto, Bukan Hanya Sebuah Spec

Dokumen ini adalah spesifikasi arsitektur karena ia mendefinisikan :

  • beberapadimensi(spasial, epistemik)

  • Beberapaaturan deterministik(zona → hak akses)

  • Un kontrak tugas(Gradle bertipe, dapat diuji)

  • satuimplementasi referensi(workspace saya)

Namun itu juga sebuahjelaskarena dia mengambil sikap terhadap sebuah perdebatan lebih luas : bagaimana mengatur akses sebuah LLM ke data?

Jawaban industri adalah prompt engineering + guardrail
klasifikasi post-hoc. Jawaban saya adalah : letakkan file Anda di dokumen yang baik.** Sisa otomatis.

Manifesto ini tidak mengatakan "LLM harus disesuaikan". Ia berkata: "penyelarasan sebuah LLM atas aturan keamanan Anda adalah konsekuensi dari sistem Anda berkas, bukan prompt Anda.

Cascade Lengkap — dari Brain Dump ke Artikel Blog

Untuk mengilustrasi siklus lengkap, berikut adalah bagaimana ide matriks ini lahir. dan telah dilarutkan:

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

Yang dimulai sebagai observasi dalam sesi ("hey, RAG tidak tahu bahwa edster adalah sumber tertutup") telah menjadi sebuah spesifikasi arsitektur diterbitkan dalam kurang dari satu sesi. Ini adalah pola STIMULUS dalam aksi.

Pro/Kontra

Pendekatan ini (Ontologi Spasial + Matriks) Pendekatan Klasik (Prompt + Pengaman)

Mekanisme — sistem file memblokir akses, bukan LLM

Deklaratif — permintaan meminta LLM untuk berhati-hati

Testable — kontrak tugas Gradle diverifikasi oleh 380+ tes

Not testable — "Apakah LLM telah mematuhi aturan?" adalah pertanyaan terbuka

Mandiri dari LLM — ganti model, folder tetap ada

Bergantung pada LLM — setiap model meminterpretasi prompt secara berbeda

Scalable — jenis data baru = folder baru, tidak ada perubahan kode

tidak dapat diskalakan — jenis data baru = klausa prompt baru, risiko regresi baru

Auditable — sistem file adalah jalur audit

tidak dapat diaudit — prompt tidak memiliki riwayat, tidak ada perbedaan, tidak ada penyalahan

Contrainte : menuntut disiplin organisasi awal

Kendala: mengharuskan disiplin penulisan prompt setiap sesi

Kesimpulan : Atur file Anda, Bukan prompt Anda

Matriks tata kelola LLM yang baru saja saya jelaskan bukanlah sebuah produk. Ini adalahspecifikasi arsitektur— dan itulah sebabnya dia adalah dapat dipublikasikan

Yang membuatnya kuat adalah bahwa ia tidak meminta apa pun dari LLM. Ia tidak Dia tidak mempercayai. Ia tidak bersandar pada penyelarasan, pemahamannya. bahasa Prancis, atau niat baiknya. Ia berdasar pada sistem file — lapisan terendah, paling stabil, paling teruji dari seluruh stack.

Saat saya berkata kepada LLM saya "kamu bisa mengindeks semua di`OSS/, tidak ada dalam `configuration/, et `office/`hanya jika ia diklasifikasikan sebagai Vision Ini bukan instruksi. Ini adalah filter — diimplementasikan dalam Kotlin, Diverifikasi oleh 380 tes, dieksekusi sebelum LLM melihat data.

Ini adalah perbedaan antara mengatakan kepada seseorang 'jangan lihat di dalam laci ini' dan menutup laci kunci. Agen tata kelola yang saya bangun sejak Bulan-bulan adalah kunci. Matriks adalah rencana furnitur.

Artikel terkait