AI Research Library

A Model Is Not an Agent

Rajesh Ranjan Mahapatra

Agency appears when a model is placed inside a goal-directed feedback loop that can observe, choose, act, update state and stop, while the surrounding system defines what those actions are allowed to mean.

© 2026 Rajesh Ranjan Mahapatra. 27 min read

A Model Is Not an Agent

Agency appears when a model is placed inside a goal-directed feedback loop that can observe, choose, act, update state and stop, while the surrounding system defines what those actions are allowed to mean.

TLDR

  • A language model maps context to outputs. An agent is a configured system whose outputs can become actions that change what the system encounters next.
  • The decisive mechanism is a closed loop: goal, observation, action selection, execution, feedback, state update and a stopping rule. Planning and long-term memory are optional capabilities, not defining ingredients.
  • The same model can therefore be a chatbot, a component in a fixed workflow, or the policy inside an agent. The model weights alone do not tell you which system you have built.
  • Tool access, multiple model calls and fluent self-description are weak evidence of agency. A serious negative control is a fixed workflow that uses the same tools but never lets the model choose the next transition.
  • Architecture and assurance should attach autonomy, permissions, traces and outcome checks to the runtime boundary that can cause effects, rather than treating the foundation model as the accountable unit.

Put the same language model behind three interfaces. In the first, a user asks, “Should I reorder this part?” The model answers yes. In the second, the application always calls an inventory API, gives the result to the model, then renders a recommendation. In the third, the system gives the model a target stock level, a set of permitted operations and repeated observations. The model may inspect inventory, request a purchase, observe whether the request succeeded, revise its next step and stop when the objective is satisfied or an escalation condition fires.

Nothing about the model weights changed. Yet the third system is behaviourally different in the only way that matters for agency: its chosen action can alter the environment that supplies its next observation. That closes a causal loop. The model is a component in the loop, often an important one, but the loop belongs to the configured system.

This distinction sounds semantic until something goes wrong. If an “agent” sends an incorrect instruction, which object do you inspect? The model checkpoint cannot tell you which tools were exposed, what state was assembled, what authority the caller held, whether a tool actually executed, what happened after execution, or why the runtime stopped. Those facts live outside the model. Calling the model the agent hides the mechanisms that determine behaviour and the mechanisms that must be tested.

Part I. The missing loop

The modern argument began long before large language models. Wooldridge and Jennings warned in 1995 that “agent” risked becoming a noise term because the field lacked a universally accepted definition. Franklin and Graesser then surveyed competing definitions and proposed a broad core: an autonomous agent is situated in an environment, senses it, acts on it over time, pursues an agenda, and acts in ways that can affect what it senses later. The useful part of that older debate is not the exact wording. It is the emphasis on ongoing coupling between system and environment.

A one-shot model call has a simpler causal shape. Given context c and parameters θ, it samples or selects an output y from a distribution:

Model: y ~ fθ(c).

That expression does not contain an environment transition. It says nothing about whether the output is displayed to a person, parsed as JSON, ignored, rejected by a validator or converted into a bank transfer. It also says nothing about a next observation. Agency appears only when another system gives the output operational semantics.

Operational agent boundary Minimal agency loop Model / policy proposes the next action Observeworld + task state Actvalidated effect effect becomes later observation Outside the model: identity · authority · tool contracts · state store · execution · tracing · outcome verification · release / recovery
Figure 1. The model-to-agent functional cutaway.The model proposes. The surrounding runtime observes, executes, records and closes the loop. The outer operational boundary adds controls that are not logically required for minimal agency but become necessary when actions can matter. Conceptual figure, no measured quantities.

A minimum useful definition

Definitions can become lists of fashionable features: memory, reflection, planning, browsing, code execution, personas, multi-agent debate. That is the wrong direction. A thermostat is a useful edge case because it is an agent under a weak classical notion even though it has no language model, no explicit plan and no vector database. Conversely, a language model can produce an elaborate plan without being connected to any action loop at all.

