Agents, MCP and skillsLoading progress…

Observe and revise

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

Observe and revise

The loop alternates an allowed action with an observation, and after each observation the agent updates an explicit task state: what is done, what is missing, what to try next. Keep an inspectable summary and the action trace; do not rely on hidden reasoning. Completion is decided by evidence. For "write notes.txt containing hello" that means the write succeeded and a later read-back shows the same content.

task: notes.txt must contain "hello" action trace: 1. write_file(notes.txt, hello) → ok 2. read_file(notes.txt) → hello model says: "Done!" evidence check: write ok AND later read-back matches → COMPLETE (claim verified)

Alternate an action with an observation, update an explicit task state, and keep an inspectable action trace. Grade the real state (the file), not the model's wording.

Three traces, one of which really completed the task.

Predict first. Which evidence supports marking a file-write task complete?

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.