Planning in the Era of LLMs โ€” Part 4 of 7

LLMs Try to Plan (It Goes Badly)

PlanBench, Mystery Blocksworld, and the sobering evidence that frontier models can't reliably sequence three actions.

๐Ÿ“š Planning in the Era of LLMs โ€” Part 4 of 7

Posts 2 and 3 built the foundations: PDDL formalizes a planning problem, and heuristic search solves it. Modern planners handle billions of states with mathematical guarantees. The obvious question follows: do we even need any of that? Can't GPT-4 just plan?

The question is fair. LLMs can pass the bar exam, write working code, and explain quantum mechanics to a five-year-old. Surely sequencing five actions in the right order is within reach.

Between 2022 and 2024, a wave of rigorous research tested exactly this. The results weren't just disappointing โ€” they were diagnostic. They didn't just show that LLMs fail at planning. They showed why they fail, and the "why" turned out to be the most important finding. It redirected the entire field.

This post presents the evidence. We'll run our RoboSort warehouse through the same gauntlet the researchers used, watch frontier models fail at problems a classical planner solves in milliseconds, and understand why the popular fixes โ€” chain-of-thought, self-critique, Tree of Thoughts โ€” don't actually work.

The Benchmark: PlanBench

In 2023, Valmeekam et al. introduced PlanBench, the first rigorous benchmark for evaluating LLMs on classical planning tasks. The setup was deliberately simple: Blocksworld problems where a robot arm must stack colored blocks into a target configuration. Five blocks. A few moves. The kind of problem a STRIPS planner from 1971 could solve.

They tested GPT-4, GPT-3.5, and several open-source models. The task: given an initial state and a goal state, produce a valid sequence of actions. Not optimal โ€” just valid. Any plan that reaches the goal without violating preconditions counts as a success.

PlanBench Results: Blocksworld Plan Generation

Percentage of valid plans generated (higher is better)

Classical Planner
100%
GPT-4
~30%
GPT-3.5
~3%
LLaMA-2
~0%
Fast Downward
(time)
<1s

PlanBench results on Blocksworld plan generation. Classical planners achieve 100% on every instance in under a second. GPT-4 manages ~30% โ€” and that number drops further on harder instances. Data from Valmeekam et al. (2023).

The numbers were stark. GPT-4 โ€” the most capable model at the time โ€” generated valid plans for only about 30% of instances. GPT-3.5 managed around 3%. Open-source models scored near zero. Meanwhile, Fast Downward, a classical planner from 2004, solved 100% of instances in under a second.

Critical Finding

The failures weren't edge cases or adversarial inputs. These were 5-block Blocksworld problems โ€” among the simplest possible planning tasks. If an LLM can't reliably stack five blocks, it certainly can't plan warehouse logistics, multi-step deployments, or supply chain operations.

But the raw accuracy numbers weren't the most devastating finding. That came when the researchers asked a deeper question: is the LLM actually reasoning, or is it pattern-matching?

RoboSort at the Benchmark

Let's see what this looks like in our warehouse. We gave a frontier LLM the same RoboSort problem from Posts 1โ€“3: five pieces, three shelves, one build zone, support constraints. Build a tower. Here's what happened.

Awaiting orders...Gripper: empty | Tower: 0/5 pieces
Shelf A
Shelf B
Shelf C
L1
L2
Beam
Roof
Flag
Build Zone
RoboSort

RoboSort facility ยท initial state (the LLM sees this as text in the prompt)

Prompt You are controlling a warehouse robot called RoboSort. The robot is at Home. There are five pieces on shelves: L1 and L2 on Shelf A, Beam on Shelf B, Roof and Flag on Shelf C. The Build Zone has a platform. Support constraints: legs support beam, beam supports roof, roof supports flag. A piece can only be placed on a support that is already placed. The robot can hold one piece at a time. Generate a valid plan to build the tower.
LLM Output 1. Move to Shelf A, pick up L1
2. Move to Build Zone, place L1 on platform โœ“
3. Move to Shelf A, pick up L2
4. Move to Build Zone, place L2 on platform โœ“
5. Move to Shelf C, pick up Roof
6. Move to Build Zone, place Roof on legs โœ—
7. Move to Shelf B, pick up Beam
8. Move to Build Zone, place Beam on legs โœ—
9. Move to Shelf C, pick up Flag
10. Move to Build Zone, place Flag on Roof โœ—
INVALID PLAN โ€” Roof placed before Beam (violates support constraint: beam supports roof). 3 precondition violations.

