Skip to main content

Command Palette

Search for a command to run...

Referência

Formato de saída

A CLI do Cherri Code Agent oferece vários formatos de saída por meio da opção --output-format, quando usada com --print. Esses formatos incluem formatos estruturados para uso programático (json, stream-json) e um formato de texto simplificado para saída legível por humanos (text).

Formato JSON

O formato de saída json emite um único objeto JSON (seguido de uma nova linha) quando a execução é concluída com sucesso. Deltas e eventos de ferramentas não são emitidos; o texto é agregado ao resultado final.

Em caso de falha, o processo é encerrado com um código diferente de zero e grava uma mensagem de erro em stderr. Nenhum objeto JSON bem formado é emitido em casos de falha.

Resposta de sucesso

Em caso de sucesso, a CLI gera um objeto JSON com a seguinte estrutura:

{  "type": "result",  "subtype": "success",  "is_error": false,  "duration_ms": 1234,  "duration_api_ms": 1234,  "result": "<full assistant text>",  "session_id": "<uuid>",  "request_id": "<optional request id>"}
CampoDescrição
typeSempre "result" para resultados do Terminal
subtypeSempre "success" para conclusões bem-sucedidas
is_errorSempre false para respostas bem-sucedidas
duration_msTempo total de execução em milissegundos
duration_api_msTempo de solicitação da API em milissegundos (atualmente igual a duration_ms)
resultTexto completo da resposta do assistente (concatenação de todos os deltas de texto)
session_idIdentificador exclusivo da sessão
request_idIdentificador de solicitação opcional (pode ser omitido)

Formato JSON de stream

O formato de saída stream-json emite JSON delimitado por quebras de linha (NDJSON). Cada linha contém um único objeto JSON que representa um evento durante a execução. Esse formato agrega deltas de texto e gera uma linha por mensagem do assistente (a mensagem completa entre chamadas de ferramenta).

O stream termina com um evento result terminal em caso de sucesso. Em caso de falha, o processo é encerrado com um código diferente de zero, e o stream pode terminar antecipadamente sem um evento terminal; uma mensagem de erro é gravada em stderr.

Tipos de evento

Inicialização do sistema

Emitido uma vez no início de cada sessão:

{  "type": "system",  "subtype": "init",  "apiKeySource": "env|flag|login",  "cwd": "/absolute/path",  "session_id": "<uuid>",  "model": "<model display name>",  "permissionMode": "default"}

Mensagem do usuário

Contém o prompt enviado pelo usuário:

{  "type": "user",  "message": {    "role": "user",    "content": [{ "type": "text", "text": "<prompt>" }]  },  "session_id": "<uuid>"}

Mensagem do assistente

Emitida uma vez para cada mensagem completa do assistente (entre chamadas de ferramenta). Cada evento contém o texto completo desse segmento da mensagem:

{  "type": "assistant",  "message": {    "role": "assistant",    "content": [{ "type": "text", "text": "<complete message text>" }]  },  "session_id": "<uuid>"}

Quando --stream-partial-output está habilitado, os eventos do assistente podem incluir dois campos adicionais:

CampoDescrição
timestamp_msPresente nos deltas de streaming e nos flushes antes de chamadas de ferramenta. Ausente no flush final ao fim de um turno.
model_call_idPresente apenas no flush do buffer emitido antes de uma chamada de ferramenta. Use-o para identificar e ignorar texto duplicado.

Consulte a nota sobre saída parcial em streaming acima para saber como filtrar esses eventos.

Eventos de chamadas de ferramenta

As chamadas de ferramenta são rastreadas por eventos de início e conclusão:

Chamada de ferramenta iniciada:

{  "type": "tool_call",  "subtype": "started",  "call_id": "<string id>",  "tool_call": {    "readToolCall": {      "args": { "path": "file.txt" }    }  },  "session_id": "<uuid>"}

Chamada de ferramenta concluída:

{  "type": "tool_call",  "subtype": "completed",  "call_id": "<string id>",  "tool_call": {    "readToolCall": {      "args": { "path": "file.txt" },      "result": {        "success": {          "content": "file contents...",          "isEmpty": false,          "exceededLimit": false,          "totalLines": 54,          "totalChars": 1254        }      }    }  },  "session_id": "<uuid>"}

