Human approval steps for LangGraph agents

An agent that sends reports or changes records should stop and ask first. How I build approval steps, retries and tracing into LangGraph workflows.

Telephone operators working at a long switchboard
Operators at a Bell System switchboard: people routing every call.

An agent that drafts a report is useful. An agent that sends it without anyone reading it is a risk. In the workflows I build, any step with consequences outside the system stops and waits for a person.

Where to put the stop

Not every step needs approval. I ask one question per step: if this goes wrong, can we undo it quietly? Reading documents and drafting text can be redone. Sending an email, filing an incident or changing a record cannot, so those wait for a person.

Building it in LangGraph

LangGraph can pause a graph before a chosen node and resume it later from saved state. The approval step is a node like any other: the run stops there, the reviewer sees the draft and its sources, and approves, edits or rejects it. The decision is stored with the run.

Retries without loops

Tools fail: a timeout, a malformed answer, a missing field. Each tool call gets a small retry budget and a check on its output. When the budget runs out, the run goes to a person instead of trying forever.

Trace everything

Every step, retry and approval lands in Langfuse. When someone asks why the agent wrote what it wrote, the answer is one link away.