Skip to content

Promptfoo Parity Matrix

AgentV authored YAML should be Promptfoo-compatible by default for ordinary eval surfaces: prompt matrices, test rows, vars, default test data, assertions, and provider matrices all use the same broad shape. The intended authored-config differences are environment, AgentV refs, and built-in AgentV providers. Export fills those gaps for supported AgentV-native pieces so Promptfoo can validate or load the resulting config without learning AgentV semantics.

Promptfoo-shaped providers entries can be strings such as openai:gpt-4.1-mini, complete package provider strings such as package:@agentv/promptfoo-providers:CodexCliProvider or package:@agentv/promptfoo-providers/codex-cli:Provider, provider option objects with id, label, config, env, prompts, transform, delay, and inputs, or provider maps such as { "openai:gpt-4": { label, config } }. Promptfoo-native provider IDs such as openai:responses:gpt-5.4, openai:codex-sdk, and openai:codex-app-server remain directly Promptfoo-readable.

For AgentV-only provider IDs such as agentv:codex-cli, use the Promptfoo export path instead of running the AgentV YAML directly with Promptfoo. The exporter lowers supported AgentV-only IDs to Promptfoo-readable provider references such as file://.agentv/generated/promptfoo/providers/codex-cli-provider.ts and exports supported host/filesystem environment recipes to a generated Promptfoo extension such as file://.agentv/generated/promptfoo/extensions/host-environment.ts:beforeAll. The exporter passes the resolved isolated workdir through provider config, default-test vars, and metadata. Docker environment export is intentionally unsupported initially and fails with a diagnostic instead of degrading isolation, image/context, mounts, services, resources, secrets, or provenance.

Use this matrix when translating a Promptfoo-style normal eval into AgentV YAML. It documents which surfaces align directly, which AgentV surfaces are cleaner greenfield extensions, and which Promptfoo surfaces are deferred until AgentV implements equivalent semantics directly.

