Skip to main content

openclaw path

Shell-Zugriff auf das Adressierungsschema oc://: eine nach Art dispatchte Pfadsyntax zum Prüfen und Bearbeiten adressierbarer Workspace-Dateien (Markdown, JSONC, JSONL, YAML/YML/Lobster). Self-Hoster, Plugin-Autoren und Editor-Erweiterungen verwenden sie, um einen eng begrenzten Speicherort zu lesen, zu finden oder zu aktualisieren, ohne für jeden Dateityp einen eigenen Parser zu erstellen. path wird vom gebündelten optionalen Plugin oc-path bereitgestellt. Aktivieren Sie es vor der ersten Verwendung:
Die CLI-Verben entsprechen dem Adressierungsmodell:
  • resolve ist konkret und liefert genau einen Treffer.
  • find ist das Verb für mehrere Treffer bei Platzhaltern, Vereinigungen, Prädikaten und positionaler Erweiterung.
  • set akzeptiert nur konkrete Pfade oder Einfügemarkierungen; Platzhaltermuster werden vor dem Schreiben abgelehnt.
  • validate parst einen Pfad ohne Dateisystemzugriff.
  • emit durchläuft für eine Datei Parsen und Ausgeben vollständig (Diagnose der Byte-Treue).

Gründe für die Verwendung

Der OpenClaw-Zustand ist über manuell bearbeitetes Markdown, kommentierte JSONC- Konfigurationen, nur anhängbare JSONL-Protokolle und YAML-Workflow-/Spezifikationsdateien verteilt. Skripte, Hooks und Agenten benötigen aus diesen Dateien häufig nur einen kleinen Wert: einen Frontmatter-Schlüssel, eine Plugin-Einstellung, ein Feld eines Protokolleintrags, einen YAML-Schritt oder einen Aufzählungspunkt unter einem benannten Abschnitt. openclaw path stellt diesen Aufrufern eine stabile Adresse bereit, statt für jeden Dateityp eine einmalige grep-Suche, einen regulären Ausdruck oder einen Parser zu verwenden. Derselbe Pfad oc:// kann im Terminal validiert, aufgelöst, durchsucht, als Probelauf ausgeführt und geschrieben werden, wodurch eng begrenzte Automatisierungen überprüfbar und wiederholbar bleiben. Der Rest der Datei bleibt erhalten, sodass das Schreiben eines einzelnen Blatts dessen Kommentare, Zeilenenden oder benachbarte Formatierung nicht verändert. Verwenden Sie es, wenn das gewünschte Element eine logische Adresse besitzt, die Dateistruktur jedoch variiert:
  • Ein Hook liest eine Einstellung aus kommentiertem JSONC, ohne Kommentare zu verlieren, wenn er den Wert zurückschreibt.
  • Ein Wartungsskript findet jedes übereinstimmende Ereignisfeld in einem JSONL-Protokoll, ohne das gesamte Protokoll in einen eigenen Parser zu laden.
  • Ein Editor springt anhand des Slugs zu einem Markdown-Abschnitt oder Aufzählungspunkt und rendert anschließend genau die aufgelöste Zeile.
  • Ein Agent führt vor der Anwendung einer kleinen Workspace-Bearbeitung einen Probelauf aus, wobei die geänderten Bytes bei der Überprüfung sichtbar sind.
Verwenden Sie openclaw path nicht für gewöhnliche Bearbeitungen vollständiger Dateien, umfangreiche Konfigurationsmigrationen oder speicherspezifische Schreibvorgänge; dafür sollte der zuständige Befehl oder das zuständige Plugin verwendet werden. path ist für kleine, adressierbare Dateioperationen vorgesehen, bei denen ein wiederholbarer Terminalbefehl einem weiteren maßgeschneiderten Parser überlegen ist.

Verwendung

Einen Wert aus einer manuell bearbeiteten Konfigurationsdatei lesen:
Einen Schreibvorgang anzeigen, ohne die Festplatte zu verändern:
Übereinstimmende Einträge in einem nur anhängbaren JSONL-Protokoll finden:
Eine Anweisung in Markdown anhand von Abschnitt und Element statt anhand der Zeilen- nummer adressieren:
Einen Pfad in der CI oder einem Vorprüfungsskript validieren, bevor das Skript liest oder schreibt:
Diese Befehle sind zum Kopieren in Shell-Skripte vorgesehen. Verwenden Sie --json, wenn ein Aufrufer strukturierte Ausgaben benötigt, und --human, wenn eine Person das Ergebnis prüft.

