> ## Documentation Index
> Fetch the complete documentation index at: https://benchgen.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Version a benchmark in git

> The skill that records a benchmark's files in a git repository after every change, lists the versions, and puts an earlier one back.

| The skill | `benchmark-version` |
| - | - |
| **Changes anything** | Records versions without touching the benchmark. Putting one back does change it, after a check. |
| **It picks this up when you say** | "save it to github", "version my benchmark", "what versions do we have", "go back to the old version" |
| **It hands over to** | `benchmark-launch` to run a model again after a version is restored |

## What it can do

* Record a benchmark's files in a git repository, one commit per change
* Write the commit message from the change itself, so the log reads as a history
* Record nothing when the repository already matches, rather than making an empty commit
* List every version of a benchmark, newest first
* Put an earlier version back, after a check that says what would change
* Send only the parts that actually differ, so no run is marked stale for nothing
* Keep a benchmark's versions through a retitle, because a version is matched by its number

## Why it exists

A benchmark on the platform has a timestamp, not a version. The platform can
tell you a run is older than the current files. It cannot tell you **what**
changed between them, or give the old files back.

Recorded in git, a benchmark gets both. Widening an answer key becomes a diff
somebody can read, and a score has a commit to point at instead of a date.

## Prompts to try

```text theme={null}
Save benchmark 97 to the repository.
```

```text theme={null}
What versions do we have of benchmark 97?
```

```text theme={null}
Go back to the answer key we had before the last change.
```

```text theme={null}
What changed in this benchmark since last week?
```

## Where a benchmark is filed

```
benchmarks/<owner>/<slug>/
    competition files, exactly as the platform holds them
```

That is the benchmark's own path in the web app, so the folder and the page are
the same address. Renaming a benchmark **moves** the folder rather than filing
it twice, and the history follows the move.

## What it will not do

* Create a benchmark, launch a run or start training
* Put a version back without a check first, which you see before anything changes
* Ask you for a repository address, a token or a key. Those are deployment
  settings, and a token pasted into a chat is a leaked token
* Work at all if the deployment has no repository configured. It says so plainly

<Note>
  The history is only as good as the exports. A change that is applied but never
  recorded is a version that does not exist, which is why the agent records one
  straight after applying a change, using the same words that described it.
</Note>

## Related

<CardGroup cols={2}>
  <Card title="Edit a benchmark" icon="pen-to-square" href="/docs/skills/edit-a-benchmark">
    Make the change that is then recorded.
  </Card>

  <Card title="Analyze the results" icon="magnifying-glass-chart" href="/docs/skills/analyze-results">
    Decide what to change, with proof, before changing it.
  </Card>

  <Card title="Update from a repository (API)" icon="code" href="/docs/api-reference/endpoint/update-benchmark-repo">
    Apply a repository's files from your own code.
  </Card>

  <Card title="Create from a repository (API)" icon="code-branch" href="/docs/api-reference/endpoint/create-benchmark-repo">
    Build a new benchmark from a repository.
  </Card>
</CardGroup>
