> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ctrlrun.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# LocalApprovalProvider

> Requests go to the StateStore; `wait()` polls it (SPEC-v0.1 §4.3).

`ctrlrun.LocalApprovalProvider` — class, defined at `src/ctrlrun/approval.py:369`

```python theme={null}
class LocalApprovalProvider()
    def __init__(store: ApprovalStore, clock: Callable[[], datetime], poll_interval: timedelta)
```

Requests go to the StateStore; `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.

## Next

* [Python API index](/reference/api/index).
* [Get started](/get-started/quickstart) · [Why](/why).


## Related topics

- [WebhookApprovalProvider](/reference/api/WebhookApprovalProvider.md)
- [Python API](/reference/api/index.md)
- [ApprovalProvider](/reference/api/ApprovalProvider.md)
- [InterruptApprovalProvider](/reference/api/InterruptApprovalProvider.md)
- [ScriptedApprovalProvider](/reference/api/ScriptedApprovalProvider.md)
