# Reanuda tareas largas desde puntos de control locales

Conserva el progreso entre ejecuciones sin reiniciar límites ni convertir texto guardado en instrucciones de sistema.

## Divide una tarea larga en partes recuperables

Una tarea que continúa durante varias sesiones necesita progreso persistente. Reutiliza `mandapi_worker.py` de la [guía del agente sin interfaz](/es/cookbook/building-agents/headless-agent/). El archivo de tu aplicación conserva tarea, modelo, conversación, contador de intentos, estado y respuesta. La instrucción de sistema permanece en el código.

Trata el punto de control como datos privados. Usa un solo proceso escritor, conserva la misma tarea y el mismo modelo al reanudar y muestra los errores de archivos dañados o incompatibles. Un archivo nuevo reinicia la asignación; un planificador debe mantener uno estable por tarea.

## Reanuda un paso

Guarda este código junto al ejecutor como `resume_task.py`. La prueba simula dos invocaciones independientes sin contactar MandAPI. La primera consulta una referencia; la segunda recupera la conversación y genera la respuesta.

```python
from pathlib import Path
from tempfile import TemporaryDirectory
from mandapi_worker import load_state, step, demo, MAX_STEPS


def resume_once(job, checkpoint, ask, model):
    state = load_state(checkpoint, job, model)
    events = []
    step(state, checkpoint, ask, events.append)
    return state, events


if __name__ == "__main__":
    with TemporaryDirectory() as folder:
        checkpoint = Path(folder) / "demo-run.json"
        job = "How long does shipping take at the demo shop?"
        first, _ = resume_once(job, checkpoint, demo, "offline-demo")
        assert first["attempts"] == 1 and first["status"] == "ready"
        resumed, events = resume_once(job, checkpoint, demo, "offline-demo")
        assert resumed["attempts"] == 2 and resumed["status"] == "done"
        assert resumed["attempts"] <= MAX_STEPS
        print(events)
```

## Ejecuta una parte acotada

Ejecuta `python resume_task.py` para comprobar la recuperación local. Con el ejecutor real, `python mandapi_worker.py "TU TAREA" --once --checkpoint task-run.json` admite como máximo una solicitud de chat. Configura primero `MANDAPI_API_KEY` y `MANDAPI_MODEL_ID`. Repetir el comando continúa la tarea; el límite persistente de cuatro intentos no se reinicia. El endpoint normal es `https://api.mandapi.com/v1/chat/completions`.

## Prueba interrupciones y revisa

Sustituye `ask` por una función que lance `TimeoutError`. Vuelve a cargar el archivo y confirma que el contador aumentó antes del fallo. Así evitas reintentos ilimitados tras reinicios, aunque no puedes saber si una solicitud remota interrumpida generó cobro. No hay reintentos automáticos ni garantía de gasto exacto.

Mantén las herramientas en modo de lectura durante las pruebas. Añade revisión humana antes de introducir acciones externas. Para conversaciones extensas, utiliza [compactación del contexto](/es/cookbook/building-agents/compact-context/) conservando mensajes recientes e identificadores; verifica que la respuesta reanudada siga usando la evidencia correcta.

## Referencias

- [https://openrouter.ai/docs/cookbook/building-agents/long-horizon-agents](https://openrouter.ai/docs/cookbook/building-agents/long-horizon-agents)
