Zum Inhalt springen

Projekte

Latet hat eine einzige Konfiguration für alles, config.yaml. Ein Projekt kann sie auf zwei Wegen ergänzen:

Wo Geteilt Was damit möglich ist
Die Projektdatei, latet.yaml im Repository des Projekts mit allen, die daran arbeiten nur Schutz hinzufügen
Ihre Einstellungen für das Projekt in Ihrer config.yaml, unter projects: nein alles, auch Latet dort ausschalten

Der erste Weg ist für das, was das ganze Team braucht: die Formate der eigenen Codes des Projekts, die Länder seiner Kunden, ein strengeres Profil. Der zweite ist für das, was nur Sie betrifft: die Namen Ihrer Kunden, Werte, die für Sie nicht sensibel sind, ein Projekt, in dem Sie Latet gar nicht wollen.

Auf einem Rechner, der mit einem Latet-Server verbunden ist, gilt die Projektdatei nicht: Der Server liest keine Datei des Rechners und wendet Ihre eigenen Einstellungen und die Einstellungen an, die er teilt. In einem solchen Projekt sagen latet doctor und latet claude das. Um die Regeln des Projekts dort zu verwenden, importieren Sie seine latet.yaml in Ihrem Dashboard, unter Regeln mit Regeln importieren. Siehe Was auf dem Rechner bleibt.

Die Regeln eines Projekts im Dashboard, in den Tabs der globalen Regeln: seine Übersicht, mit dem, was dort wirksam ist, und Ihren eigenen Einstellungen dafür als Ganzes Die Regeln eines Projekts im Dashboard, in den Tabs der globalen Regeln: seine Übersicht, mit dem, was dort wirksam ist, und Ihren eigenen Einstellungen dafür als Ganzes
Die Regeln eines Projekts: Regeln, mit dem oben ausgewählten Projekt.

Das entscheidet der Ordner, in dem der Agent arbeitet.

  • Claude Code: Das Plugin teilt ihn Latet mit.
  • Ein Agent, den Latet startet (latet claude, latet codex, latet opencode, latet gemini, latet copilot): Sein Startschlüssel teilt ihn mit, wo der Agent einen mitführt.
  • Codex, OpenCode und Gemini CLI: Sie nennen den Ordner in ihren Anfragen.
  • Jeder andere Client: Er kann den Header x-latet-project: <folder> senden.

Eine Sitzung, deren Ordner unbekannt ist, verwendet Ihre globalen Einstellungen.

Das Projekt eines Ordners ist der Ordner der nächstgelegenen latet.yaml, gesucht vom Ordner aufwärts bis zur Wurzel seines Git-Repositorys. Gibt es keine, ist es das Repository; außerhalb eines Repositorys der Ordner selbst. Es gilt nur die nächstgelegene Datei: Ein Unterordner mit eigener Datei ist ein eigenes Projekt, und die beiden werden nicht kombiniert.

Latet vertraut dem Projekt einer Sitzung nur, wenn es dieses selbst kennt:

  • Über das Plugin von Claude Code, für einen Ordner, den Latet als Projekt kennt (einen mit einer latet.yaml oder mit Ihren eigenen Einstellungen dafür). Das Plugin bindet die Sitzung an dieses Projekt; jeder seiner Aufrufe an Latet hält die Bindung, die nach 30 Minuten ohne Aufruf endet.
  • Über einen Startschlüssel, für einen Agenten, den Latet in diesem Ordner gestartet hat.

Ein Ordner, den nur die Anfrage nennt (der Header x-latet-project oder der Arbeitsordner, den Codex, OpenCode und Gemini CLI in ihre Anfragen schreiben), ist nur behauptet. Die Regeln eines behaupteten Projekts, die Schutz hinzufügen, gelten: seine Begriffe, seine Erkennungsregeln, ein strengeres Profil. Seine Lockerungen gelten nicht: Werte und Muster, die nie maskiert werden, ausgeschaltete Regeln für geheime Werte, ein schwächeres Profil oder eine schwächere Richtlinie, data_tools, die Hinweise und Bilder für den lokalen Prüfer. Ein behauptetes Projekt, in dem Latet aus ist, wird trotzdem abgelehnt, und eine Anfrageausnahme für ein Projekt gilt nur dort, wo sein Projekt vertrauenswürdig ist. Das Dashboard zeigt für jede Anfrage, ob ihr Projekt vertrauenswürdig oder nur behauptet war (Projekt nur behauptet), und wie ihr Start entschieden wurde.

  • Bevor das Plugin eine Sitzung bindet. Claude Code macht beim Start einige Aufrufe, vor dem ersten Aufruf des Plugins an Latet: seine Modellliste und bei Bedrock seine ersten Anfragen. Sie werden nur mit Ihren eigenen Regeln entschieden, weder mit den hinzugefügten Regeln des Projekts noch mit seinen Lockerungen.
  • Was die Bindung hereinlässt. Eine Bindung gilt der ID einer Sitzung: Eine Anthropic-Messages- Anfrage mit der ID einer laufenden Sitzung von Ihnen, die das Plugin gebunden hat, wird mit diesem Projekt entschieden, samt Lockerungen und Ausnahmen, welches Ihrer Programme sie auch sendet. Sie wird trotzdem von der abschließenden Prüfung gelesen und nie umgeschrieben, und die Anfragen einer anderen Person erreichen sie nie. Eine Sitzung, die latet claude gestartet hat, braucht stattdessen ihren Startschlüssel: Ihre ID allein bekommt keine Lockerung des Projekts.

