agentv 5.0.0-next.1 → 5.2.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +239 -53
  2. package/dist/{agentv-provider-AYXH7WLW-NJRC6UQX.js → agentv-provider-AYXH7WLW-6YZKZ7PS.js} +2 -2
  3. package/dist/{artifact-writer-QD52FC56.js → artifact-writer-SN6UNL5G.js} +15 -8
  4. package/dist/{chunk-GZJMODLW.js → chunk-3S6A2RKR.js} +45880 -30542
  5. package/dist/chunk-3S6A2RKR.js.map +1 -0
  6. package/dist/{chunk-6Q56CEXV.js → chunk-3X357HS4.js} +7900 -8985
  7. package/dist/chunk-3X357HS4.js.map +1 -0
  8. package/dist/{chunk-6JVM4GJI.js → chunk-46K2OET3.js} +187 -80
  9. package/dist/chunk-46K2OET3.js.map +1 -0
  10. package/dist/{chunk-IJEZFZJR.js → chunk-7BGERE6L.js} +2 -2
  11. package/dist/chunk-7BGERE6L.js.map +1 -0
  12. package/dist/{chunk-UG4JHZYM.js → chunk-ALVZQUZP.js} +670 -1427
  13. package/dist/chunk-ALVZQUZP.js.map +1 -0
  14. package/dist/{chunk-RCIEHFQ2.js → chunk-PEUTJS7B.js} +3 -3
  15. package/dist/{chunk-5H446C7X.js → chunk-QMRVH5ZP.js} +2 -8
  16. package/dist/{chunk-IBI7A5RP.js → chunk-T4AD3H3Y.js} +3444 -2251
  17. package/dist/chunk-T4AD3H3Y.js.map +1 -0
  18. package/dist/cli.js +8 -9
  19. package/dist/cli.js.map +1 -1
  20. package/dist/dashboard/assets/{index-D5_8DE_B.js → index-DNgf3qJ2.js} +1 -1
  21. package/dist/dashboard/assets/index-D_bokML8.css +1 -0
  22. package/dist/dashboard/assets/index-r_jSJmlw.js +121 -0
  23. package/dist/dashboard/index.html +2 -2
  24. package/dist/{dist-KJ6PELQY.js → dist-DEPJOMCA.js} +74 -60
  25. package/dist/{docker-workspace-ZJ2ESVBI-6UDETQII.js → docker-workspace-NNK4Z6FR-QRTIG6TM.js} +3 -3
  26. package/dist/{exec-MYPAJJP7-C5HD5WG5.js → exec-4HFFRQ3B-AXDMJNLJ.js} +3 -3
  27. package/dist/index.js +8 -9
  28. package/dist/{interactive-2WMVAASS.js → interactive-36ZNMQB2.js} +13 -29
  29. package/dist/interactive-36ZNMQB2.js.map +1 -0
  30. package/dist/skills/agentv-bench/SKILL.md +38 -34
  31. package/dist/skills/agentv-bench/agents/analyzer.md +6 -6
  32. package/dist/skills/agentv-bench/agents/comparator.md +4 -5
  33. package/dist/skills/agentv-bench/agents/grader.md +4 -4
  34. package/dist/skills/agentv-bench/references/autoresearch.md +3 -3
  35. package/dist/skills/agentv-bench/references/description-optimization.md +2 -2
  36. package/dist/skills/agentv-bench/references/environment-adaptation.md +10 -10
  37. package/dist/skills/agentv-bench/references/eval-yaml-spec.md +51 -30
  38. package/dist/skills/agentv-bench/references/migrating-from-skill-creator.md +4 -4
  39. package/dist/skills/agentv-bench/references/subagent-pipeline.md +13 -12
  40. package/dist/skills/agentv-eval-migrations/SKILL.md +33 -0
  41. package/dist/skills/agentv-eval-migrations/references/breaking-changes.md +1012 -0
  42. package/dist/skills/agentv-eval-review/SKILL.md +6 -3
  43. package/dist/skills/agentv-eval-review/scripts/lint_eval.py +1 -1
  44. package/dist/skills/agentv-eval-writer/SKILL.md +380 -246
  45. package/dist/skills/agentv-eval-writer/references/{config-schema.json → config.schema.json} +6 -5
  46. package/dist/skills/agentv-eval-writer/references/custom-evaluators.md +23 -18
  47. package/dist/skills/agentv-eval-writer/references/eval.schema.json +9852 -0
  48. package/dist/skills/agentv-eval-writer/references/python-helpers.md +8 -8
  49. package/dist/skills/agentv-eval-writer/references/rubric-evaluator.md +21 -22
  50. package/dist/skills/agentv-trace-analyst/SKILL.md +4 -4
  51. package/dist/templates/.agentv/targets.yaml +41 -40
  52. package/dist/{ts-eval-loader-RE43OAGX-AMRCUKBZ.js → ts-eval-loader-OMG2JBHP-OP5RR7A3.js} +5 -4
  53. package/package.json +19 -4
  54. package/dist/chunk-6JVM4GJI.js.map +0 -1
  55. package/dist/chunk-6Q56CEXV.js.map +0 -1
  56. package/dist/chunk-76FOHROU.js +0 -96
  57. package/dist/chunk-76FOHROU.js.map +0 -1
  58. package/dist/chunk-GZJMODLW.js.map +0 -1
  59. package/dist/chunk-HSHTTN6C.js +0 -565
  60. package/dist/chunk-HSHTTN6C.js.map +0 -1
  61. package/dist/chunk-IBI7A5RP.js.map +0 -1
  62. package/dist/chunk-IJEZFZJR.js.map +0 -1
  63. package/dist/chunk-LRULMAAA.js +0 -1711
  64. package/dist/chunk-LRULMAAA.js.map +0 -1
  65. package/dist/chunk-R3CXYNTN.js +0 -1238
  66. package/dist/chunk-R3CXYNTN.js.map +0 -1
  67. package/dist/chunk-UG4JHZYM.js.map +0 -1
  68. package/dist/chunk-VQ2ZO7XJ.js +0 -2098
  69. package/dist/chunk-VQ2ZO7XJ.js.map +0 -1
  70. package/dist/chunk-XALGXSKB.js +0 -21
  71. package/dist/chunk-XALGXSKB.js.map +0 -1
  72. package/dist/dashboard/assets/index-BVMrdN8a.js +0 -119
  73. package/dist/dashboard/assets/index-DZWXfWsv.css +0 -1
  74. package/dist/esm-NNMQYIKT.js +0 -32
  75. package/dist/esm-R77SNOF5.js +0 -65
  76. package/dist/esm-RVQPUGWH.js +0 -1207
  77. package/dist/esm-RVQPUGWH.js.map +0 -1
  78. package/dist/esm-TTEMJEVV.js +0 -933
  79. package/dist/esm-TTEMJEVV.js.map +0 -1
  80. package/dist/esm-ZADQ4XQH-QUFGGZL4.js +0 -924
  81. package/dist/esm-ZADQ4XQH-QUFGGZL4.js.map +0 -1
  82. package/dist/exec-MYPAJJP7-C5HD5WG5.js.map +0 -1
  83. package/dist/getMachineId-bsd-HSK5LZMG.js +0 -41
  84. package/dist/getMachineId-bsd-HSK5LZMG.js.map +0 -1
  85. package/dist/getMachineId-darwin-4DP6CCJV.js +0 -41
  86. package/dist/getMachineId-darwin-4DP6CCJV.js.map +0 -1
  87. package/dist/getMachineId-linux-44LJ5UJB.js +0 -33
  88. package/dist/getMachineId-linux-44LJ5UJB.js.map +0 -1
  89. package/dist/getMachineId-unsupported-NVK6IATM.js +0 -24
  90. package/dist/getMachineId-unsupported-NVK6IATM.js.map +0 -1
  91. package/dist/getMachineId-win-YZ36S7VA.js +0 -43
  92. package/dist/getMachineId-win-YZ36S7VA.js.map +0 -1
  93. package/dist/interactive-2WMVAASS.js.map +0 -1
  94. package/dist/otlp-json-file-exporter-RY63S3IG-PZBQPVYY.js +0 -9
  95. package/dist/otlp-json-file-exporter-RY63S3IG-PZBQPVYY.js.map +0 -1
  96. package/dist/skills/agentv-eval-writer/references/eval-schema.json +0 -17295
  97. package/dist/skills/agentv-eval-writer/references/experiment-schema.json +0 -278
  98. package/dist/src-76ISS3LH.js +0 -1733
  99. package/dist/src-76ISS3LH.js.map +0 -1
  100. package/dist/ts-eval-loader-RE43OAGX-AMRCUKBZ.js.map +0 -1
  101. /package/dist/{agentv-provider-AYXH7WLW-NJRC6UQX.js.map → agentv-provider-AYXH7WLW-6YZKZ7PS.js.map} +0 -0
  102. /package/dist/{artifact-writer-QD52FC56.js.map → artifact-writer-SN6UNL5G.js.map} +0 -0
  103. /package/dist/{chunk-RCIEHFQ2.js.map → chunk-PEUTJS7B.js.map} +0 -0
  104. /package/dist/{chunk-5H446C7X.js.map → chunk-QMRVH5ZP.js.map} +0 -0
  105. /package/dist/{dist-KJ6PELQY.js.map → dist-DEPJOMCA.js.map} +0 -0
  106. /package/dist/{docker-workspace-ZJ2ESVBI-6UDETQII.js.map → docker-workspace-NNK4Z6FR-QRTIG6TM.js.map} +0 -0
  107. /package/dist/{esm-NNMQYIKT.js.map → exec-4HFFRQ3B-AXDMJNLJ.js.map} +0 -0
  108. /package/dist/{esm-R77SNOF5.js.map → ts-eval-loader-OMG2JBHP-OP5RR7A3.js.map} +0 -0
