@wonsukchoi/crondex 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +16 -15
  2. package/catalog.json +4839 -118
  3. package/jobs/automotive/ase-certification-expiry-check.yaml +36 -0
  4. package/jobs/automotive/csi-score-monitor.yaml +33 -0
  5. package/jobs/automotive/customer-pay-warranty-pay-mix-tracker.yaml +47 -0
  6. package/jobs/automotive/fi-product-attachment-rate-tracker.yaml +39 -0
  7. package/jobs/automotive/loaner-fleet-availability-check.yaml +40 -0
  8. package/jobs/automotive/manufacturer-recall-notice-check.yaml +39 -0
  9. package/jobs/automotive/parts-reorder-point-check.yaml +36 -0
  10. package/jobs/automotive/repair-cycle-time-trend-monitor.yaml +42 -0
  11. package/jobs/automotive/service-appointment-no-show-tracker.yaml +38 -0
  12. package/jobs/automotive/service-bay-utilization-check.yaml +38 -0
  13. package/jobs/automotive/shop-supply-reorder-check.yaml +31 -0
  14. package/jobs/automotive/trade-in-appraisal-variance-check.yaml +39 -0
  15. package/jobs/automotive/used-vehicle-inventory-aging-check.yaml +35 -0
  16. package/jobs/construction/critical-path-material-lead-time-review.yaml +43 -0
  17. package/jobs/construction/daily-jobsite-log-compliance-check.yaml +34 -0
  18. package/jobs/construction/equipment-utilization-cost-check.yaml +35 -0
  19. package/jobs/construction/heavy-equipment-inspection-compliance-check.yaml +34 -0
  20. package/jobs/construction/jobsite-safety-incident-near-miss-tracker.yaml +35 -0
  21. package/jobs/construction/lien-waiver-collection-tracker.yaml +27 -0
  22. package/jobs/construction/permit-application-approval-backlog-check.yaml +33 -0
  23. package/jobs/construction/project-budget-variance-check.yaml +34 -0
  24. package/jobs/construction/punch-list-completion-tracker.yaml +36 -0
  25. package/jobs/construction/retainage-holdback-release-tracker.yaml +33 -0
  26. package/jobs/construction/rfi-response-time-tracker.yaml +33 -0
  27. package/jobs/construction/subcontractor-pay-application-approval-tracker.yaml +35 -0
  28. package/jobs/construction/submittal-shop-drawing-review-check.yaml +45 -0
  29. package/jobs/construction/weather-delay-impact-log.yaml +44 -0
  30. package/jobs/education/chronic-absenteeism-tracker.yaml +34 -0
  31. package/jobs/education/department-budget-variance-check.yaml +37 -0
  32. package/jobs/education/enrollment-withdrawal-trend-tracker.yaml +39 -0
  33. package/jobs/education/facility-work-order-backlog-check.yaml +34 -0
  34. package/jobs/education/free-reduced-lunch-eligibility-renewal-check.yaml +36 -0
  35. package/jobs/education/iep-504-review-deadline-tracker.yaml +35 -0
  36. package/jobs/education/parent-teacher-conference-noshow-tracker.yaml +29 -0
  37. package/jobs/education/school-bus-route-ontime-check.yaml +40 -0
  38. package/jobs/education/standardized-test-registration-deadline-check.yaml +35 -0
  39. package/jobs/education/substitute-teacher-fill-rate-tracker.yaml +35 -0
  40. package/jobs/education/teacher-certification-expiry-tracker.yaml +35 -0
  41. package/jobs/education/textbook-inventory-shortage-check.yaml +32 -0
  42. package/jobs/fleet/accident-incident-report-tracker.yaml +34 -0
  43. package/jobs/fleet/driver-mvr-review-tracker.yaml +34 -0
  44. package/jobs/fleet/driver-safety-score-monitor.yaml +39 -0
  45. package/jobs/fleet/ev-battery-health-check.yaml +36 -0
  46. package/jobs/fleet/fuel-efficiency-trend-monitor.yaml +33 -0
  47. package/jobs/fleet/geofence-violation-check.yaml +37 -0
  48. package/jobs/fleet/lease-return-condition-check.yaml +33 -0
  49. package/jobs/fleet/tire-wear-replacement-check.yaml +30 -0
  50. package/jobs/fleet/toll-violation-tracker.yaml +34 -0
  51. package/jobs/fleet/vehicle-pool-scheduling-conflict-check.yaml +37 -0
  52. package/jobs/fleet/vehicle-tco-tracker.yaml +41 -0
  53. package/jobs/fleet/vehicle-utilization-rate-check.yaml +37 -0
  54. package/jobs/growth/cohort-retention-curve-monitor.yaml +39 -0
  55. package/jobs/growth/customer-health-score-monitor.yaml +37 -0
  56. package/jobs/growth/dau-mau-engagement-ratio-check.yaml +39 -0
  57. package/jobs/growth/dormant-account-reactivation-check.yaml +39 -0
  58. package/jobs/growth/expansion-revenue-opportunity-tracker.yaml +44 -0
  59. package/jobs/growth/feature-adoption-rate-tracker.yaml +44 -0
  60. package/jobs/growth/nps-trend-tracker.yaml +40 -0
  61. package/jobs/growth/onboarding-funnel-dropoff-check.yaml +39 -0
  62. package/jobs/growth/paywall-upgrade-prompt-conversion-check.yaml +40 -0
  63. package/jobs/growth/product-qualified-lead-tracker.yaml +42 -0
  64. package/jobs/growth/referral-program-performance-tracker.yaml +35 -0
  65. package/jobs/growth/trial-to-paid-conversion-rate-tracker.yaml +48 -0
  66. package/jobs/growth/winback-reactivation-campaign-tracker.yaml +46 -0
  67. package/jobs/hospitality/adr-revpar-tracker.yaml +43 -0
  68. package/jobs/hospitality/cancellation-rate-spike-check.yaml +21 -0
  69. package/jobs/hospitality/group-booking-space-utilization-check.yaml +40 -0
  70. package/jobs/hospitality/guest-complaint-sla-tracker.yaml +34 -0
  71. package/jobs/hospitality/guest-satisfaction-score-monitor.yaml +41 -0
  72. package/jobs/hospitality/linen-inventory-turnover-check.yaml +35 -0
  73. package/jobs/hospitality/loyalty-points-reconciliation-check.yaml +33 -0
  74. package/jobs/hospitality/minibar-charge-reconciliation-check.yaml +38 -0
  75. package/jobs/hospitality/occupancy-forecast-variance-check.yaml +33 -0
  76. package/jobs/hospitality/ota-rate-parity-check.yaml +36 -0
  77. package/jobs/hospitality/overbooking-risk-alert.yaml +38 -0
  78. package/jobs/hospitality/room-maintenance-work-order-tracker.yaml +31 -0
  79. package/jobs/hospitality/upsell-upgrade-conversion-tracker.yaml +37 -0
  80. package/jobs/insurance/adjuster-caseload-balance-check.yaml +45 -0
  81. package/jobs/insurance/agent-broker-license-expiry-tracker.yaml +40 -0
  82. package/jobs/insurance/cat-event-exposure-monitor.yaml +37 -0
  83. package/jobs/insurance/claims-aging-backlog-tracker.yaml +48 -0
  84. package/jobs/insurance/doi-filing-deadline-tracker.yaml +42 -0
  85. package/jobs/insurance/loss-ratio-by-line-monitor.yaml +43 -0
  86. package/jobs/insurance/policy-lapse-rate-monitor.yaml +41 -0
  87. package/jobs/insurance/premium-payment-delinquency-tracker.yaml +42 -0
  88. package/jobs/insurance/quote-to-bind-conversion-tracker.yaml +41 -0
  89. package/jobs/insurance/reinsurance-treaty-renewal-tracker.yaml +38 -0
  90. package/jobs/insurance/siu-fraud-referral-tracker.yaml +36 -0
  91. package/jobs/insurance/subrogation-recovery-tracker.yaml +41 -0
  92. package/jobs/insurance/underwriting-queue-sla-monitor.yaml +45 -0
  93. package/jobs/logistics/3pl-performance-scorecard.yaml +45 -0
  94. package/jobs/logistics/bol-freight-class-accuracy-audit.yaml +33 -0
  95. package/jobs/logistics/cargo-insurance-claim-status-check.yaml +39 -0
  96. package/jobs/logistics/carrier-load-tender-acceptance-check.yaml +34 -0
  97. package/jobs/logistics/carrier-otd-performance-scorecard.yaml +41 -0
  98. package/jobs/logistics/carrier-rate-contract-renewal-check.yaml +35 -0
  99. package/jobs/logistics/cross-dock-dwell-time-watch.yaml +43 -0
  100. package/jobs/logistics/freight-invoice-rate-audit.yaml +38 -0
  101. package/jobs/logistics/fuel-surcharge-rate-monitor.yaml +40 -0
  102. package/jobs/logistics/international-shipment-documentation-check.yaml +36 -0
  103. package/jobs/logistics/linehaul-transit-time-variance-check.yaml +43 -0
  104. package/jobs/logistics/proof-of-delivery-reconciliation-check.yaml +38 -0
  105. package/jobs/logistics/route-load-optimization-check.yaml +32 -0
  106. package/jobs/manufacturing/changeover-time-tracker.yaml +29 -0
  107. package/jobs/manufacturing/critical-spare-parts-stock-check.yaml +29 -0
  108. package/jobs/manufacturing/first-pass-yield-report.yaml +37 -0
  109. package/jobs/manufacturing/lot-traceability-audit.yaml +37 -0
  110. package/jobs/manufacturing/non-conformance-report-backlog-check.yaml +34 -0
  111. package/jobs/manufacturing/oee-efficiency-check.yaml +37 -0
  112. package/jobs/manufacturing/osha-recordable-incident-audit.yaml +37 -0
  113. package/jobs/manufacturing/production-schedule-adherence-check.yaml +35 -0
  114. package/jobs/manufacturing/safety-certification-expiry-check.yaml +37 -0
  115. package/jobs/manufacturing/scrap-waste-rate-watch.yaml +33 -0
  116. package/jobs/manufacturing/shift-handoff-report.yaml +37 -0
  117. package/jobs/manufacturing/supplier-quality-ppm-watch.yaml +38 -0
  118. package/jobs/manufacturing/tooling-die-wear-check.yaml +31 -0
  119. package/jobs/manufacturing/work-order-backlog-check.yaml +37 -0
  120. package/jobs/marketing/ad-creative-fatigue-check.yaml +44 -0
  121. package/jobs/marketing/affiliate-partner-performance-check.yaml +38 -0
  122. package/jobs/marketing/attribution-discrepancy-check.yaml +42 -0
  123. package/jobs/marketing/brand-share-of-voice-check.yaml +43 -0
  124. package/jobs/marketing/campaign-roas-cpa-anomaly-check.yaml +41 -0
  125. package/jobs/marketing/competitor-ad-creative-watch.yaml +40 -0
  126. package/jobs/marketing/email-list-growth-rate-check.yaml +43 -0
  127. package/jobs/marketing/landing-page-conversion-drop-check.yaml +44 -0
  128. package/jobs/marketing/mql-to-sql-handoff-sla-check.yaml +29 -0
  129. package/jobs/marketing/mql-volume-pace-check.yaml +34 -0
  130. package/jobs/marketing/paid-search-negative-keyword-waste-check.yaml +37 -0
  131. package/jobs/marketing/press-release-pickup-tracking.yaml +32 -0
  132. package/jobs/marketing/webinar-registration-attendance-check.yaml +38 -0
  133. package/jobs/restaurant/comp-void-anomaly-tracker.yaml +39 -0
  134. package/jobs/restaurant/daily-sales-flash-report.yaml +36 -0
  135. package/jobs/restaurant/delivery-platform-commission-reconciliation.yaml +33 -0
  136. package/jobs/restaurant/delivery-receiving-discrepancy-check.yaml +33 -0
  137. package/jobs/restaurant/food-handler-permit-expiry-tracker.yaml +33 -0
  138. package/jobs/restaurant/gift-card-liability-check.yaml +45 -0
  139. package/jobs/restaurant/kitchen-ticket-time-watch.yaml +38 -0
  140. package/jobs/restaurant/liquor-pour-cost-variance-check.yaml +34 -0
  141. package/jobs/restaurant/menu-86-frequency-tracker.yaml +39 -0
  142. package/jobs/restaurant/menu-item-profitability-check.yaml +33 -0
  143. package/jobs/restaurant/pos-end-of-day-reconciliation-check.yaml +31 -0
  144. package/jobs/restaurant/table-turnover-rate-tracker.yaml +36 -0
  145. package/jobs/restaurant/waitlist-conversion-check.yaml +37 -0
  146. package/jobs/retail/cash-office-deposit-variance-check.yaml +34 -0
  147. package/jobs/retail/competitor-price-monitoring-check.yaml +42 -0
  148. package/jobs/retail/damaged-merchandise-writeoff-tracker.yaml +41 -0
  149. package/jobs/retail/employee-discount-abuse-check.yaml +39 -0
  150. package/jobs/retail/layaway-special-order-pickup-tracker.yaml +33 -0
  151. package/jobs/retail/loyalty-enrollment-redemption-rate-tracker.yaml +37 -0
  152. package/jobs/retail/markdown-execution-audit-check.yaml +29 -0
  153. package/jobs/retail/planogram-compliance-audit-check.yaml +36 -0
  154. package/jobs/retail/pos-void-refund-anomaly-tracker.yaml +42 -0
  155. package/jobs/retail/price-tag-audit-accuracy-check.yaml +37 -0
  156. package/jobs/retail/sales-per-square-foot-tracker.yaml +36 -0
  157. package/jobs/retail/seasonal-staffing-coverage-check.yaml +35 -0
  158. package/jobs/retail/store-closing-checklist-compliance-check.yaml +32 -0
  159. package/jobs/retail/visual-merchandising-compliance-check.yaml +40 -0
  160. package/jobs/veterinary/appointment-no-show-rate-tracker.yaml +49 -0
  161. package/jobs/veterinary/boarding-kennel-capacity-utilization-check.yaml +39 -0
  162. package/jobs/veterinary/client-payment-plan-delinquency-check.yaml +36 -0
  163. package/jobs/veterinary/dvm-license-dea-registration-expiry-check.yaml +41 -0
  164. package/jobs/veterinary/microchip-registration-verification-check.yaml +40 -0
  165. package/jobs/veterinary/patient-record-completeness-audit.yaml +41 -0
  166. package/jobs/veterinary/pet-medication-refill-backlog-check.yaml +36 -0
  167. package/jobs/veterinary/puppy-kitten-vaccine-series-compliance-check.yaml +39 -0
  168. package/jobs/veterinary/senior-pet-wellness-recall-tracker.yaml +43 -0
  169. package/jobs/veterinary/spay-neuter-followup-compliance-check.yaml +35 -0
  170. package/jobs/veterinary/specialist-referral-followup-check.yaml +38 -0
  171. package/jobs/veterinary/surgical-schedule-utilization-check.yaml +36 -0
  172. package/jobs/veterinary/vet-staff-ce-credit-tracking.yaml +36 -0
  173. package/jobs/warehousing/conveyor-sortation-downtime-watch.yaml +48 -0
  174. package/jobs/warehousing/labor-productivity-rate-check.yaml +33 -0
  175. package/jobs/warehousing/mhe-preventive-maintenance-check.yaml +38 -0
  176. package/jobs/warehousing/order-fulfillment-sla-watch.yaml +42 -0
  177. package/jobs/warehousing/shift-headcount-coverage-check.yaml +33 -0
  178. package/jobs/warehousing/slotting-velocity-review-check.yaml +44 -0
  179. package/jobs/warehousing/warehouse-damage-writeoff-review.yaml +41 -0
  180. package/jobs/warehousing/warehouse-near-miss-incident-rate-watch.yaml +47 -0
  181. package/jobs/warehousing/warehouse-space-utilization-check.yaml +39 -0
  182. package/jobs/warehousing/wave-pick-batch-efficiency-check.yaml +33 -0
  183. package/jobs/warehousing/wms-integration-error-check.yaml +36 -0
  184. package/jobs/warehousing/yard-trailer-detention-watch.yaml +41 -0
  185. package/lib/category-descriptions.js +12 -12
  186. package/lib/duplicates-allowlist.js +10 -0
  187. package/package.json +2 -2
