
Human in the Loop Is Not Optional
Confirmation dialogs, knowledge proposal review, admin approval flows. HITL isn't a feature you add. It's the default behavior.
The autonomy fantasy
The AI industry sells a vision of fully autonomous agents. "Set it and forget it." "End-to-end automation." "Zero-touch operations." The pitch is seductive: deploy an agent, walk away, let it handle everything. The reality is less glamorous.
Every enterprise deployment that went fully autonomous has a horror story. The Slack bot that messaged 500 people at 3am because a threshold was miscalibrated. The agent that updated the wrong Jira tickets because it mismatched entity IDs across systems. The automation that closed "resolved" tickets that weren't actually resolved, because the model inferred resolution from a comment that was actually a question.
These aren't edge cases. They're the inevitable result of removing humans from critical decision points. Full autonomy without oversight is a demo, not a product. Demos don't have consequences. Products do.
Three types of human involvement
Not all HITL is the same. There are three distinct patterns, each serving a different purpose. Knowing which one to apply where is the design challenge.
1. Confirmation
Agent proposes an action. Human approves or rejects. This is the minimum viable HITL for any write operation.
2. Review
Agent produces output. Human reviews before it reaches the end user or becomes permanent. Knowledge base proposals work this way: the agent discovers a pattern and proposes a KB update. Admin reviews, approves, or edits before it becomes part of the agent's knowledge.
3. Escalation
Agent recognizes it's out of its depth and hands off to a human. This requires the agent to know its own limitations, which is harder than it sounds.
Most agent frameworks only think about confirmation. Review and escalation are equally important, and harder to get right.
Confirmation by default
In the Amodal model, every write operation requires confirmation. Not because you opted in. Because that's the default. You have to explicitly remove confirmation for a write endpoint to be auto-approved. The safe path is the default path.
// Default: any POST/PATCH/DELETE endpoint requires confirmation
{
"endpoints": {
"POST /api/cases/*/status": {
"confirm": true // ← this is the default, you don't even need to set it
}
}
}// Opt-out: requires explicit admin decision, logged in audit trail
{
"endpoints": {
"POST /api/cases/*/comments": {
"confirm": false // ← admin deliberately chose this, and it's logged
}
}
}Bulk operations get extra scrutiny. More than 5 writes in a single action require itemized confirmation. The agent can't batch 50 updates into a single "approve all" prompt. Each one is listed. The human sees exactly what will happen.
Knowledge proposals
The learning flywheel depends on HITL. Here's how it works: an agent discovers a new pattern during a session. Maybe it finds that a specific vendor always submits invoices late in Q4. Maybe it notices that a particular alert fires every Tuesday at 2am and is always a false positive. The agent doesn't silently update the knowledge base. It proposes an update.
Admin reviews the proposal. Is this a real pattern or a one-time anomaly? Is the wording accurate? Should it be scoped to a specific tenant or shared across all tenants? If approved, the KB gets smarter for the next session. If rejected, no harm done. The agent learned nothing wrong.
This is how organizational knowledge grows safely. Not through autonomous KB modification, but through a propose-review-approve cycle that keeps humans in control of what the agent believes to be true.
Automations and HITL
Automations (scheduled agent runs) are the highest-risk surface for HITL failures. They run without a human in the session. There's no one watching when the 2am anomaly scanner kicks off. No one reviewing results in real time when the daily digest agent queries six systems.
The guardrail: automations cannot write by default. An automation can read, analyze, and report. It can send a summary to Slack. It can create a draft for review. But it cannot update a Jira ticket, close a case, or modify a record unless the admin explicitly enables write access for that specific automation in config.
{
"name": "daily-anomaly-scan",
"schedule": "0 6 * * *",
"writes_enabled": false, // ← default: read-only
"output_channel": "slack:#security-alerts"
}When writes are enabled, the same confirmation rules apply. The automation still can't bulk-update 50 records without itemized logging. The difference is that confirmation happens against policy rather than against a human in real time. The admin defined the policy. The platform enforces it.
The trust ladder
HITL isn't permanent friction. It's a trust-building mechanism. New agent, new skill, new connection: everything confirmed. As the team gains confidence in the agent's behavior, they relax confirmation on low-risk operations. High-risk operations stay confirmed forever. This is deliberate, gradual, and logged at every step.
Every read, every write, every action. The team is learning what the agent does and how it behaves. Trust is zero.
The team has seen hundreds of reads. The agent queries the right systems, interprets data correctly. Reads are safe. Writes still need eyes.
Adding a comment to a Jira ticket? Auto-approved. Changing a ticket's status? Still confirmed. The team draws the line based on observed behavior.
Some operations never graduate. Deleting records, updating multiple systems in one action, anything that affects more than 5 items. These stay confirmed permanently.
The ladder isn't a feature. It emerges from sensible defaults and granular configuration. The admin relaxes constraints as trust grows, and the audit trail shows exactly when and why each change was made.
The goal isn't to remove humans from the loop. It's to put them at the right point in the loop. Confirming actions they should see. Reviewing knowledge that shapes future behavior. Escalating decisions that need judgment.
The human isn't the bottleneck. The human is the quality control.
Amodal is an open-source agent runtime where write confirmation, knowledge review, and escalation are default behaviors, not afterthoughts.