A meaningful share of our daily work is executed by AI agents: research, code changes, QA passes, report writing. People assume this requires an orchestration framework. It requires a loop:

let messages = [system, task];

for (let step = 0; step < MAX_STEPS; step++) {

const res = await llm(messages, TOOLS);

if (res.type === 'text') return res.text; // the model decided it is done