sports-video-coach 中文

Sports film review benchmark

Which coding agent and vision model reviews sports film best, on synthetic drills? Each run is scored against ground truth the tool drew into the videos, so every number is measured, not judged.

Headline: what reasoning effort changed

Frames track: stills only, no code. Every run drew svc-bench-3 from a new, unseen seed.

Score = above chance: 0 = no better than a blind guess that sees no video, 1 = perfect.

13 runs, 3 of 7 settings ran once, all by mariusDing, who wrote the tool. Chart and every run

Rerun it on your agent (change --model for another model; leave out --effort for the default)

uv tool install git+https://github.com/mariusDing/sports-video-coach@74b517fc410944fefeac2979810656ed77fb8f1a
sports-video-coach bench run --agent claude --model claude-sonnet-5-5 --effort high --seed --suite svc-bench-3 --track frames

Code on GitHub

It is part of sports-video-coach, a free MIT tool: your coding agent reviews your own sports video and writes you a coaching page with clips and drills. See a demo coaching page.

The findings in short: what effort changed, the blind floor, local models, cost.

Count it yourself

The juggle-touches task of svc-bench-3: the same 29.76 s video every contender got, with no answer drawn on it. Watch it, count, type your number; only then does the page show the truth and what each model answered.

The task text the contenders got:

Two players juggle identical small yellow balls with one foot, side view: the red player on the left and the orange-red player on the right. Count the touches of the left (red) player: every time his foot touches his ball. A quick double touch (the ball hops a little off the foot and is touched again at once) is two touches. A bounce of the ball on the floor is not a touch. The right player's touches do not count. The camera is hand-held.
Counted? Open for the truth and every model's answer

Truth: 47 touches

  • Opus 5.5 frames track47, 47
  • Codex · gpt-6-astra frames track47
  • Haiku 5.5 frames track60
  • Sonnet 5.5 frames track60, 75
  • Fable 5.1 frames track–, 49
  • Ollama · qwen3-vl:4b-instruct-q4_K_M frames track100
  • Sonnet 5.5 code track46, 51
  • Blind guess (no video seen)5

How the bench scores a count: 1 - |error| / truth, never below 0.

Frames track: the model saw stills of this video, one every 0.08 s, and ran no code. Code track: it could write and run its own tracker. The blind guess copies the example in the task text.

Answers as stored in benchmark/results, one per run; exact ones in green; – = the run gave no answer.

One hard moment of svc-bench-3 (juggle-touches, frames track), then what each model answered, from the result files. GIF · MP4
Before you trust this: 11 things a skeptic asks first

Leaderboard

Code track: the agent may write and run its own tracker. The frames-only track, where the agent reviews by eye, is further down.

svc-bench-3

Eyes: four drawn videos whose events are small, short or hidden: a ball 5 px in radius on a 640x360 frame, a ball 3 px in radius at a 16 px wide far rim, double touches 0.24 s apart, a banner and a defender in front of the moment, pass fakes, and decoys with nearly the same answer (a second juggler, a second pair passing, a far boat at a close rate).

Summary

#AgentModelSettingsRuns (n)Mean totalMean above chanceRangeMean timeMean cost
1Claude Codeclaude-sonnet-5-5runner's own agent config (--use-my-config)10.9950.994-214 s$0.61
2Claude Codeclaude-sonnet-5-5clean-room: no user config10.9580.951-264 s$0.67

Ranked by mean above chance; “=” marks a tie. n = runs of that agent, model and settings; range = lowest to highest above-chance total over them (a dash for a single run). A run whose settings only add a note (such as being killed at the time limit) counts with its contender. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded.

Every run

#AgentModelSettingsjuggle-touchesfar-hoop-shotspass-releasesstroke-rateTotalAbove chanceTimeCostDateSubmitterEvidence
1Claude Code 2.1.310claude-sonnet-5-5runner's own agent config (--use-my-config)0.981.001.001.000.9950.994214 s$0.612026-10-24mariusDingtranscript
2Claude Code 2.1.310claude-sonnet-5-5clean-room: no user config0.921.000.921.000.9580.951264 s$0.672026-10-24mariusDingtranscript
floorFloor: blind baseline (no video seen)-answers copied from the TASKS.md examples; no video or still seen0.110.500.170.550.3310.000--2026-10-24--

Scores 0 to 1 per task; total = mean. Ranked by total, then earlier date. Above chance: per task, (score - floor) / (1 - floor), clipped to 0..1, where the floor is the score of the blind baseline (it copies the example answers from the task text and sees no video); 0 = no better than that guess, 1 = perfect. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded. Raw files: benchmark/results.

Where each contender fails

Every contender run, task by task: the truth (from the suite), each run's answer as its result file stores it, the score recomputed from the two, and what was missed. The blind baseline is left out. Timestamps: an event not answered within 0.5 s still earns part of its point up to 2 s off; an unmatched answer is one with no event within 0.5 s.

juggle-touchescount

Truth: 47

RunAnswerScoreWhat was missed
claude-sonnet-5-5 run 1460.981 too few
claude-sonnet-5-5 run 2510.924 too many
far-hoop-shotsoutcomes

Truth: 6 made, 6 missed: M x M x x M M x x M x M (M = made)

RunAnswerScoreWhat was missed
claude-sonnet-5-5 run 16 made, 6 missed1.00exact
claude-sonnet-5-5 run 26 made, 6 missed1.00exact
pass-releasestimestamps

Truth: 12 times: 1, 3, 4.48, 5.28, 7.16, 9.48, 11.48, 12.16, 14.56, 15.84, 17.76, 19.32 s

RunAnswerScoreWhat was missed
claude-sonnet-5-5 run 112 times1.00all within 0.5 s
claude-sonnet-5-5 run 211 times0.921 of 12 not within 0.5 s (at 5.28 s)
stroke-raterate

Truth: 33.92

RunAnswerScoreWhat was missed
claude-sonnet-5-5 run 134.11.000.5% high
claude-sonnet-5-5 run 233.91.000.1% low

svc-bench-2

Hard: five drawn videos with a hand-held camera, look-alike decoys (a second ball, two identical feet, a rebounder), rule-defined events and noise.

Summary

