AI-Entwicklung

Wie NVIDIA OpenShell und Sentry JSON-Tool-Calls eines Agenten begrenzen (2026)

Ca. 16 Min.

Das Modell füllt nur JSON. Am 28. September 2026 hat NVIDIA die Grenze außerhalb des Modells gelegt: OpenShell liest den Tool-Namen von tools/call im Sandbox-Proxy, Sentry isoliert außerhalb des Bands auf BlueField-4. lookup_order zu erlauben heißt nicht, eine beliebige order_id zu erlauben.

Vor dem Lesen

Schicht Offizielle Tatsache Was den Aufruf stoppt
OpenShell Apache 2.0. Sandbox plus Kernel-Isolation. Der Proxy prüft den Request-Body, den die Sandbox an einen MCP-Server sendet Allow oder Deny nach Tool-Namen. Argumente werden nicht gematcht
Sentry Out-of-Band-Watchdog auf BlueField-4. Isoliert einen Bruch der Softwaregrenze in Millisekunden. Referenzdesign, optional Hardware stoppt die Ausführung. Sie füllt kein JSON
Policy-Prover Läuft im Gateway. Neue erreichbare Ziele mit Zugangsdaten, neue HTTP-Methoden oder Cloud-Metadaten blockieren die Auto-Freigabe Vor einer Policy-Änderung. Nicht das Laufzeit-Schema
Host-Schema Die Docs: ein erlaubtes Tool nimmt beliebige Argumente an Argumente vor der Ausführung prüfen

Fakten aus NVIDIA-Meldung und Technikblog vom 28. September 2026 sowie den OpenShell-Policy-Docs. Bestellung A-1042 ist fiktiv. Das JSON unten sind dieselben Felder wie das dokumentierte YAML, kein unveröffentlichtes Sentry-Drahtschema.

OpenShell blockt den Tool-Namen. Sentry blockt Ausführung jenseits der Grenze.

Die Open Agent Safety Platform sind zwei Teile, keine weitere Chat-Berechtigung. Der erste ist OpenShell, Apache 2.0, breit verfügbar. Es setzt einen Agenten auf einer CPU in eine Sandbox: Der Kernel regelt Dateien, Systemaufrufe und das Netz, der Proxy prüft HTTP, das die Sandbox verlässt. Ein MCP-Endpunkt nutzt protocol: mcp. Er prüft den Request-Body, den die Sandbox an den Server sendet, und kann nach Methode und nach dem Tool-Namen von tools/call erlauben oder verweigern. Der zweite ist Sentry, ein Referenzdesign. Es läuft auf einer BlueField-4-DPU, außerhalb des Bands, außer Reichweite des Agenten. Verlässt der Agent die Softwaregrenze, isoliert und stoppt Sentry ihn in Millisekunden. In einem Vera-Rubin-POD sitzt diese DPU auf dem einzigen Pfad des Knotens zum Modell. Drittens liegen Argumente in keiner der beiden Schichten. OpenShell schreibt, Argument-Matching sei noch nicht unterstützt. Ein erlaubtes Tool nimmt jedes Argument an, das der Server annimmt.

  • OpenShell: lookup_order kann erlaubt sein. refund_order steht in deny_rules.
  • Sentry: eine optionale Hardwareschicht. Sie korreliert Interaktionen, Policy-Entscheidungen und Tool-Zugriff und prüft Identität. Sie ersetzt die Tool-Liste nicht.
  • Der Host: ob A-1042 zulässig ist, bleibt eine Schema-Prüfung von arguments.

allow / ask / deny in einer Sitzung ist ein anderes Tor: das Berechtigungsmodell des Coding Agent. Die Form von MCP-tools/call: wie ein Coding Agent MCP aufruft. Berichte über Ausbrüche aus Evaluationsumgebungen stehen schon: die Agent-Sicherheitskrise und JSON-Validierung. Dieser Text erzählt diese Ereignisse nicht nach. Er trennt nur, wie OpenShell und Sentry einen Tool-Aufruf stoppen.

Der Proxy sieht tools/call, nicht die Prosa des Modells

OpenShell parst den JSON-RPC-Request, den der Prozess in der Sandbox an den MCP-Endpunkt sendet. Fiktive Bestellung. Der Hostname ist orders.example.com:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "lookup_order",
    "arguments": { "order_id": "A-1042" }
  }
}

Er prüft method und params.name. Standardmäßig muss der Tool-Name auch ^[A-Za-z0-9_.-]{1,128}$ entsprechen. Das ist mcp.strict_tool_names, Standard true. Wildcard-Matcher für Tools verlangen, dass der Schalter an bleibt. order_id in arguments gehört nicht zu dieser Policy. JSON-RPC-Antworten und MCP-Nachrichten vom Server zum Client auf Response-Body oder SSE werden durchgereicht und nicht für Policy geparst. Ein verweigerter Aufruf verweigert den ganzen Batch.

Die Policy nach Tool-Namen schreiben. Argumente auf ein anderes Tor legen.