For LLM systems, a useful minimum is this: an agent is a goal-conditioned system that repeatedly observes a task environment, chooses among available actions, receives consequences or feedback, updates its operative state, and decides whether to continue. The policy that chooses the action may be an LLM, a classifier, a rule set, an RL policy or a hybrid. The goal may be supplied by a user, a workflow, a standing objective or another agent. Nothing in the definition requires the system to “want” the goal in a psychological sense.

A compact formalism makes the boundary clearer. Let E_t be the environment at step t, s_t the agent’s operative state, g its current goal, and A_t the actions currently available. The runtime performs:

o_t = Observe(E_t); a_t ~ π(a | g, s_t, o_t, A_t); E_{t+1} = Execute(E_t, a_t); s_{t+1} = Update(s_t, o_t, a_t, E_{t+1}).

A stopping function decides whether to continue. If the policy π is implemented by a language model, the model is still not identical to the agent. The agent is the recurrent state-transition system in which that model participates.

Same checkpoint, three system shapes ResponderModelanswer stops Fixed workflowAPI fetchModelrender Agent runtimeModel / policyobserve · choose · act · observe
Figure 2. The same checkpoint can inhabit different causal structures.A model in a fixed sequence is not made into an agent merely by adding API calls. The distinguishing feature is whether the deployed system lets observations influence action choice over repeated environment transitions. Conceptual figure.

Part II. Same model, different systems

The easiest way to see the distinction is to hold the model constant and vary the surrounding system. This is also the cleanest thought experiment because it changes one causal feature at a time.

Thought experiment one: the frozen checkpoint

Suppose checkpoint M receives a customer-service transcript. In configuration A, M generates a suggested reply and stops. In configuration B, an application always performs the same three operations: retrieve account status, ask M for a reply, then present the reply to a human. In configuration C, M can choose from ask user, retrieve order, retrieve policy, propose refund, escalate and finish. After each chosen operation, the runtime returns the result and M chooses again.

Configurations A and B may be useful. B may even contain several model calls. Yet in both, the path through the system is specified by code before the particular case arrives. C is different because the next transition depends on the model’s choice under the current observation. Anthropic makes essentially this architectural distinction between workflows, whose code paths are predefined, and agents, where the model dynamically directs its own process and tool use. That distinction is an implementation convention rather than a law of nature, but it is operationally useful.

Model capability and system agency are therefore separable variables. Improving M may improve each configuration, but it does not convert A into C. Conversely, changing the runtime can increase the system’s degree of agency without changing M at all.

Thought experiment two: remove feedback, keep everything else

Now start with configuration C and cut one wire. Let the system execute the model’s first tool proposal, but never return the result. It instead asks the model for a second action using the original state. The model still has a goal, tools, a scratchpad and perhaps a plan. Yet its later choices cannot condition on the consequences of earlier actions.

This system can produce a sequence of commands, but it no longer has the key adaptive property that Franklin and Graesser highlighted: current actions affect later sensing and thereby later action. If the first action failed, succeeded partially or changed the world unexpectedly, the policy cannot react. Feedback is not “self-critique”; it is information about what the world became after an action.

Close the causal loop, not merely the call graph Open sequencestate₀modelactionno observed consequence Closed loopobservechooseexecuteeffect becomes new evidence
Figure 3. Feedback has a precise meaning.The lower path is not another reasoning pass over the same prompt. It is an observation of consequences from the changed task environment. Conceptual figure.

The fixed-workflow negative control

A strong argument needs a system that looks agentic but should not require the agent explanation. Consider a loan-document preparation pipeline with six model calls, retrieval, a calculator and a document generator. Step 1 classifies the document. Step 2 retrieves the policy. Step 3 extracts values. Step 4 calculates ratios. Step 5 drafts text. Step 6 checks formatting. Every branch is specified in code. The model cannot decide to retrieve a different source, repeat extraction after a contradiction or stop early because evidence is missing.