A real LLM attempt at the RoboSort tower assembly. The model gets the legs right but then skips the Beam, placing Roof directly on legs. It "knows" the support constraint โ€” it even states it โ€” but doesn't enforce it during generation.

The model knows what support constraints are โ€” it can explain them eloquently. But knowing a constraint and enforcing it during sequential generation are fundamentally different cognitive operations. The LLM generates step-by-step, each token predicted from context. It doesn't maintain a world model. It doesn't track which pieces are placed. It doesn't verify preconditions before committing to an action.

Key Insight

LLMs can describe planning constraints perfectly. They cannot enforce them during plan generation. This is the core gap. Knowing the rules and following the rules are different capabilities โ€” and autoregressive generation only provides the first.

The Smoking Gun: Mystery Blocksworld

If LLMs were genuinely reasoning about actions and consequences โ€” if they truly understood what "pick up" does to the state of the world โ€” then the names of the predicates shouldn't matter. "pick-up-block" and "xyzzy-37" should be equivalent: different labels for the same operation. The planner doesn't care what you call things. Does the LLM?

Valmeekam et al. tested this with Mystery Blocksworld. They took the exact same planning problems and replaced every predicate and action name with meaningless tokens. on(A,B) became snurg(q3,q7). pick-up became florp. The logical structure was identical. Only the labels changed.

Standard Blocksworld

(:action pick-up
  :parameters (?x - block)
  :precondition (and
    (clear ?x)
    (on-table ?x)
    (arm-empty))
  :effect (and
    (holding ?x)
    (not (clear ?x))
    (not (on-table ?x))
    (not (arm-empty))))
GPT-4 accuracy: ~30%

Mystery Blocksworld

(:action florp
  :parameters (?x - grindle)
  :precondition (and
    (zarb ?x)
    (plonk ?x)
    (sniv-empty))
  :effect (and
    (clutching ?x)
    (not (zarb ?x))
    (not (plonk ?x))
    (not (sniv-empty))))
GPT-4 accuracy: ~0%

Same logical structure. Different names. Performance collapses to zero. The LLM was matching patterns from training data โ€” "pick-up" evokes block-stacking scripts โ€” not reasoning about preconditions and effects.

The result was devastating: performance collapsed to zero. Not "lower." Not "somewhat degraded." Zero.

This is the smoking gun. A system that reasons about state transitions wouldn't care whether the action is called "pick-up" or "florp." The preconditions are the same. The effects are the same. The state space is identical. But the LLM's performance was entirely dependent on recognizing the names โ€” because it wasn't reasoning at all. It was retrieving similar-looking action sequences from its training data.

RoboSort Goes Mystery

The same test with our warehouse robot is equally revealing. When we describe the problem with meaningful names โ€” "pick up Leg1 from Shelf A" โ€” the LLM can pattern-match against warehouse logistics data and occasionally get it right. But rename the pieces:

Standard RoboSort

Pieces: L1, L2, Beam, Roof, Flag
Locations: Shelf-A, Shelf-B,
           Shelf-C, Build-Zone
Constraint: legs support beam,
            beam supports roof

LLM: "Place L1, L2, then Beam,
     then Roof, then Flag"
     โ†’ Sometimes correct (~30%)
Partially solved

Mystery RoboSort

Pieces: Q3, Q7, Zrint, Plonk, Vex
Locations: Zone-W, Zone-X,
           Zone-Y, Zone-Z
Constraint: Q3,Q7 glarb Zrint,
            Zrint glarbs Plonk

LLM: "Move to Zone-X, florp Zrint,
     move to Zone-Z, snarg Zrint..."
     โ†’ Incoherent actions
Complete failure

Same RoboSort warehouse. Same five pieces, same support constraints, same goal. Only the labels changed โ€” and the LLM loses all ability to generate even plausible-looking plans. Pattern matching, not planning.

What This Means

