@wonsukchoi/crondex 0.21.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 (275) hide show
  1. package/README.md +31 -44
  2. package/catalog.json +8862 -1873
  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/ecommerce/affiliate-commission-payout-check.yaml +38 -0
  31. package/jobs/ecommerce/back-in-stock-notification-backlog-check.yaml +30 -0
  32. package/jobs/ecommerce/bundle-component-stock-mismatch-check.yaml +37 -0
  33. package/jobs/ecommerce/chargeback-fraud-risk-order-review.yaml +43 -0
  34. package/jobs/ecommerce/competitor-price-watch.yaml +60 -0
  35. package/jobs/ecommerce/economic-nexus-threshold-check.yaml +43 -0
  36. package/jobs/ecommerce/failed-payment-dunning-check.yaml +35 -0
  37. package/jobs/ecommerce/marketplace-listing-sync-drift-check.yaml +48 -0
  38. package/jobs/ecommerce/product-feed-health-check.yaml +35 -0
  39. package/jobs/ecommerce/purchase-order-overdue-check.yaml +32 -0
  40. package/jobs/ecommerce/storefront-ssl-domain-expiry-check.yaml +46 -0
  41. package/jobs/ecommerce/vip-tier-reclassification-check.yaml +55 -0
  42. package/jobs/ecommerce/wishlist-abandonment-check.yaml +37 -0
  43. package/jobs/education/chronic-absenteeism-tracker.yaml +34 -0
  44. package/jobs/education/department-budget-variance-check.yaml +37 -0
  45. package/jobs/education/enrollment-withdrawal-trend-tracker.yaml +39 -0
  46. package/jobs/education/facility-work-order-backlog-check.yaml +34 -0
  47. package/jobs/education/free-reduced-lunch-eligibility-renewal-check.yaml +36 -0
  48. package/jobs/education/iep-504-review-deadline-tracker.yaml +35 -0
  49. package/jobs/education/parent-teacher-conference-noshow-tracker.yaml +29 -0
  50. package/jobs/education/school-bus-route-ontime-check.yaml +40 -0
  51. package/jobs/education/standardized-test-registration-deadline-check.yaml +35 -0
  52. package/jobs/education/substitute-teacher-fill-rate-tracker.yaml +35 -0
  53. package/jobs/education/teacher-certification-expiry-tracker.yaml +35 -0
  54. package/jobs/education/textbook-inventory-shortage-check.yaml +32 -0
  55. package/jobs/finance/accounts-payable-aging-check.yaml +40 -0
  56. package/jobs/finance/bank-statement-reconciliation-check.yaml +40 -0
  57. package/jobs/finance/budget-vs-actual-variance-report.yaml +38 -0
  58. package/jobs/finance/contractor-1099-threshold-tracker.yaml +43 -0
  59. package/jobs/finance/credit-utilization-watch.yaml +40 -0
  60. package/jobs/finance/duplicate-payment-detection.yaml +43 -0
  61. package/jobs/finance/expense-report-compliance-check.yaml +46 -0
  62. package/jobs/finance/late-fee-interest-risk-check.yaml +43 -0
  63. package/jobs/finance/loan-covenant-compliance-check.yaml +37 -0
  64. package/jobs/finance/month-end-close-checklist-tracker.yaml +39 -0
  65. package/jobs/finance/multi-account-cash-position-rollup.yaml +45 -0
  66. package/jobs/finance/petty-cash-float-reconciliation.yaml +43 -0
  67. package/jobs/finance/quarterly-estimated-tax-calculator.yaml +66 -0
  68. package/jobs/finance/vendor-early-pay-discount-tracker.yaml +45 -0
  69. package/jobs/fleet/accident-incident-report-tracker.yaml +34 -0
  70. package/jobs/fleet/driver-mvr-review-tracker.yaml +34 -0
  71. package/jobs/fleet/driver-safety-score-monitor.yaml +39 -0
  72. package/jobs/fleet/ev-battery-health-check.yaml +36 -0
  73. package/jobs/fleet/fuel-efficiency-trend-monitor.yaml +33 -0
  74. package/jobs/fleet/geofence-violation-check.yaml +37 -0
  75. package/jobs/fleet/lease-return-condition-check.yaml +33 -0
  76. package/jobs/fleet/tire-wear-replacement-check.yaml +30 -0
  77. package/jobs/fleet/toll-violation-tracker.yaml +34 -0
  78. package/jobs/fleet/vehicle-pool-scheduling-conflict-check.yaml +37 -0
  79. package/jobs/fleet/vehicle-tco-tracker.yaml +41 -0
  80. package/jobs/fleet/vehicle-utilization-rate-check.yaml +37 -0
  81. package/jobs/growth/cohort-retention-curve-monitor.yaml +39 -0
  82. package/jobs/growth/customer-health-score-monitor.yaml +37 -0
  83. package/jobs/growth/dau-mau-engagement-ratio-check.yaml +39 -0
  84. package/jobs/growth/dormant-account-reactivation-check.yaml +39 -0
  85. package/jobs/growth/expansion-revenue-opportunity-tracker.yaml +44 -0
  86. package/jobs/growth/feature-adoption-rate-tracker.yaml +44 -0
  87. package/jobs/growth/nps-trend-tracker.yaml +40 -0
  88. package/jobs/growth/onboarding-funnel-dropoff-check.yaml +39 -0
  89. package/jobs/growth/paywall-upgrade-prompt-conversion-check.yaml +40 -0
  90. package/jobs/growth/product-qualified-lead-tracker.yaml +42 -0
  91. package/jobs/growth/referral-program-performance-tracker.yaml +35 -0
  92. package/jobs/growth/trial-to-paid-conversion-rate-tracker.yaml +48 -0
  93. package/jobs/growth/winback-reactivation-campaign-tracker.yaml +46 -0
  94. package/jobs/healthcare/appointment-slot-utilization-check.yaml +56 -0
  95. package/jobs/healthcare/claims-denial-resubmission-check.yaml +43 -0
  96. package/jobs/healthcare/clinical-supply-low-stock-check.yaml +30 -0
  97. package/jobs/healthcare/controlled-substance-inventory-reconciliation.yaml +42 -0
  98. package/jobs/healthcare/hipaa-access-log-audit.yaml +74 -0
  99. package/jobs/healthcare/patient-balance-collections-aging-check.yaml +41 -0
  100. package/jobs/healthcare/patient-immunization-schedule-check.yaml +41 -0
  101. package/jobs/healthcare/patient-portal-message-backlog-check.yaml +39 -0
  102. package/jobs/healthcare/patient-satisfaction-survey-tracking.yaml +59 -0
  103. package/jobs/healthcare/prescription-refill-request-backlog-check.yaml +38 -0
  104. package/jobs/healthcare/prior-authorization-expiry-check.yaml +53 -0
  105. package/jobs/healthcare/staff-cme-credit-tracking.yaml +41 -0
  106. package/jobs/healthcare/telehealth-session-issue-check.yaml +51 -0
  107. package/jobs/hospitality/adr-revpar-tracker.yaml +43 -0
  108. package/jobs/hospitality/cancellation-rate-spike-check.yaml +21 -0
  109. package/jobs/hospitality/group-booking-space-utilization-check.yaml +40 -0
  110. package/jobs/hospitality/guest-complaint-sla-tracker.yaml +34 -0
  111. package/jobs/hospitality/guest-satisfaction-score-monitor.yaml +41 -0
  112. package/jobs/hospitality/linen-inventory-turnover-check.yaml +35 -0
  113. package/jobs/hospitality/loyalty-points-reconciliation-check.yaml +33 -0
  114. package/jobs/hospitality/minibar-charge-reconciliation-check.yaml +38 -0
  115. package/jobs/hospitality/occupancy-forecast-variance-check.yaml +33 -0
  116. package/jobs/hospitality/ota-rate-parity-check.yaml +36 -0
  117. package/jobs/hospitality/overbooking-risk-alert.yaml +38 -0
  118. package/jobs/hospitality/room-maintenance-work-order-tracker.yaml +31 -0
  119. package/jobs/hospitality/upsell-upgrade-conversion-tracker.yaml +37 -0
  120. package/jobs/hr/aca-fte-threshold-monitor.yaml +44 -0
  121. package/jobs/hr/cobra-notification-deadline-tracker.yaml +47 -0
  122. package/jobs/hr/compliance-training-completion-check.yaml +41 -0
  123. package/jobs/hr/eeo1-filing-deadline-reminder.yaml +37 -0
  124. package/jobs/hr/handbook-acknowledgment-tracking.yaml +34 -0
  125. package/jobs/hr/headcount-budget-variance-check.yaml +37 -0
  126. package/jobs/hr/leave-of-absence-return-tracker.yaml +42 -0
  127. package/jobs/hr/org-chart-manager-drift-check.yaml +40 -0
  128. package/jobs/hr/pay-equity-band-outlier-check.yaml +58 -0
  129. package/jobs/hr/pto-year-end-use-it-or-lose-it-check.yaml +49 -0
  130. package/jobs/hr/retirement-plan-enrollment-deadline-check.yaml +40 -0
  131. package/jobs/hr/workers-comp-claim-status-check.yaml +42 -0
  132. package/jobs/insurance/adjuster-caseload-balance-check.yaml +45 -0
  133. package/jobs/insurance/agent-broker-license-expiry-tracker.yaml +40 -0
  134. package/jobs/insurance/cat-event-exposure-monitor.yaml +37 -0
  135. package/jobs/insurance/claims-aging-backlog-tracker.yaml +48 -0
  136. package/jobs/insurance/doi-filing-deadline-tracker.yaml +42 -0
  137. package/jobs/insurance/loss-ratio-by-line-monitor.yaml +43 -0
  138. package/jobs/insurance/policy-lapse-rate-monitor.yaml +41 -0
  139. package/jobs/insurance/premium-payment-delinquency-tracker.yaml +42 -0
  140. package/jobs/insurance/quote-to-bind-conversion-tracker.yaml +41 -0
  141. package/jobs/insurance/reinsurance-treaty-renewal-tracker.yaml +38 -0
  142. package/jobs/insurance/siu-fraud-referral-tracker.yaml +36 -0
  143. package/jobs/insurance/subrogation-recovery-tracker.yaml +41 -0
  144. package/jobs/insurance/underwriting-queue-sla-monitor.yaml +45 -0
  145. package/jobs/legal/conflict-of-interest-check-tracker.yaml +38 -0
  146. package/jobs/legal/corporate-minute-book-completeness-check.yaml +31 -0
  147. package/jobs/legal/data-privacy-request-deadline-tracker.yaml +61 -0
  148. package/jobs/legal/entity-authority-document-expiry-check.yaml +37 -0
  149. package/jobs/legal/legal-document-retention-purge-review.yaml +39 -0
  150. package/jobs/legal/litigation-hold-acknowledgment-tracker.yaml +40 -0
  151. package/jobs/legal/non-compete-expiry-tracker.yaml +37 -0
  152. package/jobs/legal/outside-counsel-invoice-budget-check.yaml +37 -0
  153. package/jobs/legal/settlement-payment-schedule-tracker.yaml +34 -0
  154. package/jobs/legal/timekeeper-billable-hours-compliance-check.yaml +39 -0
  155. package/jobs/legal/trademark-infringement-watch.yaml +43 -0
  156. package/jobs/legal/vendor-coi-expiry-tracker.yaml +37 -0
  157. package/jobs/logistics/3pl-performance-scorecard.yaml +45 -0
  158. package/jobs/logistics/bol-freight-class-accuracy-audit.yaml +33 -0
  159. package/jobs/logistics/cargo-insurance-claim-status-check.yaml +39 -0
  160. package/jobs/logistics/carrier-load-tender-acceptance-check.yaml +34 -0
  161. package/jobs/logistics/carrier-otd-performance-scorecard.yaml +41 -0
  162. package/jobs/logistics/carrier-rate-contract-renewal-check.yaml +35 -0
  163. package/jobs/logistics/cross-dock-dwell-time-watch.yaml +43 -0
  164. package/jobs/logistics/freight-invoice-rate-audit.yaml +38 -0
  165. package/jobs/logistics/fuel-surcharge-rate-monitor.yaml +40 -0
  166. package/jobs/logistics/international-shipment-documentation-check.yaml +36 -0
  167. package/jobs/logistics/linehaul-transit-time-variance-check.yaml +43 -0
  168. package/jobs/logistics/proof-of-delivery-reconciliation-check.yaml +38 -0
  169. package/jobs/logistics/route-load-optimization-check.yaml +32 -0
  170. package/jobs/manufacturing/changeover-time-tracker.yaml +29 -0
  171. package/jobs/manufacturing/critical-spare-parts-stock-check.yaml +29 -0
  172. package/jobs/manufacturing/first-pass-yield-report.yaml +37 -0
  173. package/jobs/manufacturing/lot-traceability-audit.yaml +37 -0
  174. package/jobs/manufacturing/non-conformance-report-backlog-check.yaml +34 -0
  175. package/jobs/manufacturing/oee-efficiency-check.yaml +37 -0
  176. package/jobs/manufacturing/osha-recordable-incident-audit.yaml +37 -0
  177. package/jobs/manufacturing/production-schedule-adherence-check.yaml +35 -0
  178. package/jobs/manufacturing/safety-certification-expiry-check.yaml +37 -0
  179. package/jobs/manufacturing/scrap-waste-rate-watch.yaml +33 -0
  180. package/jobs/manufacturing/shift-handoff-report.yaml +37 -0
  181. package/jobs/manufacturing/supplier-quality-ppm-watch.yaml +38 -0
  182. package/jobs/manufacturing/tooling-die-wear-check.yaml +31 -0
  183. package/jobs/manufacturing/work-order-backlog-check.yaml +37 -0
  184. package/jobs/marketing/ad-creative-fatigue-check.yaml +44 -0
  185. package/jobs/marketing/affiliate-partner-performance-check.yaml +38 -0
  186. package/jobs/marketing/attribution-discrepancy-check.yaml +42 -0
  187. package/jobs/marketing/brand-share-of-voice-check.yaml +43 -0
  188. package/jobs/marketing/campaign-roas-cpa-anomaly-check.yaml +41 -0
  189. package/jobs/marketing/competitor-ad-creative-watch.yaml +40 -0
  190. package/jobs/marketing/email-list-growth-rate-check.yaml +43 -0
  191. package/jobs/marketing/landing-page-conversion-drop-check.yaml +44 -0
  192. package/jobs/marketing/mql-to-sql-handoff-sla-check.yaml +29 -0
  193. package/jobs/marketing/mql-volume-pace-check.yaml +34 -0
  194. package/jobs/marketing/paid-search-negative-keyword-waste-check.yaml +37 -0
  195. package/jobs/marketing/press-release-pickup-tracking.yaml +32 -0
  196. package/jobs/marketing/webinar-registration-attendance-check.yaml +38 -0
  197. package/jobs/realestate/capital-reserve-fund-threshold-check.yaml +32 -0
  198. package/jobs/realestate/eviction-notice-deadline-tracker.yaml +37 -0
  199. package/jobs/realestate/landlord-insurance-claim-status-check.yaml +35 -0
  200. package/jobs/realestate/lease-renewal-offer-window-check.yaml +35 -0
  201. package/jobs/realestate/maintenance-request-sla-check.yaml +39 -0
  202. package/jobs/realestate/move-in-move-out-inspection-tracker.yaml +35 -0
  203. package/jobs/realestate/rent-increase-notice-deadline-check.yaml +54 -0
  204. package/jobs/realestate/rent-roll-vacancy-loss-report.yaml +32 -0
  205. package/jobs/realestate/rental-license-renewal-check.yaml +35 -0
  206. package/jobs/realestate/security-deposit-return-deadline-check.yaml +38 -0
  207. package/jobs/realestate/tenant-application-review-backlog-check.yaml +35 -0
  208. package/jobs/realestate/tenant-renters-insurance-compliance-check.yaml +35 -0
  209. package/jobs/realestate/utility-billback-reconciliation-check.yaml +41 -0
  210. package/jobs/restaurant/comp-void-anomaly-tracker.yaml +39 -0
  211. package/jobs/restaurant/daily-sales-flash-report.yaml +36 -0
  212. package/jobs/restaurant/delivery-platform-commission-reconciliation.yaml +33 -0
  213. package/jobs/restaurant/delivery-receiving-discrepancy-check.yaml +33 -0
  214. package/jobs/restaurant/food-handler-permit-expiry-tracker.yaml +33 -0
  215. package/jobs/restaurant/gift-card-liability-check.yaml +45 -0
  216. package/jobs/restaurant/kitchen-ticket-time-watch.yaml +38 -0
  217. package/jobs/restaurant/liquor-pour-cost-variance-check.yaml +34 -0
  218. package/jobs/restaurant/menu-86-frequency-tracker.yaml +39 -0
  219. package/jobs/restaurant/menu-item-profitability-check.yaml +33 -0
  220. package/jobs/restaurant/pos-end-of-day-reconciliation-check.yaml +31 -0
  221. package/jobs/restaurant/table-turnover-rate-tracker.yaml +36 -0
  222. package/jobs/restaurant/waitlist-conversion-check.yaml +37 -0
  223. package/jobs/retail/cash-office-deposit-variance-check.yaml +34 -0
  224. package/jobs/retail/competitor-price-monitoring-check.yaml +42 -0
  225. package/jobs/retail/damaged-merchandise-writeoff-tracker.yaml +41 -0
  226. package/jobs/retail/employee-discount-abuse-check.yaml +39 -0
  227. package/jobs/retail/layaway-special-order-pickup-tracker.yaml +33 -0
  228. package/jobs/retail/loyalty-enrollment-redemption-rate-tracker.yaml +37 -0
  229. package/jobs/retail/markdown-execution-audit-check.yaml +29 -0
  230. package/jobs/retail/planogram-compliance-audit-check.yaml +36 -0
  231. package/jobs/retail/pos-void-refund-anomaly-tracker.yaml +42 -0
  232. package/jobs/retail/price-tag-audit-accuracy-check.yaml +37 -0
  233. package/jobs/retail/sales-per-square-foot-tracker.yaml +36 -0
  234. package/jobs/retail/seasonal-staffing-coverage-check.yaml +35 -0
  235. package/jobs/retail/store-closing-checklist-compliance-check.yaml +32 -0
  236. package/jobs/retail/visual-merchandising-compliance-check.yaml +40 -0
  237. package/jobs/sales/champion-departure-watch.yaml +44 -0
  238. package/jobs/sales/closed-lost-reason-audit.yaml +42 -0
  239. package/jobs/sales/commission-payout-tracker.yaml +32 -0
  240. package/jobs/sales/contract-renewal-opportunity-tracker.yaml +28 -0
  241. package/jobs/sales/discount-approval-pending-check.yaml +31 -0
  242. package/jobs/sales/forecast-submission-compliance-check.yaml +42 -0
  243. package/jobs/sales/multi-year-renewal-escalation-tracker.yaml +31 -0
  244. package/jobs/sales/pipeline-hygiene-audit.yaml +26 -0
  245. package/jobs/sales/poc-trial-conversion-tracker.yaml +29 -0
  246. package/jobs/sales/referral-followup-tracker.yaml +40 -0
  247. package/jobs/sales/territory-coverage-gap-check.yaml +43 -0
  248. package/jobs/veterinary/appointment-no-show-rate-tracker.yaml +49 -0
  249. package/jobs/veterinary/boarding-kennel-capacity-utilization-check.yaml +39 -0
  250. package/jobs/veterinary/client-payment-plan-delinquency-check.yaml +36 -0
  251. package/jobs/veterinary/dvm-license-dea-registration-expiry-check.yaml +41 -0
  252. package/jobs/veterinary/microchip-registration-verification-check.yaml +40 -0
  253. package/jobs/veterinary/patient-record-completeness-audit.yaml +41 -0
  254. package/jobs/veterinary/pet-medication-refill-backlog-check.yaml +36 -0
  255. package/jobs/veterinary/puppy-kitten-vaccine-series-compliance-check.yaml +39 -0
  256. package/jobs/veterinary/senior-pet-wellness-recall-tracker.yaml +43 -0
  257. package/jobs/veterinary/spay-neuter-followup-compliance-check.yaml +35 -0
  258. package/jobs/veterinary/specialist-referral-followup-check.yaml +38 -0
  259. package/jobs/veterinary/surgical-schedule-utilization-check.yaml +36 -0
  260. package/jobs/veterinary/vet-staff-ce-credit-tracking.yaml +36 -0
  261. package/jobs/warehousing/conveyor-sortation-downtime-watch.yaml +48 -0
  262. package/jobs/warehousing/labor-productivity-rate-check.yaml +33 -0
  263. package/jobs/warehousing/mhe-preventive-maintenance-check.yaml +38 -0
  264. package/jobs/warehousing/order-fulfillment-sla-watch.yaml +42 -0
  265. package/jobs/warehousing/shift-headcount-coverage-check.yaml +33 -0
  266. package/jobs/warehousing/slotting-velocity-review-check.yaml +44 -0
  267. package/jobs/warehousing/warehouse-damage-writeoff-review.yaml +41 -0
  268. package/jobs/warehousing/warehouse-near-miss-incident-rate-watch.yaml +47 -0
  269. package/jobs/warehousing/warehouse-space-utilization-check.yaml +39 -0
  270. package/jobs/warehousing/wave-pick-batch-efficiency-check.yaml +33 -0
  271. package/jobs/warehousing/wms-integration-error-check.yaml +36 -0
  272. package/jobs/warehousing/yard-trailer-detention-watch.yaml +41 -0
  273. package/lib/category-descriptions.js +12 -12
  274. package/lib/duplicates-allowlist.js +15 -0
  275. package/package.json +2 -2
