Feedback Loops
Feedback Loops: Earning Autonomy by Being Observable — the fourth course, a hands-on,
measured follow-on to the Foundations course
.
Do the Foundations course first. This course assumes it — it leans on §10 (observability
and the joinable session_id/trace_id/step log line), §13 (conversation state), and §23
(agents and the tool-use loop), and does not re-teach them. If those aren’t familiar, start with
Foundations
.
The other courses make observability a through-line; this one makes it the subject. Its hook
is feedback loops — the machinery that lets an agent act on what it sees: block a runaway tool
call, deny a call that would blow the budget, critique its own turn, propose a fix. Its core is
observability — the telemetry that makes every harness and model decision visible. The two are one
idea: a feedback loop is a controller, and a controller you can’t observe is one you can’t trust.
The course climbs an autonomy gradient — reflex, reflective, deliberative, meta — arguing that
autonomy is earned, and the thing that earns it is observability. Don’t ship a black box.
-1
The Loop You Can't See
Goal: understand the problem this course solves, and why it is harder than “add some logging.” A modern agent decides and acts on its own — it picks …
01
Joinable Signal: Trace & Session IDs by Hand
Goal: build the smallest piece of observability that everything else depends on — a joinable signal. Before a feedback loop can act, it needs to read …
02
An Event Vocabulary, Not Log Lines
Goal: make the joinable signal from Unit 1 queryable. A log full of free-text strings — "calling search tool", "search done", "search failed!" — …
03
Spans & the Latency Breakdown
Goal: measure where a turn spends its time, not just that it was slow. “The turn took 4 seconds” is not an actionable signal — a latency or cost loop …
04
The First Closed Loop: a Runtime Gate
Goal: build the first loop that actually acts. Units 1–3 made the agent observable; now you use that signal to change what the agent does next, inside …
05
Budget as Feedforward Control
Goal: build a loop that acts on what is about to happen, not what already did. The loop gate (Unit 4) reacts to a call after it runs — fine when the …
06
Reflection: Self-Critique from Traces
Goal: climb from the reflex tier to the reflective tier. The gates in Units 4–5 act in the moment on simple rules. Now the agent does something slower …
07
Closing the Reflective Loop
Goal: close the loop you opened in Unit 6. A reflection that is only saved to disk, or only shown to a human, is an open loop — the agent critiqued …
08
Hysteresis: Dedup & Promotion
Goal: build the mechanism Unit 7 leaned on. There you surfaced only reflections with seen_count >= 2, on the principle that “single-instance …
09
Human in the Loop, Async
Goal: close a loop you should not close automatically. A promoted proposal (Unit 8) is a candidate change to the agent itself — its prompt, its …
10
Watching the Apparatus
Goal: build the loop that watches the other loops. You have feedback loops at every tier now — but each one trusts the signal beneath it, and that …
11
Meeting the Standard: OpenTelemetry at the Boundary
Goal: meet the standard you have been hand-building all along — and decide whether to adopt it. Across Units 1–3 you built a trace_id, an event …
12
The Measured Default
Goal: gather the whole course into one decision and one discipline. The decision is the autonomy gradient as a tree: which loops you close …