MobiAgent: Dual-Loop Recursive Policy Self-Improvement for Long-Horizon Mobile Manipulation
Organizations: The University of Hong Kong · Astribot · Southern University of Science and Technology
Abstract
Long-horizon mobile manipulation presents significant challenges due to compounding execution errors and capacity interference between locomotion and arm control. While recent Vision-Language-Action models excel at short-horizon tasks, they lack the hierarchical reasoning required for multi-stage objectives. Furthermore, existing hierarchical agents suffer from rigid sub-task mapping, inflexible replanning, and a lack of continuous learning. To address these limitations, we introduce MobiAgent, a dual-loop agentic framework that bridges robust deployment execution and recursive policy self-improvement. During deployment, the Inner Loop decouples high-level reasoning from low-level control through highly composable atomic skills. It employs Vision-Language models for receding-horizon planning and visual reflection, dynamically composing skills to ensure robust error recovery. These skills are executed by specialized flow-matching experts that share a unified VLM backbone, maximizing reusability while mitigating capacity interference. Concurrently, the Outer Loop drives automated lifelong learning by autonomously segmenting and verifying deployment rollouts, clustering them to discover atomic skills, and continuously fine-tuning the skill library without human annotations. Evaluations on RoboCasa, BEHAVIOR-1K, and real-world tasks demonstrate the effectiveness of MobiAgent. It outperforms -TA by 22.5 percentage points on BEHAVIOR-1K and enables robust recovery from execution failures. Through autonomous data recycling, success improves from 7.50% to 27.50% on RoboCasa and from 32.5% to 57.5% on Astribot S1.
Figures & tables
| Method | Baselines | MobiAgent | ||||||
|---|---|---|---|---|---|---|---|---|
| CaP-X [ 4 ] | [ 36 ] (R0) | R1 | R2 | R3 | R4 | R5 | R6 | |
| Success Rate (%) | 5.00 | 7.50 | 18.75 | 21.25 | 27.50 | 25.00 | 27.50 | 26.25 |
| Method | push-radio | dispose-trash | stack-storage | fetch-beer | Mean |
|---|---|---|---|---|---|
| -TA [ 16 ] | 60 | 40 | 60 | 10 | 42.5 |
| MobiAgent (Ours) | 70 | 60 | 70 | 60 | 65.0 |
| Method / Round | trash-garbage | trash-bottle | trash-can | pour-blue | Mean |
|---|---|---|---|---|---|
| [ 36 ] | 10.0 | 20.0 | 10.0 | 0.0 | 10.0 |
| MobiAgent R1 (Bootstrap) | 40.0 | 50.0 | 20.0 | 20.0 | 32.5 |
| MobiAgent R2 | 40.0 | 60.0 | 30.0 | 30.0 | 40.0 |
| MobiAgent R3 | 50.0 | 60.0 | 70.0 | 50.0 | 57.5 |
| Method | push-radio | dispose-trash | stack-storage | fetch-beer | Mean |
|---|---|---|---|---|---|
| Fixed task-specific sub-tasks (w/o Planner) | 50 | 0 | 0 | 30 | 20.0 |
| Single shared action head | 40 | 40 | 50 | 40 | 42.5 |
| w/o Reflection Critic | 30 | 10 | 0 | 0 | 10.0 |
| w/o Global Replanning | 70 | 40 | 30 | 20 | 40.0 |
| MobiAgent (Full) | 70 | 60 | 70 | 60 | 65.0 |
Appendix figures & tables21 assets
Supplementary material from the paper’s appendix.
Appendix
| Agent | Model |
|---|---|
| Task Planner | GPT-5.4 |
| Reflection Critic | GPT-5.4 |
| Data Curator (segmentation) | Gemini-3.1-Pro |
| Data Curator (verification) | GPT-5.4 |
| Skill Generator (aggregation) | GPT-5.4 |
| Skill Trainer | GPT-5.4 |
| Task ID | Task name | Instruction |
|---|---|---|
| task-0000 | push-radio | “Turn on the radio on the coffee table.” |
| task-0001 | dispose-trash | “Put the three cans of soda from the living room inside the trash can in the kitchen.” |
| task-0016 | stack-storage | “Move the two storage containers from the living room to the garage. In the garage, place one container on the floor and stack the other container on top of it (either order is fine).” |
| task-0017 | fetch-beer | “Bring two beer bottles from the refrigerator to the coffee table, then close the refrigerator.” |
| Task | Subtask Sequence (verbatim) |
|---|---|
| push-radio | 1. move to radio 2. pick up radio from coffee table 3. press radio 4. place radio on coffee table |
| dispose-trash | 1. move to trash can 2. pick up trash can from floor 3. move to can of soda 4. pick up can of soda from floor 5. place can of soda in trash can 6. move to can of soda 7. pick up can of soda from floor 8. place can of soda in trash can 9. move to can of soda 10. pick up can of soda from floor 11. place can of soda in trash can 12. place trash can on floor |
| stack-storage | 1. move to door 2. open door 3. move to storage container 4. pick up storage container from floor 5. move to floor 6. place storage container on floor 7. move to storage container 8. pick up storage container from floor 9. move to floor 10. place storage container on storage container |
| fetch-beer | 1. move to refrigerator 2. open refrigerator 3. pick up beer bottles from refrigerator 4. move to coffee table 5. place beer bottles on coffee table 6. move to refrigerator 7. close refrigerator |
| Setting | Simulation |
|---|---|
| Precision | bfloat16 |
| Batch size | 480 |
| Training steps | 50,000 |
| Warmup steps | 1,000 |
| Learning rate |
| Task ID | Prompt | Subtask Sequence (verbatim) |
|---|---|---|
| trash-garbage | Pick up the garbage and place it in the trash can. | 1. move to the garbage 2. pick up the garbage 3. move to the trash can while carrying the garbage 4. place the garbage in the trash can |
| trash-bottle | Pick up the bottle and place it in the trash can. | 1. move to the bottle 2. pick up the bottle 3. move to the trash can while carrying the bottle 4. place the bottle in the trash can |
| trash-can | Pick up the can and place it in the trash can. | 1. move to the can 2. pick up the can 3. move to the trash can while carrying the can 4. place the can in the trash can |
| pour-blue | Pick up the bottle containing blue particles and pour the blue particles into the cup. | 1. move to the table 2. pick up the bottle containing blue particles 3. pour the blue particles into the cup 4. place the bottle on the table |
| Setting | Real robot (S1) |
|---|---|
| Precision | bfloat16 |
| Batch size | 240 |
| Training steps | 20,000 |
| Warmup steps | 100 |
| Learning rate |
| -TA | MobiAgent (ours) | |||
|---|---|---|---|---|
| Task | Total Runtime | Action Exec. | API | Total Runtime |
| push-radio | 60 | 81 | 98 | 179 |
| dispose-trash | 249 | 334 | 381 | 715 |
| stack-storage | 525 | 707 | 747 | 1454 |
| fetch-beer | 538 | 764 | 792 | 1556 |
| Atomic Skill | Simulation SR (%) | Real SR (%) |
|---|---|---|
| move_to | 100.00 | 100.00 |
| pick_up | 88.57 | 70.00 |
| place_in | 75.00 | 94.73 |
| place_on | 100.00 | 100.00 |
| open | 86.67 | – |
| close | 100.00 | – |
| CaP-X [ 4 ] | MobiAgent (ours) | |||
|---|---|---|---|---|
| Task | Navigation SR | Task SR | Navigation SR | Task SR |
| push-radio | 100 | 20 | 100 | 90 |
| dispose-trash | 90 | 80 | 100 | 100 |
| Task | RoboClaw subtask prompts (verbatim) |
|---|---|
| push-radio (2) | 1. Move both arms clear, visually locate the radio on the coffee table in the living room, and position yourself so one gripper can safely reach the radio power control. 2. Use the most suitable gripper to press or toggle the radio’s power control on the coffee table until the radio turns on. |
| dispose-trash (3) | 1. Pick up one soda can from the living room, move to the kitchen trash can, and drop the can into the trash. Finish with empty grippers and do not pick a second can in the same run. 2. Pick up one remaining soda can from the living room, move to the kitchen trash can, and drop the can into the trash. Finish with empty grippers and do not pick another can in the same run. 3. Pick up the last remaining soda can from the living room, move to the kitchen trash can, and drop the can into the trash. Finish with empty grippers. |
| stack-storage (2) | 1. Pick up one storage box in the living room, carry or move it to the garage, and place it stably on the garage floor where it can serve as the base for stacking. 2. Pick up the remaining storage box in the living room, move it to the garage, align it above the first box already on the garage floor, and place it stably on top. |
| fetch-beer (5) | 1. Open the fridge door, grasp one bottle of beer from inside the fridge, and take it out securely. 2. Place the beer bottle you are holding onto the coffee table in a stable upright position. 3. Return to the open fridge, grasp a second bottle of beer from inside the fridge, and take it out securely. 4. Place the second beer bottle onto the coffee table in a stable upright position near the first bottle. 5. Close the fridge door fully without disturbing the bottles on the coffee table. |
| Execution Phase | RoboClaw | MobiAgent (ours) |
|---|---|---|
| Task Initialization | Generates the complete, ordered plan upfront. | Invokes reactive Task Planner for the immediate subtask (full sketch optional). |
| Normal Execution | Executes the fixed plan sequentially without deviation. | Re-queries the Task Planner at each step; continuously adapts to observations. |
| Error Recovery | Triggers conditional re-planning via an explicit replan action. | Inherently recovers by re-evaluating the current state at the next step. |
| RoboClaw | MobiAgent (ours) | |||||||
| Task | v0 | v1 | v2 | v0 | v1 | v2 | ||
| push-radio | 3 | 2 | 3 | 1 | 4 | 4 | 4 | 0 |
| dispose-trash | 6 | 12 | 3 | 9 | 12 | 12 | 12 | 0 |
| stack-storage | 4 | 2 | 2 | 2 | 10 | 9 | 10 | 1 |
| fetch-beer | 5 | 4 | 4 | 1 | 7 | 7 | 10 | 3 |
| Mean | 3.25 | 1.00 | ||||||
| Task | Variant | Instruction |
|---|---|---|
| push-radio | v0 | Turn on the radio sitting on the coffee table in the living room. |
| v1 | Switch on the radio that is on the living-room coffee table. | |
| v2 | Power up the radio resting on the coffee table in the living room. | |
| dispose-trash | v0 | There are three cans of soda in the living room. Pick up each can and throw it into the trash can in the kitchen, one at a time, until all three cans are in the kitchen trash can. |
| v1 | Take the three soda cans from the living room and drop them, one by one, into the kitchen trash can. | |
| v2 | Clear all three soda cans out of the living room by putting each one into the kitchen bin, handling them one at a time. |
| Variant | RoboClaw | MobiAgent (ours) |
|---|---|---|
| push-radio ( task-0000 ) | ||
| v0 | 1. Move to the living room coffee table and position yourself within reach of the radio while keeping a safe manipulation distance. 2. Visually align an arm and gripper with the radio’s power button or power switch so the control can be pressed or toggled cleanly without knocking the radio over. 3. Press or toggle the radio’s power control once to turn the radio on, then release contact without moving the radio significantly. | 1. move to radio 2. pick up radio from coffee table 3. press radio 4. place radio on coffee table |
| v1 | 1. Find the radio on the living-room coffee table, identify its power button or switch, and move into a stable pre-press position with a clear approach to the control without activating it yet. 2. Use a careful precise motion to press or toggle the radio’s power control on the living-room coffee table and turn the radio on. Stop after the control has been actuated once clearly. | 1. move to radio 2. pick up radio from living-room coffee table 3. press radio 4. place radio on living-room coffee table |
| v2 | 1. Approach the radio on the coffee table in the living room and position your gripper in front of its power control with a stable, collision-free pose ready to actuate it. 2. Actuate the radio’s power control on the coffee table to turn the radio on. Press the power button firmly once or rotate the power knob only as much as needed to switch the device from off to on, then release safely. 3. Hold position briefly, observe the radio after actuation, and make any minimal corrective re-press only if needed so the radio is left powered on. | 1. move to radio 2. pick up radio from coffee table 3. press radio 4. place radio on coffee table |
| dispose-trash ( task-0001 ) | ||
| v0 | 1. In the living room, locate one soda can, approach it safely, and grasp it securely with a stable hold for transport. 2. Carry the grasped soda can from the living room to the kitchen trash can, position it over the trash opening, and release it so the can lands inside the trash can. 3. Return attention to the living room, locate a second soda can that is not yet disposed, approach it safely, and grasp it securely with a stable hold for transport. 4. Carry the second grasped soda can from the living room to the kitchen trash can, position it over the trash opening, and release it so the can lands inside the trash can. 5. Locate the last remaining soda can in the living room, approach it safely, and grasp it securely for transport without disturbing the environment unnecessarily. 6. Carry the last grasped soda can to the kitchen trash can, align over the trash opening, and release it so the can lands fully inside the trash can. | 1. move to trash can 2. pick up trash can from floor 3. move to can of soda 4. pick up can of soda from floor 5. place can of soda in trash can 6. move to can of soda 7. pick up can of soda from floor 8. place can of soda in trash can 9. move to can of soda 10. pick up can of soda from floor 11. place can of soda in trash can 12. place trash can on floor |