@@ -0,0 +1,37 @@
1
+ id: safety-certification-expiry-check
2
+ version: 1
3
+ name: Safety Equipment Operator Certification Expiry Check
4
+ description: >
5
+ Warns before an operator's certification for safety-sensitive equipment
6
+ (forklift, overhead crane, powered industrial truck, etc.) expires. Use
7
+ this if an uncertified operator has ever kept running equipment for
8
+ weeks because nobody was tracking cert expiry dates against the roster.
9
+ category: manufacturing
10
+ tags: [manufacturing, safety, certification, training, compliance]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F, -v today="$today" -v warn={{warn_days}} '
17
+ NR>1 {
18
+ cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
19
+ cmd | getline exp_ts; close(cmd);
20
+ days_left = int((exp_ts - today) / 86400);
21
+ if (days_left <= warn) print "WARNING: " $1 "'"'"'s " $2 " certification expires in " days_left " days (" $3 ")";
22
+ }
23
+ ' {{operator_certs_csv}}
24
+ variables:
25
+ operator_certs_csv:
26
+ default: "./operator-certifications.csv"
27
+ description: "CSV with header row, columns: operator_name,equipment_type,cert_expiry_date(YYYY-MM-DD)."
28
+ warn_days:
29
+ default: 21
30
+ description: Days before a certification expires to start warning.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: >
33
+ Covers operator training certifications (who's allowed to run the
34
+ equipment), distinct from warehousing's forklift-inspection-check,
35
+ which covers pre-shift equipment condition checks, not operator
36
+ credentials. Keep operator-certifications.csv updated from your
37
+ training records after each recertification.
@@ -0,0 +1,33 @@
1
+ id: scrap-waste-rate-watch
2
+ version: 1
3
+ name: Scrap and Waste Rate Watch
4
+ description: >
5
+ Tracks scrapped material as a percentage of total material consumed and
6
+ flags it when it runs above target. Use this if scrap has ever crept up
7
+ gradually until it showed up as a surprise hit to material cost at
8
+ month-end.
9
+ category: manufacturing
10
+ tags: [manufacturing, scrap, waste, cost]
11
+ schedule: "0 7 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v target={{scrap_target_pct}} '
16
+ NR==1 {next}
17
+ { consumed += $2; scrapped += $3 }
18
+ END {
19
+ if (consumed == 0) { print "OK: no material consumption logged for the period"; exit 0 }
20
+ pct = (scrapped / consumed) * 100;
21
+ if (pct > target) printf "ABOVE TARGET: scrap rate %.2f%% (%.0f of %.0f units scrapped), target %.2f%%\n", pct, scrapped, consumed, target;
22
+ else printf "OK: scrap rate %.2f%% is within the %.2f%% target\n", pct, target;
23
+ }
24
+ ' "{{scrap_log_csv}}"
25
+ variables:
26
+ scrap_log_csv:
27
+ default: "./scrap-log.csv"
28
+ description: "CSV with header row, columns: material,units_consumed,units_scrapped — one row per material/day for the reporting window."
29
+ scrap_target_pct:
30
+ default: 3
31
+ description: Maximum acceptable scrap rate as a percentage of material consumed.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Export scrap-log.csv from your MES's material consumption and scrap-reason records before each run.
@@ -0,0 +1,37 @@
1
+ id: shift-handoff-report
2
+ version: 1
3
+ name: Shift Handoff Report
4
+ description: >
5
+ Pulls the outgoing shift's production, downtime, and open-issue notes
6
+ and drafts a handoff summary for the incoming shift lead. Use this if
7
+ an incoming shift has ever started blind because the handoff was a
8
+ rushed hallway conversation instead of something written down.
9
+ category: manufacturing
10
+ tags: [manufacturing, shift-handoff, production, communication]
11
+ schedule: "0 6,14,22 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Pull data for the shift that just ended on line(s) {{line_ids}} from
16
+ {{data_source}}: units produced vs. target, any downtime events and
17
+ their duration/cause, quality holds or rejects, and any open
18
+ maintenance or safety issues.
19
+
20
+ Draft a shift handoff note for the incoming lead covering:
21
+ 1. Production vs. target for the shift, in one line.
22
+ 2. Any downtime events, with cause and duration.
23
+ 3. Open issues the incoming shift needs to watch (unresolved quality
24
+ holds, equipment acting up, parts running low).
25
+ 4. Anything explicitly flagged by the outgoing lead as "don't forget."
26
+
27
+ Keep it to a few short bullets — this should be readable in under a
28
+ minute at the start of a shift, not a full report.
29
+ variables:
30
+ line_ids:
31
+ default: "line-1"
32
+ description: Production line(s) this handoff covers.
33
+ data_source:
34
+ default: "your MES/SCADA system and shift log"
35
+ description: Where to pull production, downtime, and issue data from.
36
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
37
+ notes: Draft-only — review before posting to the shift log or handing off verbally, especially anything about open safety issues.
@@ -0,0 +1,38 @@
1
+ id: supplier-quality-ppm-watch
2
+ version: 1
3
+ name: Supplier Quality PPM Watch
4
+ description: >
5
+ Calculates each supplier's defect rate in parts-per-million from
6
+ incoming inspection records and flags anyone above target. Use this if
7
+ a supplier's defective parts have ever slipped through in small enough
8
+ numbers each month that no one noticed the trend until a batch got bad
9
+ enough to stop the line.
10
+ category: manufacturing
11
+ tags: [manufacturing, supplier, quality, incoming-inspection, ppm]
12
+ schedule: "0 8 1 * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v target={{ppm_target}} '
17
+ NR==1 {next}
18
+ {
19
+ received[$1] += $2;
20
+ rejected[$1] += $3;
21
+ }
22
+ END {
23
+ for (s in received) {
24
+ ppm = (rejected[s] / received[s]) * 1000000;
25
+ status = (ppm > target) ? "ABOVE TARGET" : "OK";
26
+ printf "%s: supplier %s — %.0f PPM (%d rejected of %d received), target %d PPM\n", status, s, ppm, rejected[s], received[s], target;
27
+ }
28
+ }
29
+ ' "{{incoming_inspection_csv}}"
30
+ variables:
31
+ incoming_inspection_csv:
32
+ default: "./incoming-inspection-log.csv"
33
+ description: "CSV with header row, columns: supplier_name,units_received,units_rejected — one row per receipt/day for the reporting window."
34
+ ppm_target:
35
+ default: 500
36
+ description: Maximum acceptable defective parts-per-million before a supplier is flagged.
37
+ compatible_agents: [generic, claude, codex]
38
+ notes: Distinct from supplier-otd-performance-watch — that one tracks delivery timeliness, this one tracks incoming part quality. Export incoming-inspection-log.csv from your receiving/incoming-QC records.
@@ -0,0 +1,31 @@
1
+ id: tooling-die-wear-check
2
+ version: 1
3
+ name: Tooling and Die Wear Check
4
+ description: >
5
+ Tracks cycle counts against a tool or die's rated life and flags it
6
+ when it's approaching end-of-life. Use this if a worn die has ever kept
7
+ running past its rated cycle count until it started producing bad
8
+ parts nobody traced back to the tooling.
9
+ category: manufacturing
10
+ tags: [manufacturing, tooling, dies, maintenance, wear]
11
+ schedule: "0 6 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v warn={{warn_pct_remaining}} '
16
+ NR==1 {next}
17
+ {
18
+ pct_used = ($2 / $3) * 100;
19
+ pct_remaining = 100 - pct_used;
20
+ if (pct_remaining <= warn) printf "WARNING: tool \"%s\" at %.0f%% of rated life (%d of %d cycles), %.0f%% remaining\n", $1, pct_used, $2, $3, pct_remaining;
21
+ }
22
+ ' "{{tooling_cycles_csv}}"
23
+ variables:
24
+ tooling_cycles_csv:
25
+ default: "./tooling-cycle-counts.csv"
26
+ description: "CSV with header row, columns: tool_id,cycles_used,rated_life_cycles."
27
+ warn_pct_remaining:
28
+ default: 15
29
+ description: Percentage of rated life remaining at which to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Update tooling-cycle-counts.csv from your press/molding machine's cycle counters or MES tooling module before each run — one row per active tool or die.
@@ -0,0 +1,37 @@
1
+ id: work-order-backlog-check
2
+ version: 1
3
+ name: Work Order Backlog Check
4
+ description: >
5
+ Counts open production work orders that have sat unstarted or unfinished
6
+ past their planned completion date. Use this if a work order has ever
7
+ quietly aged for weeks in the queue while everyone assumed someone else
8
+ had picked it up.
9
+ category: manufacturing
10
+ tags: [manufacturing, work-orders, production-planning, backlog]
11
+ schedule: "0 6 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F',' -v today="$today" -v warn={{overdue_warn_count}} '
17
+ NR==1 {next}
18
+ {
19
+ cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
20
+ cmd | getline due_ts; close(cmd);
21
+ if ($2 != "closed" && due_ts < today) { overdue++; printf "OVERDUE: work order %s (\"%s\") was due %s\n", $1, $4, $3 }
22
+ }
23
+ END {
24
+ if (overdue+0 >= warn) print "WARNING: " overdue " work orders are past their planned completion date";
25
+ else if (overdue+0 > 0) print "NOTE: " overdue " work order(s) overdue, below the " warn "-order warning threshold";
26
+ else print "OK: no overdue work orders";
27
+ }
28
+ ' "{{work_orders_csv}}"
29
+ variables:
30
+ work_orders_csv:
31
+ default: "./work-orders.csv"
32
+ description: "CSV with header row, columns: work_order_id,status (open/in-progress/closed),due_date(YYYY-MM-DD),description."
33
+ overdue_warn_count:
34
+ default: 5
35
+ description: Number of overdue work orders that triggers a WARNING instead of a NOTE.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: Export work-orders.csv from your MES/ERP work order module before each run — this job only compares dates, it doesn't pull the data itself.
@@ -0,0 +1,44 @@
1
+ id: ad-creative-fatigue-check
2
+ version: 1
3
+ name: Ad Creative Fatigue Check
4
+ description: >
5
+ Checks an ad creative's frequency (average times seen per user) and
6
+ click-through rate against thresholds, flagging fatigue before
7
+ performance craters. Use this if a top-performing ad has ever kept
8
+ running past its shelf life, burning budget on an audience that had
9
+ already tuned it out.
10
+ category: marketing
11
+ tags: [marketing, ads, creative, fatigue]
12
+ schedule: "0 8 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ stats=$(curl -s -H "Authorization: Bearer {{ad_platform_api_token}}" "{{ad_platform_stats_api_url}}");
17
+ frequency=$(echo "$stats" | grep -o '"frequency":[0-9.]*' | head -n1 | cut -d: -f2);
18
+ ctr=$(echo "$stats" | grep -o '"ctr":[0-9.]*' | head -n1 | cut -d: -f2);
19
+ if [ -z "$frequency" ] || [ -z "$ctr" ]; then echo "ERROR: could not fetch frequency/ctr from {{ad_platform_stats_api_url}}"; exit 1; fi;
20
+ if awk "BEGIN{exit !($frequency > {{max_frequency}} && $ctr < {{min_ctr_pct}})}"; then
21
+ echo "WARNING: creative {{creative_name}} fatigued — frequency ${frequency} (max {{max_frequency}}), CTR ${ctr}% (min {{min_ctr_pct}}%)";
22
+ exit 1;
23
+ else echo "OK: creative {{creative_name}} — frequency ${frequency}, CTR ${ctr}%"; fi
24
+ variables:
25
+ ad_platform_stats_api_url:
26
+ default: "https://api.example-ads.com/creatives/{{creative_name}}/stats"
27
+ description: Ad platform reporting API endpoint returning frequency and ctr fields for the creative.
28
+ ad_platform_api_token:
29
+ default: "your-api-token"
30
+ description: API token for the ad platform.
31
+ creative_name:
32
+ default: "your creative"
33
+ description: Name/ID of the ad creative to check.
34
+ max_frequency:
35
+ default: 4
36
+ description: Average impressions per user above which fatigue is likely.
37
+ min_ctr_pct:
38
+ default: 0.5
39
+ description: Click-through rate percent below which, combined with high frequency, counts as fatigue.
40
+ compatible_agents: [generic, claude, codex]
41
+ notes: >
42
+ Generic REST pattern — point at your ad platform's reporting API for a
43
+ single creative; both frequency and CTR must miss their thresholds
44
+ together so a naturally low-CTR-but-fresh creative doesn't false-flag.
@@ -0,0 +1,38 @@
1
+ id: affiliate-partner-performance-check
2
+ version: 1
3
+ name: Affiliate/Partner Performance Check
4
+ description: >
5
+ Compares each affiliate or partner's referred conversions and revenue
6
+ against their target for the period and flags underperformers. Use
7
+ this if a partner program has ever kept paying placement fees to
8
+ partners who quietly stopped actually driving conversions.
9
+ category: marketing
10
+ tags: [marketing, affiliate, partners, performance]
11
+ schedule: "0 8 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ fail=0;
16
+ while IFS=',' read -r partner conversions revenue target_revenue; do
17
+ [ "$partner" = "partner_name" ] && continue;
18
+ [ -z "$partner" ] && continue;
19
+ pct=$(awk "BEGIN{printf \"%.0f\", ($revenue/$target_revenue)*100}");
20
+ if awk "BEGIN{exit !($pct < {{underperformance_threshold_pct}})}"; then
21
+ echo "UNDERPERFORMING: $partner — \$$revenue of \$$target_revenue target (${pct}%), $conversions conversions";
22
+ fail=1;
23
+ fi;
24
+ done < "{{partner_performance_csv_path}}";
25
+ exit $fail
26
+ variables:
27
+ partner_performance_csv_path:
28
+ default: "./partner-performance.csv"
29
+ description: "CSV with header row, columns: partner_name,conversions,revenue,target_revenue — one row per affiliate/partner for the period."
30
+ underperformance_threshold_pct:
31
+ default: 50
32
+ description: Percent of target revenue below which a partner is flagged as underperforming.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: >
35
+ Distinct from creator/affiliate-link-expiry-check (tracks individual
36
+ link/code expiry dates) — this tracks whether each partner relationship
37
+ is still actually performing, on a recurring per-period cadence rather
38
+ than a link-by-link deadline.
@@ -0,0 +1,42 @@
1
+ id: attribution-discrepancy-check
2
+ version: 1
3
+ name: Marketing Attribution Discrepancy Check
4
+ description: >
5
+ Compares conversions or revenue attributed to a channel across two
6
+ systems — the ad platform's own reporting and your analytics/CRM — and
7
+ flags when they diverge significantly. Use this if you've ever reported
8
+ two different numbers for the same campaign's results in the same
9
+ meeting because the ad platform and the analytics tool didn't agree.
10
+ category: marketing
11
+ tags: [marketing, attribution, analytics, reporting]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Compare attributed results for channel "{{channel_name}}" over the last
17
+ {{lookback_days}} days between {{source_a_hint}} and {{source_b_hint}}.
18
+ 1. Pull conversions (or revenue) attributed to the channel from each
19
+ source.
20
+ 2. Compute the percent difference between the two numbers.
21
+ 3. Flag if the difference exceeds {{discrepancy_threshold_pct}}%.
22
+ 4. If flagged, suggest likely causes (attribution window mismatch,
23
+ UTM tagging gaps, view-through vs. click-through counting, deduping
24
+ differences) based on what's visible.
25
+ variables:
26
+ channel_name:
27
+ default: "your channel (e.g. Google Ads, Meta Ads, Email)"
28
+ description: Marketing channel to compare attribution for.
29
+ source_a_hint:
30
+ default: "the ad platform's own conversion reporting"
31
+ description: First source of attributed conversions/revenue.
32
+ source_b_hint:
33
+ default: "your analytics tool or CRM (GA4, PostHog, Salesforce, HubSpot)"
34
+ description: Second source of attributed conversions/revenue.
35
+ lookback_days:
36
+ default: 30
37
+ description: Window of results to compare.
38
+ discrepancy_threshold_pct:
39
+ default: 20
40
+ description: Percent difference between sources that triggers a flag.
41
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
42
+ notes: No generic script mode — pulling from two different reporting systems and reasoning about why they diverge needs judgment, not just a threshold comparison.
@@ -0,0 +1,43 @@
1
+ id: brand-share-of-voice-check
2
+ version: 1
3
+ name: Brand Share of Voice Check
4
+ description: >
5
+ Compares how often your brand is mentioned online versus a list of
6
+ named competitors over a recent window, flagging a real shift in share
7
+ of voice. Use this if a competitor has ever quietly out-marketed you
8
+ and the first sign was a sales rep mentioning it in a deal review
9
+ instead of a share-of-voice report catching the trend.
10
+ category: marketing
11
+ tags: [marketing, competitor, share-of-voice, brand]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Search for mentions of "{{brand_name}}" and each of these competitors —
17
+ {{competitor_names}} — from the last {{lookback_days}} days across
18
+ whatever sources you have access to (web search, X/Twitter, Reddit,
19
+ news).
20
+ 1. Estimate a rough mention count for the brand and each competitor.
21
+ 2. Compute the brand's approximate share of voice (brand mentions /
22
+ total mentions across all names).
23
+ 3. Compare to the prior period if you can find historical data, and
24
+ flag a meaningful drop in share.
25
+ 4. If one competitor stands out as gaining ground, name it and note
26
+ what seems to be driving it (launch, campaign, controversy) if
27
+ visible.
28
+ variables:
29
+ brand_name:
30
+ default: "your brand"
31
+ description: Your brand/product name to track.
32
+ competitor_names:
33
+ default: "Competitor A, Competitor B"
34
+ description: Comma-separated list of named competitors to compare against.
35
+ lookback_days:
36
+ default: 30
37
+ description: Window of mentions to consider.
38
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
39
+ notes: >
40
+ No generic script mode — needs live search across sources and judgment
41
+ to estimate relative volume. Distinct from content/social-mentions-watch
42
+ (reads sentiment/triage of your own brand's mentions one by one) — this
43
+ compares mention volume across named competitors instead.
@@ -0,0 +1,41 @@
1
+ id: campaign-roas-cpa-anomaly-check
2
+ version: 1
3
+ name: Campaign ROAS/CPA Anomaly Check
4
+ description: >
5
+ Checks a campaign's return-on-ad-spend against a minimum threshold and
6
+ flags a real collapse. Use this if a campaign has ever kept spending its
7
+ normal daily budget while ROAS quietly cratered because a bid strategy
8
+ or targeting change nobody caught broke conversion efficiency.
9
+ category: marketing
10
+ tags: [marketing, ads, roas, performance]
11
+ schedule: "0 8 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ stats=$(curl -s -H "Authorization: Bearer {{ad_platform_api_token}}" "{{ad_platform_stats_api_url}}");
16
+ roas=$(echo "$stats" | grep -o '"roas":[0-9.]*' | head -n1 | cut -d: -f2);
17
+ if [ -z "$roas" ]; then echo "ERROR: could not fetch ROAS from {{ad_platform_stats_api_url}}"; exit 1; fi;
18
+ if awk "BEGIN{exit !($roas < {{min_roas}})}"; then
19
+ echo "WARNING: ROAS ${roas}x for campaign {{campaign_name}} is below minimum threshold {{min_roas}}x";
20
+ exit 1;
21
+ else echo "OK: ROAS ${roas}x for campaign {{campaign_name}}"; fi
22
+ variables:
23
+ ad_platform_stats_api_url:
24
+ default: "https://api.example-ads.com/campaigns/{{campaign_name}}/stats"
25
+ description: Ad platform reporting API endpoint returning a roas field for the campaign.
26
+ ad_platform_api_token:
27
+ default: "your-api-token"
28
+ description: API token for the ad platform.
29
+ campaign_name:
30
+ default: "your campaign"
31
+ description: Name/ID of the ad campaign to check.
32
+ min_roas:
33
+ default: 2
34
+ description: Minimum acceptable return-on-ad-spend multiple before flagging.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: >
37
+ Generic REST pattern — point at your ad platform's (Google Ads, Meta Ads,
38
+ TikTok Ads) reporting API; if it doesn't report ROAS directly, compute it
39
+ as conversion value / spend before comparing. Distinct from
40
+ ad-spend-pacing-check (tracks spend velocity vs. budget) — this tracks
41
+ spend efficiency instead.
@@ -0,0 +1,40 @@
1
+ id: competitor-ad-creative-watch
2
+ version: 1
3
+ name: Competitor Ad Creative Watch
4
+ description: >
5
+ Scans a competitor's public ad library (Meta Ad Library, Google Ads
6
+ Transparency Center, or similar) for new or changed ad creative and
7
+ summarizes what's new. Use this if a competitor has ever launched a new
8
+ campaign, offer, or positioning angle and you found out from a
9
+ customer instead of watching their ad library yourself.
10
+ category: marketing
11
+ tags: [marketing, competitor, ads, monitoring]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Check {{competitor_name}}'s ads at {{ad_library_url_hint}} for anything
17
+ new in the last {{lookback_days}} days.
18
+ 1. List any new creative, offer, or messaging angle that wasn't running
19
+ before.
20
+ 2. Note the format (video, static, carousel) and apparent target
21
+ audience if visible.
22
+ 3. If nothing new, say so in one line.
23
+ 4. If something new stands out, note why it might matter (new offer,
24
+ new positioning, entering a new channel).
25
+ variables:
26
+ competitor_name:
27
+ default: "competitor name"
28
+ description: Competitor whose ads to check.
29
+ ad_library_url_hint:
30
+ default: "Meta Ad Library or Google Ads Transparency Center, searched by advertiser name"
31
+ description: Where to look up the competitor's running ads.
32
+ lookback_days:
33
+ default: 7
34
+ description: Window of new/changed ads to consider.
35
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
36
+ notes: >
37
+ No generic script mode — ad library sites vary and usually require a
38
+ live search rather than a stable API. Distinct from
39
+ competitor-page-diff-watch (tracks a competitor's own website) — this
40
+ tracks what they're actively advertising instead.
@@ -0,0 +1,43 @@
1
+ id: email-list-growth-rate-check
2
+ version: 1
3
+ name: Email List Growth Rate Check
4
+ description: >
5
+ Compares net email list growth (new subscribers minus unsubscribes and
6
+ bounces) over a recent period against a minimum growth rate, flagging a
7
+ stalled or shrinking list. Use this if a list has ever been quietly
8
+ shrinking for months because unsubscribes were outpacing signups and
9
+ nobody was tracking the net number.
10
+ category: marketing
11
+ tags: [marketing, email, list-growth, retention]
12
+ schedule: "0 9 1 * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ stats=$(curl -s -H "Authorization: Bearer {{esp_api_token}}" "{{esp_list_stats_api_url}}");
17
+ current=$(echo "$stats" | grep -o '"current_count":[0-9]*' | head -n1 | cut -d: -f2);
18
+ previous=$(echo "$stats" | grep -o '"previous_count":[0-9]*' | head -n1 | cut -d: -f2);
19
+ if [ -z "$current" ] || [ -z "$previous" ] || [ "$previous" -eq 0 ]; then echo "ERROR: could not compute growth rate from {{esp_list_stats_api_url}}"; exit 1; fi;
20
+ growth_pct=$(awk "BEGIN{printf \"%.2f\", (($current-$previous)/$previous)*100}");
21
+ if awk "BEGIN{exit !($growth_pct < {{min_growth_rate_pct}})}"; then
22
+ echo "WARNING: list grew ${growth_pct}% over {{lookback_days}} days (min {{min_growth_rate_pct}}%) — $previous to $current subscribers";
23
+ exit 1;
24
+ else echo "OK: list grew ${growth_pct}% — $previous to $current subscribers"; fi
25
+ variables:
26
+ esp_list_stats_api_url:
27
+ default: "https://api.example-esp.com/lists/main/stats?days={{lookback_days}}"
28
+ description: Email service provider endpoint returning current_count and previous_count subscriber totals for the window.
29
+ esp_api_token:
30
+ default: "your-api-token"
31
+ description: API token for the email service provider.
32
+ lookback_days:
33
+ default: 30
34
+ description: Window over which to measure net list growth.
35
+ min_growth_rate_pct:
36
+ default: 0
37
+ description: Minimum acceptable net growth rate percent over the window (0 means "must not shrink").
38
+ compatible_agents: [generic, claude, codex]
39
+ notes: >
40
+ Generic REST pattern — point at your ESP's (Mailchimp, Klaviyo,
41
+ SendGrid) list stats endpoint; adjust field names to match its response
42
+ shape. Distinct from newsletter-unsubscribe-spike-check (per-send
43
+ unsubscribe rate) — this tracks net list size trend over time instead.
@@ -0,0 +1,44 @@
1
+ id: landing-page-conversion-drop-check
2
+ version: 1
3
+ name: Landing Page Conversion Drop Check
4
+ description: >
5
+ Reviews a landing page's conversion rate over a recent window against
6
+ its baseline and flags a real drop. Use this if a landing page has ever
7
+ quietly stopped converting — a broken form, a slow load, a redesign
8
+ that hurt clarity — while traffic and ad spend kept flowing in as if
9
+ nothing changed.
10
+ category: marketing
11
+ tags: [marketing, landing-page, conversion, analytics]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Check conversion rate for {{page_url}} using {{analytics_hint}}.
17
+ 1. Compare the conversion rate over the last {{recent_days}} days to the
18
+ prior {{baseline_days}}-day baseline.
19
+ 2. Flag a drop of {{drop_threshold_pct}}% or more.
20
+ 3. If flagged, note any accompanying signal that's visible (bounce rate
21
+ spike, page load time, form error rate, traffic source mix shift)
22
+ that might explain the drop.
23
+ variables:
24
+ page_url:
25
+ default: "https://example.com/landing-page"
26
+ description: Landing page URL to check conversion rate for.
27
+ analytics_hint:
28
+ default: "your web analytics tool (GA4, PostHog, Mixpanel, etc.)"
29
+ description: Where conversion data lives.
30
+ recent_days:
31
+ default: 7
32
+ description: Recent window to evaluate.
33
+ baseline_days:
34
+ default: 30
35
+ description: Prior window used as the baseline for comparison.
36
+ drop_threshold_pct:
37
+ default: 20
38
+ description: Percent drop in conversion rate that counts as a real regression.
39
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
40
+ notes: >
41
+ No generic script mode — pulling conversion rate needs an analytics API
42
+ and judgment on which accompanying signals matter. Distinct from
43
+ broken-campaign-link-check (page reachability only) — this catches a
44
+ page that loads fine but stopped converting.
@@ -0,0 +1,29 @@
1
+ id: mql-to-sql-handoff-sla-check
2
+ version: 1
3
+ name: MQL-to-SQL Handoff SLA Check
4
+ description: >
5
+ Checks how long marketing-qualified leads have been sitting since
6
+ becoming an MQL without sales accepting them as sales-qualified, and
7
+ flags leads stuck past the handoff SLA. Use this if a hot lead has ever
8
+ gone cold sitting in the queue between marketing handing it off and
9
+ sales actually picking it up.
10
+ category: marketing
11
+ tags: [marketing, mql, handoff, funnel, sla]
12
+ schedule: "0 * * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ psql "{{database_url}}" -t -c "select name, email, mql_at from leads where status = 'mql' and sql_accepted_at is null and mql_at < now() - interval '{{handoff_sla_hours}} hours';"
17
+ variables:
18
+ database_url:
19
+ default: "postgres://user:pass@host:5432/db"
20
+ description: Connection string for the marketing/CRM leads database.
21
+ handoff_sla_hours:
22
+ default: 4
23
+ description: Hours an MQL can wait for sales acceptance before it's flagged as stuck.
24
+ compatible_agents: [generic, claude, codex]
25
+ notes: >
26
+ Assumes a `leads` table with `status`, `mql_at`, and `sql_accepted_at`
27
+ columns — adjust to your CRM's schema. Distinct from
28
+ sales/lead-response-time-check (first-touch response time on any new
29
+ lead) — this checks the specific marketing-to-sales handoff stage.
@@ -0,0 +1,34 @@
1
+ id: mql-volume-pace-check
2
+ version: 1
3
+ name: MQL Volume Pace Check
4
+ description: >
5
+ Compares marketing-qualified-lead (MQL) volume so far this period
6
+ against the target pace and flags under-delivery early. Use this if a
7
+ quarter has ever ended short on MQLs and sales only found out during
8
+ the pipeline review, instead of marketing catching it mid-quarter with
9
+ enough runway to fix it.
10
+ category: marketing
11
+ tags: [marketing, mql, funnel, pipeline]
12
+ schedule: "0 8 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ count=$(psql "{{database_url}}" -t -c "select count(*) from leads where status = 'mql' and created_at >= date_trunc('quarter', current_date);");
17
+ target={{quarterly_mql_target}};
18
+ day_of_quarter=$(( ( $(date +%j) - 1 ) % 91 + 1 ));
19
+ expected=$(awk "BEGIN{printf \"%.0f\", ($target/91)*$day_of_quarter}");
20
+ echo "MQL pace check: $count MQLs so far this quarter vs. expected ~$expected (target $target)";
21
+ if [ "$count" -lt "$expected" ]; then echo "WARNING: MQL volume behind pace"; exit 1; fi
22
+ variables:
23
+ database_url:
24
+ default: "postgres://user:pass@host:5432/db"
25
+ description: Connection string for the marketing/CRM leads database.
26
+ quarterly_mql_target:
27
+ default: 900
28
+ description: Target MQL count for the quarter.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: >
31
+ Assumes a `leads` table with a `status` column that includes an `mql`
32
+ value and a `created_at` timestamp — adjust the query to your marketing
33
+ automation/CRM schema. Uses a flat 91-day quarter approximation for
34
+ pacing; swap in exact fiscal quarter boundaries if yours differ.