#AgentModelSettingsRuns (n)Mean totalMean above chanceRangeMean timeMean cost
1=Claude Codeclaude-sonnet-5-5user CLAUDE.md loaded11.0001.000-339 s$1.08
1=Codexgpt-6-astrareasoning effort xhigh, user config loaded11.0001.000-492 s-
3Claude Codeclaude-opus-5-5user CLAUDE.md loaded10.9600.956-262 s$1.40
4OpenCodeopencode/deepseek-v4.1-flash-freepreset, run by the maintainer (--agent opencode); runner's own config; fresh OpenCode install, empty config, no account (free OpenCode Zen model); OpenCode Zen's free usage limit was reached about 1130 s in, with answers.json still unwritten10.0000.000-1200 s-

Ranked by mean above chance; “=” marks a tie. n = runs of that agent, model and settings; range = lowest to highest above-chance total over them (a dash for a single run). A run whose settings only add a note (such as being killed at the time limit) counts with its contender. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded.

Every run

#AgentModelSettingsdribble-countsquat-repscadence-changecone-touches-panshot-outcomes-hardTotalAbove chanceTimeCostDateSubmitterEvidence
1Claude Code 2.1.310claude-sonnet-5-5user CLAUDE.md loaded1.001.001.001.001.001.0001.000339 s$1.082026-10-24mariusDingtranscript
2Codex 0.159.3gpt-6-astrareasoning effort xhigh, user config loaded1.001.001.001.001.001.0001.000492 s-2026-10-24mariusDingtranscript
3Claude Code 2.1.310claude-opus-5-5user CLAUDE.md loaded1.001.001.000.801.000.9600.956262 s$1.402026-10-24mariusDingtranscript
4OpenCode 1.19.4opencode/deepseek-v4.1-flash-freepreset, run by the maintainer (--agent opencode); runner's own config; fresh OpenCode install, empty config, no account (free OpenCode Zen model); OpenCode Zen's free usage limit was reached about 1130 s in, with answers.json still unwritten0.000.000.000.000.000.0000.0001200 s-2026-10-25mariusDingtranscript
floorFloor: blind baseline (no video seen)-answers copied from the TASKS.md examples; no video or still seen0.090.620.140.090.830.3560.000--2026-10-24--

Scores 0 to 1 per task; total = mean. Ranked by total, then earlier date. Above chance: per task, (score - floor) / (1 - floor), clipped to 0..1, where the floor is the score of the blind baseline (it copies the example answers from the task text and sees no video); 0 = no better than that guess, 1 = perfect. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded. Raw files: benchmark/results.

Where each contender fails

Every contender run, task by task: the truth (from the suite), each run's answer as its result file stores it, the score recomputed from the two, and what was missed. The blind baseline is left out. Timestamps: an event not answered within 0.5 s still earns part of its point up to 2 s off; an unmatched answer is one with no event within 0.5 s.

dribble-countcount

Truth: 56

RunAnswerScoreWhat was missed
claude-opus-5-5561.00exact
claude-sonnet-5-5561.00exact
gpt-6-astra561.00exact
opencode/deepseek-v4.1-flash-free-0.00no answer given
squat-repscount

Truth: 8

RunAnswerScoreWhat was missed
claude-opus-5-581.00exact
claude-sonnet-5-581.00exact
gpt-6-astra81.00exact
opencode/deepseek-v4.1-flash-free-0.00no answer given
cadence-changerate

Truth: 182.186

RunAnswerScoreWhat was missed
claude-opus-5-5182.21.000.0% high
claude-sonnet-5-51821.000.1% low
gpt-6-astra182.21.000.0% high
opencode/deepseek-v4.1-flash-free-0.00no answer given
cone-touches-pantimestamps

Truth: 10 times: 3.6, 7.6, 10.6, 11, 11.4, 14.8, 19.6, 22, 23.2, 26.6 s

RunAnswerScoreWhat was missed
claude-opus-5-58 times0.802 of 10 not within 0.5 s (at 7.6 s, 19.6 s)
claude-sonnet-5-510 times1.00all within 0.5 s
gpt-6-astra10 times1.00all within 0.5 s
opencode/deepseek-v4.1-flash-free-0.00no answer given
shot-outcomes-hardoutcomes

Truth: 6 made, 6 missed: M x x M M x M x M x M x (M = made)

RunAnswerScoreWhat was missed
claude-opus-5-56 made, 6 missed1.00exact
claude-sonnet-5-56 made, 6 missed1.00exact
gpt-6-astra6 made, 6 missed1.00exact
opencode/deepseek-v4.1-flash-free-0.00no answer given

svc-bench-1

Four short drawn videos on a still camera. Saturated on this track: all 3 runs scored 1.0, so it ranks nobody.

Summary

#AgentModelSettingsRuns (n)Mean totalMean above chanceRangeMean timeMean cost
1=Claude Codeclaude-opus-5-5claude -p, default effort, 1M context, user CLAUDE.md loaded11.0001.000-87 s-
1=Claude Codeclaude-sonnet-5-5claude -p, default effort, user CLAUDE.md loaded; cost 0.33 USD11.0001.000-55 s-
1=Codex-codex exec, default settings, user config loaded (model not recorded in the run log)11.0001.000-218 s-

Ranked by mean above chance; “=” marks a tie. n = runs of that agent, model and settings; range = lowest to highest above-chance total over them (a dash for a single run). A run whose settings only add a note (such as being killed at the time limit) counts with its contender. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded.

Every run

#AgentModelSettingsjump-countstroke-ratecone-touchesshot-outcomesTotalAbove chanceTimeCostDateSubmitterEvidence
1Claude Code 2.1.310claude-opus-5-5claude -p, default effort, 1M context, user CLAUDE.md loaded1.001.001.001.001.0001.00087 s-2026-10-24mariusDingtranscript
2Claude Code 2.1.310claude-sonnet-5-5claude -p, default effort, user CLAUDE.md loaded; cost 0.33 USD1.001.001.001.001.0001.00055 s-2026-10-24mariusDingtranscript
3Codex 0.159.3-codex exec, default settings, user config loaded (model not recorded in the run log)1.001.001.001.001.0001.000218 s-2026-10-24mariusDingtranscript
floorFloor: blind baseline (no video seen)-answers copied from the TASKS.md examples; no video or still seen0.390.000.110.800.3240.000--2026-10-24--

Scores 0 to 1 per task; total = mean. Ranked by total, then earlier date. Above chance: per task, (score - floor) / (1 - floor), clipped to 0..1, where the floor is the score of the blind baseline (it copies the example answers from the task text and sees no video); 0 = no better than that guess, 1 = perfect. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded. Raw files: benchmark/results.

