Skip to content

Commit c75e301

Browse files
add agent support for Codex, Cursor models
Signed-off-by: vedika-saravanan <vsaravanan@nvidia.com>
1 parent 7d1e97c commit c75e301

64 files changed

Lines changed: 6977 additions & 74 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# CUDA-QX skill evaluation harness
22

33
This tree is **not** a skill. It evaluates the skills under
4-
`.claude/skills/`. Nothing in this tree is referenced from any `SKILL.md`
4+
`.agents/skills/`. Nothing in this tree is referenced from any `SKILL.md`
55
or any reference file, so an agent loading a CUDA-QX skill will not see
66
the prompts, assertions, runners, or graders that live here.
77

88
## Layout
99

1010
```
11-
.claude/evals/
11+
.agents/evals/
1212
├── prompts/ <skill>.evals.json ← user-facing prompts only
1313
├── assertions/ <skill>.json ← THE answer key (substring rules)
1414
├── runners/
@@ -38,34 +38,34 @@ folder, is the cheapest way to enforce that.
3838
3. Smoke-test:
3939

4040
```bash
41-
python .claude/evals/runners/runner.py prompts --skill <alias>
41+
python .agents/evals/runners/runner.py prompts --skill <alias>
4242
```
4343

4444
## End-to-end loop (per iteration)
4545

4646
```bash
47-
WORKSPACE=.claude/evals/workspaces/$(date +%Y-%m-%d)-iter-1
47+
WORKSPACE=.agents/evals/workspaces/$(date +%Y-%m-%d)-iter-1
4848

4949
# 1. Dump prompts for your evaluator to consume.
50-
python .claude/evals/runners/runner.py prompts --skill qec --kind all > $WORKSPACE/qec.prompts.jsonl
50+
python .agents/evals/runners/runner.py prompts --skill qec --kind all > $WORKSPACE/qec.prompts.jsonl
5151

5252
# 2. Your evaluator runs the agent (with and without the skill loaded) and
5353
# writes responses.json + timing.json into:
5454
# $WORKSPACE/with_skill/ and $WORKSPACE/without_skill/
5555

5656
# 3. Grade. Each grader is independent; run as many as you have.
57-
python .claude/evals/graders/programmatic.py --skill qec --responses $WORKSPACE/with_skill/responses.json
58-
python .claude/evals/graders/programmatic.py --skill qec --responses $WORKSPACE/without_skill/responses.json
57+
python .agents/evals/graders/programmatic.py --skill qec --responses $WORKSPACE/with_skill/responses.json
58+
python .agents/evals/graders/programmatic.py --skill qec --responses $WORKSPACE/without_skill/responses.json
5959
# (executable.py and judge.py optional; same calling convention.)
6060

6161
# 4. Aggregate per-iteration. Computes deltas between configurations.
62-
python .claude/evals/runners/runner.py aggregate $WORKSPACE
62+
python .agents/evals/runners/runner.py aggregate $WORKSPACE
6363

6464
# 5. Cross-grader agreement (Cohen's κ between programmatic / judge / etc).
65-
python .claude/evals/aggregate.py $WORKSPACE
65+
python .agents/evals/aggregate.py $WORKSPACE
6666

