Capability-Grounded Agentic Planning
Organizations: Washington University in St. Louis
Abstract
LLM agents serve natural-language requests through tools, data sources, and other agents, and even simple requests often need several interdependent calls. Typically, the LLM picks these calls by trial and error, with no guarantee of an executable plan. We present Capability-Grounded Agentic Planning (CGAP), which instead reasons about what a request requires and what tools provide. CGAP compiles the tool catalog deterministically into a PDDL model, uses an LLM to turn the request into goals, and solves the model with a classical planner. Since tool outputs are unknown in advance, the model is abstract, tracking which inputs are available, not their values. During execution, an LLM adds entity-specific calls that abstract plans omit, and deterministic checks reject any that break the plan. Every argument is drawn from a cited source, such as a conversation span or an earlier tool response, and each requested result counts as delivered only after an LLM verifier checks it against the request. With three LLMs on ToolSandbox, ComplexFuncBench, BFCL multi-turn, and -bench retail, CGAP outperforms a standard tool-calling agent by up to 28.9 points.
Figures & tables
| ComplexFuncBench | ||||||
| Model | Method | ToolSandbox | Success | Call Acc. | BFCL-MT | -Retail |
| gpt-oss-20b | Plain agent | 52.3 [47.2, 57.5] | 47.6 [41.6, 53.6] | 66.0 [61.6, 70.5] | 34.0 [27.5, 40.5] | 47.4 [38.6, 56.1] |
| + dependency notes | 58.4 [53.2, 63.3] | – | – | – | – | |
| compute-matched | 57.1 [52.0, 62.2] | 50.8 [45.2, 56.4] | – | 37.0 [30.5, 43.5] | 51.8 † [43.0, 60.5] | |
| ReWOO | 54.1 [47.5, 60.6] | 46.4 [41.2, 51.6] | – | 33.5 [27.0, 40.0] | 44.7 [36.0, 53.5] | |
| LLMCompiler | 54.2 [47.7, 60.6] | 40.4 [34.4, 46.4] | 50.7 [46.2, 55.2] | 21.0 [15.5, 27.0] | 30.7 [22.8, 39.5] | |
| ToolSandbox | |||||
|---|---|---|---|---|---|
| Variant | Avg. | State | CFB | BFCL-MT | -Retail |
| CGAP (search) | 81.2 | 98.4 | 58.0 | 52.0 | 61.4 |
| LLM planning | 16.8 [ 20.5, 13.2] | 27.7 [ 33.0, 22.4] | 4.4 [ 8.0, 0.8] | 10.0 [ 16.0, 4.0] | 7.9 [ 14.9, 0.9] |
| graph planning | 3.1 [ 6.0, +0.4] | 8.9 [ 14.5, 3.6] | 0.4 [ 2.8, +2.0] | +0.5 [ 2.5, +3.5] | 1.8 [ 7.0, +3.5] |
| provenance | 5.4 [ 8.3, 2.4] | 4.3 [ 8.1, 0.8] | 3.6 [ 7.2, 0.4] | 5.0 [ 9.5, 1.0] | 5.3 [ 11.4, +0.9] |
| verifier | 2.7 [ 4.9, 0.6] | 1.8 [ 4.4, +0.6] | 1.6 [ 4.0, +0.4] | 2.0 [ 5.0, +0.5] | 2.6 [ 7.9, +2.6] |
Appendix figures & tables10 assets
Supplementary material from the paper’s appendix.
Appendix
| Input , , , previous operations and their completion records, budgets | |
| 1 | Compile base actions (Equation 1 ), run request parsing (Equation 3 ), and inherit completion records of unchanged operations |
|---|---|
| 2 | Construct by Equation 4 ; set and remaining plan |
| 3 | for at most execution decisions do |
| 4 | if then return completed goals and unresolved requests |
| 5 | if or is invalid from then |
| 6 | if search returns NoPlan or Limit then return incomplete with that status |
| Symbol | Meaning |
|---|---|
| , , | instruction of turn ; history before turn ; history after invocations of turn |
| , | capability catalog; invocation of with arguments |
| , | fields (normalized input/output names); facts |
| , | a value for field has a source; operation is complete |
| , | required input fields and candidate output fields of |
| application-supplied domain preconditions, add effects, delete effects |
| Input Planning problem , expansion budget | |
| Output Action sequence , NoPlan , or Limit | |
| 1 | Initialize FIFO queue , visited set , and expansion count |
| 2 | while do |
| 3 | Remove the first state from |
| 4 | if then return using predecessor pointers |
| 5 | if then return Limit |
| Model | CGAP | ToolSandbox | CFB success | CFB call acc. | BFCL-MT | -Retail |
|---|---|---|---|---|---|---|
| gpt-oss-20b | vs. plain agent | +28.9 [24.5, 33.4] | +10.4 [4.8, 16.0] | +8.9 [6.1, 11.8] | +18.0 [10.0, 26.0] | +14.0 [5.3, 22.8] |
| vs. LLM planning | +16.8 [13.2, 20.5] | +4.4 [0.8, 8.0] | +4.5 [2.2, 6.9] | +10.0 [4.0, 16.0] | +7.9 [0.9, 14.9] | |
| Qwen3-32B | vs. plain agent | +24.5 [20.2, 28.8] | +10.8 [5.2, 16.4] | +9.1 [6.4, 11.9] | +14.0 [7.0, 21.0] | +11.4 [3.5, 20.2] |
| vs. LLM planning | +11.8 [8.5, 15.2] | +5.6 [1.6, 9.6] | +5.3 [3.0, 7.7] | +7.0 [2.0, 12.0] | +5.3 [0.9, 10.5] | |
| GPT-5 mini | vs. plain agent | +13.9 [10.2, 17.5] | +5.2 [1.6, 9.2] | +5.1 [3.2, 7.0] | +6.0 [1.5, 11.0] | +8.8 [0.9, 16.7] |
| vs. LLM planning | +4.8 [2.1, 7.4] | +3.2 [0.0, 6.4] | 0.1 [ 1.8, 1.7] | +2.0 [ 0.5, 5.0] | +3.5 [ 2.6, 9.6] |
| ToolSandbox | ||||
|---|---|---|---|---|
| Method | Average | State dependency | Canonicalization | Insufficient info. |
| Plain agent | 52.3 [47.2, 57.5] | 62.8 [54.0, 71.1] | 59.9 [51.7, 68.0] | 34.2 [25.0, 43.6] |
| LLM planning | 64.4 [59.6, 69.1] | 70.7 [62.5, 78.4] | 66.7 [58.7, 74.1] | 55.8 [46.7, 64.5] |
| CGAP (ours) | 81.2 [77.4, 84.8] | 98.4 [95.1, 99.7] | 81.6 [74.6, 87.7] | 63.6 [55.7, 71.0] |
| CGAP vs. | |||
| Tasks | Model | plain agent | LLM planning |
| Two or more orders (64) | gpt-oss-20b | +14.1 [1.6, 26.6] | +10.9 [0.0, 21.9] |
| Qwen3-32B | +15.6 [4.7, 26.6] | +6.3 [1.6, 12.5] | |
| GPT-5 mini | +9.4 [1.6, 18.8] | +3.1 [ 4.7, 12.5] | |
| One or no order (50) | gpt-oss-20b | +14.0 [2.0, 26.0] | +4.0 [ 4.0, 12.0] |
| Qwen3-32B | +6.0 [ 6.0, 18.0] | +4.0 [ 4.0, 12.0] | |
| ToolSandbox | |||||
|---|---|---|---|---|---|
| Method | Average | State dependency | CFB success | BFCL-MT | -Retail |
| Plain agent | 52.3 [47.2, 57.5] | 62.8 [54.0, 71.1] | 47.6 [41.6, 53.6] | 34.0 [27.5, 40.5] | 47.4 [38.6, 56.1] |
| + dependency notes | 58.4 [53.2, 63.3] | 79.6 [70.6, 88.1] | – | – | – |
| compute-matched | 57.1 [52.0, 62.2] | 68.9 [60.6, 77.1] | 50.8 [45.2, 56.4] | 37.0 [30.5, 43.5] | 51.8 † [43.0, 60.5] |
| ReWOO | 54.1 [47.5, 60.6] | 65.1 [55.6, 74.6] | 46.4 [41.2, 51.6] | 33.5 [27.0, 40.0] | 44.7 [36.0, 53.5] |
| LLMCompiler | 54.2 [47.7, 60.6] | 66.4 | 40.4 [34.4, 46.4] | 21.0 [15.5, 27.0] | 30.7 [22.8, 39.5] |
| ToolSandbox | ComplexFuncBench | |||||
|---|---|---|---|---|---|---|
| CGAP vs. | Average | State dependency | Success | Call acc. | BFCL-MT | -Retail |
| Dependency-notes agent | +22.8 [18.5, 27.0] | +18.8 [12.0, 25.7] | – | – | – | – |
| Compute-matched agent | +24.1 [19.8, 28.3] | +29.5 [22.7, 36.1] | +7.2 [2.8, 11.6] | – | +15.0 [8.5, 21.5] | +9.6 † [1.8, 17.5] |
| ReWOO | +27.1 [21.8, 32.3] | +33.3 [25.5, 41.1] | +11.6 [6.4, 16.8] | – | +18.5 [12.0, 25.5] | +16.7 [7.9, 25.4] |
| LLMCompiler | +27.0 [21.7, 32.2] | – | +17.6 [12.0, 23.2] | +24.2 [20.1, 28.4] | +31.0 [23.5, 38.5] | +30.7 [20.2, 41.2] |
| Method | ToolSandbox | CFB | BFCL-MT |
|---|---|---|---|
| Plain agent | 61.7 | 104.3 | 128.6 |
| + dependency notes | 64.9 | – | – |
| compute-matched | 92.8 | 152.3 | 160.0 |
| ReWOO | 53.1 | 77.2 | 101.6 |
| LLMCompiler | 141.9 | 159.6 | 245.6 |
| LLM planning | 104.8 | 145.5 | 183.2 |
| Benchmark | Input information | Return information | Additional modeling inputs |
|---|---|---|---|
| ToolSandbox | Tool names, descriptions, and parameter schemas with required and optional arguments | Schemas converted from Python return-type annotations; their detail depends on the annotation | Hand-written field names for tools that return scalars; device-dependency annotations and (Appendix A.1 ) |
| ComplexFuncBench | Names, descriptions, and JSON parameter schemas; some descriptions name the endpoint that supplies a parameter | No return schemas; output fields named in descriptions give limited connections, and observed responses supply the values | Producer–consumer connections and output aliases from those endpoint references; deterministic date, time, and string resolvers; no domain annotations |
| BFCL multi-turn | Function names, descriptions, and parameter schemas | Return or response contracts where supplied, normalized by the adapter; coverage varies | None |
| -bench retail | Tool names, descriptions, and parameter schemas; the domain policy | Typed return values of the tool implementations (orders, users, products) | None |