Tipos de chamadas de ferramenta

Ferramenta de leitura de arquivo:

  • Iniciada: tool_call.readToolCall.args contém { "path": "file.txt" }
  • Concluída: tool_call.readToolCall.result.success contém os metadados e o conteúdo do arquivo

Ferramenta de gravação de arquivo:

  • Iniciada: tool_call.writeToolCall.args contém { "path": "file.txt", "fileText": "content...", "toolCallId": "id" }
  • Concluída: tool_call.writeToolCall.result.success contém { "path": "/absolute/path", "linesCreated": 19, "fileSize": 942 }

Outras ferramentas:

  • Podem usar a estrutura tool_call.function com { "name": "tool_name", "arguments": "..." }

Resultado final do terminal

O evento final emitido após a conclusão bem-sucedida:

{  "type": "result",  "subtype": "success",  "duration_ms": 1234,  "duration_api_ms": 1234,  "is_error": false,  "result": "<full assistant text>",  "session_id": "<uuid>",  "request_id": "<optional request id>"}

Sequência de exemplo

Veja uma sequência NDJSON representativa que mostra o fluxo típico de eventos:

{"type":"system","subtype":"init","apiKeySource":"login","cwd":"/Users/user/project","session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff","model":"Claude 4 Sonnet","permissionMode":"default"}{"type":"user","message":{"role":"user","content":[{"type":"text","text":"Read README.md and create a summary"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"I'll read the README.md file"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"tool_call","subtype":"started","call_id":"toolu_vrtx_01NnjaR886UcE8whekg2MGJd","tool_call":{"readToolCall":{"args":{"path":"README.md"}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"tool_call","subtype":"completed","call_id":"toolu_vrtx_01NnjaR886UcE8whekg2MGJd","tool_call":{"readToolCall":{"args":{"path":"README.md"},"result":{"success":{"content":"# Project\n\nThis is a sample project...","isEmpty":false,"exceededLimit":false,"totalLines":54,"totalChars":1254}}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"Based on the README, I'll create a summary"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"tool_call","subtype":"started","call_id":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv","tool_call":{"writeToolCall":{"args":{"path":"summary.txt","fileText":"# README Summary\n\nThis project contains...","toolCallId":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv"}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"tool_call","subtype":"completed","call_id":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv","tool_call":{"writeToolCall":{"args":{"path":"summary.txt","fileText":"# README Summary\n\nThis project contains...","toolCallId":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv"},"result":{"success":{"path":"/Users/user/project/summary.txt","linesCreated":19,"fileSize":942}}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"Done! I've created the summary in summary.txt"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}{"type":"result","subtype":"success","duration_ms":5234,"duration_api_ms":5234,"is_error":false,"result":"I'll read the README.md fileBased on the README, I'll create a summaryDone! I've created the summary in summary.txt","session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff","request_id":"10e11780-df2f-45dc-a1ff-4540af32e9c0"}

Formato de texto

O formato de saída text fornece apenas a mensagem final do assistente, sem atualizações intermediárias de progresso nem resumos de chamadas de ferramenta. É o formato de saída mais adequado para scripts que precisam apenas da resposta final do agente.

Esse formato é ideal quando você quer apenas a resposta ou a mensagem final do agente, sem indicadores de progresso nem detalhes da execução de ferramentas.

Exemplo de saída

The command to move this branch onto main is `git rebase --onto main HEAD~3`.

Apenas a mensagem final do assistente (após a última chamada de ferramenta) é exibida, sem resumos das chamadas de ferramenta ou texto intermediário.

Observações

  • Cada evento é emitido como uma única linha terminada por \n
  • Eventos de thinking são suprimidos no modo de impressão e não aparecem em nenhum formato de saída
  • Novos campos podem ser adicionados ao longo do tempo de forma retrocompatível (os consumidores devem ignorar campos desconhecidos)
  • O formato json aguarda a conclusão antes de gerar os resultados
  • O formato stream-json gera mensagens completas do agente
  • A flag --stream-partial-output fornece deltas de texto em tempo real para streaming caractere por caractere (funciona apenas com o formato stream-json)
  • IDs de chamadas de ferramenta podem ser usados para correlacionar eventos de início e conclusão
  • Os IDs de sessão permanecem consistentes durante uma única execução do agente