Die Docs liefern YAML, vollständig mit openshell policy set. Inkrementelles policy update --add-endpoint akzeptiert mcp noch nicht. Das JSON unten sind dieselben Felder, damit Sie diffen können. Lookup ist erlaubt. Refund ist verweigert. mcp.allow_all_known_mcp_methods ist standardmäßig false, also steht jede Methode einzeln. Ohne mcp.versions gilt nur die Revision 2025-11-25:

{
  "version": 1,
  "network_policies": {
    "orders": {
      "name": "orders",
      "endpoints": [{
        "host": "orders.example.com",
        "port": 443,
        "path": "/mcp",
        "protocol": "mcp",
        "enforcement": "enforce",
        "mcp": {
          "strict_tool_names": true,
          "max_body_bytes": 65536
        },
        "rules": [
          { "allow": { "method": "initialize" } },
          { "allow": { "method": "notifications/initialized" } },
          { "allow": { "method": "tools/list" } },
          { "allow": { "method": "tools/call", "tool": "lookup_order" } }
        ],
        "deny_rules": [
          { "method": "tools/call", "tool": "refund_order" }
        ]
      }],
      "binaries": [{ "path": "/usr/bin/python3" }]
    }
  }
}

filesystem_policy und landlock werden bei der Sandbox-Erstellung festgeschrieben. network_policies lassen sich zur Laufzeit neu laden. Der Binärpfad gehört in die Regel: welches Programm welchen Endpunkt erreichen darf. Ausgehende Policy erlaubt private Netze standardmäßig nicht und autorisiert weder Loopback noch Link-Local noch die Cloud-Metadatenadresse. Nachdem lookup_order erlaubt ist, liegt das Argument-Tor beim Host:

{
  "type": "object",
  "properties": {
    "order_id": { "type": "string", "pattern": "^[A-Z]-\\d{4}$" }
  },
  "required": ["order_id"],
  "additionalProperties": false
}

Dieses Schema ist kein OpenShell-Feld. Nachdem der Proxy den Tool-Namen erlaubt, lehnt der Host ein fehlendes Feld, ein zusätzliches Feld und eine order_id ab, die nicht wie A-1042 geformt ist. Warum Schema ein Tor ist: warum KI JSON Schema braucht.

Vier Tore. Nicht zusammenlegen.

Alle heißen Sicherheit. Sie sehen verschiedene Objekte:

Tor Was es sieht
OpenShell-Proxy Den Request von der Sandbox nach orders.example.com:443/mcp. Methode, Tool-Name und aufrufende Binary. Nicht arguments.
Host-Schema Argumente von lookup_order. Typ, Pflicht, pattern. Ausführung folgt nach dem Tor.
allow / ask / deny des Coding Agent Shell, Git und Dateitools in der Sitzung. Diese Liste lebt im Harness. OpenShell ist eine weitere Schicht außerhalb der Sandbox.
Sentry Ausführung außerhalb des Bands auf BlueField-4. Ein Bruch wird isoliert. Die öffentlichen Texte veröffentlichen keine Sentry-JSON-Feldliste. Dieses Policy-Objekt ist diese Liste nicht.

Eine Policy-Änderung kann vor dem Wirken auch den Prover durchlaufen. Er markiert neue erreichbare Ziele mit Zugangsdaten, neue HTTP-Methoden und Zugriff auf Cloud-Metadaten. Ein Befund blockiert die Auto-Freigabe. Das CLI ist openshell-prover, geeignet für CI. Ein Agent darf über Policy Advisor einen engen Vorschlag einreichen. Die Freigabe liegt außerhalb der Sandbox. Wie Schleife und Zustand landen: Agent-Harness und JSON-Zustand.

Sechs Schritte, bevor Sie eine Regel weiten

Nicht damit beginnen, Sentry einzuschalten. Benennen Sie, welche Schicht welchen Aufruf gestoppt hat:

  1. Modell-JSON und Laufzeit-Policy trennen. Das Modell füllt params.name. OpenShell entscheidet, ob dieser Name die Sandbox verlassen darf.
  2. Dateisystem und Landlock bei der Erstellung schreiben. Diese Abschnitte laden nicht wie Netzregeln neu.
  3. Den MCP-Endpunkt ausfüllen. host, port, path: /mcp, protocol: mcp, enforcement: enforce. Diesen Host und Port nicht mit einem anderen geprüften Protokoll teilen.
  4. Tool-Namen einzeln listen. initialize, notifications/initialized, tools/list, dann tools/call mit lookup_order. refund_order nach deny_rules. strict_tool_names auf true lassen.
  5. Argumente einem Host-Schema geben. Der Proxy liest order_id nicht. Eine Erstattung in den Argumenten eines schon erlaubten Tools ist für diese Schicht unsichtbar.
  6. Vor dem Weiten diffen und den Prover laufen lassen. Sentry ist die optionale BlueField-4-Schicht. Ohne diese DPU die Isolation nicht als schon geschehen schreiben.

