Fetch benchmark performance data from 6 leaderboard websites using Playwright MCP and update model manifests with the latest scores...
Automate the fetching of benchmark performance data from leaderboard websites and update model manifests with the latest scores using advanced browser automation.
This skill extends benchmark data collection by automating visits to 6 major AI model leaderboard websites, extracting performance scores, and updating model manifests in manifests/models/ with the latest benchmark data.
Key Features:
| Benchmark | Website | Manifest Field | Format |
|---|---|---|---|
| SWE-bench | https://www.swebench.com | sweBench |
Percentage (0-100) |
| TerminalBench | https://www.tbench.ai/leaderboard/terminal-bench/2.0 | terminalBench |
Decimal (0-1) |
| MMMU | https://mmmu-benchmark.github.io/#leaderboard | mmmu, mmmuPro |
Percentage (0-100) |
| SciCode | https://scicode-bench.github.io/leaderboard/ | sciCode |
Percentage (0-100) |
| LiveCodeBench | https://livecodebench.github.io/leaderboard.html | liveCodeBench |
Percentage (0-100) |
| WebDevArena | https://web.lmarena.ai/leaderboard | webDevArena |
Percentage (0-100) |
Note: TerminalBench uses a decimal format (0-1 scale), while all other benchmarks use percentage format (0-100 scale).
Update all model manifests with latest benchmark data from all 6 websites:
node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs
Update only specific benchmarks:
# Fetch only SWE-bench and TerminalBench
node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --benchmarks swebench,terminalBench
# Fetch only LiveCodeBench
node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --benchmarks liveCodeBench
Update benchmarks for specific models only:
# Update only Claude Sonnet 4.5 and GPT-4o
node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --models claude-sonnet-4-5,gpt-4o
Preview what would be updated without actually modifying manifests:
node .claude/skills/benchmark-fetcher/scripts/fetch-benchmarks.mjs --dry-run
Each benchmark website uses different naming conventions for models. The references/model-name-mappings.json file maps website-specific model names to manifest IDs.
Example mapping:
{
"swebench": {
"websiteModels": {
"Claude Sonnet 4.5": "claude-sonnet-4-5",
"GPT-4o": "gpt-4o",
"Gemini 2.5 Pro": "gemini-2-5-pro"
}
}
}
The mapper uses a 3-tier fallback strategy:
Normalization: Removes spaces, hyphens, and special characters for fuzzy matching.
When the script reports unmapped models, add them to references/model-name-mappings.json:
{
"swebench": {
"websiteModels": {
"New Model Name": "new-model-id"
}
}
}
Each benchmark has a dedicated extractor function in scripts/lib/benchmark-extractors.mjs:
extractSWEBench() - Extracts SWE-bench Verified scoresextractTerminalBench() - Extracts TerminalBench 2.0 accuracy (decimal format)extractMMMU() - Extracts both MMMU and MMMU Pro scoresextractSciCode() - Extracts SciCode benchmark scoresextractLiveCodeBench() - Extracts LiveCodeBench Pass@1 scoresextractWebDevArena() - Extracts WebDevArena scoresTerminalBench Format:
0.428 (not 42.8)MMMU Dual Benchmarks:
{
mmmu: Map<manifestId, score>,
mmmuPro: Map<manifestId, score>
}
The skill uses an always overwrite strategy for benchmark values:
Rationale: Benchmark scores represent the latest model performance. Websites are the authoritative source.
Only benchmark fields are updated. All other manifest fields are preserved:
id, name, description, vendor, size, contextWindow, etc.benchmarks.sweBench, benchmarks.terminalBench, etc.Manifests are updated using atomic file writes:
.tmp)Each benchmark extraction uses a 3-attempt retry strategy with exponential backoff:
Attempt 1: Direct extraction (immediate) Attempt 2: Retry after 2 seconds Attempt 3: Final retry after 4 seconds
After 3 failures:
/tmp/benchmark-{id}-error.png)Website Access Errors:
Extraction Errors:
Mapping Errors:
Manifest Update Errors:
The skill continues processing even when errors occur:
After execution, a detailed report shows:
š Benchmark Fetch Report
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
Successfully Fetched (5/6 benchmarks)
ā SWE-bench (swebench.com)
ā TerminalBench (tbench.ai)
ā MMMU + MMMU Pro (mmmu-benchmark.github.io)
ā SciCode (scicode-bench.github.io)
ā LiveCodeBench (livecodebench.github.io)
ā Failed to Fetch (1/6 benchmarks)
ā WebDevArena (web.lmarena.ai)
Reason: Timeout after 3 retries
š Manifest Updates
ā
Updated: 15 manifests
⢠claude-sonnet-4-5: 3 benchmarks updated
- sweBench: null ā 74.4
- terminalBench: 0.428 ā 0.604
- liveCodeBench: 47.1 ā 52.3
⢠gpt-4o: 2 benchmarks updated
- sweBench: 21.62 ā 23.5
- sciCode: 1.5 ā 2.1
ā ļø Unmapped Models (require manual mapping)
SWE-bench:
⢠"Qwen-Coder-2.5" ā Add to model-name-mappings.json
⢠"DeepSeek-Coder-V2" ā Add to model-name-mappings.json
Suggestion: Update references/model-name-mappings.json
š Statistics
Total benchmarks fetched: 247 values
Total manifests updated: 15 files
Execution time: 45.2s
Average time per benchmark: 7.5s
ā
Complete! Next steps:
1. Review updated manifests in manifests/models/
2. Add unmapped models to references/model-name-mappings.json
3. Retry failed benchmarks if needed
4. Run validation: pnpm test:validate
5. Commit changes when satisfied
The skill uses Chrome DevTools MCP tools for browser automation:
Navigation:
await mcp__chrome-devtools__navigate_page({
url: 'https://www.swebench.com',
type: 'url'
})
Wait for Content:
await mcp__chrome-devtools__wait_for({
text: 'Leaderboard'
})
Take Snapshot:
const snapshot = await mcp__chrome-devtools__take_snapshot()
// Parse snapshot.content for leaderboard data
Debug Screenshots:
await mcp__chrome-devtools__take_screenshot({
filePath: '/tmp/debug-screenshot.png'
})
pnpm test:validate--models flag to verifyExtraction fails for a benchmark:
/tmp/Model not updating:
manifests/models/TerminalBench shows wrong values:
After running this skill:
manifests/models/*.json - Updated with latest benchmark scoresAlways validate manifests after updates:
# Run schema validation
pnpm test:validate
# Check JSON formatting
node -c manifests/models/*.json
model-name-mappings.json--benchmarks for failed benchmarkspnpm test:validate to ensure schema compliance