Every agent action ends in one of three states: a human approves it before it runs, a human reviews a random sample after it runs, or nobody looks. Most teams drift into one mode for everything, usually full review during a pilot and then silent auto-approval once the queue backs up. The fix is to make the mode a property of the task type, not of the team's mood.
Full review is implemented in code. In Microsoft's Agent Framework, a function is marked as needing approval by wrapping it in an ApprovalRequiredAIFunction, and the run returns a ToolApprovalRequestContent instead of executing the call until a human approves or rejects it per the Microsoft Learn tutorial. LangChain's Deep Agents exposes the same idea through an interrupt_on dictionary that maps tool names to approval behavior, with per-tool settings for which decisions (approve, edit, reject, respond) a reviewer may make through LangGraph interrupts.
Sampling and auto-approval are not framework features in the same way, which is why they need policy. You implement them by intercepting the tool call, deciding whether this invocation falls into today's sample, and either pausing it or letting it through while logging the trace.
The insight most teams miss: full review and sampling answer different questions. Full review prevents a specific bad action. Sampling estimates a failure rate across a population, which is the number you need to decide whether the agent is still trustworthy. An approval log with no sampling tells you nothing about the actions nobody looked at.



