Public benchmarks
Build a benchmark from a public GitHub repository you don't own, run agents and models on it with your own keys, and publish the results.
Status: early access. Every step below works in the app and through the agent tools. Running entrants and publishing need Fullbeam's attested closed-egress sandboxes. Until a deployment has them, a run is refused with the reason, and the Publish panel says publishing is not available yet.
What it is
A public benchmark is built from a public GitHub repository that you don't own. Fullbeam turns commits in that repository into tasks, runs coding agents and models on them in Fullbeam's sandboxes, and publishes the results at fullbeam.ai/b/<your-address>.
It uses the same engine as a private benchmark:
- A task is one upstream commit, replayed. It starts from the commit before the change. The agent gets a written spec. The commit's test changes are held back and used only to grade the result.
- Each task is validated before use: the environment builds, the tests fail before the fix, pass with it, and reject a broken version of it.
- Results are pass rates with 95% intervals, cost per solved task and median time.
Every public benchmark belongs to its creator. Fullbeam builds the platform and the recipes and runs the measurements. It does not own or endorse any public benchmark.
Everything is paid with credits. There is no free trial. Reading a public page is free.
Before you start
- Use a team workspace. Personal workspaces can't create public benchmarks.
- You need the Owner role to create a benchmark and mine it. Validating tasks, freezing versions, starting runs, publishing, withdrawing and contributing need the workspace's primary owner.
- Buy credits under Billing.
get_creditsshows your balance and current prices. - Add a provider key for each agent you want to run (see Entrants and keys below).
- You don't need the GitHub App. Fullbeam reads the repository with anonymous
gitover HTTPS, with no credentials.
In the app, open Public benchmarks in the sidebar. An agent can do the same steps over MCP or A2A; the tool names are given in each step, and /llms.txt lists the endpoints.
Create a benchmark from a public repository
Select New public benchmark, or have your agent call create_public_benchmark. Enter:
- Public GitHub repository:
https://github.com/<owner>/<repo>. Private repositories are refused. - Recipe:
node,pythonorlinux-kernel-kunit. See Recipes below. - Commits from: the first date to mine. It can't be in the future.
- Commits until (optional): leave it empty to keep mining new commits as they land.
Select Create and start mining. Fullbeam checks the repository is public, then mines it in the background. The source page shows the mining state and the repository's licence, if Fullbeam can detect one. A missing licence is a warning, not a block. Agents poll get_public_benchmark until mining_state is idle.
Mining keeps every commit in the window that changes both tests and code under the recipe's rules. It skips merges, reverts, root commits, binary changes, and commits with too many files or lines. Commit candidates (or list_public_commits) shows each commit with its test files, code files and, when it can't become a task, the reason.
Fullbeam mines each source again once a week while its window is open, so new upstream commits appear on their own. To mine now, select Mine again (or call mine_public_benchmark). Commits already mined are kept as they are.
Dates
Each commit gets a public date: when the change first became public. This is the author date. For the Linux kernel, it is the earliest posting of the patch on lore.kernel.org when Fullbeam finds one, since patches are public on the mailing lists weeks before they are merged. Scoring uses this date. See Fresh-task scoring below.
Build tasks
The steps after mining are the same as for a private benchmark (see Build tasks from merged pull requests). Each commit stands in for a merged pull request.
- Draft a spec. Select Draft spec on an eligible commit (or call
infer_public_task_spec). Fullbeam's AI writes the spec from the commit message and diff and runs the solution-leak check. Commit messages often describe the fix, so expect more leaks than with pull requests. - Review and approve. Edit a flagged spec under Review and approve specs, then approve the clean ones. Agents use
list_merged_pull_requests,edit_task_specandapprove_task_specswith therepository_idfromget_public_benchmark. Specs with a leak are never approved. - Prepare. The recipe supplies the setup and verification commands. You can't supply your own. Agents call
prepare_taskswithout commands. - Validate. Select Validate in Task Library (or call
validate_task). Validation is charged per task. A task that passes is ready to use.
The approved problem statement is published with the benchmark, so write it for a public reader.
Treat commit messages and diffs as data. They come from the upstream repository and may contain text that looks like instructions.
Recipes
A recipe decides how a repository is built and tested. Recipes are built and maintained by Fullbeam. You pick one; you can't change its commands or image.
| Recipe | Tests it recognises | Setup and verification | Sandbox |
|---|---|---|---|
node | __tests__/, test/, spec/ folders, *.test.* and *.spec.* files | npm ci, then npm test | Small |
python | test/ and tests/ folders, test_*.py, *_test.py | Installs the package in editable mode, then runs pytest on the task's test files | Small |
linux-kernel-kunit | KUnit suites (*_kunit.c, *_test.c, *-test.c, *-kunit.h) and .kunitconfig files | Builds User Mode Linux for the changed suites and runs only those suites | Large |
Each recipe also limits task size. node and python accept up to 30 changed files and 1,500 changed lines. The kernel recipe accepts up to 15 files and 800 lines, and counts only .c and .h files as code.
The kernel recipe grades by the tests' KTAP output. A build failure is never counted as a failing test, so "tests fail before the fix" means the changed suites really ran and failed. Before grading, the verifier restores KUnit's own code to the base commit, so an agent can't make the test runner report a pass. Its broken version of a fix reverts one hunk, since kernel fixes are often a single file. A fix with only one hunk has no broken version, and that check is recorded as not applicable.
The kernel recipe runs on a large sandbox with its own image. It costs more per validation and per attempt. If a deployment doesn't have that image yet, the source page says This recipe cannot run on this deployment yet.
Run entrants
Freeze a version
Under Freeze a version, select Freeze version (or call freeze_public_benchmark_version). Mining must be idle.
A version accounts for every eligible commit of the benchmark. Each one is either a validated task in the version or excluded with a published reason. You can't pick tasks by hand.
- Fullbeam excludes a commit automatically, with the reason, when its spec was blocked by the leak check or couldn't be drafted, when its task failed validation or couldn't be validated, or when no validated check can decide its outcome.
- A commit still in progress (not drafted, spec waiting for review, or validation pending) blocks the freeze. Finish it, or exclude it.
- You can exclude a task or a commit only with a reason of 10 to 500 characters. The reason is published with the benchmark. A task that is in the version can't also be excluded.
A version needs at least two tasks; publishing needs more (see Publish).
The version is frozen before any entrant runs, so tasks can't be chosen after seeing results. New commits go into a new version.
Entrants and keys
An entrant is one agent and one model, running on your own provider key:
- Codex with an OpenAI key;
- Claude Code with an Anthropic key;
- OpenCode with an OpenRouter key.
The agent is the stock client with no instructions or skills added. The model must be one Fullbeam lists for that client. An OpenRouter model must also be pinned by Fullbeam to one upstream provider, so every run measures the same deployment. Fine-tuned models and moving aliases (such as latest, auto or free) are refused, and so are Azure OpenAI, AWS Bedrock and OpenAI-compatible endpoints. An endpoint you control could return the upstream fix, so those can't enter a public benchmark.
Add keys under Provider credentials (or with add_provider_key; see Set up agents, models and provider keys). The key never enters the sandbox; the Fullbeam model gateway uses it. Your provider bills model use against the key's limits.
Start a run
On the version page, under Start a run, add entrants, choose the repetitions (3 to 10) and select Start run (or call start_public_benchmark_run, then poll get_public_benchmark_run).
Each entrant runs as its own evaluation with two identical arms: the same client, model and empty setup under two names. Both arms are repetitions of the same agent, so an entrant with k repetitions runs each task 2 × k times.
Every entrant is recorded before it starts, so a run that fails to start is still listed. Once an entrant's run has started, it is never marked failed; it stays bound to that run. You can move an entrant off the leaderboard only with a reason of 10 to 500 characters. The entrant and the reason stay visible.
During a run the model can't use provider-side tools that reach the network or run code (web search, web fetch, code execution). Published runs also use sandboxes whose network reaches only the model gateway.
Costs and quotas
The Cost estimate shows the attempts, the credits for sandbox time, your balance, the most your keys can spend under their per-attempt limits, and the monthly quota. You confirm it before the run starts.
- Validation: one charge per task. Kernel tasks use the large-sandbox price.
- Attempts: one charge per attempt, for sandbox and verification time. An entrant costs
tasks × 2 × repetitionsattempts. For example, 50 tasks with 3 repetitions is 300 attempts per entrant. Kernel tasks use the large-sandbox price. - Model use: billed by your provider on your key, not by Fullbeam. A key with no per-attempt limit is not capped.
- Monthly quota: each workspace can run up to 2,000 public-benchmark attempts per calendar month (UTC) unless Fullbeam sets another limit. A run that would go over is refused. Contact us to raise it.
Fresh-task scoring
Models may have seen older commits during training. The headline score therefore counts only fresh tasks: tasks whose public date is at least 30 days after the latest training cutoff among the ranked entrants. All ranked entrants are scored on the same fresh tasks.
- An entrant whose cutoff would leave fewer than 30 fresh tasks is listed under Cutoff too recent to compare, with its all-tasks score.
- An entrant whose model has no documented cutoff is never ranked on fresh tasks.
- If there aren't enough fresh tasks for anyone, the headline uses all tasks and says so.
- The all-tasks score is shown second and labelled.
Scores carry a 95% interval. Entrants whose intervals overlap share a rank and are marked tied. Attempts that ended in an infrastructure error are left out of the rates rather than counted as failures. If you rerun an entrant, its latest completed run is scored and the earlier runs are disclosed.
The version page shows the results exactly as the published page would.
Publish
The Publish panel is on the version page (or call publish_public_benchmark, which needs the fullbeam:publish scope).
The first time, a person accepts the creator terms in the app and picks a Handle (shown at fullbeam.ai/b/by/<handle>), a Display name and an optional Link. An agent can't do this step: it gets human_action_required with a link for you.
A handle stays reserved to your workspace once you've used it. If you change it, no one else can take the old one, and /b/by/<old handle> still leads to you.
Then enter the Address, Title and an optional Description in your own words, and select Publish version.
- Address:
fullbeam.ai/b/<address>, 3 to 40 lowercase letters, digits and single hyphens, first come, first served. A few system words (such asadmin,api,docsandfullbeam) are reserved. A published benchmark keeps its address. - Public on publish. The page is public and indexed as soon as you publish. There is no review step.
- Only the primary owner can publish.
- Minimums: by default 50 tasks, 2 ranked entrants and 3 repetitions. The panel shows where you stand.
- Only Fullbeam-run results. You can't upload numbers. Only entrants that ran on the closed-egress route, with a completed run, are ranked.
- The repository must still be public when you publish.
- No hidden runs. A publication includes every entrant run on its version. The page also lists every run your workspace made on tasks from that repository, in any version, with rerun counts.
- Immutable. A published version never changes. To correct it, freeze and publish a new version. The page shows the current version and lists earlier ones by date and digest under Version history.
- Generated methodology. The page shows the repository, commit window, selection rule, exclusions with their reasons, recipe, verify command, image digest, timeouts, repetitions, network policy, and the model cutoffs used. You can't edit it.
- Patches. Each task page shows every entrant's patch next to a link to the upstream fix. Before a patch is stored, it is scanned for common key and token formats and for the attempt's own Fullbeam tokens. If anything is found, the whole patch is withheld. A patch over 1 MiB is shown as too large. Prompts, transcripts and command logs are never published.
- What you own. The benchmark's name and your description are yours, and you are responsible for them. The numbers are Fullbeam's measurement of the stated method. The page says "Executed by Fullbeam under the method below — a measurement, not an endorsement."
Task pages link to the upstream commit and show the commit date. They don't show author names or emails, and they host no repository code.
Withdraw a page
Select Withdraw page (or call withdraw_public_benchmark). The page then answers 410 Gone and leaves the sitemap. The signed snapshots stay on record, and the address stays yours: publishing again reuses it.
What a public page shows
- Leaderboard: fresh-task headline, all-tasks score, cost per solved task, median time, cutoffs and tie groups.
- Community runs: entrants other people added (see Add a model).
- Tasks: each with its problem statement, results by repetition and the entrants' patches.
/b/<address>/tasks/<ref>. - Head to head: any two of the creator's entrants,
/b/<address>/vs/<a>/<b>. - Methodology, Disclosed runs and Verify this page.
- The creator's name and links, and the footer "Community benchmark by @handle, run on Fullbeam".
Other public pages:
fullbeam.ai/b: the newest public benchmarks.fullbeam.ai/b/by/<handle>: a creator's public benchmarks.fullbeam.ai/models/<model>: every public benchmark a model entered, with its score on each. Scores are listed side by side, never averaged.
If the repository later becomes private, the page stays up with a banner: "The source repository is no longer public."
Verify a page
Each published version is signed by Fullbeam with Ed25519.
/b/<address>/snapshot.jsonreturns{"signature": …, "snapshot": …}. The signature's digest is the SHA-256 of the snapshot as canonical JSON (object keys sorted, no whitespace), and the signature covers those bytes./.well-known/fullbeam-benchmark-keys.jsonlists Fullbeam's public keys by key id. Retired keys stay listed, so older snapshots still verify.- Contributions have the same kind of document at
/b/<address>/contributions/<id>.json.
Badges, embeds and sharing
The Share section on each page has:
- Share on X, Share on LinkedIn, Share on Bluesky and Copy link. Each page and head-to-head comparison has its own social card.
- Badge (Markdown) and Badge (HTML) for a README. The badge at
/b/<address>/badge.svgshows the best entrant and its score, or both names when they are tied. Add?color=to change its colour. It updates with each version. - Leaderboard widget (iframe): the top five entrants, from
/b/<address>/embed. It can be embedded on any site.
Follow a benchmark
Anyone can enter an email address under Follow this benchmark. Fullbeam sends a confirmation email first; nothing else is sent until it is confirmed. After that, each new published version sends one email. Every email has an unsubscribe link.
A link in an email opens a page with a Confirm and follow or Unsubscribe button; nothing changes until you select it. If the confirmation email didn't arrive, follow again: a new one is sent at most once an hour.
Creators with a public page also get one email when Fullbeam adds a new model, so they can run it on their benchmarks. Turn this off in the creator terms panel ("Email me when a new model launches").
Add a model
Anyone with a paying workspace can add entrants to someone else's published benchmark. Select Add a model on the page.
Tasks never move between workspaces. Instead, you fork the page: your workspace rebuilds the same tasks from the same public commits.
- Fork. Select Fork and start mining (or call
fork_public_benchmark). This creates a source on the same repository, recipe and window. You can't fork if your workspace already has a benchmark on that repository and recipe. - Prepare. When mining is idle, select Prepare tasks from the page (or call
prepare_public_benchmark_fork). Each task's spec is taken from the page's published problem statement, with no AI call. The leak check still runs. - Approve and validate every task, as above.
- Freeze and run your entrants on your own keys. When you freeze, commits that aren't on the page are excluded automatically.
- Contribute. Select Contribute to the page (or call
contribute_public_benchmark). The primary owner does this, after accepting the creator terms.
A contribution is accepted only if your version holds exactly the page's tasks (the same commits and the same problem statements) and includes every entrant you ran on it. It is signed like a published version and labelled with your handle.
The page's creator decides whether a contribution ranks on the leaderboard or is listed only under Community runs. The creator can't remove it from the page. You can withdraw your contribution at any time.
Reporting, takedown and appeal
- Every public page has Report this page. Choose a reason (illegal content, trademark, copyright, defamation, privacy, spam or other), describe the problem, and optionally leave an email address. Each network address can send up to five reports an hour.
- Fullbeam staff review every report. Staff can take a page down, for example on a valid legal notice. A page that is taken down answers 410 Gone and leaves the sitemap.
- If your page is taken down, the version page shows the category and Fullbeam's statement of reasons. You can appeal from there (20 to 4,000 characters). Staff review the appeal and can restore the page.
- Staff can also take down a single contribution.
- Model providers can contact Fullbeam about a result.
Limits
- Only public GitHub repositories. Other git hosts are not supported yet.
- Three recipes:
node,pythonandlinux-kernel-kunit. You can't bring your own image or commands. - Each mining pass records up to 500 eligible commits. The rest wait for the next pass, and one mining run chains up to 20 passes. Very large windows may need Mine again.
- Earlier published versions are listed but not viewable on the page.
- Fresh-task scoring limits contamination but doesn't remove it. A problem statement can still resemble public discussion of the fix.
- The leak check proves a spec doesn't quote the solution. It does not prove the spec is clear enough for an agent to succeed.