Skip to the lesson
FixTheRobot Home / VLA / Phase 11 / 11.5

VLA · Phase 11 · Advanced Research Directions

11.5 — Hierarchical Planning and Task Decomposition

Splitting a long task into steps a policy can execute.

  • Roadmap phase 11
  • Advanced Research Directions
  • About 14 minutes to read

Long tasks are chains of short ones, and chains multiply risk. This lesson shows why, how a hierarchy with checks rescues long tasks, and how language can serve as a correctable middle layer.

Claims about papers, models and textbooks carry numbered references, listed with what each one is cited for in the References. Code marked “Toy model” is our own illustration, not the cited system.

Learning objectives

After this lesson, you should be able to:

  • Compute success over a chain of steps.
  • Show how per-step retries change the result.
  • Write a planner that tracks facts.
  • Describe language as a middle layer.
  1. A high level proposes the next step
  2. The low level (a VLA or skill) executes it
  3. A check confirms the step’s effect
  4. Retry or replan if it failed
  5. Continue until the task is done
A hierarchy with checks.

The one-sentence idea

Plan in steps, check each step.

Small per-step failure rates compound; checks and retries stop the compounding.

Long tasks are many short tasks

“Clean the kitchen” is not one skill; it is dozens of steps over minutes. A single policy that maps images and an instruction to motor commands is poorly matched to such horizons. The common answer is a hierarchy: a high level decides what to do next in an abstract form, a low level carries out each step. You have met pieces of this already. SayCan combines a language model's knowledge of what is useful with value functions that say what is feasible, choosing a skill that is both and repeating until the output is a terminate step.[1] Code as Policies has language models write policy code that calls perception and control APIs.[2] Inner Monologue adds closed-loop language feedback so the planner can replan around failures.[3] π0.5's training examples include semantic subtask prediction alongside low-level actions,[4] and Gemini Robotics builds its VLA on top of an embodied-reasoning model.[5]

RT-H makes the middle layer explicit and human-readable: it uses language as a layer between tasks and actions. The robot predicts fine-grained language motions such as “move arm forward” from the task, then predicts the action from the task, the vision and the predicted motion; because the middle layer is language, a person can intervene during execution with a new language motion.[6]

Why hierarchy is not just tidiness: long chains multiply risk

If each of n steps succeeds with probability p independently, the whole task succeeds with pn. A good-looking per-step rate collapses over a long task:

for p in (0.99, 0.95, 0.90):
    row = "  ".join(f"{n:>2} steps: {p ** n:5.2f}" for n in (1, 5, 10, 20, 40))
    print(f"per-step success {p:.2f} -> {row}")

Output:

per-step success 0.99 ->  1 steps:  0.99   5 steps:  0.95  10 steps:  0.90  20 steps:  0.82  40 steps:  0.67
per-step success 0.95 ->  1 steps:  0.95   5 steps:  0.77  10 steps:  0.60  20 steps:  0.36  40 steps:  0.13
per-step success 0.90 ->  1 steps:  0.90   5 steps:  0.59  10 steps:  0.35  20 steps:  0.12  40 steps:  0.01

At 95% per step, a 20-step task succeeds a bit over a third of the time. Two things help: raise the per-step rate, and add a check-and-retry at each step, which a hierarchy makes possible because it knows what each step was meant to achieve (lesson 8.5):

p, n = 0.90, 20
for attempts in (1, 2, 3):
    per_step = 1 - (1 - p) ** attempts
    print(f"up to {attempts} attempt(s) per step -> per-step success {per_step:.3f} -> whole {n}-step task {per_step ** n:.3f}")

Output:

up to 1 attempt(s) per step -> per-step success 0.900 -> whole 20-step task 0.122
up to 2 attempt(s) per step -> per-step success 0.990 -> whole 20-step task 0.818
up to 3 attempt(s) per step -> per-step success 0.999 -> whole 20-step task 0.980

Toy model. Assumes independent attempts and a reliable success check, both of which can fail in practice (lesson 8.5).

With three attempts per step, a task that would succeed 12% of the time succeeds about 98% of the time, provided failures are independent and detectable.

Decomposing, and tracking what is done

A high-level planner needs a representation of the task: steps, what each needs before it can start and what it changes. A simple symbolic version tracks a set of true facts and picks the next step whose requirements are met:

steps = {
    "open the drawer":        {"needs": set(),                          "adds": {"drawer open"}},
    "pick up the cup":        {"needs": set(),                          "adds": {"holding cup"}},
    "put the cup in the drawer": {"needs": {"drawer open", "holding cup"}, "adds": {"cup in drawer"}, "removes": {"holding cup"}},
    "close the drawer":       {"needs": {"cup in drawer"},               "adds": {"drawer closed"}, "removes": {"drawer open"}},
}
facts, done, order = set(), set(), []
while len(done) < len(steps):
    ready = [s for s in steps if s not in done and steps[s]["needs"] <= facts]
    if not ready: break
    step = ready[0]
    facts |= steps[step]["adds"]; facts -= steps[step].get("removes", set()); done.add(step); order.append(step)
print("order found:", order)
print("facts at the end:", sorted(facts))

Output:

order found: ['open the drawer', 'pick up the cup', 'put the cup in the drawer', 'close the drawer']
facts at the end: ['cup in drawer', 'drawer closed']

The planner never mentions joint angles; the low level (a VLA or controller) does. The fact set is what lets it notice that a step was not achieved and replan.

Language as the middle layer, and why people can correct it

With a language middle layer, a failed step can be fixed by changing a few words. Our toy has a table from language motions to small movements. The “policy” looks up each motion; a person corrects one motion in the middle and the result changes:

