docs/book/src/sop/how-it-works.md
<workspace>/sops/<sop_name>/SOP.toml plus optional SOP.md.zeroclaw sop currently manages definitions only: list, validate, show.sop_execute. The webhook, cron, and peripheral trigger types are defined and matched but not yet wired to a live event source (see Connectivity).sop_status, sop_approve, sop_advance.sop.graph LR
MQTT[MQTT listener] -->|topic match| Dispatch
TOOL[sop_execute tool] -->|manual| Dispatch
WH[Webhook trigger] -.->|defined, unwired| Dispatch
CRON[Cron trigger] -.->|defined, unwired| Dispatch
GPIO[Peripheral trigger] -.->|defined, unwired| Dispatch
Dispatch --> Engine[SOP Engine]
Engine --> Run[SOP Run]
Run --> Action{Action}
Action -->|ExecuteStep| Agent[Agent Loop]
Action -->|WaitApproval| Human[Operator]
Human -->|sop_approve| Run
Set the SOP directory through the gateway, zerocode, or zeroclaw config set (required for runtime SOP loading):
Create a SOP directory, for example:
~/.zeroclaw/workspace/sops/deploy-prod/SOP.toml
~/.zeroclaw/workspace/sops/deploy-prod/SOP.md
Validate and inspect definitions:
<div class="os-tabs-src">zeroclaw sop list
zeroclaw sop validate
zeroclaw sop show deploy-prod
Trigger runs via configured event sources, or manually from an agent turn with sop_execute.
For trigger routing and auth details, see Connectivity.