Skip to main content
When an evaluation request starts writing results, AgentCompass creates a dedicated run directory for it. In addition to task details and aggregate results, the directory contains these run records:
run_info.json records the request configuration and final state. params.json keeps the compact parameter set needed to save and re-aggregate results. progress.json provides the latest snapshot, progress.jsonl preserves the full event sequence, and the log records readable execution messages and errors.

When Files Are Created

Not every invocation leaves these files behind. The CLI and SDK check the request before creating its run directory; a failure at that point creates no run directory. agentcompass launch --dry-run also creates no output. A preparation error after the directory exists will usually leave the log and run_info.json. If error handling completes normally, AgentCompass also writes the final state and a run_finished event. If the process is forcibly terminated, the final state, the last progress events, or params.json may not have been written.

run_info.json

run_info.json answers two questions: which request configuration this evaluation used, and how the request ended. It is created before tasks are loaded, updated throughout the run, and updated with the final state when the request ends.

Top-Level Fields

request Structure

request is divided into model, Benchmark, Harness, Environment, execution, runtime, output, and metadata sections. Each component’s params is an open object whose fields depend on the selected component. Each network-policy object contains network_mode, which selects the network-access mode, and allowed_hosts, which lists permitted hosts. When AgentCompass writes JSON, it removes null values and empty objects or lists. An empty allowed_hosts may therefore be absent from the file. request is not a copy of the original command line. It also excludes process-level settings such as results_dir, the whole-request timeout, log levels, and Environment provider concurrency limits. To verify these settings, consult the invocation, configuration, and log together. See the Model, Benchmark, Harness, and Environment documentation for component-specific fields. When present, reused_from has these fields:

resolved_execution_plans Structure

resolved_execution_plans records the Environment, network policies, and Recipes resolved for each task attempt. Its structure is:
The plan summary is written after resolution but before the Environment is opened. It tells you what the attempt planned to use; it does not prove that the Environment was created successfully. It also excludes the complete Recipe-resolved image, snapshot, working directory, resources, and Environment provider parameters. A task reused from an existing run and not executed again receives no new plan entry. Its original plan remains in the reused task detail.

params.json

params.json stores only the parameters needed to write task details and regenerate summaries. AgentCompass rewrites it when saving task details or generating the final summary. The file may not exist if the request fails before either operation. Running agentcompass summary separately updates only the summary files and leaves an existing params.json unchanged. Unset fields directly under model, benchmark, and output are omitted; values such as empty strings can still remain inside nested params objects. params.json does not contain the Harness, Environment, execution controls, reuse settings, metadata, or complete Recipe-resolved configuration. You therefore cannot use it to reconstruct the complete evaluation configuration. When regenerating a summary, AgentCompass reads run_info.json.request first and uses params.json to fill in missing values. The two files serve these purposes:

progress.json

progress.json stores the latest run state and task counts. AgentCompass replaces the snapshot with the latest state whenever a progress event occurs, so a status page or script can poll it. Each active_tasks.<task-id> object contains category, phase, attempt, and updated_at. After a task starts but before it enters a specific phase, phase is running. A missing category or attempt number is stored as null.
completed_tasks means that execution ended normally; it does not mean that the benchmark marked the answer correct. Use task details and summary.md for correctness, scores, and benchmark metrics.

progress.jsonl

progress.jsonl stores the complete progress event stream. Each line is one JSON object, appended in emission order. To reconstruct a task’s phases, attempts, and retries, read this file instead of relying only on the latest snapshot. The CLI’s --progress auto|plain|none and the SDK’s progress="auto"|"plain"|"none" control only the live terminal display. They do not disable progress.json or progress.jsonl. When an SDK caller provides a custom progress reporter, file creation depends on that reporter’s output configuration. In the fields below, an orchestration means one launch invocation that schedules multiple evaluation requests. For a standalone request, the orchestration-related fields are null.

Fields on Every Event

All fields above are always serialized. Missing values are written as null, and payload is always an object.

Events and Event-Specific Fields

Matching task_started and task_finished events use the same payload.index and payload.total. These values are the sequence number and task count used during scheduling; they are not task identifiers. Always use task_id to identify a task. A multi-evaluation orchestration normally preserves positions in the original selected list, so reuse can leave gaps. A single evaluation request may instead renumber the remaining tasks. The fields in attempt_retry.payload mean: Current phase_changed.phase values are: Events from concurrent tasks can interleave. Filter by task_id and attempt to follow one task. Do not assume that every task enters the same phases, and do not infer dependencies from adjacent events belonging to different tasks. When agentcompass analysis runs, AgentCompass removes both existing progress files from the target result directory before recording the new analysis events. Without --override, the target is a newly created result copy, so the source directory is not modified. Re-analysis keeps the original request’s run_id, but it does not rebuild run_info.json, params.json, or the run-directory log. Those files continue to describe the original evaluation request.

logs/*.log

Each normally executed run or launch request creates one logs/YYYYMMDD_HHMMSS.log in its run directory. If that timestamp is already in use, AgentCompass advances it one second at a time until it finds an available name. A directory copied from another run can therefore contain multiple log files. Logging begins after the run directory is created, before run_info.json and later runtime checks. Earlier output from the CLI or SDK is not copied into this file. Each line uses this structure:
  • --file-log-level controls the minimum level in the run-directory log and defaults to DEBUG; --log-level controls console output independently.
  • Third-party loggers are filtered to WARNING and above by default, even when the file level is DEBUG.
  • The file contains messages recorded by AgentCompass and integrated components. It does not guarantee every shell command, provider response, or internal third-party event.
  • Logs are not structured results and are not inputs to summary generation, reuse, or analysis regeneration.
run_info.json and params.json redact recognized credential fields and remove underscore-prefixed runtime fields from parameter objects. This is not a general sensitive-data scanner, and it does not apply to logs. Custom fields, free-form text, progress events, and logs may still contain paths, URLs, task data, provider information, or tracebacks. Review and remove sensitive content before sharing a run directory.

Diagnose a Failed Run

Check the files in this order to narrow down a failure:
  1. Inspect progress.json for the request state and task counts. While the request is active, it also shows current phases.
  2. Filter progress.jsonl by task_id to reconstruct the failing task’s last phase, attempts, and retry path. A terminal snapshot clears active tasks, so use the event stream for the last phase after the request ends.
  3. Inspect run_info.json for the merged request, reuse source, and that attempt’s recipe and network-policy summary.
  4. If the failure involves result persistence or summary regeneration, inspect params.json.
  5. Search logs/*.log by task ID, phase, or exception type for detailed messages and tracebacks.
Progress files describe the running process. A write failure produces a warning but does not stop the evaluation, so these files can be stale or incomplete. A forced exit can also leave run_info.json and the progress files in different states. Use persisted task details and summaries to determine the final evaluation results. See Task Results for task-level fields and Summary and Analysis Results for aggregate metrics. See Troubleshooting Runs for a diagnosis workflow and Run Controls for log-level and progress-display options.