Governance · konstruktionsbedingt nur lesend

Policy ist Code.
Kein Prompt.

SQAI behandelt das Modell als das, was es ist: einen nicht vertrauenswürdigen Client. Allow-Listen sind im Code fixiert, wenn das Tool konstruiert wird, werden in-process vor jeder Ausführung geprüft und sind im Protokoll des Modells nicht vorhanden. Es gibt nichts, woraus sich das System herausreden ließe.

4.574Capabilities, die der Vertrag exponiert – ausnahmslos nur lesend
6Grants in einer App-Policy
1eingetippte Anfrage, die läuft

IIDie Einschränkung im Detail

Drei Schichten. Jede kann nur entfernen.

Jede Antwort durchläuft dieselbe Eingrenzung. Ein hash-gepinnter Vertrag definiert, was existiert. Ihre Policy schränkt es auf das Erlaubte ein. Eine typisierte Anfrage muss in beide passen.

  1. 01

    Der Vertrag

    4.778 Capabilities in der gepinnten Runtime; 4.574 für Agenten exponiert, alle nur lesend. Die übrigen 204 sind vollständig ausgeschlossen – für ein Modell existieren sie nicht.

  2. 02

    Ihre Policy

    Drei Allow-Listen – allowedSources, allowedFields je Quelle, allowedFunctions – zum Zeitpunkt von createSQAI() fixiert. Functions sind standardmäßig „all-readonly".

  3. 03

    Eine Anfrage

    Ein typisierter Plan, gegen den Vertrag validiert und anschließend in-process gegen die Policy geprüft – vor der Ausführung, nie danach.

Schicht 01 · Der Vertrag4.574 exponiert · nur lesend
Schicht 02 · Ihre Policy6 Grants
allowedSourcesorders
allowedFieldsregionrevenueunit_price
allowedFunctionsstats.medianfinance.npv
Schicht 03 · Eine Anfrage1 typisierter Plan

QuerySpec v1 · median(revenue) by region · policy ✓

contract_hash sha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1

Nur einschränken.

Eine Policy kann die Oberfläche verkleinern; vergrößern kann sie nichts. Wird eine Capability benannt, die der Vertrag nicht exponiert, wirft createSQAI() beim Konstruieren unsupported_operation – die App schlägt fehl, bevor ein Agent sich je verbindet.

Und der Tool-Input des Modells enthält kein allowed*-Feld. Die Policy ist nicht im Protokoll – es gibt also nichts, das ein Prompt oder eine Injection erweitern könnte.

IIIDie Policy im Code

Einmal geschrieben. Jedes Mal geprüft.

Die meisten Governance-Werkzeuge liegen neben dem Datenpfad und beobachten ihn. SQAIs Policy liegt im Pfad selbst: drei Allow-Listen im Konstruktor, in-process vor jeder Ausführung durchgesetzt.

const sqai = createSQAI({
  sources: { orders },

  // policy — fixed here, invisible to the model
  allowedSources: ['orders'],
  allowedFields: {
    orders: ['region', 'revenue', 'unit_price'],
  },
  // functions default: 'all-readonly'
  allowedFunctions: [
    'stats.median', 'finance.npv',
  ],
});
allowedSources
Die registrierten Quellen, die ein Plan benennen darf. Alles andere gibt policy_denied_source zurück.
allowedFields
Spalten, je Quelle. Ein Plan, der eine andere Spalte berührt, gibt policy_denied_field zurück.
allowedFunctions
Die nur-lesenden Funktionen, die ein Plan aufrufen darf – Standard „all-readonly". Alles außerhalb gibt policy_denied_function zurück.
tool input
Enthält kein allowed*-Feld. Das Modell sieht die Policy nie und kann daher keine erweiterte übermitteln.

Das Ablehnungsprotokoll

Ablehnungen sind Daten, keine Exceptions. Jede trägt einen stabilen Code, den ein Agent lesen kann – und keine ist wiederholbar, sodass eine Schleife die Policy nicht aushöhlen kann.

bei der Konstruktion

unsupported_operation

Die Policy benennt eine Capability, die der Vertrag nicht exponiert. Die Konstruktion wirft; die App schlägt fehl, bevor ein Agent sich verbindet.

zur Anfragezeit

policy_denied_source

Der Plan benennt eine Quelle außerhalb von allowedSources.