When an LLM "solves" a planning problem, it's often not solving it at all โ€” it's recognizing it. The training data contains countless examples of "stack blocks bottom-up" and "assemble structures foundation-first." The LLM retrieves and adapts these patterns. Remove the semantic cues, and there's nothing left to retrieve.

The Prompting Fixes That Don't Fix

After PlanBench, the natural response was: maybe the LLM just needs help. Better prompts. More structure. Time to think. The research community systematically tested every major prompting strategy. Here's what happened.

Chain-of-Thought (CoT)

The idea: make the LLM reason step-by-step. Instead of generating the plan directly, have it explain its reasoning at each step. "First, I need to place the foundation. The legs go first because they support the beam..."

The result: marginal improvement at best, and sometimes worse. CoT helps the LLM generate more verbose explanations of why its plan is correct โ€” while the plan remains incorrect. The model articulates the constraint ("beam must go before roof") and then violates it in the very next step. It's like a student who writes a perfect essay about traffic laws and then runs a red light.

Self-Critique / Verify-and-Refine

The idea: have the LLM check its own work. Generate a plan, then ask the same model (or another instance) to verify it. If it finds errors, revise and try again.

The result: self-critique makes things worse. This was the most surprising finding. Valmeekam et al. showed that when LLMs evaluate their own plans, they exhibit a "yes-man" bias โ€” the critic tends to approve whatever the generator produced. Worse, when the critic does flag an issue, the "fix" often introduces new violations. After several rounds of self-critique, accuracy decreased.

LLM โ€” Plan (Attempt 1) 1. Pick L1, place on platform โœ“
2. Pick L2, place on platform โœ“
3. Pick Roof, place on legs โœ— (Beam missing!)
LLM โ€” Self-Critique "The plan looks mostly correct. The robot correctly places the legs first, providing a stable foundation. The Roof placement assumes the Beam is already in place. Suggestion: add Beam placement between steps 2 and 3."
LLM โ€” Plan (Attempt 2) 1. Pick L1, place on platform โœ“
2. Pick Beam, place on legs โœ— (L2 missing!)
3. Pick L2, place on platform โœ— (Beam blocks?)
4. Pick Roof, place on Beam โœ“
5. Pick Flag, place on Roof โœ“
Self-critique "fixed" one error but introduced another. After 3 rounds: accuracy drops from 30% โ†’ 22%.

Self-critique in action on RoboSort. The critic identifies the missing Beam but the revised plan puts Beam before L2. Each revision shuffles errors around rather than eliminating them. Data pattern from Valmeekam et al. (2023).

Tree of Thoughts (ToT)

The idea: explore multiple reasoning paths in parallel, evaluate them, and pick the best. Instead of one linear chain of thought, branch out, score each branch, and select the most promising.

The result: expensive and unsound. ToT can marginally improve results on some instances, but it multiplies computational cost by 10โ€“100x without providing any guarantee. You're searching a tree of LLM-generated candidates โ€” but the evaluation function is also an LLM, which can't reliably distinguish valid from invalid plans. It's search without a sound heuristic. Post 3 showed why that doesn't work: you need a heuristic that actually correlates with distance to goal. An LLM's confidence score doesn't.

Strategy Idea Result on Planning Cost
Direct Prompting Ask for a plan directly ~12โ€“30% valid 1x
Chain-of-Thought Step-by-step reasoning ~15โ€“35% valid 1.5x
Self-Critique LLM checks own plan ~10โ€“22% (worse!) 3x
Tree of Thoughts Branch & evaluate ~20โ€“40% valid 10โ€“100x
Classical Planner Heuristic search on PDDL 100% valid 1x (fast)

No prompting strategy brings LLMs close to classical planner accuracy. Self-critique actively degrades performance. Tree of Thoughts is expensive without guarantees. Data patterns from Valmeekam et al. (2023), Kambhampati (2024).

Key Insight

The problem isn't the prompt โ€” it's the architecture. Autoregressive generation commits to each token before seeing the consequences. No amount of prompt engineering can add backtracking, constraint propagation, or state tracking to a system that generates left-to-right. You don't fix a calculator by asking it nicely โ€” you use a different tool.

