Human in the Loop
What Human in the Loop does
Human in the Loop puts a review checkpoint between extraction and delivery. A run that needs review stops after extraction and cleaning with the status Awaiting approval: no email is sent, no webhook fires, no Bucket row is written and no linked agent starts until a named reviewer approves it.
The important word is before. Review is not a correction you apply after bad data has already reached your ERP; the delivery step has not run yet. When the reviewer approves, the run resumes from exactly where it paused, carrying their edits.
- High-value data that must be verified before it moves downstream
- A compliance requirement for a documented manual approval step
- Documents where extraction is usually right but occasionally expensive to get wrong
- Values only a person can supply, such as an internal cost center or an approval code
- New suppliers or new formats, until you trust the flow
Flow runs are the main case, but the same queue also collects paused matches, inspections and fills. See Other things that wait for review below.
Three ways a flow run gets paused
The flow-level switch is one way to send runs for review, not the only one. A Cleaner attached to the flow can pause runs on its own, even with the switch off. When several triggers apply to the same run, their reviewer lists are combined.
| Trigger | What pauses | Best for |
|---|---|---|
| Flow setting (Human in the Loop panel) | Every run of the flow, regardless of what was extracted. | A document type that always needs sign-off, or a flow you have just built and do not trust yet. |
| Cleaner Conditional Actions rule with the Human in the Loop action | Only the runs where a row matched the rule, for example a total above a threshold or a missing tax ID. | High volume where most runs are fine and you only want eyes on the exceptions. |
| Cleaner Human Input field | Every run that goes through the Cleaner, because a person has to type or pick the value. | Data that is not in the document at all and has to be added by someone. |
Reviewing every run defeats the point of automating extraction. The conditional route is usually the right one: in the Cleaner, add a Conditional Actions field, give it a condition such as total > 10,000, add the Human in the Loop action and pick its reviewers. Only matching runs stop. The flow switch can stay off.
When a Cleaner rule triggers the pause, Tavnit records which rows and which fields matched. The review screen flags exactly those cells, so the reviewer starts at the reason the run was held rather than reading the whole table. If the rule is fed by an Anomaly Check field, the reviewer also sees why each value was flagged.
Turn on review for a flow
The flow switch lives in the flow's own settings. Only an Owner or Admin can change it. Reviewers are picked from your organization's members.
- 1Open the flow and select the Human in the Loop panel in its sidebar.
- 2Toggle review on.
- 3Under Reviewers, pick one or more members of your organization.
- 4Process one document and confirm it appears as Awaiting review in the reviewers' Human in the Loop queue.
With review switched on and no reviewers assigned, the panel warns “No reviewers selected — approvals won't reach anyone.” Paused runs then have nobody who can approve them. Assign at least one reviewer before you send documents through.
When the flow has a Cleaner, the pause happens after cleaning, so the table under review is the cleaned output, with converted currencies, reformatted dates and computed columns. That is what will be delivered, so it is the right thing to check.
Human Input fields
A Human Input field is a Cleaner column that is never extracted: a reviewer fills it in on the review screen. Use it for a cost center, a GL account, an internal approval code, or anything else the document cannot tell you.
| Option | What it does |
|---|---|
| Free text | The reviewer types the value. |
| Menu | The reviewer picks from the distinct values of a Bucket column (Options Bucket and Options Column), optionally filtered by conditions, including conditions on the current row's fields. |
| Value is mandatory | Approval is blocked until every row has a value. Turn it off to allow blanks. |
| Reviewers | Who may fill the field and approve; combined with the flow's reviewers. |
Every run that goes through a Cleaner with a Human Input field pauses for review, whether or not the flow switch is on. On the review screen the column is marked Needs human input with a count of rows filled, and Approve stays blocked (“Fill all required human input values to approve”) until every mandatory value is in.
The review queue
The Human in the Loop page in the sidebar lists everything waiting for you, newest first. It shows only items you are a reviewer on; reviewers do not see each other's queues.
- Summary figures at the top: Awaiting Review, Oldest Pending, Your Role, and Flows With HITL
- One card per item: the file name and flow for a run, with a Match or Fill chip for those kinds, and the status Awaiting review
- A red dot on the sidebar icon whenever something is waiting for you. It updates in real time, without refreshing the page
- Assigned reviewers also get an email with a direct link the moment a run, match, inspection or fill needs them
Reviewing a run
The review screen is a split view: the extracted table on the left, the original document on the right. You check a value against the source without leaving the page, correct it in place, and approve. The divider is draggable, and on mobile you switch between the two panels.

