Skip to main content
Pass a DevTools config to a run or continuation during development to append one JSON line per run to generations.jsonl in a local directory. Each line holds the run’s input, steps, tool activity, output, usage and gateway request IDs. Nothing is captured unless you turn it on.
Rust 0.2 has no DevTools capture. Use lifecycle hooks with run_with_events and write the events yourself.

Turn capture on from the environment

Without a DevTools config, capture turns on when PHASEO_DEVTOOLS=true. Files go to PHASEO_DEVTOOLS_DIR, or .phaseo-devtools in the working directory if that’s unset. This works the same in every language that has DevTools.

What gets written

Each entry’s type is agent.run for a run and agent.continue for a continuation. agent.continue is an entry type, not a method name: it’s what a call to continueRun() (TypeScript, PHP, Java), continue_run() (Python, Ruby), Continue (Go) or ContinueRun (C#) writes. An entry holds the run and agent IDs, the tool count, and the full run result: status, messages, steps with model, provider and gateway request IDs, tool activity, usage and output. A run that fails gets an entry with the error (error.message in Go and Java; structured failure details in TypeScript). In Java, write errors are ignored, so capture never fails a run.
Entries hold prompts, messages, application context, tool inputs and tool outputs in plain text. Keep the directory out of source control and production images, and don’t use it as an audit store. For production telemetry, use lifecycle hooks.
Last modified on November 5, 2026