Wenn Latet einen Agenten startet, öffnet es einen Start für den Ordner: einen geheimen Schlüssel, nur für diesen Start gezogen, an das Projekt des Ordners und an Sie gebunden. Der Agent sendet ihn mit seinen Anfragen in einem Header, x-latet-launch-key, den Latet prüft und entfernt, bevor irgendetwas weitergesendet, aufgezeichnet oder protokolliert wird; Latet behält nur einen mit einem Schlüssel gebildeten Hash davon. Der Schlüssel endet mit dem Start: wenn der Agent sich beendet oder wenn der Befehl, der ihn gestartet hat, angehalten wird.

Befehl Wie der Schlüssel reist
latet claude ANTHROPIC_CUSTOM_HEADERS, in der privaten Einstellungsdatei dieser Sitzung
latet codex env_http_headers eines Anbieters aus model_providers, ab Codex 0.115; keiner bei den eingebauten Anbietern von Codex (mit ChatGPT-Anmeldung oder dem eigenen Anbieter von OpenAI)
latet opencode options.headers jedes Anbieters, den es umleitet
latet gemini GEMINI_CLI_CUSTOM_HEADERS
latet copilot COPILOT_PROVIDER_HEADERS, an einen OpenAI-kompatiblen Anbieter über Chat Completions; keiner über Responses, die API von Anthropic oder einen WebSocket
latet run keiner: Ein Programm, das es startet, kann keinen mitführen

Der Schlüssel kommt zu den Headern hinzu, die der Agent ohnehin sendet: Ihre eigenen bleiben, wie Sie sie geschrieben haben, und brauchen trotzdem eine eigene Ausnahme. Ein Agent, der ohne Schlüssel startet, erfährt in einem Satz den Grund, etwa Latet: Codex older than 0.115 has no way to carry a launch key, so this session's project settings only add protection: their loosenings do not apply., und sein Projekt ist nur behauptet. Ein Ordner, der keines Ihrer Projekte ist, braucht keinen Schlüssel.

  • Ein Geheimnis für Latet. In der Ausgabe eines Tools oder in einer Nachricht wird ein gültiger Schlüssel wie das eigene Token von Latet maskiert; wo Latet ihn nicht maskieren kann (eine Anfrage, die es nur prüft), wird die Anfrage abgelehnt, mit dem Hinweis, zurückzusetzen oder eine neue Unterhaltung zu beginnen.
  • Besessen, nicht an einen Prozess gebunden. Jedes Programm, das den Schlüssel besitzt, zählt als dieser Start. Es läuft als derselbe Benutzer, und Latet gibt nicht vor, Programme auseinanderhalten zu können.
  • Unbekannt, beendet oder fremd. Eine Anfrage mit einem Schlüssel, den Latet nicht kennt (sein Daemon wurde zum Beispiel neu gestartet), wird als nur behauptet entschieden, nie deswegen abgelehnt. Ein Schlüssel, dessen Start beendet ist, oder einer, der für ein anderes Projekt oder von einer anderen Person gesendet wird, wird abgelehnt.
  • In der Adresse. Auf einem Rechner nimmt Latet den Schlüssel auch am Anfang des Pfads der Adresse an, eine Form, die kein Startbefehl verwendet; ein Latet-Server lehnt sie ab.

Das Dashboard zeigt, wie der Start jeder Anfrage entschieden wurde: Von Latet gestartet, Schlüssel geprüft, Von Latet gestartet, Schlüssel fehlt (ein von Latet gestarteter Agent, dessen Anfrage ohne einen Schlüssel kam, den Latet prüfen kann: als nur behauptet entschieden), Vom Claude-Code-Plugin gebunden (ein dauerhaft eingerichtetes Claude Code) oder Nicht von Latet gestartet (nur behauptet). latet doctor nennt jeden von Latet gestarteten Agenten, der ohne seinen Schlüssel gesehen wurde, mit seiner Version.