This same failure mode plagues coding agents. A coding agent asked to "refactor the authentication module" might: (1) modify the login function, (2) update the tests, (3) realize the tests reference a helper it deleted in step 1, (4) re-add the helper, (5) realize the re-added helper breaks step 1's refactoring. Each fix creates a new problem because the agent isn't tracking state โ€” it's generating plausible next actions. ReAct agents, as we saw in Post 3, loop for the same reason: no heuristic, no state model, no backtracking.

The planning community's answer: don't generate and hope. Model the state, search the space, verify the result.

Seeing the Failure: LLM vs. Planner on RoboSort

Let's make this concrete. Below, we run the same RoboSort tower assembly problem through an LLM (left) and a classical planner (right). Watch the LLM generate a plausible-looking but invalid plan, while the planner finds a guaranteed-correct sequence in milliseconds.

Interactive โ€” click "โ–ถ Run Both" to compare LLM vs. Planner on the same 5-piece tower problem

๐Ÿค– LLM (Direct Prompting)

  • 1 Move to Shelf A โ†’ Pick L1
  • 2 Move to Build Zone โ†’ Place L1 on platform
  • 3 Move to Shelf A โ†’ Pick L2
  • 4 Move to Build Zone โ†’ Place L2 on platform
  • 5 Move to Shelf C โ†’ Pick Roof
  • 6 Move to Build Zone โ†’ Place Roof on legs
  • 7 Move to Shelf B โ†’ Pick Beam
  • 8 Move to Build Zone โ†’ Place Beam (where?)
  • 9 Move to Shelf C โ†’ Pick Flag
  • 10 Move to Build Zone โ†’ Place Flag on Roof

โš™๏ธ Classical Planner (A* + hFF)

  • 1 move(home, shelf-a)
  • 2 pick(L1, shelf-a)
  • 3 move(shelf-a, build-zone)
  • 4 place-on-platform(L1)
  • 5 move(build-zone, shelf-a)
  • 6 pick(L2, shelf-a) โ†’ move โ†’ place-on-platform(L2)
  • 7 move(build-zone, shelf-b)
  • 8 pick(Beam, shelf-b) โ†’ move โ†’ place-on-piece(Beam, L1)
  • 9 move โ†’ pick(Roof, shelf-c) โ†’ move โ†’ place-on-piece(Roof, Beam)
  • 10 move โ†’ pick(Flag, shelf-c) โ†’ move โ†’ place-on-piece(Flag, Roof)

After executing each plan ยท what RoboSort actually does on the floor

LLM plan executed โ€” 3 precondition violationsTower: 2/5 placed ยท no valid stack
Shelf A
Shelf B
Shelf C
L1
L2
Roof
Beam
?
Flag
missing
Build Zone
RoboSort
Planner plan executed โ€” 0 violationsTower: 5/5 โœ“ ยท support chain intact
Shelf A
Shelf B
Shelf C
L1
L2
Beam
Roof
Flag
Build Zone
RoboSort

Same starting state. Same 5 pieces. Same physics. The LLM's plan reads like a reasonable sequence; executed in the warehouse, it produces a heap. The planner's plan is dryer text and produces a tower. The reader has to be the simulator the LLM never was.

The planner's output might look boring โ€” it's just a sequence of formal actions. But every single step has been verified: every precondition checked, every effect applied, every state transition valid. The LLM's output reads better โ€” natural language, confident tone โ€” but it's wrong. This is the fundamental tension: fluency is not validity.

Why LLMs Fail at Planning: The Architectural Argument

The evidence points to a fundamental architectural mismatch. Planning requires three capabilities that autoregressive language models lack:

  1. State tracking. A planner maintains an explicit world state โ€” what's true right now โ€” and updates it after every action. An LLM has no world model. It has a context window of tokens. When RoboSort places L1, the planner knows the gripper is empty and L1 is on the platform. The LLM has to infer this from the text it already generated โ€” and it often gets it wrong.
  2. Precondition verification. Before executing place-on-piece(Roof, Beam), the planner checks: is Beam placed? Is Roof in gripper? Is Robot at build zone? All must be true, or the action is blocked. The LLM has no mechanism to perform this check โ€” it simply generates the next most likely token.
  3. Backtracking. When a planner reaches a dead end โ€” a state from which no action sequence reaches the goal โ€” it backtracks and tries a different path. Autoregressive generation is one-shot: each token is committed permanently. There is no "undo." Tree of Thoughts simulates branching but without a sound evaluation function, it's random search with extra steps.
