hitl-gatelisted
Install: claude install-skill Luis247911/universal-ai-workspace-foundation
# hitl-gate
Implements a **durable human-in-the-loop interrupt**. The agent requests approval, the pause is written to disk, and the run can be resumed by a *different process* — approve to proceed, deny to re-enter the loop with feedback. The point: the pause survives a crash or restart, so an unattended agent never executes a risky action on its own.
## When to use
- Before irreversible or high-blast-radius actions (sending mail, deleting data, spending money, pushing code).
- When a human reviewer is asynchronous — the agent may exit and the decision arrives later.
- Encoding an approval policy where deny should *teach* the next attempt (feedback loop), not just stop.
## Run it (three separate processes — that's the point)
```
python -m harness.hitl request --payload "send the invoice email" # prints a run_id, status=pending
python -m harness.hitl approve --run <run_id> --feedback "looks good"
python -m harness.hitl resume --run <run_id> # -> proceed
# deny path:
python -m harness.hitl deny --run <run_id> --feedback "wrong recipient"
python -m harness.hitl resume --run <run_id> # -> loop-with-feedback
```
`resume` on a still-pending run exits non-zero (status 3) — so a supervisor can tell "not yet decided" apart from "approved".
## Statuses
- `pending` → awaiting a decision (persisted at the run's `interrupt.json`).
- `approved` → `resume` returns *proceed*.
- `denied` → `resume` returns *loop-with-feedback* carr