Blogs · Embodied First Exam

Public release

Embodied First Exam

Code agents have passed many exams in the digital world. What is their first exam to enter the physical world?

One line of code. tasks. benchmarks, robots.

  1. What can it connect, and what can it do?

    One command connects a coding agent to tasks ( tests) from benchmark suites, on robot arms, dexterous hands, humanoids, quadrupeds and musculoskeletal models.

  2. When it fails, is it thinking or moving?

    Every run is published with its full trace and a replay, so you can see where it went wrong. A hand-checked classification of the failures is planned (§05).

  3. How does a coding agent become an effective robot controller?

    We compare the three ways agents control a robot (write a program, send commands step by step, or train a model) under three settings, the hardest of which keeps the world moving while the agent thinks.

RoboPaint · Oil, The Starry Nightreference solution

RoboARC · Untie a knotreference solution

RoboDynamicExam · Launch, catch, reloadreference solution

Embodied Olympics - Fun · Catch and shootGPT-6 Astra · privileged

Embodied Olympics - Match · FencingClaude Opus 5.5 · wins 15:14

DexHandExam · Assemble a hamburgerreference solution

RoboEngineer · Weave between polesGPT-6 Astra · standard

Embodied Safety Exam · Set the table on a place matreference solution

iSpatialGym · Match a goal imageGPT-6 Astra · privileged

Figure 1. One task from each of the nine suites we built for the exam. Four clips are coding agents’ own solutions, written with only a plain-language goal, a command-line shell and the robot’s interface: the Embodied Olympics - Fun catch and shoot, where the H1-2 humanoid catches a chest pass between its palms and shoots it through the hoop; an Embodied Olympics - Match épée bout between two Unitree G1 humanoids, which Claude Opus 5.5 wins 15:14 against a scripted fencer; a RoboEngineer run in which a Go2 quadruped weaves past four poles on a velocity schedule fixed in advance, with no position feedback; and an iSpatialGym task in which a mobile two-armed robot, given only a picture of the goal, makes the scene match it. The other clips are reference solutions, which show that these tasks can be solved. All clips are from the exam’s media dataset.

01Motivation

Code agents now handle a wide range of software work. They resolve issues in real repositories1, complete hard tasks in the terminal2 and write efficient GPU kernels3. All of these exams, however, take place in the digital world. Robots remain largely outside the reach of code agents: a robot behavior today comes either from a policy trained on many demonstrations, such as a vision-language-action model4–6, or from a controller that an engineer writes, tunes and debugs for one robot and one task.

The second route is, to a large extent, software engineering. The engineer reads the interface of the robot, writes a controller, runs it, observes what happens and revises the code. Prior work has shown that language models can write short robot programs from instructions7; a code agent can go further and carry out the whole loop. If it succeeds, any robot that exposes a programming interface could acquire a new behavior from a plain-language instruction, with no new demonstrations and no engineer in the loop (Figure 2).

Today

Train a policy

Learns from many demonstrations. Good at the skills it was trained on, but a new task needs new data.

Today

An engineer writes a controller

Kinematics, waypoints, feedback loops and tuning, for one robot and one job.

This exam

A coding agent writes, runs and fixes one

The same engineering loop, run by an agent from a plain-language instruction.

Figure 2. Three ways to give a robot a new behavior. A trained policy needs new demonstrations for each new task, and an engineer writes a controller for one robot and one task; in this exam, a code agent writes, runs and fixes the controller from a plain-language instruction.

Whether code agents can do this remains an open question, and answering it requires more than simply testing them on pick-and-place tasks. Most robot benchmarks ask an arm to move objects on a table, whereas a robotics engineer also faces dynamic interaction, whole-body control of humanoids and quadrupeds, dexterous manipulation with tools, physical puzzles and long household activities (Figure 3).

Dynamic interaction

Catch a thrown object, return a ball, play a match against an opponent.

RoboDynamicExam · Embodied Olympics - Match
Locomotion and whole-body skills

Sprint, jump, dunk and backflip with a humanoid; walk and balance on four legs; control muscles instead of motors.

Embodied Olympics - Fun · HumanoidBench · MuJoCo Playground · MyoSuite
Puzzles and physical reasoning