This pipeline has models, tools, state and multiple steps. It may even be more reliable than an agent for its task. Yet calling it an agent adds little explanatory value because the control policy is the workflow graph, not a model-directed action loop. This is the serious negative control for loose definitions such as “an LLM that uses tools” or “an LLM that performs multi-step work”.

The negative control matters architecturally. If the sequence is enumerable and stable, a workflow gives you simpler testing, narrower permissions and easier recovery. Forcing an agent into that shape often spends latency and increases behavioural variance without buying useful flexibility. Anthropic explicitly recommends starting with the simplest pattern that works and using agents when model-directed flexibility is needed. That is practitioner guidance, not a universal theorem, but it aligns with the causal distinction.

Two questions classify most LLM application shapes Who chooses the next transition? fixed code → runtime policy Does an executed effect become a later observation? Workflowfixed transition graphmay use models and tools Agentpolicy chooses actionseffects feed later choices Reactive workflowfeedback existsbut transitions remain coded Open-loop proposermodel chooses commandsbut cannot observe effects
Figure 4. A practical classification matrix.Neither axis is metaphysical. They are engineering questions that reveal where the control policy lives and whether the system can adapt to consequences. Conceptual figure.
The argument in one passChart · flow
flowchart TD
  A["Part I. The missing loop"] --> B["Part II. Same model, different<br/>systems"]
  B --> C["Part III. State, memory and<br/>goals without anthropomorphism"]
  C --> D["Part IV. The operational<br/>boundary is larger than<br/>minimal agency"]
  D -. "re-test" .-> A
  classDef first fill:#0a1424,stroke:#B96D00,stroke-width:2px,color:#e6f3ff
  classDef step fill:#0a1424,stroke:#3f7da0,stroke-width:1px,color:#e6f3ff
  class A first
  class B,C,D step
A structural route through A Model Is Not an Agent, from Part I. The missing loop to Sources and research boundary. Reading use: follow the relation, then test it against the surrounding evidence and limits.

Part III. State, memory and goals without anthropomorphism

Once the loop is visible, several common confusions become easier to remove.

State is necessary; long-term memory is not

An agent must have enough operative state to make its next choice depend on where it is in the task. That state need not be a persistent memory store. It can be the current environment observation, a small step counter, a database record, a workflow token or the active context window. A reactive control agent may carry almost no internal history.

Long-term episodic or semantic memory is an optional augmentation. Generative Agents, for example, added a natural-language memory stream, retrieval and reflection to support believable behaviour over time. Voyager added an executable skill library and environment feedback to support open-ended behaviour in Minecraft. These are important capabilities, but they are subclasses of agent architecture rather than prerequisites for agency.

Do not use “memory” as a synonym for every piece of persistent information. The inventory quantity in a source system is world state. The record that the agent placed an order is an event. A retrieved purchasing policy is context. A summary of a previous run may be episodic memory. Collapsing them into one bucket makes it hard to know what can be stale, what can be trusted and what can authorise an action.

A goal is a control variable, not a claim about desire

Agent language easily slides into psychology. “The agent wants to resolve the case” may be harmless shorthand, but it hides a more useful engineering description: the runtime was configured with a termination condition, reward proxy, task objective or instruction that makes some future states preferable to others.

A warehouse agent can be given stock ≥ 3 as an objective. A research agent can be asked to produce an answer that satisfies evidence criteria. A coding agent can be given a test suite as the external condition it is trying to make pass. None of this implies subjective desire. The word “goal” simply marks the condition that organises action selection across more than one step.

Planning is optional

An agent may construct a plan before acting, may follow a local policy one step at a time, or may alternate between the two. ReAct made the interleaving explicit for language models by alternating reasoning traces and environment actions. Its value for this paper is structural: actions return observations that can change later reasoning. The mechanism does not require a grand plan.

This matters because “agent = planner” fails on both sides. Reactive agents exist without explicit plans, while a one-shot model can produce a detailed plan that no system will ever execute. Paper 115 in this canon treats plans, policies and replanning separately because they are choices inside an agent architecture, not the definition of an agent itself.

