Every agent goal needs an exit condition.
Before starting a task your agent needs to know:
β What does βdoneβ look like?
β How do I verify I actually got there?
β How much am I allowed to spend trying?
Without that last one, βkeep trying until it worksβ can become a very expensive loop.
Some tasks are impossible because of a missing credential, broken dependency, unavailable API, or simply a bad assumption in the original plan.
You donβt want the agent retrying the same thing 40 different ways, or reverse engineering their way around an unsolvable ask.
The loop I want is much simpler:
Goal β Attempt β Verify
The task is done when verification succeeds, if not try again while thereβs still budget.
If the budget is spent, the agent should stop and report the blocker.
The more autonomous we make agents, the more important this becomes.
A definition of done tells the agent when to succeed and a budget tells it when to give up.