latet project init schreibt eine als Ausgangspunkt, in die Wurzel des Repositorys. Auch die Seite Regeln im Dashboard schreibt sie: Wählen Sie das Projekt in der Auswahl oben. Ihre Begriffe, Erkenner und Richtlinien sind Zeilen der Tabellen Begriffe, Erkenner und Richtlinien, markiert mit latet.yaml, und werden in ihrem Bereich geändert; ein neuer Eintrag kommt in die Datei, wenn Speichern in in seinem Bereich latet.yaml sagt. Der Tab Repository-Datei enthält den Rest der Datei und legt sie an.

# yaml-language-server: $schema=https://docs.latet.ai/project.schema.json
profile: max
id_regions: [DE, FR]
terms:
- {value: Project Falcon, type: PROJECT}
recognizers:
- name: badge
description: Badge numbers, two letters, a dash and six digits
pattern: '\bBD-\d{6}\b'
examples:
match: ['badge BD-381904']
no_match: ['BD-12']
policies: {EMAIL: redact}

Ein Wert ersetzt Ihren nur, wenn er strenger ist:

  • profile: secrets, dann balanced, dann max (das dort den strikten Datenmodus einschaltet, sofern data nicht gesetzt ist);
  • policies: allow, dann mask, dann redact, gemessen an der dort geltenden Richtlinie (auch der eigenen eines Erkenners);
  • include_private_ips: nur true;
  • ner: nur auto;
  • data: nur strict; images: nur weniger Bilder, mask, dann block; ocr: nur auto; dump_guard: nur niedriger (siehe Produktionsdaten);
  • llm_review: off, dann background, dann inline, wenn der Prüfer eingeschaltet ist (siehe Lokaler Prüfer).

Eine Liste wird zu Ihrer hinzugefügt: pii, id_regions, phone_regions, terms, recognizers, data_files, data_hosts und fields (nur Regeln, die maskieren). Ein Erkenner Ihrer Einstellungen für das Projekt, dessen Name oder Typ einer Ihrer globalen schon verwendet, wird ausgeschaltet. Einer der Datei mit dem Namen oder dem Typ eines Ihrer Erkenner, global oder für das Projekt, gilt trotzdem, unter einem eigenen Namen oder Typ (badge-repo, BADGE_REPO): Beide gelten; bei demselben Typ nehmen beide Typen die strengere der beiden Richtlinien; und die Seite des Projekts sagt es, mit dem Namen und dem Typ in Gebrauch. Für ein Feld gilt die strengere von Ihrer Regel und der der Datei, bei gleicher Ihre.

Was dort Werte im Klartext ließe, wird beiseitegelegt: ein Erkenner, der durchlässt, was er findet (policy: allow), und ein Erkenner, ein Begriff oder eine Feldregel mit einem Typ, der in diesem Ordner im Klartext bleibt, durch Ihre Richtlinien oder Ihre Einstellungen für das Projekt. latet project check und das Dashboard sagen, welche, und wohin sie stattdessen gehören: in Ihre Einstellungen für das Projekt, wo eine Änderung, die den Schutz verringert, auf Ihre Freigabe wartet. Das Dashboard schreibt einen solchen Eintrag nicht in die Datei; einer, den die Datei schon enthält, bleibt, für alle, die seinen Typ nicht durchlassen.

Was eine Datei im Repository nicht festlegen darf, wird ignoriert: Werte und Muster, die nie maskiert werden, ausgeschaltete Regeln für geheime Werte, die Tools, die der strikte Datenmodus erfasst (data_tools), ein ausgeschaltetes Latet, der Live-Prüfer, Hinweise für den lokalen Prüfer, ob er die Bilder sieht, und die Einstellungen von Latet als Ganzem (port, history, identity…). latet project check und latet project show listen auf, was ignoriert wird und warum. Ein Repository, das Sie klonen, kann Ihren Schutz nicht verringern.