Wird ein Aufruf in einem JSON-RPC-Batch verweigert, ist der ganze Batch verweigert. Lookup und Refund nicht im selben Batch testen. Serverantworten liegen außerhalb dieser Policy.

Vor dem Weiten drei Objekte ausbreiten

Eine Verweigerung ist ein Tool-Name, ein Binärpfad, Host und Port oder eine Argumentform. Das trennen, bevor Sie den Prompt ändern.

  • Den tools/call neben der Policy formatieren, dann mit Schema prüfen prüfen, ob arguments das Tor passieren.
  • JSONPath extrahieren für $.params.name, $.method und $.arguments.order_id.
  • network_policies vor und nach dem Weiten JSON Diff. Den neuen Tool-Namen ansehen, bevor Sie den Prompt umschreiben.
  • Sandbox-Logs nennen verweigerten Host, Pfad und Binary. openshell logs --tail --source sandbox.
  • Tokens in Logs zuerst schwärzen. Bestellungen und Geheimnisse nicht in einen öffentlichen Formatierer kleben. JSONSort läuft im Browser.

Wenn die drei Objekte zusammenpassen, wissen Sie, welche Schicht refund_order gestoppt hat. Ein Sentry-Isolationsdatensatz ist keines dieser drei JSON-Objekte.

Häufige Fallen

  • OpenShell für allow / ask / deny der Sitzung halten. Diese Liste lebt im Harness. OpenShell ist Proxy und Kernel der Sandbox. Beide Policies behalten.
  • Annehmen, ein erlaubter Tool-Name habe order_id geprüft. Die Docs sagen, Argument-Matching sei noch nicht unterstützt. Das Host-Schema bleibt.
  • Nur die Modellantwort prüfen. Der Proxy sieht den Request-Body zum MCP-Endpunkt. Antworten und SSE werden heute nicht geparst.
  • Die Sandbox ihre eigene Policy freigeben lassen. Policy Advisor reicht nur einen Vorschlag ein. Die Freigabe liegt außerhalb. Ein Prover-Befund blockiert die Auto-Freigabe.
  • Sentry als JSON Schema schreiben. Die öffentlichen Texte beschreiben Isolation und Korrelation außerhalb des Bands auf BlueField-4. Ohne Feldliste keine erfinden.
  • Diesen Text nutzen, um einen Ausbruch nachzuerzählen. Diese Ereignisse stehen schon auf der Site. Hier geht es nur darum, wie eine Grenze einen tools/call stoppt.

FAQ

Kann Sentry OpenShell ersetzen?

Nein. OpenShell ist die Software-Laufzeit: Sandbox, Kernel und ausgehende Policy. Sentry ist die optionale Schicht außerhalb des Bands auf BlueField-4. Sie isoliert einen Bruch in Millisekunden. Ohne diese DPU haben Sie nur die OpenShell-Schicht. Beide sitzen außerhalb des Modells.

Liest der Proxy die Argumente von tools/call?

Nein. Er matcht Methode und Tool-Namen. Ein erlaubtes Tool nimmt beliebige Argumente an. Ein verweigerter Aufruf verweigert den ganzen Batch. Das Host-Schema prüft die Argumentform erneut.

Ist das dieselbe Datei wie die Berechtigungen von Cursor oder Claude Code?

Nein. Diese Dateien entscheiden, ob Shell, Git und Dateitools in einer Sitzung laufen dürfen. OpenShell entscheidet, ob eine Binary in der Sandbox einen MCP-Request an Host und Port senden darf. Das eine lebt im Harness. Das andere ist die Sandbox-Grenze.

Was blockiert der Prover?

Er prüft eine Policy formal, bevor sie wirkt. Neue erreichbare Ziele mit Zugangsdaten, neue HTTP-Methoden und Zugriff auf Cloud-Metadaten werden markiert, ein Befund blockiert die Auto-Freigabe. Er ersetzt weder die Laufzeitregeln für Tool-Namen noch das Schema.

Werden MCP-Antworten des Servers auch gefiltert?

Nach den aktuellen Docs nicht. JSON-RPC-Antworten und MCP-Nachrichten vom Server zum Client auf Response-Body oder SSE werden ohne Policy-Parsing durchgereicht. Prüfen Sie den Request, der die Sandbox verlässt.

Fazit

Diese NVIDIA-Plattform legt die Grenze des Tool-Aufrufs außerhalb des Modells. OpenShell erlaubt oder verweigert ein MCP-Tool nach Namen. Sentry isoliert Ausführung jenseits der Grenze auf BlueField-4. Der Host prüft Argumente weiter mit Schema.

Schreiben Sie auf, dass lookup_order in rules steht, refund_order in deny_rules und A-1042 im Host-Schema. Wenn diese drei zusammenpassen, ist der Aufruf tatsächlich begrenzt.

Weiterlesen

Änderungsprotokoll: Erstveröffentlichung