An agent should not run on vague intent alone.
That is the short answer.
If you want the practical version, use this:
Goals tell the agent what outcome to pursue. Constraints define the boundaries on how it may pursue that outcome. Success conditions define what evidence lets the run stop.
Real agents need all three.
Without a goal, the system has no direction.
Without constraints, it has no boundary.
Without success conditions, it has no clean way to decide whether it is done.
That matters because many agent failures start before the first tool call. The system is given a request that sounds useful to a human, but not an objective that is operational enough for a runtime to execute safely and coherently.
This article builds on What Is an AI Agent?, The Autonomy Spectrum: From Stateless Calls to Goal-Directed Systems, and The Sense-Think-Act Loop. Those pieces explain what an agent is, how autonomy varies, and how the runtime loop works. This one explains what that loop is actually optimizing for.
Why a User Request Is Not Yet an Agent Objective
Humans are good at filling in missing structure.
Agents are not.
A person can hear:
Figure out why the nightly billing job failed and take the safest next step.
and immediately infer a lot of hidden detail:
- the real outcome is restored service, not just an explanation
- reckless fixes are not acceptable
- there are likely permissions, approval, and time boundaries
- success is not just saying something plausible
An agent cannot safely depend on all of that staying implicit.
The raw user request is a starting point.
It is not yet a usable runtime objective.
To become usable, the request has to be translated into something more explicit:
- what outcome should be achieved
- what the system is allowed to do or not do
- what evidence counts as completion
- what should happen if completion is not possible inside those boundaries
That translation step matters because otherwise the runtime ends up optimizing for poor proxies.
It might optimize for:
- sounding helpful
- doing the maximum number of actions
- avoiding a hard stop
- producing a long answer instead of a correct result
Those are not the same thing as doing the job well.
Goals: The Outcome the Agent Is Trying to Reach
A goal defines the target state.
It answers the question:
What should be true if this run goes well?
For the billing example, the goal is not:
analyze logs
That is only a step.
It is closer to:
- identify the most likely cause of the failure
- take or recommend the safest valid next action
- move the service toward recovery without creating a larger incident
That is what gives the loop direction.
As the agent senses new state, updates its plan, or chooses a tool, the goal is the thing that tells it whether the next move is moving closer to the right outcome or just creating motion.
But goals alone are not enough.
A goal can still be too broad.
For example:
resolve the customer issuefix the production outagecomplete the refund
These point in the right direction, but they still leave open critical questions:
- what actions are allowed?
- what tradeoffs are acceptable?
- what counts as success?
- when should the system stop and ask for help?
That is why a goal is necessary, but not sufficient.
Constraints: The Boundaries on How the Agent May Pursue the Goal
Constraints define the acceptable operating region.
They answer questions like:
- what tools may be used?
- what data may be accessed?
- which actions are read-only and which are write actions?
- what cost, latency, retry, or time budget applies?
- what policy or compliance rules cannot be crossed?
- when is human approval mandatory?
This is why constraints are not just a bolt-on safety layer.
They are part of the objective itself.
In practice, constraints often include:
- permission boundaries
- budget boundaries
- scope boundaries
- policy boundaries
- escalation boundaries
Suppose the same billing-job agent has these constraints:
- it may inspect logs, traces, job history, and recent deploys
- it may retry the failed job once if a known transient condition is confirmed
- it may not roll back production without human approval
- it must stop after 15 minutes or 8 tool actions
- it must escalate if confidence stays low or the issue affects payments already in progress
Now the runtime has shape.
It is not just being told what good looks like. It is being told where it may and may not go while trying to get there.
That is what makes bounded autonomy practical.
An agent does not become better because it can do more things.
It becomes better when the allowed operating range is matched to the task.
Success Conditions: The Evidence That Lets the Run Stop
Success conditions define how the agent knows it is done.
They answer the question:
What observable evidence is strong enough for this run to stop with a successful result?
This is different from the goal.
The goal says where the system is trying to get.
The success condition says what proof is required before the system can say it got there.
For the billing example, weak success conditions would sound like:
the agent produced a diagnosisthe agent attempted a fix
Those are activity conditions.
They are not outcome conditions.
Stronger success conditions would be closer to:
- the likely cause is identified with evidence from logs or dependency state
- the chosen action is inside the allowed permissions
- the job is either recovered or cleanly escalated with the needed evidence attached
- the result is recorded in a form a human operator can verify
Now the agent has stop logic.
That matters because systems without clear success conditions often drift into one of two failure modes:
- they stop too early because a plausible answer sounded finished
- they keep going because there is no explicit threshold for done
This is one reason production agents need stopping conditions, approval checkpoints, or both.
Sometimes the correct result is not success.
Sometimes the correct result is:
insufficient evidenceoutside permissionsrequires human approvalgoal cannot be reached within budget
That is still good system behavior.
Stopping without success is not the same thing as failing blindly.
The B.A.S.E. Execution Envelope
The cleanest way to use this in practice is to combine the three pieces into one design object.
Call it The B.A.S.E. Execution Envelope.
B.A.S.E. stands for:
1. Aims
What outcome should be true if the run goes well?
This is the goal in operational form.
2. Boundaries
What actions, resources, permissions, and risk limits shape the run?
This is the constraint layer.
3. Stops
What evidence allows the run to stop as success, stop as incomplete, or escalate?
This is the success-condition layer.
4. Escalations
What should happen when the goal cannot be met cleanly inside the allowed boundaries?
This keeps the system from improvising past its authority.
That is the execution envelope.
If you cannot state those four parts clearly, the agent is probably under-specified.
This lens is useful because it turns a fuzzy product instruction into something the runtime can actually use.
Take this request:
Help the support team resolve refund requests faster.
A weak objective says:
- handle refund requests
A stronger execution envelope says:
- aims: resolve eligible refund cases or prepare a clean escalation package
- boundaries: use only the order system, policy database, and support platform; issue refunds only below the approved threshold
- stops: case is resolved with policy-compliant action and recorded reasoning
- escalations: route fraud signals, policy ambiguity, and above-threshold refunds to a human with the necessary evidence attached
That is much closer to something an agent can run.
It also gives the team better hooks for planning and task decomposition and tool use, because the runtime now knows what counts as progress, what capabilities are allowed, and what completion means.
Where Objective Contracts Usually Break
Many teams blame the model when the deeper problem is execution-envelope design.
The most common failures look like this.
The Goal Is Too Vague
The system is told to help, handle, improve, or fix without a crisp target state.
The result is local guesswork.
The Constraints Are Too Loose
The system can technically do many things, but no one decided:
- what actions require approval
- how much cost is acceptable
- when retries should stop
- what data should remain off-limits
The result is overreach, thrashing, or silent policy drift.
The Success Conditions Measure Activity Instead of Outcome
The system is rewarded for:
- taking steps
- returning text
- completing a checklist
instead of actually reaching the intended result or escalating correctly.
The result is a busy system that still fails the real task.
Failure and Escalation Are Not Distinguished
The runtime is not told what to do when the goal cannot be achieved cleanly inside the constraints.
So it improvises.
That is often where unreliable agent behavior enters the loop.
Why This Changes Planning, Tools, and Evaluation
Once the objective contract is clear, a lot of later engineering decisions get easier.
Planning gets easier because the system knows what the plan is optimizing for and where the branches should stop.
Tool use gets easier because the runtime knows which capabilities are allowed and under what conditions.
Memory gets easier because the system can store what matters to the objective instead of every possible detail.
Evaluation gets easier because the team can check:
- whether the target state was reached
- whether the constraints were respected
- whether the exit test was applied correctly
That is why this topic sits upstream of many other agent-engineering decisions.
If the execution envelope is weak, stronger planning will only help the system chase the wrong thing more effectively.
If the execution envelope is strong, the rest of the stack has a much better chance of behaving coherently.
A Practical Test
Before letting an agent run, ask three questions:
- Does it know what good looks like?
- Does it know what boundaries it must stay inside?
- Does it know what evidence is enough to stop?
If any answer is no, the system probably needs a better execution envelope before it needs a better model.
FAQ
Does every agent need an explicit goal?
Yes, at least in substance. The representation can be lightweight, but the runtime still needs a defined outcome to optimize for.
Is the user’s prompt already the goal?
Usually not. A prompt is often raw intent. The agent still needs that intent translated into a target state, operating boundaries, and exit logic.
What is the difference between a goal and a success condition?
A goal defines the desired outcome. A success condition defines the observable evidence that lets the system stop and say the outcome was reached well enough.
Are constraints the same thing as guardrails?
They overlap, but they are not identical. Guardrails usually refer to safety and misuse controls. Constraints also include permissions, scope, budgets, retry limits, and human approval rules.
What should an agent do if it cannot reach the goal inside its constraints?
It should stop, report, or escalate. A bounded refusal or escalation is often the correct behavior.
Can a workflow have goals, constraints, and success conditions too?
Yes. These ideas are not unique to agents. The difference is that agents need them even more because they make more runtime decisions for themselves.
How do goals and constraints affect planning?
They determine what the plan is allowed to optimize for, what branches are legal, what tools may be used, and where the system should stop or ask for help.
How do you know whether the success conditions were designed well?
They should support reliable stopping, reflect the real business outcome, and distinguish successful completion from blocked or escalated cases.
Where should human approvals fit?
At the points where the risk, authority, or irreversibility of the next action exceeds the autonomy you want the system to hold on its own.
What topic comes next after this one?
Usually Planning and Task Decomposition or Tool Use: How Agents Take Action, because once the objective is clear, the next question is how the system should pursue it.