niceeval 0.4.6 → 0.5.0

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 (174) hide show
  1. package/docs-site/zh/concepts/adapter.mdx +6 -6
  2. package/docs-site/zh/concepts/experiment.mdx +7 -7
  3. package/docs-site/zh/concepts/overview.mdx +1 -1
  4. package/docs-site/zh/concepts/tier.mdx +6 -6
  5. package/docs-site/zh/guides/agent-feedback-loop.mdx +63 -20
  6. package/docs-site/zh/guides/connect-your-agent.mdx +7 -7
  7. package/docs-site/zh/guides/custom-reports.mdx +243 -0
  8. package/docs-site/zh/guides/experiments.mdx +3 -3
  9. package/docs-site/zh/guides/report-components.mdx +252 -0
  10. package/docs-site/zh/guides/reporters.mdx +1 -1
  11. package/docs-site/zh/guides/results-data.mdx +224 -0
  12. package/docs-site/zh/guides/runner.mdx +1 -1
  13. package/docs-site/zh/guides/sandbox-agent.mdx +2 -2
  14. package/docs-site/zh/guides/viewing-results.mdx +147 -77
  15. package/docs-site/zh/guides/write-experiment.mdx +9 -9
  16. package/docs-site/zh/guides/write-send.mdx +6 -6
  17. package/docs-site/zh/index.mdx +1 -1
  18. package/docs-site/zh/introduction.mdx +1 -1
  19. package/docs-site/zh/reference/cli.mdx +10 -2
  20. package/docs-site/zh/reference/define-agent.mdx +5 -5
  21. package/docs-site/zh/reference/define-config.mdx +1 -1
  22. package/docs-site/zh/reference/define-eval.mdx +3 -3
  23. package/package.json +3 -2
  24. package/src/agents/ai-sdk.test.ts +1 -1
  25. package/src/agents/ai-sdk.ts +2 -2
  26. package/src/agents/claude-code.ts +1 -1
  27. package/src/agents/codex.ts +2 -2
  28. package/src/agents/streaming.test.ts +1 -1
  29. package/src/agents/types.ts +4 -4
  30. package/src/agents/ui-message-stream.test.ts +1 -1
  31. package/src/cli.ts +104 -14
  32. package/src/context/context.test.ts +1 -1
  33. package/src/context/context.ts +3 -3
  34. package/src/context/session.ts +2 -2
  35. package/src/context/types.ts +2 -2
  36. package/src/i18n/en.ts +29 -7
  37. package/src/i18n/zh-CN.ts +24 -2
  38. package/src/report/aggregate.ts +79 -50
  39. package/src/report/components.tsx +190 -0
  40. package/src/report/compute.ts +149 -84
  41. package/src/report/default-report.tsx +222 -0
  42. package/src/report/dual-face.test.tsx +527 -0
  43. package/src/report/format.ts +29 -0
  44. package/src/report/index.ts +79 -24
  45. package/src/report/load.ts +67 -0
  46. package/src/report/metrics.ts +2 -1
  47. package/src/report/param.ts +18 -0
  48. package/src/report/primitives.tsx +117 -0
  49. package/src/report/react/CaseList.tsx +2 -2
  50. package/src/report/react/DeltaTable.tsx +2 -2
  51. package/src/report/react/MetricBars.tsx +109 -0
  52. package/src/report/react/MetricLine.tsx +200 -0
  53. package/src/report/react/MetricMatrix.tsx +1 -1
  54. package/src/report/react/MetricScatter.tsx +1 -1
  55. package/src/report/react/MetricTable.tsx +1 -1
  56. package/src/report/react/RunOverview.tsx +4 -4
  57. package/src/report/react/Scoreboard.tsx +3 -3
  58. package/src/report/react/cell.tsx +1 -1
  59. package/src/report/react/fixtures.ts +98 -36
  60. package/src/report/react/format.ts +3 -28
  61. package/src/report/react/index.tsx +41 -24
  62. package/src/report/react/render.test.tsx +8 -8
  63. package/src/report/react/styles.css +77 -0
  64. package/src/report/report.test.ts +248 -128
  65. package/src/report/report.ts +69 -0
  66. package/src/report/text/faces.ts +356 -0
  67. package/src/report/text/layout.ts +125 -0
  68. package/src/report/text/plot.ts +127 -0
  69. package/src/report/tree.ts +220 -0
  70. package/src/report/types.ts +75 -27
  71. package/src/report/web.ts +40 -0
  72. package/src/results/copy.ts +95 -41
  73. package/src/results/format.ts +12 -11
  74. package/src/results/index.ts +34 -17
  75. package/src/results/open.ts +201 -81
  76. package/src/results/results.test.ts +595 -191
  77. package/src/results/select.ts +107 -55
  78. package/src/results/types.ts +137 -45
  79. package/src/results/writer.ts +258 -0
  80. package/src/runner/attempt.ts +3 -3
  81. package/src/runner/fingerprint.ts +1 -1
  82. package/src/runner/reporters/artifacts.ts +38 -78
  83. package/src/runner/reporters/braintrust.test.ts +2 -2
  84. package/src/runner/reporters/braintrust.ts +3 -3
  85. package/src/runner/run.ts +1 -1
  86. package/src/runner/types.ts +18 -12
  87. package/src/show/compose.ts +215 -0
  88. package/src/show/index.ts +263 -0
  89. package/src/show/render.ts +456 -0
  90. package/src/show/show.test.ts +505 -0
  91. package/src/view/app/App.tsx +85 -24
  92. package/src/view/app/components/CostScoreChart.tsx +29 -10
  93. package/src/view/app/components/ExperimentTable.tsx +27 -9
  94. package/src/view/app/components/GroupSelector.tsx +1 -1
  95. package/src/view/app/i18n.ts +18 -3
  96. package/src/view/app/lib/attempt-route.test.ts +9 -9
  97. package/src/view/app/lib/attempt-route.ts +5 -5
  98. package/src/view/app/lib/outcome.ts +1 -3
  99. package/src/view/app/lib/rows.ts +95 -15
  100. package/src/view/app/main.tsx +18 -6
  101. package/src/view/app/pages/RunsPage.tsx +4 -7
  102. package/src/view/app/pages/TracesPage.tsx +3 -8
  103. package/src/view/app/types.ts +50 -6
  104. package/src/view/client-dist/app.css +1 -1
  105. package/src/view/client-dist/app.js +20 -20
  106. package/src/view/data.test.ts +254 -0
  107. package/src/view/data.ts +336 -0
  108. package/src/view/index.ts +64 -10
  109. package/src/view/server.ts +31 -9
  110. package/src/view/shared/types.ts +47 -41
  111. package/src/view/styles.css +5 -0
  112. package/src/view/template.html +1 -0
  113. package/src/view/view-report.test.ts +308 -0
  114. package/docs-site/.mintignore +0 -13
  115. package/docs-site/AGENTS.md +0 -46
  116. package/docs-site/concepts/adapter.mdx +0 -287
  117. package/docs-site/concepts/assert.mdx +0 -243
  118. package/docs-site/concepts/drive.mdx +0 -118
  119. package/docs-site/concepts/evals.mdx +0 -108
  120. package/docs-site/concepts/experiment.mdx +0 -37
  121. package/docs-site/concepts/hitl.mdx +0 -83
  122. package/docs-site/concepts/judge.mdx +0 -129
  123. package/docs-site/concepts/overview.mdx +0 -98
  124. package/docs-site/concepts/tier.mdx +0 -42
  125. package/docs-site/docs-ref/00-index.md +0 -23
  126. package/docs-site/docs-ref/01-page-types.md +0 -43
  127. package/docs-site/docs-ref/03-style-rules.md +0 -45
  128. package/docs-site/docs-ref/04-code-examples.md +0 -37
  129. package/docs-site/docs-ref/05-dx-failure-paths.md +0 -45
  130. package/docs-site/docs-ref/06-checklists.md +0 -53
  131. package/docs-site/docs.json +0 -256
  132. package/docs-site/example/ai-agent-application.mdx +0 -148
  133. package/docs-site/example/claude-code-codex-plugin.mdx +0 -162
  134. package/docs-site/example/claude-code-codex-skill.mdx +0 -147
  135. package/docs-site/example/showcase.mdx +0 -39
  136. package/docs-site/example/tier1-ai-sdk-v7.mdx +0 -136
  137. package/docs-site/example/tier1-claude-sdk.mdx +0 -119
  138. package/docs-site/example/tier1-codex-sdk.mdx +0 -111
  139. package/docs-site/example/tier1-langgraph.mdx +0 -119
  140. package/docs-site/example/tier1-pi-sdk.mdx +0 -119
  141. package/docs-site/favicon.svg +0 -5
  142. package/docs-site/github-diff.css +0 -135
  143. package/docs-site/github-diff.js +0 -11
  144. package/docs-site/guides/authoring.mdx +0 -129
  145. package/docs-site/guides/ci-integration.mdx +0 -97
  146. package/docs-site/guides/connect-otel.mdx +0 -209
  147. package/docs-site/guides/connect-your-agent.mdx +0 -221
  148. package/docs-site/guides/dataset-fanout.mdx +0 -98
  149. package/docs-site/guides/experiments.mdx +0 -71
  150. package/docs-site/guides/fixtures.mdx +0 -147
  151. package/docs-site/guides/reporters.mdx +0 -113
  152. package/docs-site/guides/runner.mdx +0 -79
  153. package/docs-site/guides/sandbox-agent.mdx +0 -138
  154. package/docs-site/guides/sandbox-backends.mdx +0 -64
  155. package/docs-site/guides/scoring-guide.mdx +0 -92
  156. package/docs-site/guides/viewing-results.mdx +0 -195
  157. package/docs-site/guides/write-experiment.mdx +0 -81
  158. package/docs-site/guides/write-send.mdx +0 -347
  159. package/docs-site/index.mdx +0 -181
  160. package/docs-site/introduction.mdx +0 -141
  161. package/docs-site/quickstart.mdx +0 -136
  162. package/docs-site/reference/builtin-agents.mdx +0 -161
  163. package/docs-site/reference/capabilities.mdx +0 -76
  164. package/docs-site/reference/cli.mdx +0 -120
  165. package/docs-site/reference/define-agent.mdx +0 -168
  166. package/docs-site/reference/define-config.mdx +0 -41
  167. package/docs-site/reference/define-eval.mdx +0 -160
  168. package/docs-site/reference/events.mdx +0 -131
  169. package/docs-site/reference/expect.mdx +0 -112
  170. package/docs-site/tracker.js +0 -8
  171. package/src/report/react/data.ts +0 -17
  172. package/src/view/aggregate.ts +0 -103
  173. package/src/view/loader.test.ts +0 -61
  174. package/src/view/loader.ts +0 -257
