@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.
- package/README.md +31 -44
- package/catalog.json +8862 -1873
- package/jobs/automotive/ase-certification-expiry-check.yaml +36 -0
- package/jobs/automotive/csi-score-monitor.yaml +33 -0
- package/jobs/automotive/customer-pay-warranty-pay-mix-tracker.yaml +47 -0
- package/jobs/automotive/fi-product-attachment-rate-tracker.yaml +39 -0
- package/jobs/automotive/loaner-fleet-availability-check.yaml +40 -0
- package/jobs/automotive/manufacturer-recall-notice-check.yaml +39 -0
- package/jobs/automotive/parts-reorder-point-check.yaml +36 -0
- package/jobs/automotive/repair-cycle-time-trend-monitor.yaml +42 -0
- package/jobs/automotive/service-appointment-no-show-tracker.yaml +38 -0
- package/jobs/automotive/service-bay-utilization-check.yaml +38 -0
- package/jobs/automotive/shop-supply-reorder-check.yaml +31 -0
- package/jobs/automotive/trade-in-appraisal-variance-check.yaml +39 -0
- package/jobs/automotive/used-vehicle-inventory-aging-check.yaml +35 -0
- package/jobs/construction/critical-path-material-lead-time-review.yaml +43 -0
- package/jobs/construction/daily-jobsite-log-compliance-check.yaml +34 -0
- package/jobs/construction/equipment-utilization-cost-check.yaml +35 -0
- package/jobs/construction/heavy-equipment-inspection-compliance-check.yaml +34 -0
- package/jobs/construction/jobsite-safety-incident-near-miss-tracker.yaml +35 -0
- package/jobs/construction/lien-waiver-collection-tracker.yaml +27 -0
- package/jobs/construction/permit-application-approval-backlog-check.yaml +33 -0
- package/jobs/construction/project-budget-variance-check.yaml +34 -0
- package/jobs/construction/punch-list-completion-tracker.yaml +36 -0
- package/jobs/construction/retainage-holdback-release-tracker.yaml +33 -0
- package/jobs/construction/rfi-response-time-tracker.yaml +33 -0
- package/jobs/construction/subcontractor-pay-application-approval-tracker.yaml +35 -0
- package/jobs/construction/submittal-shop-drawing-review-check.yaml +45 -0
- package/jobs/construction/weather-delay-impact-log.yaml +44 -0
- package/jobs/ecommerce/affiliate-commission-payout-check.yaml +38 -0
- package/jobs/ecommerce/back-in-stock-notification-backlog-check.yaml +30 -0
- package/jobs/ecommerce/bundle-component-stock-mismatch-check.yaml +37 -0
- package/jobs/ecommerce/chargeback-fraud-risk-order-review.yaml +43 -0
- package/jobs/ecommerce/competitor-price-watch.yaml +60 -0
- package/jobs/ecommerce/economic-nexus-threshold-check.yaml +43 -0
- package/jobs/ecommerce/failed-payment-dunning-check.yaml +35 -0
- package/jobs/ecommerce/marketplace-listing-sync-drift-check.yaml +48 -0
- package/jobs/ecommerce/product-feed-health-check.yaml +35 -0
- package/jobs/ecommerce/purchase-order-overdue-check.yaml +32 -0
- package/jobs/ecommerce/storefront-ssl-domain-expiry-check.yaml +46 -0
- package/jobs/ecommerce/vip-tier-reclassification-check.yaml +55 -0
- package/jobs/ecommerce/wishlist-abandonment-check.yaml +37 -0
- package/jobs/education/chronic-absenteeism-tracker.yaml +34 -0
- package/jobs/education/department-budget-variance-check.yaml +37 -0
- package/jobs/education/enrollment-withdrawal-trend-tracker.yaml +39 -0
- package/jobs/education/facility-work-order-backlog-check.yaml +34 -0
- package/jobs/education/free-reduced-lunch-eligibility-renewal-check.yaml +36 -0
- package/jobs/education/iep-504-review-deadline-tracker.yaml +35 -0
- package/jobs/education/parent-teacher-conference-noshow-tracker.yaml +29 -0
- package/jobs/education/school-bus-route-ontime-check.yaml +40 -0
- package/jobs/education/standardized-test-registration-deadline-check.yaml +35 -0
- package/jobs/education/substitute-teacher-fill-rate-tracker.yaml +35 -0
- package/jobs/education/teacher-certification-expiry-tracker.yaml +35 -0
- package/jobs/education/textbook-inventory-shortage-check.yaml +32 -0
- package/jobs/finance/accounts-payable-aging-check.yaml +40 -0
- package/jobs/finance/bank-statement-reconciliation-check.yaml +40 -0
- package/jobs/finance/budget-vs-actual-variance-report.yaml +38 -0
- package/jobs/finance/contractor-1099-threshold-tracker.yaml +43 -0
- package/jobs/finance/credit-utilization-watch.yaml +40 -0
- package/jobs/finance/duplicate-payment-detection.yaml +43 -0
- package/jobs/finance/expense-report-compliance-check.yaml +46 -0
- package/jobs/finance/late-fee-interest-risk-check.yaml +43 -0
- package/jobs/finance/loan-covenant-compliance-check.yaml +37 -0
- package/jobs/finance/month-end-close-checklist-tracker.yaml +39 -0
- package/jobs/finance/multi-account-cash-position-rollup.yaml +45 -0
- package/jobs/finance/petty-cash-float-reconciliation.yaml +43 -0
- package/jobs/finance/quarterly-estimated-tax-calculator.yaml +66 -0
- package/jobs/finance/vendor-early-pay-discount-tracker.yaml +45 -0
- package/jobs/fleet/accident-incident-report-tracker.yaml +34 -0
- package/jobs/fleet/driver-mvr-review-tracker.yaml +34 -0
- package/jobs/fleet/driver-safety-score-monitor.yaml +39 -0
- package/jobs/fleet/ev-battery-health-check.yaml +36 -0
- package/jobs/fleet/fuel-efficiency-trend-monitor.yaml +33 -0
- package/jobs/fleet/geofence-violation-check.yaml +37 -0
- package/jobs/fleet/lease-return-condition-check.yaml +33 -0
- package/jobs/fleet/tire-wear-replacement-check.yaml +30 -0
- package/jobs/fleet/toll-violation-tracker.yaml +34 -0
- package/jobs/fleet/vehicle-pool-scheduling-conflict-check.yaml +37 -0
- package/jobs/fleet/vehicle-tco-tracker.yaml +41 -0
- package/jobs/fleet/vehicle-utilization-rate-check.yaml +37 -0
- package/jobs/growth/cohort-retention-curve-monitor.yaml +39 -0
- package/jobs/growth/customer-health-score-monitor.yaml +37 -0
- package/jobs/growth/dau-mau-engagement-ratio-check.yaml +39 -0
- package/jobs/growth/dormant-account-reactivation-check.yaml +39 -0
- package/jobs/growth/expansion-revenue-opportunity-tracker.yaml +44 -0
- package/jobs/growth/feature-adoption-rate-tracker.yaml +44 -0
- package/jobs/growth/nps-trend-tracker.yaml +40 -0
- package/jobs/growth/onboarding-funnel-dropoff-check.yaml +39 -0
- package/jobs/growth/paywall-upgrade-prompt-conversion-check.yaml +40 -0
- package/jobs/growth/product-qualified-lead-tracker.yaml +42 -0
- package/jobs/growth/referral-program-performance-tracker.yaml +35 -0
- package/jobs/growth/trial-to-paid-conversion-rate-tracker.yaml +48 -0
- package/jobs/growth/winback-reactivation-campaign-tracker.yaml +46 -0
- package/jobs/healthcare/appointment-slot-utilization-check.yaml +56 -0
- package/jobs/healthcare/claims-denial-resubmission-check.yaml +43 -0
- package/jobs/healthcare/clinical-supply-low-stock-check.yaml +30 -0
- package/jobs/healthcare/controlled-substance-inventory-reconciliation.yaml +42 -0
- package/jobs/healthcare/hipaa-access-log-audit.yaml +74 -0
- package/jobs/healthcare/patient-balance-collections-aging-check.yaml +41 -0
- package/jobs/healthcare/patient-immunization-schedule-check.yaml +41 -0
- package/jobs/healthcare/patient-portal-message-backlog-check.yaml +39 -0
- package/jobs/healthcare/patient-satisfaction-survey-tracking.yaml +59 -0
- package/jobs/healthcare/prescription-refill-request-backlog-check.yaml +38 -0
- package/jobs/healthcare/prior-authorization-expiry-check.yaml +53 -0
- package/jobs/healthcare/staff-cme-credit-tracking.yaml +41 -0
- package/jobs/healthcare/telehealth-session-issue-check.yaml +51 -0
- package/jobs/hospitality/adr-revpar-tracker.yaml +43 -0
- package/jobs/hospitality/cancellation-rate-spike-check.yaml +21 -0
- package/jobs/hospitality/group-booking-space-utilization-check.yaml +40 -0
- package/jobs/hospitality/guest-complaint-sla-tracker.yaml +34 -0
- package/jobs/hospitality/guest-satisfaction-score-monitor.yaml +41 -0
- package/jobs/hospitality/linen-inventory-turnover-check.yaml +35 -0
- package/jobs/hospitality/loyalty-points-reconciliation-check.yaml +33 -0
- package/jobs/hospitality/minibar-charge-reconciliation-check.yaml +38 -0
- package/jobs/hospitality/occupancy-forecast-variance-check.yaml +33 -0
- package/jobs/hospitality/ota-rate-parity-check.yaml +36 -0
- package/jobs/hospitality/overbooking-risk-alert.yaml +38 -0
- package/jobs/hospitality/room-maintenance-work-order-tracker.yaml +31 -0
- package/jobs/hospitality/upsell-upgrade-conversion-tracker.yaml +37 -0
- package/jobs/hr/aca-fte-threshold-monitor.yaml +44 -0
- package/jobs/hr/cobra-notification-deadline-tracker.yaml +47 -0
- package/jobs/hr/compliance-training-completion-check.yaml +41 -0
- package/jobs/hr/eeo1-filing-deadline-reminder.yaml +37 -0
- package/jobs/hr/handbook-acknowledgment-tracking.yaml +34 -0
- package/jobs/hr/headcount-budget-variance-check.yaml +37 -0
- package/jobs/hr/leave-of-absence-return-tracker.yaml +42 -0
- package/jobs/hr/org-chart-manager-drift-check.yaml +40 -0
- package/jobs/hr/pay-equity-band-outlier-check.yaml +58 -0
- package/jobs/hr/pto-year-end-use-it-or-lose-it-check.yaml +49 -0
- package/jobs/hr/retirement-plan-enrollment-deadline-check.yaml +40 -0
- package/jobs/hr/workers-comp-claim-status-check.yaml +42 -0
- package/jobs/insurance/adjuster-caseload-balance-check.yaml +45 -0
- package/jobs/insurance/agent-broker-license-expiry-tracker.yaml +40 -0
- package/jobs/insurance/cat-event-exposure-monitor.yaml +37 -0
- package/jobs/insurance/claims-aging-backlog-tracker.yaml +48 -0
- package/jobs/insurance/doi-filing-deadline-tracker.yaml +42 -0
- package/jobs/insurance/loss-ratio-by-line-monitor.yaml +43 -0
- package/jobs/insurance/policy-lapse-rate-monitor.yaml +41 -0
- package/jobs/insurance/premium-payment-delinquency-tracker.yaml +42 -0
- package/jobs/insurance/quote-to-bind-conversion-tracker.yaml +41 -0
- package/jobs/insurance/reinsurance-treaty-renewal-tracker.yaml +38 -0
- package/jobs/insurance/siu-fraud-referral-tracker.yaml +36 -0
- package/jobs/insurance/subrogation-recovery-tracker.yaml +41 -0
- package/jobs/insurance/underwriting-queue-sla-monitor.yaml +45 -0
- package/jobs/legal/conflict-of-interest-check-tracker.yaml +38 -0
- package/jobs/legal/corporate-minute-book-completeness-check.yaml +31 -0
- package/jobs/legal/data-privacy-request-deadline-tracker.yaml +61 -0
- package/jobs/legal/entity-authority-document-expiry-check.yaml +37 -0
- package/jobs/legal/legal-document-retention-purge-review.yaml +39 -0
- package/jobs/legal/litigation-hold-acknowledgment-tracker.yaml +40 -0
- package/jobs/legal/non-compete-expiry-tracker.yaml +37 -0
- package/jobs/legal/outside-counsel-invoice-budget-check.yaml +37 -0
- package/jobs/legal/settlement-payment-schedule-tracker.yaml +34 -0
- package/jobs/legal/timekeeper-billable-hours-compliance-check.yaml +39 -0
- package/jobs/legal/trademark-infringement-watch.yaml +43 -0
- package/jobs/legal/vendor-coi-expiry-tracker.yaml +37 -0
- package/jobs/logistics/3pl-performance-scorecard.yaml +45 -0
- package/jobs/logistics/bol-freight-class-accuracy-audit.yaml +33 -0
- package/jobs/logistics/cargo-insurance-claim-status-check.yaml +39 -0
- package/jobs/logistics/carrier-load-tender-acceptance-check.yaml +34 -0
- package/jobs/logistics/carrier-otd-performance-scorecard.yaml +41 -0
- package/jobs/logistics/carrier-rate-contract-renewal-check.yaml +35 -0
- package/jobs/logistics/cross-dock-dwell-time-watch.yaml +43 -0
- package/jobs/logistics/freight-invoice-rate-audit.yaml +38 -0
- package/jobs/logistics/fuel-surcharge-rate-monitor.yaml +40 -0
- package/jobs/logistics/international-shipment-documentation-check.yaml +36 -0
- package/jobs/logistics/linehaul-transit-time-variance-check.yaml +43 -0
- package/jobs/logistics/proof-of-delivery-reconciliation-check.yaml +38 -0
- package/jobs/logistics/route-load-optimization-check.yaml +32 -0
- package/jobs/manufacturing/changeover-time-tracker.yaml +29 -0
- package/jobs/manufacturing/critical-spare-parts-stock-check.yaml +29 -0
- package/jobs/manufacturing/first-pass-yield-report.yaml +37 -0
- package/jobs/manufacturing/lot-traceability-audit.yaml +37 -0
- package/jobs/manufacturing/non-conformance-report-backlog-check.yaml +34 -0
- package/jobs/manufacturing/oee-efficiency-check.yaml +37 -0
- package/jobs/manufacturing/osha-recordable-incident-audit.yaml +37 -0
- package/jobs/manufacturing/production-schedule-adherence-check.yaml +35 -0
- package/jobs/manufacturing/safety-certification-expiry-check.yaml +37 -0
- package/jobs/manufacturing/scrap-waste-rate-watch.yaml +33 -0
- package/jobs/manufacturing/shift-handoff-report.yaml +37 -0
- package/jobs/manufacturing/supplier-quality-ppm-watch.yaml +38 -0
- package/jobs/manufacturing/tooling-die-wear-check.yaml +31 -0
- package/jobs/manufacturing/work-order-backlog-check.yaml +37 -0
- package/jobs/marketing/ad-creative-fatigue-check.yaml +44 -0
- package/jobs/marketing/affiliate-partner-performance-check.yaml +38 -0
- package/jobs/marketing/attribution-discrepancy-check.yaml +42 -0
- package/jobs/marketing/brand-share-of-voice-check.yaml +43 -0
- package/jobs/marketing/campaign-roas-cpa-anomaly-check.yaml +41 -0
- package/jobs/marketing/competitor-ad-creative-watch.yaml +40 -0
- package/jobs/marketing/email-list-growth-rate-check.yaml +43 -0
- package/jobs/marketing/landing-page-conversion-drop-check.yaml +44 -0
- package/jobs/marketing/mql-to-sql-handoff-sla-check.yaml +29 -0
- package/jobs/marketing/mql-volume-pace-check.yaml +34 -0
- package/jobs/marketing/paid-search-negative-keyword-waste-check.yaml +37 -0
- package/jobs/marketing/press-release-pickup-tracking.yaml +32 -0
- package/jobs/marketing/webinar-registration-attendance-check.yaml +38 -0
- package/jobs/realestate/capital-reserve-fund-threshold-check.yaml +32 -0
- package/jobs/realestate/eviction-notice-deadline-tracker.yaml +37 -0
- package/jobs/realestate/landlord-insurance-claim-status-check.yaml +35 -0
- package/jobs/realestate/lease-renewal-offer-window-check.yaml +35 -0
- package/jobs/realestate/maintenance-request-sla-check.yaml +39 -0
- package/jobs/realestate/move-in-move-out-inspection-tracker.yaml +35 -0
- package/jobs/realestate/rent-increase-notice-deadline-check.yaml +54 -0
- package/jobs/realestate/rent-roll-vacancy-loss-report.yaml +32 -0
- package/jobs/realestate/rental-license-renewal-check.yaml +35 -0
- package/jobs/realestate/security-deposit-return-deadline-check.yaml +38 -0
- package/jobs/realestate/tenant-application-review-backlog-check.yaml +35 -0
- package/jobs/realestate/tenant-renters-insurance-compliance-check.yaml +35 -0
- package/jobs/realestate/utility-billback-reconciliation-check.yaml +41 -0
- package/jobs/restaurant/comp-void-anomaly-tracker.yaml +39 -0
- package/jobs/restaurant/daily-sales-flash-report.yaml +36 -0
- package/jobs/restaurant/delivery-platform-commission-reconciliation.yaml +33 -0
- package/jobs/restaurant/delivery-receiving-discrepancy-check.yaml +33 -0
- package/jobs/restaurant/food-handler-permit-expiry-tracker.yaml +33 -0
- package/jobs/restaurant/gift-card-liability-check.yaml +45 -0
- package/jobs/restaurant/kitchen-ticket-time-watch.yaml +38 -0
- package/jobs/restaurant/liquor-pour-cost-variance-check.yaml +34 -0
- package/jobs/restaurant/menu-86-frequency-tracker.yaml +39 -0
- package/jobs/restaurant/menu-item-profitability-check.yaml +33 -0
- package/jobs/restaurant/pos-end-of-day-reconciliation-check.yaml +31 -0
- package/jobs/restaurant/table-turnover-rate-tracker.yaml +36 -0
- package/jobs/restaurant/waitlist-conversion-check.yaml +37 -0
- package/jobs/retail/cash-office-deposit-variance-check.yaml +34 -0
- package/jobs/retail/competitor-price-monitoring-check.yaml +42 -0
- package/jobs/retail/damaged-merchandise-writeoff-tracker.yaml +41 -0
- package/jobs/retail/employee-discount-abuse-check.yaml +39 -0
- package/jobs/retail/layaway-special-order-pickup-tracker.yaml +33 -0
- package/jobs/retail/loyalty-enrollment-redemption-rate-tracker.yaml +37 -0
- package/jobs/retail/markdown-execution-audit-check.yaml +29 -0
- package/jobs/retail/planogram-compliance-audit-check.yaml +36 -0
- package/jobs/retail/pos-void-refund-anomaly-tracker.yaml +42 -0
- package/jobs/retail/price-tag-audit-accuracy-check.yaml +37 -0
- package/jobs/retail/sales-per-square-foot-tracker.yaml +36 -0
- package/jobs/retail/seasonal-staffing-coverage-check.yaml +35 -0
- package/jobs/retail/store-closing-checklist-compliance-check.yaml +32 -0
- package/jobs/retail/visual-merchandising-compliance-check.yaml +40 -0
- package/jobs/sales/champion-departure-watch.yaml +44 -0
- package/jobs/sales/closed-lost-reason-audit.yaml +42 -0
- package/jobs/sales/commission-payout-tracker.yaml +32 -0
- package/jobs/sales/contract-renewal-opportunity-tracker.yaml +28 -0
- package/jobs/sales/discount-approval-pending-check.yaml +31 -0
- package/jobs/sales/forecast-submission-compliance-check.yaml +42 -0
- package/jobs/sales/multi-year-renewal-escalation-tracker.yaml +31 -0
- package/jobs/sales/pipeline-hygiene-audit.yaml +26 -0
- package/jobs/sales/poc-trial-conversion-tracker.yaml +29 -0
- package/jobs/sales/referral-followup-tracker.yaml +40 -0
- package/jobs/sales/territory-coverage-gap-check.yaml +43 -0
- package/jobs/veterinary/appointment-no-show-rate-tracker.yaml +49 -0
- package/jobs/veterinary/boarding-kennel-capacity-utilization-check.yaml +39 -0
- package/jobs/veterinary/client-payment-plan-delinquency-check.yaml +36 -0
- package/jobs/veterinary/dvm-license-dea-registration-expiry-check.yaml +41 -0
- package/jobs/veterinary/microchip-registration-verification-check.yaml +40 -0
- package/jobs/veterinary/patient-record-completeness-audit.yaml +41 -0
- package/jobs/veterinary/pet-medication-refill-backlog-check.yaml +36 -0
- package/jobs/veterinary/puppy-kitten-vaccine-series-compliance-check.yaml +39 -0
- package/jobs/veterinary/senior-pet-wellness-recall-tracker.yaml +43 -0
- package/jobs/veterinary/spay-neuter-followup-compliance-check.yaml +35 -0
- package/jobs/veterinary/specialist-referral-followup-check.yaml +38 -0
- package/jobs/veterinary/surgical-schedule-utilization-check.yaml +36 -0
- package/jobs/veterinary/vet-staff-ce-credit-tracking.yaml +36 -0
- package/jobs/warehousing/conveyor-sortation-downtime-watch.yaml +48 -0
- package/jobs/warehousing/labor-productivity-rate-check.yaml +33 -0
- package/jobs/warehousing/mhe-preventive-maintenance-check.yaml +38 -0
- package/jobs/warehousing/order-fulfillment-sla-watch.yaml +42 -0
- package/jobs/warehousing/shift-headcount-coverage-check.yaml +33 -0
- package/jobs/warehousing/slotting-velocity-review-check.yaml +44 -0
- package/jobs/warehousing/warehouse-damage-writeoff-review.yaml +41 -0
- package/jobs/warehousing/warehouse-near-miss-incident-rate-watch.yaml +47 -0
- package/jobs/warehousing/warehouse-space-utilization-check.yaml +39 -0
- package/jobs/warehousing/wave-pick-batch-efficiency-check.yaml +33 -0
- package/jobs/warehousing/wms-integration-error-check.yaml +36 -0
- package/jobs/warehousing/yard-trailer-detention-watch.yaml +41 -0
- package/lib/category-descriptions.js +12 -12
- package/lib/duplicates-allowlist.js +15 -0
- 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.
|