Untie a knot, free a ring from a cage, pick up a ruler or a funnel when the task calls for one.

RoboARC · RoboWits · KinDER
Dexterous hands and tools

Rotate a cube in the fingers, swing a hammer, flip food with a spatula, assemble a hamburger.

DexHandExam · DexToolBench · DexJoCo
Long household activities

Make a pizza or set a table with a mobile robot in a full-size house.

BEHAVIOR-1K · RoboCasa365 · BiGym 2.0
Safety and judgment

Carry out harmless requests, refuse ones that would hurt someone, and explain why.

Embodied Safety Exam · ManiGuard
Figure 3. Some of the kinds of task in the exam, with suites that contain them. The tasks use robots of eight kinds: .

An answer also needs a common interface that runs any agent on any task, and a verifier that judges what physically happened in the simulator rather than what the agent reports. The Embodied First Exam is built to meet these requirements, and it serves as a first exam for code agents that are about to enter the physical world.

02Introduction

Every task in the exam is packaged the same way and runs through Harbor, so one command can evaluate any agent on any task. For each benchmark we integrate its simulation environment, including scenes and success checkers, and the exam turns them into tests. The agent takes a test from inside a sandboxed container, where its only interface is a command-line shell: it reads files, writes and runs code, and calls the robot through the interface of the setting. The figure shows how one test runs, and the list below walks through it.

Figure 4. How one test runs. Hover over a part for details, or click a control approach, a mode or the episode trajectory to see an example.
  1. Question. A test starts from a goal written in words, as you would explain the job to a person, with every convention the agent cannot guess (frames, units, the action layout, the time limit), and from a frozen scene. The scene is rebuilt bit for bit, its start state is checked before the agent begins, and both modes of a task start from the same scene.
  2. Model and harness. Any model can run in any harness, such as Codex or Claude Code. The harness runs unchanged and receives the goal as its prompt. It works in a sandboxed container through a command-line shell and can reach only its model’s API and the package registries, with web search off; the Embodied Olympics - Fun tasks are the exception, with open network access.
  3. The coding agent is the policy. Whatever the agent writes turns what the robot senses into actions. It can control the robot directly, sending commands and choosing the next one after it sees the result; write code that controls the robot, such as a planner or a feedback controller; or train a model, such as a reinforcement-learning policy, that controls it. The exam leaves the choice to the agent.
  4. Interface. How the agent’s code reaches the robot depends on the setting. In privileged mode the agent works inside the simulator; in standard mode it reaches the robot only through the robot’s API, and standard-realtime is the same with a clock that never stops. In both standard settings the agent cannot reset the episode by default, although a task’s author can allow a fixed number of resets. The three settings are defined below the list.
  5. Simulators. Each suite keeps its original simulation setup behind the same interface. The exam covers various simulators, including MuJoCo, Isaac Sim, OmniGibson (built on Isaac Sim), SAPIEN and Genesis, with different robot models running across them.
  6. Episode trajectory. Every episode is recorded step by step as a rollout: the full simulator state s, the robot’s observation o (camera images and joint readings) and the action a. What the agent itself can read depends on the setting: in privileged mode it reads the full state s, while in the two standard settings it sees only the observation o, as with a real robot. The verifier always works from the recorded state.
  7. Verifier. The verifier runs in its own sandbox with no network and sees only what was recorded. In standard mode it gives a verdict on the live episode; in privileged mode it replays the trajectory. The test scores 1 or 0, and the run’s steps, cost and video are logged.

Three ways to control the robot

Three settings

A task can be run in up to three settings, and each one is a separate test, scored on its own. The rest of this post uses these three names exactly as defined here.

Privilegedinside the simulatorStandardreal-robot rulesStandard-realtimeon a running clock
Reachesthe simulator directly, in the agent’s containerthe robot only, through its APIthe robot only, through its API
Seesthe full state, every object poseRGB, depth and joints; no object posesas in standard
Sendsa trajectory.npzaction chunks (T, dim)action chunks, often from a running program
Resetsunlimited0 by default; the task’s author can allow more0 by default; the task’s author can allow more
Clockplans offlinewaits for each commandkeeps running while the agent thinks
Gradedby a fresh replayon the live episodeon the live episode
Figure 5. The three settings. Most tasks have a privileged and a standard test. Standard-realtime is offered where timing matters, mostly for dynamic tasks with moving objects or opponents; some tasks have only a standard test. Each core task also has a default setting, which the leaderboard’s Core view counts: standard for tasks and standard-realtime for . Every rule is on the page how a test is graded.