Worked example: the stockroom. A synthetic parts store has two units of a filter and a target of three. A responder model says “order five”. A workflow always fetches stock and drafts a purchase request. An agent runtime instead observes stock, asks a policy for its next action, validates the action against a quantity cap, executes it, observes the new stock and stops when the target is met. The same sentence “order five” has different causal status in each system: advice, a workflow field, or a proposed action in a feedback loop.
Worked case: agency lives in the transition sequence Observestock = 2 Proposeorder 5 Validatecap ≤ 10 Executestock → 7 Read backstock = 7 Stopgoal met
Figure 5. A minimal agent trajectory.The model proposal is only one event. Validation, execution, readback and stopping are runtime responsibilities. Synthetic worked example.

What agent benchmarks actually measure

Modern benchmarks reinforce the system-level view because they cannot evaluate useful agency by scoring a single generated string. AgentBench places models in eight interactive environments and evaluates multi-turn decision-making. GAIA uses questions that require combinations of reasoning, browsing, multimodal handling and tool use. ToolSandbox explicitly evaluates stateful tool execution, implicit state dependencies and intermediate milestones. τ-bench compares the final database state with an annotated goal state and measures consistency across repeated trials.

The benchmark details differ, but their shared move is important: evaluation shifts from isolated output quality to trajectories through an environment. τ-bench reported that the function-calling agents it tested succeeded on fewer than half of its tasks and were inconsistent across repeated runs. ToolSandbox found state dependency, canonicalisation and insufficient-information cases challenging even for strong models. AgentDojo adds adversarial tool-returned content and asks whether an agent both accomplishes the user task and preserves security properties. TheAgentCompany goes further by creating a simulated software company where agents browse, write code, run programs and communicate with co-workers.

These results should not be universalised across models or future systems. They are benchmark-bound measurements. Their more durable lesson is methodological: when a system can act, the object of evaluation includes which action was chosen, with which arguments, after which observation, what changed, whether rules were followed, and whether the stopping condition was justified. A leaderboard number for the underlying model cannot answer those questions.

Published evidence. AgentBench, GAIA, ToolSandbox, τ-bench, AgentDojo and TheAgentCompany all evaluate models inside interactive or state-changing environments rather than treating next-token quality as sufficient evidence of agent performance. This supports the paper’s system boundary. It does not establish one universal definition of agency.
Once actions matter, the unit of evidence expands Model evaluationprompt→ outputscore correctness, style,calibration or support Agent evaluationscore transitions, effects, policy,recovery and final world state
Figure 6. The evaluation object changes with the causal boundary.Output scoring remains useful inside an agent, but it no longer covers the whole system. Conceptual figure derived from the design of interactive agent benchmarks.

Part IV. The operational boundary is larger than minimal agency

Classical definitions ask whether a system senses and acts autonomously over time. Production architecture has another problem: who may cause which effect, on whose behalf, and how can the effect be reconstructed afterwards? Those questions are not necessary to decide whether a thermostat is an agent. They are necessary to decide whether a software agent should be allowed to change consequential state.

For that reason, it helps to distinguish two boundaries. The minimal agency boundary contains a goal, observations, action choice, execution feedback, state and stopping. The operational agent boundary also contains identity, tool contracts, authority, evidence capture, effect verification, cost limits and recovery. Accountability belongs here. It is a property of the sociotechnical system, not a hidden faculty in the model.

Current implementation frameworks make this separation visible. OpenAI’s Agents SDK describes agents as LLMs equipped with instructions and tools, but the SDK’s runner owns the loop, tool execution, guardrails, handoffs, sessions and tracing. The documentation explicitly distinguishes using a lower-level model API, where the application owns loop and state handling, from using an agent runtime that manages them. This is vendor-specific implementation evidence, not a general scientific definition, but it illustrates the architecture cleanly.

A production-shaped case: cancellation with changing state

Consider a customer who asks a retail assistant to cancel an order “if it has not shipped”. The surface request is simple. The path is not. The system must identify the order, establish that the requester is entitled to act on it, determine the current fulfilment state, interpret the cancellation policy, choose whether to ask a question, cancel, decline or escalate, and then verify what actually happened. The order can also change state while the run is in progress.