Key Insight

LLMs fail at planning not because they're not smart enough, but because they're the wrong kind of tool. Asking an LLM to plan is like asking a spellchecker to do math. It might accidentally get simple cases right by pattern matching, but the architecture doesn't support the operation. The solution isn't a better spellchecker โ€” it's using the right tool for the job.

The Taxonomy: What Should LLMs Actually Do?

The failures of 2022โ€“2023 didn't kill the idea of LLMs in planning. They refined it. The research community converged on a taxonomy of roles โ€” things LLMs are genuinely good at, paired with formal tools that handle what LLMs can't.

Role 1 โ€” Failed

LLM as Direct Planner

Ask the LLM to generate the full plan. No verification, no formal tools. As PlanBench showed: ~12โ€“30% accuracy on trivial problems. This doesn't work.

Role 2 โ€” Promising

LLM as Heuristic Generator

LLM writes heuristic functions (as code) that guide a classical planner's search. The planner still does the searching and guarantees correctness. The LLM just helps it search faster. Post 5 explores this.

Role 3 โ€” Frontier

LLM as Model Translator

LLM converts natural language problem descriptions into formal PDDL models. The planner then solves the formal model. No human PDDL expertise needed. Post 6 explores this.

Role 4 โ€” Emerging

LLM as Orchestrator

LLM coordinates multiple specialized agents โ€” a PDDL generator, a validator, a planner, an executor. It doesn't plan itself; it manages the planning pipeline. Post 7 explores this.

The taxonomy of LLM roles in planning. Role 1 (direct planning) failed. Roles 2โ€“4 leverage LLMs' actual strengths โ€” language understanding, code generation, coordination โ€” while delegating reasoning to formal tools.

The critical shift: stop asking LLMs to plan. Start asking them to help plan. The LLM's genuine strengths โ€” understanding natural language, generating code, translating between formats โ€” are exactly the capabilities that formal planners lack. The planner's strengths โ€” state tracking, constraint verification, optimality guarantees โ€” are exactly what LLMs lack. The marriage is natural. The remaining posts in this series explore how it works in practice.

What's Ahead

This post established the hard evidence: LLMs cannot reliably plan. Not with better prompts. Not with self-critique. Not with tree search. The architectural mismatch is fundamental โ€” autoregressive generation lacks state tracking, precondition verification, and backtracking.

But the story doesn't end with failure. The taxonomy of roles shows the path forward. Instead of replacing planners, what if LLMs amplified them? What if an LLM could look at a PDDL domain and generate a Python function that estimates distance to goal โ€” a heuristic โ€” and hand it to a classical search engine?

That's exactly what happened. And the results went from 12% to 82%.

References

  1. Valmeekam, V., Marquez, M., Sreedharan, S., & Kambhampati, S. (2023). On the Planning Abilities of Large Language Models โ€” A Critical Investigation. NeurIPS 2023.
  2. Valmeekam, V., Marquez, M., & Kambhampati, S. (2023). PlanBench: An Extensible Benchmark for Evaluating Large Language Models on Planning and Reasoning about Change. NeurIPS 2023 Datasets and Benchmarks.
  3. Kambhampati, S. (2024). Can Large Language Models Reason and Plan? Annals of the New York Academy of Sciences.
  4. Stechly, K., Marquez, M., & Kambhampati, S. (2024). Self-Verification in Large Language Models: Limitations and Implications. ICML 2024 Workshop on LLMs and Cognition.
  5. Yao, S., Yu, D., Zhao, J., et al. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models. NeurIPS 2023.
  6. Katz, M., Kokel, H., & Muise, C. (2025). Planning in the Era of Language Models. NeurIPS 2025 Tutorial.
  7. Valmeekam, V., Stechly, K., & Kambhampati, S. (2024). LLMs Still Can't Plan; Can LLMs Help Planning? AAAI 2024 Workshop on Bridging the Gap Between AI Planning and Reinforcement Learning.