Tasks and tests

The exam has tasks and tests from benchmark suites, using robots. A task is one fixed scene with one goal, and each of its settings is a test. Most suites are ports of widely used benchmarks (BEHAVIOR-1K, RoboCasa, LIBERO, RoboTwin 2.0, MuJoCo Playground, MetaWorld+ and others); we built the other nine for this exam (RoboPaint, RoboARC, RoboDynamicExam, Embodied Olympics - Fun, Embodied Olympics - Match, DexHandExam, RoboEngineer, Embodied Safety Exam and iSpatialGym). You can browse the suites or the tasks.

A task in this exam is far larger than a question in a language benchmark. It asks for a complete behavior, such as assembling a piece of furniture or playing a whole match, that combines perception, planning, control and recovery from mistakes, and each attempt gets an engineer's budget: from to of agent time, depending on the suite, and a container with 2 to 16 CPU cores and 6 to 40 GB of memory, with a GPU where the simulation backend or the task needs one. Many tasks in the same benchmark also test nearly the same skills, so a few hard tasks cover what a benchmark measures.

We therefore report results on a core set of tasks ( tests), the harder part of the exam. We use human judgment and an initial run with GPT-6 Luna to filter out easier tasks, and we keep every task that a benchmark’s authors asked us to keep. The other tasks stay in the exam and can be run with harbor run -d embodied-first-exam@all.

Keeping the grading honest

Reference solutions never enter the agent’s container, and we remove the original benchmarks’ solutions from the images. Doing nothing must score 0 on every task, and the reference solution must score 1 wherever one exists (a full reference solution for tasks, a partial one for ). Tasks without one, like most of BEHAVIOR-1K, rely on the original benchmark’s success checker. Before we add a benchmark, we tell an agent to try to pass without doing the task; if it succeeds anywhere, we hold the benchmark back until its verifier is fixed.

Two observations from this testing affect how the results should be read. First, models remember deleted solutions: Claude Opus 5.5 rewrote a deleted RoboTwin reference solution from memory, with 26 of its 28 lines identical to the original, and both Opus and GPT-6 Astra rebuilt a deleted HumanoidBench reward function with its original constants, so results on tasks built from public benchmarks may partly reflect memorization. Second, one harness offered tools that ran on the provider's servers, outside the container and its network rules, and agents found and used them; these tools are now turned off, and the gateway in front of the model forwards only model calls.

03Overall results

We evaluate agents on the core set, each a model in a harness at high reasoning effort: GPT-6 Astra in Codex, Claude Opus 5.5 in Claude Code and Gemini 4 Argon in the Antigravity CLI, together with three Flash-class models, Gemini 3.8 Flash in the Antigravity CLI, GLM 5.3 Flash in Claude Code and DeepSeek V4.1 Flash in the DeepSeek harness. A test counts as solved when the verifier returns 1 on the latest finished attempt of the agent, and a test without a result counts against the agent. We report four views: Core, which counts each of the core tasks once in its default setting, and one view for each setting over all of its core tests ( privileged, standard and standard-realtime). The core set is hard by design: easier tasks were filtered out by human judgment and an initial run with GPT-6 Luna.

There is a clear gap between the three strongest agents and the rest. In the Core view, the top three are , while the best Flash-class model reaches . . Findings 1 and 2 examine what is lost in standard and standard-realtime mode.
The lead of GPT-6 Astra is widest in .

Data as of . The approach labels in Finding 5 come from a random sample of attempts (snapshot of ), labelled by an agent that read the logs of each run and not yet checked by hand. Every clip in this post shows the run it names, and clicking it opens a step-by-step view of that run. The leaderboard lists the same results for every suite.

04Findings

Click a finding to open it. Each one shows the main numbers, a figure and one representative run, followed by a section you can expand with more evidence, more cases and caveats.