Start with a fixed workflow. It always performs five operations: authenticate the user, fetch the latest order, evaluate a deterministic cancellation rule, call the cancellation API if permitted, then read the order back. This is an excellent design when the business path is stable and the necessary information is known. A model can still draft the explanation to the customer. Nothing is gained by letting a model decide whether identity verification or the cancellation rule should run. The sequence is known, cheap to test and consequential enough that determinism is valuable.

Now change one condition. Some orders are fulfilled by external merchants whose status systems expose different fields. Some have split shipments. Some cancellation failures are transient. Some customers refer to “the blue one” rather than an order number. Some orders require a choice between cancelling the remaining items and preserving those already dispatched. The path is no longer fully enumerable as one clean sequence. A model-directed policy may now be useful for information gathering and branch selection.

A bounded agent runtime could expose five typed actions: find_order, get_fulfilment_state, ask_customer, request_cancellation and escalate. The model is allowed to choose among them, but it cannot manufacture a sixth action. The runtime separately enforces identity, order ownership, current policy and the precondition that the cancellable quantity is non-zero. The cancellation tool itself accepts only an order identifier and an enumerated scope such as remaining_items or whole_order.

Suppose the first observation shows two candidate orders. The policy chooses ask_customer. The answer identifies one order. The next observation shows one item already dispatched and two items still in the warehouse. The policy proposes cancelling the remaining two. The authority layer verifies that partial cancellation is permitted and calls the tool. The API times out after accepting the request.

This is where a model-only description becomes actively misleading. The model cannot know whether the cancellation committed. Retrying blindly could create a duplicate effect if the endpoint is not idempotent. Declaring failure could cause the customer to place a replacement order unnecessarily. The runtime must move into an unknown outcome state, query the authoritative order record and choose the next step from observed state rather than from the text of the timeout. If the readback shows the two items cancelled, the goal is satisfied. If they remain active and the operation is safely retryable, the runtime may permit another request. If the source remains ambiguous, it escalates.

The agentic part of this case is narrow but real. The model helps discover the path through incomplete information and changing observations. The deterministic part is equally important: identity, policy preconditions, typed cancellation scope, idempotency rules and outcome verification. Dynamic path selection does not imply dynamic authority. The architecture can allow the model to decide what evidence to seek next without allowing it to decide whether a user is entitled to cancel someone else’s order.

This separation also gives cleaner tests. Model tests ask whether the policy chooses sensible information-gathering and escalation actions across varied cases. Contract tests ask whether malformed or over-broad tool arguments are rejected. State-transition tests inject timeouts, stale reads and mid-run shipment events. End-to-end tests assert the final order state and customer-visible response. If the team instead labels the foundation model “the agent” and evaluates only its textual decisions, all four evidence classes become blurred.

Worked scenario boundary. This cancellation case is synthetic. It is designed to expose the mechanism rather than claim a deployment result. The important intervention is to vary path uncertainty while keeping authority rules fixed: when the path is predictable, the workflow baseline should win on simplicity; when evidence gathering must adapt, a bounded agent can earn its extra complexity.

Changing the model does not move the control boundary

Another useful test is to imagine replacing the model with a much stronger checkpoint. The new model may infer the correct order from vague language, notice contradictions earlier and select better tools. Those gains can reduce the number of steps or the escalation rate. They do not remove the need for an execution boundary. A more capable model still does not become the database transaction, the identity provider or the source of legal authority merely by being more accurate.

The reverse is also true. A small model can sit inside a genuine agent loop if the task is narrow enough. A classifier might choose among inspect, act and stop in a control system. Calling only frontier language models “agents” confuses the intelligence of the policy with the topology of the system. The design question is therefore two-dimensional: how capable must the policy be, and how much agency should the surrounding runtime expose?

