Loop Engine

Defining Loops

Loop Library

Canonical loop definitions

Loop Engine currently ships these canonical definitions from loops/:

| Loop ID | Domain | States | Terminal states | Business metrics | |---|---|---:|---:|---:| | scm.procurement | scm | 8 | 2 | 3 | | scm.replenishment | scm | 5 | 2 | 2 | | crm.lead_qualification | crm | 6 | 2 | 2 | | finance.invoice_collection | finance | 6 | 2 | 2 | | support.ticket_resolution | support | 6 | 2 | 2 | | erp.purchase_approval | erp | 6 | 2 | 2 |

1id: scm.procurement
2version: 1.0.0
3domain: scm
4description: >
5 Purchase order lifecycle from requisition through receipt and settlement.
6states:
7 - id: OPEN
8 - id: PO_CONFIRMED
9 - id: RECEIPT_SCHEDULED
10 - id: RECEIVED
11 - id: INVOICE_MATCHED
12 - id: SETTLED
13 isTerminal: true
14 - id: CANCELLED
15 isTerminal: true
16 - id: DISPUTED
17 isError: true
18initialState: OPEN
19transitions:
20 - id: confirm_po
21 from: OPEN
22 to: PO_CONFIRMED
23 allowedActors: [human, automation, ai-agent]
24outcome:
25 id: po_settled
26 description: Purchase order fully settled with matched invoice and inventory updated
27 valueUnit: po_settled
28 measurable: true

Raw files:

Contributing a loop definition

  • Add YAML under loops/{domain}/{name}.yaml
  • Validate with pnpm validate-loops
  • Include a concrete outcome
  • Add businessMetrics when measurable
  • Prefer at least one non-human actor option (automation, system, or ai-agent) where domain-appropriate

See Contributing for full workflow.

Naming conventions

  • Loop ID: {domain}.{noun} (for example scm.procurement)
  • State IDs: SCREAMING_SNAKE_CASE
  • Transition IDs: snake_case verbs (for example confirm_po, receive_goods)