@wonsukchoi/crondex 0.18.0 → 0.20.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 (79) hide show
  1. package/README.md +41 -40
  2. package/catalog.json +1955 -58
  3. package/jobs/agriculture/field-soil-test-due-reminder.yaml +35 -0
  4. package/jobs/agriculture/grain-storage-temperature-check.yaml +34 -0
  5. package/jobs/automotive/fleet-inspection-expiry-check.yaml +35 -0
  6. package/jobs/automotive/warranty-claim-deadline-check.yaml +35 -0
  7. package/jobs/childcare/allergy-action-plan-expiry-check.yaml +34 -0
  8. package/jobs/childcare/classroom-supply-low-stock-check.yaml +28 -0
  9. package/jobs/construction/crew-safety-cert-expiry-check.yaml +35 -0
  10. package/jobs/construction/material-delivery-delay-check.yaml +32 -0
  11. package/jobs/creator/affiliate-link-expiry-check.yaml +35 -0
  12. package/jobs/creator/brand-deal-payment-followup-check.yaml +32 -0
  13. package/jobs/crypto/nft-floor-price-watch.yaml +37 -0
  14. package/jobs/crypto/stablecoin-peg-deviation-watch.yaml +33 -0
  15. package/jobs/ecommerce/coupon-code-expiry-check.yaml +36 -0
  16. package/jobs/ecommerce/shipping-delay-check.yaml +31 -0
  17. package/jobs/education/overdue-library-materials-check.yaml +34 -0
  18. package/jobs/education/tuition-payment-plan-delinquency-check.yaml +35 -0
  19. package/jobs/events/post-event-survey-response-rate-watch.yaml +39 -0
  20. package/jobs/events/speaker-confirmation-deadline-check.yaml +35 -0
  21. package/jobs/fitness/class-waitlist-overflow-check.yaml +31 -0
  22. package/jobs/fitness/locker-rental-expiry-check.yaml +35 -0
  23. package/jobs/fleet/fleet-insurance-expiry-check.yaml +34 -0
  24. package/jobs/fleet/vehicle-idle-time-check.yaml +31 -0
  25. package/jobs/gaming/game-server-disk-space-check.yaml +34 -0
  26. package/jobs/gaming/player-contract-renewal-check.yaml +35 -0
  27. package/jobs/government/public-comment-period-closing-check.yaml +35 -0
  28. package/jobs/government/public-records-retention-purge-check.yaml +32 -0
  29. package/jobs/growth/onboarding-completion-stall-check.yaml +38 -0
  30. package/jobs/growth/seat-utilization-upsell-check.yaml +34 -0
  31. package/jobs/healthcare/medical-equipment-calibration-check.yaml +35 -0
  32. package/jobs/healthcare/referral-pending-followup-check.yaml +36 -0
  33. package/jobs/hiring/job-posting-expiry-check.yaml +41 -0
  34. package/jobs/hiring/reference-check-overdue-reminder.yaml +36 -0
  35. package/jobs/home/gutter-cleaning-reminder.yaml +30 -0
  36. package/jobs/home/utility-bill-anomaly-check.yaml +36 -0
  37. package/jobs/hospitality/housekeeping-turnover-time-check.yaml +41 -0
  38. package/jobs/hospitality/lost-and-found-item-aging-check.yaml +36 -0
  39. package/jobs/hr/i9-reverification-deadline-check.yaml +36 -0
  40. package/jobs/hr/probation-period-review-reminder.yaml +36 -0
  41. package/jobs/insurance/beneficiary-designation-review-reminder.yaml +35 -0
  42. package/jobs/insurance/endorsement-request-followup-check.yaml +37 -0
  43. package/jobs/inventory/purchase-order-receiving-delay-check.yaml +33 -0
  44. package/jobs/inventory/supplier-lead-time-drift-check.yaml +34 -0
  45. package/jobs/investing/bond-cd-maturity-reminder.yaml +31 -0
  46. package/jobs/investing/dca-contribution-reminder.yaml +33 -0
  47. package/jobs/learning/practice-streak-check.yaml +33 -0
  48. package/jobs/learning/webinar-attendance-reminder.yaml +32 -0
  49. package/jobs/legal/business-license-renewal-check.yaml +37 -0
  50. package/jobs/legal/patent-maintenance-fee-reminder.yaml +35 -0
  51. package/jobs/logistics/driver-hos-compliance-check.yaml +38 -0
  52. package/jobs/logistics/port-congestion-watch.yaml +34 -0
  53. package/jobs/manufacturing/energy-consumption-spike-check.yaml +37 -0
  54. package/jobs/manufacturing/equipment-calibration-due-check.yaml +32 -0
  55. package/jobs/marketing/broken-campaign-link-check.yaml +31 -0
  56. package/jobs/marketing/newsletter-unsubscribe-spike-check.yaml +37 -0
  57. package/jobs/nonprofit/donation-acknowledgment-lag-check.yaml +32 -0
  58. package/jobs/nonprofit/event-rsvp-shortfall-check.yaml +40 -0
  59. package/jobs/podcast/rss-feed-health-check.yaml +25 -0
  60. package/jobs/podcast/transcript-publish-lag-check.yaml +31 -0
  61. package/jobs/realestate/hoa-fee-collection-check.yaml +35 -0
  62. package/jobs/realestate/insurance-policy-renewal-reminder.yaml +31 -0
  63. package/jobs/restaurant/supplier-price-increase-watch.yaml +36 -0
  64. package/jobs/restaurant/walk-in-cooler-temp-log-check.yaml +31 -0
  65. package/jobs/retail/loyalty-points-expiry-reminder.yaml +31 -0
  66. package/jobs/retail/markdown-aging-inventory-check.yaml +33 -0
  67. package/jobs/sales/proposal-followup-nudge.yaml +31 -0
  68. package/jobs/sales/quote-expiry-reminder.yaml +24 -0
  69. package/jobs/support/knowledge-base-article-staleness-check.yaml +39 -0
  70. package/jobs/support/macro-usage-staleness-check.yaml +33 -0
  71. package/jobs/team/expense-report-deadline-reminder.yaml +28 -0
  72. package/jobs/team/new-hire-onboarding-task-check.yaml +32 -0
  73. package/jobs/travel/flight-layover-buffer-check.yaml +35 -0
  74. package/jobs/travel/hotel-cancellation-deadline-reminder.yaml +32 -0
  75. package/jobs/veterinary/lab-result-turnaround-check.yaml +35 -0
  76. package/jobs/veterinary/medication-inventory-expiry-check.yaml +31 -0
  77. package/jobs/warehousing/pallet-putaway-delay-check.yaml +35 -0
  78. package/jobs/warehousing/returns-processing-backlog-check.yaml +33 -0
  79. package/package.json +1 -1