Keeping those questions separate prevents an expensive category error. Teams often respond to a reliability problem by upgrading the model when the real defect is stale observation, unconstrained tool authority, missing idempotency, poor stopping logic or a fixed workflow pretending to be adaptive. Better reasoning cannot repair a broken causal boundary.

The three-principal problem starts immediately

Suppose a user asks an assistant to “cancel my order if it has not shipped”. The user is the requesting principal. The model is the proposing mechanism. The tool credential is the executing principal. These roles may collapse in a demo, but they should not collapse in an operational design.

The model’s proposal should not itself be authority. A deterministic layer should decide whether the requester owns the order, whether cancellation is permitted in the current state, whether the tool is scoped to that order and whether the effect requires confirmation. After execution, the runtime should read the state back rather than infer success from a fluent tool response. Agency determines who chooses a candidate action; authority determines whether that action may become real.

Agency chooses. Authority constrains. Evidence proves. Agent loopgoal + observationmodel proposalnext-step choicestate update Authority kernelidentitypermissionschema + limitsapproval rules Worldtool executeseffect recordedstate read backverified outcome becomes the next observation
Figure 7. The operational agent boundary.The proposal stream and the authority path are deliberately separate. The agent may request an action it is not permitted to execute. Conceptual architecture figure.

Failure boundary: where the distinction stops helping

The model-agent distinction is an analytic tool, not a metaphysical wall. It becomes less crisp when the policy and runtime are learned together, as in embodied reinforcement learning, or when a model internally simulates long trajectories before emitting one action. You can choose a boundary around the deployed policy plus its sensor and actuator interfaces and still obtain a useful agent description. What matters is that the boundary includes the state transitions that make actions consequential.

There is also a fuzzy edge between workflow and agent. A workflow can contain a model-selected router, bounded retries or model-driven subtask generation. Rather than arguing over labels, record which transitions are dynamically selected, what action surface is exposed, and how much authority follows those choices. Agency is often graded even when the architecture decision must be binary.

Finally, the definition does not prove intelligence. A thermostat can satisfy a weak agency test. An agent can be incompetent. A language model can be highly capable without acting as an agent. Conflating these constructs creates bad evaluation: agent benchmarks then get read as pure model-IQ tests, while model benchmarks get read as evidence that a deployed agent can handle state, tools and recovery.

The executable artefact: a minimal bounded agent scaffold

The following Python uses no external model or private data. Its “model” is a deterministic policy stub so the system mechanics remain visible. Replace that stub with an LLM call and the causal structure does not change. The positive case reaches the stock target. The negative case proposes an excessive order and is blocked by a deterministic authority check before any effect occurs.

from dataclasses import dataclass

@dataclass
class World:
    stock: int = 2

@dataclass
class Action:
    name: str
    quantity: int = 0

class PolicyModel:
    """A model-like component: observation in, proposal out."""
    def propose(self, goal, observation):
        if observation["stock"] < goal["minimum_stock"]:
            return Action("place_order", 5)
        return Action("finish")

class UnsafePolicyModel(PolicyModel):
    def propose(self, goal, observation):
        return Action("place_order", 100)

def observe(world):
    return {"stock": world.stock}

def authorise(action):
    if action.name == "place_order" and not 1 <= action.quantity <= 10:
        return False, "quantity outside permitted range"
    return True, "allowed"

def execute(world, action):
    if action.name == "place_order":
        world.stock += action.quantity
        return {"status": "executed", "new_stock": world.stock}
    if action.name == "finish":
        return {"status": "finished", "new_stock": world.stock}
    raise ValueError("unknown action")

def run_agent(model, world, goal, max_steps=4):
    trace = []
    for step in range(max_steps):
        before = observe(world)
        proposal = model.propose(goal, before)
        allowed, reason = authorise(proposal)
        if not allowed:
            trace.append({"step": step, "proposal": proposal,
                          "status": "blocked", "reason": reason,
                          "world": observe(world)})
            return trace
        effect = execute(world, proposal)
        after = observe(world)  # readback, not an inferred success
        trace.append({"step": step, "proposal": proposal,
                      "effect": effect, "world": after})
        if proposal.name == "finish":
            return trace
    trace.append({"status": "stopped", "reason": "step budget exhausted"})
    return trace