@@ -9,32 +9,51 @@ The grader agent uses this to evaluate assertions without the CLI.
9
9
 
10
10
  - `name` (string, optional) — eval name
11
11
  - `description` (string, optional) — description
12
- - `execution` (object, optional) — `target`, `model`, etc.
13
- - `workspace` (object, optional) — workspace config (template, hooks)
14
- - `input` (string | object | Message | Message[], optional) — suite-level input prepended to each test. String/block shorthand expands to a user message.
12
+ - `target` or `targets` (string | object | object[], optional) — system under test selection
13
+ - `environment` (object | `file://...`, optional) — AgentV coding-agent testbed recipe
14
+ - `env` (object, optional) — provider/eval environment variable overrides and template inputs
15
+ - `extensions` (array, optional) — lifecycle hooks such as `beforeAll`, `beforeEach`, `afterEach`, `afterAll`
16
+ - `prompts` (array, optional) — Promptfoo-compatible prompt matrix entries
15
17
  - `tests` (array, required) — test cases
16
18
 
17
19
  ### Per-test fields
18
20
 
19
21
  - `id` (string, required) — unique test identifier
20
- - `input` (string | object | Message | Message[], required) — task input. String shorthand expands to `[{role: user, content: "..."}]`; object shorthand preserves structured user content when the object has no top-level `role`. Top-level `role` is reserved for message objects.
22
+ - `vars` (object, required when prompts need row data) prompt-template variables for this row
21
23
  - `expected_output` (string | Message[], optional) — passive reference answer. String shorthand expands to `[{role: assistant, content: "..."}]`. It is available to declared graders, but does not add an implicit grader when `assertions` is present.
