--- id: agent-planning title: Agent Planning: Workflows, HTN, Plan-Execute code: AW subtitle: Pick a workflow, an HTN or evolutionary planner, or a replanning executor. Stdlib Python from the lessons. hue: 32 sources: phases/14-agent-engineering/11-planning-htn-and-evolutionary, phases/14-agent-engineering/12-anthropic-workflow-patterns, phases/19-capstone-projects/24-plan-execute-control-flow, phases/14-agent-engineering/44-plan-from-evidence source_hash: 28f779dbd6acbd70 --- ## Pick a planner type: comparison from: phases/14-agent-engineering/11-planning-htn-and-evolutionary/docs/en.md, phases/14-agent-engineering/12-anthropic-workflow-patterns/docs/en.md | Factor | Workflow | HTN + ChatHTN | AlphaEvolve | ReAct / ReWOO | |---|---|---|---|---| | Who decides | Engineers | Symbolic layer | Evaluator selects | The model | | Guarantee | Bounded step count | Provable soundness | Best plan by fitness | No formal guarantees | | Needs | Steps you can enumerate | Operator schema | Machine-checkable fitness | LLM in the loop | | Fits | Predictable, compliance-bound | Scheduling, policy-bound | Compiler optimization | Open-ended research | | LLM role | Calls on fixed code paths | Fallback decomposition | Proposes mutations | Picks each step | ## Five workflow patterns in code type: task-table from: phases/14-agent-engineering/12-anthropic-workflow-patterns/code/main.py, phases/14-agent-engineering/12-anthropic-workflow-patterns/docs/en.md span: 2 | Task | Code | |---|---| | Prompt chaining: output N is input N+1 | `prompt_chain(input_text, llm, steps)` | | Routing: classify, then dispatch | `route(input_text, classifier, handlers)` | | Parallelization: N runs, majority vote | `parallel_vote(prompt, llm, n=5)` | | Orchestrator-workers: pick specialists | `orchestrator_workers(task, workers, synth)` | | Evaluator-optimizer: loop until PASS | `evaluator_optimizer(task, proposer, evaluator, max_iter=5)` | | Unknown route label | `handlers.get("default")` gives "escalate to human" | | Run all five demos | `python3 code/main.py` | ## Plan-execute executor type: flow from: phases/19-capstone-projects/24-plan-execute-control-flow/docs/en.md, phases/19-capstone-projects/24-plan-execute-control-flow/code/main.py 1. **Planner**: `planner(goal, history, None)` returns the first plan. Event `plan.commit`. 2. **Executor**: runs `plan[cursor]` through the dispatcher. Events `step.start` and `step.end`. 3. **Executor**: on success, append to history and move the cursor to the next step. 4. **Executor**: on an exception, store `step.error` and set `last_error`. 5. **Budget check**: `replans_used >= self.max_replans` returns failed with `replan_budget`. 6. **Planner**: `planner(goal, history, last_error)` gives a new plan. Event `plan.draft`. 7. **Executor**: emits `plan.diff`, commits the new plan and sets `cursor = 0`. 8. **Executor**: the last step succeeds. Event `session.complete` with `goal_met`. ## Evidence plan waves type: architecture from: phases/14-agent-engineering/44-plan-from-evidence/docs/en.md, phases/14-agent-engineering/44-plan-from-evidence/code/main.py ```arch node | contract | 1,1 | contract | wave 1, review contract | process node | impl | 2,1 | implementation | wave 2, unittest | process node | docs | 2,2 | docs | wave 2, check_links.py | process node | integ | 3,1 | integration | wave 3, acceptance gate | process edge | contract | impl | depends_on edge | contract | docs | depends_on edge | impl | integ | edge | docs | integ | ``` ## Run a replanning agent type: annotated-code lang: python from: phases/19-capstone-projects/24-plan-execute-control-flow/code/main.py ```python agent = PlanExecuteAgent( planner=make_deterministic_planner(fail_step_id=2, recovery="route_around"), executor=executor, # (tool_name, args) -> result, raises ToolFailure max_steps=12, max_replans=5, # both budgets are hard ) res = agent.run("ship the report") res.status, res.reason # "completed" and "goal_met" res.revisions # list of PlanDiff r.to_dict() # revision, removed, added, revised Step(2, "transform", {"mode": "v2"}, "computed via fallback") ``` ## HTN planner with LLM fallback type: annotated-code lang: python from: phases/14-agent-engineering/11-planning-htn-and-evolutionary/code/main.py ```python op = Operator("open_editor", ("logged_in",), ("editor_open",)) m = Method("ship_change_m1", "ship_change", ("logged_in",), ("open_editor", "write_tests", "run_tests", "open_pr")) planner = HTNPlanner(operators=operators, methods=methods, llm=llm) plan = planner.plan("ship_change", {"logged_in"}) # list of operators or None planner.cached_methods # LLM decompositions kept for the next call planner.llm.calls # 0 new calls on a cache hit ``` ## Planning terms type: concepts from: phases/14-agent-engineering/11-planning-htn-and-evolutionary/docs/en.md, phases/14-agent-engineering/12-anthropic-workflow-patterns/docs/en.md, phases/19-capstone-projects/24-plan-execute-control-flow/docs/en.md - **Operator**: primitive action with preconditions and effects. - **Method**: a way to break a compound task into subtasks, with preconditions. - **ChatHTN**: the symbolic planner asks the LLM when no method matches. - **Fitness function**: deterministic, machine-checkable score over outputs. - **Augmented LLM**: LLM plus search, tools and memory. The atomic unit. - **expected_outcome**: planner's success condition. The executor does not enforce it. - **Replan**: hand the error to the planner. This turns a script into an agent. ## Defaults type: defaults from: phases/19-capstone-projects/24-plan-execute-control-flow/code/main.py, phases/19-capstone-projects/24-plan-execute-control-flow/docs/en.md, phases/14-agent-engineering/11-planning-htn-and-evolutionary/code/main.py, phases/14-agent-engineering/12-anthropic-workflow-patterns/code/main.py | Setting | Default | Note | |---|---|---| | `max_steps` | `12` | All step executions, replans included | | `max_replans` | `5` | Planner calls after the first plan | | `max_depth` | `12` | HTN recursion limit, then None | | `max_iter` | `5` | Evaluator-optimizer rounds | | `n` | `5` | Voters in `parallel_vote` | | `generations` | `12` | Evolutionary demo, keep top 3 of 6 | ## Failures and fixes type: troubleshooting from: phases/19-capstone-projects/24-plan-execute-control-flow/code/main.py, phases/19-capstone-projects/24-plan-execute-control-flow/docs/en.md, phases/14-agent-engineering/44-plan-from-evidence/code/main.py, phases/14-agent-engineering/11-planning-htn-and-evolutionary/docs/en.md | Symptom | Cause | Fix | |---|---|---| | `failed`, reason `replan_budget` | Planner returns the same broken plan | Feed `last_error` and route around it | | `failed`, reason `step_budget` | Replans add steps past `max_steps` | Shorter plans or reuse history | | `failed`, reason `no_plan` | Planner returned `[]` | Add a recovery plan for that error | | `dependency cycle among:` | Items wait on each other | Resolve the disagreement behind it | | `has no repository evidence` | Item has empty `evidence` | Cite a repository fact | | `has no proof command` | Empty `proof` | Give one exact check | | HTN soundness collapses | No precondition/effect schemas | Validate LLM output against operators | | Evolution does not converge | LLM asked if the code is better | Use a deterministic, fast evaluator | ## Commands type: command-table from: phases/14-agent-engineering/44-plan-from-evidence/docs/en.md, phases/19-capstone-projects/24-plan-execute-control-flow/code/main.py, phases/14-agent-engineering/11-planning-htn-and-evolutionary/docs/en.md | Command | What it does | |---|---| | `python3 code/main.py` | Runs the lesson demo and prints the trace | | `python3 -m unittest discover code/tests -v` | Runs the evidence plan tests | | `outputs/evidence-plan.json` | Written by lesson 44, status ready or blocked | ## Questions type: qa from: phases/14-agent-engineering/12-anthropic-workflow-patterns/docs/en.md, phases/14-agent-engineering/11-planning-htn-and-evolutionary/docs/en.md, phases/19-capstone-projects/24-plan-execute-control-flow/docs/en.md, phases/14-agent-engineering/44-plan-from-evidence/docs/en.md - **Workflow or agent?** Workflow when you can enumerate the steps. Agent when the next step depends on the last result. - **Why cap replans and steps?** A capped replan fails faster with a clearer reason. - **Why is ChatHTN sound?** LLM output enters only as candidate decompositions. The schema rejects invalid ones. - **Which steps run together?** Steps in the same wave. Integration waits for both branches. ## Tips type: tips from: phases/14-agent-engineering/11-planning-htn-and-evolutionary/docs/en.md, phases/14-agent-engineering/12-anthropic-workflow-patterns/docs/en.md, phases/19-capstone-projects/24-plan-execute-control-flow/docs/en.md, phases/14-agent-engineering/44-plan-from-evidence/docs/en.md - Start with direct API calls. Reach for ReAct or ReWOO before HTN. - Define the contract before its implementations. - Give each work item an id, change, evidence, dependencies and proof. - Emit a plan diff on each revision. Do not rewrite the plan silently. - Store the plan next to the work, not in chat checkboxes.