ctrlrun.LocalApprovalProvider — class, defined at src/ctrlrun/approval.py:369
wait() polls it (SPEC-v0.1 §4.3).
The human answers out of band — ctrlrun approve <id> or ctrlrun deny <id> in another
shell. Waiting is bounded by the request’s own expiry, so a request nobody answers ends
in ApprovalTimeout rather than a blocked agent.