benchmark-e2e
Original:🇺🇸 English
Translated
End-to-end benchmark suite for vercel-plugin. Runs realistic projects through skill injection, launches dev servers, verifies everything works, analyzes conversation logs, and produces an improvement report for overnight self-improvement loops.
14installs
Sourcevercel/vercel-plugin
Added on
NPX Install
npx skill4agent add vercel/vercel-plugin benchmark-e2eTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Benchmark E2E
Single-command pipeline that creates projects, exercises skill injection via , launches dev servers, verifies they work, analyzes conversation logs, and generates actionable improvement reports.
claude --printQuick Start
bash
# Full suite (9 projects, ~2-3 hours)
bun run scripts/benchmark-e2e.ts
# Quick mode (first 3 projects, ~30-45 min)
bun run scripts/benchmark-e2e.ts --quickOptions:
| Flag | Description | Default |
|---|---|---|
| Run only first 3 projects | |
| Override base directory | |
| Per-project timeout (forwarded to runner) | |
Pipeline Stages
The orchestrator chains four stages sequentially, aborting on failure:
- runner — Creates test dirs, installs plugin, runs with
claude --printVERCEL_PLUGIN_LOG_LEVEL=trace - verify — Detects package manager, launches dev server, polls for 200 with non-empty HTML
- analyze — Matches JSONL sessions to projects via , extracts metrics
run-manifest.json - report — Generates and
report.mdwith scorecards and recommendationsreport.json
Contracts
run-manifest.json
run-manifest.jsonWritten by the runner at . Links all downstream stages to the same run.
<base>/results/run-manifest.jsontypescript
interface BenchmarkRunManifest {
runId: string; // UUID for this pipeline run
timestamp: string; // ISO 8601
baseDir: string; // Absolute path to base directory
projects: Array<{
slug: string; // e.g. "01-recipe-platform"
cwd: string; // Absolute path to project dir
promptHash: string; // SHA hash of the prompt text
expectedSkills: string[];
}>;
}The analyzer and verifier read this manifest to correlate sessions precisely instead of guessing from directory listings.
events.jsonl
events.jsonlThe orchestrator writes NDJSON events to tracking pipeline lifecycle:
<base>/results/events.jsonljsonc
// Each line is one JSON object:
{ "stage": "pipeline", "event": "start", "timestamp": "...", "data": { "baseDir": "...", "quick": false } }
{ "stage": "runner", "event": "start", "timestamp": "...", "data": { "script": "...", "args": [...] } }
{ "stage": "runner", "event": "complete", "timestamp": "...", "data": { "exitCode": 0, "durationMs": 120000 } }
// On failure:
{ "stage": "verify", "event": "error", "timestamp": "...", "data": { "exitCode": 1, "durationMs": 5000, "slug": "04-conference-tickets" } }
{ "stage": "pipeline", "event": "abort", "timestamp": "...", "data": { "failedStage": "verify", "exitCode": 1, "slug": "04-conference-tickets" } }report.json
report.jsonMachine-readable report at for programmatic consumption:
<base>/results/report.jsontypescript
interface ReportJson {
runId: string | null;
timestamp: string;
verdict: "pass" | "partial" | "fail";
gaps: Array<{
slug: string;
expected: string[];
actual: string[];
missing: string[];
}>;
recommendations: string[];
suggestedPatterns: Array<{
skill: string; // Skill that was expected but not injected
glob: string; // Suggested pathPattern glob
tool: string; // Tool name that should trigger injection
}>;
}Overnight Automation Loop
Run the pipeline repeatedly with a cooldown between iterations:
bash
while true; do
bun run scripts/benchmark-e2e.ts
sleep 3600
doneEach run produces timestamped and files. Compare across runs to track improvement.
report.jsonreport.mdSelf-Improvement Cycle
The pipeline enables a closed feedback loop:
- Run — exercises the plugin against realistic projects
bun run scripts/benchmark-e2e.ts - Read gaps — lists which skills were expected but never injected, with exact slugs
report.json - Apply fixes — Use entries (copy-pasteable YAML) to add missing frontmatter patterns; use
suggestedPatternsto fix hook logicrecommendations - Re-run — Execute the pipeline again to verify the gaps are closed
- Compare — Diff across runs:
report.jsonshould trend fromverdict→"fail"→"partial""pass"
For overnight automation, combine with the loop above. Wake up to reports showing exactly what improved and what still needs work.
Prompt Table
Prompts never name specific technologies — they describe the product and features, letting the plugin infer which skills to inject.
| # | Slug | Expected Skills |
|---|---|---|
| 01 | recipe-platform | auth, vercel-storage, nextjs |
| 02 | trivia-game | vercel-storage, nextjs |
| 03 | code-review-bot | ai-sdk, nextjs |
| 04 | conference-tickets | payments, email, auth |
| 05 | content-aggregator | cron-jobs, ai-sdk |
| 06 | finance-tracker | cron-jobs, email |
| 07 | multi-tenant-blog | routing-middleware, cms, auth |
| 08 | status-page | cron-jobs, vercel-storage, observability |
| 09 | dog-walking-saas | payments, auth, vercel-storage, env-vars |
Cleanup
bash
rm -rf ~/dev/vercel-plugin-testing