import numpy as np

moves = {"move arm forward": np.array([0.1, 0.0]), "move arm left": np.array([0.0, 0.1]), "move arm right": np.array([0.0, -0.1]), "move arm back": np.array([-0.1, 0.0])}

def run(plan):
    pos = np.zeros(2)
    for word in plan: pos = pos + moves[word]
    return np.round(pos, 2)

plan = ["move arm forward", "move arm forward", "move arm left", "move arm forward"]
goal = np.array([0.3, -0.1])
print("plan:", plan)
print("ends at", run(plan).tolist(), "-> goal", goal.tolist())
plan[2] = "move arm right"                                       # a person replaces one language motion
print("after correcting step 3 to 'move arm right': ends at", run(plan).tolist())

Output:

plan: ['move arm forward', 'move arm forward', 'move arm left', 'move arm forward']
ends at [0.3, 0.1] -> goal [0.3, -0.1]
after correcting step 3 to 'move arm right': ends at [0.3, -0.1]

Toy model. A lookup table standing in for a learned model. In RT-H the language motions are predicted by a model and condition the action prediction.

Correcting in language is much easier than teleoperating a correction, and the correction can become training data. The RT-H abstract presents this as a way to learn from human intervention in language.[6]

Where hierarchies break

Interfaces between levels are failure points: the planner may ask for something the low level has no skill for (SayCan's feasibility scores exist to prevent that[1]); the low level may fail without the planner knowing (hence feedback); and a chain of levels adds latency (lesson 8.6). A hierarchy also needs its middle layer to be expressive enough: if “move arm forward” cannot describe what is needed, no amount of correction helps.

Common misconceptions

Misconception 1 “A strong enough policy can do long tasks end to end.”

Correction Per-step errors multiply over long horizons.

Misconception 2 “Hierarchy is only for neatness.”

Correction It enables checks, retries and human correction.

Misconception 3 “The planner can ask for anything.”

Correction It needs feasibility information about the low level.

Engineering takeaways

  1. p^n collapses.
  2. Retries need independence and detection.
  3. Track facts to replan.
  4. Language layers are correctable.

Make every step checkable.

Knowledge check

Try each question first, then reveal the explanation.

Question 1

95% per step, 10 steps: whole-task success?

Explanation

About 60%. 0.95^10 ≈ 0.60.

Question 2

What lets a human correct an RT-H-style hierarchy?

Explanation

The middle layer is language, so they can give a new language motion.

Question 3

Name a failure point of a hierarchy.

Explanation

The interface: the planner asks for something unavailable, or failures go unreported.

References

Numbered notes in the text, like [1], point here. Each entry says what it is cited for and how that was checked. Papers and books can be revised or misread, so follow the links before relying on a detail. Code marked “Toy model” is our own illustration of an idea, not the code of the cited system.

  1. Ahn, M., et al. (2022). Do as I can, not as I say: Grounding language in robotic affordances. Conference on Robot Learning (CoRL) 2022. arXiv:2204.01691

    Cited for:

    • Combines the probability that a skill is useful for the instruction (from the language model) with the probability that the skill will succeed (from a value function) to choose a skill that is both useful and possible; the chosen skill is appended and the process repeats until the output is a terminate step. Checked against the paper, via summaries of its text.
  2. Liang, J., et al. (2022). Code as Policies: Language model programs for embodied control. IEEE International Conference on Robotics and Automation (ICRA) 2023. arXiv:2209.07753

    Cited for:

    • Shows that code-writing language models can turn natural-language commands into robot policy code that calls perception and control APIs. Checked against the paper’s abstract.
  3. Huang, W., et al. (2022). Inner Monologue: Embodied reasoning through planning with language models. Conference on Robot Learning (CoRL) 2022. arXiv:2207.05608

    Cited for:

    • Adds closed-loop language feedback from sources such as success detectors, object detectors and humans to language-model planning; this significantly improves instruction completion, and the planner can replan around failures. Checked against the paper’s abstract.
  4. Physical Intelligence (Black, K., et al.) (2025). π0.5: a vision-language-action model with open-world generalization. CoRL 2025 / arXiv. arXiv:2504.16054

    Cited for:

    • Builds on π0 and is trained by co-training on heterogeneous data: multiple robots, high-level semantic prediction, web data and other sources, with multimodal training examples mixing images, language commands, object detections, subtask prediction and low-level actions. Checked against the paper’s abstract.
  5. Gemini Robotics Team, Google DeepMind (2025). Gemini Robotics: Bringing AI into the physical world. arXiv. arXiv:2503.20020

    Cited for:

    • Gemini Robotics-ER (Embodied Reasoning) extends Gemini’s multimodal reasoning into the physical world with better spatial and temporal understanding, supporting object detection, pointing, trajectory and grasp prediction, multi-view correspondence and 3D bounding box prediction; Gemini Robotics builds on top of it. Checked against the paper’s abstract.
  6. Belkhale, S., et al. (2024). RT-H: Action hierarchies using language. RSS 2024 / arXiv. arXiv:2403.01823

    Cited for:

    • Uses language as a middle layer between tasks and actions: the robot predicts fine-grained language motions such as “move arm forward” from the task, then predicts the action from the task, the vision and the predicted language motion; because the middle layer is language, a person can intervene during execution with a new language motion. Checked against the paper’s abstract.

What’s next

Next: what it takes to trust a learned policy to run on its own.

Next lesson

11.6 — Safety and reliable autonomous execution

What it takes to trust a learned policy to run on its own.

Back to the VLA roadmap