Skip to main content

Documentation Index

Fetch the complete documentation index at: https://agentclientprotocol.com/llms.txt

Use this file to discover all available pages before exploring further.

Plans are execution strategies for complex tasks that require multiple steps. Agents may share plans with Clients through session/update notifications, providing real-time visibility into their thinking and progress. The existing plan update is the baseline format. Clients that advertise planCapabilities during initialization can also receive identified plan operations through plan_update and plan_removed.

Creating Plans

When the language model creates an execution plan, the Agent SHOULD report it to the Client:
{
  "jsonrpc": "2.0",
  "method": "session/update",
  "params": {
    "sessionId": "sess_abc123def456",
    "update": {
      "sessionUpdate": "plan",
      "entries": [
        {
          "content": "Analyze the existing codebase structure",
          "priority": "high",
          "status": "pending"
        },
        {
          "content": "Identify components that need refactoring",
          "priority": "high",
          "status": "pending"
        },
        {
          "content": "Create unit tests for critical functions",
          "priority": "medium",
          "status": "pending"
        }
      ]
    }
  }
}
entries
PlanEntry[]
required
An array of plan entries representing the tasks to be accomplished

Plan Operations

Agents MUST NOT send plan_update or plan_removed unless the Client advertised planCapabilities. If the Client omits planCapabilities, the Agent MUST fall back to the existing plan update. plan_update carries a plan object with a type discriminator. Every plan format includes a required id so Clients can track multiple plans independently.

Item-Based Plans

{
  "jsonrpc": "2.0",
  "method": "session/update",
  "params": {
    "sessionId": "sess_abc123def456",
    "update": {
      "sessionUpdate": "plan_update",
      "plan": {
        "type": "items",
        "id": "plan-1",
        "entries": [
          {
            "content": "Analyze the existing codebase structure",
            "priority": "high",
            "status": "pending"
          }
        ]
      }
    }
  }
}

Markdown Plans

{
  "jsonrpc": "2.0",
  "method": "session/update",
  "params": {
    "sessionId": "sess_abc123def456",
    "update": {
      "sessionUpdate": "plan_update",
      "plan": {
        "type": "markdown",
        "id": "implementation-plan",
        "content": "## Steps\n- [ ] Refactor module\n- [ ] Add tests"
      }
    }
  }
}

File Plans

{
  "jsonrpc": "2.0",
  "method": "session/update",
  "params": {
    "sessionId": "sess_abc123def456",
    "update": {
      "sessionUpdate": "plan_update",
      "plan": {
        "type": "file",
        "id": "design-doc",
        "uri": "file:///tmp/plan.md"
      }
    }
  }
}

Removing Plans

Agents can remove a plan by sending plan_removed with the plan ID:
{
  "jsonrpc": "2.0",
  "method": "session/update",
  "params": {
    "sessionId": "sess_abc123def456",
    "update": {
      "sessionUpdate": "plan_removed",
      "id": "plan-1"
    }
  }
}

Plan Entries

Each plan entry represents a specific task or goal within the overall execution strategy:
content
string
required
A human-readable description of what this task aims to accomplish
priority
PlanEntryPriority
required
The relative importance of this task.
  • high
  • medium
  • low
status
PlanEntryStatus
required
The current execution status of this task
  • pending
  • in_progress
  • completed

Updating Plans

As the Agent progresses through the plan, it SHOULD report updates by sending more session/update notifications with the same structure. The Agent MUST send a complete list of all plan entries in each update and their current status. The Client MUST replace the current plan completely.

Dynamic Planning

Plans can evolve during execution. The Agent MAY add, remove, or modify plan entries as it discovers new requirements or completes tasks, allowing it to adapt based on what it learns.