AssayAssay
05 / 06

Lesson 05 · Production · 13 min

Triggers and autonomy

Loop three is the point at which an agent stops being something you invoke and becomes something that runs. A schedule, a webhook, a queue message — the trigger matters less than the consequence, which is that work now happens when you are not watching.

Autonomy is best granted in levels rather than switched on, and the levels are worth naming because they let a team argue about the right thing.

L1 · Report onlyThe loop observes and proposes. It opens an issue, drafts a comment, produces a list. Nothing changes without a person. Almost always where to start.
L2 · AssistedThe loop acts inside guardrails and a person approves the result — a pull request rather than a push, a draft rather than a send.
L3 · UnattendedThe loop acts within tight constraints and nobody looks unless something breaks. Reserved for narrow, reversible, well-sensored work.

Move up a level by evidence, not by confidence. A loop earns L2 by having produced L1 output you agreed with for long enough to be boring, and L3 by having produced L2 work nobody needed to correct. Both directions should be easy — a loop that cannot be dropped back a level is not really under control.

Cadence is its own decision. Too frequent and you pay for runs that find nothing; too rare and problems age. Match the cadence to how fast the underlying thing actually changes, which is usually slower than it feels.

Common shapes worth stealing: a daily triage that reads new issues and labels them, a watcher that responds to failing checks on a pull request, a sweeper that fixes one class of lint across a repository, a drafter that assembles release notes from merged work. All start at L1 and are useful there.

Checkpoint

Pick one loop you would like to run and say what evidence would move it from L1 to L2.

maker
checker

“My order 88213 arrived with a cracked base. I'd like a refund please.”

The natural, friendly reply promises the refund — which the agent cannot authorise.

This lab is L1: it proposes a reply and nothing is sent. Consider what would have to be true before you let it send one.

Run once with the verification loop off, then again with it on, and compare the replies.