Founding keys are opena year free at 6,000 req/hour, for the first 1,000 developersClaim yours
Documentation 33

Answer-key eval pack · 53 items · 5 services

An answer key for a data set that never changes under your tests.

An eval needs two things: questions worth asking, and an answer you can compare against. The hard half has always been the second one, because the tools an agent reads are live accounts whose contents move while you are measuring. This is a downloadable file of 53 known facts about the olympus-labs data set, each with the request that answers it and the value it must come back with, plus a harness small enough to read in a sitting.

01Download the pack
02Run the harness
03Put your own agent in the middle

01 / What it is

Questions, requests, and the answers.

Every item names a question somebody would actually ask an agent, the tool calls that answer it, and the value the answer has to be. Nothing in it is invented: each one was read off a pinned host and each one cites the test in our repository that would fail if it moved. An item nobody can cite does not go in the pack, however true it is today.

olympus-labs-g12.json
{
  "id": "gh-pull-number",
  "service": "github",
  "question": "Which pull request number in olympus-labs/parthenon carried the fix for the dropped-events incident?",
  "tool_calls": [
    {
      "method": "GET",
      "host": "gh-2026-03-g12.snap.sandboxapis.dev",
      "path": "/repos/olympus-labs/parthenon/pulls/53"
    }
  ],
  "expected": {
    "path": "number",
    "equals": 53
  },
  "difficulty": "read",
  "guarded_by": "packages/conformance/src/parity/pinned-cross-category.test.ts#closed_by_pull resolves to the closing PR on the GITHUB host, via the tracker's branchName"
}

The 53 items carry one of three difficulties. 40 are read: one field off one response. 7 are join, where two responses have to agree and the second call is only reachable once the first has been read. 6 are reason, where the answer is computed from what came back rather than copied out of it.

02 / Why pinned hosts

The same answer every run.

A measurement taken against a moving target measures the target. Point an eval at a real GitHub organization and a merged pull request, a new reviewer or a renamed branch changes the score without anything about the agent changing, and the run you did this morning is not the run CI does tonight. So every host in this pack is a pinned snapshot: one compiled data set, addressed by a content hash, served under its own hostname.

03 / Running it

Three commands.

terminal
curl -O https://sandboxapis.dev/evals/olympus-labs-g12.json
curl -O https://sandboxapis.dev/evals/run.py
pip install requests && python3 run.py

It prints a line per item and a score. There is a Node 22 harness beside it that needs no dependencies at all (node run.mjs), and both cache by request, so a full run costs 12 requests rather than one per item. Anonymous access is enough to finish it; a free key raises the limit and rides your own budget instead. Keys and rate limits has the numbers.

terminal
53/53  all correct  (olympus-labs-g12-2026-09, 12 requests)

04 / Your agent

One function to replace.

Out of the box both harnesses read the answer straight out of the response, which scores the data set and proves the pack is right. There is exactly one function to change, it already receives the question, the fetched responses and an agent flag, and the model call you need is written in a comment inside it. Put yours there, run with --agent, and the same expectations now score your agent instead.

run.py
def answer(item, responses, agent):
    """THE AGENT HOOK. With no flag this reads the answer out of the response, which
    scores the DATA SET. Put your model call under "if agent:" and the same
    expectations score the MODEL instead, which is what makes this an eval:
        if agent:
            reply = anthropic.Anthropic().messages.create(model="claude-sonnet-4-5",
                max_tokens=256, messages=[{"role": "user", "content": item["question"] + json.dumps(responses)}])
            return json.loads(reply.content[0].text)["answer"]
    """
    return at(responses[-1], item["expected"]["path"])

That is the whole difference between a smoke test and an eval: the fetch and the assertion stay where they are, and the middle beat becomes a model call. The agent tutorials teach the same shape one service at a time.

05 / The items

Every question in the pack.

Grouped by the service that answers it. The guarded_by field in the JSON names the test behind each row.

GitHub 12

ItemQuestionDifficulty
gh-pull-numberWhich pull request number in olympus-labs/parthenon carried the fix for the dropped-events incident?read
gh-pull-titleWhat is the title of pull request 53 in olympus-labs/parthenon?read
gh-pull-mergedDid pull request 53 in olympus-labs/parthenon merge, or was it closed without merging?read
gh-pull-authorWho opened pull request 53 in olympus-labs/parthenon?read
gh-pull-head-refWhich branch did pull request 53 in olympus-labs/parthenon merge from?read
gh-pull-head-shaWhat is the head commit SHA of pull request 53 in olympus-labs/parthenon?read
gh-review-stateWhat verdict did the review on pull request 53 in olympus-labs/parthenon leave?read
gh-review-countHow many reviews were submitted on pull request 53 in olympus-labs/parthenon?reason
gh-independent-approvalPull request 53 in olympus-labs/parthenon was approved. Who signed it off, and was that somebody other than its author?join
gh-merged-inside-windowFATE-51 was resolved at 2026-06-19T16:21:17Z. When did the pull request that fixed it merge, and was that before the tracker closed the issue?reason
gh-branch-existsIs hotfix/backfill-job-ooming a real branch in olympus-labs/parthenon, or only a string on the pull request?read
gh-branch-sha-matches-pullDoes the branch named on pull request 53 point at the same commit the pull request calls its head?join