Where each contender fails

Every contender run, task by task: the truth (from the suite), each run's answer as its result file stores it, the score recomputed from the two, and what was missed. The blind baseline is left out. Timestamps: an event not answered within 0.5 s still earns part of its point up to 2 s off; an unmatched answer is one with no event within 0.5 s.

jump-countcount

Truth: 13

RunAnswerScoreWhat was missed
claude-opus-5-5131.00exact
claude-sonnet-5-5131.00exact
Codex131.00exact
stroke-raterate

Truth: 42

RunAnswerScoreWhat was missed
claude-opus-5-5421.00exact
claude-sonnet-5-5421.00exact
Codex421.00exact
cone-touchestimestamps

Truth: 7 times: 3.2, 5.4, 6.8, 10.4, 12.2, 14.8, 17.4 s

RunAnswerScoreWhat was missed
claude-opus-5-57 times1.00all within 0.5 s
claude-sonnet-5-57 times1.00all within 0.5 s
Codex7 times1.00all within 0.5 s
shot-outcomesoutcomes

Truth: 5 made, 5 missed: M x M M x x M x M x (M = made)

RunAnswerScoreWhat was missed
claude-opus-5-55 made, 5 missed1.00exact
claude-sonnet-5-55 made, 5 missed1.00exact
Codex5 made, 5 missed1.00exact

Frames-only track (eyes)

Frames-only track: the agent sees still images of each video (contact sheets with the time under every still) and has no tool that runs code, so it must review by eye. Same videos, same truth, same scoring as the code track. The scores measure what the model saw and how much it looked: a model that opens few stills guesses, and a guess can score well.

Rerun it in one command: it prepares the suite, runs Claude Code headless with no code tools (or any CLI with --agent cmd --cmd "... {prompt}"), and scores the answers.

sports-video-coach bench run --agent claude --model <model> --suite svc-bench-3 --track frames

No local install: Open in GitHub Codespaces has uv, ffmpeg and the Claude Code and Codex CLIs ready, on your own GitHub account's free hours. Log in to your agent there, then put uv run in front of the command.

Another agent: prepare the stills, let it fill bench-frames/answers.json by eye, then score it with bench score bench-frames.

sports-video-coach bench prepare --out bench-frames --suite svc-bench-3 --track frames

svc-bench-3

Eyes: four drawn videos whose events are small, short or hidden: a ball 5 px in radius on a 640x360 frame, a ball 3 px in radius at a 16 px wide far rim, double touches 0.24 s apart, a banner and a defender in front of the moment, pass fakes, and decoys with nearly the same answer (a second juggler, a second pair passing, a far boat at a close rate).

Summary

#AgentModelSettingsRuns (n)Mean totalMean above chanceRangeMean timeMean cost
1Claude Codeclaude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort21.0001.0001.000–1.000494 s$3.72
2Codexgpt-6-astraframes track; codex exec -s read-only, shell/exec/code-mode features disabled, sheets attached with -i; reasoning effort xhigh (user config)10.8620.727-766 s-
3Claude Codeclaude-fable-5-1frames track; claude -p --restricted --safe-mode --tools Read; default effort20.4940.4940.000–0.9881673 s$19.23 (1 of 2)
4Claude Codeclaude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort20.5260.3850.273–0.49740 s$0.14
5Claude Codeclaude-haiku-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort10.5850.333-136 s$0.04
6Ollamaqwen3-vl:4b-instruct-q4_K_Mframes track; OpenAI-compatible chat completions on Ollama 0.40.10, weights Q4_K_M, 4.0B; one request per task (4 requests, 11-27 contact sheets each as base64 JPEG, sheets as drawn (1280 px on the longer side)), the task's section of TASKS.md and the rules in the prompt, no full-size stills, no tools; temperature 0, max_tokens 4096; server: OLLAMA_CONTEXT_LENGTH=32768, flash attention, KV cache q8_0; RTX 3070 8 GB10.1250.000-260 s-

Ranked by mean above chance; “=” marks a tie. n = runs of that agent, model and settings; range = lowest to highest above-chance total over them (a dash for a single run). A run whose settings only add a note (such as being killed at the time limit) counts with its contender. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded.

Every run

#AgentModelSettingsjuggle-touchesfar-hoop-shotspass-releasesstroke-rateTotalAbove chanceTimeCostDateSubmitterEvidence
1Claude Code 2.1.310claude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort1.001.001.001.001.0001.000489 s$3.912026-10-24mariusDingtranscript
2Claude Code 2.1.310claude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort1.001.001.001.001.0001.000500 s$3.522026-10-24mariusDingtranscript
3Claude Code 2.1.310claude-fable-5-1frames track; claude -p --restricted --safe-mode --tools Read; default effort0.961.001.001.000.9890.9881645 s$19.232026-10-24mariusDingtranscript
4Codex 0.159.3gpt-6-astraframes track; codex exec -s read-only, shell/exec/code-mode features disabled, sheets attached with -i; reasoning effort xhigh (user config)1.001.000.920.530.8620.727766 s-2026-10-24mariusDingtranscript
5Claude Code 2.1.310claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.720.750.830.140.6120.49765 s$0.232026-10-24mariusDingtranscript
6Claude Code 2.1.310claude-haiku-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.720.580.560.470.5850.333136 s$0.042026-10-24mariusDingtranscript
7Claude Code 2.1.310claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.400.420.800.140.4410.27316 s$0.062026-10-24mariusDingtranscript
8Ollama 0.40.10qwen3-vl:4b-instruct-q4_K_Mframes track; OpenAI-compatible chat completions on Ollama 0.40.10, weights Q4_K_M, 4.0B; one request per task (4 requests, 11-27 contact sheets each as base64 JPEG, sheets as drawn (1280 px on the longer side)), the task's section of TASKS.md and the rules in the prompt, no full-size stills, no tools; temperature 0, max_tokens 4096; server: OLLAMA_CONTEXT_LENGTH=32768, flash attention, KV cache q8_0; RTX 3070 8 GB0.000.500.000.000.1250.000260 s-2026-10-25mariusDingtranscript
9Claude Code 2.1.310claude-fable-5-1frames track; claude -p --restricted --safe-mode --tools Read; default effort; killed at the 1700 s time limit before writing answers (read 548 stills)0.000.000.000.000.0000.0001700 s-2026-10-24mariusDingtranscript
floorFloor: blind baseline (no video seen)-answers copied from the TASKS.md examples; no video or still seen0.110.500.170.550.3310.000--2026-10-24--