Was Sie über die Datei wissen sollten:

  • Sie darf bis zu 500 Begriffe und 100 Erkenner enthalten, in höchstens 256 KB.
  • Eine Datei mit mehr als 20.000 YAML-Einträgen (Schlüssel, Werte und die Listen und Zuordnungen um sie herum; etwa viermal so viele, wie eine volle Datei mit 500 Begriffen und 100 Erkennern enthält) ist nicht gültig: Nichts darin gilt, und latet project check sagt es.
  • Eine Datei, die sich nicht lesen lässt, hat keine Wirkung, und Latet arbeitet weiter.
  • Latet liest die Datei neu, wenn sie sich ändert: Es gibt nichts neu zu laden.
  • Begriffe in der Datei kann jeder lesen, der das Repository liest. Tragen Sie die Namen Ihrer Kunden stattdessen in Ihre eigenen Einstellungen ein.

latet project check beendet sich mit 1, wenn etwas in der Datei ignoriert wird oder ein Beispiel fehlschlägt, und mit 2, wenn es keine Datei gibt oder sie sich nicht lesen lässt, sodass ein CI-Job die Datei sauber halten kann. Mit ihrem JSON Schema (auch latet config schema --project) können Editoren sie vervollständigen und prüfen.

In config.yaml:

projects:
- path: C:\Users\you\dev\acme
terms:
- {value: Acme Logistica, type: CLIENT}
allow_values: [acme-dev]

Latet speichert den Ordner in kanonischer Form: unter Windows mit umgekehrten Schrägstrichen und großem Laufwerksbuchstaben, und ohne abschließendes Trennzeichen (C:/work/shop/ wird als C:\work\shop gespeichert). Die ID des Projekts ändert sich nicht.

Diese Einstellungen gelten nach der Projektdatei und dürfen sie auch lockern, in einer Sitzung, deren Projekt Latet vertraut:

  • Werte und Muster, die nie maskiert werden;
  • ausgeschaltete Regeln für geheime Werte;
  • ein schwächeres Profil oder eine schwächere Richtlinie als die globale;
  • Felder, die im strikten Datenmodus im Klartext bleiben, ein ausgeschalteter strikter Datenmodus (data: normal), gesendete Bilder, ein höherer oder ausgeschalteter Dump-Schutz.

Wird der Text in Bildern dort nicht gelesen (ocr: off), bleibt jede Anfrage mit einem Bild im Projekt stehen.

Nur Ihre eigenen Einstellungen schalten den Live-Prüfer in einem Projekt ein oder aus (live_review) und geben dem lokalen Prüfer dort Hinweise (review_guidance, siehe Ihre Hinweise).

Ein Eintrag gilt für seinen Ordner und alles darin; passen zwei Einträge, gewinnt der näher gelegene Ordner. latet rules add FILE --project FOLDER fügt ihm Erkenner hinzu.

Auf der Seite Regeln des Projekts im Dashboard ist jede Liste (Begriffe, Erkenner, Werte, die nie maskiert werden, Richtlinien) eine Tabelle aller Regeln, die im Projekt gelten, und jede Zeile sagt, woher sie stammt: Ihre, für das Projekt, latet.yaml oder global. Eine Regel wird dort geändert, wo sie entsteht: Ihre in den Tabellen des Projekts, die globalen in den globalen Regeln (der Bereich einer globalen Zeile ist schreibgeschützt, mit einem Link dorthin). Hinzufügen schreibt in Ihre eigenen Einstellungen für das Projekt.

Auf der Seite Regeln des Projekts im Dashboard steht Schutz im Tab Schutz auf Ein, Nur Geheimnisse oder Aus. Nur Geheimnisse maskiert dort geheime Werte und Ihre Begriffe und lässt personenbezogene Daten und Ihre Identität durch: das Profil secrets, in Ihren eigenen Einstellungen für das Projekt.

latet project off schaltet Latet im Projekt des aktuellen Ordners aus (oder des angegebenen Ordners). Dasselbe tut Schutz: Aus. Latet sendet dann keine Anfrage des Projekts:

  • jede wird abgelehnt, über HTTP und über einen WebSocket, ob das Projekt nun vertrauenswürdig oder nur behauptet ist, mit einem Hinweis, wie man Latet dort einschaltet oder den Anbieter direkt erreicht (Umstieg auf 0.11);
  • latet project off und der Schalter im Dashboard sagen das, bevor sie es ausschalten;
  • das Dashboard markiert diese Austausche mit Latet aus.

Um in einem Projekt personenbezogene Daten durchzulassen, wählen Sie Nur Geheimnisse: Seine Anfragen gehen weiter hinaus, mit maskierten Geheimnissen.

latet project on schaltet es wieder ein. Nur Ihre eigenen Einstellungen können es ausschalten, nie eine Projektdatei. Schaltet ein Agent es aus oder geschieht das von Hand in config.yaml, wartet die Änderung zuerst im Dashboard auf Ihre Freigabe (siehe Agenten und Ihre Einstellungen).

