# Plan

> El plan de un agente como una lista que se pliega. Un componente nativo de Pyzed para GUIs de escritorio en Python, con vista previa, ejemplos y su API.

Source: https://albakore.github.io/pyzed/es/library/plan/

:::tip[En pocas palabras]
Una lista de tareas que un asistente de IA se escribe y va tachando mientras trabaja.
:::

`ui.Plan` es un componente que muestra el plan de un agente de IA como una lista: cada paso está pendiente (un círculo vacío), en curso (un punto, o un spinner con `running=True`) o hecho (un check verde, con el texto atenuado), y la cabecera cuenta `hechos/total`. Un clic en la cabecera pliega y despliega los pasos. `steps` son diccionarios con `step` (el texto) y `status`: `"pending"`, `"in_progress"` o `"done"`.

`ui.Plan` · Categoría: [Agentes de IA](https://albakore.github.io/pyzed/es/library/#agentes-de-ia) · [Referencia completa →](https://albakore.github.io/pyzed/es/reference/ui/#plan)

**Código:**

```python
pz.container(ui.Plan(steps=[
    {"step": "Read the form and its handlers", "status": "done"},
    {"step": "Add the email field", "status": "done"},
    {"step": "Validate the email as you type", "status": "in_progress"},
    {"step": "Run the tests", "status": "pending"},
], running=True), width=420)
```

:::note[Nuevo]
Este componente se añadió hace poco. Cuéntanos qué tal te funciona en el [gestor de incidencias](https://github.com/albakore/pyzed/issues).
:::

## Cuándo usarlo

- Encima del chat de un agente, mientras resuelve una tarea de varios pasos.
- Para cualquier lista de pasos que se actualiza mientras avanza el trabajo, como una instalación o una migración.

## Uso

```python
import pyzed as pz
from pyzed import ui

class Agent(pz.App):
    def __init__(self):
        self.steps = [{"step": "Add the form", "status": "done"},
                      {"step": "Wire the events", "status": "in_progress"}]
        self.working = True

    def view(self):
        return ui.Plan(steps=self.steps, running=self.working)
```

## Variantes

:::note[Sobre estas capturas]
Cada captura la graba pyzed mismo, fuera de pantalla a 2x, en One Dark o One Light según el tema de este sitio, y recortada al componente para que se vea a su tamaño real. El puntero pasa por encima, pulsa o escribe en él; un componente que no reacciona al puntero recorre algunos temas. Con movimiento reducido ves el primer fotograma. Abre **Código** bajo una captura para ver el fragmento que la dibuja; los nombres libres como `on_save` son tus propios callbacks.
:::

### Estado

Sin `running` el paso en curso muestra un punto; el plegado se dibuja como queda tras un clic en la cabecera.

```python
pz.container(ui.Plan(steps=[{"step": "Add the form", "status": "done"},
                         {"step": "Wire the events", "status": "in_progress"},
                         {"step": "Run the tests", "status": "pending"}],
                  running=True), width=300)
```

```python
pz.container(ui.Plan(steps=[{"step": "Add the form", "status": "done"},
                         {"step": "Wire the events", "status": "in_progress"},
                         {"step": "Run the tests", "status": "pending"}]), width=300)
```

```python
pz.container(ui.Plan(steps=[{"step": "Add the form", "status": "pending"},
                         {"step": "Run the tests", "status": "pending"}]), width=300)
```

```python
pz.container(ui.Plan(steps=[{"step": "Add the form", "status": "done"},
                         {"step": "Run the tests", "status": "done"}]), width=300)
```

```python
pz.container(ui.Plan(steps=[{"step": "Add the form", "status": "done"},
                         {"step": "Run the tests", "status": "pending"}]), width=300)
```

## Eventos

Plan no tiene eventos propios: muestra lo que le das. Como todo widget, también tiene los **18 eventos comunes** (`click`, `double_click`, `right_click`, `mouse_enter`, `drag`, `key_down`, `resize`…), que se conectan con `.on(...)`: mira [Eventos](https://albakore.github.io/pyzed/es/guides/events/) y [Eventos de cada componente](https://albakore.github.io/pyzed/es/library/events/).

Es un `pz.Component`, así que también lanza `on_mount` y `on_unmount`, y sus handlers reciben un `pz.Event` cuyo `value` trae el dato.

## Propiedades y API

### `ui.Plan`

```python
class Plan
```

Un componente para el plan de un agente: una lista de pasos con `hechos/total` en la cabecera, que la pliega.

| Propiedad | Por defecto | Descripción |
| --- | --- | --- |
| `steps` | `None` | Dicts `{"step": texto, "status": "pending" \| "in_progress" \| "done"}`. |
| `running` | `False` | Hace girar el paso en curso. |
| `theme` | `None` | Tema. |

[Referencia completa →](https://albakore.github.io/pyzed/es/reference/ui/#plan)

## Relacionados

- [Llamada a herramienta](https://albakore.github.io/pyzed/es/library/tool-call/): Un paso de un agente de IA: qué hizo, su resultado y Permitir o Rechazar.
- [Progreso](https://albakore.github.io/pyzed/es/library/progress/): Una barra de progreso fina en un color semántico.
- [Barra de cambios](https://albakore.github.io/pyzed/es/library/edits-bar/): Los archivos que cambió un agente, con Conservar todo y Rechazar todo.