DecisionMeaning
Align with PromptfooAgentV accepts the same concept, with snake_case where the field crosses the YAML boundary.
Keep AgentV divergenceAgentV intentionally uses a different shape because it is clearer for repo-native agent evals.
Keep AgentV extensionAgentV adds a capability that does not try to be Promptfoo-compatible.
Removed/rejected surfaceAgentV rejects this authored surface and points to the current supported field.
Defer/future-scopeAgentV does not accept the Promptfoo surface yet. Use an AgentV primitive or wait for direct implementation.
SurfacePromptfoo shapeAgentV shapeDecisionNotes
TypeScript config filepromptfooconfig.ts default export typed as Promptfoo UnifiedConfig.Explicit *.eval.ts or *.eval.mts default export typed as EvalConfig from @agentv/sdk.Keep AgentV divergenceAgentV does not accept promptfooconfig.ts by default because the config semantics intentionally diverge beyond provider declarations. Directory discovery includes explicit *.eval.ts and *.eval.mts config files, but not arbitrary helper .ts files.
Prompt matrixTop-level prompts rendered with each test’s vars.Top-level prompts rendered with tests[].vars and default_test.vars.Align with PromptfooThis is the canonical Promptfoo-compatible input shape in AgentV. Prompt entries can be inline strings, chat arrays, files, or generated prompt functions.
Test rowstests can be inline rows or a case-file reference; rows carry vars, assert, metadata, prompt/provider filters, and expected data through vars or assertion values.tests can be inline rows or a raw-case path; rows carry vars, assert, metadata, optional environment overrides, and run overrides.Align with PromptfooAgentV uses field-local file refs such as tests: file://..., prompts: file://..., and default_test: file://...; coding-agent testbeds use environment: file://.... There is no separate imports table.
Variablestests[].vars plus defaultTest.vars; prompt templates can reference top-level var names.tests[].vars plus default_test.vars; templates can use {{ name }} or {{ vars.name }}.Align with PromptfooPer-test vars override default vars by key.
Default testdefaultTest, inline object or file:// reference.default_test, inline object or file:// / ref:// reference.Align with PromptfooAgentV uses snake_case for YAML. Shared prompt matrix defaults belong in default_test.vars.
Reference answersPromptfoo stores reference data in assertion values or arbitrary vars such as vars.expected_output; llm-rubric consumes it when value includes {{ expected_output }}.Store reference answers in tests[].vars.expected_output or default_test.vars.expected_output, then consume them explicitly with assert or default_test.assert, usually type: llm-rubric and value: "Matches the reference answer: {{ expected_output }}".Align with PromptfooA var named expected_output is just data. AgentV does not create hidden grading behavior for that name. Authored direct expected_output at eval, default_test, or test level is rejected in current YAML.
Output transformdefaultTest.options.transform, tests[].options.transform, and assertion-level transform.default_test.options.transform, tests[].options.transform, and assertion-level transform.Align with PromptfooUse transform to shape provider output before grading, including file-output conversions such as .xlsx to text. tests[].options.transform overrides the inherited default transform; assertion-level transform is scoped to one grader.
Deprecated postprocessOlder Promptfoo configs may still mention postprocess.Rejected.Removed/rejected surfaceUse transform. AgentV intentionally does not adopt Promptfoo’s deprecated postprocess spelling.
Evaluate optionsevaluateOptions for runtime controls.evaluate_options for runtime controls.Align with PromptfooAgentV uses evaluate_options.repeat, evaluate_options.budget_usd, and evaluate_options.max_concurrency.
Authored concurrencyCommon Promptfoo usage includes runtime options such as maxConcurrency.evaluate_options.max_concurrency.Keep AgentV divergenceDo not author execution.max_concurrency or top-level workers in eval YAML. CLI --workers remains an operator override.
Provider selectionPromptfoo normal evals use providers; targets can alias providers in unified config.Use top-level providers for one or more systems under test.Align with PromptfooOld AgentV target/targets authoring is hard-rejected. Use CLI --provider/--providers for runtime selection.
Provider declarationsProvider entries can be strings, complete package provider strings such as package:@agentv/promptfoo-providers:CodexCliProvider or package:@agentv/promptfoo-providers/codex-cli:Provider, provider option objects with id, label, config, env, prompts, transform, delay, and inputs, or provider maps such as { "openai:gpt-4": { label, config } }.AgentV accepts the same provider declaration layer; id is the backend/spec and label is the stable AgentV selection and result identity. AgentV also accepts providers[].environment as an inline or file:// provider-local overlay on the authored environment recipe.Align with Promptfoo plus AgentV extensionPackage provider strings must include the exported class/function segment after the final colon. Promptfoo-native provider IDs remain directly Promptfoo-readable. providers[].environment is AgentV-only environment sugar, not a new canonical testbed contract; Promptfoo export must lower supported host setup through generated extensions or omit unsupported overlays clearly.
Provider-prompt mappingproviderPromptMap maps provider identities to prompt subsets.Rejected. Use explicit AgentV composition: separate eval suites/files for provider-specific prompt subsets, top-level prompts plus tests/default_test.vars, providers or CLI --provider, and tags/run metadata for grouping.Removed/rejected surfaceDo not author providerPromptMap or provider_prompt_map.
Direct authored inputPromptfoo prompt authoring normally goes through prompts plus vars.Top-level input and inline tests[].input are removed from normal authored eval YAML. External raw-case imports may still carry internal input rows for compatibility.Removed AgentV extensionAuthor prompt text, chat/system/user messages, and file-backed prompt content as prompts; put row data in tests[].vars and shared defaults in default_test.vars.
Authored preprocessorsNot Promptfoo’s canonical output-shaping surface.Rejected in current authored YAML.Removed/rejected surfaceUse transform at default_test.options, tests[].options, or the assertion that needs the shaped output. Historical versioned docs may still show old preprocessor examples.
Suite assertionsassert entries can be strings or typed assertion objects.assert entries can be strings, typed assertion objects, script graders, or AgentV extension graders.Align with PromptfooPlain strings become semantic rubric checks. Use assert, not assertions, in current authored eval YAML.
Assertion groupingtype: assert-set with child assert entries, optional config, metric, weight, and threshold.type: assert-set with child assert, optional config, metric names, weights, and parent threshold.Align with PromptfooParent config is inherited by child assertions; child config keys override shared parent keys. Without threshold, pass/fail follows nonzero-weight child assertions. With threshold, the weighted aggregate score determines pass/fail. type: composite is rejected; use assert-set.
Deterministic and rubric assertion vocabularyCommon Promptfoo types include contains, icontains, contains-any, contains-all, starts-with, regex, is-json, equals, latency, cost, javascript, python, webhook, similar, llm-rubric, and agent-rubric.AgentV accepts the implemented overlap, including contains, icontains, contains-any, contains-all, starts-with, regex, is-json, equals, latency, cost, javascript, python, webhook, similar, llm-rubric, and agent-rubric.Align with Promptfooagent-rubric runs through AgentV-native agent grader providers and writes a structured verdict file before fallback text parsing. Unsupported Promptfoo assertion names error instead of silently becoming custom assertion names.
Custom assertion terminologyPromptfoo calls normal eval custom logic assertions, with fixed code assertion types such as javascript, python, ruby, and webhook.defineAssertion() files in .agentv/assertions/ become reusable assertion type names.Keep AgentV extensionAgentV keeps assertion terminology and extends discovery to arbitrary assertion type names such as has-citation.
Script/custom grader terminologyPromptfoo custom code assertions are still assertion types.defineScriptGrader() powers command-backed graders referenced with type: script and command:.Keep AgentV divergenceUse script grader wording only for command-backed or LLM-backed scoring components that need explicit score and assertion-result control.
Skill assertionsPromptfoo includes skill-used for checking whether an agent invoked a named skill.type: skill-used and type: not-skill-used with value: <skill> or a matcher object.Align with PromptfooAgentV evaluates these against normalized tool-call and skill-use trace data.
Trajectory assertionsPromptfoo includes trajectory:tool-used, trajectory:tool-sequence, trajectory:tool-args-match, trajectory:step-count, and trajectory:goal-success.AgentV accepts the same assertion names over AgentV-normalized traces.Align with PromptfooUse these for tool presence, order, argument checks, step budgets, and LLM-judged goal success.
Other Promptfoo trace assertionsPromptfoo also includes tool-call-f1, trace-span-count, trace-span-duration, and trace-error-spans.Not accepted yet.Defer/future-scopeUse script assertions or execution-metrics when current AgentV primitives cover the requirement.
Coding-agent testbedsPromptfoo normal evals do not define a typed coding-agent testbed primitive.environment, usually inline or environment: file://..., plus distinct top-level env and lifecycle extensions.Keep AgentV extensionenvironment is an AgentV extension informed by Margin local-agent ergonomics and Harbor/Terminal-Bench Docker substrate evidence. Export supports the host/filesystem subset by generating Promptfoo setup extensions and passing the resolved workdir through config, vars, and metadata. Docker export is not supported yet and fails clearly instead of degrading isolation or provenance.
Run artifacts and inspectionPromptfoo owns its own result viewer and output formats.AgentV writes .agentv/results/<run_id>/ bundles with summary.json, .internal/index.jsonl, sidecars, and local Dashboard support.Keep AgentV extensionAgentV-owned bundles are the source of truth for compare, Dashboard, CI, and adapters. Phoenix is link-out correlation only through safe external trace metadata.
Grading result artifactsPromptfoo GradingResult uses aggregate pass, score, reason, recursive componentResults, optional assertion, optional namedScores, and optional metadata.AgentV persists the same concepts as pass, score, reason, recursive component_results, optional assertion, optional named_scores, and optional metadata.Align with PromptfooAgentV keeps split filesystem run bundles and snake_case persisted fields. Promptfoo import/export adapters may translate componentResults/namedScores to and from AgentV component_results/named_scores.
Compare commandPromptfoo has its own result comparison surfaces.agentv results compare <baseline-index.jsonl> <candidate-index.jsonl>.Keep AgentV extensionCompare consumes completed AgentV run indexes such as .agentv/results/<run_id>/.internal/index.jsonl.
CLI runtime filtersPromptfoo exposes filters such as prompt/provider/test subset flags.AgentV supports its current CLI filters and selection fields; full Promptfoo runtime-filter parity is future work.Defer/future-scopePrefer current AgentV CLI flags and authored selection fields until runtime-filter parity lands.
Wire-format casingPromptfoo config uses camelCase fields such as defaultTest and evaluateOptions.AgentV YAML, JSONL, artifacts, and CLI JSON use snake_case; internal TypeScript uses camelCase.Keep AgentV divergenceTranslate only at process boundaries. New public wire fields should be snake_case.
Hard-rejected stale AgentV fieldsNot applicable to Promptfoo.Removed AgentV-era fields such as top-level target, targets, execution, execution.target, execution.targets, top-level budget_usd, top-level repeat/runs, and composite are rejected.Keep AgentV divergenceUse top-level providers, evaluate_options, evaluate_options.repeat, and assert-set. Migration guidance lives in the eval migration skill reference.
description: Release-note summarization
providers:
- local-mini
prompts:
- id: direct
label: Direct
prompt: "Summarize {{ topic }} for {{ audience }}."
default_test:
vars:
audience: engineers
assert:
- type: llm-rubric
value: "Matches the reference answer: {{ expected_output }}"
evaluate_options:
max_concurrency: 2
tests:
- id: release-notes
vars:
topic: the July release notes
expected_output: concise release-note summary
assert:
- Identifies the most important change
- type: assert-set
metric: release_gate
threshold: 0.8
assert:
- type: contains
value: July
- type: llm-rubric
value: The answer is concise and accurate.
description: Repo-native direct task suite
environment: file://.agentv/environments/local-python.yaml
providers:
- id: codex-cli
label: codex-host
runtime: host
- id: claude-cli
label: claude-host
runtime: host
prompts:
- - role: user
content:
- type: file
value: ./instructions.md
- type: text
value: "{{ task }}"
tests:
- id: refund-policy
vars:
task: Update the refund policy handler.
expected_output: The handler supports the damaged-item exception.
assert:
- type: llm-rubric
value: "Matches the reference answer: {{ expected_output }}"
- type: trajectory:tool-used
value:
name: shell
min: 1
- type: script
command: [bun, run, graders/check-refund-policy.ts]