Jira 11

ItemQuestionDifficulty
jira-issue-keyWhich Jira issue key tracks the incident where events were dropped during a rebalance?read
jira-summaryWhat summary does the Jira host give FATE-51?read
jira-statusWhat status does the Jira host report for FATE-51?read
jira-issue-typeWhat issue type is FATE-51 filed as?read
jira-assigneeWho is FATE-51 assigned to?read
jira-estimateWhat story point estimate does FATE-51 carry?read
jira-createdWhen was the incident issue FATE-51 filed?read
jira-resolvedWhen was the incident issue FATE-51 resolved?read
jira-beat-the-targetFATE-51 was filed at 2026-06-17T19:51:17Z and the team's target is to close an incident within 72 hours. When did it resolve, and did it beat the target?reason
jira-project-keyWhich Jira project does FATE-51 belong to?read
jira-project-nameWhat is the name of the Jira project whose key is FATE?read

Slack 14

ItemQuestionDifficulty
slack-incident-channel-nameWhich channel in the olympus-labs workspace is the incident bridge?read
slack-incident-channel-idWhat is the channel id of #incident-bridge?read
slack-opener-textWhat did the message that opened the incident thread in #incident-bridge say?read
slack-opener-tsWhat is the Slack timestamp of the message that opened the incident thread?read
slack-reply-countHow many replies does the incident thread in #incident-bridge carry?read
slack-opener-user-idWhich user id posted the message that opened the incident thread?read
slack-distinct-speakersHow many different people spoke in the incident thread in #incident-bridge?reason
slack-thread-lengthCounting the message that opened it, how many messages are in the incident thread?reason
slack-parent-leadsWhen the incident thread is fetched, which message comes first?read
slack-thread-runs-forwardThe incident thread must run forward in time, with nobody replying before it was opened. What is the timestamp of its last message?reason
slack-all-clear-textHow was the incident thread in #incident-bridge closed out?read
slack-all-clear-user-idWhich user id posted the last message in the incident thread?read
slack-opener-nameResolving the user id on the first message, who opened the incident thread in #incident-bridge?join
slack-all-clear-nameResolving the user id on the last message, who called the all clear on the incident?join

GitLab 6

ItemQuestionDifficulty
gl-merge-request-iidThe fix merged from hotfix/backfill-job-ooming. Which merge request iid carries that branch in olympus-labs/parthenon on the GitLab host?read
gl-merge-request-source-branchWhat source branch does merge request 13 in olympus-labs/parthenon carry?read
gl-merge-request-shaWhat head SHA does the GitLab host report for merge request 13 in olympus-labs/parthenon?read
gl-branch-existsDoes the GitLab host serve hotfix/backfill-job-ooming as a real branch of olympus-labs/parthenon?read
gl-branch-shaWhich commit does hotfix/backfill-job-ooming point at on the GitLab host?read
gl-sha-matches-githubTwo git hosts serve this repository. Do the GitHub pull request and the GitLab merge request for the same branch agree on the head SHA?join

Linear 10

ItemQuestionDifficulty
linear-identifierWhat identifier does the Linear host give the incident issue FATE-51?read
linear-titleWhat title does the Linear host give FATE-51?read
linear-estimateWhat estimate does the Linear host report for FATE-51?read
linear-stateWhat workflow state is FATE-51 in on the Linear host?read
linear-createdWhen was FATE-51 created, according to the Linear host?read
linear-completedWhen was FATE-51 completed, according to the Linear host?read
linear-branch-nameWhich git branch does the Linear host say belongs to FATE-51?read
linear-team-keyWhich team owns FATE-51 on the Linear host?read
linear-title-matches-jiraTwo trackers hold this incident. Does the title the Linear host serves for FATE-51 match the summary the Jira host serves?join
linear-close-matches-jiraJira resolved FATE-51 at 2026-06-19T16:21:17Z. Does the Linear host report the same close, to the second, in its own date dialect?join

06 / Downloads

Four files.

Version olympus-labs-g12-2026-09. The version string changes whenever the generation or the item set does, so a customer pins it the way they pin a host.

Next

Ask for more items.

This pack reads one incident told by 5 services. If the corner of the data set your agent works in is missing, or you want harder questions, say so and we will add them: tell us what you need. Items are added, never renumbered, so a score stays comparable across versions.

Agent tutorials · SandboxAPIs for agents · MCP setup · Versioning and pinning

All services