Minimal agent loop: send a prompt, the model can call tools, and the loop persists transcript + state until the model is done.