policy_denied_field

Der Plan berührt eine Spalte außerhalb der allowedFields dieser Quelle.

policy_denied_function

Der Plan ruft eine Funktion außerhalb von allowedFunctions auf.

source: "sqai"Jede Richtlinienablehnung kommt als strukturiertes, nicht wiederholbares Ergebnis an. Die Tools werfen nie.

IVVerwahrung

Ergebnisse werden verwahrt, nicht gespeichert.

Ein vollständiger Ergebnissatz gelangt nie in den Kontext des Modells. Er wird in einem verwalteten Speicher abgelegt und per ID referenziert; das Modell erhält eine deklarierte Stichprobe.

Der Ergebnisspeicher

Verwalteter Speicher · TTL 15 Min.

result_id
16 zufällige Bytes, base64url. Nicht erratbar, nie sequenziell.
authorization
Mandantengebunden. Ein falscher Mandant erhält result_not_found — der Speicher bestätigt keine Existenz.
ttl
15 Minuten. Danach ist der Eintrag gelöscht.
capacity
Maximal 256 Ergebnisse — 64 MB gesamt, 16 MB pro Mandant.

Der Speicher hält das Ergebnis. Das Modell liest eine Stichprobe und weist darauf hin.

Modellkontext-Obergrenzen

defaultLimit100Zeilenlimit, das gilt, wenn ein Plan keines festlegt
maxExecutionRows1.000absolute Obergrenze für Zeilen je Ausführung
maxRowsToModel25maximale Zeilenanzahl, die ein Modellkontext je erhält
maxCellsToModel250maximale Zellenanzahl, die ein Modellkontext je erhält
maxBytesToModel32.000maximale Datenmenge in Bytes, die ein Modell je erhält

Kürzungen werden im Ergebnis stets deklariert. Unvollständige Zeilen werden nie angezeigt — eine Zeile kommt vollständig oder gar nicht.

Prüfperspektive

17 %der Organisationen können die vollständige Tool-Aufrufsequenz eines Agenten im Nachhinein rekonstruieren

GDPR Artikel 30 und SOC 2 CC7.2 erwarten genau diese Aufzeichnungen.

Jede SQAI-Antwort trägt ihre eigene Rekonstruktion bereits in sich:

plan_hash · invocation_hash · computation_hash · contract_hash

Wiedergabe ist eine Abfrage, keine Untersuchung. Replay erklärt

VIFragen

Governance, direkt gefragt

Kann das Modell seinen eigenen Zugriff erweitern?

Nein. Die Richtlinie wird zum Zeitpunkt von createSQAI() festgelegt und vor der Ausführung prozessintern geprüft. Die Tool-Eingabe des Modells enthält kein allowed*-Feld — im Protokoll gibt es nichts zu erweitern. Eine Anfrage außerhalb der Richtlinie liefert ein strukturiertes policy_denied-Ergebnis.

Ist „nur lesend" ein Flag, das umgangen werden könnte?

Es ist kein Flag. Der exponierte Vertrag umfasst 4.574 schreibgeschützte Fähigkeiten; ein Schreibpfad fehlt konstruktionsbedingt — er ist nicht deaktiviert. Prompt-Injection kann ändern, was ein Modell anfragt — Fähigkeiten eines fixierten Vertrags kann sie nicht hinzufügen.

Welche Aufzeichnungen existieren für eine Prüfung nach GDPR Artikel 30 oder SOC 2 CC7.2?

Jedes Ergebnis enthält plan_hash, invocation_hash, computation_hash und contract_hash. Die exakte Berechnung kann lange im Nachhinein wiedergegeben und gegen diese Hashes verifiziert werden.

Wo liegen Ergebnisdaten nach einer Abfrage?

In einem mandantenautorisierten Ergebnisspeicher: IDs bestehen aus 16 zufälligen Bytes, Einträge verfallen nach 15 Minuten, und der Speicher ist auf 64 MB gesamt und 16 MB pro Mandant begrenzt. Der Modellkontext erhält höchstens 25 Zeilen, 250 Zellen und 32.000 Bytes — Kürzungen stets deklariert.

VIIWeiter

Die Antwort regeln.

Bringen Sie ein Schema und eine Compliance-Frage mit. Wir zeigen Ihnen die Richtlinie, die sie beantwortet.