Funktionsweise

  1. Parst die Adresse oc:// in Slots: Datei, Abschnitt, Element, Feld und eine optionale Sitzungsabfrage.
  2. Wählt den Dateitypadapter anhand der Erweiterung des Ziels aus (.md, .jsonc, .json, .jsonl, .ndjson, .yaml, .yml, .lobster).
  3. Löst die Slots anhand der Struktur dieses Dateityps auf: Markdown- Überschriften/-Elemente, JSONC-Objektschlüssel/-Arrayindizes, JSONL-Zeileneinträge oder YAML-Zuordnungs-/Sequenzknoten.
  4. Gibt für set bearbeitete Bytes über denselben Adapter aus, sodass unveränderte Teile der Datei ihre Kommentare, Zeilenenden und benachbarte Formatierung beibehalten, sofern der Dateityp dies unterstützt.
resolve und set erfordern ein einzelnes konkretes Ziel. find ist das explorative Verb: Es erweitert Platzhalter, Vereinigungen, Prädikate und Ordnungsangaben zu den konkreten Treffern, die Sie prüfen können, bevor Sie einen zum Schreiben auswählen.

Unterbefehle

Globale Flags

validate akzeptiert nur --json/--human; es erfolgt kein Dateisystemzugriff, daher gelten --cwd und --file nicht.

Syntax von oc://

Slot-Regeln: field erfordert item, und item erfordert section. Für alle vier Slots gilt:
  • Segmente in Anführungszeichen"a/b.c" bleibt über die Trennzeichen / und . hinweg erhalten. Der Inhalt ist byte-literal; " und \ sind innerhalb von Anführungszeichen nicht zulässig. Auch der Datei-Slot berücksichtigt Anführungszeichen: oc://"skills/email-drafter"/Tools/$last behandelt skills/email-drafter als einzelnen Dateipfad.
  • Prädikate[k=v], [k!=v], [k<v], [k<=v], [k>v], [k>=v]. Numerische Operatoren erfordern, dass beide Seiten in endliche Zahlen umgewandelt werden können.
  • Vereinigungen{a,b,c} stimmt mit jeder der Alternativen überein.
  • Platzhalter* (ein einzelnes Untersegment) und ** (null oder mehr, rekursiv). find akzeptiert diese; resolve und set lehnen sie als mehrdeutig ab.
  • Positional$first/$last werden zum ersten/letzten Index oder deklarierten Schlüssel aufgelöst.
  • Ordinal#N für den N-ten Treffer in Dokumentreihenfolge.
  • Einfügemarkierungen+, +key, +nnn für schlüssel-/indexbasierte Einfügungen (mit set verwenden).
  • Sitzungsbereich?session=cron-daily usw. Unabhängig von der Slot-Verschachtelung. Sitzungswerte sind unverarbeitet und werden nicht prozentdekodiert; sie dürfen keine Steuerzeichen oder reservierten Abfragetrennzeichen enthalten (?, &, %).
Reservierte Zeichen (?, &, %) außerhalb von Segmenten in Anführungszeichen, Prädikaten oder Vereinigungen werden abgelehnt. Steuerzeichen (U+0000–U+001F, U+007F) werden überall abgelehnt, einschließlich des Abfragewerts session. formatOcPath(parseOcPath(path)) === path ist für kanonische Pfade garantiert. Nicht kanonische Abfrageparameter werden mit Ausnahme des ersten nicht leeren Werts session= ignoriert. Feste Grenzwerte: Ein Pfad ist auf 4096 Bytes, höchstens 4 Slots (Datei/Abschnitt/Element/ Feld), höchstens 64 durch Punkte getrennte Untersegmente pro Slot und höchstens 256 verschachtelte Traversal-Ebenen für tiefe JSON-Pfade begrenzt. Unabhängig davon wird jede JSONC-/JSON-Dateieingabe über 16 MiB mit einer Parse-Diagnose abgelehnt, statt geparst zu werden, und zwar bei jedem Verb, das diese Datei lädt.

Adressierung nach Dateityp