@@ -0,0 +1,35 @@
1
+ id: linen-inventory-turnover-check
2
+ version: 1
3
+ name: Linen and Laundry Inventory Turnover Check
4
+ description: >
5
+ Checks par levels for linens (sheets, towels, robes) against current
6
+ counted stock and flags anything below par or showing an unusually
7
+ high loss/shrink rate versus rooms serviced. Use this if a linen
8
+ shortage has ever forced housekeeping to hold rooms because nobody
9
+ reordered before the closet ran low.
10
+ category: hospitality
11
+ tags: [hospitality, housekeeping, inventory, laundry]
12
+ schedule: "0 6 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v shrink_pct="{{max_shrink_pct}}" '
17
+ NR==1 {next}
18
+ {
19
+ item=$1; par=$2; on_hand=$3; sent_to_laundry=$4; returned=$5;
20
+ if (on_hand < par) printf "BELOW PAR: %s — %d on hand, par %d\n", item, on_hand, par;
21
+ if (sent_to_laundry > 0) {
22
+ loss_pct = ((sent_to_laundry - returned) / sent_to_laundry) * 100;
23
+ if (loss_pct > shrink_pct) printf "HIGH SHRINK: %s — sent %d, returned %d (%.1f%% loss, threshold %.0f%%)\n", item, sent_to_laundry, returned, loss_pct, shrink_pct;
24
+ }
25
+ }
26
+ ' "{{linen_inventory_csv}}"
27
+ variables:
28
+ linen_inventory_csv:
29
+ default: "./linen-inventory.csv"
30
+ description: "CSV with header row, columns: item_name,par_level,on_hand_count,sent_to_laundry_count,returned_count — one row per linen category (sheets, towels, robes, etc.)."
31
+ max_shrink_pct:
32
+ default: 5
33
+ description: Acceptable loss percentage between linens sent to laundry and returned before it's flagged.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: Count on a consistent cycle (weekly recommended) so par-level and shrink comparisons are apples to apples; persistent high shrink on one item often points to an outside laundry vendor issue.
@@ -0,0 +1,33 @@
1
+ id: loyalty-points-reconciliation-check
2
+ version: 1
3
+ name: Loyalty Program Points Reconciliation Check
4
+ description: >
5
+ Compares points earned per stay against your program's accrual rate
6
+ and flags stays where the posted points don't match, plus any member
7
+ who crossed a tier threshold but hasn't been re-tiered yet. Use this
8
+ if a loyalty member has ever been shorted points from a PMS integration
9
+ glitch, or hit Gold status and kept getting Silver-level perks for months.
10
+ category: hospitality
11
+ tags: [hospitality, loyalty-program, guest-experience, revenue-assurance]
12
+ schedule: "0 8 * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v rate="{{points_per_dollar}}" '
17
+ NR==1 {next}
18
+ {
19
+ expected = $3 * rate;
20
+ diff = $4 - expected;
21
+ if (diff < 0) diff = -diff;
22
+ if (diff > 1) printf "MISMATCH: member %s, stay %s — expected %.0f pts, posted %.0f pts\n", $1, $2, expected, $4;
23
+ }
24
+ ' "{{stays_points_csv}}"
25
+ variables:
26
+ stays_points_csv:
27
+ default: "./loyalty-stays-points.csv"
28
+ description: "CSV with header row, columns: member_id,folio_id,eligible_spend_usd,points_posted."
29
+ points_per_dollar:
30
+ default: 10
31
+ description: Program's points-earned-per-dollar-spent accrual rate.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Tier-threshold re-classification is a separate check worth pairing with this — export current tier alongside year-to-date qualifying nights/spend and compare against your program's tier cutoffs.
@@ -0,0 +1,38 @@
1
+ id: minibar-charge-reconciliation-check
2
+ version: 1
3
+ name: Minibar Charge Reconciliation Check
4
+ description: >
5
+ Compares housekeeping's logged minibar restocks against folio charges
6
+ posted for the same room and flags mismatches. Use this if a restocked
7
+ minibar has ever gone uncharged, or a guest was charged for an item
8
+ housekeeping never actually replaced.
9
+ category: hospitality
10
+ tags: [hospitality, minibar, revenue-assurance, front-desk]
11
+ schedule: "0 9 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' '
16
+ FNR==NR {
17
+ if (FNR > 1) restocked[$1] += $3;
18
+ next;
19
+ }
20
+ FNR==1 {next}
21
+ { charged[$1] += $3 }
22
+ END {
23
+ for (room in restocked) {
24
+ r = restocked[room] + 0; c = charged[room] + 0;
25
+ if (r != c) printf "MISMATCH: room %s — restocked $%.2f, charged $%.2f\n", room, r, c;
26
+ }
27
+ for (room in charged) if (!(room in restocked)) printf "UNMATCHED CHARGE: room %s — charged $%.2f with no restock logged\n", room, charged[room];
28
+ }
29
+ ' "{{restock_log_csv}}" "{{folio_charges_csv}}"
30
+ variables:
31
+ restock_log_csv:
32
+ default: "./minibar-restock-log.csv"
33
+ description: "CSV with header row, columns: room_number,date,amount_usd — housekeeping's logged minibar restocks."
34
+ folio_charges_csv:
35
+ default: "./minibar-folio-charges.csv"
36
+ description: "CSV with header row, columns: room_number,date,amount_usd — minibar charges posted to guest folios."
37
+ compatible_agents: [generic, claude, codex]
38
+ notes: Assumes both CSVs cover the same date range; a mismatch doesn't always mean fraud — could be a delayed post or a comped item, so verify before adjusting a folio.
@@ -0,0 +1,33 @@
1
+ id: occupancy-forecast-variance-check
2
+ version: 1
3
+ name: Occupancy Forecast Variance Check
4
+ description: >
5
+ Compares this week's forecasted occupancy against actual rooms sold and
6
+ flags a meaningful gap in either direction. Use this if a forecast has
7
+ ever been quietly wrong for weeks, leaving staffing either overbooked
8
+ on labor during a slow stretch or short-staffed during a rush nobody
9
+ planned for.
10
+ category: hospitality
11
+ tags: [hospitality, revenue-management, forecasting, staffing]
12
+ schedule: "0 7 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v tol="{{tolerance_pct}}" '
17
+ NR==1 {next}
18
+ {
19
+ diff = $3 - $2;
20
+ pct = ($2 > 0) ? (diff / $2) * 100 : 0;
21
+ if (pct < 0) pct = -pct;
22
+ if (pct > tol) printf "VARIANCE: %s forecast %d%%, actual %d%% (%.1f pts off, tolerance %.0f)\n", $1, $2, $3, diff, tol;
23
+ }
24
+ ' "{{forecast_vs_actual_csv}}"
25
+ variables:
26
+ forecast_vs_actual_csv:
27
+ default: "./occupancy-forecast-vs-actual.csv"
28
+ description: "CSV with header row, columns: date,forecast_occupancy_pct,actual_occupancy_pct."
29
+ tolerance_pct:
30
+ default: 8
31
+ description: Percentage-point gap between forecast and actual occupancy before it's flagged.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Feed this from your revenue management system's forecast export alongside actual rooms-sold data — use recurring misses to recalibrate the forecasting model, not just a one-off flag.
@@ -0,0 +1,36 @@
1
+ id: ota-rate-parity-check
2
+ version: 1
3
+ name: OTA Rate Parity Check
4
+ description: >
5
+ Compares your listed room rates across OTAs (Booking.com, Expedia, etc.)
6
+ against your direct-booking rate and flags any channel undercutting you.
7
+ Use this if an OTA has ever quietly shown a lower rate than your own
8
+ website, driving bookings away from your cheapest channel.
9
+ category: hospitality
10
+ tags: [hospitality, revenue-management, ota, rate-parity]
11
+ schedule: "0 6 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check today's rate for {{room_type}} on {{ota_platforms}} and compare
16
+ each against the direct rate of {{direct_rate_usd}} on your own booking
17
+ site.
18
+ 1. List each platform's displayed rate side by side with the direct rate.
19
+ 2. Flag any OTA showing a rate at or below the direct rate — that's a
20
+ parity violation worth chasing with the channel manager or OTA.
21
+ 3. Note any OTA showing an unusually high rate too, since that can also
22
+ hurt bookings if it's a stale/unsynced price.
23
+ 4. Suggest whether the direct rate, the channel manager mapping, or a
24
+ stale OTA cache is the likely cause for any mismatch found.
25
+ variables:
26
+ room_type:
27
+ default: "Standard Queen"
28
+ description: Room type/rate plan to compare across channels.
29
+ ota_platforms:
30
+ default: "Booking.com, Expedia, Hotels.com"
31
+ description: Comma-separated list of OTA platforms to check.
32
+ direct_rate_usd:
33
+ default: 189
34
+ description: Your current direct-booking rate in USD for the room type/date checked.
35
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
36
+ notes: Read-only comparison — fixing a parity violation usually means updating your channel manager or contacting the OTA's rate-parity team.
@@ -0,0 +1,38 @@
1
+ id: overbooking-risk-alert
2
+ version: 1
3
+ name: Overbooking Risk Alert
4
+ description: >
5
+ Compares confirmed reservations for each upcoming night against total
6
+ available rooms and flags nights where bookings exceed inventory. Use
7
+ this if an intentional overbooking cushion has ever tipped into an
8
+ actual walked guest because nobody was watching the running total as
9
+ last-minute bookings came in.
10
+ category: hospitality
11
+ tags: [hospitality, front-desk, overbooking, reservations]
12
+ schedule: "0 */6 * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v rooms="{{total_rooms}}" -v cushion="{{overbook_cushion}}" '
17
+ NR==1 {next}
18
+ { booked[$1] += 1 }
19
+ END {
20
+ for (date in booked) {
21
+ limit = rooms + cushion;
22
+ if (booked[date] > limit) printf "OVERBOOKED: %s — %d bookings vs %d rooms (+%d cushion)\n", date, booked[date], rooms, cushion;
23
+ else if (booked[date] > rooms) printf "WITHIN CUSHION: %s — %d bookings vs %d rooms (using overbook cushion)\n", date, booked[date], rooms;
24
+ }
25
+ }
26
+ ' "{{reservations_by_night_csv}}"
27
+ variables:
28
+ reservations_by_night_csv:
29
+ default: "./reservations-by-night.csv"
30
+ description: "CSV with header row, columns: stay_date,reservation_id — one row per room-night reserved (confirmed status only)."
31
+ total_rooms:
32
+ default: 100
33
+ description: Total available rooms in the property.
34
+ overbook_cushion:
35
+ default: 3
36
+ description: Intentional overbooking cushion above total rooms before a night counts as at-risk of a walk.
37
+ compatible_agents: [generic, claude, codex]
38
+ notes: A count over total_rooms but within the cushion is expected/intentional; only counts exceeding rooms + cushion need a walk plan (relocation agreement with a nearby property) lined up.
@@ -0,0 +1,31 @@
1
+ id: room-maintenance-work-order-tracker
2
+ version: 1
3
+ name: Preventive Maintenance Work Order Tracker
4
+ description: >
5
+ Checks scheduled preventive maintenance work orders (HVAC service,
6
+ fire safety checks, deep cleans) against their due dates and flags any
7
+ overdue or rooms that have gone too long without a PM cycle. Use this
8
+ if a room has ever gone a full year without its scheduled HVAC or
9
+ safety check because it only got attention when something broke.
10
+ category: hospitality
11
+ tags: [hospitality, maintenance, preventive, compliance]
12
+ schedule: "0 7 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" '
18
+ NR==1 {next}
19
+ {
20
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
21
+ cmd | getline due_epoch; close(cmd);
22
+ days_over = (today - due_epoch) / 86400;
23
+ if (days_over > 0) printf "OVERDUE: room/area %s — %s work order due %s (%d days overdue)\n", $1, $2, $3, days_over;
24
+ }
25
+ ' "{{pm_schedule_csv}}"
26
+ variables:
27
+ pm_schedule_csv:
28
+ default: "./pm-work-orders.csv"
29
+ description: "CSV with header row, columns: room_or_area,work_order_type,due_date (YYYY-MM-DD) — one row per open preventive maintenance work order."
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Distinct from guest-maintenance-request-backlog-check, which tracks guest-reported issues — this tracks scheduled/preventive work orders (PM cycles) that exist whether or not a guest complains.
@@ -0,0 +1,37 @@
1
+ id: upsell-upgrade-conversion-tracker
2
+ version: 1
3
+ name: Room Upsell and Upgrade Conversion Tracker
4
+ description: >
5
+ Analyzes offered room upgrades and add-on upsells (early check-in, view
6
+ upgrade, breakfast package) against how many guests accepted, broken
7
+ down by channel and shift. Use this if front desk upsell offers have
8
+ ever quietly tapered off because nobody was tracking whether the team
9
+ was actually still asking.
10
+ category: hospitality
11
+ tags: [hospitality, revenue-management, upsell, front-desk]
12
+ schedule: "0 8 1 * *"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Pull upsell/upgrade offer logs from {{pms_or_upsell_platform}} for the
17
+ past {{lookback_days}} days.
18
+ 1. Calculate overall conversion rate (accepted / offered) for each
19
+ upsell type (room upgrade, early check-in, late checkout, breakfast
20
+ package, etc.).
21
+ 2. Break the conversion rate down by shift or agent group if that data
22
+ exists, and flag any shift with a rate meaningfully below the
23
+ property average.
24
+ 3. Flag any upsell type with an offer count that's dropped sharply
25
+ versus the prior period — that usually means staff stopped asking,
26
+ not that demand dried up.
27
+ 4. Estimate incremental revenue if the lowest-converting shift matched
28
+ the property average.
29
+ variables:
30
+ pms_or_upsell_platform:
31
+ default: "your PMS or upsell platform"
32
+ description: System logging upsell offers and outcomes (e.g. "Oracle OPERA", "Zingle", "Duetto").
33
+ lookback_days:
34
+ default: 30
35
+ description: Window of upsell data to analyze.
36
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
37
+ notes: Useful as a coaching input for front desk shift leads, not a scorecard for individual write-ups.
@@ -0,0 +1,45 @@
1
+ id: adjuster-caseload-balance-check
2
+ version: 1
3
+ name: Adjuster Caseload Balance Check
4
+ description: >
5
+ Counts open claims assigned per adjuster and flags anyone carrying a
6
+ caseload well above the team average, so work can be redistributed
7
+ before it hurts claim cycle time. Use this if one adjuster has ever
8
+ quietly ended up with double the caseload of everyone else on the team.
9
+ category: insurance
10
+ tags: [insurance, claims, adjuster, caseload, operations]
11
+ schedule: "0 7 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v overload="{{overload_multiplier}}" '
16
+ NR==1 {next}
17
+ {
18
+ count[$2]++;
19
+ total++;
20
+ n_adjusters[$2]=1;
21
+ }
22
+ END {
23
+ n=0;
24
+ for (a in n_adjusters) n++;
25
+ avg = (n > 0) ? total / n : 0;
26
+ printf "CASELOAD SUMMARY: %d open claims across %d adjusters (avg %.1f)\n", total, n, avg;
27
+ for (a in count) {
28
+ if (avg > 0 && count[a] > avg * overload) {
29
+ printf "OVERLOADED: %s — %d open claims (avg %.1f)\n", a, count[a], avg;
30
+ }
31
+ }
32
+ }
33
+ ' "{{open_claims_by_adjuster_csv}}"
34
+ variables:
35
+ open_claims_by_adjuster_csv:
36
+ default: "./open-claims-by-adjuster.csv"
37
+ description: "Path to a CSV with columns: claim_number,adjuster_name — one row per open claim."
38
+ overload_multiplier:
39
+ default: 1.5
40
+ description: How many times the team average caseload counts as overloaded (e.g. 1.5 = 50% above average).
41
+ compatible_agents: [generic, claude, codex]
42
+ notes: >
43
+ Staffing-balance check across a claims team, distinct from
44
+ claims-aging-backlog-tracker which looks at claim age rather than
45
+ who's handling how many claims.
@@ -0,0 +1,40 @@
1
+ id: agent-broker-license-expiry-tracker
2
+ version: 1
3
+ name: Agent/Broker License Expiry Tracker
4
+ description: >
5
+ Checks producer (agent/broker) license and appointment expiration dates
6
+ across every state they're licensed in and flags anything expiring
7
+ soon. Use this if an agent has ever kept writing business in a state
8
+ after their license quietly lapsed.
9
+ category: insurance
10
+ tags: [insurance, agent, broker, license, compliance]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ {
18
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
19
+ cmd | getline expiry_epoch; close(cmd);
20
+ "date +%s" | getline now_epoch; close("date +%s");
21
+ diff_days = (expiry_epoch - now_epoch) / 86400;
22
+ if (diff_days <= days) {
23
+ status = (diff_days < 0) ? "EXPIRED" : "EXPIRING";
24
+ printf "%s: %s — %s license/appointment in %s expires %s (%d days)\n", status, $1, $2, $2, $3, diff_days;
25
+ }
26
+ }
27
+ ' "{{producer_licenses_csv_path}}"
28
+ variables:
29
+ producer_licenses_csv_path:
30
+ default: "./producer-licenses.csv"
31
+ description: "Path to a CSV with columns: producer_name,state,expiry_date (YYYY-MM-DD) — one row per state license/appointment."
32
+ warn_days_before:
33
+ default: 45
34
+ description: How many days before a license or appointment expiry to start warning.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: >
37
+ Tracks producer (selling agent/broker) licensing compliance across an
38
+ agency or MGA's distribution force — distinct from
39
+ certificate-of-insurance-request-check, which tracks COI requests, not
40
+ producer licensure.
@@ -0,0 +1,37 @@
1
+ id: cat-event-exposure-monitor
2
+ version: 1
3
+ name: Catastrophe Event Exposure Monitor
4
+ description: >
5
+ Cross-references active policies against a catastrophe (hurricane,
6
+ wildfire, earthquake, flood) event footprint and estimates
7
+ policy-count and total insured value exposure inside the impact zone.
8
+ Use this if a CAT event has ever hit before anyone had a fast answer to
9
+ "how many policies do we have in that area, and what's our exposure."
10
+ category: insurance
11
+ tags: [insurance, catastrophe, cat, exposure, risk]
12
+ schedule: "0 */6 * * *"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Given the active/forecast catastrophe event: {{cat_event_description}},
17
+ and the policy exposure summary: {{policy_exposure_summary}}.
18
+ 1. Estimate how many policies and how much total insured value fall
19
+ within or near the event's impact footprint.
20
+ 2. Break this down by line of business (property, auto, etc.) if the
21
+ exposure data allows it.
22
+ 3. Flag any single large-limit policy that falls inside the footprint
23
+ for individual review.
24
+ 4. Note this is a rough triage estimate for readiness/response
25
+ planning, not a final claims or reserve figure.
26
+ variables:
27
+ cat_event_description:
28
+ default: "describe the catastrophe event and its current/forecast footprint here"
29
+ description: Name, type, and geographic footprint of the catastrophe event being tracked.
30
+ policy_exposure_summary:
31
+ default: "paste or summarize policy counts and insured values by geography here"
32
+ description: Summary of active policy counts and total insured value by geography/line of business.
33
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
34
+ notes: >
35
+ Pre/during-event exposure estimation for claims and reinsurance
36
+ readiness planning — distinct from claims-aging-backlog-tracker, which
37
+ tracks already-filed claims rather than pre-loss exposure.
@@ -0,0 +1,48 @@
1
+ id: claims-aging-backlog-tracker
2
+ version: 1
3
+ name: Claims Aging & Backlog Tracker
4
+ description: >
5
+ Buckets open claims by how long they've been open (0-30, 31-60, 61-90,
6
+ 90+ days) and flags any bucket that's grown past target so a claims
7
+ manager can rebalance the queue. Use this if a backlog of aging claims
8
+ has ever crept up gradually until a regulator or auditor asked why so
9
+ many were still open past 90 days.
10
+ category: insurance
11
+ tags: [insurance, claims, aging, backlog, operations]
12
+ schedule: "0 7 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v cap90="{{max_90plus_pct}}" '
18
+ NR==1 {next}
19
+ {
20
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
21
+ cmd | getline opened_epoch; close(cmd);
22
+ age_days = (today - opened_epoch) / 86400;
23
+ total++;
24
+ if (age_days <= 30) b30++;
25
+ else if (age_days <= 60) b60++;
26
+ else if (age_days <= 90) b90++;
27
+ else b90plus++;
28
+ }
29
+ END {
30
+ printf "AGING SUMMARY: 0-30d=%d 31-60d=%d 61-90d=%d 90d+=%d (total=%d)\n", b30, b60, b90, b90plus, total;
31
+ pct90plus = (total > 0) ? (b90plus / total) * 100 : 0;
32
+ if (pct90plus > cap90) {
33
+ printf "OVER TARGET: %.1f%% of open claims are 90+ days old (cap %d%%)\n", pct90plus, cap90;
34
+ }
35
+ }
36
+ ' "{{open_claims_csv_path}}"
37
+ variables:
38
+ open_claims_csv_path:
39
+ default: "./open-claims.csv"
40
+ description: "Path to a CSV with columns: claim_number,date_opened (YYYY-MM-DD)."
41
+ max_90plus_pct:
42
+ default: 10
43
+ description: Maximum acceptable percentage of open claims sitting at 90+ days before this counts as over target.
44
+ compatible_agents: [generic, claude, codex]
45
+ notes: >
46
+ Portfolio-level aging distribution for a claims team, distinct from
47
+ claim-status-check which follows up on individual stale claims for a
48
+ single policyholder.
@@ -0,0 +1,42 @@
1
+ id: doi-filing-deadline-tracker
2
+ version: 1
3
+ name: State DOI Regulatory Filing Deadline Tracker
4
+ description: >
5
+ Warns before a state Department of Insurance filing deadline (rate
6
+ filings, annual statements, market conduct reports) so nothing gets
7
+ submitted late. Use this if a regulatory filing has ever gone out late
8
+ because the deadline lived only in one compliance person's memory.
9
+ category: insurance
10
+ tags: [insurance, compliance, regulatory, doi, filing]
11
+ schedule: "0 8 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ $4 != "" {next}
18
+ {
19
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
20
+ cmd | getline due_epoch; close(cmd);
21
+ "date +%s" | getline now_epoch; close("date +%s");
22
+ diff_days = (due_epoch - now_epoch) / 86400;
23
+ if (diff_days <= days) {
24
+ status = (diff_days < 0) ? "OVERDUE" : "DUE SOON";
25
+ printf "%s: %s — %s filing due %s (%d days)\n", status, $1, $2, $3, diff_days;
26
+ }
27
+ }
28
+ ' "{{doi_filings_csv_path}}"
29
+ variables:
30
+ doi_filings_csv_path:
31
+ default: "./doi-filings.csv"
32
+ description: "Path to a CSV with columns: state,filing_type,due_date (YYYY-MM-DD),filed_date (blank if not yet filed)."
33
+ warn_days_before:
34
+ default: 21
35
+ description: How many days before a filing deadline to start warning.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: >
38
+ Regulatory filing deadlines owed to state insurance regulators —
39
+ distinct from legal's compliance-filing-deadline-reminder, which is a
40
+ generic cross-industry filing tracker; this one is scoped specifically
41
+ to insurance-department filings (rate filings, annual statements,
42
+ market conduct reports).
@@ -0,0 +1,43 @@
1
+ id: loss-ratio-by-line-monitor
2
+ version: 1
3
+ name: Loss Ratio by Line of Business Monitor
4
+ description: >
5
+ Calculates the incurred loss ratio for each line of business and flags
6
+ any line running hotter than target, so underwriting or pricing can
7
+ react before a bad quarter turns into a bad year. Use this if a line's
8
+ loss ratio has ever drifted well past target for months before anyone
9
+ noticed in the numbers.
10
+ category: insurance
11
+ tags: [insurance, loss-ratio, underwriting, finance]
12
+ schedule: "0 7 1 * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v target="{{target_loss_ratio_pct}}" '
17
+ NR==1 {next}
18
+ {
19
+ earned[$1] += $2;
20
+ incurred[$1] += $3;
21
+ }
22
+ END {
23
+ for (line in earned) {
24
+ if (earned[line] > 0) {
25
+ ratio = (incurred[line] / earned[line]) * 100;
26
+ flag = (ratio > target) ? " OVER TARGET" : "";
27
+ printf "%s: loss ratio %.1f%%%s (earned %.2f, incurred %.2f)\n", line, ratio, flag, earned[line], incurred[line];
28
+ }
29
+ }
30
+ }
31
+ ' "{{loss_ratio_csv_path}}"
32
+ variables:
33
+ loss_ratio_csv_path:
34
+ default: "./loss-ratio-by-line.csv"
35
+ description: "Path to a CSV with columns: line_of_business,earned_premium,incurred_losses — one row per period/line entry, aggregated across the current reporting period."
36
+ target_loss_ratio_pct:
37
+ default: 65
38
+ description: Target maximum loss ratio percentage per line of business before it's flagged.
39
+ compatible_agents: [generic, claude, codex]
40
+ notes: >
41
+ Financial performance monitoring by line of business for underwriting
42
+ and actuarial review — distinct from claims-aging-backlog-tracker,
43
+ which tracks claim handling speed rather than loss cost.
@@ -0,0 +1,41 @@
1
+ id: policy-lapse-rate-monitor
2
+ version: 1
3
+ name: Policy Cancellation & Lapse Rate Monitor
4
+ description: >
5
+ Calculates the weekly policy cancellation/lapse rate and flags it when
6
+ it climbs past a healthy baseline, so retention teams can react before
7
+ a leaky book turns into a shrinking one. Use this if a rising lapse
8
+ rate has ever gone unnoticed until a quarterly report showed the book
9
+ had quietly shrunk.
10
+ category: insurance
11
+ tags: [insurance, retention, lapse, cancellation, operations]
12
+ schedule: "0 7 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v baseline="{{baseline_lapse_pct}}" '
17
+ NR==1 {next}
18
+ {
19
+ total++;
20
+ if ($2 == "cancelled" || $2 == "lapsed") lapsed++;
21
+ }
22
+ END {
23
+ pct = (total > 0) ? (lapsed / total) * 100 : 0;
24
+ printf "LAPSE RATE: %.1f%% (%d of %d policies) — baseline %d%%\n", pct, lapsed, total, baseline;
25
+ if (pct > baseline) {
26
+ printf "ABOVE BASELINE: lapse rate exceeds the %d%% target\n", baseline;
27
+ }
28
+ }
29
+ ' "{{policy_status_csv_path}}"
30
+ variables:
31
+ policy_status_csv_path:
32
+ default: "./policy-status-weekly.csv"
33
+ description: "Path to a CSV with columns: policy_number,status (active/cancelled/lapsed) for the current reporting period's book."
34
+ baseline_lapse_pct:
35
+ default: 8
36
+ description: Baseline acceptable cancellation/lapse rate percentage before it's flagged as elevated.
37
+ compatible_agents: [generic, claude, codex]
38
+ notes: >
39
+ Book-wide retention health metric, distinct from
40
+ premium-payment-delinquency-tracker, which flags individual accounts
41
+ rather than the aggregate lapse trend.
@@ -0,0 +1,42 @@
1
+ id: premium-payment-delinquency-tracker
2
+ version: 1
3
+ name: Premium Payment Delinquency Tracker
4
+ description: >
5
+ Scans the book of business for policyholders past due on premium
6
+ payments and flags accounts approaching cancellation-for-nonpayment, so
7
+ collections or retention outreach can happen before a policy lapses.
8
+ Use this if delinquent accounts have ever piled up unnoticed until a
9
+ batch of policies cancelled all at once.
10
+ category: insurance
11
+ tags: [insurance, premium, delinquency, collections, retention]
12
+ schedule: "0 7 * * 1-5"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v cancel_days="{{cancellation_grace_days}}" '
18
+ NR==1 {next}
19
+ $3 != "unpaid" {next}
20
+ {
21
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
22
+ cmd | getline due_epoch; close(cmd);
23
+ past_due_days = (today - due_epoch) / 86400;
24
+ if (past_due_days > 0) {
25
+ remaining = cancel_days - past_due_days;
26
+ status = (remaining <= 0) ? "CANCELLATION ELIGIBLE" : sprintf("%d days until cancellation-eligible", remaining);
27
+ printf "DELINQUENT: %s — due %s, %d days past due — %s\n", $1, $2, past_due_days, status;
28
+ }
29
+ }
30
+ ' "{{book_of_business_csv_path}}"
31
+ variables:
32
+ book_of_business_csv_path:
33
+ default: "./premium-payment-status.csv"
34
+ description: "Path to a CSV with columns: policy_number,payment_due_date (YYYY-MM-DD),status (paid/unpaid)."
35
+ cancellation_grace_days:
36
+ default: 30
37
+ description: Days past due before a policy becomes eligible for cancellation-for-nonpayment.
38
+ compatible_agents: [generic, claude, codex]
39
+ notes: >
40
+ Book-wide delinquency and collections view across many policyholders,
41
+ distinct from premium-payment-due-reminder, which reminds a single
42
+ policyholder about their own upcoming payment before it's even late.