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:
resolveist konkret und liefert genau einen Treffer.findist das Verb für mehrere Treffer bei Platzhaltern, Vereinigungen, Prädikaten und positionaler Erweiterung.setakzeptiert nur konkrete Pfade oder Einfügemarkierungen; Platzhaltermuster werden vor dem Schreiben abgelehnt.validateparst einen Pfad ohne Dateisystemzugriff.emitdurchlä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.
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:--json, wenn
ein Aufrufer strukturierte Ausgaben benötigt, und --human, wenn eine Person das Ergebnis
prüft.
Funktionsweise
- Parst die Adresse
oc://in Slots: Datei, Abschnitt, Element, Feld und eine optionale Sitzungsabfrage. - Wählt den Dateitypadapter anhand der Erweiterung des Ziels aus (
.md,.jsonc,.json,.jsonl,.ndjson,.yaml,.yml,.lobster). - Löst die Slots anhand der Struktur dieses Dateityps auf: Markdown- Überschriften/-Elemente, JSONC-Objektschlüssel/-Arrayindizes, JSONL-Zeileneinträge oder YAML-Zuordnungs-/Sequenzknoten.
- Gibt für
setbearbeitete 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://
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/$lastbehandeltskills/email-drafterals 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).findakzeptiert diese;resolveundsetlehnen sie als mehrdeutig ab. - Positional —
$first/$lastwerden zum ersten/letzten Index oder deklarierten Schlüssel aufgelöst. - Ordinal —
#Nfür den N-ten Treffer in Dokumentreihenfolge. - Einfügemarkierungen —
+,+key,+nnnfür schlüssel-/indexbasierte Einfügungen (mitsetverwenden). - Sitzungsbereich —
?session=cron-dailyusw. Unabhängig von der Slot-Verschachtelung. Sitzungswerte sind unverarbeitet und werden nicht prozentdekodiert; sie dürfen keine Steuerzeichen oder reservierten Abfragetrennzeichen enthalten (?,&,%).
?, &, %) 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 übersetgeschrieben werden. - Bei JSONC-Blattschreibvorgängen wird der String-Wert in den vorhandenen Blatttyp
umgewandelt (
string, endlichesnumber,true/falseodernull). 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 derjsonc-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, endlichesnumber,true/falseodernull). YAML-Einfügungen verwenden die Dokument-API des mitgelieferten Paketsyamlfür Aktualisierungen von Mappings und Sequenzen. Fehlerhafte YAML-Dokumente mit Parserfehlern werden vor einer Änderung mitparse-errorabgelehnt.
--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
Rezepte nach Dateiart
Dieselben fünf Verben funktionieren für alle Arten; das Adressierungsschema entscheidet anhand der Dateierweiterung.Markdown
[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-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
[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
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.
+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:
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
setschreibt 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. pathkennt 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 überpathbearbeiten, ebenfalls per LKG verfolgt wird, entscheidet der nächste Lesevorgang der Konfiguration, ob sie übernommen oder wiederhergestellt wird; behandeln Sie eine Bearbeitung mitpathgenauso wie jeden anderen direkten Schreibvorgang in diese Datei.