resolve gibt einen strukturierten Treffer zurück: root, node, leaf oder insertion-point, mit einer 1-basierten Zeilennummer. Blattwerte werden als Text zusammen mit einem leafType bereitgestellt, sodass Plugin-Autoren Vorschauen rendern können, ohne von der AST-Struktur des jeweiligen Dateityps abhängig zu sein.

Mutationsvertrag

set schreibt ein konkretes Ziel:
  • Markdown-Frontmatter-Werte und - key: value-Elementfelder sind String-Blätter. Markdown-Einfügungen hängen Abschnitte, Frontmatter-Schlüssel oder Abschnittselemente an und rendern eine kanonische Markdown-Form für die geänderte Datei. Abschnittsinhalte können nicht als Ganzes über set geschrieben werden.
  • Bei JSONC-Blattschreibvorgängen wird der String-Wert in den vorhandenen Blatttyp umgewandelt (string, endliches number, true/false oder null). Verwenden Sie --value-json, wenn bei einer JSONC-/JSON-/JSONL-Blattersetzung <value> als JSON geparst werden und sich die Struktur ändern darf, etwa wenn eine String-Kurzform für eine Secret-Referenz durch ein Objekt ersetzt wird. Bei Einfügungen in JSONC-Objekte und -Arrays wird <value> als JSON geparst und für gewöhnliche Blattschreibvorgänge der jsonc-parser-Bearbeitungspfad verwendet, wobei Kommentare und die umgebende Formatierung erhalten bleiben.
  • JSONL-Blattschreibvorgänge führen innerhalb einer Zeile dieselbe Umwandlung wie JSONC durch. Beim Ersetzen und Anhängen ganzer Zeilen wird <value> als JSON geparst. Gerendertes JSONL behält die vorherrschende LF-/CRLF-Zeilenendekonvention der Datei bei (Mehrheitsentscheidung anhand der Zeilenumbrüche in der gesamten Datei, sodass eine überwiegend mit CRLF formatierte Datei auch bei einigen vereinzelten LFs CRLF beibehält).
  • Bei YAML-Blattschreibvorgängen wird in den vorhandenen Skalartyp umgewandelt (string, endliches number, true/false oder null). YAML-Einfügungen verwenden die Dokument-API des mitgelieferten Pakets yaml für Aktualisierungen von Mappings und Sequenzen. Fehlerhafte YAML-Dokumente mit Parserfehlern werden vor einer Änderung mit parse-error abgelehnt.
Verwenden Sie --dry-run vor benutzersichtbaren Schreibvorgängen, wenn die exakten Bytes entscheidend sind. JSONC- und YAML-Bearbeitungen ändern das vorhandene Dokument direkt (über jsonc-parser beziehungsweise die Dokument-API von yaml), sodass unveränderte Bytes normalerweise erhalten bleiben; Markdown erstellt die Datei bei jeder Bearbeitung aus ihrer geparsten Struktur neu, wodurch beiläufige Formatierungen außerhalb des geänderten Blatts normalisiert werden können. Fügen Sie --diff hinzu, wenn Sie die Vorschau als fokussierten Vorher-/Nachher-Patch statt als vollständige gerenderte Datei anzeigen möchten.

Beispiele

Weitere Grammatikbeispiele:

Rezepte nach Dateiart

Dieselben fünf Verben funktionieren für alle Arten; das Adressierungsschema entscheidet anhand der Dateierweiterung.

Markdown

Das Prädikat [frontmatter] adressiert den YAML-Frontmatter-Block; tools findet die Überschrift ## Tools anhand ihres Slugs, und Elementblätter behalten ihre Slug-Form bei, selbst wenn die Quelle Unterstriche verwendet (send_email wird zu send-email).

JSONC

JSONC-Bearbeitungen werden über jsonc-parser ausgeführt, sodass Kommentare und Leerraum einen set überstehen. Führen Sie zunächst --dry-run aus, um die Bytes vor der Übernahme zu prüfen. .json-Dateien verwenden denselben Adapter und Bearbeitungspfad wie .jsonc.

JSONL

Jede Zeile ist ein Datensatz. Adressieren Sie ihn über ein Prädikat ([event=action]), wenn Sie die Zeilennummer nicht kennen, oder über das kanonische Segment LN, wenn sie bekannt ist. .ndjson-Dateien verwenden denselben Adapter wie .jsonl.

YAML