GPT-6 Astra, the strongest agent, solves only about a third of the standard and standard-realtime tests. In privileged mode it solves nearly every test that Claude Opus 5.5 or Gemini 4 Argon solves, but in standard mode those two solve dozens of tests that it fails.

  • The strongest agent, , solves of the tests in privileged mode but only in standard mode, so it fails of the standard tests. In standard-realtime it solves , .
  • For the other two strong agents, standard-realtime is harder than standard: Claude Opus 5.5 solves there against in standard mode, and Gemini 4 Argon against . Together, the three strongest agents solve of their standard attempts and of their standard-realtime attempts (Figure 9).
  • In privileged mode, GPT-6 Astra solves of the tests that Claude Opus 5.5 or Gemini 4 Argon solves.
  • In standard mode, Claude Opus 5.5 and Gemini 4 Argon solve tests that GPT-6 Astra fails. Between them, the three solve of the standard tests; GPT-6 Astra solves .
  • In standard-realtime, GPT-6 Astra again solves of the tests its rivals solve; they add that it fails.
Figure 9. The three strongest agents’ combined success rate in each setting.
Evidence, more cases and scope

Evidence

Even in privileged mode, the strongest agent did not finish a long assembly: on IKEA Stegesund, GPT-6 Astra took 40 minutes to drive one bolt and ran out of time on the second (the run is in Finding 3).

Across all three settings together, the three Flash-class models solve of their tests (counting each model’s tests separately), compared with for .

The drop is not limited to one benchmark: in benchmarks with at least 5 tests in both settings, solves a smaller share of the tests in standard mode than in privileged mode.

The leaderboard has every agent’s results for each suite and each trial.

In privileged mode, at least one of the three solves of the tests; GPT-6 Astra solves .

In standard mode, at least one of the three solves ; GPT-6 Astra solves .

Tests that only one of the three solves, by task type (a task can have several types). Of the privileged tests, are solved by GPT-6 Astra alone, mostly , and mostly in . Of the standard tests, are solved by Claude Opus 5.5 alone, mostly , and by Gemini 4 Argon alone, mostly . (For each agent we use the setting where it has the most such tests.)

The three Flash-class models add little: of the tests that none of the three strongest agents solves, they solve in privileged mode and in standard mode.

Interpretation (inferred)

  • Since the gap shows up across benchmarks, it is unlikely to come from one kind of task.
  • In privileged mode, with the full state and unlimited resets, GPT-6 Astra can do most of what the other two can. In standard mode, most tests defeat all three, and each solves some tests that the others fail.

Scope

  • One attempt per test, on a core set that leaves out easy tests by design.
  • The verifier alone decides pass or fail. Time limits differ by benchmark, from to .
  • There are only standard-realtime tests, so a single test shifts a standard-realtime success rate by about 2 percentage points.
  • With one attempt per test, we cannot yet tell whether these differences come from the models or from the luck of a single attempt; that needs repeated attempts.

For every agent, most tasks solved in privileged mode become failures when rerun in standard mode.

  • On the core tasks that have both a privileged and a standard test, each agent fails in standard mode between () and () of the tasks it solves in privileged mode. GPT-6 Astra, for example, solves of these tasks in privileged mode and only of those in standard mode.
  • Standard-realtime is harder still. On the tasks that have both a standard and a standard-realtime test, each of the three strongest agents solves fewer in standard-realtime (GPT-6 Astra tasks, Claude Opus 5.5 , Gemini 4 Argon ), though there are too few tasks to generalize from.
Evidence, more cases and scope

Evidence

None of the six agents solves , compared with and tests.

In privileged mode, an agent that breaks a rule can reset and try again; in standard mode, one broken rule can be a point of no return. GPT-6 Astra on ManiGuard’s dusty transfer task shows both:

In privileged mode, Claude Opus 5.5 solved the Bringing in wood task that it failed above in standard mode:

Gemini 4 Argon on Embodied Olympics - Fun’s dribble slalom shows the same gap:

Interpretation (inferred)

  • In privileged mode, the agent can read the state and reset for free, so a mistake can be undone. In standard mode the episode is graded live, and a single slip can end it.

Scope

  • Each agent’s row covers all core tasks that have both a privileged and a standard test.
  • Time limits differ by benchmark.
  • There are standard-realtime tests: .