22
24
  - `criteria` (string, optional) — human-readable success criteria
23
- - `assertions` (array, optional) — grader assertions
25
+ - `assert` (array, optional) — grader assertions
26
+ - `environment` (object | `file://...`, optional) — per-case testbed override
24
27
  - `conversation_id` (string, optional) — groups related tests
25
28
  - `execution` (object, optional) — per-test execution override
26
29
 
30
+ If `assert` already states the grading contract, omit `criteria` instead of
31
+ duplicating the same rubric. Prefer plain assertion strings for semantic checks
32
+ when the default LLM rubric grader can judge them; use multiple named
33
+ `type: llm-rubric` blocks only for custom prompts, custom grader targets, or
34
+ intentional grader panels. Write `expected_output` as a golden/reference answer,
35
+ not as criteria or scoring instructions.
36
+
37
+ For historical or repo-state evals, materialize the repository through
38
+ `environment.setup.command` and pass the repo/ref as argv inputs. A SHA in
39
+ prompt prose or metadata is context only; it does not give the agent an actual
40
+ checkout. `setup.command` is a non-empty string array. Put the executable at
41
+ `command[0]`, put CLI arguments in the remaining array entries, and use
42
+ `timeout_ms` for setup timeout.
43
+
27
44
  ## 2. Assertion Types and Grading Recipes
