What Stops Recursive Self-Improvement in Robotics? Lessons from 123 Rounds of Agentic Skill Discovery
Organizations: National University of Singapore
Abstract
Can a robot improve itself the way coding agents now improve software? We built an agentic system to find out. It watches a robot fail, works out which capability is missing, writes new skills or finds and installs external models, tests every change in simulation, and repeats, with no human writing robot code. We ran it for 123 improvement rounds on household manipulation tasks. This report describes what we learned. The good news is that the agent can discover capabilities on its own: noticing that its targets were out of view, it asked for an active-viewing model, debugged it, and deployed a working search skill. The bad news is that its improvements did not add up. Changes kept passing their tests, yet the target task, putting condiments on the top shelf of a fridge, never succeeded. We found that the agent was rarely the bottleneck. Three things around it were. First, chained perception modules do not understand relations. Segmenters such as SAM 3 find shelves but not "the top shelf", so the agent filled the gap with ever more geometric rules that never converged, when what it needed was a different kind of model. Second, skill chains lock learning onto the first step. Long tasks mostly fail early, so evidence and fixes pile up there, and later skills are rarely reached, tested, or improved. Third, what the agent learns is decided by the harness. The agent optimized exactly what the evaluator measured, including where it was wrong, and weak tests and misleading memory turned activity into a standstill. We distill these lessons into concrete recommendations for building robot systems that improve themselves, each paired with an experiment that could prove it wrong.
Figures & tables
| Rounds 1–75 | gpt-5.6-sol , maximum reasoning effort |
|---|---|
| Rounds 76–84 | gpt-6-astra , low reasoning effort |
| Rounds 85–123 | gpt-6-astra , medium reasoning effort |
| Interface | Codex CLI, one session per agent task, in a read-only, capability-dropped container; from round 74 the run repository and held-out task are not visible |
| Orchestrator | Task description, skill catalog with observed usage, its best earlier programs; up to 25 min per program |
| Proposer | Failure table, evaluator diagnoses, execution traces and diffs of earlier attempts, camera keyframes of each failed step ; up to 3 attempts per problem, 60 min each |
| Research agent | The request and recorded failing inputs; finds, installs, wraps and tests an external model |
| Front | Repr. | Expr. | Resol. | What happened |
|---|---|---|---|---|
| Target outside every view (active search) | ✓ | ✓ | Once the evaluator reported visibility, the agent requested an active-viewing model, repaired it, wrapped it in a look-around skill, and the failure disappeared from deployment (§ 3 ). | |
| “The top shelf” (relational region) | ✗ | ✗ | No module represents the relation; the agent encodes it as geometry fit to two recorded states. The skill grows without converging (§ 5 ). | |
| Grasp retention | ✗ | ✓ | ✗ | Motion faults reported as grasp faults; fresh tests rarely reach the grasp. Real local wins never reach the task (§ 6 ). |
| Reachability | ✗ | ✓ | ✓ | A spherical evaluator and a misdescribed actuator; the agent optimizes the evaluator exactly (§ 7 ). |
| Requested models | ✗ | ✓ | ✗ | Requests silently dropped and remembered as failed; registered models never called (§ 7 ). |
| Implication | Condition | Falsifying experiment |
|---|---|---|
| D1 Attribute by capability | Repr. | Re-label the recorded archive with capability-based attribution; count gaps that move to a different family, and compare proposal success on relabelled vs. original gaps. |
| D2 Measured embodiment | Repr. | Run the loop with declared vs. probed actuator descriptions; compare how often candidates hit evaluator boundaries (e.g. values piling at an advertised constant). |
| D4 Reason, then verify | Expr. | Replace only the region grounder in a frozen library; measure region success and chain depth on new seeds and new kitchen layouts. |
| D5 Model-class escalation | Expr. | Repair-only proposer vs. proposer with an escalation policy at equal budget; rounds to the first fresh-state win on a relational front. |
| D6 Chain in the substrate | Expr. | Fixed programs vs. gated chain edits; per-step reach and conditional reliability, and task success. |
| D7 States past the frontier | Resol. | Task-start test states vs. states reset to the changed step; fraction of evaluable pairs and detection rate of known-good changes. |
Appendix figures & tables7 assets
Supplementary material from the paper’s appendix.
Appendix
| Rd | Outcome | Problems worked on | Proposals | Accepted skill changes | Models | Harness problems found |
|---|---|---|---|---|---|---|
| 1 | F 0/4 | find obj: wrong object | 1 att.; rej. replay 1 | – | – | – |
| 2 | F 0/4 | find obj: no task object near point | 2 att.; rej. replay 2 | – | – | target_not_in_view attributed on visibility |
| 3 | F 0/4 | find obj: no task object near point | 2 att.; rej. replay 2 | – | – | effect packs visible through worker wrappers |
| 4 | F 0/4 | find obj: target not in view | 2 att.; 1 req.; rej. replay 1 | – | 1 not reg. | agent-extensible provider kinds |
| 5 | F 0/4 | find obj: target not in view | 2 att.; 1 req.; rej. replay 1 | – | target_free_active_view_base_placement | – |
| 6 | F 0/4 | find region: wrong fixture | 2 att.; rej. replay 1, fresh 1 | – | – | – |
| Claim | Measurement |
|---|---|
| Target task never completed | Fridge 0/486; Cabinet 0/256; Sink 14/230, of which 9 had failed intermediate steps |
| Activity | 57 accepted library changes (51 perception); 86 provider registrations over 20 identities; 847 proposal attempts |
| Region grounding is the dominant first failure | First failed effect in 132/224 Fridge and 113/232 Cabinet rollouts (three-task phase); wrong_region in all 62 late rollouts of fridge seeds 68, 70, 71 |
| Semantic displacement | Region skill: 3,056 lines, 33 thresholds; composed localizer: 5,032 lines, 48 thresholds; 27 attempts on the two-state fridge gap rescued seed 69 in every trial and seed 68 in none |
| Visibility entanglement | Top-shelf occupant pixels at the region block’s start: about 3,000 / 1,273 / 292 / 45 on seeds 68 / 71 / 70 / 69 |
| VLM feasibility | Qwen2.5-VL 7B placed “the top shelf” and “the shelf below” correctly in 4/4 recorded head views, about 1 s per query |
| Rounds | What changed | Rollouts | Completed | Task successes | Accepted changes |
|---|---|---|---|---|---|
| 1–59 | Fridge task only; discovery | 243 | 237 | 0 | 33 |
| 60–65 | Cabinet task added | 49 | 49 | 0 | 8 |
| 66–102 | Sink task added; harness repairs | 448 | 434 | 13 | 14 |
| 103–110 | Tests and memory repaired | 97 | 97 | 1 | 1 |
| 111–118 | Lost requests recovered; move to new machine | 96 | 95 | 0 | 1 |
| 119–123 | After the round-118 grasp change | 60 | 60 | 0 | 0 |
| Model | First registered | Later rollouts | Calls | Rollouts with calls |
| target_free_active_view_base_placement | 5 | 973 | 520 | 295 |
| equivariant_grid_base_placement | 14 | 935 | 185 | 110 |
| target_graspgen_6dof | 18 | 919 | 316 | 316 |
| relational_rgbd_localizer | 19 | 915 | 1863 | 867 |
| mplib_whole_body_goalset | 21 | 907 | 189 | 189 |
| mplib_confined_motion | 23 | 899 | 51 | 45 |
| Task | Scene seed | Steps passed | First failed step | Diagnosis |
|---|---|---|---|---|
| Fridge | 68 | 0 | fixture_region_localized | wrong_region |
| 69 | 3 | retained | no_grasp_contact | |
| 70 | 0 | fixture_region_localized | wrong_region | |
| 71 | 0 | fixture_region_localized | wrong_region | |
| Cabinet | 68 | 3 | retained | no_grasp_contact |
| 69 | 1 | fixture_region_localized | wrong_fixture |
Self-Improving Agents
Self-improving agents use experience and feedback to update their models, memories, skills, or workflows for better future task performance.
See all 171 papers