GOAL = {"minimum_stock": 3}

positive = run_agent(PolicyModel(), World(stock=2), GOAL)
negative = run_agent(UnsafePolicyModel(), World(stock=2), GOAL)

assert positive[-1]["proposal"].name == "finish"
assert positive[-1]["world"]["stock"] == 7
assert negative[-1]["status"] == "blocked"
assert negative[-1]["world"]["stock"] == 2

print("positive final world:", positive[-1]["world"])
print("negative final event:", negative[-1])

Expected output is a positive final stock of seven and a blocked negative event that leaves stock at two. Notice which responsibilities are outside PolicyModel: observing, looping, permission checking, execution, readback, state progression, step budgeting and trace capture. Those responsibilities are not implementation clutter around the agent. They are much of what makes the system an agent you can operate.

Why the stub is a feature rather than a limitation

Using a deterministic policy isolates the architecture from model capability. If an external LLM were inserted, failure could be blamed on model reasoning. Here the same conclusion follows with a trivial policy: agency depends on the recurrent system structure. The artefact is therefore a negative control against the claim that language generation itself is the source of agency.

How the claim changes under pressureChart · state
stateDiagram-v2
  [*] --> Claim
  state "A minimum useful definition" as Claim
  state "Thought experiment one: the<br/>frozen checkpoint" as Test
  state "Thought experiment two: remove<br/>feedback, keep everything else" as Revision
  Claim --> Test: expose mechanism
  Test --> Decision: evidence survives
  Test --> Revision: rival survives
  Revision --> Claim: narrow or rebuild
  Decision --> [*]
The revision loop begins with A minimum useful definition and keeps counterexamples inside the reasoning path. Reading use: follow the relation, then test it against the surrounding evidence and limits.

The agent boundary test

Before selecting an agent framework, score the proposed system using five questions. This is not a scientific scale. It is a design instrument for forcing the architecture boundary into the open.

1. Goal continuity0 / 1

Does the system carry a task objective or termination criterion across more than one step?

2. Dynamic transition choice0 / 1

Can the policy choose the next action or information request from a set of alternatives at runtime?

3. Consequence feedback0 / 1

Can the result of an executed action change the observation used for a later choice?

4. Operative state0 / 1

Does the system preserve enough state to know what has happened, what remains and when to stop?

5. Action accountability0 / 1

For effects that matter, can you identify requester, proposal, authority decision, execution result and observed outcome?

InterpretationUse the pattern, not the total

Items 1 to 4 describe minimal agent mechanics. Item 5 decides whether the operational boundary is adequate for consequential action.

A system that scores zero on dynamic transition choice is usually better described as a workflow even if it uses an LLM at every step. A system with dynamic choice but no consequence feedback is an open-loop proposer. A system with the first four properties but no action accountability can still be an agent in the weak technical sense, but it is a poor candidate for consequential authority.

Choose architecture from uncertainty in the path, then bound authority by consequence Path uncertainty: enumerable → discovered during execution Consequence of action Responderno action authority Workflowfixed controlsknown sequence Bounded agentdynamic pathtyped actionsruntime limits higher consequence demands narrower authority
Figure 8. Architecture decision field.Agentic flexibility is most valuable when the path cannot be enumerated cheaply in advance. Consequence determines how tightly the action surface must be constrained. Illustrative decision instrument, not measured data.
Practitioner synthesis. A useful architecture decision is to spend agency only where path uncertainty requires it. Keep identity, permissions, calculations, policy gates and effect verification outside the generative policy whenever they can be made deterministic. This proposition is an engineering judgement to test locally, not a published universal result.

Name the system you must control

Calling a foundation model “the agent” is attractive because the model is the most visible and least deterministic component. It is also the wrong unit for most architecture decisions. The model does not by itself hold the user’s authority, execute an API, observe the resulting world state, decide how long a run may continue or produce the evidence needed to reconstruct an effect.

