EmbodiedEvo: Self-Evolving Coding Agent For Physical Intelligence
Organizations: Navers Lab, Einsia.AI, Tsinghua University
Abstract
Coding agents can construct executable programs and revise them through feedback, offering a foundation for embodied control without target-task fine-tuning. Through a programmatic robot interface, the agent observes the scene, executes control programs, and adapts them to the resulting physical state, serving as the closed-loop policy. However, this within-episode adaptation does not automatically preserve experience across scenes. Our trajectory analysis shows that agents spend interaction and inference budgets establishing effective operations and identifying their preconditions, while fresh agents cannot reuse these discoveries. This motivates EmbodiedEvo, a self-evolving coding agent that distills physical feedback into reusable code Skills and diagnostic Lessons. Experience is acquired on one Playground scene per task, then frozen for independent agents in unseen scenes, without updating model weights. On RoboDojo-Sim, EmbodiedEvo achieves an average score of 44.48 and a success rate of 37.82%, surpassing all officially verified results. Paired tests show the largest gains on memory-dependent tasks and successful reuse of coordinated procedures, while fine contact control remains difficult. Experience from stronger models also improves weaker executors: Astra's experience raises Sol and Luna's success rates by 8.86 and 5.50 percentage points over no experience. Compared with raw interaction history, Skills and Lessons achieve comparable task performance at 53.0% lower execution cost.
Figures & tables
| Primitive | Function |
|---|---|
| get_instruction() | Returns the current task and goal. |
| get_observation() | Returns camera images and robot state without advancing physics. |
| step(action) | Executes a native action and returns the resulting observation, completion signal, and termination status. |
| reset() | Restores the same scene for another exploration attempt and renews its native action allowance. |
| Component | Role and access |
|---|---|
| instruction.md | Fixed task delegation, phase rules, and budgets. |
| primitives/primitives.md | Fixed documentation of the robot interface. |
| submission/solution.py | Editable Python source for the next control segment. |
| scripts/env.py | Fixed client for execution, status queries, and session completion. |
| observations/ | Host-written history of submitted source, observations, video, and execution logs. |
| scratch/ | Writable plans, calculations, and temporary analyses. |
| Model | Type | Average | Generalization | Precision | Long-horizon | Memory | Open |
|---|---|---|---|---|---|---|---|
| Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | ||
| GPT-6-Astra | Agent | 28.97 22.48 | 33.36 30.50 | 12.65 4.00 | 21.45 8.25 | 43.04 38.67 | 34.36 31.00 |
| InternW0- | WAM | 30.77 23.91 | 30.09 22.78 | 31.98 23.25 | 46.29 29.33 | 34.67 34.00 | 10.84 10.17 |
| Simate-beta | VLA | 33.95 27.96 | 35.09 27.95 | 34.35 26.92 | 57.84 43.42 | 33.33 33.00 | 9.12 8.50 |
| Awomo-0.5 | WAM | 35.34 29.64 | 30.31 23.84 | 39.65 33.50 | 40.36 26.75 | 42.27 41.22 | 24.09 22.92 |
| PhysicalRSI | Agent + VLA | 36.27 31.38 | 21.30 15.62 | 38.05 32.50 | 46.37 37.33 | 46.74 46.56 | 28.88 24.92 |
| Method | Input | Average | Generalization | Memory | Precision | Long-horizon | Open |
|---|---|---|---|---|---|---|---|
| Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | ||
| Astra | Task description | 14.77 8.50 | 3.19 0.00 | 12.67 10.00 | 11.38 5.00 | 18.12 0.00 | 28.50 27.50 |
| EmbodiedEvo (Astra) | Task description | 38.64 30.17 | 22.36 16.67 | 59.33 56.67 | 29.88 15.00 | 29.50 12.50 | 52.12 50.00 |
| Astra | Task description + wiki | 20.67 13.36 | 12.33 7.64 | 39.67 36.67 | 15.00 7.50 | 19.38 0.00 | 17.00 15.00 |
| EmbodiedEvo (Astra) | Task description + wiki | 42.42 35.08 | 36.15 31.25 | 70.33 66.67 | 23.12 12.50 | 33.75 20.00 | 48.75 45.00 |
| Task | Category | Astra | EmbodiedEvo (Astra) | SR (pp) | ||
|---|---|---|---|---|---|---|
| Score | SR (%) | Score | SR (%) | |||
| (1) Successful before evolution | ||||||
| Align blocks | Open | 60 | 60 | 80 | 80 | |
| Conveyor matching | Memory | 60 | 60 | 100 | 100 | |
| (2) Successful only after evolution | ||||||
| Stack blocks | Generalization | 10 | 0 | 100 | 100 | |
| Executor | Average | Generalization | Precision | Long-horizon | Memory | Open |
|---|---|---|---|---|---|---|
| Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | |
| No Experience (No Evolution) | ||||||
| Astra / xhigh | 14.77 8.50 | 3.19 0.00 | 11.38 5.00 | 18.12 0.00 | 12.67 10.00 | 28.50 27.50 |
| Astra / medium | 6.58 4.33 | 1.81 0.00 | 2.88 0.00 | 5.88 0.00 | 7.33 6.67 | 15.00 15.00 |
| Sol / xhigh | 4.10 3.17 | 0.56 0.00 | 3.00 2.50 | 3.12 0.00 | 3.33 3.33 | 10.50 10.00 |
| Luna / xhigh | 0.08 0.00 | 0.42 0.00 | 0.00 0.00 | 0.00 0.00 | 0.00 0.00 | 0.00 0.00 |
| Exploration | Observed progress and retained knowledge |
|---|---|
| Task outcome | No task success across 100 code executions. |
| Local progress | Execution 74: tracked grasp and 6 cm lift in 31 native actions. |
| Skills | Track a moving target through closure; monitor contact during transport. |
| Lessons | Anticipate conveyor motion; verify object retention after a short lift. |
| Test condition | Score / SR (%) |
| No experience | 0 / 0 |
| Experience | Score | SR (%) | Cost (USD) | Code executions | Native actions |
|---|---|---|---|---|---|
| No Experience | 14.77 | 8.50 | 4.058 | 22.3 | 723.0 |
| Raw History | 36.41 | 29.78 | 12.203 | 23.7 | 705.1 |
| Skills/Lessons | 38.64 | 30.17 | 5.732 | 29.0 | 722.6 |
Appendix figures & tables7 assets
Supplementary material from the paper’s appendix.
Appendix
| Task | Task description | Task description + wiki | ||
|---|---|---|---|---|
| Astra | EmbodiedEvo | Astra | EmbodiedEvo | |
| Generalization | 3.19 / 0.00 | 22.36 / 16.67 | 12.33 / 7.64 | 36.15 / 31.25 |
| arrange_largest_number | 3.75 / 0.00 | 13.75 / 0.00 | 8.33 / 0.00 | 49.17 / 41.67 |
| fold_clothes | 11.67 / 0.00 | 13.33 / 0.00 | 33.33 / 16.67 | 70.00 / 66.67 |
| hang_mugs | 0.00 / 0.00 | 10.00 / 0.00 | 0.00 / 0.00 | 8.75 / 0.00 |
| make_toast | 0.00 / 0.00 | 0.00 / 0.00 | 0.00 / 0.00 | 0.00 / 0.00 |
| Task / category | Score | SR (%) |
|---|---|---|
| Generalization | 34.12 | 29.67 |
| arrange_largest_number | 58.20 | 46.00 |
| fold_clothes | 66.80 | 60.00 |
| hang_mugs | 5.40 | 0.00 |
| make_toast | 1.50 | 0.00 |
| pack_objects_into_box | 20.30 | 4.00 |
| Target | Related source | Mismatched source | B | D | Related | Mismatched |
|---|---|---|---|---|---|---|
| Score SR (%) | Score SR (%) | Score SR (%) | Score SR (%) | |||
| stack bowls | stack blocks | swap blocks | 6.25 0.00 | 25.42 16.67 | 25.42 16.67 | 15.00 0.00 |
| stack blocks | stack bowls | swap T | 10.00 0.00 | 100.00 100.00 | 100.00 100.00 | 83.33 83.33 |
| insert tubes | plug in charger | classify objects | 4.00 0.00 | 36.00 0.00 | 60.00 40.00 | 4.00 0.00 |
| plug in charger | insert tubes | classify objects by language | 0.00 0.00 | 40.00 40.00 | 0.00 0.00 | 0.00 0.00 |
| fill pen holder | fill egg holder | pour liquid into cup | 15.00 0.00 | 5.00 0.00 | 2.00 0.00 | 17.00 0.00 |
| Task / layout | Key execution evidence |
|---|---|
| Tic-tac-toe / 27 | Astra first retains a ring at action 367 and ends with Score 50 at the 1,100-action limit. EmbodiedEvo includes rim_pick.py , retains a ring at action 38, and succeeds at action 919. First rings and arms differ. |
| Imitation sorting / 4 | Astra moves before the demonstration finishes and terminates at action 256 with Score 0; feedback does not identify the cause. EmbodiedEvo observes the new order through action 455 and succeeds at action 1,585. |
| Insert key / 44 | EmbodiedEvo’s receiver closes empty in execution 14 and remains unsecured through execution 21. Donor release reaches the 300-action limit with Score 15. Failure occurs during handover, before insertion. |