@@ -0,0 +1,36 @@
1
+ id: i9-reverification-deadline-check
2
+ version: 1
3
+ name: I-9 Reverification Deadline Check
4
+ description: >
5
+ Checks employees whose work authorization document has an expiration
6
+ date and warns before I-9 reverification is due. Use this if an I-9
7
+ reverification deadline has ever been missed and only caught during an
8
+ audit.
9
+ category: hr
10
+ tags: [hr, compliance, i9, employment-eligibility]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "America/New_York"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ $2 == "" {next}
18
+ {
19
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
20
+ cmd | getline expiry_epoch; close(cmd);
21
+ "date +%s" | getline now_epoch; close("date +%s");
22
+ diff_days = (expiry_epoch - now_epoch) / 86400;
23
+ if (diff_days <= days) {
24
+ printf "REVERIFICATION DUE: %s — document expires %s (%d days)\n", $1, $2, diff_days;
25
+ }
26
+ }
27
+ ' "{{i9_tracking_csv_path}}"
28
+ variables:
29
+ i9_tracking_csv_path:
30
+ default: "./i9-tracking.csv"
31
+ description: "Path to a CSV with columns: employee_name,document_expiry_date (YYYY-MM-DD, blank if the employee's document has no expiration)."
32
+ warn_days_before:
33
+ default: 60
34
+ description: How many days before document expiry to start warning.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: Only applies to employees whose work-authorization document has an expiration date; consult counsel for I-9 process specifics and required forms.
@@ -0,0 +1,36 @@
1
+ id: probation-period-review-reminder
2
+ version: 1
3
+ name: Probation Period Review Reminder
4
+ description: >
5
+ Warns you before a new hire's probation period ends so a manager can
6
+ complete the required review before it lapses automatically. Use this
7
+ if a probation deadline has ever passed with no review on file and
8
+ nobody caught it until it became a compliance headache.
9
+ category: hr
10
+ tags: [hr, probation, new-hire, compliance]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "America/New_York"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ $3 != "" {next}
18
+ {
19
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
20
+ cmd | getline end_epoch; close(cmd);
21
+ "date +%s" | getline now_epoch; close("date +%s");
22
+ diff_days = (end_epoch - now_epoch) / 86400;
23
+ if (diff_days <= days) {
24
+ printf "REVIEW DUE: %s — probation ends %s (%d days), no review on file\n", $1, $2, diff_days;
25
+ }
26
+ }
27
+ ' "{{probation_tracking_csv_path}}"
28
+ variables:
29
+ probation_tracking_csv_path:
30
+ default: "./probation-tracking.csv"
31
+ description: "Path to a CSV with columns: employee_name,probation_end_date (YYYY-MM-DD),review_completed_date (blank if not yet done)."
32
+ warn_days_before:
33
+ default: 14
34
+ description: How many days before probation ends to start warning if no review is on file.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: Assumes a maintained CSV export from your HRIS tracking probation end dates and review completion; distinct from performance-review-cycle-reminder, which covers ongoing cyclical reviews rather than one-time new-hire probation.
@@ -0,0 +1,35 @@
1
+ id: beneficiary-designation-review-reminder
2
+ version: 1
3
+ name: Beneficiary Designation Review Reminder
4
+ description: >
5
+ Reminds you to review beneficiary designations on your insurance
6
+ policies and retirement accounts once they haven't been checked in a
7
+ while. Use this if a beneficiary has ever gone unchanged for years
8
+ through a marriage, divorce, or new child without anyone catching it.
9
+ category: insurance
10
+ tags: [insurance, beneficiary, review, reminder]
11
+ schedule: "0 9 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F',' -v today="$today" -v interval="{{review_interval_days}}" '
17
+ NR==1 {next}
18
+ {
19
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
20
+ cmd | getline last_review_epoch; close(cmd);
21
+ days_since = (today - last_review_epoch) / 86400;
22
+ if (days_since >= interval) {
23
+ printf "REVIEW DUE: %s — last reviewed %s (%d days ago)\n", $1, $2, days_since;
24
+ }
25
+ }
26
+ ' "{{beneficiary_review_csv}}"
27
+ variables:
28
+ beneficiary_review_csv:
29
+ default: "beneficiary-reviews.csv"
30
+ description: "CSV with header row, columns: policy_or_account_name,last_review_date (YYYY-MM-DD)."
31
+ review_interval_days:
32
+ default: 365
33
+ description: How many days to allow between beneficiary reviews before flagging it as due.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: Update last_review_date in the CSV each time you actually confirm designations are current, and after any major life event (marriage, divorce, new child, death in the family).
@@ -0,0 +1,37 @@
1
+ id: endorsement-request-followup-check
2
+ version: 1
3
+ name: Policy Endorsement Request Follow-up Check
4
+ description: >
5
+ Checks requested policy endorsements or amendments (e.g. adding a
6
+ driver, changing coverage limits) that haven't been confirmed processed
7
+ within a set window and flags them for follow-up. Use this if you've
8
+ ever submitted a change request to a carrier and only found out months
9
+ later it was never actually applied.
10
+ category: insurance
11
+ tags: [insurance, endorsement, policy-changes, follow-up]
12
+ schedule: "0 9 * * 1-5"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v days="{{overdue_days}}" '
18
+ NR==1 {next}
19
+ $4 != "" {next}
20
+ {
21
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
22
+ cmd | getline requested_epoch; close(cmd);
23
+ pending_days = (today - requested_epoch) / 86400;
24
+ if (pending_days >= days) {
25
+ printf "OVERDUE: %s — %s requested %s (%d days, not confirmed processed)\n", $1, $2, $3, pending_days;
26
+ }
27
+ }
28
+ ' "{{endorsements_csv_path}}"
29
+ variables:
30
+ endorsements_csv_path:
31
+ default: "./endorsement-requests.csv"
32
+ description: "Path to a CSV with columns: policy_name,requested_change,requested_date (YYYY-MM-DD),confirmed_date (blank if not yet confirmed by the carrier)."
33
+ overdue_days:
34
+ default: 10
35
+ description: Days since an endorsement was requested, with no carrier confirmation, before it's flagged.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: Maintain the CSV manually or export it from your broker/agency management system; distinct from claim-status-check, which tracks claims rather than policy change requests.
@@ -0,0 +1,33 @@
1
+ id: purchase-order-receiving-delay-check
2
+ version: 1
3
+ name: Purchase Order Receiving Delay Check
4
+ description: >
5
+ Checks open purchase orders against their expected delivery date and
6
+ flags any that are overdue and not yet marked received. Use this if
7
+ stock has ever run out because a purchase order was quietly late and
8
+ nobody chased the supplier until shelves were already empty.
9
+ category: inventory
10
+ tags: [inventory, purchase-orders, receiving, suppliers]
11
+ schedule: "0 7 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F',' -v today="$today" '
17
+ NR==1 {next}
18
+ $5 != "" {next}
19
+ {
20
+ cmd = "date -d \"" $4 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $4 "\" +%s 2>/dev/null";
21
+ cmd | getline expected_epoch; close(cmd);
22
+ overdue_days = (today - expected_epoch) / 86400;
23
+ if (overdue_days > 0) {
24
+ printf "OVERDUE: PO %s from %s expected %s (%d days late, not received)\n", $1, $2, $4, overdue_days;
25
+ }
26
+ }
27
+ ' "{{purchase_orders_csv_path}}"
28
+ variables:
29
+ purchase_orders_csv_path:
30
+ default: "./purchase-orders.csv"
31
+ description: "Path to a CSV with columns: po_number,supplier_name,order_date (YYYY-MM-DD),expected_delivery_date (YYYY-MM-DD),received_date (blank if not yet received)."
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Assumes a maintained CSV export from your procurement/inventory system; distinct from supplier-lead-time-drift-check, which tracks aggregate lead-time trends rather than individual overdue POs.
@@ -0,0 +1,34 @@
1
+ id: supplier-lead-time-drift-check
2
+ version: 1
3
+ name: Supplier Lead Time Drift Check
4
+ description: >
5
+ Compares each supplier's recent delivery lead time against their
6
+ historical baseline and flags suppliers who have started shipping
7
+ noticeably slower. Use this if a reorder point has ever gone stale
8
+ because a supplier quietly started taking longer to deliver than they
9
+ used to.
10
+ category: inventory
11
+ tags: [inventory, suppliers, lead-time, procurement]
12
+ schedule: "0 6 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v threshold="{{drift_threshold_days}}" '
17
+ NR==1 {next}
18
+ {
19
+ supplier = $1; baseline = $2 + 0; recent = $3 + 0;
20
+ drift = recent - baseline;
21
+ if (drift >= threshold) {
22
+ printf "LEAD TIME DRIFT: %s — baseline %d days, recent %d days (+%d days)\n", supplier, baseline, recent, drift;
23
+ }
24
+ }
25
+ ' "{{supplier_lead_times_csv}}"
26
+ variables:
27
+ supplier_lead_times_csv:
28
+ default: "./supplier-lead-times.csv"
29
+ description: "Path to a CSV with columns: supplier_name,baseline_lead_time_days,recent_lead_time_days."
30
+ drift_threshold_days:
31
+ default: 3
32
+ description: Days of increase over baseline before a supplier is flagged.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: Feed recent_lead_time_days from actual PO-to-delivery data (e.g. an average of the last 3-5 orders) rather than a single order, to avoid false positives from one slow shipment.
@@ -0,0 +1,31 @@
1
+ id: bond-cd-maturity-reminder
2
+ version: 1
3
+ name: Bond & CD Maturity Reminder
4
+ description: >
5
+ Warns you before a bond or certificate of deposit reaches its maturity
6
+ date. Use this if a CD has ever auto-renewed into a worse rate because
7
+ the maturity date crept up unnoticed.
8
+ category: investing
9
+ tags: [investing, bonds, cd, maturity]
10
+ schedule: "0 9 1 * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ awk -F, -v today="$today" -v warn={{warn_days}} '
16
+ NR>1 {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline mat_ts; close(cmd);
19
+ days_left = int((mat_ts - today) / 86400);
20
+ if (days_left <= warn) print "WARNING: \"" $1 "\" (" $3 ") matures in " days_left " days (" $2 ")";
21
+ }
22
+ ' {{holdings_csv}}
23
+ variables:
24
+ holdings_csv:
25
+ default: "bond-cd-holdings.csv"
26
+ description: "CSV with header row, columns: name,maturity_date(YYYY-MM-DD),amount."
27
+ warn_days:
28
+ default: 30
29
+ description: Days before maturity to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep bond-cd-holdings.csv updated whenever you buy or roll over a bond/CD — one row per holding.
@@ -0,0 +1,33 @@
1
+ id: dca-contribution-reminder
2
+ version: 1
3
+ name: DCA Contribution Reminder
4
+ description: >
5
+ Checks your dollar-cost-averaging log and warns if it's been longer than
6
+ your planned interval since the last logged contribution. Use this if
7
+ you've ever meant to invest a fixed amount on a schedule and let a month
8
+ slip by without actually placing the order.
9
+ category: investing
10
+ tags: [investing, dca, dollar-cost-averaging, contributions]
11
+ schedule: "0 9 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ last_line=$(tail -n 1 "{{contribution_log_csv}}" 2>/dev/null);
16
+ if [ -z "$last_line" ]; then echo "WARNING: no contributions logged yet in {{contribution_log_csv}}"; exit 1; fi;
17
+ last_date=$(echo "$last_line" | cut -d',' -f1);
18
+ last_ts=$(date -d "$last_date" +%s 2>/dev/null || date -jf "%Y-%m-%d" "$last_date" +%s 2>/dev/null);
19
+ today_ts=$(date +%s);
20
+ days_since=$(( (today_ts - last_ts) / 86400 ));
21
+ if [ "$days_since" -ge "{{interval_days}}" ]; then
22
+ echo "WARNING: last DCA contribution was $days_since days ago (on $last_date) — due for another (${{interval_days}}-day interval)";
23
+ exit 1;
24
+ else echo "OK: last DCA contribution was $days_since days ago (on $last_date), within the ${{interval_days}}-day interval"; fi
25
+ variables:
26
+ contribution_log_csv:
27
+ default: "dca-contributions.csv"
28
+ description: "CSV with header row, columns: date(YYYY-MM-DD),amount,ticker — append a row each time you invest."
29
+ interval_days:
30
+ default: 30
31
+ description: Expected number of days between contributions before this flags as overdue.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Append a row to dca-contributions.csv yourself (or via your brokerage export) each time you make a scheduled contribution.
@@ -0,0 +1,33 @@
1
+ id: practice-streak-check
2
+ version: 1
3
+ name: Skill Practice Streak Check
4
+ description: >
5
+ Checks a practice log file for a skill you're building (language,
6
+ instrument, coding kata) and warns if too many days have passed since
7
+ the last logged session. Use this if a daily practice habit has ever
8
+ quietly lapsed without you noticing until weeks had gone by.
9
+ category: learning
10
+ tags: [learning, practice, streak, habit]
11
+ schedule: "0 20 * * *"
12
+ timezone: "America/Los_Angeles"
13
+ runner: shell
14
+ command: >
15
+ last_line=$(tail -n1 "{{log_file_path}}" 2>/dev/null);
16
+ if [ -z "$last_line" ]; then echo "WARNING: no practice sessions logged yet in {{log_file_path}}"; exit 1; fi;
17
+ last_ts=$(date -d "$last_line" +%s 2>/dev/null || date -jf "%Y-%m-%d" "$last_line" +%s);
18
+ now_ts=$(date +%s);
19
+ days_since=$(( (now_ts - last_ts) / 86400 ));
20
+ if [ "$days_since" -ge "{{max_gap_days}}" ]; then echo "WARNING: no {{skill_name}} practice logged in $days_since days"; exit 1;
21
+ else echo "OK: last {{skill_name}} practice $days_since days ago"; fi
22
+ variables:
23
+ log_file_path:
24
+ default: "./practice-log.txt"
25
+ description: "Path to a text file with one YYYY-MM-DD line per practice session, newest last."
26
+ skill_name:
27
+ default: "your skill"
28
+ description: Name of the skill being tracked, for labeling output.
29
+ max_gap_days:
30
+ default: 3
31
+ description: Days without a logged session before it's flagged.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Append today's date to practice-log.txt each time you practice (e.g. `date +%F >> practice-log.txt`) — this job only reads the file, it doesn't log sessions for you.
@@ -0,0 +1,32 @@
1
+ id: webinar-attendance-reminder
2
+ version: 1
3
+ name: Webinar Attendance Reminder
4
+ description: >
5
+ Checks a list of webinars/workshops you've registered for and flags any
6
+ happening soon so you can block the time and prep. Use this if you've
7
+ ever signed up for a webinar and completely forgotten about it by the
8
+ time it started.
9
+ category: learning
10
+ tags: [learning, webinars, events, reminders]
11
+ schedule: "0 8 * * *"
12
+ timezone: "America/Los_Angeles"
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 \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
19
+ cmd | getline event_ts; close(cmd);
20
+ days_left = int((event_ts - today) / 86400);
21
+ if (days_left >= 0 && days_left <= warn) print "UPCOMING: \"" $1 "\" on " $2 " (in " days_left " day(s))";
22
+ }
23
+ ' "{{registrations_csv}}"
24
+ variables:
25
+ registrations_csv:
26
+ default: "webinar-registrations.csv"
27
+ description: "CSV with header row, columns: title,date(YYYY-MM-DD)."
28
+ warn_days:
29
+ default: 3
30
+ description: Days ahead of a webinar to start flagging it as upcoming.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: Add a row to webinar-registrations.csv whenever you sign up for a webinar or workshop — this job only reads it, it doesn't register you anywhere.
@@ -0,0 +1,37 @@
1
+ id: business-license-renewal-check
2
+ version: 1
3
+ name: Business License Renewal Check
4
+ description: >
5
+ Warns you before a specific business license or permit (liquor,
6
+ contractor, professional, health department, etc.) reaches its renewal
7
+ deadline. Use this if a license has ever lapsed because its renewal
8
+ date lived only in someone's memory instead of a calendar.
9
+ category: legal
10
+ tags: [legal, license, permit, renewal]
11
+ schedule: "0 9 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 "\" (" $2 ") expires in " days_left " days (" $3 ")";
22
+ }
23
+ ' {{licenses_csv}}
24
+ variables:
25
+ licenses_csv:
26
+ default: "business-licenses.csv"
27
+ description: "CSV with header row, columns: license_name,jurisdiction,expiry_date(YYYY-MM-DD)."
28
+ warn_days:
29
+ default: 45
30
+ description: Days before expiry to start warning.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: >
33
+ Keep business-licenses.csv updated whenever a license/permit is issued
34
+ or renewed — one row per license/jurisdiction. Distinct from
35
+ `compliance-filing-deadline-reminder` (recurring corporate/state
36
+ filings like annual reports and franchise tax) — this tracks
37
+ individually-issued operating licenses and permits instead.
@@ -0,0 +1,35 @@
1
+ id: patent-maintenance-fee-reminder
2
+ version: 1
3
+ name: Patent Maintenance Fee Reminder
4
+ description: >
5
+ Warns you before a patent maintenance (annuity) fee comes due so the
6
+ patent doesn't lapse. Use this if a patent has ever gone abandoned
7
+ because a maintenance fee deadline was missed.
8
+ category: legal
9
+ tags: [legal, patents, ip, maintenance-fees]
10
+ schedule: "0 9 1 * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ awk -F',' -v today="$today" -v warn={{warn_days}} '
16
+ NR>1 {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline due_ts; close(cmd);
19
+ days_left = int((due_ts - today) / 86400);
20
+ if (days_left <= warn) print "WARNING: patent \"" $1 "\" maintenance fee due in " days_left " days (" $2 ")";
21
+ }
22
+ ' "{{patents_csv}}"
23
+ variables:
24
+ patents_csv:
25
+ default: "patent-maintenance-fees.csv"
26
+ description: "CSV with header row, columns: patent_name_or_number,fee_due_date(YYYY-MM-DD)."
27
+ warn_days:
28
+ default: 60
29
+ description: Days before a maintenance fee due date to start warning — most jurisdictions allow a grace period but with a surcharge, so warn early.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: >
32
+ Keep patent-maintenance-fees.csv updated with each patent's next fee due
33
+ date (from your IP counsel or the relevant patent office schedule) —
34
+ fee intervals and amounts vary by jurisdiction, so this job only tracks
35
+ dates you supply.
@@ -0,0 +1,38 @@
1
+ id: driver-hos-compliance-check
2
+ version: 1
3
+ name: Driver Hours-of-Service Compliance Check
4
+ description: >
5
+ Checks logged driving hours against the daily hours-of-service limit and
6
+ flags any driver close to or over it. Use this if a driver has ever run
7
+ over their legal on-duty hours because nobody was tallying it in real
8
+ time.
9
+ category: logistics
10
+ tags: [logistics, drivers, hos, compliance, safety]
11
+ schedule: "0 */4 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v limit={{daily_hours_limit}} -v warn={{warn_hours_remaining}} '
16
+ NR>1 {
17
+ driver = $1; hours_today = $2;
18
+ remaining = limit - hours_today;
19
+ if (hours_today >= limit) print "OVER LIMIT: " driver " has logged " hours_today "h, exceeds the " limit "h daily limit";
20
+ else if (remaining <= warn) print "WARNING: " driver " has logged " hours_today "h, only " remaining "h remaining before the " limit "h daily limit";
21
+ }
22
+ ' "{{driver_hours_csv}}"
23
+ variables:
24
+ driver_hours_csv:
25
+ default: "driver-hours-today.csv"
26
+ description: "CSV with header row, columns: driver_name,hours_logged_today — update from your ELD (electronic logging device) export."
27
+ daily_hours_limit:
28
+ default: 11
29
+ description: Maximum on-duty driving hours allowed per day under your governing HOS rules.
30
+ warn_hours_remaining:
31
+ default: 1
32
+ description: Hours remaining before the limit at which to start warning a driver is close.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: >
35
+ Defaults reflect the US FMCSA 11-hour driving limit — adjust
36
+ daily_hours_limit for your jurisdiction's rules. This is a schedule-side
37
+ check against a CSV you export from your ELD/telematics system, not a
38
+ replacement for that system's own compliance logging.
@@ -0,0 +1,34 @@
1
+ id: port-congestion-watch
2
+ version: 1
3
+ name: Port Congestion Watch
4
+ description: >
5
+ Checks a port's average vessel wait time and flags it once congestion
6
+ crosses your threshold. Use this if a congested port has ever blown up
7
+ a shipping timeline before anyone checked the wait times.
8
+ category: logistics
9
+ tags: [logistics, port, congestion, shipping]
10
+ schedule: "0 6 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ wait_hours=$(curl -s -H "Authorization: Bearer {{port_api_token}}" "{{port_status_api_url}}" | grep -o '"avg_wait_hours":[0-9.]*' | head -n1 | cut -d':' -f2);
15
+ if [ -z "$wait_hours" ]; then echo "ERROR: could not fetch port congestion data from {{port_status_api_url}}"; exit 1; fi;
16
+ if awk "BEGIN{exit !($wait_hours >= {{wait_hours_threshold}})}"; then
17
+ echo "WARNING: {{port_name}} average vessel wait is ${wait_hours}h (>= {{wait_hours_threshold}}h)";
18
+ exit 1;
19
+ else echo "OK: {{port_name}} average vessel wait is ${wait_hours}h"; fi
20
+ variables:
21
+ port_name:
22
+ default: "your-port"
23
+ description: Port name, for labeling output.
24
+ port_status_api_url:
25
+ default: "https://api.example-port-tracker.com/ports/your-port/status"
26
+ description: Port status API endpoint returning avg_wait_hours.
27
+ port_api_token:
28
+ default: "your-api-token"
29
+ description: Bearer token for the port/maritime data API.
30
+ wait_hours_threshold:
31
+ default: 48
32
+ description: Hours of average vessel wait before flagging as congested.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: Generic REST pattern — point port_status_api_url at your port authority's or a maritime data provider's (MarineTraffic, Portcast, project44) congestion endpoint; adjust field names to match its response shape.
@@ -0,0 +1,37 @@
1
+ id: energy-consumption-spike-check
2
+ version: 1
3
+ name: Energy Consumption Spike Check
4
+ description: >
5
+ Compares today's logged energy usage against a rolling baseline and
6
+ flags an unusual spike. Use this if a jump in electricity use has ever
7
+ gone unnoticed until the utility bill arrived, when it could have
8
+ pointed to a failing motor, a stuck compressor, or equipment left
9
+ running.
10
+ category: manufacturing
11
+ tags: [manufacturing, energy, utilities, anomaly]
12
+ schedule: "0 7 * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v threshold={{spike_pct_threshold}} '
17
+ NR>1 { sum += $2; count++; readings[count] = $2 }
18
+ END {
19
+ if (count < 2) { print "OK: not enough readings yet to establish a baseline"; exit 0 }
20
+ latest = readings[count];
21
+ baseline_sum = sum - latest;
22
+ baseline_avg = baseline_sum / (count - 1);
23
+ if (baseline_avg == 0) { print "OK: baseline average is zero, skipping comparison"; exit 0 }
24
+ pct_over = ((latest - baseline_avg) / baseline_avg) * 100;
25
+ if (pct_over >= threshold) printf "SPIKE: latest reading %.1f kWh is %.1f%% above the %.1f kWh rolling baseline\n", latest, pct_over, baseline_avg;
26
+ else printf "OK: latest reading %.1f kWh is within %.1f%% of the %.1f kWh rolling baseline\n", latest, threshold, baseline_avg;
27
+ }
28
+ ' "{{energy_readings_csv}}"
29
+ variables:
30
+ energy_readings_csv:
31
+ default: "energy-readings.csv"
32
+ description: "CSV with header row, columns: date,kwh — one row per day, most recent row last."
33
+ spike_pct_threshold:
34
+ default: 25
35
+ description: Percent above the rolling baseline average that counts as a spike worth flagging.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: Append a row to energy-readings.csv daily (from a smart meter export or utility portal) — the baseline is just the average of all prior rows, so accuracy improves as history builds up.
@@ -0,0 +1,32 @@
1
+ id: equipment-calibration-due-check
2
+ version: 1
3
+ name: Equipment Calibration Due Check
4
+ description: >
5
+ Warns you before a piece of measurement or test equipment is due for
6
+ calibration. Use this if an out-of-calibration gauge has ever kept
7
+ producing "passing" measurements nobody could actually trust.
8
+ category: manufacturing
9
+ tags: [manufacturing, calibration, quality, compliance]
10
+ schedule: "0 9 1 * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ awk -F, -v today="$today" -v warn={{warn_days}} '
16
+ NR>1 {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline last_ts; close(cmd);
19
+ due_ts = last_ts + ($3 * 86400);
20
+ days_left = int((due_ts - today) / 86400);
21
+ if (days_left <= warn) print "WARNING: equipment \"" $1 "\" calibration due in " days_left " days";
22
+ }
23
+ ' {{equipment_csv}}
24
+ variables:
25
+ equipment_csv:
26
+ default: "calibration-schedule.csv"
27
+ description: "CSV with header row, columns: equipment_id,last_calibrated(YYYY-MM-DD),interval_days."
28
+ warn_days:
29
+ default: 14
30
+ description: Days before calibration is due to start warning.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: Keep calibration-schedule.csv updated after every calibration event — one row per instrument/gauge.
@@ -0,0 +1,31 @@
1
+ id: broken-campaign-link-check
2
+ version: 1
3
+ name: Broken Campaign Link Check
4
+ description: >
5
+ Requests each active campaign's landing page URL and flags any that
6
+ return an error instead of loading. Use this if paid traffic has ever
7
+ kept flowing to a campaign whose landing page was quietly down or
8
+ redirecting to a 404.
9
+ category: marketing
10
+ tags: [marketing, campaigns, links, uptime]
11
+ schedule: "0 */2 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ while IFS=',' read -r name url; do
16
+ [ "$name" = "campaign_name" ] && continue;
17
+ [ -z "$url" ] && continue;
18
+ code=$(curl -s -o /dev/null -w "%{http_code}" --max-time {{timeout_seconds}} "$url");
19
+ if [ "$code" -ge 400 ] || [ "$code" = "000" ]; then
20
+ echo "BROKEN: \"$name\" -> $url returned HTTP $code";
21
+ fi;
22
+ done < "{{campaign_urls_csv}}"
23
+ variables:
24
+ campaign_urls_csv:
25
+ default: "campaign-urls.csv"
26
+ description: "CSV with header row, columns: campaign_name,landing_page_url — one row per active campaign."
27
+ timeout_seconds:
28
+ default: 10
29
+ description: Seconds to wait for each landing page before treating it as unreachable.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep campaign-urls.csv in sync with whatever's currently live in your ad platform — a URL left in the file after a campaign ends will keep getting checked (and may false-flag if the page is intentionally retired).
@@ -0,0 +1,37 @@
1
+ id: newsletter-unsubscribe-spike-check
2
+ version: 1
3
+ name: Newsletter Unsubscribe Spike Check
4
+ description: >
5
+ Checks your most recent newsletter send's unsubscribe rate against a
6
+ threshold and flags it if it's abnormally high. Use this if a bad
7
+ subject line or list segment has ever quietly torched your audience
8
+ before anyone compared it to prior sends.
9
+ category: marketing
10
+ tags: [marketing, newsletter, unsubscribe, retention]
11
+ schedule: "0 9 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ unsub_rate=$(curl -s -H "Authorization: Bearer {{esp_api_token}}" "{{campaign_stats_api_url}}" | grep -o '"unsubscribe_rate":[0-9.]*' | head -n1 | cut -d':' -f2);
16
+ if [ -z "$unsub_rate" ]; then echo "ERROR: could not fetch unsubscribe rate from {{campaign_stats_api_url}}"; exit 1; fi;
17
+ if awk "BEGIN{exit !($unsub_rate >= {{unsub_rate_threshold}})}"; then
18
+ echo "WARNING: unsubscribe rate ${unsub_rate}% is at/above threshold {{unsub_rate_threshold}}%";
19
+ exit 1;
20
+ else echo "OK: unsubscribe rate ${unsub_rate}%"; fi
21
+ variables:
22
+ campaign_stats_api_url:
23
+ default: "https://api.example-esp.com/campaigns/latest/stats"
24
+ description: Email service provider endpoint returning the most recent send's unsubscribe_rate as a percent.
25
+ esp_api_token:
26
+ default: "your-api-token"
27
+ description: API token for the email service provider.
28
+ unsub_rate_threshold:
29
+ default: 0.5
30
+ description: Percent unsubscribe rate that triggers a warning.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: >
33
+ Generic REST pattern — point campaign_stats_api_url at your ESP's
34
+ (Mailchimp, Klaviyo, SendGrid) campaign stats endpoint for the most
35
+ recent send; adjust field names to match its response shape. Distinct
36
+ from `email-deliverability-check` (bounce/spam-complaint risk) — this
37
+ tracks list attrition per send instead.