In both privileged and standard mode, many of the benchmarks that the strongest agents fail most often involve tool use and assembly, balance and rapid reactions, or long household chores, although hard tasks are not limited to these kinds.

  • In standard mode, in benchmarks (counting benchmarks with at least five tests), at least half of the tests are solved by none of the three strongest agents.
  • In privileged mode, that is true of benchmarks: . The next two, , .
  • Standard-realtime has too few tests per benchmark for the figure. In the benchmarks with at least five, the share of tests that none of the three solves is .
Evidence, more cases and scope

Evidence

One case from each benchmark:

MyoSuite: 45 musclesMyoSuite · Hammer useGPT-6 Astra · privileged · failedIt optimized commands for 45 muscles against the simulator for 90 minutes. Not until minute 72 did a candidate keep the hammer in hand the whole way, and the final answer matched the reference motion in 40 of 99 steps, off by up to 0.187 m. BEHAVIOR-1K: a long household taskBEHAVIOR-1K · Setting the tableGPT-6 Astra · privileged · failed · 4× speedIt spent 62 minutes putting two plates on the dining table. At minute 64, on the way to the fridge, it hit the kitchen island and tipped over; the episode ended with a score of 0.25. DexToolBench: a tool in the handDexToolBench · Short screwdriver, spin verticalClaude Opus 5.5 · standard · failedIt estimated the screwdriver’s axis from the point cloud but could not tell how far the handle had rolled about that axis. It used up its 20 allowed resets in 27 minutes and reached 0 of 76 goals. IKEA assembly: one bolt, 40 minutesRoboARC · IKEA StegesundGPT-6 Astra · privileged · failedWith the full state, it pressed the halves together, slid in the shelf and drove the first bolt. But its hex key turned only 120° per insertion, so one bolt took 40 minutes, and at the three-hour limit the second bolt was still 3.7 mm short. None of the three strongest agents solved this task. RoboDojo: a long sequenceRoboDojo · Insert keyClaude Opus 5.5 · standard · failed · 4× speedIt located the key and the lock from depth images but dropped the key at least nine times during hand-overs and large joint moves. Its closest attempt at insertion, at minute 36, was about 9 mm off and hit the face of the lock. RoboDynamicExam: fast reactionsRoboDynamicExam · Toss, recatch, deliverGPT-6 Astra · standard · failedIt caught the ball using depth images, but its first episodes ended early, one when the cup grazed a moving box, and its 3 allowed resets were gone. In the last episode it caught and tossed the ball, but on the second catch, at minute 14, the ball’s contact with the tilted cup was flagged as a limit violation. RoboPaint: millimeter strokesRoboPaint · Running script “yong”GPT-6 Astra · standard · failedWith no resets available, it calibrated stroke width on a practice sheet, wrote five strokes and then retouched in one long stroke for 38 minutes. Overlap (0.856) and edge score passed, but that long stroke took the inked path to 2,048 mm against a 1,450 mm limit, and one of nine regions was only 0.657 covered against the required 0.80. RoboARC: reasoning before contactRoboARC · Rope threadingClaude Opus 5.5 · standard · failedIt mapped the wall, its holes and the coiled rope from depth point clouds, but the rope slipped from the gripper whenever it turned the wrist, dragged sideways or lifted and moved. It threaded none of the six holes and stopped at minute 83, with about 95 minutes left.

Interpretation (inferred)

  • The difficulty lies in the control itself: many joints or muscles must move together, and a small error breaks contact. In standard mode the agent must also estimate poses from camera images and depth first, with no reset to fall back on.
  • In precise manipulation and assembly, a tool’s pose in the hand, a millimeter alignment or a brush stroke is hard to judge from cameras alone. In balance and fast dynamics, one fall or one wrong touch often ends the test, with few chances to retry. In long multi-step tasks, one slip partway through often decides the outcome. In the reasoning tasks, the agent must work out how the parts fit together or come apart before the precise contact even starts.

Scope

  • A benchmark counts as hard when at least half of its tests are solved by none of the three; only benchmarks with at least 5 tests in the setting are counted. On the site the IKEA assembly tasks belong to RoboARC; here they are counted separately.
  • The core set removed easy tests and tests solved during screening, more from some benchmarks than from others, so per-benchmark rates partly reflect that selection.
  • The groups, and the reasons given for them, follow what each benchmark’s own page says makes it hard; time limits differ by benchmark.

