Rills Docs
Approvals

Approvals

Human-in-the-loop approval for AI-proposed actions

When you let AI take actions on your behalf, things go wrong sometimes. An email gets sent with the wrong tone, a record gets updated with bad data, a task gets routed to the wrong person. Approvals exist so that nothing consequential happens without your say-so. Every AI-proposed action pauses and waits for you to review it before it executes.

How the approval queue works

The approval queue is your inbox for pending workflow proposals. Each item shows:

  • Proposed action -- what the workflow wants to do, with the specific parameters it chose
  • Context -- the trigger data and any previous step outputs that informed the proposal
  • Confidence score -- a 0-100 score reflecting how certain the AI is about this recommendation
  • Workflow name -- which workflow created the proposal
  • Timestamp -- when the proposal was created

For each item, you can:

  • Approve -- let the workflow proceed as proposed
  • Reject -- stop the action and record your rejection for future confidence scoring
  • Edit -- edit the action details before approving (change email text, adjust parameters)

The getting started guide walks through a complete approval flow from trigger to execution if you want a step-by-step walkthrough.

Approval modes

Each AI or approval node in a workflow has an approval mode that controls when proposals require manual review. There are three modes:

always -- every proposal from this node requires manual review, regardless of confidence. Use this for high-stakes actions like sending invoices, deleting records, or any operation where you want to personally verify every execution.

confidence -- proposals above the confidence threshold auto-approve; proposals below it require review. This is the default mode. The threshold defaults to 90% and is configurable from 0-100 per node. A threshold of 85% on an email triage node means any classification the AI is 85%+ sure about executes automatically, while ambiguous cases come to you.

never -- actions execute immediately without any approval step. Use this for low-risk operations like logging events, updating internal counters, or saving draft documents where the cost of a wrong decision is negligible.

Approval mode is configured per node, not per workflow. A single workflow can have one AI node set to always (for sending external emails) and another set to confidence (for internal routing), matching the risk profile of each step.

Configuring auto-approval

To enable auto-approval on a node, set its approval mode to confidence and choose a threshold between 0 and 100 (default 90). You can also set a sampling rate for quality monitoring on the same node.

Start conservative. A threshold of 95 or higher means only proposals where the system is very confident will auto-approve. Lower the threshold as you gain confidence in the node's behavior from reviewing its proposals over time.

Changing the approval mode on a node does not affect proposals that are already pending. Pending proposals follow the mode that was active when they were created.

How confidence scoring works

Every proposal includes a confidence score from 0 to 100. This score is calculated per execution, not stored as a static property of the workflow. The same node can produce a 95 on one run and a 62 on the next, depending on the input data.

Confidence is calculated from weighted signals. Each signal has:

  • Name -- what the signal measures (e.g., "sender_domain_match", "keyword_pattern")
  • Passed/failed -- whether this signal supports the proposed action
  • Score -- the signal's individual confidence contribution
  • Weight -- how much this signal matters relative to others
  • Details -- additional context about why the signal scored the way it did

The system also tracks execution history metrics per node: approval rates grouped by action context, total executions, total approvals, total rejections, and statistical data (mean, standard deviation, min, max) for anomaly detection. These historical patterns feed back into confidence calculations -- if you have consistently approved a certain type of action, future similar proposals score higher.

The learning is continuous. Every approve or reject decision updates the model. Workflows that start with low confidence (20-40%) can reach high confidence for routine cases after accumulating enough feedback from your decisions.

Signal breakdown

SignalWeightWhat it evaluates
Validation25%Does the proposed output conform to the expected schema?
Grounding25%Do referenced entities (IDs, names, URLs) actually exist?
History20%How often have similar proposals been approved in the past?
Anomaly15%Are the values within the normal range for this node?
LLM15%Does an independent LLM spot-check agree with the proposal?

How the score is calculated

The final confidence score uses a weighted sum: finalScore = sum(signal.score * signal.weight), where each signal produces a score from 0 to 100.

