Skip to main content
Set GRAPH_EVENTS=jsonl and graph writes its progress to stderr as one JSON object per line, instead of text for people. stdout still carries only the result, so you can read both from one run:
The stream covers graph plan run, graph ask and graph chat. Every event has an event field naming its type.

Events

tool_started

A tool call began.
string
The tool’s full name, such as github__tool__git_log.
object
The input the tool was called with, after templates were filled.

tool_finished

A tool call ended.
string
The tool’s full name.
integer
How long the call took, in milliseconds.
boolean
Whether the tool returned an error.

agent_round

An agent, or an agent step, started another round of model calls and tool calls.
integer
The round number.

synthesizing

A plan’s solver started writing its answer.

model_call

A model call finished.
enum<string>
chat for a chat model, decision for a decision model.
string
Where the call was made: the step’s path, such as E3 or triage/E1, or the model role when the call belongs to no step.
string
The model id.
integer
Uncached input tokens.
integer
Output tokens.
integer
Input tokens written to the provider’s prompt cache.
integer
Input tokens read from the provider’s prompt cache.
integer
How long the call took, in milliseconds.

usage_summary

What the whole run spent, sent once at the end, including when the run fails. graph skips it when the run made no model calls.
integer
Model calls in the run.
integer
Total uncached input tokens. output_tokens, cache_creation_input_tokens and cache_read_input_tokens sit alongside it.
number
Total cost in USD. Present only when pricing covers a model the run used.
object[]
The same totals per step, each with its path.
object[]
The same totals per model, each with its provider and model.
enum<string>
How graph reports progress and failures on stderr. Unset, stderr is for people.
Go to full reference