The source of frontier-cs.org, the website of the FrontierCS benchmarks. It is a Jekyll site, originally forked from the al-folio theme and since rebuilt.
- FrontierCS 2 evaluates AI agents on computer science research. Each of its 48 tasks removes the key contribution of a published paper from the code released with it. An agent passes only if its version beats that code, the human reference, on every metric of every hidden workload.
- FrontierCS is the first benchmark: open-ended algorithmic problems where any valid answer is accepted and a better one scores higher.
| Path | Source | Contents |
|---|---|---|
/ |
index.md, assets/js/fcs2.js, assets/css/fcs2.css |
FrontierCS 2: the task map, the leaderboard (pass rate, pass rate by domain, FCI, test-time scaling, mean score), the task list, the private set, sponsors and questions |
/task/#<slug> |
_pages/fcs2-task.md, assets/js/fcs2-task.js |
One FrontierCS 2 task: its diagram and description, results, pass criteria, charts and the solution in words. /task/ alone goes to the task list |
/v1/ |
_pages/v1.md, assets/js/fcs1.js |
FrontierCS: leaderboard, example problems and questions |
/blog/ |
_pages/blog.md, _posts/ |
Blog list and posts |
/paper/ |
_pages/projects.md |
Research: the team's papers and work built on FrontierCS |
/workshop/ |
_pages/workshop.md |
The proposed ICLR 2027 workshop |
/team/ |
_pages/team.md |
Publications, institutions, partners, sponsors and contacts |
/results2/ |
_pages/results2.html |
An unlisted results page; see bin/README-results2.md |
Shared parts are in _includes/ (header, footer, the blog article frame) and _layouts/. Site-wide styles and colour tokens are in _sass/_fcs.scss.
bundle install
bundle exec jekyll serve # http://localhost:4000or, with Docker, ./bin/docker_run.sh (http://localhost:8080). A production build is JEKYLL_ENV=production bundle exec jekyll build, which writes _site/.
mainis the live site. A push tomainruns.github/workflows/deploy.yml, which builds the site and publishes it to thegh-pagesbranch;CNAMEserves it at frontier-cs.org.redesignis the working branch for the current version of the site. Open pull requests againstredesign, one topic per pull request, with a preview and what you checked (desktop and a 390 px phone width).
The FrontierCS 2 pages read static files; nothing on the site calls the evaluation platform. The files come from the platform's read-only API through these scripts, run in order:
bin/fcs2_db_from_platform.py out.db --claude-usage=opus55-usage-recovered.jsoncollects the formal evaluations into a SQLite database. The usage file restores Claude Opus 5.5's costs, which the platform lost when traces were truncated. Without it the script stops while any Claude Code run has no usage. Also pass--trace-usage=fcs2-trace-usage-recovered-20261022.json(inexports/trace-usage/), the costs of Progent's runs and Gemini 4 Argon's Continuum run;bin/fcs2_db_add_trace_usage.pyadds it to an existing database.bin/fcs2_checks_from_platform.py out.dbwritesassets/js/fcs2-checks.js: for each run and metric, on how many hidden workloads the final submission beat the human reference. Task pages and the overview's Every run kebab read it. The counts of models kept off the leaderboard (Kimi K2.7) go to_data/fcs2_checks_hidden.jsoninstead, for fits only; the converter reads both.bin/fcs2_runs_from_db.py out.dbrewrites the block between the converter markers inassets/js/fcs2-data.js: runs, costs, FCI, test-time scaling, task difficulty, how each run ended when it failed, was refused or is not yet scored (STATE, for the kebab), and descriptions. Task difficulty readsassets/js/fcs2-checks.jsand_data/fcs2_checks_hidden.json, so step 2 comes first. It also writes_data/fcs2_runs_hidden.json, the runs of models kept off the leaderboard (Kimi K2.7, the 0 point of FCI). Files in_data/are not published. With--json=out.jsonit also writes every number for the paper's figures, and keeps there the earlier FCI fitted on raw scores (feci_score), which the site no longer shows.bin/fcs2_metric_means.py metric_aggregates.jsonl --db=out.db --values=metric_values.jsonl --margins=workload_margins.jsonl --reference=reference_profile.jsonl --reference=reference_profile_polar.jsonl --reference=reference_profile_replay.jsonlwritesassets/js/fcs2-metrics.js: for each task and metric, whether higher or lower is better and, per run, its mean over the hidden final workloads and the human reference's mean in the same evaluation. The input is an export of each run's final evidence from the platform (GET /api/v1/runs/<id>/submission/evidence?submission_id=final, one row per run and metric). The human reference is measured again in every run, so its mean varies from run to run; the task page shows the median over the task's runs. Where no run's evidence holds the human reference's numbers,--referencegives them: one row per task and metric, measured in a run of the human reference alone or read from earlier evidence, used only on the task version the runs had.bin/fcs2_patches_from_platform.pywritesassets/patches/<slug>.json, the final patch of each run. The site does not show patches; they are the source for the solutions below.
These files are written by hand:
assets/js/fcs2-data.js, outside the converter block: the task list, domains and shared helpers.bin/fcs2_descriptions.tsv: task descriptions, a copy of the paper repository's notes. The converter copies them intofcs2-data.js.assets/js/fcs2-solutions.js: how a model's final submission solves each task, in 3 to 5 steps, written from its patch.assets/img/fcs2-tasks/<slug>.svg: one diagram per task, inlined into the page. Diagrams use only thefig2classes inassets/css/fcs2.css, never inline colours or fonts. What is given sits on grey, the part the agent writes on the tonal colour of the task's domain.assets/js/fcs2-art.js: the illustration of each task in the map.
- Pass: the final submission beats the human reference on every metric the task checks and on every hidden workload.
- FCI (FrontierCS Capabilities Index) and FDI (FrontierCS Difficulty Index) come from one model, Epoch AI's ECI idea fitted on what each run achieves. A run passes only if it beats the human reference on every metric the task checks, so the model looks at each metric (from
assets/js/fcs2-checks.js); metrics that the same runs beat share one difficulty (GROUP_TOLin the converter). A run's final score counts by how far above the human reference it is when the run passes, in units of the task's score spread (at least the median spread over tasks), and by how far below it when the run does not pass and falls short; a run that does not pass but scores above the human reference counts as at least level, as its metrics did not confirm more. A run's metrics and its final score come from the same measurements, so they share one fitted run effect. Every run of every model, Kimi K2.7 included, enters the fit.- A model's FCI is its strength, with Kimi K2.7 at 0 and ten points per logit (
PASS_ZERO,PASS_ZERO_VALUEandPASS_UNITin the converter). Its 90% interval comes from a bootstrap over tasks that refits the model. - A task's FDI is the FCI at which a model passes it half the time, with a 90% interval. The task chart draws each task's pass curve from its metric groups' difficulties (
GROUPS). With--jsonthe converter also writes a progress curve per task, the expected share of its hidden checks a model beats (progress_curve).
- A model's FCI is its strength, with Kimi K2.7 at 0 and ten points per logit (
- Refusals: a run whose model provider refused, so that no final submission came (the platform's adjudication cause
provider_refusal_no_final), counts as a failed run everywhere, in FCI, FDI and test-time scaling as in the pass rate (Qiuyang, 2026-10-20). The task page lists it as refused. - Test-time scaling: a model's FCI with every run stopped at a budget in US$. A run that has ended within the budget counts what it achieved; a run still going counts as if it timed out at the budget (every metric group unbeaten, a final score of 0), so a curve never falls. The chart shows only each lab's model with the highest FCI (owner, 2026-10-16). Task difficulties stay as in the leaderboard fit, so at full budget it is the model's FCI.
- Cost: how each model's cost is estimated is in the paper (Appendix B, Cost estimates); the site's FAQ no longer carries it (owner, 2026-10-20).
These need Python with Playwright; each script's docstring gives its use.
bin/fcs2_card.pydrawsassets/img/fcs2-card.png, the link preview of the FrontierCS 2 page.bin/fcs2_thread_cards.pydraws post cards from the site's charts.bin/blog_thumbs.pydraws the blog thumbnails inassets/img/blog-thumbs/.bin/blog_figures.pyredraws figures used in blog posts.
- Add
_posts/YYYY-MM-DD-<slug>.mdwithlayout: distill. Copy the front matter of a recent post:title,description,date,date_display,authors(name, url, affiliations),thumbnail,og_image, andtocfor the contents list. - Put images in
assets/img/YYYY-MM-DD-<slug>/. - Add a thumbnail with
bin/blog_thumbs.py, or pointthumbnailat an existing image.
- Write "FrontierCS" (no hyphen) and "FrontierCS 2"; the hyphen stays only in repository names and URLs. The authors' code is the "human reference".
- Colours come from Google's palettes. Each model's colour is defined once, as
--m-<id>in_sass/_fcs.scss. - Links are plain underlined text or pills, never arrow characters. Checkboxes, radios and menus are drawn in the site's style, not left to the browser.
- Check every change at desktop width and at 390 px.
MIT, see LICENSE. The theme this site started from is al-folio by Maruan Al-Shedivat and contributors, also MIT.