agentv 5.2.0-next.1 → 5.3.1-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 (46) hide show
  1. package/README.md +22 -20
  2. package/dist/{artifact-writer-SN6UNL5G.js → artifact-writer-7NBCOAYC.js} +4 -4
  3. package/dist/{chunk-3X357HS4.js → chunk-ASIGJIOJ.js} +107 -31
  4. package/dist/chunk-ASIGJIOJ.js.map +1 -0
  5. package/dist/{chunk-3S6A2RKR.js → chunk-ELCJ23K4.js} +18879 -17538
  6. package/dist/chunk-ELCJ23K4.js.map +1 -0
  7. package/dist/{chunk-T4AD3H3Y.js → chunk-LKGARI3W.js} +399 -32
  8. package/dist/chunk-LKGARI3W.js.map +1 -0
  9. package/dist/{chunk-ALVZQUZP.js → chunk-LXBI3SPX.js} +142 -14
  10. package/dist/chunk-LXBI3SPX.js.map +1 -0
  11. package/dist/{chunk-46K2OET3.js → chunk-RKE7SSET.js} +2 -2
  12. package/dist/cli.js +5 -5
  13. package/dist/dashboard/assets/{index-DNgf3qJ2.js → index-CbEMiJSb.js} +1 -1
  14. package/dist/dashboard/assets/{index-r_jSJmlw.js → index-DTA6-l7q.js} +3 -3
  15. package/dist/dashboard/index.html +1 -1
  16. package/dist/{dist-DEPJOMCA.js → dist-NMXMI5SK.js} +25 -5
  17. package/dist/index.js +5 -5
  18. package/dist/{interactive-36ZNMQB2.js → interactive-BN527UV3.js} +5 -5
  19. package/dist/skills/agentv-bench/SKILL.md +15 -14
  20. package/dist/skills/agentv-bench/agents/analyzer.md +2 -2
  21. package/dist/skills/agentv-bench/agents/comparator.md +3 -3
  22. package/dist/skills/agentv-bench/agents/executor.md +1 -1
  23. package/dist/skills/agentv-bench/agents/grader.md +4 -2
  24. package/dist/skills/agentv-bench/references/autoresearch.md +9 -9
  25. package/dist/skills/agentv-bench/references/description-optimization.md +5 -6
  26. package/dist/skills/agentv-bench/references/environment-adaptation.md +6 -6
  27. package/dist/skills/agentv-bench/references/eval-yaml-spec.md +50 -56
  28. package/dist/skills/agentv-bench/references/schemas.md +44 -60
  29. package/dist/skills/agentv-bench/references/subagent-pipeline.md +20 -18
  30. package/dist/skills/agentv-eval-migrations/SKILL.md +13 -0
  31. package/dist/skills/agentv-eval-migrations/references/breaking-changes.md +138 -22
  32. package/dist/skills/agentv-eval-writer/SKILL.md +103 -63
  33. package/dist/skills/agentv-eval-writer/references/custom-evaluators.md +10 -5
  34. package/dist/skills/agentv-eval-writer/references/eval.schema.json +749 -2158
  35. package/dist/skills/agentv-eval-writer/references/rubric-evaluator.md +1 -1
  36. package/dist/{ts-eval-loader-OMG2JBHP-OP5RR7A3.js → ts-eval-loader-2RFVZHCT-7CZ3DCDD.js} +8 -4
  37. package/package.json +1 -1
  38. package/dist/chunk-3S6A2RKR.js.map +0 -1
  39. package/dist/chunk-3X357HS4.js.map +0 -1
  40. package/dist/chunk-ALVZQUZP.js.map +0 -1
  41. package/dist/chunk-T4AD3H3Y.js.map +0 -1
  42. /package/dist/{artifact-writer-SN6UNL5G.js.map → artifact-writer-7NBCOAYC.js.map} +0 -0
  43. /package/dist/{chunk-46K2OET3.js.map → chunk-RKE7SSET.js.map} +0 -0
  44. /package/dist/{dist-DEPJOMCA.js.map → dist-NMXMI5SK.js.map} +0 -0
  45. /package/dist/{interactive-36ZNMQB2.js.map → interactive-BN527UV3.js.map} +0 -0
  46. /package/dist/{ts-eval-loader-OMG2JBHP-OP5RR7A3.js.map → ts-eval-loader-2RFVZHCT-7CZ3DCDD.js.map} +0 -0
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>AgentV</title>
7
- <script type="module" crossorigin src="/assets/index-r_jSJmlw.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-DTA6-l7q.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-D_bokML8.css">
9
9
  </head>