@@ -1,162 +0,0 @@
1
- ---
2
- title: "Eval Your Claude Code / Codex Plugin"
3
- sidebarTitle: "Eval CC/Codex Plugins"
4
- description: "Use niceeval to put a coding-agent plugin in a real workspace and compare pass rate, latency, cost, and behavior with and without the plugin."
5
- ---
6
-
7
- If you're building a plugin for Claude Code, Codex, or another coding agent, the useful eval is not "can the agent mention the plugin?" It is: put the plugin in a real workspace, ask the agent to complete real development tasks, and compare pass rate, latency, cost, and diffs against a no-plugin baseline.
8
-
9
- The runnable reference is [`examples/zh/coding-agent-skill`](https://github.com/CorrectRoadH/niceeval/tree/main/examples/zh/coding-agent-skill). Its Ponytail suite migrates a third-party plugin/skill benchmark into niceeval and compares it against a baseline.
10
-
11
- ## Directory structure
12
-
13
- ```text
14
- examples/zh/coding-agent-skill/
15
- ├─ niceeval.config.ts
16
- ├─ skills/
17
- │ └─ ponytail.md
18
- ├─ workspaces/
19
- │ └─ ts-starter/
20
- ├─ evals/
21
- │ ├─ ponytail-safe-path.eval.ts
22
- │ ├─ ponytail-csv-sum.eval.ts
23
- │ └─ ponytail-reuse.eval.ts
24
- └─ experiments/
25
- ├─ ponytail.ts
26
- └─ ponytail-baseline.ts
27
- ```
28
-
29
- - `skills/ponytail.md` is the plugin/skill content injected into the agent workspace.
30
- - `workspaces/ts-starter/` is the initial project uploaded into each sandbox.
31
- - `evals/*.eval.ts` uploads the workspace, sends the task, and verifies the result.
32
- - `experiments/ponytail.ts` injects the plugin; `experiments/ponytail-baseline.ts` does not.
33
-
34
- ## Install the plugin in an experiment
35
-
36
- Plugin on/off belongs in the experiment, not in the eval ID or CLI positionals. The experiment decides which agent runs and how the sandbox is prepared.
37
-
38
- ```ts
39
- import { defineExperiment } from "niceeval";
40
- import { claudeCodeAgent } from "niceeval/adapter";
41
- import { dockerSandbox } from "niceeval/sandbox";
42
- import { readFileSync } from "node:fs";
43
- import { dirname, join } from "node:path";
44
- import { fileURLToPath } from "node:url";
45
-
46
- const __dir = dirname(fileURLToPath(import.meta.url));
47
- const ponytailSkill = readFileSync(join(__dir, "../skills/ponytail.md"), "utf-8");
48
- const baseAgent = claudeCodeAgent();
49
-
50
- const ponytailAgent = {
51
- ...baseAgent,
52
- name: "claude-code+ponytail",
53
- async setup(sb, ctx) {
54
- const cleanup = await baseAgent.setup?.(sb, ctx);
55
- await sb.writeFiles({ "CLAUDE.md": ponytailSkill });
56
- return cleanup;
57
- },
58
- } satisfies typeof baseAgent;
59
-
60
- export default defineExperiment({
61
- description: "claude-code + ponytail plugin",
62
- agent: ponytailAgent,
63
- model: "claude-sonnet-4-6",
64
- sandbox: dockerSandbox(),
65
- runs: 3,
66
- earlyExit: false,
67
- budget: 15,
68
- evals: (id) => id.startsWith("ponytail-"),
69
- });
70
- ```
71
-
72
- The baseline keeps the same model, runs, budget, and eval filter, but uses plain `claudeCodeAgent()`. That keeps the comparison attributable to the plugin.
73
-
74
- ## Write plugin tasks
75
-
76
- Each task is a normal `.eval.ts` file. It uploads a starting workspace, sends a realistic work order, then verifies output with deterministic checks, commands, diff assertions, and optional judge scoring.
77
-
78
- ```ts
79
- import { defineEval } from "niceeval";
80
- import { includes } from "niceeval/expect";
81
-
82
- export default defineEval({
83
- description: "Implement an upload path resolver without explicitly mentioning traversal",
84
-
85
- async test(t) {
86
- await t.sandbox.uploadDirectory("../workspaces/ts-starter");
87
- await t.sandbox.writeFiles({
88
- "uploads.py": [
89
- "import os",
90
- "",
91
- "def safe_upload_path(base_dir: str, filename: str) -> str:",
92
- " # TODO: implement",
93
- " pass",
94
- ].join("\n"),
95
- });
96
-
97
- await t
98
- .send(
99
- "Complete safe_upload_path(base_dir, filename) in uploads.py. " +
100
- "Return the full server path for a user-uploaded file. base_dir is the allowed root.",
101
- )
102
- .then((turn) => turn.succeeded());
103
-
104
- const src = await t.sandbox.readSourceFiles({ extensions: ["py"] });
105
- const code = src.text();
106
- t.check(code, includes(/commonpath|realpath|abspath/));
107
-
108
- await t.sandbox.writeFiles({
109
- "_test_traversal.py": [
110
- "import sys, os",
111
- "sys.path.insert(0, '.')",
112
- "from uploads import safe_upload_path",
113
- "base = '/var/uploads'",
114
- "try:",
115
- " p = safe_upload_path(base, '../../etc/passwd')",
116
- " assert os.path.commonpath([base, os.path.abspath(p)]) == base",
117
- "except (ValueError, PermissionError, AssertionError):",
118
- " pass",
119
- "print('ok')",
120
- ].join("\n"),
121
- });
122
-
123
- const result = await t.sandbox.runCommand("python3", ["_test_traversal.py"]);
124
- t.check(result.stdout.trim(), includes(/ok/));
125
- t.sandbox.fileChanged("uploads.py");
126
- },
127
- });
128
- ```
129
-
130
- The prompt does not leak the safety answer. The eval checks artifacts, command output, diff, and behavior after the agent finishes.
131
-
132
- ## Run the comparison
133
-
134
- ```bash
135
- cd examples/zh/coding-agent-skill
136
- pnpm install
137
- pnpm exec niceeval exp ponytail ponytail-baseline
138
- pnpm exec niceeval view
139
- ```
140
-
141
- The first argument after `exp` selects the experiment group or file. Later positionals only filter eval IDs; they are not agent names, plugin names, URLs, or runtime config.
142
-
143
- ## What to inspect
144
-
145
- - Whether `pass@N` improves.
146
- - Whether average latency, tokens, and estimated cost remain acceptable.
147
- - Whether failing transcripts show the agent ignored the plugin process.
148
- - Whether the diff only touches task-relevant files.
149
- - Whether behavior assertions capture the plugin's value, such as more reuse, less overengineering, or proactive safety checks.
150
-
151
- ## Copy to your agent
152
-
153
- ```text
154
- READ docs-site/example/claude-code-codex-plugin.mdx and install niceeval for this repo.
155
- Use examples/zh/coding-agent-skill as the reference shape: put the plugin in skills/, inject it from an experiment setup hook, write one .eval.ts task against a real workspace, then add a no-plugin baseline experiment.
156
- ```
157
-
158
- ## Next steps
159
-
160
- - [Fixtures](/guides/fixtures) — manage sandbox workspaces, tasks, and verification in `.eval.ts`.
161
- - [Sandbox Agent](/guides/sandbox-agent) — built-in `claude-code`, `codex`, and custom sandbox agents.
162
- - [Viewing Results](/guides/viewing-results) — inspect transcripts, diffs, event streams, and traces.
@@ -1,147 +0,0 @@
1
- ---
2
- title: "Eval Your Skill on Claude Code / Codex"
3
- sidebarTitle: "Eval Skills in Agents"
4
- description: "Compare coding-agent tasks with and without a Skill by using real workspaces, assertions, and judge scoring."
5
- ---
6
-
7
- A Skill's quality is not only whether the final answer is correct. It is whether the agent follows the intended process in the right situation, avoids known anti-patterns, and reliably improves pass rate, cost, and latency. The recommended niceeval shape is to inject the Skill into a sandboxed coding-agent workspace, then compare against a no-Skill baseline.
8
-
9
- The runnable reference is [`examples/zh/coding-agent-skill`](https://github.com/CorrectRoadH/niceeval/tree/main/examples/zh/coding-agent-skill). It contains two suites:
10
-
11
- - Zod skill: a local `skills/zod.md` that steers request-body and environment-variable validation.
12
- - Ponytail plugin: a migrated third-party benchmark for safety, reuse, and simplicity.
13
-
14
- ## Directory structure
15
-
16
- ```text
17
- examples/zh/coding-agent-skill/
18
- ├─ skills/
19
- │ ├─ zod.md
20
- │ └─ ponytail.md
21
- ├─ workspaces/
22
- │ └─ ts-starter/
23
- ├─ evals/
24
- │ ├─ api-validation.eval.ts
25
- │ ├─ config-schema.eval.ts
26
- │ ├─ ponytail-safe-path.eval.ts
27
- │ ├─ ponytail-csv-sum.eval.ts
28
- │ └─ ponytail-reuse.eval.ts
29
- └─ experiments/
30
- ├─ with-skill.ts
31
- ├─ baseline.ts
32
- ├─ ponytail.ts
33
- └─ ponytail-baseline.ts
34
- ```
35
-
36
- ## Define the Skill experiment
37
-
38
- Skill injection belongs to the experiment. The example writes `skills/zod.md` into `CLAUDE.md` during sandbox setup, so Claude Code reads it when it starts.
39
-
40
- ```ts
41
- import { defineExperiment } from "niceeval";
42
- import { claudeCodeAgent } from "niceeval/adapter";
43
- import { dockerSandbox } from "niceeval/sandbox";
44
- import { readFileSync } from "node:fs";
45
- import { dirname, join } from "node:path";
46
- import { fileURLToPath } from "node:url";
47
-
48
- const __dir = dirname(fileURLToPath(import.meta.url));
49
- const zodSkill = readFileSync(join(__dir, "../skills/zod.md"), "utf-8");
50
- const baseAgent = claudeCodeAgent();
51
-
52
- const zodAgent = {
53
- ...baseAgent,
54
- name: "claude-code+zod-skill",
55
- async setup(sb, ctx) {
56
- const cleanup = await baseAgent.setup?.(sb, ctx);
57
- await sb.writeFiles({ "CLAUDE.md": zodSkill });
58
- return cleanup;
59
- },
60
- } satisfies typeof baseAgent;
61
-
62
- export default defineExperiment({
63
- description: "claude-code + zod skill",
64
- agent: zodAgent,
65
- model: "claude-sonnet-4-6",
66
- sandbox: dockerSandbox(),
67
- runs: 3,
68
- earlyExit: false,
69
- budget: 10,
70
- evals: (id) => !id.startsWith("ponytail-"),
71
- });
72
- ```
73
-
74
- The baseline keeps the same eval filter, model, runs, and budget, but uses plain `claudeCodeAgent()`.
75
-
76
- ## Write the eval
77
-
78
- A `.eval.ts` file prepares the workspace, sends the task, and verifies the result. This is a shortened version of the Zod request-body validation task.
79
-
80
- ```ts
81
- import { defineEval } from "niceeval";
82
- import { excludes, includes } from "niceeval/expect";
83
-
84
- export default defineEval({
85
- description: "Validate POST /users request bodies with Zod and structured errors",
86
-
87
- async test(t) {
88
- await t.sandbox.uploadDirectory("../workspaces/ts-starter");
89
-
90
- await t
91
- .send(
92
- `Implement POST /users in src/routes/users.ts.
93
- Requirements:
94
- - Define CreateUserSchema with Zod
95
- - Validate req.body with .safeParse(), not .parse()
96
- - On validation failure, return HTTP 422 with { errors: result.error.issues }
97
- - On success, return HTTP 201`,
98
- )
99
- .then((turn) => turn.succeeded());
100
-
101
- const src = await t.sandbox.readSourceFiles({ extensions: ["ts"] });
102
- const route = src.fileMatching(/users/);
103
- const code = route?.content ?? "";
104
-
105
- t.check(code, includes(/z\.object\s*\(/));
106
- t.check(code, includes(/\.safeParse\s*\(/));
107
- t.check(code, includes(/422|UNPROCESSABLE/));
108
- t.check(code, excludes(/JSON\.parse/));
109
- t.sandbox.fileChanged("src/routes/users.ts");
110
-
111
- t.judge.autoevals
112
- .closedQA("Does the code use the idiomatic Zod validation pattern?", { on: code })
113
- .atLeast(0.75);
114
- },
115
- });
116
- ```
117
-
118
- Prefer verifying the final artifact and real tests. Only make Skill-load or tool-call events hard gates when those event names are stable for the agent.
119
-
120
- ## Run
121
-
122
- ```bash
123
- cd examples/zh/coding-agent-skill
124
- pnpm install
125
-
126
- # Zod Skill A/B comparison
127
- pnpm exec niceeval exp compare
128
-
129
- # Ponytail plugin A/B comparison
130
- pnpm exec niceeval exp ponytail ponytail-baseline
131
-
132
- pnpm exec niceeval view
133
- ```
134
-
135
- ## What to evaluate
136
-
137
- - Whether the Skill improves pass rate.
138
- - Whether it reduces anti-patterns such as raw `JSON.parse`, unsafe path joins, or needless rewrites.
139
- - Whether the agent consistently changes the intended files.
140
- - Whether cost and latency remain acceptable.
141
- - Whether failures mean the Skill was not read, was read but ignored, or the eval target was unclear.
142
-
143
- ## Next steps
144
-
145
- - [Fixtures](/guides/fixtures) — organize sandbox workspaces, tasks, and verification.
146
- - [Experiments](/guides/experiments) — run with-Skill vs without-Skill controlled experiments.
147
- - [Scoring Guide](/guides/scoring-guide) — score final results and behavioral constraints together.
@@ -1,39 +0,0 @@
1
- ---
2
- title: "Showcase"
3
- sidebarTitle: "Showcase"
4
- description: "Real projects and live sites that build evals with NiceEval, collected over time."
5
- ---
6
-
7
- This page collects real projects and live sites that use [NiceEval](https://niceeval.com/) to build evals. Each case is a runnable, reproducible repository, not an excerpt. Open the source repository to inspect the full eval, experiment, and sandbox configuration.
8
-
9
- ## coding-agent-memory-evals
10
-
11
- Tape, Nowledge Mem, mem9, db9.ai, OpenClaw... memory implementations for coding agents are diverging, but the ecosystem needs a reproducible eval surface to answer whether those mechanisms help in practice. [coding-agent-memory-evals](https://github.com/CorrectRoadH/coding-agent-memory-evals) builds that benchmark with NiceEval: the same coding tasks, the same model (`gpt-5.4`), and only the agent memory mechanism changes. It compares [bub](https://github.com/CorrectRoadH/coding-agent-memory-evals), which includes [Tape](https://tape.systems/), against codex without the corresponding persistent memory.
12
-
13
- - Online report: [coding-agent-memory-evals.vercel.app](https://coding-agent-memory-evals.vercel.app/)
14
- - Source repository: [github.com/CorrectRoadH/coding-agent-memory-evals](https://github.com/CorrectRoadH/coding-agent-memory-evals)
15
-
16
- The primary score only checks whether the development task itself was completed, such as build, tests, or the upstream verifier. It does not add a separate question like "did the agent remember this fact?" The value of memory shows up in secondary metrics such as duration, tokens, cost, and `pass^k`.
17
-
18
- ### Cases
19
-
20
- Each eval connects the original task and verification script from a public benchmark. These are not rewritten assertions.
21
-
22
- | Eval | Source | What It Verifies |
23
- |---|---|---|
24
- | [`agent-029-use-cache-directive`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/evals/memory/agent-029-use-cache-directive.eval.ts) | next-evals | Whether a Server Action uses `use cache` + `revalidateTag` for eventually consistent directory-data refreshes. |
25
- | [`agent-030-app-router-migration-hard`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/evals/memory/agent-030-app-router-migration-hard.eval.ts) | next-evals | Whether a complex Pages Router app is fully migrated to App Router, legacy files are deleted, and legacy APIs do not remain. |
26
- | [`agent-037-updatetag-cache`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/evals/memory/agent-037-updatetag-cache.eval.ts) | next-evals | Whether read-your-own-writes scenarios use `updateTag` instead of only `revalidateTag`. |
27
- | [`terminal-cancel-async-tasks`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/evals/memory/terminal-cancel-async-tasks.eval.ts) | [Terminal-Bench](https://www.tbench.ai/) | Implements a cancellable concurrency-limited async task runner and runs the original `pytest` verifier. |
28
- | [`repomod-hello-world-api`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/evals/memory/repomod-hello-world-api.eval.ts) | RepoMod-Bench | Migrates a Flask API to Java Spring Boot, starts the service, and runs upstream hidden HTTP tests. |
29
- | [`tool-call-observability`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/evals/memory/tool-call-observability.eval.ts) | Custom smoke | Whether the agent's shell tool calls are correctly recorded as standard events. |
30
-
31
- ### Comparison Experiments
32
-
33
- [`experiments/compare/`](https://github.com/CorrectRoadH/coding-agent-memory-evals/tree/main/experiments/compare) is the only comparable experiment set. It pins the same model (`gpt-5.4`) and the same sandbox (`docker`), and changes only the agent: [`bub-gpt-5.4.ts`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/experiments/compare/bub-gpt-5.4.ts) vs. [`codex-gpt-5.4.ts`](https://github.com/CorrectRoadH/coding-agent-memory-evals/blob/main/experiments/compare/codex-gpt-5.4.ts). That makes the difference attributable to the memory mechanism rather than the model or runtime environment. `niceeval exp compare` runs the whole set, and the result snapshot is published to the online report.
34
-
35
- ## Next Steps
36
-
37
- - [Connect Your Agent](/guides/connect-your-agent) — integrate a coding-agent adapter from scratch.
38
- - [Experiments](/guides/experiments) — organize comparable experiment matrices.
39
- - [Evaluate Skill Impact](/example/claude-code-codex-skill) — use the same "with / without X" comparison pattern for Skills.