CLI commands
Caminho
openclaw path
Acesso via shell ao esquema de endereçamento oc://: uma sintaxe de caminho com despacho por tipo para inspecionar e editar arquivos endereçáveis do espaço de trabalho (markdown, jsonc, jsonl, yaml/yml/lobster). Pessoas que hospedam suas próprias instâncias, autores de plugins e extensões de editores usam esse recurso para ler, localizar ou atualizar um local específico sem precisar criar manualmente um analisador para cada tipo de arquivo.
path é fornecido pelo plugin opcional integrado oc-path. Ative-o antes do primeiro uso:
openclaw plugins enable oc-pathOs verbos da CLI refletem o modelo de endereçamento:
resolveé concreto e corresponde a um único resultado.findé o verbo para múltiplas correspondências com curingas, uniões, predicados e expansão posicional.setaceita somente caminhos concretos ou marcadores de inserção; padrões com curingas são rejeitados antes da gravação.validateanalisa um caminho sem acessar o sistema de arquivos.emitfaz o ciclo completo de análise + emissão de um arquivo (diagnóstico de fidelidade de bytes).
Por que usar
O estado do OpenClaw está distribuído entre arquivos markdown editados por pessoas, configurações JSONC com comentários, logs JSONL somente para acréscimo e arquivos YAML de fluxos de trabalho/especificações. Scripts, hooks e agentes frequentemente precisam de apenas um pequeno valor desses arquivos: uma chave de frontmatter, uma configuração de plugin, um campo de registro de log, uma etapa YAML ou um item de lista sob uma seção nomeada.
openclaw path fornece a esses chamadores um endereço estável em vez de um grep, uma expressão regular ou um analisador específico para cada tipo de arquivo. O mesmo caminho oc:// pode ser validado, resolvido, pesquisado, simulado e gravado pelo terminal, mantendo automações específicas fáceis de revisar e reproduzir. Ele preserva o restante do arquivo, portanto, gravar uma única folha não altera seus comentários, finais de linha ou a formatação próxima.
Use-o quando o elemento desejado tiver um endereço lógico, mas o formato do arquivo variar:
- Um hook lê uma configuração de um JSONC com comentários sem perder os comentários ao gravar o valor de volta.
- Um script de manutenção encontra todos os campos de eventos correspondentes em um log JSONL sem carregar o log inteiro em um analisador personalizado.
- Um editor salta para uma seção ou item de lista em markdown por slug e, em seguida, renderiza a linha exata que foi resolvida.
- Um agente simula uma pequena edição no espaço de trabalho antes de aplicá-la, com os bytes alterados visíveis na revisão.
Não use openclaw path para edições comuns de arquivos inteiros, migrações complexas de configuração ou gravações específicas de memória; nesses casos, use o comando ou plugin responsável. path destina-se a pequenas operações em arquivos endereçáveis nas quais um comando de terminal reproduzível é preferível a outro analisador sob medida.
Como é usado
Leia um valor de um arquivo de configuração editado por pessoas:
openclaw path resolve 'oc://config.jsonc/plugins/github/enabled'Visualize uma gravação sem alterar o disco:
openclaw path set 'oc://config.jsonc/plugins/github/enabled' 'true' --dry-runEncontre registros correspondentes em um log JSONL somente para acréscimo:
openclaw path find 'oc://session.jsonl/[event=tool_call]/name'Enderece uma instrução em markdown por seção e item, em vez de pelo número da linha:
openclaw path resolve 'oc://AGENTS.md/runtime-safety/openclaw-gateway'Valide um caminho na CI ou em um script de verificação preliminar antes que o script faça uma leitura ou gravação:
openclaw path validate 'oc://AGENTS.md/tools/$last/risk'Esses comandos foram projetados para serem copiados em scripts de shell. Use --json quando um chamador precisar de saída estruturada e --human quando uma pessoa estiver inspecionando o resultado.
Como funciona
- Analisa o endereço
oc://em segmentos: arquivo, seção, item, campo e uma consulta opcional de sessão. - Escolhe o adaptador do tipo de arquivo com base na extensão do destino (
.md,.jsonc,.json,.jsonl,.ndjson,.yaml,.yml,.lobster). - Resolve os segmentos em relação à estrutura desse tipo de arquivo: títulos/itens markdown, chaves de objetos/índices de arrays JSONC, registros de linhas JSONL ou nós de mapas/sequências YAML.
- Para
set, emite os bytes editados pelo mesmo adaptador, para que as partes não alteradas do arquivo mantenham seus comentários, finais de linha e formatação próxima quando houver suporte para isso no tipo de arquivo.
resolve e set exigem um único destino concreto. find é o verbo exploratório: ele expande curingas, uniões, predicados e ordinais nas correspondências concretas que você pode inspecionar antes de escolher uma para gravar.
Subcomandos
| Subcomando | Finalidade |
|---|---|
resolve <oc-path> |
Exibir a correspondência concreta no caminho (ou "não encontrado"). |
find <pattern> |
Enumerar correspondências para um caminho com curinga / união / predicado. |
set <oc-path> <value> |
Gravar uma folha ou destino de inserção em um caminho concreto. Compatível com --dry-run. |
validate <oc-path> |
Apenas analisar; exibir a decomposição estrutural (arquivo / seção / item / campo). |
emit <file> |
Fazer o ciclo completo de análise + emissão de um arquivo (diagnóstico de fidelidade de bytes). |
Opções globais
| Opção | Aplica-se a | Finalidade |
|---|---|---|
--cwd <dir> |
resolve, find, set, emit |
Resolver o segmento de arquivo em relação a este diretório (padrão: process.cwd()). |
--file <path> |
resolve, find, set, emit |
Substituir o caminho resolvido do segmento de arquivo (acesso absoluto). |
--json |
todos | Forçar saída JSON (padrão quando stdout não é um TTY). |
--human |
todos | Forçar saída legível por pessoas (padrão quando stdout é um TTY). |
--value-json |
set |
Analisar <value> como JSON para substituir folhas JSON/JSONC/JSONL. |
--dry-run |
set |
Exibir os bytes que seriam gravados sem efetuar a gravação. |
--diff |
set (requer --dry-run) |
Exibir um diff unificado em vez dos bytes completos. |
validate aceita somente --json / --human; ele não acessa o sistema de arquivos, portanto, --cwd e --file não se aplicam.
Sintaxe de oc://
oc://FILE/SECTION/ITEM/FIELD?session=SCOPERegras dos segmentos: field requer item, e item requer section. Em todos os quatro segmentos:
- Segmentos entre aspas —
"a/b.c"preserva os separadores/e.. O conteúdo é literal em bytes;"e\não são permitidos dentro das aspas. O segmento de arquivo também reconhece aspas:oc://"skills/email-drafter"/Tools/$lasttrataskills/email-draftercomo um único caminho de arquivo. - Predicados —
[k=v],[k!=v],[k<v],[k<=v],[k>v],[k>=v]. Operadores numéricos exigem que ambos os lados possam ser convertidos em números finitos. - Uniões —
{a,b,c}corresponde a qualquer uma das alternativas. - Curingas —
*(um único subsegmento) e**(zero ou mais, recursivo).findos aceita;resolveesetos rejeitam por serem ambíguos. - Posicional —
$first/$lastsão resolvidos para o primeiro / último índice ou chave declarada. - Ordinal —
#Npara a enésima correspondência pela ordem do documento. - Marcadores de inserção —
+,+key,+nnnpara inserção por chave / índice (use comset). - Escopo da sessão —
?session=cron-dailyetc. É ortogonal ao aninhamento de segmentos. Os valores de sessão são brutos, sem decodificação percentual; eles não podem conter caracteres de controle nem delimitadores de consulta reservados (?,&,%).
Caracteres reservados (?, &, %) fora de segmentos entre aspas, predicados ou uniões são rejeitados. Caracteres de controle (U+0000-U+001F, U+007F) são rejeitados em qualquer lugar, inclusive no valor da consulta session.
formatOcPath(parseOcPath(path)) === path é garantido para caminhos canônicos. Parâmetros de consulta não canônicos são ignorados, exceto pelo primeiro valor não vazio de session=.
Limites rígidos: um caminho tem limite de 4096 bytes, no máximo 4 segmentos (arquivo/seção/item/campo), no máximo 64 subsegmentos separados por pontos em cada segmento e no máximo 256 níveis de travessia aninhada para caminhos JSON profundos. Separadamente, qualquer entrada de arquivo JSONC/JSON com mais de 16 MiB é recusada com um diagnóstico de análise, em vez de ser analisada, para qualquer verbo que carregue esse arquivo.
Endereçamento por tipo de arquivo
| Tipo | Extensões de arquivo | Modelo de endereçamento |
|---|---|---|
| Markdown | .md |
Seções H2 por slug, itens de lista por slug ou #N, frontmatter por meio de [frontmatter]. |
| JSONC/JSON | .jsonc, .json |
Chaves de objetos e índices de arrays; pontos dividem subsegmentos aninhados, exceto quando estão entre aspas. |
| JSONL | .jsonl, .ndjson |
Endereços de linhas de nível superior (L1, L2, $first, $last), seguidos por descida no estilo JSONC dentro da linha. |
| YAML/.lobster | .yaml, .yml, .lobster |
Chaves de mapas e índices de sequências; comentários e estilo de fluxo são tratados pela API de documentos YAML. |
resolve retorna uma correspondência estruturada: root, node, leaf ou insertion-point, com um número de linha baseado em 1. Os valores de folha são expostos como texto mais um leafType, para que autores de plugins possam renderizar visualizações sem depender do formato da AST específico de cada tipo.
Contrato de mutação
set grava um único destino concreto:
- Valores de frontmatter markdown e campos de item
- key: valuesão folhas de string. Inserções em markdown acrescentam seções, chaves de frontmatter ou itens de seção e renderizam um formato markdown canônico para o arquivo alterado. Corpos de seções não podem ser gravados integralmente por meio deset. - Gravações de folhas JSONC convertem o valor da string para o tipo existente da folha (
string,numberfinito,true/falseounull). Use--value-jsonquando a substituição de uma folha JSONC/JSON/JSONL precisar analisar<value>como JSON e puder alterar o formato, como ao substituir uma forma abreviada de referência de segredo em string por um objeto. Inserções em objetos e arrays JSONC analisam<value>como JSON e usam o caminho de edição dojsonc-parserpara gravações comuns de folhas, preservando comentários e a formatação próxima. - Gravações de folhas JSONL fazem a conversão como JSONC dentro de uma linha. A substituição de uma linha inteira e o acréscimo analisam
<value>como JSON. O JSONL renderizado preserva a convenção predominante de final de linha LF/CRLF do arquivo (votação por maioria entre as quebras de linha do arquivo, de modo que um arquivo predominantemente CRLF continue usando CRLF mesmo com alguns LFs isolados). - Gravações de folhas YAML convertem para o tipo escalar existente (
string,numberfinito,true/falseounull). Inserções YAML usam a API de documentos do pacoteyamlintegrado para atualizações de mapas/sequências. Documentos YAML malformados com erros do analisador são recusados antes da mutação comparse-error.
Use --dry-run antes de gravações visíveis para o usuário quando os bytes exatos forem importantes. Edições JSONC e YAML modificam o documento existente (por meio do jsonc-parser ou da API de documentos yaml), portanto, os bytes não alterados geralmente são preservados; o markdown reconstrói o arquivo com base em sua estrutura analisada em qualquer edição, o que pode normalizar a formatação incidental fora da folha alterada. Adicione --diff quando quiser visualizar uma alteração focada de antes/depois em vez do arquivo renderizado completo.
Exemplos
# Validar um caminho (sem acesso ao sistema de arquivos)openclaw path validate 'oc://AGENTS.md/Tools/$last/risk' # Ler uma folhaopenclaw path resolve 'oc://gateway.jsonc/version' # Pesquisa com curingaopenclaw path find 'oc://session.jsonl/*/event' --file ./logs/session.jsonl # Simular uma gravaçãoopenclaw path set 'oc://gateway.jsonc/version' '2.0' --dry-run # Simular uma gravação como um diff unificadoopenclaw path set 'oc://gateway.jsonc/version' '2.0' --dry-run --diff # Aplicar a gravaçãoopenclaw path set 'oc://gateway.jsonc/version' '2.0' # Ciclo completo com fidelidade de bytes (diagnóstico)openclaw path emit ./AGENTS.mdMais exemplos de gramática:
# Quote keys containing / or .openclaw path resolve 'oc://config.jsonc/agents.defaults.models/"anthropic/claude-opus-4-7"/alias' # Deep JSON/JSONC paths can use slash segments; they normalize to dotted subsegmentsopenclaw path set 'oc://openclaw.json/agents/list/0/tools/exec/security' 'allowlist' --dry-run # Replace a JSONC leaf with a parsed objectopenclaw path set 'oc://openclaw.json/gateway/auth/token' '{"source":"file","provider":"secrets","id":"/test"}' --value-json --dry-run # Predicate search over JSONC childrenopenclaw path find 'oc://config.jsonc/plugins/[enabled=true]/id' # Insert into a JSONC arrayopenclaw path set 'oc://config.jsonc/items/+1' '{"id":"new","enabled":true}' --dry-run # Insert a JSONC object keyopenclaw path set 'oc://config.jsonc/plugins/+github' '{"enabled":true}' --dry-run # Append a JSONL eventopenclaw path set 'oc://session.jsonl/+' '{"event":"checkpoint","ok":true}' --file ./logs/session.jsonl # Resolve the last JSONL value lineopenclaw path resolve 'oc://session.jsonl/$last/event' --file ./logs/session.jsonl # Resolve a YAML workflow stepopenclaw path resolve 'oc://workflow.yaml/steps/0/id' # Update a YAML scalaropenclaw path set 'oc://workflow.yaml/steps/$last/id' 'classify-renamed' --dry-run # Address markdown frontmatteropenclaw path resolve 'oc://AGENTS.md/[frontmatter]/name' # Insert markdown frontmatteropenclaw path set 'oc://AGENTS.md/[frontmatter]/+description' 'Agent instructions' --dry-run # Find markdown item fieldsopenclaw path find 'oc://SKILL.md/Tools/*/send_email' # Validate a session-scoped pathopenclaw path validate 'oc://AGENTS.md/Tools/$last/risk?session=cron-daily'Receitas por tipo de arquivo
Os mesmos cinco verbos funcionam em todos os tipos; o esquema de endereçamento faz o direcionamento com base na extensão do arquivo.
Markdown
<!-- frontmatter.md -->---name: drafterdescription: email drafting agenttier: core---## Tools- gh: GitHub CLI- curl: HTTP client- send_email: enabled$ openclaw path resolve 'oc://x.md/[frontmatter]/tier' --file frontmatter.md --humanleaf @ L4: "core" (string) $ openclaw path resolve 'oc://x.md/tools/gh/gh' --file frontmatter.md --humanleaf @ L9: "GitHub CLI" (string) $ openclaw path find 'oc://x.md/tools/*' --file frontmatter.md --human3 matches for oc://x.md/tools/*: oc://x.md/tools/gh → node @ L9 [md-item] oc://x.md/tools/curl → node @ L10 [md-item] oc://x.md/tools/send-email → node @ L11 [md-item]O predicado [frontmatter] endereça o bloco de frontmatter YAML; tools
corresponde ao título ## Tools por meio do slug, e as folhas dos itens mantêm
sua forma de slug mesmo quando a origem usa sublinhados (send_email torna-se
send-email).
JSONC
// config.jsonc{ "plugins": { "github": {"enabled": true, "role": "vcs"}, "slack": {"enabled": false, "role": "chat"} }}$ openclaw path resolve 'oc://config.jsonc/plugins/github/enabled' --file config.jsonc --humanleaf @ L4: "true" (boolean) $ openclaw path set 'oc://config.jsonc/plugins/slack/enabled' 'true' --file config.jsonc --dry-run--dry-run: would write 142 bytes to /…/config.jsonc{ "plugins": { "github": {"enabled": true, "role": "vcs"}, "slack": {"enabled": true, "role": "chat"} }}As edições em JSONC passam por jsonc-parser, portanto comentários e espaços
em branco são preservados após um set. Execute primeiro com --dry-run para
inspecionar os bytes antes de confirmar a alteração. Arquivos .json usam o
mesmo adaptador e caminho de edição que arquivos .jsonc.
JSONL
{"event":"start","userId":"u1","ts":1}{"event":"action","userId":"u1","ts":2}{"event":"end","userId":"u1","ts":3}$ openclaw path find 'oc://session.jsonl/[event=action]/userId' --file session.jsonl --human1 match for oc://session.jsonl/[event=action]/userId: oc://session.jsonl/L2/userId → leaf @ L2: "u1" (string) $ openclaw path resolve 'oc://session.jsonl/L2/ts' --file session.jsonl --humanleaf @ L2: "2" (number)Cada linha é um registro. Enderece por predicado ([event=action]) quando você
não souber o número da linha ou pelo segmento canônico LN quando souber.
Arquivos .ndjson usam o mesmo adaptador que arquivos .jsonl.
YAML
# workflow.yamlname: inbox-triagesteps: - id: fetch command: gmail.search - id: classify command: openclaw.invoke$ openclaw path resolve 'oc://workflow.yaml/steps/0/id' --file workflow.yaml --humanleaf @ L3: "fetch" (string) $ openclaw path set 'oc://workflow.yaml/steps/$last/id' 'classify-renamed' --file workflow.yaml --dry-run--dry-run: would write 99 bytes to /…/workflow.yamlname: inbox-triagesteps: - id: fetch command: gmail.search - id: classify-renamed command: openclaw.invokeO YAML usa a API Document do pacote yaml, em vez de um analisador
implementado manualmente. Assim, ciclos comuns de análise e emissão preservam
comentários e a estrutura de autoria, enquanto os caminhos resolvidos usam o
mesmo modelo de chave de mapa/índice de sequência que o JSONC. O mesmo adaptador
processa arquivos .yaml, .yml e .lobster.
Referência de subcomandos
resolve <oc-path>
Lê uma única folha ou Node. Curingas são rejeitados — use find para eles.
Encerra com 0 quando encontra uma correspondência, 1 quando não encontra
uma correspondência sem erros e 2 em caso de erro de análise ou padrão
recusado.
openclaw path resolve 'oc://AGENTS.md/tools/gh/risk' --humanopenclaw path resolve 'oc://gateway.jsonc/server/port' --jsonfind <pattern>
Enumera todas as correspondências de um padrão com curinga, predicado ou união.
Encerra com 0 quando há pelo menos uma correspondência e com 1 quando não há
nenhuma. Curingas no campo de arquivo são rejeitados com
OC_PATH_FILE_WILDCARD_UNSUPPORTED — forneça um arquivo específico (a expansão
de padrões para vários arquivos é uma funcionalidade futura).
openclaw path find 'oc://AGENTS.md/tools/**/risk'openclaw path find 'oc://session.jsonl/[event=action]/userId'openclaw path find 'oc://config.jsonc/plugins/{github,slack}/enabled'set <oc-path> <value>
Grava uma folha. Use com --dry-run para visualizar os bytes que seriam
gravados sem alterar o arquivo. Adicione --diff para visualizar uma
comparação unificada. Encerra com 0 após uma gravação bem-sucedida, 1 se o
substrato recusar a operação (por exemplo, se uma proteção de sentinela for
acionada) e 2 em caso de erros de análise.
openclaw path set 'oc://gateway.jsonc/version' '2.0' --dry-runopenclaw path set 'oc://gateway.jsonc/version' '2.0' --dry-run --diffopenclaw path set 'oc://gateway.jsonc/version' '2.0'openclaw path set 'oc://AGENTS.md/Tools/+gh/risk' 'low'O marcador de inserção +key cria o filho especificado caso ele ainda não
exista; +nnn e + isolado servem, respectivamente, para inserção por índice
e inserção ao final.
validate <oc-path>
Verificação somente de análise. Não acessa o sistema de arquivos. É útil para confirmar se um caminho de modelo está bem-formado antes de substituir variáveis ou para obter a decomposição estrutural durante a depuração:
$ openclaw path validate 'oc://AGENTS.md/tools/gh' --humanvalid: oc://AGENTS.md/tools/gh file: AGENTS.md section: tools item: ghEncerra com 0 quando válido, 1 quando inválido (com code e message
estruturados) e 2 em caso de erros nos argumentos.
emit <file>
Processa um arquivo em um ciclo completo pelo analisador e emissor correspondentes ao tipo. Em um arquivo válido, a saída deve ser idêntica à entrada em nível de bytes; qualquer divergência indica um erro do analisador ou o acionamento de uma sentinela. É útil para depurar o comportamento do substrato com entradas reais.
openclaw path emit ./AGENTS.mdopenclaw path emit ./gateway.jsonc --jsonCódigos de saída
| Código | Significado |
|---|---|
0 |
Sucesso. (resolve / find: pelo menos uma correspondência. set: gravação bem-sucedida.) |
1 |
Nenhuma correspondência, ou set rejeitado pelo substrato (sem erro no nível do sistema). |
2 |
Erro de argumento ou análise. |
Modo de saída
openclaw path detecta TTY: produz uma saída legível para humanos em um
terminal e JSON quando a saída padrão é enviada por pipe ou redirecionada.
--json e --human substituem a detecção automática.
Observações
setgrava bytes pelo caminho de emissão do substrato, que aplica automaticamente a proteção de sentinela de ocultação. Uma folha que contenha__OPENCLAW_REDACTED__(literalmente ou como substring) é recusada no momento da gravação.- A análise de JSONC e as edições de folhas usam a dependência
jsonc-parserlocal do Plugin, portanto comentários e formatação são preservados em gravações comuns de folhas, em vez de passar por um caminho de análise e renderização implementado manualmente. pathnão reconhece o rastreamento nem a recuperação da última configuração válida conhecida (LKG); esse ciclo de vida pertence a outro componente. Se um arquivo editado por meio depathtambém for rastreado como LKG, a próxima leitura da configuração decidirá se deve promovê-lo ou recuperá-lo; trate uma edição feita porpathda mesma forma que qualquer outra gravação direta nesse arquivo.