28
45
 
29
46
  ### Default grader contract
30
47
 
31
- When a test has no `assertions`, AgentV uses the default `llm-grader` with the case context,
48
+ When a test has no `assertions`, AgentV uses the default `llm-rubric` with the case context,
32
49
  including `criteria` and `expected_output` when present.
33
50
 
34
51
  When `assertions` is present, the list is explicit: run only the declared
35
52
  assertions/graders. `expected_output` remains reference data for graders that consume it,
36
- such as `llm-grader`, `code-grader`, or `field-accuracy`; it does not trigger an additional
37
- default `llm-grader`.
53
+ such as `llm-rubric`, `script`, or `field-accuracy`; it does not trigger an additional
54
+ default `llm-rubric`.
55
+ When the declared assertion strings fully express the semantic contract, do not
56
+ also add a duplicate `criteria` block.
38
57
 
39
58
  For each assertion type: YAML config fields, grading recipe (exact pseudocode for deterministic types), and PASS/FAIL conditions.
40
59
 
@@ -154,9 +173,10 @@ Same as contains variants but explicitly case-insensitive.
154
173
 
155
174
  #### `tool-trajectory`
156
175
 
157
- - **Fields:** `expected` (array of expected tool calls), `mode` (string: `exact` | `contains` | `order`)
158
- - **Recipe:** Inspect transcript for tool call sequence. Match against expected based on mode.
176
+ - **Fields:** `expected` (array of expected tool calls), `mode` (string: `any_order` | `in_order` | `exact` | `subset` | `superset`)
177
+ - **Recipe:** Inspect AgentV-normalized transcript/tool-call data. Match against expected based on mode.
159
178
  - **PASS:** tool calls match expected pattern per mode.
179
+ - **Boundary:** This is an AgentV extension. Promptfoo `trajectory:*`, `tool-call-f1`, `skill-used`, and `trace-*` assertion names are rejected until implemented directly.
160
180
 
161
181
  #### `skill-trigger`
162
182
 
@@ -166,10 +186,10 @@ Same as contains variants but explicitly case-insensitive.
166
186
 
167
187
  ### LLM-judged assertions (require Claude reasoning)
168
188
 
169
- #### `llm-grader`
189
+ #### `llm-rubric`
170
190
 
171
- - **Fields:** `prompt` (string, required either inline text or path to .md file)
172
- - **Recipe:** Read the prompt. Evaluate the response against the criteria using your own reasoning. Produce score (0.0-1.0) with evidence.
191
+ - **Fields:** `value` (free-form or structured criteria), `rubrics` (itemized criteria), or `prompt` / exported `prompt_content` (custom grading prompt)
192
+ - **Recipe:** Read the rubric value, rubric items, or prompt. Evaluate the response against those criteria using your own reasoning. Produce score (0.0-1.0) with evidence.
173
193
  - **PASS:** score >= 0.5 (configurable via `threshold`).
174
194
 
175
195
  #### `rubric` / `rubrics`
@@ -180,27 +200,28 @@ Same as contains variants but explicitly case-insensitive.
180
200
 
181
201
  ### Script-based assertions
182
202
 
183
- #### `code-grader`
203
+ #### `script-grader`
184
204
 
185
205
  - **Fields:** `path` (string, required — path to script), `command` (string[], optional — custom command)
186
- - **Script SDK:** Use `defineCodeGrader` from `@agentv/sdk`:
206
+ - **Script SDK:** Use `defineScriptGrader` from `@agentv/sdk`:
187
207
  ```typescript
188
- import { defineCodeGrader } from '@agentv/sdk';
189
- export default defineCodeGrader(({ output, trace }) => ({
208
+ import { defineScriptGrader } from '@agentv/sdk';
209
+ export default defineScriptGrader(({ output, trace }) => ({
190
210
  score: (output ?? '').includes('expected') ? 1 : 0,
191
- assertions: [{ text: 'Contains expected', passed: (output ?? '').includes('expected') }],
211
+ assert: [{ text: 'Contains expected', passed: (output ?? '').includes('expected') }],
192
212
  }));
193
213
  ```