The durable distinction is causal. A model produces proposals from context. An agent couples a policy to an environment through a goal-directed feedback loop. The loop may use planning, memory, retrieval, tools, reflection or multiple specialist models, but none of those features individually creates agency. Tool use without dynamic control can remain a workflow. Multiple model calls without consequence feedback can remain an open sequence. A long-term memory store can enrich an agent but does not define one.

This changes the design review. Do not ask first which model will be “the agent”. Draw the system boundary. Mark the goal, observation sources, operative state, candidate actions, transition chooser, authority checks, execution path, readback, stopping conditions and trace. Then ask which of those transitions truly need model-directed flexibility. Where the path is known, prefer the simpler mechanism. Where the path must be discovered during execution, expose a bounded action surface and evaluate trajectories rather than final prose.

It also changes assurance. Model evaluation remains necessary, but agent evaluation must include stateful tasks, tool arguments, intermediate transitions, rule adherence, side effects, retries, unknown outcomes and recovery. A model that scores well in isolation can still inhabit a bad agent. A modest model can inhabit a well-controlled workflow that is the better design for the job.

The word “agent” earns its keep only when it points to these mechanisms. If it merely means “something with an LLM”, discard it. If it identifies the configured system that can pursue a goal, select actions, receive consequences and change the world under bounded authority, then it tells you exactly what must be engineered and exactly what must be held accountable.

The evidence conversationChart · sequence
sequenceDiagram
  participant Q as Question
  participant M as Mechanism
  participant E as Evidence
  participant D as Decision
  Q->>M: Part I. The missing loop
  M->>E: A minimum useful definition
  E-->>M: compare rival explanations
  E->>D: Sources and research boundary
  D-->>Q: revise scope or act
Question, mechanism, evidence and decision exchange the burdens developed in A Model Is Not an Agent. Reading use: follow the relation, then test it against the surrounding evidence and limits.

Sources and research boundary

The argument combines published agent theory and benchmark evidence with explicitly identified practitioner synthesis. Benchmark numbers are reported only in the scope of the cited evaluations. Product documentation is used to illustrate implementation boundaries, not as evidence for a general scientific claim.

  1. Wooldridge, M. & Jennings, N. R. (1995). Intelligent Agents: Theory and Practice. Knowledge Engineering Review, 10(2). Primary theoretical source.
  2. Franklin, S. & Graesser, A. (1996). Is it an Agent, or just a Program? A Taxonomy for Autonomous Agents. ATAL. Primary theoretical source.
  3. Yao, S. et al. (2022/2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023. Primary research.
  4. Park, J. S. et al. (2023). Generative Agents: Interactive Simulacra of Human Behavior. UIST 2023. Primary research.
  5. Liu, X. et al. (2023/2024). AgentBench: Evaluating LLMs as Agents. ICLR 2024. Primary benchmark.
  6. Mialon, G. et al. (2023). GAIA: a benchmark for General AI Assistants. Primary benchmark.
  7. Yao, S. et al. (2024/2025). τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains. ICLR 2025. Primary benchmark.
  8. Lu, J. et al. (2025). ToolSandbox: A Stateful, Conversational, Interactive Evaluation Benchmark for LLM Tool Use Capabilities. Findings of NAACL 2025. Primary benchmark.
  9. Debenedetti, E. et al. (2024). AgentDojo: A Dynamic Environment to Evaluate Prompt Injection Attacks and Defenses for LLM Agents. Primary security benchmark.
  10. Xu, F. F. et al. (2024, revised 2025). TheAgentCompany: Benchmarking LLM Agents on Consequential Real World Tasks. Primary benchmark.
  11. Anthropic (2024). Building effective agents. Official practitioner source for the workflow-versus-agent implementation distinction.
  12. OpenAI. OpenAI Agents SDK documentation. Official implementation source for runtime loop, tools, guardrails, sessions and tracing.
Rajesh Ranjan Mahapatra · Machine Intelligence Canon