> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orxhestra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Planners

> Inject per-turn planning into agent system prompts. Built-in PlanReActPlanner for chain-of-thought and TaskPlanner for managed task boards.

<Info>
  Attaching a planner in YAML is a single line — see [Composer → `agents:`](/composer/overview#agents):

  ```yaml theme={null}
  agents:
    bot:
      type: llm
      planner:
        type: task       # or plan_react
  ```
</Info>

Planners inject planning instructions into the system prompt before each LLM call and can post-process the response.

```python theme={null}
from orxhestra import BasePlanner, ReadonlyContext, LlmRequest, LlmResponse

class MyPlanner(BasePlanner):
    def build_planning_instruction(
        self, ctx: ReadonlyContext, request: LlmRequest
    ) -> str | None:
        return "Think step by step before acting. Plan before calling tools."

    def process_planning_response(
        self, ctx: ReadonlyContext, response: LlmResponse
    ) -> LlmResponse | None:
        return None  # no post-processing needed
```

## PlanReActPlanner

A built-in planner that enforces structured planning tags - the agent must emit a `/*PLANNING*/` block before reasoning and a `/*FINAL_ANSWER*/` block to conclude.

```python theme={null}
from orxhestra import PlanReActPlanner, LlmAgent

agent = LlmAgent(
    name="PlanningAgent",
    model=model,
    tools=[...],
    planner=PlanReActPlanner(),
)
```

## TaskPlanner

Maintains a task board in `ctx.state` and injects its current status into the system prompt. Pairs with `ManageTasksTool` so the agent can create, update, complete, and list tasks.

```python theme={null}
from orxhestra import TaskPlanner, LlmAgent

planner = TaskPlanner()

agent = LlmAgent(
    name="ProjectAgent",
    model=model,
    tools=[planner.get_manage_tasks_tool()],
    planner=planner,
    instructions=(
        "Track your work with manage_tasks. "
        "Initialize tasks at the start. Mark each complete when done."
    ),
)
```

The agent can call `manage_tasks` with actions: `initialize`, `list`, `create`, `update`, `complete`, `remove`.