194
214
  - **Recipe:** The CLI runs the script, passing canonical JSON on stdin (`{output, input, expected_output, ...}`). Script returns `{"score": N, "assertions": [...]}`
195
215
  - **PASS:** score >= 0.5 (or as configured).
196
216
 
197
- ### Composite assertion
217
+ ### Assertion groups
198
218
 
199
- #### `composite`
219
+ #### `assert-set`
200
220
 
201
- - **Fields:** `assertions` (array of sub-assertions), `aggregation` (string: `weighted_average` | `min` | `max` | `all_pass`)
202
- - **Recipe:** Evaluate each sub-assertion. Aggregate scores per aggregation mode.
203
- - **PASS:** depends on aggregation mode.
221
+ - **Fields:** `assert` (array of child assertions), `threshold` (number, optional), `config` (object, optional), child `weight` fields.
222
+ - **Recipe:** Evaluate each child assertion and compute a weighted average.
223
+ - **PASS:** without `threshold`, every nonzero-weight child must pass. With `threshold`, the weighted score must meet the threshold.
224
+ - **Config:** parent `config` is inherited by children. Child `config` keys override parent keys.
204
225
 
205
226
  ## 3. Negate Support
206
227
 
@@ -254,7 +275,7 @@ Each line in the results JSONL file is an `EvaluationResult` object. In JSONL, f
254
275
  - `assertions` (array of `{text, passed, evidence?}`)
255
276
  - `weight` (number, optional)
256
277
  - `verdict` (string: `pass` | `fail` | `skip`)
257
- - `details` (object, optional — structured data from code graders)
278
+ - `details` (object, optional — structured data from script graders)
258
279
  - `reasoning` (string, optional)
259
280
 
260
281
  ## 6. Eval Set Support
@@ -287,8 +308,8 @@ Extracts inputs, target commands, and grader configs from an eval YAML file.
287
308
  │ ├── invoke.json ← {kind, command?, cwd?, timeout_ms?}
288
309
  │ ├── criteria.md ← human-readable success criteria
289
310
  │ ├── expected_output.json ← (if present)
290
- │ ├── code_graders/<name>.json ← {name, command, weight, config?}
291
- │ └── llm_graders/<name>.json ← {name, weight, threshold?, prompt_content}
311
+ │ ├── script_graders/<name>.json ← {name, command, weight, config?}
312
+ │ └── llm_graders/<name>.json ← {name, type, weight, threshold?, prompt_content, value?, rubrics?}
292
313
  ```
293
314
 
294
315
  **`manifest.json` format:**
@@ -307,15 +328,15 @@ Extracts inputs, target commands, and grader configs from an eval YAML file.
307
328
 
308
329
  ### `agentv pipeline grade <export-dir>`
309
330
 
310
- Runs code-grader assertions against `response.md` files in each test directory.
331
+ Runs script-grader assertions against `response.md` files in each test directory.
311
332
 
312
333
  **Prerequisites:** `pipeline input` has been run and `response.md` exists in each test dir.
313
334
 
314
- **Output:** `<test-id>/code_grader_results/<name>.json` for each code grader, containing:
335
+ **Output:** `<test-id>/script_grader_results/<name>.json` for each script grader, containing:
315
336
  ```json
