# Instrucciones para el agente: LangGraph: construye agentes con estado y puntos de revisión

Pega este texto a tu agente (Claude Code, Codex, OpenCode, Hermes o el que uses) y dile «ayúdame a montarlo». Son los pasos para ponerlo en marcha; el porqué de cada pieza está en la guía completa.

- Dificultad: intermedio
- Proyecto: https://github.com/langchain-ai/langgraph (licencia MIT)
- Guía completa: https://lab.wisd.ai/hub/langgraph-orchestration

---

## Para el agente: cómo acompañar al usuario

1. Pregunta primero para qué lo quiere. Si su objetivo no necesita algún paso, sáltalo.
2. Antes de instalar, comprueba lo que ya tiene (versiones, claves, sistema operativo).
3. Avanza un paso cada vez: explica en una frase qué vas a hacer y deja que el usuario lo ejecute o lo apruebe.
4. Tras cada paso, comprueba que funcionó antes de seguir. Si falla, para y explica el error.
5. No inventes comandos ni opciones: si la documentación del proyecto contradice estos pasos, manda la documentación.
6. Al terminar, haz una prueba real con el objetivo del usuario y dile dónde profundizar.

---

## Pasos de configuración

Comprueba que el entorno de tu proyecto tiene Python ≥3.10 y pip, según los [metadatos de la biblioteca](https://github.com/langchain-ai/langgraph/blob/main/libs/langgraph/pyproject.toml). Instala con el comando oficial:

```bash
pip install -U langgraph
```

Guarda como `prueba_revision.py` este ejemplo mínimo, adaptado de [Interrupts](https://docs.langchain.com/oss/python/langgraph/interrupts). No necesita modelo ni clave:

```python
from typing import TypedDict
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.graph import START, END, StateGraph
from langgraph.types import Command, interrupt

class State(TypedDict):
    approved: bool

def review(state: State):
    return {"approved": interrupt("¿Apruebas continuar?")}

graph = StateGraph(State)
graph.add_node("review", review)
graph.add_edge(START, "review")
graph.add_edge("review", END)
app = graph.compile(checkpointer=InMemorySaver())
config = {"configurable": {"thread_id": "prueba-1"}}
print(app.invoke({"approved": False}, config))
print(app.invoke(Command(resume=True), config))
```

Desde esa carpeta ejecuta `python prueba_revision.py`. La primera salida debe contener `__interrupt__`; la segunda, `approved: True`. La memoria de esta demostración dura mientras vive el proceso; para recuperarse después de cerrarlo hace falta un almacenamiento persistente. Coloca efectos externos después de la revisión: el nodo se vuelve a ejecutar desde su principio al reanudar.

## Comprobación

Interrumpe un flujo de prueba y comprueba que lo reanudas con el estado esperado sin repetir un efecto externo.

## Si algo falla

Revisa las transiciones y la configuración de persistencia antes de añadir más agentes.
