An AI step can be wrong and still look confident. A human approval step puts a person between the model and any action that matters, such as sending an email, changing a record or publishing a post.
What you will build
A workflow that drafts a reply, pauses, and sends it only after a person approves it. Rejected drafts are logged and never sent.
Before you start
- A workflow tool you can pause, such as n8n or a script with a queue.
- Basic familiarity with JSON.
- An AI model account. Check the cost per call before you start.
Step 1 · Decide which actions need approval
Write down every action the workflow can take. Mark the ones that are hard to undo or that affect other people. Only those need a human approval step.
Step 2 · Save the draft and stop
The workflow stores the draft with a status of “pending”. It does not continue. Nothing is sent at this point.
draft = {
id: uuid(),
text: modelOutput,
status: "pending",
createdAt: new Date().toISOString()
}
Step 3 · Approve or reject
A person reviews the draft and marks it approved or rejected. Only an approved draft can move on. Read the approval as a decision, not a formality.
function canSend(draft) {
return draft.status === "approved";
}
Step 4 · Record every decision
Log who decided, when, and what they decided. The log is what lets you find out later why a bad output was sent, or why it was not.
What went wrong
Approvals became rubber stamps
When a reviewer approves dozens of drafts an hour, the step no longer checks anything. Limit the volume, show the reviewer the source data next to the draft, and keep the list of pending items short.
Known limits
- This lesson does not cover how to build the reviewer interface.
- Approval adds delay. Decide which steps are worth that delay before you build.
- Not tested yet. This lesson is a draft and has no test record.