| In the data grid you can | How |
|---|---|
| Edit a value | Double-click the cell and type. |
| Change many cells at once | Select by dragging, Shift-clicking, or clicking a column header, then Apply to selected. |
| Drop a row from the output | Untick it. Excluded rows are not delivered. |
| Add or remove a column | Use Add column or Remove column. A removed column can be restored before you approve. |
| See what triggered the pause | Cells a Cleaner rule matched are flagged. |
| Fill Human Input fields | Type the value, or pick it from the menu. |
| See what you changed | Edited cells stay highlighted until you approve. |
- The document panel shows PDFs with page navigation as well as image files; spreadsheets can be downloaded
- Fit to width, Fit to height and manual zoom; drag to pan
- Ctrl/Cmd + and − to zoom, Ctrl/Cmd + 0 to reset
Approving and rejecting
Approving folds your edits into the run and releases it downstream. Rejecting cancels the run and delivers nothing. Both decisions are final for that run: the pause is a one-time gate, not a state you can toggle back and forth.
| Decision | What happens to the run | What is delivered |
|---|---|---|
| Approve | Your edited table replaces the extracted output and the run resumes to Completed, with a HITL Approved badge. | Everything the flow is configured to do: email output, webhook, Bucket export, form filling and a linked agent, all with the approved data. |
| Reject | The run becomes Cancelled, with a HITL Rejected badge, and your reason (optional but recommended) is recorded. | Nothing. No email, no webhook, no Bucket row, no agent run. |
You do not need every assigned reviewer to sign off. The first approval or rejection resolves the run; if a second reviewer had it open, their decision is refused because the run is no longer awaiting approval. Refresh the queue to see the current state.
The run's page shows who decided (Approved by or Rejected by).
Other things that wait for review
Matchers, Inspectors and Fillers have their own review settings, and their paused items land in the same queue, with the same first-decision-wins rule and the same audit trail.
| Item | When it pauses | What the reviewer does |
|---|---|---|
| Match | When human review is turned on for the Matcher: every match. | Checks and corrects the AI pairing of rows across documents, can exclude rows, then approves or rejects. |
| Inspection | When human review is on for the Inspector, or when a failing check requests review through its on-fail actions. | Waives failing checks with a reason, then approves to finalise the verdict, or rejects to cancel the inspection. |
| Fill | When human review is on for the Filler, or whenever it has Human fill fields mapped. | Reviews the filled forms, types the Human fill values, then approves to release the forms, or rejects. |
Who can review
Only the people assigned as reviewers can approve or reject a flow run. Being an Admin is not enough on its own: an Admin who is not on the reviewer list does not get the run in their queue and cannot approve it.
- Flow reviewer lists are managed by an Owner or an Admin
- A Cleaner's Human in the Loop action and each Human Input field carry their own reviewers, combined with the flow's
- Any member can be a reviewer, whatever their role
- The HITL Only role is made for reviewers: those members see only the Human in the Loop queue and can review, but cannot run or change anything else
See user roles and permissions for what each role can change.
The append-only audit trail
Every review action is written to a permanent, append-only log with a timestamp and the reviewer's identity. Entries cannot be edited or deleted, so the record of who changed what, and what the data looked like before they touched it, survives the review.
| Recorded event | When it is written |
|---|---|
| Reviewers notified | The run enters the review queue and the reviewers are emailed. |
| Cell edited | A value is changed, with the old and new value. |
| Row added / row removed | The reviewer adds a row or excludes one. |
| Column added / column removed | The reviewer changes the table's shape. |
| Approved | The decision, the reviewer, and how many edits were made. |
| Rejected | The decision, the reviewer, and the reason given. |
Tavnit stores the output as it was before the reviewer touched it, alongside the approved version. An auditor can compare the extraction against the delivered result without reconstructing it from the event log.
Troubleshooting
| Symptom | Likely cause and fix |
|---|---|
| Runs pause although the flow switch is off | The flow's Cleaner has a Conditional Actions rule with the Human in the Loop action, or a Human Input field. |
| A run is Awaiting approval but not in my queue | You are not on its reviewer list. Ask an Owner or Admin to add you to the flow (or to the Cleaner rule that paused it). |
| Approve is refused as not a configured reviewer | Only assigned reviewers can decide. If no reviewer was assigned, add one on the flow; nobody else can release the run. |
| Approve is refused because the run is not awaiting approval | Another reviewer decided first. Refresh the queue. |
| Approve is blocked with missing human input | A mandatory Human Input field is still empty in some rows. Fill them, or make the field optional in the Cleaner. |
| The linked agent did not run | It runs only after approval. A rejected run never starts it. |
A paused run waits as long as it takes. If results feed a time-sensitive process, make sure reviewers watch their queue or their email, or narrow the pause to the exceptions with a Cleaner rule.