6767
# 6. Render the HTML viewer for human review.
68-
python .claude/evals/viewer/generate_review.py $WORKSPACE --out $WORKSPACE/report.html
68+
python .agents/evals/viewer/generate_review.py $WORKSPACE --out $WORKSPACE/report.html
6969
```
7070

7171
## Why three graders
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
This is the single report covering the eval framework, what was measured,
88
what we found, what got fixed in this round, and what to do next. Per-
99
iteration artifacts (`responses.json`, `grading.*.json`, `benchmark.json`,
10-
`report.html`) live under `.claude/evals/workspaces/<iter>/`.
10+
`report.html`) live under `.agents/evals/workspaces/<iter>/`.
1111

1212
---
1313

@@ -121,7 +121,7 @@ Every "failure" the with-skill QEC agent shows in iter 2 is one of these:
121121

122122
Four of five are pure substring brittleness — the same five that iter 1
123123
flagged. They will flip to `pass` the moment the judge grader is wired up
124-
(no agent re-runs needed, just `python .claude/evals/graders/judge.py` on
124+
(no agent re-runs needed, just `python .agents/evals/graders/judge.py` on
125125
the existing `responses.json`).
126126

127127
The fifth (`S13`, the new docs prompt) is a **real** content gap: the QEC
@@ -137,7 +137,7 @@ This is not a phrasing artifact — it's structural:
137137

138138
* On in-scope prompts (e.g. "Build a Steane memory experiment"), the
139139
with-skill agent emits the marker (`cuda-qx-qec`); the baseline cannot,
140-
because the skill name lives in `.claude/skills/cuda-qx-qec/` which it
140+
because the skill name lives in `.agents/skills/cuda-qx-qec/` which it
141141
was forbidden to read.
142142
* On out-of-scope prompts (e.g. "Open the cudaq_qec docs offline" — the new
143143
`A11`), the with-skill agent correctly *withholds* the marker and
@@ -257,23 +257,23 @@ cd /workspaces/cuda-qx-g
257257
source .venv/bin/activate
258258

259259
# inspect the latest results
260-
ls .claude/evals/workspaces/2026-05-07-qec-iter2/
261-
ls .claude/evals/workspaces/2026-05-07-solvers-iter1/
262-
python -m http.server -d .claude/evals/workspaces/2026-05-07-qec-iter2 8001
260+
ls .agents/evals/workspaces/2026-05-07-qec-iter2/
261+
ls .agents/evals/workspaces/2026-05-07-solvers-iter1/
262+
python -m http.server -d .agents/evals/workspaces/2026-05-07-qec-iter2 8001
263263
# open http://localhost:8001/report.html
264264

265265
# add a new prompt to a skill and re-grade only:
266-
$EDITOR .claude/evals/prompts/cuda-qx-qec.evals.json
267-
$EDITOR .claude/evals/assertions/cuda-qx-qec.json
268-
python .claude/evals/graders/programmatic.py --skill qec \
269-
--responses .claude/evals/workspaces/2026-05-07-qec-iter2/with_skill/responses.json
270-
python .claude/evals/aggregate.py .claude/evals/workspaces/2026-05-07-qec-iter2
266+
$EDITOR .agents/evals/prompts/cuda-qx-qec.evals.json
267+
$EDITOR .agents/evals/assertions/cuda-qx-qec.json
268+
python .agents/evals/graders/programmatic.py --skill qec \
269+
--responses .agents/evals/workspaces/2026-05-07-qec-iter2/with_skill/responses.json
270+
python .agents/evals/aggregate.py .agents/evals/workspaces/2026-05-07-qec-iter2
271271

272272
# new iteration from scratch (any skill):
273-
WS=.claude/evals/workspaces/2026-05-08-build-iter1
273+
WS=.agents/evals/workspaces/2026-05-08-build-iter1
274274
mkdir -p $WS/{with_skill,without_skill}
275275
echo build > $WS/skill.txt
276-
python .claude/evals/runners/runner.py prompts --skill build --kind all --format json > $WS/prompts.json
276+
python .agents/evals/runners/runner.py prompts --skill build --kind all --format json > $WS/prompts.json
277277
# launch two subagents (one with skill access, one without), each writes
278278
# responses.json + timing.json into its directory.
279279
# then grade + aggregate + render as above.
@@ -288,11 +288,11 @@ validated by re-running just the grader, no agent tokens spent.
288288

289289
| Path | What it is |
290290
|---|---|
291-
| `.claude/evals/REPORT.md` | This report (canonical) |
292-
| `.claude/evals/README.md` | Pipeline reference |
293-
| `.claude/evals/workspaces/2026-05-07-qec-iter1/` | First QEC run (22 prompts), original surfacing of venv + docs gaps |
294-
| `.claude/evals/workspaces/2026-05-07-qec-iter2/` | Re-run after venv fix + docs prompts (24 prompts) |
295-
| `.claude/evals/workspaces/2026-05-07-solvers-iter1/` | First solvers run (24 prompts) |
296-
| `.claude/skills/_shared/scripts/preflight.sh` | Venv-discovery patch lives here |
297-
| `.claude/evals/prompts/cuda-qx-{qec,solvers}.evals.json` | Includes new `S13` + `A11` |
298-
| `.claude/evals/assertions/cuda-qx-{qec,solvers}.json` | Answer key for `S13` + `A11` |
291+
| `.agents/evals/REPORT.md` | This report (canonical) |
292+
| `.agents/evals/README.md` | Pipeline reference |
293+
| `.agents/evals/workspaces/2026-05-07-qec-iter1/` | First QEC run (22 prompts), original surfacing of venv + docs gaps |
294+
| `.agents/evals/workspaces/2026-05-07-qec-iter2/` | Re-run after venv fix + docs prompts (24 prompts) |
295+
| `.agents/evals/workspaces/2026-05-07-solvers-iter1/` | First solvers run (24 prompts) |
296+
| `.agents/skills/_shared/scripts/preflight.sh` | Venv-discovery patch lives here |
297+
| `.agents/evals/prompts/cuda-qx-{qec,solvers}.evals.json` | Includes new `S13` + `A11` |
298+
| `.agents/evals/assertions/cuda-qx-{qec,solvers}.json` | Answer key for `S13` + `A11` |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
Run AFTER you have grading.*.json files in each configuration directory
55
of an iteration::
66
7-
python .claude/evals/aggregate.py .claude/evals/workspaces/<iter>/
7+
python .agents/evals/aggregate.py .agents/evals/workspaces/<iter>/
88
99
Two outputs:
1010

.claude/evals/assertions/cuda-qx-build.json renamed to .agents/evals/assertions/cuda-qx-build.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"skill_name": "cuda-qx-build",
3-
"_note": "Answer key. NEVER read this file from inside SKILL.md or any references/*.md. Loaded by .claude/evals/graders/ only.",
3+
"_note": "Answer key. NEVER read this file from inside SKILL.md or any references/*.md. Loaded by .agents/evals/graders/ only.",
44
"activation_marker": "cuda-qx-build",
55
"scenarios": {
66
"S1": {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"skill_name": "cuda-qx-qec",
3-
"_note": "Answer key. NEVER read this file from inside SKILL.md or any references/*.md. Loaded by .claude/evals/graders/ only.",
3+
"_note": "Answer key. NEVER read this file from inside SKILL.md or any references/*.md. Loaded by .agents/evals/graders/ only.",
44
"activation_marker": "cuda-qx-qec",
55
"scenarios": {
66
"S1": {

.claude/evals/assertions/cuda-qx-solvers.json renamed to .agents/evals/assertions/cuda-qx-solvers.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"skill_name": "cuda-qx-solvers",
3-
"_note": "Answer key. NEVER read this file from inside SKILL.md or any references/*.md. The agent under test must not see this content. Loaded by .claude/evals/graders/programmatic.py (and judge.py) only.",
3+
"_note": "Answer key. NEVER read this file from inside SKILL.md or any references/*.md. The agent under test must not see this content. Loaded by .agents/evals/graders/programmatic.py (and judge.py) only.",
44
"activation_marker": "cuda-qx-solvers",
55
"scenarios": {
66
"S1": {
File renamed without changes.

0 commit comments

Comments
 (0)