10
10
  <body class="bg-gray-950 text-gray-100">
@@ -26,6 +26,7 @@ import {
26
26
  getResultsRepoSyncStatus,
27
27
  listGitRuns,
28
28
  listGitRunsCached,
29
+ loadEnvPathFiles,
29
30
  loadTsConfig,
30
31
  materializeGitRun,
31
32
  normalizeResultsConfig,
@@ -34,6 +35,8 @@ import {
34
35
  parseCodexSession,
35
36
  parseCopilotEvents,
36
37
  parseEnvOutput,
38
+ parseJsonEnv,
39
+ parseShellExportsEnv,
37
40
  prepareEvalWorkspace,
38
41
  prepareResultsRepoBranch,
39
42
  pushResultsRepoBranch,
@@ -44,6 +47,7 @@ import {
44
47
  resolveResultsRepoRunsDir,
45
48
  resolveResultsRepoUrl,
46
49
  runBeforeSessionHook,
50
+ runEnvFromEntries,
47
51
  setupWipWorktree,
48
52
  stageResultsArtifacts,
49
53
  syncProject,
@@ -54,7 +58,7 @@ import {
54
58
  transpileEvalYaml,
55
59
  transpileEvalYamlFile,
56
60
  trimBaselineResult
57
- } from "./chunk-ALVZQUZP.js";
61
+ } from "./chunk-LXBI3SPX.js";
58
62
  import {
59
63
  AGENTV_CONFIG_FILE_NAME,
60
64
  AGENTV_CONFIG_YML_FILE_NAME,
@@ -83,6 +87,7 @@ import {
83
87
  ExternalTraceMetadataWireSchema,
84
88
  FieldAccuracyGrader,
85
89
  GraderRegistry,
90
+ LEGACY_METRICS_SCHEMA_VERSION,
86
91
  LatencyGrader,
87
92
  LlmGrader,
88
93
  METRICS_JSON_MEDIA_TYPE,
@@ -106,6 +111,7 @@ import {
106
111
  ResultRowSchemaError,
107
112
  ScriptGrader,
108
113
  SkillTriggerGrader,
114
+ SkillUsedGrader,
109
115
  TEST_MESSAGE_ROLES,
110
116
  TRACE_EVENT_TYPES,
111
117
  TRACE_REDACTION_LEVELS,
@@ -145,6 +151,7 @@ import {
145
151
  TraceSourceWireSchema,
146
152
  TraceSummaryBoundarySchema,
147
153
  TraceToolWireSchema,
154
+ TrajectoryGrader,
148
155
  WorkspaceCreationError,
149
156
  addProject,
150
157
  aggregateRunDir,
@@ -216,7 +223,7 @@ import {
216
223
  extractFailOnError,
217
224
  extractImageBlocks,
218
225
  extractJsonBlob,
219
- extractLastAssistantContent,
226
+ extractLastAssistantContent2,
220
227
  extractTargetFromSuite,
221
228
  extractTargetRefsFromSuite,
222
229
  extractTargetsFromSuite,
@@ -263,6 +270,7 @@ import {
263
270
  isPlainConfigObject,
264
271
  isTestMessage,
265
272
  isTestMessageRole,
273
+ isTypeScriptEvalConfigFileName,
266
274
  killAllTrackedChildren,
267
275
  listTargetNames,
268
276
  loadConfig,
@@ -282,6 +290,7 @@ import {
282
290
  normalizeExperimentConfig,
283
291
  normalizeExperimentRunOverride,
284
292
  normalizeLineEndings,
293
+ normalizeMetricsArtifactWire,
285
294
  normalizeRepoIdentity,
286
295
  normalizeResultRow,
287
296
  omitExternalTraceMetadataKeys,
@@ -369,11 +378,12 @@ import {
369
378
  trackChild,
370
379
  trackedChildCount,
371
380
  transcriptReplayRecordToProviderResponse,
381
+ typeScriptEvalConfigGlob,
372
382
  writeArtifacts,
373
383
  writeArtifactsFromResults,
374
384
  writeInitialRunSummaryArtifact,
375
385
  writePerTestArtifacts
376
- } from "./chunk-3S6A2RKR.js";
386
+ } from "./chunk-ELCJ23K4.js";
377
387
  import "./chunk-7BGERE6L.js";
378
388
  import {
379
389
  DockerWorkspaceProvider
@@ -409,6 +419,7 @@ export {
409
419
  ExternalTraceMetadataWireSchema,
410
420
  FieldAccuracyGrader,
411
421
  GraderRegistry,
422
+ LEGACY_METRICS_SCHEMA_VERSION,
412
423
  LatencyGrader,
413
424
  LlmGrader,
414
425
  METRICS_JSON_MEDIA_TYPE,
@@ -433,6 +444,7 @@ export {
433
444
  RunBudgetTracker,
434
445
  ScriptGrader,
435
446
  SkillTriggerGrader,
447
+ SkillUsedGrader,
436
448
  TEST_MESSAGE_ROLES,
437
449
  TRACE_EVENT_TYPES,
438
450
  TRACE_REDACTION_LEVELS,
@@ -473,6 +485,7 @@ export {
473
485
  TraceSourceWireSchema,
474
486
  TraceSummaryBoundarySchema,
475
487
  TraceToolWireSchema,
488
+ TrajectoryGrader,
476
489
  TranscriptProvider,
477
490
  WorkspaceCreationError,
478
491
  addProject,
@@ -561,7 +574,7 @@ export {
561
574
  extractFailOnError,
562
575
  extractImageBlocks,
563
576
  extractJsonBlob,
564
- extractLastAssistantContent,
577
+ extractLastAssistantContent2 as extractLastAssistantContent,
565
578
  extractTargetFromSuite,
566
579
  extractTargetRefsFromSuite,
567
580
  extractTargetsFromSuite,
@@ -613,11 +626,13 @@ export {
613
626
  isPlainConfigObject,
614
627
  isTestMessage,
615
628
  isTestMessageRole,
629
+ isTypeScriptEvalConfigFileName,
616
630
  killAllTrackedChildren,
617
631
  listGitRuns,
618
632
  listGitRunsCached,
619
633
  listTargetNames,
620
634
  loadConfig,
635
+ loadEnvPathFiles,
621
636
  loadEvalCaseById,
622
637
  loadEvalCases,
623
638
  loadEvalSuite,
@@ -636,6 +651,7 @@ export {
636
651
  normalizeExperimentConfig,
637
652
  normalizeExperimentRunOverride,
638
653
  normalizeLineEndings,
654
+ normalizeMetricsArtifactWire,
639
655
  normalizeRepoIdentity,
640
656
  normalizeResultRow,
641
657
  normalizeResultsConfig,
@@ -646,9 +662,11 @@ export {
646
662
  parseCopilotEvents,
647
663
  parseEnvOutput,
648
664
  parseEvaluationResultBoundary,
665
+ parseJsonEnv,
649
666
  parseJsonFromText,
650
667
  parseJsonSafe,
651
668
  parseJsonlResults,
669
+ parseShellExportsEnv,
652
670
  parseTraceBoundary,
653
671
  parseTraceSummaryBoundary,
654
672
  parseYamlValue,
@@ -687,6 +705,7 @@ export {
687
705
  runContainsAnyAssertion,
688
706
  runContainsAssertion,
689
707
  runEndsWithAssertion,
708
+ runEnvFromEntries,
690
709
  runEqualsAssertion,
691
710
  runEvalCase,
692
711
  runEvaluation,
@@ -749,9 +768,10 @@ export {
749
768
  transpileEvalYaml,
750
769
  transpileEvalYamlFile,
751
770
  trimBaselineResult,
771
+ typeScriptEvalConfigGlob,
752
772
  writeArtifacts,
753
773
  writeArtifactsFromResults,
754
774
  writeInitialRunSummaryArtifact,
755
775
  writePerTestArtifacts
756
776
  };
757
- //# sourceMappingURL=dist-DEPJOMCA.js.map
777
+ //# sourceMappingURL=dist-NMXMI5SK.js.map
package/dist/index.js CHANGED
@@ -6,11 +6,11 @@ import {
6
6
  runCli,
7
7
  shouldRunBeforeSessionHook,
8
8
  usesDeprecatedStudioAlias
9
- } from "./chunk-3X357HS4.js";
10
- import "./chunk-T4AD3H3Y.js";
11
- import "./chunk-46K2OET3.js";
12
- import "./chunk-ALVZQUZP.js";
13
- import "./chunk-3S6A2RKR.js";
9
+ } from "./chunk-ASIGJIOJ.js";
10
+ import "./chunk-LKGARI3W.js";
11
+ import "./chunk-RKE7SSET.js";
12
+ import "./chunk-LXBI3SPX.js";
13
+ import "./chunk-ELCJ23K4.js";
14
14
  import "./chunk-7BGERE6L.js";
15
15
  import "./chunk-PEUTJS7B.js";
16
16
  import "./chunk-M7BUKBAF.js";
@@ -8,14 +8,14 @@ import {
8
8
  getCategories,
9
9
  resolveExistingRunPrimaryPath,
10
10
  runEvalCommand
11
- } from "./chunk-T4AD3H3Y.js";
12
- import "./chunk-46K2OET3.js";
13
- import "./chunk-ALVZQUZP.js";
11
+ } from "./chunk-LKGARI3W.js";
12
+ import "./chunk-RKE7SSET.js";
13
+ import "./chunk-LXBI3SPX.js";
14
14
  import {
15
15
  getAgentvConfigDir,
16
16
  listTargetNames,
17
17
  readTargetDefinitions
18
- } from "./chunk-3S6A2RKR.js";
18
+ } from "./chunk-ELCJ23K4.js";
19
19
  import "./chunk-7BGERE6L.js";
20
20
  import "./chunk-PEUTJS7B.js";
21
21
  import "./chunk-M7BUKBAF.js";
@@ -344,4 +344,4 @@ ${ANSI_DIM}Retrying execution errors...${ANSI_RESET}
344
344
  export {
345
345
  launchInteractiveWizard
346
346
  };
347
- //# sourceMappingURL=interactive-36ZNMQB2.js.map
347
+ //# sourceMappingURL=interactive-BN527UV3.js.map
@@ -49,7 +49,7 @@ Before running or optimizing, understand what you're working with.
49
49
 
50
50
  2. **Identify success criteria** — what does "good" look like for this agent? What are the edge cases? What would a failure look like? Talk to the user if this isn't clear from the artifacts alone.
51
51
 
52
- 3. **Understand the target harness** — which provider runs the agent (Claude, GPT, Copilot CLI, Gemini, custom CLI)? This affects what grader types are available and how to run tests. Targets are configured in `.agentv/targets.yaml` (canonical location, searched from the eval file directory upward). Sensitive values like `api_key` must use `${{ ENV_VAR }}` syntax — literal secrets are rejected as a security guardrail.
52
+ 3. **Understand the target harness** — which provider runs the agent (Claude, GPT, Copilot CLI, Gemini, custom CLI)? This affects what grader types are available and how to run tests. Targets are configured in `.agentv/targets.yaml` (canonical location, searched from the eval file directory upward). Sensitive values like `api_key` must use `{{ env.ENV_VAR }}` references — literal secrets are rejected as a security guardrail.
53
53
 
54
54
  4. **Challenge assumptions** — if evals already exist, review their quality before running:
55
55
  - Are the test cases testing the right things?
@@ -65,7 +65,7 @@ Before running or optimizing, understand what you're working with.
65
65
 
66
66
  AgentV supports two evaluation formats:
67
67
 
68
- **EVAL.yaml** (native, full features) — supports environment recipes, script graders, multi-turn conversations, tool trajectory scoring, workspace file tracking, and multi-provider targets. Use this for agent evaluation.
68
+ **EVAL.yaml** (native, full features) — supports prompt matrices, environment recipes, script graders, multi-turn conversations, tool trajectory scoring, workspace file tracking, and multi-provider targets. Use this for agent evaluation.
69
69
 
70
70
  ```yaml
71
71
  # example.eval.yaml
@@ -89,7 +89,7 @@ tests:
89
89
  - Review identifies the null pointer bug and suggests a concrete fix
90
90
  ```
91
91
 
92
- Multi-skill evaluation is handled naturally via input messages — describe the task in the test input, and the agent uses whatever skills it needs.
92
+ Multi-skill evaluation is handled naturally via prompt messages — describe the task in `prompts`, put row-specific data in `tests[].vars`, and the agent uses whatever skills it needs.
93
93
 
94
94
  **evals.json** (skill-creator compatible) — auto-promoted to EVAL-equivalent format:
95
95
  - `prompt` → input messages
@@ -117,7 +117,7 @@ Start with 2-3 realistic test cases — the kind of thing a real user would actu
117
117
 
118
118
  Good assertions are objectively verifiable and have descriptive names. Subjective quality ("the output is good") is better evaluated qualitatively — don't force assertions onto things that need human judgment.
119
119
 
120
- **Grader types** (cheapest to most expensive): `exact`, `contains`, `regex`, `is-json`, `field-accuracy`, `assert-set`, `script`, `tool-trajectory`, `llm-rubric`. See `references/eval-yaml-spec.md` for full config and grading recipes for each type.
120
+ **Grader types** (cheapest to most expensive): `exact`, `contains`, `regex`, `is-json`, `field-accuracy`, `assert-set`, `skill-used`, `not-skill-used`, `trajectory:*`, `script`, `llm-rubric`. See `references/eval-yaml-spec.md` for full config and grading recipes for each type.
121
121
 
122
122
  Prefer deterministic graders over LLM graders whenever possible. If an assertion can be checked with `contains` or `regex`, don't use `llm-rubric`.
123
123
 
@@ -127,7 +127,7 @@ Prefer deterministic graders over LLM graders whenever possible. If an assertion
127
127
 
128
128
  This section is one continuous sequence — don't stop partway through.
129
129
 
130
- Each run produces a new `.agentv/results/default/<timestamp>/` directory automatically. Use timestamps to identify iterations when comparing runs.
130
+ Each run produces a new canonical `.agentv/results/<run_id>/` directory automatically. Use the printed run id and `.internal/index.jsonl` when comparing runs.
131
131
 
132
132
  ### Choosing a run mode
133
133
 
@@ -228,11 +228,11 @@ Each grader subagent (operating under `agents/grader.md` instructions):
228
228
  2. Reads `<test-id>/response.md` for the candidate output
229
229
  3. Grades the response against the prompt criteria
230
230
  4. **Writes its result to disk**: `<run-dir>/<evalset>/<test-id>/llm_grader_results/<name>.json`
231
- 5. Returns score (0.0–1.0) and per-assertion evidence to the orchestrator
231
+ 5. Returns score (0.0–1.0) and per-assertion notes to the orchestrator
232
232
 
233
- **Writing to disk is critical.** Assertion arrays are lost if accumulated only in the orchestrator's context across multiple batches (context summarization drops detail). Writing per-test results to `llm_grader_results/<name>.json` makes grading resumable and assertion evidence durable.
233
+ **Writing to disk is critical.** Intermediate assertion arrays are lost if accumulated only in the orchestrator's context across multiple batches (context summarization drops detail). Writing per-test results to `llm_grader_results/<name>.json` makes grading resumable. Public `grading.json` artifacts normalize these details into recursive `component_results`.
234
234
 
235
- The result file format is:
235
+ The intermediate subagent result file format is:
236
236
  ```json
237
237
  { "score": 0.85, "assertions": [{"text": "...", "passed": true, "evidence": "..."}] }
238
238
  ```
@@ -246,18 +246,19 @@ agentv pipeline bench <run-dir>
246
246
  agentv results validate <run-dir>
247
247
  ```
248
248
 
249
- `pipeline bench` reads LLM grader results from `llm_grader_results/<name>.json` per test automatically, merges with script-grader scores, computes weighted pass_rate, and writes `grading.json` + `index.jsonl` + `summary.json`.
249
+ `pipeline bench` reads LLM grader results from `llm_grader_results/<name>.json` per test automatically, merges with script-grader scores, computes aggregate scores, and writes the canonical run bundle with `.internal/index.jsonl`, `summary.json`, and per-attempt `grading.json`.
250
250
 
251
251
  > **Diagnosing `pass_rate=0`:** If `pipeline bench` reports `pass_rate=0` across the board, do **not** assume the tests genuinely failed. First verify the grading pipeline ran correctly: check that `<test-id>/llm_grader_results/<name>.json` exists and is non-empty for each test. If these files are absent or empty, the grader subagents failed to produce output (most common cause: `agents/grader.md` was not embedded in the subagent prompts — see Phase 2). Treat `pass_rate=0` as a real signal only after confirming grader results exist.
252
252
 
253
253
  ### Artifacts
254
254
 
255
255
  All artifacts use established schemas — see `references/schemas.md` for the full definitions. Do not modify the structure. Key artifacts per run:
256
- - **grading.json**: per-test assertions with `{text, passed, evidence}`, plus summary
257
- - **timing.json**: `{total_tokens, duration_ms, total_duration_seconds}`
258
- - **summary.json**: per-target aggregate `{pass_rate, time_seconds, tokens}`
256
+ - **.internal/index.jsonl**: canonical row index for compare, Dashboard, rerun, and artifact discovery
257
+ - **grading.json**: aggregate `pass`, `score`, `reason`, recursive `component_results`, and optional `assertion`, `named_scores`, and `metadata`
258
+ - **metrics.json**: token, cost, timing, tool, and transcript metrics for the attempt
259
+ - **summary.json**: run-level aggregate metadata and pass/score rollups
259
260
 
260
- Write artifacts to `.agentv/artifacts/` or the iteration directory.
261
+ Write artifacts to `.agentv/results/<run_id>/` through the CLI unless a task explicitly needs a fixed output path.
261
262
 
262
263
  ### Environment features (EVAL.yaml only)
263
264
 
@@ -350,7 +351,7 @@ If a prompt file is referenced in both task input and grader configs, optimize f
350
351
  After improving:
351
352
 
352
353
  1. Apply your changes to the agent's prompts/skills/config
353
- 2. Re-run all test cases (agentv creates a new `.agentv/results/default/<timestamp>/` directory automatically)
354
+ 2. Re-run all test cases (agentv creates a new `.agentv/results/<run_id>/` directory automatically)
354
355
  3. Compare against the previous iteration (Step 4). If running in automated mode, use the **automated keep/discard** logic below instead of manual judgment — it will decide whether to keep or revert the change for you.
355
356
  4. Present results to the user (or log the decision if running automated keep/discard)
356
357
  5. Stop when ANY of:
@@ -22,7 +22,7 @@ You are an eval-quality analyst for AgentV. Your job is to read JSONL evaluation
22
22
 
23
23
  Read every line of the JSONL results file. Each line is a JSON object with:
24
24
  - `test_id`, `suite`, `score`, `assertions`, `reasoning`, `target`
25
- - `scores` (optional): Array of per-grader breakdowns with `name`, `type`, `score`, `weight`, `verdict`, `assertions`, `reasoning`
25
+ - `scores` (optional): Array of per-grader breakdowns with `name`, `type`, `score`, `weight`, `pass`, `assertions`, `reasoning`
26
26
 
27
27
  If `eval-path` is provided, also read the EVAL.yaml to understand grader configurations.
28
28
 
@@ -123,7 +123,7 @@ If a section has no findings, include the header with "None found." underneath.
123
123
  - **Be specific:** Every suggestion must include the test case ID, grader name, evidence from the results, and a concrete replacement config.
124
124
  - **Be conservative:** Only suggest deterministic upgrades when the pattern is clear and consistent. Partial or ambiguous evidence should be noted but not acted on.
125
125
  - **Prioritize by impact:** Order suggestions by estimated cost savings (`llm-rubric` → deterministic saves the most).
126
- - **Handle all grader types:** Process `script`, `tool-trajectory`, `llm-rubric`, `rubrics`, `assert-set`, and all deterministic types. Only LLM-based types are candidates for deterministic upgrades.
126
+ - **Handle all grader types:** Process `script`, `trajectory:*`, `skill-used`, `not-skill-used`, `llm-rubric`, `rubrics`, `assert-set`, and all deterministic types. Only LLM-based types are candidates for deterministic upgrades.
127
127
  - **Multi-provider awareness:** When results span multiple targets, note if a suggestion applies to all targets or is target-specific.
128
128
  - **No false positives:** It is better to miss a suggestion than to recommend an incorrect upgrade. If unsure, add the finding to a "Needs Review" subsection with your reasoning.
129
129
 
@@ -24,7 +24,7 @@ You are the Blind Comparator for AgentV's evaluation workflow. Your job is to co
24
24
  You will receive:
25
25
  - `outputs`: Array of evaluation outputs to compare. Each contains:
26
26
  - `target_id`: The provider/configuration identifier (DO NOT read this during scoring)
27
- - `evaluator_results`: Array of grader scores and details (script, tool-trajectory, llm-rubric, deterministic)
27
+ - `evaluator_results`: Array of grader scores and details (script, trajectory, skill-use, llm-rubric, deterministic)
28
28
  - `workspace_changes`: File changes made during workspace evaluation (if applicable)
29
29
  - `tool_calls`: Tool invocations and results from multi-turn conversations (if applicable)
30
30
  - `conversation`: Full multi-turn conversation history (if applicable)
@@ -91,7 +91,7 @@ For each content criterion, define:
91
91
  **Grader-Specific Scoring** — when grader results are present:
92
92
 
93
93
  - **script-grader**: Factor in pass/fail results, test coverage, assertion hit rates
94
- - **tool-trajectory**: Factor in tool call accuracy, sequence correctness, unnecessary tool calls
94
+ - **trajectory assertions**: Factor in tool call accuracy, sequence correctness, unnecessary tool calls
95
95
  - **llm-rubric**: Factor in existing LLM grader scores as a reference signal (not as ground truth)
96
96
  - **deterministic**: Factor in exact match / keyword hit rates
97
97
 
@@ -235,7 +235,7 @@ Also produce a human-readable markdown summary:
235
235
  - **Be evidence-based**: Every score must cite specific evidence from the output.
236
236
  - **Evaluate substance over style**: Correct, complete answers with rough formatting score higher than polished but incorrect answers.
237
237
  - **Handle missing data gracefully**: If an output lacks workspace changes or tool calls but others have them, score what is present — do not penalize for data the target wasn't expected to produce.
238
- - **Respect grader signals**: When script-grader or tool-trajectory results exist, they represent objective ground truth. Weight these heavily.
238
+ - **Respect grader signals**: When script-grader or trajectory assertion results exist, they represent objective ground truth. Weight these heavily.
239
239
 
240
240
  ## Edge Cases
241
241
 
@@ -14,7 +14,7 @@ You are the executor for an AgentV evaluation test case. Your job is to **perfor
14
14
  You are the target agent being evaluated. Do the task to the best of your ability — your output will be graded by a separate grader agent.
15
15
 
16
16
  **You will receive these parameters:**
17
- - `test-dir`: Path to the test case directory (e.g., `.agentv/results/default/<timestamp>/<test-id>/`)
17
+ - `test-dir`: Path to the prepared test case directory inside the run bundle (for example `.agentv/results/<run_id>/<result-dir>/`)
18
18
 
19
19
  ## Process
20
20
 
@@ -80,8 +80,10 @@ For LLM-graded types: be rigorous and fair. Score based on substance, not exact
80
80
 
81
81
  | Type | How to evaluate |
82
82
  |------|----------------|
83
- | `tool-trajectory` | Inspect transcript for tool calls, match against expected sequence/mode |
84
- | `skill-trigger` | Check if the named skill was invoked in tool calls |
83
+ | `trajectory:tool-used` | Inspect transcript for tool presence and minimum call counts |
84
+ | `trajectory:tool-sequence` | Inspect transcript for expected tool call order |
85
+ | `trajectory:tool-args-match` | Inspect transcript for expected tool arguments |
86
+ | `skill-used` / `not-skill-used` | Check whether the named skill was invoked in tool calls |
85
87
 
86
88
  If transcript data is not available for tool inspection assertions, record `score: null` with a note that transcript data was not captured. Exclude from the weighted average.
87
89
 
@@ -56,14 +56,14 @@ Before proceeding to the next iteration, log the decision and rationale so the u
56
56
  Iteration 2: KEEP
57
57
  wins=3, losses=1, ties=6, meanDelta=+0.05
58
58
  Rationale: candidate wins outweigh losses (3 > 1)
59
- Baseline promoted: .agentv/results/default/20250101-120000/index.jsonl
59
+ Baseline promoted: .agentv/results/2025-01-01T12-00-00-000Z/.internal/index.jsonl
60
60
  ```
61
61
 
62
62
  ```
63
63
  Iteration 3: DISCARD
64
64
  wins=1, losses=2, ties=7, meanDelta=-0.03
65
65
  Rationale: candidate losses outweigh wins (2 > 1)
66
- Reverted to baseline: .agentv/results/default/20250101-110000/index.jsonl
66
+ Reverted to baseline: .agentv/results/2025-01-01T11-00-00-000Z/.internal/index.jsonl
67
67
  Next: try a different mutation
68
68
  ```
69
69
 
@@ -210,20 +210,20 @@ agentv eval <eval-path> --experiment autoresearch-<name>
210
210
 
211
211
  **b. Extract scores (bash only — do NOT read result files into your context)**
212
212
 
213
- Find the latest timestamped directory in the experiment folder. Use bash/jq to extract small structured values:
213
+ Find the latest run directory. Use bash/jq to extract small structured values:
214
214
 
215
215
  ```bash
216
216
  # Find latest run dir
217
- RUN_DIR=$(ls -td <experiment-dir>/20*/ | head -1)
217
+ RUN_DIR=$(ls -td .agentv/results/20*/ | head -1)
218
218
 
219
219
  # Overall score (mean of all scores in index.jsonl)
220
- SCORE=$(jq -sr '[.[].scores[].score] | add / length' "$RUN_DIR/index.jsonl")
220
+ SCORE=$(jq -sr '[.[].score] | add / length' "$RUN_DIR/.internal/index.jsonl")
221
221
 
222
- # Per-assertion pass rates as JSON object
223
- PASS_RATES=$(jq -sr '[.[].scores[]] | group_by(.type) | map({key: .[0].type, value: (map(.score) | add / length)}) | from_entries' "$RUN_DIR/index.jsonl")
222
+ # Per-target mean scores as JSON object
223
+ TARGET_SCORES=$(jq -sr 'group_by(.target) | map({key: .[0].target, value: (map(.score) | add / length)}) | from_entries' "$RUN_DIR/.internal/index.jsonl")
224
224
 
225
- # Cost (if timing.json exists)
226
- COST=$(jq -r '.cost_usd // 0' "$RUN_DIR/timing.json" 2>/dev/null || echo 0)
225
+ # Cost (if present in summary.json)
226
+ COST=$(jq -r '.cost_usd // .total_cost_usd // 0' "$RUN_DIR/summary.json" 2>/dev/null || echo 0)
227
227
  ```
228
228
 
229
229
  Capture only these small outputs (`SCORE`, `PASS_RATES`, `COST`) — never read the full JSONL into context.
@@ -6,7 +6,7 @@ core workflow step.
6
6
 
7
7
  **Provider compatibility**: Description optimization applies to any agent platform with
8
8
  skill-discovery mechanisms — Claude Code, Codex (`.agents/` or `.codex/` folders), Copilot,
9
- and others. The `skill-trigger` grader checks whether the agent invoked the right skill,
9
+ and others. The `skill-used` and `not-skill-used` graders check whether the agent invoked the right skill,
10
10
  regardless of how discovery works on that platform.
11
11
 
12
12
  ## Step 1: Generate Trigger EVAL.yaml
@@ -36,14 +36,13 @@ tests:
36
36
  - id: should-trigger-casual-optimize
37
37
  input: "ok so I have this agent that keeps failing on the code review tasks, can you help me figure out why and fix it"
38
38
  assert:
39
- - type: skill-trigger
40
- skill: agentv-bench
39
+ - type: skill-used
40
+ value: agentv-bench
41
41
  - id: should-not-trigger-build-error
42
42
  input: "my TypeScript build is failing with type errors in src/auth.ts"
43
43
  assert:
44
- - type: skill-trigger
45
- skill: agentv-bench
46
- should_trigger: false
44
+ - type: not-skill-used
45
+ value: agentv-bench
47
46
  ```
48
47
 
49
48
  ## Step 2: Review with User
@@ -21,14 +21,14 @@ for each test case, show the prompt and output. Ask for feedback inline. Skip be
21
21
  - **Codex**: Supports skills via `.agents/` or `.codex/` folders. Emits `command_execution`
22
22
  and `file_change` tool calls.
23
23
  - **Custom CLI**: Needs `command` and output file pattern in target config
24
- - **Target config**: Uses `${{ ENV_VAR }}` syntax (not `${ENV_VAR}`) for API keys
24
+ - **Target config**: Uses `{{ env.ENV_VAR }}` references for API keys
25
25
 
26
26
  **Note**: "Description Optimization" (see `references/description-optimization.md`) applies
27
27
  to any platform with skill-discovery mechanisms. All listed providers support skills.
28
28
 
29
29
  ## Unsupported Providers: Use a Code-Grader
30
30
 
31
- The built-in `skill-trigger` grader covers Claude, Copilot, Pi, Codex and VS Code out
31
+ The built-in `skill-used` and `not-skill-used` graders cover Claude, Copilot, Pi, Codex and VS Code out
32
32
  of the box. For providers with different tool-call formats, write a script-grader that inspects
33
33
  the agent's transcript messages or tool call trace.
34
34
 
@@ -37,17 +37,17 @@ transcript `messages`, and structured `trace`. Inspect `messages` or `trace.even
37
37
  tool calls; reserve `output` for final-answer text checks.
38
38
 
39
39
  ```yaml
40
- # Example: script-grader for Codex skill-trigger detection
40
+ # Example: script-grader for Codex skill-use detection
41
41
  tests:
42
- - id: should-trigger-codex
42
+ - id: codex-skill-use
43
43
  input: "Analyze this CSV file"
44
44
  assert:
45
45
  - type: script
46
- command: [bun, run, ./judges/codex-skill-trigger.ts]
46
+ command: [bun, run, ./judges/codex-skill-use.ts]
47
47
  ```
48
48
 
49
49
  ```typescript
50
- // judges/codex-skill-trigger.ts
50
+ // judges/codex-skill-use.ts
51
51
  import { defineScriptGrader } from '@agentv/sdk';
52
52
 
53
53
  export default defineScriptGrader(({ messages }) => {