Scores 0 to 1 per task; total = mean. Ranked by total, then earlier date. Above chance: per task, (score - floor) / (1 - floor), clipped to 0..1, where the floor is the score of the blind baseline (it copies the example answers from the task text and sees no video); 0 = no better than that guess, 1 = perfect. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded. Raw files: benchmark/results.

Where each contender fails

Every contender run, task by task: the truth (from the suite), each run's answer as its result file stores it, the score recomputed from the two, and what was missed. The blind baseline is left out. Timestamps: an event not answered within 0.5 s still earns part of its point up to 2 s off; an unmatched answer is one with no event within 0.5 s.

juggle-touchescount

Truth: 47

RunAnswerScoreWhat was missed
claude-fable-5-1 run 1-0.00no answer given
claude-fable-5-1 run 2490.962 too many
claude-haiku-5-5600.7213 too many
claude-opus-5-5 run 1471.00exact
claude-opus-5-5 run 2471.00exact
claude-sonnet-5-5 run 1600.7213 too many
claude-sonnet-5-5 run 2750.4028 too many
gpt-6-astra471.00exact
qwen3-vl:4b-instruct-q4_K_M1000.0053 too many
far-hoop-shotsoutcomes

Truth: 6 made, 6 missed: M x M x x M M x x M x M (M = made)