If the finalScore meets or exceeds the node's threshold (default 90), the proposal auto-approves when the node's approval mode is set to confidence. Below the threshold, the proposal goes to your approval queue.

Two signals have special behavior:

  • History signal -- if fewer than 5 past executions exist for this node and action context, the history signal returns a neutral score of 50. The system needs data before it can assess historical patterns.
  • LLM signal -- the LLM spot-check runs on a sample of proposals (default 10%). When a proposal is not sampled, the LLM signal is omitted and the remaining signal weights are renormalized to sum to 1.0.

Sampling for quality monitoring

Even when proposals auto-approve because they exceed the confidence threshold, you may want to spot-check the AI's autonomous decisions. Sampling lets you do this without reviewing everything.

Each node has a configurable sampling rate from 0-100%. When set to 10%, roughly 10% of proposals that would have auto-approved are randomly sent to your approval queue for review instead. This happens after the confidence check -- sampling only applies to executions that passed the threshold.

Sampling serves as quality monitoring. You can verify that the AI is making good autonomous decisions, catch drift in edge cases, and provide additional feedback that keeps confidence scoring accurate over time. Set it to 0% when you fully trust a node's autonomous output, or higher when you want ongoing visibility.

Request types and priority

Each approval request has a type that reflects why it needs review:

  • ai_decision -- the AI proposed this action based on its analysis of the input data
  • manual_review -- the workflow explicitly requires human review at this step, regardless of AI confidence
  • high_risk_action -- the action was flagged as high-stakes and requires review even if it would otherwise auto-approve

Requests also have a priority level that affects queue ordering:

  • low -- routine items, no urgency
  • normal -- standard priority (default)
  • high -- time-sensitive items that should be reviewed soon
  • urgent -- critical items that need immediate attention, surfaced at the top of the queue

Approval routing

Approvals can be assigned to a specific team member (Professional and Business tiers). When assigned, only that team member sees the approval in their queue. Unassigned approvals appear in the queue for all workspace members who have approval permissions.

Priority levels affect both queue ordering and notification urgency. Urgent items surface at the top of the queue and trigger immediate notifications; low-priority items sort below everything else.

Timeouts and expiration

Approval requests have a configurable timeout, defaulting to 24 hours (1440 minutes) per workflow. When a request expires, it does not auto-approve -- the workflow step fails with an expired status.

This matters because context goes stale. A proposal to reply to an email that was relevant 2 hours ago may no longer make sense 3 days later. Expiration prevents stale proposals from executing after the moment has passed.

You can adjust the timeout per workflow based on how time-sensitive the actions are. A social media response workflow might use a 1-hour timeout, while a weekly report workflow could use a 48-hour window.

Timed-out approvals do not auto-approve. The workflow step fails with an expired status. This is a safety measure: stale proposals should not execute without fresh review. If a workflow is archived while approvals are still pending, those pending approvals expire immediately.

Decision feedback

When you approve or reject a proposal, you can optionally provide feedback. Feedback has two parts:

  • Free text -- explain why you approved or rejected in your own words
  • Category -- classify the issue: wrong_tone, incorrect_data, missing_info, or other

This feedback feeds directly into confidence scoring improvements. If you reject a proposal and tag it as incorrect_data, the system learns that similar data patterns should lower confidence in future proposals.

Decisions are immutable once recorded. There is no update or delete -- this creates an audit trail of every human decision made on every workflow proposal. Consistent rejections tagged with a specific category (for example, repeated wrong_tone rejections on the same node) help the system learn which kinds of outputs to flag, increasing the history signal's effectiveness over time.

Pricing

Reviewing and acting on proposals is free. Approving, rejecting, and editing -- all free. Workflows paused while waiting for your review consume no credits and no compute resources.

You only pay when an approved action executes: external API calls and workflow steps consume Workflow Credits, and AI model calls consume AI Credits. Rejections cost nothing.

For a hands-on walkthrough of the approval flow, see the getting started guide. To understand how approval nodes fit into workflow design, see Workflows.