Agents, MCP and skillsLoading progress…

State and actions

Design a bounded observe-act loop with explicit state, stopping conditions and a verifiable task outcome.

State and actions

An agent is a loop: observe, choose an action, act, observe again. To design it, say precisely what it can observe and which actions it may request. In the room example the agent sees only its current room and, after inspecting, the items there. The key in room C is hidden state: nothing in A or B reveals it. And every observation has an age: if the world changes after it was taken, the agent is reasoning from a stale picture.

ABC
observation: { room: A, exits: [B], items: unknown (not inspected) } inventory: [] legal actions: move:B, inspect

The agent only knows what its observations show. The key is in room C, but nothing in A or B says so, and an observation can go stale: if the world changes after it was taken, the agent is still acting on the old picture. An external write counts as done only after a confirmation; a timeout means "unknown".

Move through the rooms. What do you actually know at each point?

Predict first. Can an agent safely assume an external write succeeded before receiving confirmation?

Chapter context

An agent chooses actions based on a task and observations, often over several model calls. Useful autonomy requires bounded resources, explicit feedback and a stopping rule that recognizes both success and inability to continue.

Chapter reference: math, worked example & code

This section belongs to the whole chapter, so it is the same on every lesson in it and may cover a different lesson's topic. The code for the experiment you just ran is inside the experiment itself.

Math and notation

Represent a run as states s0,s1,... and actions a0,a1,... with observed transitions. A budget constraint can bound the sum of measured call costs. History-dependent token growth means a constant per-step estimate is only a simplifying model.

Worked example

A simulated agent may take at most three actions. It moves from room A to B, inspects a clue, then moves to C. The trace contains three actions. If the objective still is not satisfied, the correct result is budget exhausted with partial progress, not a fourth unapproved action or a fabricated success.

Reference code

The following example uses the Python standard library and does not call a remote service.

actions=['move:A->B','inspect:clue','move:B->C']
budget=3
assert len(actions) == budget
objective_satisfied=False
status='complete' if objective_satisfied else 'budget-exhausted'
assert status == 'budget-exhausted'
assert len(actions)*.002 == .006

Python examples are provided for study and local execution; this page does not execute Python.

Common mistakes

A plan is not execution evidence. Reflection can repeat the original mistake. A step budget is useful only if every executed action is counted consistently.