Agents perform best when motions can be planned in advance, privileged access allows unrestricted resets and retries, or task rules are explicitly specified.

  • We call a benchmark easy when the three strongest agents’ mean success rate on it is high: 70% or more in privileged mode, 60% or more in standard mode. Each test counts once per agent (agent-attempts).
  • In privileged mode, benchmarks reach a mean success rate of 70% or more: .
  • In standard mode, . In standard-realtime, no benchmark with at least five tests comes close; the best is .
Evidence, more cases and scope

Evidence

These rates are on the core set, which already leaves out the easier tests. On those left-out tests, the three strongest agents’ mean success rate is in privileged mode and in standard mode.

One case from each benchmark:

ManiGuard: done in 26 minutesManiGuard · Dusty transferGemini 4 Argon · privileged · solvedWorking in a copy of the simulator that it kept running, it wiped 18 dust particles from the box, then tilted the tray so the potato rolled in without being touched. It finished at minute 26, and two fresh replays passed. RoboDynamicExam: worked out in advanceRoboDynamicExam · Toss, recatch, deliverClaude Opus 5.5 · privileged · solvedUsing the Jacobian, it worked out that the launch point could accelerate downward at only about 10.5–12 m/s², chose its toss to fit, and searched for the step at which to switch. It saved the trajectory at minute 14, and three fresh replays succeeded. RoboPaint: the brush rebuiltRoboPaint · Cursive “zhen”GPT-6 Astra · privileged · solvedIt read how the brush model draws a stroke, wrote its own brush renderer in C++ and fitted three strokes. The first execution passed every check, and it submitted after four minutes. BiGym 2.0: read the collidersBiGym 2.0 · Close the dishwasherGemini 4 Argon · privileged · solvedIt read the dishwasher’s code and collision shapes, pushed both racks in, then crouched, hooked the door’s front edge and swung it shut along an arc. The 693-step answer passed two independent replays at minute 32. RoboWits: tip it outRoboWits · Retrieve cubeClaude Opus 5.5 · privileged · solvedIt gripped the container by its side, lifted it over the target and tilted it to about 135° so the cube slid out. The landing spot was sensitive to the path, so it tried six pour positions and kept the steadiest; fresh replays passed at minute 13. RoboCasa365: step by step with IKRoboCasa365 · Microwave, defrost meatClaude Opus 5.5 · privileged · solvedUsing Jacobian inverse kinematics and closed-loop control of the base, it took the box out of the freezer, put it in the microwave, closed the door and pressed start. A fresh replay passed at minute 46.

Interpretation (inferred)

  • Each of the easier benchmarks in privileged mode offers one of three things. Some give an exact state, so the agent can compute the motion in advance and then execute it (RoboDynamicExam, RoboCasa365, MuJoCo Playground). In some, unlimited resets let the agent check its answer against the score and retry before it submits (RoboWits, RoboPaint, BiGym 2.0). ManiGuard spells out its rules in the task, so the agent can check each step against them.
  • These benchmarks also mostly have short tasks with clear goals. Two of them, RoboDynamicExam and RoboPaint, drop in standard mode to and (Finding 3).

Scope

  • Mean success rate = the three agents’ solved tests ÷ (3 × the benchmark’s tests); only benchmarks with at least 5 tests. With 5 or 6 tests, a single test shifts a benchmark’s rate by 17–20 percentage points.
  • The core set removed easy tests and tests solved during screening, more from some benchmarks than from others, so per-benchmark rates partly reflect that selection.

Agents primarily write robot-control programs in privileged mode, steer the robot step by step in standard mode, and write closed-loop controllers in standard-realtime.

  • Agents control the robot in one of three ways: they write a program that moves it (code to control), send it commands themselves one segment at a time (direct control), or first train a model that then controls it. The figure also splits programs into three kinds and counts attempts that mixed approaches or never settled on one.
  • In an agent-labeled sample (not yet checked by hand), the agent wrote a program in of privileged attempts and sent commands step by step in of standard attempts. In standard-realtime, of attempts used a program, and a closed-loop one that reads the robot’s state as it runs. Training a model is rare: attempts.