YAML verwendet die Document-API des Pakets yaml statt eines selbst entwickelten Parsers. Dadurch bleiben bei gewöhnlichen Parse-/Ausgaberundreisen Kommentare und die Autorenstruktur erhalten, während aufgelöste Pfade dasselbe Modell aus Mapping-Schlüsseln und Sequenzindizes wie JSONC verwenden. Derselbe Adapter verarbeitet .yaml-, .yml- und .lobster-Dateien.

Unterbefehlsreferenz

resolve <oc-path>

Liest ein einzelnes Blatt oder einen einzelnen Node. Platzhalter werden abgelehnt – verwenden Sie dafür find. Beendet sich bei einem Treffer mit 0, bei einem regulären Fehltreffer mit 1 und bei einem Parsefehler oder abgelehnten Muster mit 2.

find <pattern>

Listet jeden Treffer für ein Platzhalter-, Prädikat- oder Vereinigungsmuster auf. Beendet sich bei mindestens einem Treffer mit 0, bei keinem Treffer mit 1. Platzhalter im Dateislot werden mit OC_PATH_FILE_WILDCARD_UNSUPPORTED abgelehnt – geben Sie eine konkrete Datei an (Globbing über mehrere Dateien ist eine spätere Funktion).

set <oc-path> <value>

Schreibt ein Blatt. Kombinieren Sie den Befehl mit --dry-run, um die zu schreibenden Bytes in einer Vorschau anzuzeigen, ohne die Datei zu verändern. Fügen Sie --diff für eine Vorschau als Unified Diff hinzu. Beendet sich nach einem erfolgreichen Schreibvorgang mit 0, mit 1, wenn das Substrat den Vorgang ablehnt (beispielsweise beim Auslösen einer Sentinel-Schutzbedingung), und bei Parsefehlern mit 2.
Die Einfügungsmarkierung +key erstellt das benannte untergeordnete Element, wenn es noch nicht vorhanden ist; +nnn beziehungsweise ein alleinstehendes + dienen zur indizierten Einfügung beziehungsweise zum Anhängen.

validate <oc-path>

Reine Parseprüfung. Kein Dateisystemzugriff. Nützlich, um zu bestätigen, dass ein Vorlagenpfad korrekt aufgebaut ist, bevor Variablen eingesetzt werden, oder um die strukturelle Aufschlüsselung zur Fehlerdiagnose anzuzeigen:
Beendet sich bei Gültigkeit mit 0, bei Ungültigkeit mit 1 (mit strukturierten Angaben für code und message) und bei Argumentfehlern mit 2.

emit <file>

Führt eine Datei durch den Parser und Emitter ihrer jeweiligen Art und wieder zurück. Bei einer fehlerfreien Datei sollte die Ausgabe byteidentisch mit der Eingabe sein; Abweichungen weisen auf einen Parserfehler oder das Auslösen einer Sentinel-Bedingung hin. Nützlich zur Fehlerdiagnose des Substratverhaltens bei realen Eingaben.

Exit-Codes

Ausgabemodus

openclaw path berücksichtigt TTY: menschenlesbare Ausgabe in einem Terminal, JSON, wenn stdout über eine Pipe weitergeleitet oder umgeleitet wird. --json und --human überschreiben die automatische Erkennung.

Hinweise

  • set schreibt Bytes über den Emit-Pfad des Substrats, der die Redaction-Sentinel-Schutzprüfung automatisch anwendet. Ein Blatt, das __OPENCLAW_REDACTED__ enthält (wortgetreu oder als Teilzeichenfolge), wird zum Schreibzeitpunkt abgelehnt.
  • Das JSONC-Parsen und Bearbeiten von Blättern verwendet die Plugin-lokale Abhängigkeit jsonc-parser, sodass Kommentare und Formatierung bei gewöhnlichen Schreibvorgängen an Blättern erhalten bleiben, anstatt einen selbst entwickelten Parser-/Neurendering-Pfad zu durchlaufen.
  • path kennt weder die Verfolgung noch die Wiederherstellung der zuletzt als funktionsfähig bekannten Konfiguration (LKG); dieser Lebenszyklus wird an anderer Stelle verwaltet. Wenn eine Datei, die Sie über path bearbeiten, ebenfalls per LKG verfolgt wird, entscheidet der nächste Lesevorgang der Konfiguration, ob sie übernommen oder wiederhergestellt wird; behandeln Sie eine Bearbeitung mit path genauso wie jeden anderen direkten Schreibvorgang in diese Datei.

Verwandte Themen