RunAnswerScoreWhat was missed
claude-fable-5-1 run 1-0.00no answer given
claude-fable-5-1 run 26 made, 6 missed1.00exact
claude-haiku-5-55 made, 7 missed0.585 of 12 wrong (#3 said missed, #4 said made, #6 said missed, #7 said missed +1 more)
claude-opus-5-5 run 16 made, 6 missed1.00exact
claude-opus-5-5 run 26 made, 6 missed1.00exact
claude-sonnet-5-5 run 17 made, 5 missed0.753 of 12 wrong (#5 said made, #7 said missed, #8 said made)
claude-sonnet-5-5 run 27 made, 5 missed0.427 of 12 wrong (#4 said made, #7 said missed, #8 said made, #9 said made +3 more)
gpt-6-astra6 made, 6 missed1.00exact
qwen3-vl:4b-instruct-q4_K_M6 made, 6 missed0.506 of 12 wrong (#5 said made, #6 said missed, #9 said made, #10 said missed +2 more)
pass-releasestimestamps

Truth: 12 times: 1, 3, 4.48, 5.28, 7.16, 9.48, 11.48, 12.16, 14.56, 15.84, 17.76, 19.32 s

RunAnswerScoreWhat was missed
claude-fable-5-1 run 1-0.00no answer given
claude-fable-5-1 run 212 times1.00all within 0.5 s
claude-haiku-5-57 times0.566 of 12 not within 0.5 s (at 3 s, 9.48 s, 11.48 s, 12.16 s +2 more); 1 unmatched (at 16.9 s)
claude-opus-5-5 run 112 times1.00all within 0.5 s
claude-opus-5-5 run 212 times1.00all within 0.5 s
claude-sonnet-5-5 run 110 times0.832 of 12 not within 0.5 s (at 12.16 s, 15.84 s)
claude-sonnet-5-5 run 210 times0.804 of 12 not within 0.5 s (at 4.48 s, 12.16 s, 15.84 s, 17.76 s); 2 unmatched (at 13 s, 17 s)
gpt-6-astra13 times0.921 unmatched (at 7.76 s)
qwen3-vl:4b-instruct-q4_K_M-0.00no answer given
stroke-raterate

Truth: 33.92

RunAnswerScoreWhat was missed
claude-fable-5-1 run 1-0.00no answer given
claude-fable-5-1 run 233.91.000.1% low
claude-haiku-5-5300.4711.6% low
claude-opus-5-5 run 133.91.000.1% low
claude-opus-5-5 run 233.91.000.1% low
claude-sonnet-5-5 run 1280.1417.5% low
claude-sonnet-5-5 run 2280.1417.5% low
gpt-6-astra37.50.5310.6% high
qwen3-vl:4b-instruct-q4_K_M-0.00no answer given

svc-bench-2

Hard: five drawn videos with a hand-held camera, look-alike decoys (a second ball, two identical feet, a rebounder), rule-defined events and noise.

Summary

#AgentModelSettingsRuns (n)Mean totalMean above chanceRangeMean timeMean cost
1=Claude Codeclaude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort11.0001.000-522 s$3.04
1=Codexgpt-6-astraframes track; codex exec -s read-only, shell/exec/code-mode features disabled, sheets attached with -i; reasoning effort xhigh (user config); the user's global Codex AGENTS.md was loaded (it replied in Chinese)11.0001.000-585 s-
3Claude Codeclaude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort20.7010.5120.460–0.56445 s$0.15

Ranked by mean above chance; “=” marks a tie. n = runs of that agent, model and settings; range = lowest to highest above-chance total over them (a dash for a single run). A run whose settings only add a note (such as being killed at the time limit) counts with its contender. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded.

Every run

#AgentModelSettingsdribble-countsquat-repscadence-changecone-touches-panshot-outcomes-hardTotalAbove chanceTimeCostDateSubmitterEvidence
1Claude Code 2.1.310claude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort1.001.001.001.001.001.0001.000522 s$3.042026-10-24mariusDingtranscript
2Codex 0.159.3gpt-6-astraframes track; codex exec -s read-only, shell/exec/code-mode features disabled, sheets attached with -i; reasoning effort xhigh (user config); the user's global Codex AGENTS.md was loaded (it replied in Chinese)1.001.001.001.001.001.0001.000585 s-2026-10-24mariusDingtranscript
3Claude Code 2.1.310claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.801.000.740.400.830.7550.56477 s$0.242026-10-24mariusDingtranscript
4Claude Code 2.1.310claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.800.880.740.230.580.6460.46012 s$0.052026-10-24mariusDingtranscript
floorFloor: blind baseline (no video seen)-answers copied from the TASKS.md examples; no video or still seen0.090.620.140.090.830.3560.000--2026-10-24--

Scores 0 to 1 per task; total = mean. Ranked by total, then earlier date. Above chance: per task, (score - floor) / (1 - floor), clipped to 0..1, where the floor is the score of the blind baseline (it copies the example answers from the task text and sees no video); 0 = no better than that guess, 1 = perfect. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded. Raw files: benchmark/results.

Where each contender fails

Every contender run, task by task: the truth (from the suite), each run's answer as its result file stores it, the score recomputed from the two, and what was missed. The blind baseline is left out. Timestamps: an event not answered within 0.5 s still earns part of its point up to 2 s off; an unmatched answer is one with no event within 0.5 s.

dribble-countcount

Truth: 56

RunAnswerScoreWhat was missed
claude-opus-5-5561.00exact
claude-sonnet-5-5 run 1450.8011 too few
claude-sonnet-5-5 run 2450.8011 too few
gpt-6-astra561.00exact
squat-repscount

Truth: 8

RunAnswerScoreWhat was missed
claude-opus-5-581.00exact
claude-sonnet-5-5 run 181.00exact
claude-sonnet-5-5 run 270.881 too few
gpt-6-astra81.00exact
cadence-changerate

Truth: 182.186

RunAnswerScoreWhat was missed
claude-opus-5-5182.21.000.0% high
claude-sonnet-5-5 run 11700.746.7% low
claude-sonnet-5-5 run 21700.746.7% low
gpt-6-astra1821.000.1% low
cone-touches-pantimestamps

Truth: 10 times: 3.6, 7.6, 10.6, 11, 11.4, 14.8, 19.6, 22, 23.2, 26.6 s

RunAnswerScoreWhat was missed
claude-opus-5-510 times1.00all within 0.5 s
claude-sonnet-5-5 run 14 times0.406 of 10 not within 0.5 s (at 3.6 s, 10.6 s, 11 s, 11.4 s +2 more)
claude-sonnet-5-5 run 24 times0.2310 of 10 not within 0.5 s (at 3.6 s, 7.6 s, 10.6 s, 11 s +6 more); 4 unmatched (at 6 s, 12 s, 18 s, 24 s)
gpt-6-astra10 times1.00all within 0.5 s
shot-outcomes-hardoutcomes

Truth: 6 made, 6 missed: M x x M M x M x M x M x (M = made)

RunAnswerScoreWhat was missed
claude-opus-5-56 made, 6 missed1.00exact
claude-sonnet-5-5 run 16 made, 6 missed0.832 of 12 wrong (#3 said made, #4 said missed)
claude-sonnet-5-5 run 27 made, 5 missed0.585 of 12 wrong (#3 said made, #5 said missed, #6 said made, #7 said missed +1 more)
gpt-6-astra6 made, 6 missed1.00exact

svc-bench-3-fresh

Fresh seeds: svc-bench-3 drawn anew for each run from the seed in its result file (`--seed`), with the same scenes and kinds of traps but new counts, outcomes, times and rates. The agent's folder never held the truth; the tool rebuilds it from the seed to score and check each row, and shows it below, so a published seed is spent. Each run's floor is the blind baseline on its own seed.

What effort changed

Bar chart of mean score above chance by effort setting. Haiku 5.5 · Claude Code: default effort: 0.198 (1 run, 96 s); effort high: 0.564 (1 run, 369 s) Opus 5.5 · Claude Code: default effort: 0.997 mean, range 0.994–1.000 (2 runs, 347 s per run); effort low: 0.778 (1 run, 70 s) Sonnet 5.5 · Claude Code: default effort: 0.419 mean, range 0.413–0.426 (2 runs, 17 s per run); effort high: 0.931 mean, range 0.856–0.994 (4 runs, 216 s per run); effort max: no answer, killed at the time limit (1200 s and 2400 s), scored 0 (2 runs)

Same model, same kind of task (svc-bench-3 drawn from a new seed for every run, reviewed by eye from stills); only the effort setting changed. Mean score above chance:

One run per setting unless n says otherwise, each on its own seed: a measured difference, not a variance estimate. Default = no effort flag (the CLI's own default). Every run is a row in the board below.

Summary

#AgentModelSettingsRuns (n)Mean totalMean above chanceRangeMean timeMean cost
1Codexgpt-6-astraCodex: runner's own config; not isolated, so credentials stay where they are; frames track; codex exec -s read-only, shell/exec/code-mode and other tool features disabled, web search off, sheets attached with -i; beyond that tool restriction is by prompt only (the transcript shows every command it ran); reasoning effort xhigh11.0001.000-514 s-
2Claude Codeclaude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort20.9970.9970.994–1.000347 s$2.55
3Claude Codeclaude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort high40.9400.9310.856–0.994216 s$0.84
4Claude Codeclaude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort low10.8790.778-70 s$0.45
5Claude Codeclaude-haiku-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort high10.6980.564-369 s$0.32
6Claude Codeclaude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort20.5430.4190.413–0.42617 s$0.06
7Claude Codeclaude-haiku-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort10.4400.198-96 s$0.06
8Ollamaqwen3-vl:4b-instruct-q4_K_Mframes track; OpenAI-compatible chat completions on Ollama 0.40.10, weights Q4_K_M, 4.0B; one request per task (4 requests, 11-30 contact sheets each as base64 JPEG, sheets as drawn (1280 px on the longer side)), the task's section of TASKS.md and the rules in the prompt, no full-size stills, no tools; temperature 0, max_tokens 4096; server: OLLAMA_CONTEXT_LENGTH=40960, flash attention, KV cache q8_0; RTX 3070 8 GB10.0770.000-621 s-
9Claude Codeclaude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort max20.0000.0000.000–0.0001801 s-

Ranked by mean above chance; “=” marks a tie. n = runs of that agent, model and settings; range = lowest to highest above-chance total over them (a dash for a single run). A run whose settings only add a note (such as being killed at the time limit) counts with its contender. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded.

Every run

#AgentModelSettingsjuggle-touchesfar-hoop-shotspass-releasesstroke-rateTotalAbove chanceTimeCostDateSubmitterEvidence
1Claude Code 2.1.310 seed 613104018claude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort1.001.001.001.001.0001.000378 s$2.772026-10-25mariusDingtranscript
2Codex 0.159.3 seed 911623366gpt-6-astraCodex: runner's own config; not isolated, so credentials stay where they are; frames track; codex exec -s read-only, shell/exec/code-mode and other tool features disabled, web search off, sheets attached with -i; beyond that tool restriction is by prompt only (the transcript shows every command it ran); reasoning effort xhigh1.001.001.001.001.0001.000514 s-2026-10-25mariusDingtranscript
3Claude Code 2.1.310 seed 208632171claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort high0.981.001.001.000.9950.994256 s$0.942026-10-25mariusDingtranscript
4Claude Code 2.1.310 seed 205159368claude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.981.001.001.000.9940.994317 s$2.322026-10-25mariusDingtranscript
5Claude Code 2.1.310 seed 395804731claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort high0.981.000.921.000.9740.969165 s$0.702026-10-25mariusDingtranscript
6Claude Code 2.1.310 seed 288038083claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort high0.671.001.001.000.9170.906257 s$0.992026-10-25mariusDingtranscript
7Claude Code 2.1.310 seed 959964891claude-opus-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort low0.980.541.001.000.8790.77870 s$0.452026-10-25mariusDingtranscript
8Claude Code 2.1.310 seed 633675701claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort high0.501.001.001.000.8750.856184 s$0.732026-10-25mariusDingtranscript
9Claude Code 2.1.310 seed 778572209claude-haiku-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort high0.860.391.000.540.6980.564369 s$0.322026-10-25mariusDingtranscript
10Claude Code 2.1.310 seed 406013493claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.930.580.820.000.5830.42616 s$0.062026-10-25mariusDingtranscript
11Claude Code 2.1.310 seed 956466926claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.910.310.800.000.5040.41319 s$0.072026-10-25mariusDingtranscript
12Claude Code 2.1.310 seed 166697672claude-haiku-5-5frames track; claude -p --restricted --safe-mode --tools Read; default effort0.500.460.250.560.4400.19896 s$0.062026-10-25mariusDingtranscript
13Ollama 0.40.10 seed 792092586qwen3-vl:4b-instruct-q4_K_Mframes track; OpenAI-compatible chat completions on Ollama 0.40.10, weights Q4_K_M, 4.0B; one request per task (4 requests, 11-30 contact sheets each as base64 JPEG, sheets as drawn (1280 px on the longer side)), the task's section of TASKS.md and the rules in the prompt, no full-size stills, no tools; temperature 0, max_tokens 4096; server: OLLAMA_CONTEXT_LENGTH=40960, flash attention, KV cache q8_0; RTX 3070 8 GB0.000.310.000.000.0770.000621 s-2026-10-25mariusDingtranscript
14Claude Code 2.1.310 seed 280902796claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort max0.000.000.000.000.0000.0001200 s-2026-10-25mariusDingtranscript
15Claude Code 2.1.310 seed 604284533claude-sonnet-5-5frames track; claude -p --restricted --safe-mode --tools Read; effort max0.000.000.000.000.0000.0002401 s-2026-10-25mariusDingtranscript

Scores 0 to 1 per task; total = mean. Ranked by total, then earlier date. Above chance: per task, (score - floor) / (1 - floor), clipped to 0..1, where the floor is the score of the blind baseline (it copies the example answers from the task text and sees no video); 0 = no better than that guess, 1 = perfect. Time = wall seconds the run took; cost = USD the agent itself reported (Claude Code does, Codex does not); '-' = not recorded. Raw files: benchmark/results.

Where each contender fails

Every contender run, task by task: the truth (from the suite), each run's answer as its result file stores it, the score recomputed from the two, and what was missed. The blind baseline is left out. Timestamps: an event not answered within 0.5 s still earns part of its point up to 2 s off; an unmatched answer is one with no event within 0.5 s.

juggle-touchescount

Truth: drawn from each run's own seed; shown in its row

RunAnswerScoreWhat was missed
claude-haiku-5-5 run 1 (seed 166697672)600.50truth 40; 20 too many
claude-haiku-5-5 run 2 (seed 778572209)500.86truth 44; 6 too many
claude-opus-5-5 run 1 (seed 205159368)440.98truth 45; 1 too few
claude-opus-5-5 run 2 (seed 613104018)411.00truth 41; exact
claude-opus-5-5 run 3 (seed 959964891)420.98truth 41; 1 too many
claude-sonnet-5-5 run 1 (seed 208632171)500.98truth 49; 1 too many
claude-sonnet-5-5 run 2 (seed 280902796)-0.00truth 49; no answer given
claude-sonnet-5-5 run 3 (seed 288038083)560.67truth 42; 14 too many
claude-sonnet-5-5 run 4 (seed 395804731)450.98truth 44; 1 too many
claude-sonnet-5-5 run 5 (seed 406013493)480.93truth 45; 3 too many
claude-sonnet-5-5 run 6 (seed 604284533)-0.00truth 48; no answer given
claude-sonnet-5-5 run 7 (seed 633675701)600.50truth 40; 20 too many
claude-sonnet-5-5 run 8 (seed 956466926)380.91truth 42; 4 too few
gpt-6-astra (seed 911623366)471.00truth 47; exact
qwen3-vl:4b-instruct-q4_K_M (seed 792092586)1000.00truth 50; 50 too many
far-hoop-shotsoutcomes

Truth: drawn from each run's own seed; shown in its row

RunAnswerScoreWhat was missed
claude-haiku-5-5 run 1 (seed 166697672)4 made, 7 missed0.46truth 6 made, 5 missed: x M x M M M M M x x x (M = made); 6 of 11 wrong (#2 said missed, #3 said made, #4 said missed, #6 said missed +2 more)
claude-haiku-5-5 run 2 (seed 778572209)4 made, 9 missed0.39truth 4 made, 9 missed: x x M x x M M x x x x M x (M = made); 8 of 13 wrong (#3 said missed, #4 said made, #6 said missed, #7 said missed +4 more)
claude-opus-5-5 run 1 (seed 205159368)4 made, 7 missed1.00truth 4 made, 7 missed: M M x M x x x x M x x (M = made); exact
claude-opus-5-5 run 2 (seed 613104018)5 made, 6 missed1.00truth 5 made, 6 missed: x x M M x x M M x M x (M = made); exact
claude-opus-5-5 run 3 (seed 959964891)8 made, 5 missed0.54truth 6 made, 7 missed: M M x M x x x x M x x M M (M = made); 6 of 13 wrong (#2 said missed, #3 said made, #6 said made, #8 said made +2 more)
claude-sonnet-5-5 run 1 (seed 208632171)5 made, 8 missed1.00truth 5 made, 8 missed: x M x x x x M x M x x M M (M = made); exact
claude-sonnet-5-5 run 2 (seed 280902796)-0.00truth 8 made, 5 missed: M M x x M x x M M M M x M (M = made); no answer given
claude-sonnet-5-5 run 3 (seed 288038083)7 made, 6 missed1.00truth 7 made, 6 missed: x M M M M x x x M M M x x (M = made); exact
claude-sonnet-5-5 run 4 (seed 395804731)7 made, 5 missed1.00truth 7 made, 5 missed: M x x M M M M M x x x M (M = made); exact
claude-sonnet-5-5 run 5 (seed 406013493)6 made, 6 missed0.58truth 5 made, 7 missed: M M M x x x x x M M x x (M = made); 5 of 12 wrong (#2 said missed, #5 said made, #7 said made, #10 said missed +1 more)
claude-sonnet-5-5 run 6 (seed 604284533)-0.00truth 5 made, 7 missed: M M M x x M x x x x x M (M = made); no answer given
claude-sonnet-5-5 run 7 (seed 633675701)6 made, 7 missed1.00truth 6 made, 7 missed: x M M x x x M M x M x x M (M = made); exact
claude-sonnet-5-5 run 8 (seed 956466926)7 made, 6 missed0.31truth 4 made, 9 missed: x M x x x x x M M x M x x (M = made); 9 of 13 wrong (#1 said made, #2 said missed, #3 said made, #5 said made +5 more)
gpt-6-astra (seed 911623366)6 made, 7 missed1.00truth 6 made, 7 missed: x M x M M x M M x x x M x (M = made); exact
qwen3-vl:4b-instruct-q4_K_M (seed 792092586)7 made, 6 missed0.31truth 8 made, 5 missed: x M x M M M x M M x x M M (M = made); 9 of 13 wrong (#1 said made, #2 said missed, #3 said made, #4 said missed +5 more)
pass-releasestimestamps

Truth: drawn from each run's own seed; shown in its row

RunAnswerScoreWhat was missed
claude-haiku-5-5 run 1 (seed 166697672)3 times0.25truth 12 times: 0.72, 2.24, 3.32, 4, 5.6, 6.8, 7.96, 10.56, 12.56, 14.44, 16.88, 18.8 s; 9 of 12 not within 0.5 s (at 2.24 s, 4 s, 5.6 s, 6.8 s +5 more)
claude-haiku-5-5 run 2 (seed 778572209)12 times1.00truth 12 times: 1.88, 2.68, 3.76, 5.56, 7.28, 9.76, 10.96, 12.8, 14.12, 16.04, 16.72, 18.8 s; all within 0.5 s
claude-opus-5-5 run 1 (seed 205159368)11 times1.00truth 11 times: 0.4, 1.08, 2.84, 5.4, 7.72, 10.4, 11.52, 12.2, 13.6, 15.2, 17.32 s; all within 0.5 s
claude-opus-5-5 run 2 (seed 613104018)11 times1.00truth 11 times: 1.4, 3.16, 5.64, 6.84, 8.88, 9.56, 11.4, 13.24, 15.56, 17.56, 19.24 s; all within 0.5 s
claude-opus-5-5 run 3 (seed 959964891)12 times1.00truth 12 times: 1.2, 3.88, 5.84, 7.6, 8.28, 10.64, 12.32, 14.28, 15.08, 16.88, 18.08, 19.6 s; all within 0.5 s
claude-sonnet-5-5 run 1 (seed 208632171)11 times1.00truth 11 times: 0.76, 1.96, 3.8, 5.88, 8.4, 9.88, 11.48, 13.92, 15.6, 16.28, 18.72 s; all within 0.5 s
claude-sonnet-5-5 run 2 (seed 280902796)-0.00truth 11 times: 1, 3.08, 5.92, 7.12, 9.24, 11.4, 12.8, 13.88, 14.96, 16.76, 19.16 s; no answer given
claude-sonnet-5-5 run 3 (seed 288038083)12 times1.00truth 12 times: 0.52, 2.4, 4.2, 6.12, 7.28, 9.04, 10.28, 12, 12.68, 14.52, 16.4, 18.36 s; all within 0.5 s
claude-sonnet-5-5 run 4 (seed 395804731)11 times0.92truth 12 times: 0.56, 1.36, 2.84, 3.52, 5.76, 7.72, 9.48, 10.88, 11.56, 13.68, 15.08, 16.68 s; 1 of 12 not within 0.5 s (at 1.36 s)
claude-sonnet-5-5 run 5 (seed 406013493)10 times0.82truth 11 times: 0.4, 1.6, 3.48, 5.72, 7.4, 9.92, 12.4, 14.44, 16.04, 17.24, 19.04 s; 6 of 11 not within 0.5 s (at 1.6 s, 3.48 s, 5.72 s, 7.4 s +2 more); 5 unmatched (at 2.4 s, 4.4 s, 6.4 s, 8.4 s +1 more)
claude-sonnet-5-5 run 6 (seed 604284533)-0.00truth 12 times: 0.6, 2.24, 2.92, 4.2, 5.4, 7.72, 8.4, 10.24, 12.16, 14.8, 16.68, 19 s; no answer given
claude-sonnet-5-5 run 7 (seed 633675701)12 times1.00truth 12 times: 0.76, 1.44, 3.2, 4.8, 5.48, 7.36, 8.96, 10.92, 12.76, 15.08, 17.04, 18.92 s; all within 0.5 s
claude-sonnet-5-5 run 8 (seed 956466926)11 times0.80truth 11 times: 0.8, 2, 4.2, 4.88, 7.04, 8.76, 10.44, 12.4, 14.12, 16.08, 19.04 s; 8 of 11 not within 0.5 s (at 2 s, 4.88 s, 7.04 s, 8.76 s +4 more); 8 unmatched (at 2.6 s, 6.2 s, 8 s, 9.8 s +4 more)
gpt-6-astra (seed 911623366)11 times1.00truth 11 times: 1.6, 3.28, 5.56, 7.88, 9.16, 10.6, 12.92, 14.12, 15.64, 16.92, 18.36 s; all within 0.5 s
qwen3-vl:4b-instruct-q4_K_M (seed 792092586)-0.00truth 11 times: 1.52, 3.6, 4.28, 6, 6.68, 7.8, 9.28, 11.28, 12.56, 13.76, 15.92 s; no answer given
stroke-raterate

Truth: drawn from each run's own seed; shown in its row

RunAnswerScoreWhat was missed
claude-haiku-5-5 run 1 (seed 166697672)300.56truth 33.333; 10.0% low
claude-haiku-5-5 run 2 (seed 778572209)400.54truth 36.29; 10.2% high
claude-opus-5-5 run 1 (seed 205159368)33.11.00truth 33.149; 0.1% low
claude-opus-5-5 run 2 (seed 613104018)35.11.00truth 35.156; 0.2% low
claude-opus-5-5 run 3 (seed 959964891)331.00truth 32.698; 0.9% high
claude-sonnet-5-5 run 1 (seed 208632171)331.00truth 32.967; 0.1% high
claude-sonnet-5-5 run 2 (seed 280902796)-0.00truth 34.884; no answer given
claude-sonnet-5-5 run 3 (seed 288038083)37.51.00truth 37.5; exact
claude-sonnet-5-5 run 4 (seed 395804731)371.00truth 36.29; 2.0% high
claude-sonnet-5-5 run 5 (seed 406013493)280.00truth 36.388; 23.1% low
claude-sonnet-5-5 run 6 (seed 604284533)-0.00truth 35.62; no answer given
claude-sonnet-5-5 run 7 (seed 633675701)341.00truth 34.704; 2.0% low
claude-sonnet-5-5 run 8 (seed 956466926)280.00truth 36.388; 23.1% low
gpt-6-astra (seed 911623366)37.31.00truth 37.19; 0.3% high
qwen3-vl:4b-instruct-q4_K_M (seed 792092586)-0.00truth 35.433; no answer given

svc-bench-1

Four short drawn videos on a still camera.

No runs on this suite yet.

Method

The tasks are synthetic videos drawn by the tool, so the truth is exact: no human labels, no judge model. The agent sees only the videos and writes its answers; bench score compares them with the truth.

The exact prompt

What bench run sends, word for word (for svc-bench-3; other suites change only the suite name and video count). One text per track, the same for every model.

Code track

You are a contender in a sports film review benchmark (suite svc-bench-3). The current folder holds 4 short videos, TASKS.md and answers.json. Read TASKS.md and follow its rules exactly: watch the videos (frames, ffmpeg, OpenCV or any script you write on the video files in this folder), then replace each null in answers.json with your answer in the stated format. Do not read the sports-video-coach package source, its git history, or any truth or result file anywhere on this machine. Work only inside this folder (temporary files under this folder are fine). Work alone, do not ask questions, and finish when answers.json is filled and parses as JSON. End with one line per task: your answer and how you got it.

Frames track (Claude Code)

You are a contender in a sports film review benchmark (suite svc-bench-3, frames track). This track measures how well you review film by eye: you get still images of 4 short videos and no way to run code. Judge by looking only. Do not try to read anything outside the given images and task text, and do not start helpers or sub-agents. Work alone, do not ask questions. End your reply with the whole answers.json (keys suite, track, answers; replace each null with your answer in the stated format) in one ```json block, after one line per task: your answer and how you got it. The current folder holds TASKS.md, answers.json and the images (contact sheets in sheets/, full-size stills in frames/). Your only tool is Read: read TASKS.md first, then the images it lists.

The Claude Code frames rows were run with this frames prompt. The other rows do not store their prompt in the result file, so for them it is unclear.

count

How many reps, bounces or shots.

1 - |error| / truth, never below 0.

rate

A cadence or a percentage.

1 within 2 % of the truth, falling linearly to 0 at 20 %.

timestamps

When each event happens.

Per event: 1 within 0.5 s, linear to 0 at 2 s, 0 if missing; summed and divided by the longer of the truth and answer lists, so extra events cost too.

outcomes

Made or missed, in order.

Fraction of positions answered correctly.

Total = the mean of the task scores. Above chance: per task, (score - floor) / (1 - floor), clipped to 0..1, where the floor is the score of the blind baseline (it copies the example answers from the task text and sees no video); 0 = no better than that guess, 1 = perfect. Full rules: docs/benchmark.md.

Run it yourself

  1. Install (needs ffmpeg on PATH)
    uv tool install git+https://github.com/mariusDing/sports-video-coach@74b517fc410944fefeac2979810656ed77fb8f1a
  2. Make the tasks: videos and an empty answers.json (the newest suite; leave out --suite for svc-bench-1)
    sports-video-coach bench prepare --out bench-run --suite svc-bench-3
  3. Let your agent watch the videos and fill bench-run/answers.json, then score it
    sports-video-coach bench score bench-run --agent "Your agent" --model "your-model"
  4. Or do it all in one command (prepare, run headless, score): Claude Code or Codex
    sports-video-coach bench run --agent claude --suite svc-bench-3
    sports-video-coach bench run --agent codex --suite svc-bench-3
    or a preset for another agent CLI. The presets are built from each CLI's docs (read 2026-10-25), with every flag checked against the real CLI's --help on 2026-10-25, but not run by the maintainer on a task (except OpenCode: run once, OpenCode 1.19.4, opencode/deepseek-v4.1-flash-free, 2026-10-25); code track only (doc links per flag). Any other CLI: --agent cmd --cmd "... {prompt}".
    • --agent gemini Gemini CLI: gemini --approval-mode yolo [--model M] -p <prompt> (flags checked against 0.65.0 --help)
    • --agent qwen Qwen Code: qwen --safe-mode --approval-mode yolo [--model M] <prompt> (flags checked against 0.26.1 --help)
    • --agent aider Aider: aider --yes-always --no-git --no-check-update --no-pretty --no-stream [--model M] --read TASKS.md --message-file <prompt file> answers.json (flags checked against 0.86.2 --help)
    • --agent opencode OpenCode: opencode run --auto --print-logs --log-level ERROR --dir <run folder> [--model M] <prompt> (flags checked against 1.19.4 --help)
    • --agent cursor Cursor CLI: agent -p --force --trust --output-format text [--model M] <prompt> (flags checked against 2026.10.22-27dcf5f --help)
    • --agent copilot GitHub Copilot CLI: copilot -p <prompt> --allow-all-tools --no-ask-user -s [--model M] (flags checked against 1.0.103 --help)
    • --agent goose Goose: goose run --no-session [--model M] -t <prompt> (flags checked against 1.56.0 --help)
    Use one of these agents? Run it and tell us how it went: issue #7 (a result row, or the error if the preset's flags are wrong).

Submit your run

Honesty notes