316
337
  {
317
338
  "name": "grader-name",
318
- "type": "code-grader",
339
+ "type": "script-grader",
319
340
  "score": 1.0,
320
341
  "weight": 1.0,
321
342
  "assertions": [{"text": "...", "passed": true}]
@@ -324,7 +345,7 @@ Runs code-grader assertions against `response.md` files in each test directory.
324
345
 
325
346
  ### `agentv pipeline bench <export-dir>`
326
347
 
327
- Merges code-grader results with LLM grader scores and produces final artifacts.
348
+ Merges script-grader results with LLM grader scores and produces final artifacts.
328
349
 
329
350
  LLM grader results are read from disk at `<test-id>/llm_grader_results/<name>.json` per test.
330
351
 
@@ -20,7 +20,7 @@ AgentV automatically:
20
20
  - Converts `assertions` → LLM-grader graders
21
21
  - Resolves `files[]` paths relative to the evals.json directory
22
22
 
23
- If you're using the `agentv-bench` skill, it orchestrates these same AgentV commands. Code graders, grading, and artifact generation remain in AgentV core; the skill just orchestrates and summarizes the existing outputs.
23
+ If you're using the `agentv-bench` skill, it orchestrates these same AgentV commands. script graders, grading, and artifact generation remain in AgentV core; the skill just orchestrates and summarizes the existing outputs.
24
24
 
25
25
  ## What You Gain
26
26
 
@@ -29,7 +29,7 @@ Moving from skill-creator's eval loop to AgentV's lifecycle skill gives you:
29
29
  | Capability | skill-creator | AgentV lifecycle skill |
30
30
  |-----------|---------------|----------------------|
31
31
  | Workspace isolation | ❌ | ✅ Clone repos, run setup/teardown scripts |
32
- | Code graders | ❌ | ✅ Python/TypeScript grader scripts via `defineCodeGrader()` |
32
+ | script graders | ❌ | ✅ Python/TypeScript grader scripts via `defineScriptGrader()` |
33
33
  | Tool trajectory scoring | ❌ | ✅ Evaluate tool call sequences |
34
34
  | Multi-provider comparison | with-skill vs without-skill | N-way: Claude, GPT, Copilot, Gemini, custom CLI |
35
35
  | Multi-turn evaluation | ❌ | ✅ Conversation tracking with `conversation_id` |
@@ -64,14 +64,14 @@ When evals.json becomes limiting, convert to EVAL.yaml for the full feature set:
64
64
  # Convert evals.json to EVAL.yaml
65
65
  agentv convert evals.json
66
66
 
67
- # Edit the generated YAML to add workspace config, code graders, etc.
67
+ # Edit the generated YAML to add environment setup, script graders, etc.
68
68
  # Then run with the full lifecycle
69
69
  agentv eval eval.yaml
70
70
  ```
71
71
 
72
72
  EVAL.yaml unlocks:
73
73
  - **Workspace setup/teardown** — clone repos, install dependencies, clean up after tests
74
- - **Code graders** — write graders in Python or TypeScript, not just LLM prompts
74
+ - **script graders** — write graders in Python or TypeScript, not just LLM prompts
75
75
  - **Rubric-based grading** — multi-dimensional scoring with weighted criteria
76
76
  - **Retry policies** — automatic retries for flaky tests with configurable backoff
77
77
  - **Test groups** — organize tests by category with shared config
@@ -1,8 +1,9 @@
1
1
  # Subagent Pipeline — Running eval.yaml without CLI
2
2
 
3
- This reference documents the detailed procedure for running evaluations in subagent mode
4
- (`AGENT_EVAL_MODE=subagent`, the default). The orchestrating skill dispatches `executor`
5
- subagents to perform test cases and `grader` subagents to evaluate outputs.
3
+ This reference documents the detailed procedure for running evaluations in subagent mode.
4
+ Subagent mode is an explicit opt-in fallback; the main `agentv-bench` flow defaults to
5
+ AgentV CLI mode. The orchestrating skill dispatches `executor` subagents to perform test
6
+ cases and `grader` subagents to evaluate outputs.
6
7
 
7
8
  Read this reference when executing Step 3 (Run and Grade) in subagent mode.
8
9
 
@@ -49,12 +50,12 @@ code grading in one step. When `--out` is omitted, the output directory defaults
49
50
  # Extract inputs and invoke all CLI targets in parallel:
50
51
  agentv pipeline run evals/repro.eval.yaml
51
52
 
52
- # Also run code graders inline (instead of using pipeline grade separately):
53
+ # Also run script graders inline (instead of using pipeline grade separately):
53
54
  agentv pipeline run evals/repro.eval.yaml --grader-type code
54
55
  ```
55
56
 
56
57
  By default, `pipeline run` extracts inputs and invokes targets only. Pass `--grader-type code`
57
- to also run code-graders inline, or use `agentv pipeline grade <run-dir>` as a separate step.
58
+ to also run script-graders inline, or use `agentv pipeline grade <run-dir>` as a separate step.
58
59
 
59
60
  The run directory is printed to stdout. Then continue to the grading and merge phases
60
61
  described in SKILL.md Step 3.
@@ -108,7 +109,7 @@ grading until all responses are present.
108
109
 
109
110
  ### Step 3 onward: Grade and merge
110
111
 
111
- See SKILL.md Step 3 "Grading" section for the three-phase grading process (code graders →
112
+ See SKILL.md Step 3 "Grading" section for the three-phase grading process (script graders →
112
113
  LLM grading → merge and validate).
113
114
 
114
115
  ## Step-by-Step Fine-Grained Control (CLI targets)
@@ -121,7 +122,7 @@ agentv pipeline input evals/repro.eval.yaml
121
122
 
122
123
  # Step 2: run_tests.py invokes CLI targets (or use pipeline run instead)
123
124
 
124
- # Step 3: Run code graders
125
+ # Step 3: Run script graders
125
126
  agentv pipeline grade <run-dir>
126
127
 
127
128
  # Step 4: Subagent does LLM grading, writes results to llm_grader_results/<name>.json per test
@@ -135,8 +136,8 @@ agentv results validate <run-dir>
135
136
 
136
137
  ## LLM Grading JSON Format
137
138
 
138
- The agent reads `llm_graders/<name>.json` for each test, grades the response using the prompt
139
- content, and produces a scores JSON:
139
+ The agent reads `llm_graders/<name>.json` for each test, grades the response using
140
+ `value`, `rubrics`, or prompt content from the config, and produces a scores JSON:
140
141
 
141
142
  ```json
142
143
  {
@@ -173,9 +174,9 @@ the eval.yaml. The target is recorded in `manifest.json` — one run = one targe
173
174
  ├── criteria.md ← grading criteria
174
175
  ├── response.md ← target/agent output
175
176
  ├── timing.json ← execution timing
176
- ├── code_graders/<name>.json ← grader configs written by `pipeline input`: code-grader scripts AND built-in types (contains, regex, equals, etc.)
177
- ├── llm_graders/<name>.json ← LLM grader configs
178
- ├── code_grader_results/<name>.json ← code grader results
177
+ ├── script_graders/<name>.json ← grader configs written by `pipeline input`: script-grader scripts AND built-in types (contains, regex, equals, etc.)
178
+ ├── llm_graders/<name>.json ← LLM grader configs with prompt_content, value, or rubrics
179
+ ├── script_grader_results/<name>.json ← script grader results
179
180
  ├── llm_grader_results/<name>.json ← LLM grader results (written by grader subagents; one file per grader)
180
181
  └── grading.json ← merged grading (written by `pipeline bench` — do NOT write here directly)
181
182
  ```
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: agentv-eval-migrations
3
+ description: >-
4
+ Migrate AgentV eval YAML across breaking schema changes, especially workspace
5
+ contract updates and portable-vs-local runtime binding cleanup.
6
+ ---
7
+
8
+ # AgentV Eval Migrations
9
+
10
+ Use this skill when updating existing AgentV eval YAML, examples, docs, or
11
+ generated eval authoring guidance after a schema-breaking change.
12
+
13
+ Before editing, read `references/breaking-changes.md`. For stale evals from
14
+ AgentV v4.42.4, use that reference as the migration map: it lists the
15
+ v4.42.4-era shape, current shape, migration steps, verification commands, and
16
+ compatibility notes for each major breaking authoring change. Then compare the
17
+ eval file against the current portable contract:
18
+
19
+ - Keep committed eval YAML portable: prompts, cases, assertions, workspace
20
+ templates, repos, hooks, env checks, Docker preflight/container config, and
21
+ `workspace.scope`.
22
+ - Do not put machine-local existing workspace directories in eval YAML. Use
23
+ `--workspace-path` for one-off runs or `.agentv/config.local.yaml` with
24
+ `execution.workspace_path` for persistent local binding.
25
+ - Use `workspace.scope: suite | attempt` for portable workspace lifetime. Docker
26
+ config is not a replacement for workspace folder lifetime.
27
+ - Keep wire-format fields in `snake_case` and TypeScript internals in
28
+ `camelCase`.
29
+
30
+ After migration, validate with `bun apps/cli/src/cli.ts validate <file>` when
31
+ working in the AgentV repo, or `agentv validate <file>` from an installed CLI.
32
+ Run the repo's parser/schema tests for generated examples and fixtures when the
33
+ change affects shared skill data or examples.