senior-swe-bench
Requires verifiers[harbor]>=0.3.1.
Snorkel AI's Senior SWE-Bench (v2026.06) senior-engineer tasks on harbor, backed by prime's prebuilt task images. 50 public tasks (25 investigate, 25 design) over 12 OSS repos (better-auth, electric, firezone, gitea, harbor, immich, paperless-ngx, plausible, posthog, prefect, teleport, turborepo). Scored by the upstream multi-stage verifier in the task container: agent-diff capture, native pytest/vitest verifiers, LLM rubric + taste judges, and (design tasks) a validated user-stories agent; the binary "basic" solve lands in /logs/verifier/reward.txt, per-stage subscores in reward.json/reward_details.json.
Needs a prime runtime with access to the prebuilt task images (senior-swe-bench/<task>:latest, built server-side from each task's environment/Dockerfile — harbor tasksets don't build Dockerfiles). The LLM stages are gated behind --env.taskset.task.upstream-judges (default off): when on, they call upstream's models (claude-sonnet-4-6 judges/validation agent, claude-haiku-4-5 classifier) through the --env.taskset.task.judge-client.* endpoint — a vf BaseClientConfig defaulting to PI inference with the key from the Prime CLI config (load fails fast when no credential resolves); judge sub-scores are recorded as trace metrics (verifier_score, rubric_*, taste_*, validation_score), and the raw judge/verifier responses land in trace.info (judge_output, reward_details). Host SSB_OVERRIDE_* vars still override the models, and a host PORTKEY_API_KEY disables the judge-client wiring in favor of upstream's Portkey gateway routing. When off, the key templates are blanked so host credentials can't implicitly enable the LLM stages. Note design tasks score meaningfully only with upstream_judges — their validated user-stories agent is part of the binary reward; without it they're invalid trials upstream. Deviation from upstream: harbor excludes invalid trials (empty reward.txt, written when the verifier or validation agent itself fails) from solve rates; here they score 0.
Taskset
- Source:
snorkel-ai/senior-swe-bench-v2026.06(pinned by commit inSeniorSWEBenchConfig.repo) - Size: 50 tasks
Timeouts
Task-declared agent and verifier timeouts are ignored by default. Restore them with --env.taskset.ignore-timeouts false for a more faithful comparison to the Harbor implementation — though we advise against it, since enforcing them confounds model capability with the inference infrastructure (e.g. how many tokens/sec it serves).
Changelog
- 2026-08-31: Yield task records on demand so bounded evaluations construct only the requested prefix.
- 2026-07-31: Custom verifier finalization now delegates to Harbor first, preserving
verifiers>=0.2.2.dev65collect hooks and native artifacts before the multi-stage grader runs. - 2026-07-22: Task images resolve as org-less platform refs
senior-swe-bench/<task>:latest(task id moves from the tag into the name; the tag becomeslatest) instead of the team-scopedprime/primeintellect/senior-swe-bench:<task>. Merges in lockstep with the registry rename for the senior-swe-bench family. - 2026-07-15: Moved into the
swe/group and ported to the task-centric verifiers API (verifiers>=0.2.0, Python>=3.12). The upstream verifier now runs infinalize(with the scoring budget mirrored onto that stage), which pulls its artifacts (reward.txt,reward.json,judge_output.json,reward_details.json) intotrace.info; scoring reads the trace only —solvedfromreward_txt, the flat per-stage sub-scores as metrics wheneverreward.jsonexists. Added--env.taskset.task.upstream-judges(default off) gating the upstream LLM stages (rubric + taste judges, design-task validation agent): on requires a judge API key on the eval host (fail-fast at load), records judge sub-scores as trace metrics and raw responses intrace.info, preinstallsfastapi/orjson(the verifier's floatinglitellm>=1.0,<2.0install currently lands 1.92.0, which pullslitellm.proxyimports on tool-call completions and dies onModuleNotFoundErrorwithout them), and routes the stages through--env.taskset.task.judge-client.*(a vfBaseClientConfig, default PI inference keyed from the Prime CLI config) while keeping upstream's models — upstream's own defaults don't survive a provider swap (the direct judge slugs needANTHROPIC_API_KEY; the validation agent's stock default is a Portkey gateway slug that can't route at all without a gateway key); off blanks the[verifier.env]key templates so host credentials can't implicitly enable the stages. Pinnedverifiers[harbor]>=0.2.1.dev40(the base harbor taskset parses schema-1.0 size strings, verifiers#2031) and dropped the local re-parse; Python floor is>=3.12(harborrequires it). Verified: a judged rollout with no provider keys in the eval env scores rubric + tasteokthrough the default PI-inference judge client; judged 8-rollout eval records rubric/taste scores;uv run validate --only-goldonimmich-feat-recently-added-assetswith judges on → valid (393s). - 2026-07-03: Add the
validate()oracle hook foruv run validate(verifiers#1905): apply the task's upstreamsolution/solve.sh, rerun the verifier, valid iff it scores 1.0 (checked on prime: noop and apply-answer onbetter-auth-fix-api-key-run). Drop the localsolvedoverride —verifiers>=0.1.15.dev418resolves[verifier.env]in the base harbor taskset (verifiers#1921) — and reuse theharborpackage for env-template resolution and size-string parsing instead of local reimplementations. - 2026-07-02: Initial port. Pinned upstream commit
e30b0e19fdbc; 50 prebuilt images pushed to the prime registry;[verifier.env]passthrough,/repo/<REPO_NAME>workdir, and harbor size-string resource parsing on top of the base harbor taskset. Validated: fail→0 and oracle-patch→1 onbetter-auth-fix-api-key-runvia a prime sandbox.