SWE-bench Pro is a benchmark of long-horizon software engineering tasks drawn from real pull requests in 11 open-source repositories (Go, Python, JavaScript, TypeScript). Each task gives an agent a repository at a base commit plus a PR description with explicit requirements and interfaces; the agent's patch is graded by hidden fail-to-pass and pass-to-pass tests in a pristine container.
V2 (2026-09-22) is the default config: 642 tasks (go 256, python 237, js 145, ts 4).
The hard config is the 51-task HARD subset. The original 731-task release is preserved unchanged as config
v1 and as git tag v1.0.
v2/README.md)from datasets import load_dataset
v2 = load_dataset("ScaleAI/SWE-bench_Pro", split="test") # V2, 642 tasks (default config)
hard = load_dataset("ScaleAI/SWE-bench_Pro", "hard", split="test") # HARD-51 subset
v1 = load_dataset("ScaleAI/SWE-bench_Pro", "v1", split="test") # original 731 tasks (also: revision="v1.0")
Starting from the 731 v1 tasks, 89 were dropped after review (invalid or unrepairable tests); the 642 that remain were re-validated end to end. Relative to v1:
docker_image). 211 images received dependency fixes.All list-valued fields are strict JSON strings (json.loads them). Columns 1-16 keep the v1 names and order.
| field | description |
|---|---|
repo | <owner>/<name> of the upstream repository (11 values) |
instance_id | unique task id, instance_<owner>__<name>-<fixing commit sha>[-v<env sha>]; equals the task directory name and the image tag |
base_commit | commit the repository is checked out at inside the image |
patch | reference (gold) source patch |
test_patch | hidden test patch applied by the verifier before running tests |
problem_statement | PR description shown to the agent |
requirements | bullet list of requirements shown to the agent |
interface | new interfaces shown to the agent (or "No new interfaces are introduced") |
repo_language | go, python, js, or ts |
fail_to_pass | JSON list of test names that must pass after the change (test-name format of the V2 parsers) |
pass_to_pass | JSON list of test names that must keep passing |
issue_specificity, issue_categories | JSON lists of task tags (unchanged from v1) |
before_repo_set_cmd | shell lines that restore the base state and apply the test patch: reset to base_commit, then git apply --verbose /tests/test_patch.patch (write the test_patch field to that path first). V2 images do not contain the fixing commit, so the v1 form of this command (checkout of test files from the fix commit) no longer applies. |
selected_test_files_to_run | JSON list of test files (or Go test names) the verifier runs |
dockerhub_tag | legacy v1 Docker Hub tag (jefzda/sweap-images), kept for schema compatibility; use docker_image for V2 |
docker_image | full public image reference, ghcr.io/scaleapi/swe-bench_pro-v2:<instance_id> (anonymous pull, linux/amd64) |
hard | true for the 51 HARD-subset tasks |
version | dataset version string, 2.0.0 |
The v1 config has the original 16 columns and values exactly as published on 2026-02-23.
The task directories in v2/tasks/ of the GitHub repository contain, for every task, the verifier (tests/test.sh,
run_script.sh, parser.py, config.json, test_patch.patch), the reference solution and the image reference, in
the Harbor task format:
harbor run -p v2/tasks -e modal -n 50 -a oracle # sanity: reference patch resolves every task
PYTHONPATH=v2/tooling harbor run -p v2/tasks -e modal -n 50 \
-a locked_claude_code:LockedClaudeCode -m <model> --allow-agent-host <your model endpoint host>
PYTHONPATH=v2/tooling harbor run -p v2/tasks -e modal -n 50 \
-a patch_replay:PatchReplayAgent -m replay --ak source_job=jobs/<run> # fresh-sandbox re-grade = reported score
The HARD subset is the 51 tasks failed by at least two of five model families under this protocol; every one of them
passes with the reference patch and fails with an empty patch. Use the hard config, or
harbor run -p v2/tasks $(sed 's/^/-i /' v2/hard51_ids.txt) ....
docker pull ghcr.io/scaleapi/swe-bench_pro-v2:<instance_id>
Images are public and pull anonymously. The repository inside the image is at /app (a few tasks use /testbed),
checked out at base_commit, with a sanitised git history.
The evaluation harness and tooling are released under the MIT license (see the GitHub repository). Task content (problem statements, patches, tests) is derived from the 11 upstream open-source repositories and remains subject to their respective licenses.
v2.0.0 (2026-09-22): 642-task V2 becomes default; hard (51) and v1 (731) configs added; images moved to
ghcr.io/scaleapi/swe-bench_pro-v2; new columns docker_image, hard, version; list fields normalised to strict JSON.v1.0 (2026-02-23): 731-task release (tag v1.0).@article{deng2025swebenchpro,
title={SWE-Bench Pro: Can AI Agents Solve Long-Horizon Software Engineering Tasks?},
author={Deng, Xiang and Da, Jeff and Pan, Edwin and Sun, Yannis Yiming and Wu, Chen Bo Calvin and Bhutani, Sanyam and others},
journal={arXiv preprint arXiv:2509.16941},
year={2025}
}
SWE-bench Pro is a benchmark of long-horizon software engineering tasks drawn from real pull requests in 11 open-source repositories (Go, Python, JavaScript, TypeScript). Each task gives an agent a repository at a base commit plus a PR description with explicit requirements and interfaces; the agent's patch is graded by hidden fail-to-pass and pass-to-pass tests in a pristine container.
V2 (2026-09-22) is the default config: 642 tasks (go 256, python 237, js 145, ts 4).
The hard config is the 51-task HARD subset. The original 731-task release is preserved unchanged as config
v1 and as git tag v1.0.
v2/README.md)from datasets import load_dataset
v2 = load_dataset("ScaleAI/SWE-bench_Pro", split="test") # V2, 642 tasks (default config)
hard = load_dataset("ScaleAI/SWE-bench_Pro", "hard", split="test") # HARD-51 subset
v1 = load_dataset("ScaleAI/SWE-bench_Pro", "v1", split="test") # original 731 tasks (also: revision="v1.0")
Starting from the 731 v1 tasks, 89 were dropped after review (invalid or unrepairable tests); the 642 that remain were re-validated end to end. Relative to v1:
docker_image). 211 images received dependency fixes.All list-valued fields are strict JSON strings (json.loads them). Columns 1-16 keep the v1 names and order.
| field | description |
|---|---|
repo | <owner>/<name> of the upstream repository (11 values) |
instance_id | unique task id, instance_<owner>__<name>-<fixing commit sha>[-v<env sha>]; equals the task directory name and the image tag |
base_commit | commit the repository is checked out at inside the image |
patch | reference (gold) source patch |
test_patch | hidden test patch applied by the verifier before running tests |
problem_statement | PR description shown to the agent |
requirements | bullet list of requirements shown to the agent |
interface | new interfaces shown to the agent (or "No new interfaces are introduced") |
repo_language | go, python, js, or ts |
fail_to_pass | JSON list of test names that must pass after the change (test-name format of the V2 parsers) |
pass_to_pass | JSON list of test names that must keep passing |
issue_specificity, issue_categories | JSON lists of task tags (unchanged from v1) |
before_repo_set_cmd | shell lines that restore the base state and apply the test patch: reset to base_commit, then git apply --verbose /tests/test_patch.patch (write the test_patch field to that path first). V2 images do not contain the fixing commit, so the v1 form of this command (checkout of test files from the fix commit) no longer applies. |
selected_test_files_to_run | JSON list of test files (or Go test names) the verifier runs |
dockerhub_tag | legacy v1 Docker Hub tag (jefzda/sweap-images), kept for schema compatibility; use docker_image for V2 |
docker_image | full public image reference, ghcr.io/scaleapi/swe-bench_pro-v2:<instance_id> (anonymous pull, linux/amd64) |
hard | true for the 51 HARD-subset tasks |
version | dataset version string, 2.0.0 |
The v1 config has the original 16 columns and values exactly as published on 2026-02-23.
The task directories in v2/tasks/ of the GitHub repository contain, for every task, the verifier (tests/test.sh,
run_script.sh, parser.py, config.json, test_patch.patch), the reference solution and the image reference, in
the Harbor task format:
harbor run -p v2/tasks -e modal -n 50 -a oracle # sanity: reference patch resolves every task
PYTHONPATH=v2/tooling harbor run -p v2/tasks -e modal -n 50 \
-a locked_claude_code:LockedClaudeCode -m <model> --allow-agent-host <your model endpoint host>
PYTHONPATH=v2/tooling harbor run -p v2/tasks -e modal -n 50 \
-a patch_replay:PatchReplayAgent -m replay --ak source_job=jobs/<run> # fresh-sandbox re-grade = reported score
The HARD subset is the 51 tasks failed by at least two of five model families under this protocol; every one of them
passes with the reference patch and fails with an empty patch. Use the hard config, or
harbor run -p v2/tasks $(sed 's/^/-i /' v2/hard51_ids.txt) ....
docker pull ghcr.io/scaleapi/swe-bench_pro-v2:<instance_id>
Images are public and pull anonymously. The repository inside the image is at /app (a few tasks use /testbed),
checked out at base_commit, with a sanitised git history.
The evaluation harness and tooling are released under the MIT license (see the GitHub repository). Task content (problem statements, patches, tests) is derived from the 11 upstream open-source repositories and remains subject to their respective licenses.
v2.0.0 (2026-09-22): 642-task V2 becomes default; hard (51) and v1 (731) configs added; images moved to
ghcr.io/scaleapi/swe-bench_pro-v2; new columns docker_image, hard, version; list fields normalised to strict JSON.v1.0 (2026-02-23): 731-task release (tag v1.0).@article{deng2025swebenchpro,
title={SWE-Bench Pro: Can AI Agents Solve Long-Horizon Software Engineering Tasks?},
author={Deng, Xiang and Da, Jeff and Pan, Edwin and Sun, Yannis Yiming and Wu, Chen Bo Calvin and Bhutani, Sanyam and others},
journal={arXiv preprint arXiv:2509.16941},
year={2025}
}