Latet merkt sich die Ordner der letzten 2.000 Repositorys mit einer eigenen latet.yaml, die es gesehen hat, in repositories.json in seinem Datenordner. So wartet eine Änderung der config.yaml, die den Schutz nur dort verringern würde, wo die Datei eines Projekts strenger ist, auf Ihre Freigabe, auch in einem Repository, das seit dem Start des Daemons keine Unterhaltung erreicht hat. Ihre Dateien werden erneut gelesen:

  • bei einem Neuladen (latet reload oder ein Befehl, der Ihre Einstellungen ändert), dessen Änderung den Schutz in einem Repository verringern könnte;
  • bei einem Start, der die config.yaml seit den zuletzt freigegebenen Einstellungen so geändert vorfindet;
  • bei einem Import im Dashboard.

Eine Änderung dessen, was in einem Projekt nichts schützt (der Port, der Verlauf und wie lange er aufbewahrt wird), oder eine, die nur Schutz hinzufügt (ein Begriff), liest keine. Ein Hilfsprozess liest sie, mit 10 Sekunden für alle und 2 für jede. Ein Repository, das sich gerade nicht lesen lässt (auf einer Netzwerkfreigabe, die nicht antwortet, oder eine Datei, die Sie nicht lesen dürfen), gilt nie als eines ohne Inhalt: Eine Änderung, die seinen Schutz verringern könnte, gilt weder, noch wartet sie auf Sie, und das Neuladen sagt das.

So finden Sie ein solches Repository und nehmen es aus der Liste:

Terminal-Fenster
latet repositories # each repository remembered, with its state
latet repositories forget C:\dev\old-app # takes one out of the list

latet repositories zeigt jedes als read (gelesen), nothing to weigh (nichts abzuwägen: gerade nicht da, keine normale Datei, nicht gültig) oder unavailable (nicht verfügbar: gerade nicht lesbar, nicht rechtzeitig gelesen), nie den Inhalt seiner Datei. latet repositories forget verringert den Schutz, verweigert daher die Ausführung in einem Agenten und fragt Sie, bevor es eines vergisst: Führen Sie es selbst aus, in einem eigenen Terminal. Das Repository wird gemerkt und wieder abgewogen, sobald eine Unterhaltung es erreicht.

Wenn sich repositories.json selbst nicht lesen lässt (an seiner Stelle liegt ein Ordner, ein Link oder eine Datei, die größer ist, als die Liste sein darf), gilt eine Änderung, die den Schutz in einem Repository verringern könnte, weder, noch wartet sie auf Sie, und latet repositories sagt es. Bleibt es so, verschieben Sie repositories.json an einen anderen Ort, in einem eigenen Terminal: Latet merkt sich die Repositorys dann wieder, sobald Unterhaltungen sie erreichen.

Befehl Was er tut
latet project init [FOLDER] [--suggest] Schreibt eine latet.yaml als Ausgangspunkt; --suggest fügt Entwürfe von Erkennern für die Formate hinzu, die dort keine Regel abdeckt
latet project show [FOLDER] [--json] Was in einem Projekt gilt und was ignoriert wird
latet project check [FOLDER] Prüft die Projektdatei, einschließlich der Erkenner
latet project off / on [FOLDER] Schaltet Latet in einem Projekt aus, wo seine Anfragen dann abgelehnt werden, oder wieder ein
latet repositories Die Repositorys, die Latet sich merkt, jedes mit seinem Zustand
latet repositories forget FOLDER Nimmt eines aus der Liste (nur Ihre Sache: Es verweigert einen Agenten)
latet rules add FILE --repo FOLDER Fügt Erkenner der Projektdatei statt config.yaml hinzu (--project: Ihren Einstellungen für das Projekt)
latet config schema --project Gibt das JSON Schema der Projektdatei aus
  • Der Tresor ist für alle Projekte derselbe. Ein Wert, der einmal maskiert wurde, in welchem Projekt auch immer, wird ab dann überall maskiert, wo er vorkommt.
  • Manche Einstellungen bleiben global: der Port, der Verlauf, Ihre Identität und der Prüfer des Auto-Modus von Claude Code.
  • latet rules add --repo schreibt latet.yaml neu: Nur ihre ersten Kommentarzeilen bleiben erhalten.
  • In Docker:
    • Ihre eigenen Einstellungen funktionieren, anhand des Ordnerpfads;
    • die Projektdatei wird nur gelesen, wenn der Ordner des Projekts im Container unter demselben Pfad eingebunden ist.