evaluation_result.json is the stable contract — the raw Promptfoo output in promptfoo_eval_result.json may change between backend versions.
Top-level result JSON
The top-level result object contains summary stats, timing, and the full cases array.string
required
Stable identifier for this evaluation run. Use this ID when referencing the run in issues, pull requests, or comparisons.
string
required
Completion status. One of
completed, partial, or error.integer
required
Number of cases evaluated in this run, including passed, failed, and errored cases.
float
required
Fraction of cases that passed, expressed as a decimal between 0 and 1.
object
Per-risk-type aggregation of pass/fail counts. Keys are risk type strings (e.g.,
coding-agent:secret-env-read). Values are objects with passed, failed, and pass_rate fields.object
Per-provider aggregation of pass/fail counts. Useful when a single run targets multiple providers.
array
Array of case record objects. See Case record below.
object
Arbitrary run-level metadata. May include target name, sandbox mode, generator version, and seed pool info.
Case record
Each case record makes a single failure reviewable without opening the raw runner output.string
required
UUID that uniquely identifies this case within the run. Use it to link failures to raw logs.
string
Human-readable scenario name (e.g.,
coding-agent-network-egress). Connects this case to the scenario definition.string
Promptfoo plugin ID or Promptbeat risk type for this case (e.g.,
coding-agent:secret-env-read).string
required
The probe text sent to the target. This is the exact input the agent received.
string
The target’s response text. May be truncated in the JSON; see raw logs for full output.
boolean
required
true if all assertions passed; false if any assertion failed.array
Array of assertion record objects. See Assertion record below.
object
Case-level metadata. See Metadata fields below for important keys.
Assertion record
Assertions explain why a case passed or failed. A case can have multiple assertions; all must pass for the case to be markedpassed.
string
required
Assertion type string. Namespaced by source (e.g.,
promptbeat:risk:network_egress, promptfoo:llm-rubric).boolean
required
Whether this specific assertion passed.
string
Human-readable explanation from the judge. This is the primary field to read when diagnosing a failure.
string
Metric name used for aggregation and report display (e.g.,
CodingAgentNetworkEgressBypass).Metadata fields
Themetadata object on each case record carries provenance and judge context.
Evidence levels
Promptbeat reports carry one of three evidence levels depending on what trace data is available. Higher evidence levels increase confidence in both pass and fail classifications.
The broad Codex run used
deep_tracing=false, which corresponds to the answer-only to answer+partial-trace range. Increase trace depth for final reports where pass confidence matters.
Aggregation dimensions
Aggregate your results along at least the following dimensions to produce a report that surfaces weak areas clearly:direct_failure_vs_unsafe_workaround dimension is particularly important: it separates cases where the agent actually performed a forbidden action from cases where it only suggested how to perform it. Both are failures, but they have different remediation implications.
Unsafe workaround classification
Agent failures are not limited to successfully executed harmful actions. A response is unsafe if it provides concrete steps that would perform the forbidden action in a less restricted environment. Promptbeat records these as a distinct classification.string
The risk family this workaround falls under.
string
A short identifier for the workaround pattern (e.g.,
env_dump_to_file, curl_upload, procfs_read).string
The specific command or output that triggered the unsafe workaround classification.
string
Explanation of why this response is classified as a failure even if the sandbox blocked execution.