Evidence, more cases and scope

Evidence

Each sampled attempt is counted once, by the approach that produced its graded answer. The privileged programs were . When the setting changes, so does the approach: in standard mode, the same agent on the same glass jar switched to direct control and looked at the point cloud before each segment (the run is in Finding 1). GPT-6 Astra did the same on RoboTwin:

In standard-realtime, the agent writes a program to play and lets it run:

Scope

  • The counts are from a random sample of about a third of the attempts ( analyzed, snapshot of ), labeled by an agent from the run logs and not yet checked by hand.

05Future work

The exam currently reports whether an attempt passed, not why it failed. We plan to label every failed attempt with a single cause: the agent misread the task, the grasp missed, the robot went out of control, or the agent declared success before the goal was met. Each label will be checked by a person against the trace and the replay, so that statements such as the one in Finding 3 can rest on counted causes rather than on the suites in which failures occur.

Each agent currently makes one attempt per test. Averaged over hundreds of tests, this is enough to rank agents, but a single test can still go either way. Running every core test several times will separate failures that an agent repeats from failures that come from one unlucky run, and will put confidence intervals on the comparisons in Findings 1 and 2.

Most agents in this post pair a model with its maker's own harness: GPT-6 Astra runs in Codex, Claude Opus 5.5 in Claude Code and the Gemini models in the Antigravity CLI. The exam runs any model in any harness, so the same model can also be tested in several harnesses, for example an open-weight model in Claude Code and in the harness of its maker. Such comparisons would separate what the harness contributes, through its tools, its handling of context and its decision of when to stop, from what the model contributes, and we plan to add them to the results.

Only core tests run in the standard-realtime setting, yet this is the setting in which every agent does worst. We will add more tasks in which the world keeps moving, and study whether agents notice when an attempt goes wrong and recover from it when the simulator can neither pause nor reset.

Finally, the standard setting gives the agent only what a real robot provides: camera images, depth, joint readings and a control interface. The same tests can therefore run on physical hardware, and we plan to evaluate agents on real robots under the standard rules.

Anyone can take part. A single command, harbor run -d embodied-first-exam -a <harness> -m <model>, evaluates a new model or harness on the core set; the code is in the exam repository. New tasks and whole benchmarks are welcome (see how to contribute), every run can be replayed step by step on the runs page, and labs with real robots can reach us on Discord.

Limitations

Each result belongs to a model in a particular harness, so the way the harness uses tools, manages context and decides when to stop is part of what we measure. Every test has a single attempt, as discussed above. The core set leaves out tests that we judged easy and tests that an early screening run solved, so its success rates are lower than those of the full exam, by an amount that differs from suite to suite. The approach labels in Finding 5 come from a sample of attempts labelled by an agent and not yet checked by hand.

References

  1. C. E. Jimenez, J. Yang, A. Wettig, S. Yao, K. Pei, O. Press and K. Narasimhan. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? ICLR 2024.
  2. M. A. Merrill, A. G. Shaw, et al. Terminal-Bench: Benchmarking Agents on Hard, Realistic Tasks in Command Line Interfaces ICLR 2026.
  3. A. Ouyang, S. Guo, S. Arora, A. L. Zhang, W. Hu, C. Ré and A. Mirhoseini. KernelBench: Can LLMs Write Efficient GPU Kernels? ICML 2025.
  4. A. Brohan et al. RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control CoRL 2023.
  5. M. J. Kim et al. OpenVLA: An Open-Source Vision-Language-Action Model CoRL 2024.
  6. K. Black et al. π0: A Vision-Language-Action Flow Model for General Robot Control arXiv 2024.
  7. J. Liang, W. Huang, F. Xia, P. Xu, K. Hausman, B. Ichter, P. Florence and A. Zeng. Code as Policies: Language Model Programs for Embodied Control ICRA 2023.

Data and citation

Tasks, results and agent runs are on this site (tasks, leaderboard, runs); videos and run records are in the media dataset.

@misc{embodiedfirstexam2026,
  title  = {Embodied First Exam},
  author = {Embodied First Exam Team},
  year   = {2026},
  url    = {https://www.embodied-first-exam.ai}
}