Darf ich vorstellen: Jev – eine zweite Meinung, die in Typen antwortet, nicht in Prosa
Agent! fragt jetzt Jev (TypeSafe System One), wie destruktiv ein Shell-Befehl ist, bevor er ausgeführt wird. Hier erfährst du, warum Jev ein Berater ist und kein weiterer LLM-Anbieter.
Ab heute erhält Agent! eine neue Sicherheitsebene: Jev, kurz für TypeSafe System One. Bevor ein Shell-Befehl ausgeführt wird, kann Agent! Jev jetzt eine einzige Frage stellen: Wie wahrscheinlich ist es, dass dieser Befehl Daten unwiderruflich zerstört? Liegt der Wert über deinem Schwellenwert, wird der Befehl verweigert.
Eingeführt wurde das mit Commit 337c94a2, „Jev-Entscheidungsebene (TypeSafe System One) hinzufügen“. Dieser Beitrag behandelt die wichtigste Designentscheidung: Jev ist kein weiterer LLM-Anbieter.
Warum nicht einfach ein anderes Modell fragen?
Agent! spricht bereits mit 23 LLM-Anbietern. Der einfache Weg wäre gewesen, ein „Sicherheitsmodell“ als weiteren Anbieter hinzuzufügen und es in natürlicher Sprache zu fragen, ob ein Befehl gefährlich aussieht. Das Problem ist, was zurückkommt: Prosa. „Dieser Befehl könnte riskant sein, abhängig von …“ ist kein Urteil. Am Ende parst du Sätze, um zu entscheiden, ob rm ausgeführt werden soll.
Jev funktioniert anders. Es beantwortet typisierte Fragen zu einem Zustand, mit einem Choice, einem Score oder einem Noul, einer typisierten „Keine“-Antwort. Es erzeugt keinen Text und auch keine Werkzeugargumente. Die Commit-Nachricht zieht daraus den Schluss: Jev „berät die bestehende Werkzeugschleife, statt als APIProvider zu agieren“.
Diese Trennung ist das gesamte Design:
- Dein gewähltes Modell handelt. Es plant, ruft Werkzeuge auf und schreibt Code.
- Jev urteilt. Es liefert eine Zahl, die Code mit einem Schwellenwert vergleichen kann.
Wo es sitzt
Jev ersetzt nichts. Die Reihenfolge der Prüfungen für jeden Shell-Befehl lautet:
ShellSafetyService.check: fest codierte Regeln, die katastrophale Befehle verweigern. Kein Modell beteiligt.- Jev: nur für Befehle, die Schritt 1 bereits bestanden haben, als zweite Meinung zu dem, was die Muster nicht erkennen können.
- Den Befehl ausführen.
Vom ersten Tag an deckt die Prüfung beide Shell-Ausführungspfade in ShellTools ab (executeTCC und executeTCCStreaming).
So gebaut, dass deine Aufgabe nie hängen bleibt
Ein Berater, der deinen Agenten blockieren kann, ist auf seine eigene Weise gefährlich. Wenn der Dienst ausfällt, hängt dann deine nächtliche Aufgabe? Die Antwort lautet hier: nein. JevAdvisor ist fail-open. Kein Schlüssel, ausgeschalteter Schalter oder ein Ausfall bedeuten „keine Meinung“, und der Befehl wird ausgeführt.
Fail-open ist allerdings nur dann sicher, wenn es sichtbar ist. Noch am ersten Tag sorgten zwei Folge-Commits dafür:
- „Den Berater beobachtbar machen“ (
e25384f3) fügte einen Nutzungs-Callback und Fehlerberichte hinzu, sodass eine fehlgeschlagene Prüfung protokolliert wird, statt stillschweigend wie „sicher“ auszusehen. - „Das Urteil protokollieren, nicht nur, dass Jev geantwortet hat“ (
d3c47e67) sorgte dafür, dass jede Prüfung das tatsächliche Ergebnis ausgibt: den Prozentsatz des Zerstörungsrisikos und ob der Befehl erlaubt oder verweigert wurde.
Der Client ist ein echtes Paket
Die erste Version nutzte einen selbst geschriebenen HTTP-Client: POST /v1/systemone für Fragen, GET /v1/models für die Modellliste, Bearer-Authentifizierung und Backoff bei 429- und 529-Antworten. Innerhalb weniger Stunden ersetzte 9e330357 ihn durch das Paket TypeSafeKit, und f3a817b8 nahm das Paket direkt ins Agent-Repository auf, damit ein Build nie davon abhängt, es herunterzuladen.
Einrichtung
Jev findest du in den Einstellungen, mit einem eigenen API-Schlüssel, der im Schlüsselbund in einem separaten Platz abseits der Anbieter gespeichert wird. Es gibt eine Modellauswahl, die aus /v1/models geladen wird, und einen Schalter für die Beratung. Schaltest du ihn aus, verhält sich Agent! genau wie zuvor.
Warum das wichtig ist
Agenten erhalten überall Shell-Zugriff, und die übliche Antwort in Sachen Sicherheit lautet: „Das Modell wird schon vorsichtig sein.“ Musterregeln sind besser, weil sie überprüfbar sind. Aber sie kennen nur die Muster, die jemand aufgeschrieben hat. Eine typisierte zweite Meinung bringt Urteilsvermögen ein, ohne Mehrdeutigkeit hinzuzufügen: Sie liefert eine Zahl, und der Code trifft die Entscheidung.
Wir werden den Standard-Schwellenwert feinjustieren und die Logs im Blick behalten. Wenn Jev etwas verweigert, das es nicht verweigern sollte, oder etwas übersieht, das es hätte erkennen müssen, eröffne ein Issue auf GitHub und füge die Log-Zeile bei.