@wonsukchoi/crondex 0.6.0 → 0.7.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 (57) hide show
  1. package/README.md +9 -1
  2. package/bin/crondex.js +85 -0
  3. package/catalog.json +1335 -35
  4. package/jobs/construction/inspection-deadline-reminder.yaml +31 -0
  5. package/jobs/construction/permit-expiry-check.yaml +31 -0
  6. package/jobs/content/hreflang-audit.yaml +25 -0
  7. package/jobs/content/image-alt-text-audit.yaml +21 -0
  8. package/jobs/content/page-speed-regression-watch.yaml +26 -0
  9. package/jobs/creator/content-calendar-gap-check.yaml +31 -0
  10. package/jobs/creator/engagement-drop-watch.yaml +36 -0
  11. package/jobs/devops/cdn-cache-purge-reminder.yaml +27 -0
  12. package/jobs/devops/ci-build-time-regression-watch.yaml +35 -0
  13. package/jobs/devops/k8s-pod-restart-watch.yaml +26 -0
  14. package/jobs/devops/log-forwarding-health-check.yaml +32 -0
  15. package/jobs/devops/staging-prod-config-diff.yaml +32 -0
  16. package/jobs/education/assignment-grading-backlog-check.yaml +23 -0
  17. package/jobs/education/attendance-anomaly-check.yaml +33 -0
  18. package/jobs/events/rsvp-followup-reminder.yaml +30 -0
  19. package/jobs/events/vendor-payment-deadline-reminder.yaml +31 -0
  20. package/jobs/finance/payroll-run-reminder.yaml +27 -0
  21. package/jobs/finance/recurring-payment-failure-check.yaml +23 -0
  22. package/jobs/fleet/fuel-card-anomaly-check.yaml +37 -0
  23. package/jobs/fleet/vehicle-maintenance-due-check.yaml +36 -0
  24. package/jobs/hiring/candidate-followup-nudge.yaml +23 -0
  25. package/jobs/hiring/open-req-aging-check.yaml +31 -0
  26. package/jobs/home/warranty-expiry-reminder.yaml +31 -0
  27. package/jobs/hospitality/food-safety-temp-log-check.yaml +36 -0
  28. package/jobs/hospitality/reservation-noshow-check.yaml +20 -0
  29. package/jobs/inventory/inventory-count-discrepancy-check.yaml +38 -0
  30. package/jobs/inventory/low-stock-alert.yaml +20 -0
  31. package/jobs/investing/crypto-price-alert.yaml +33 -0
  32. package/jobs/investing/portfolio-rebalance-check.yaml +32 -0
  33. package/jobs/legal/contract-renewal-reminder.yaml +31 -0
  34. package/jobs/legal/trademark-renewal-reminder.yaml +30 -0
  35. package/jobs/logistics/customs-clearance-check.yaml +34 -0
  36. package/jobs/logistics/shipment-delay-watch.yaml +38 -0
  37. package/jobs/manufacturing/production-line-downtime-watch.yaml +34 -0
  38. package/jobs/manufacturing/quality-defect-rate-check.yaml +20 -0
  39. package/jobs/marketing/ad-spend-pacing-check.yaml +37 -0
  40. package/jobs/marketing/email-deliverability-check.yaml +37 -0
  41. package/jobs/nonprofit/grant-deadline-reminder.yaml +44 -0
  42. package/jobs/nonprofit/lapsed-donor-check.yaml +26 -0
  43. package/jobs/podcast/episode-publish-gap-check.yaml +29 -0
  44. package/jobs/podcast/sponsor-deliverable-tracker.yaml +31 -0
  45. package/jobs/productivity/timezone-meeting-conflict-check.yaml +31 -0
  46. package/jobs/realestate/lease-expiry-reminder.yaml +30 -0
  47. package/jobs/realestate/rental-vacancy-check.yaml +30 -0
  48. package/jobs/sales/lead-response-time-check.yaml +23 -0
  49. package/jobs/sales/stale-deal-nudge.yaml +35 -0
  50. package/jobs/security/2fa-enrollment-audit.yaml +24 -0
  51. package/jobs/security/dependabot-alert-digest.yaml +30 -0
  52. package/jobs/security/expiring-api-key-rotation.yaml +31 -0
  53. package/jobs/security/tls-cipher-weak-check.yaml +31 -0
  54. package/jobs/security/waf-rule-change-watch.yaml +38 -0
  55. package/jobs/support/csat-score-watch.yaml +32 -0
  56. package/jobs/support/ticket-backlog-aging-check.yaml +30 -0
  57. package/package.json +1 -1
package/catalog.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "generated_by": "scripts/build-catalog.js",
3
3
  "schema": "schema/job.schema.json",
4
- "count": 79,
4
+ "count": 132,
5
5
  "jobs": [
6
6
  {
7
7
  "id": "1on1-prep-reminder",
@@ -27,6 +27,56 @@
27
27
  ],
28
28
  "path": "jobs/team/1on1-prep-reminder.yaml"
29
29
  },
30
+ {
31
+ "id": "2fa-enrollment-audit",
32
+ "version": 1,
33
+ "name": "2FA Enrollment Audit",
34
+ "description": "Checks which team members in your identity provider or GitHub org don't have two-factor auth enabled. Use this if you've ever assumed everyone had 2FA on until an incident review proved otherwise.",
35
+ "category": "security",
36
+ "tags": [
37
+ "security",
38
+ "2fa",
39
+ "access"
40
+ ],
41
+ "schedule": "0 9 1 * *",
42
+ "timezone": "UTC",
43
+ "runner": "shell",
44
+ "modes": [
45
+ "script"
46
+ ],
47
+ "compatible_agents": [
48
+ "generic",
49
+ "claude",
50
+ "codex"
51
+ ],
52
+ "path": "jobs/security/2fa-enrollment-audit.yaml"
53
+ },
54
+ {
55
+ "id": "ad-spend-pacing-check",
56
+ "version": 1,
57
+ "name": "Ad Spend Pacing Check",
58
+ "description": "Checks a campaign's spend so far against where it should be by this point in the budget period, and flags over- or under-pacing. Use this if a campaign has ever blown through its monthly budget in the first two weeks because nobody was watching the burn rate.",
59
+ "category": "marketing",
60
+ "tags": [
61
+ "marketing",
62
+ "ads",
63
+ "budget"
64
+ ],
65
+ "schedule": "0 8 * * *",
66
+ "timezone": "UTC",
67
+ "runner": "agent-prompt",
68
+ "modes": [
69
+ "agent-prompt"
70
+ ],
71
+ "compatible_agents": [
72
+ "claude",
73
+ "codex",
74
+ "hermes",
75
+ "openclaw",
76
+ "generic"
77
+ ],
78
+ "path": "jobs/marketing/ad-spend-pacing-check.yaml"
79
+ },
30
80
  {
31
81
  "id": "api-rate-limit-check",
32
82
  "version": 1,
@@ -51,6 +101,56 @@
51
101
  ],
52
102
  "path": "jobs/devops/api-rate-limit-check.yaml"
53
103
  },
104
+ {
105
+ "id": "assignment-grading-backlog-check",
106
+ "version": 1,
107
+ "name": "Assignment Grading Backlog Check",
108
+ "description": "Checks how many submitted assignments are still ungraded and flags it if the backlog is growing. Use this if grading has ever piled up for weeks until students started asking where their grades were.",
109
+ "category": "education",
110
+ "tags": [
111
+ "education",
112
+ "grading",
113
+ "backlog"
114
+ ],
115
+ "schedule": "0 8 * * 1-5",
116
+ "timezone": "UTC",
117
+ "runner": "shell",
118
+ "modes": [
119
+ "script"
120
+ ],
121
+ "compatible_agents": [
122
+ "generic",
123
+ "claude",
124
+ "codex"
125
+ ],
126
+ "path": "jobs/education/assignment-grading-backlog-check.yaml"
127
+ },
128
+ {
129
+ "id": "attendance-anomaly-check",
130
+ "version": 1,
131
+ "name": "Attendance Anomaly Check",
132
+ "description": "Flags students whose attendance has dropped sharply, before it becomes a pattern nobody caught early. Use this if a student's attendance has ever quietly fallen off and only got noticed at report-card time.",
133
+ "category": "education",
134
+ "tags": [
135
+ "education",
136
+ "attendance",
137
+ "students"
138
+ ],
139
+ "schedule": "0 8 * * 1",
140
+ "timezone": "UTC",
141
+ "runner": "agent-prompt",
142
+ "modes": [
143
+ "agent-prompt"
144
+ ],
145
+ "compatible_agents": [
146
+ "claude",
147
+ "codex",
148
+ "hermes",
149
+ "openclaw",
150
+ "generic"
151
+ ],
152
+ "path": "jobs/education/attendance-anomaly-check.yaml"
153
+ },
54
154
  {
55
155
  "id": "backup-reminder",
56
156
  "version": 1,
@@ -173,6 +273,30 @@
173
273
  ],
174
274
  "path": "jobs/productivity/calendar-double-booking-check.yaml"
175
275
  },
276
+ {
277
+ "id": "candidate-followup-nudge",
278
+ "version": 1,
279
+ "name": "Candidate Follow-up Nudge",
280
+ "description": "Flags interviewed candidates who haven't heard back in a while. Use this if candidates have ever gone quiet after a final interview simply because nobody circled back with a decision.",
281
+ "category": "hiring",
282
+ "tags": [
283
+ "hiring",
284
+ "recruiting",
285
+ "candidates"
286
+ ],
287
+ "schedule": "0 9 * * 1-5",
288
+ "timezone": "UTC",
289
+ "runner": "shell",
290
+ "modes": [
291
+ "script"
292
+ ],
293
+ "compatible_agents": [
294
+ "generic",
295
+ "claude",
296
+ "codex"
297
+ ],
298
+ "path": "jobs/hiring/candidate-followup-nudge.yaml"
299
+ },
176
300
  {
177
301
  "id": "canonical-tag-check",
178
302
  "version": 1,
@@ -248,6 +372,30 @@
248
372
  ],
249
373
  "path": "jobs/growth/cart-abandonment-followup.yaml"
250
374
  },
375
+ {
376
+ "id": "cdn-cache-purge-reminder",
377
+ "version": 1,
378
+ "name": "CDN Cache Purge Reminder",
379
+ "description": "Reminds you to purge the CDN cache after a deploy, and can trigger it directly if you give it credentials. Use this if you've ever shipped a fix and then spent an hour confused why users still saw the old version.",
380
+ "category": "devops",
381
+ "tags": [
382
+ "cdn",
383
+ "cache",
384
+ "deploy"
385
+ ],
386
+ "schedule": "*/30 * * * *",
387
+ "timezone": "UTC",
388
+ "runner": "shell",
389
+ "modes": [
390
+ "script"
391
+ ],
392
+ "compatible_agents": [
393
+ "generic",
394
+ "claude",
395
+ "codex"
396
+ ],
397
+ "path": "jobs/devops/cdn-cache-purge-reminder.yaml"
398
+ },
251
399
  {
252
400
  "id": "cert-renewal-reminder",
253
401
  "version": 1,
@@ -349,6 +497,32 @@
349
497
  ],
350
498
  "path": "jobs/growth/churn-risk-watch.yaml"
351
499
  },
500
+ {
501
+ "id": "ci-build-time-regression-watch",
502
+ "version": 1,
503
+ "name": "CI Build Time Regression Watch",
504
+ "description": "Compares recent CI build durations to a baseline and flags a real slowdown. Use this if build times have ever crept up gradually until a 30-second CI run became a 15-minute one.",
505
+ "category": "devops",
506
+ "tags": [
507
+ "ci",
508
+ "performance",
509
+ "build-time"
510
+ ],
511
+ "schedule": "0 9 * * 1-5",
512
+ "timezone": "UTC",
513
+ "runner": "agent-prompt",
514
+ "modes": [
515
+ "agent-prompt"
516
+ ],
517
+ "compatible_agents": [
518
+ "claude",
519
+ "codex",
520
+ "hermes",
521
+ "openclaw",
522
+ "generic"
523
+ ],
524
+ "path": "jobs/devops/ci-build-time-regression-watch.yaml"
525
+ },
352
526
  {
353
527
  "id": "conference-cfp-deadline-reminder",
354
528
  "version": 1,
@@ -377,6 +551,54 @@
377
551
  ],
378
552
  "path": "jobs/learning/conference-cfp-deadline-reminder.yaml"
379
553
  },
554
+ {
555
+ "id": "content-calendar-gap-check",
556
+ "version": 1,
557
+ "name": "Content Calendar Gap Check",
558
+ "description": "Checks that you have something scheduled to post in the next few days. Use this if your publishing cadence has ever quietly broken because nothing was queued and nobody noticed until the gap already showed.",
559
+ "category": "creator",
560
+ "tags": [
561
+ "content",
562
+ "calendar",
563
+ "publishing"
564
+ ],
565
+ "schedule": "0 9 * * 1,4",
566
+ "timezone": "UTC",
567
+ "runner": "shell",
568
+ "modes": [
569
+ "script"
570
+ ],
571
+ "compatible_agents": [
572
+ "generic",
573
+ "claude",
574
+ "codex"
575
+ ],
576
+ "path": "jobs/creator/content-calendar-gap-check.yaml"
577
+ },
578
+ {
579
+ "id": "contract-renewal-reminder",
580
+ "version": 1,
581
+ "name": "Contract Renewal Reminder",
582
+ "description": "Warns you before a vendor or customer contract auto-renews or expires. Use this if a contract has ever auto-renewed for another year because nobody flagged the cancellation window in time.",
583
+ "category": "legal",
584
+ "tags": [
585
+ "legal",
586
+ "contracts",
587
+ "renewal"
588
+ ],
589
+ "schedule": "0 9 * * 1",
590
+ "timezone": "UTC",
591
+ "runner": "shell",
592
+ "modes": [
593
+ "script"
594
+ ],
595
+ "compatible_agents": [
596
+ "generic",
597
+ "claude",
598
+ "codex"
599
+ ],
600
+ "path": "jobs/legal/contract-renewal-reminder.yaml"
601
+ },
380
602
  {
381
603
  "id": "cost-alert",
382
604
  "version": 1,
@@ -428,6 +650,82 @@
428
650
  ],
429
651
  "path": "jobs/learning/course-progress-checkin.yaml"
430
652
  },
653
+ {
654
+ "id": "crypto-price-alert",
655
+ "version": 1,
656
+ "name": "Crypto Price Alert",
657
+ "description": "Checks a crypto asset's price and alerts when it crosses a threshold you set. Use this if you're waiting for a price target and don't want to keep a tab open all day watching a chart.",
658
+ "category": "investing",
659
+ "tags": [
660
+ "crypto",
661
+ "price",
662
+ "alert"
663
+ ],
664
+ "schedule": "*/15 * * * *",
665
+ "timezone": "UTC",
666
+ "runner": "shell",
667
+ "modes": [
668
+ "script"
669
+ ],
670
+ "compatible_agents": [
671
+ "generic",
672
+ "claude",
673
+ "codex"
674
+ ],
675
+ "path": "jobs/investing/crypto-price-alert.yaml"
676
+ },
677
+ {
678
+ "id": "csat-score-watch",
679
+ "version": 1,
680
+ "name": "CSAT Score Watch",
681
+ "description": "Checks your recent customer satisfaction score and flags it if it drops below your target. Use this if CSAT only gets looked at once a quarter, by which point a bad week is old news.",
682
+ "category": "support",
683
+ "tags": [
684
+ "support",
685
+ "csat",
686
+ "customer-satisfaction"
687
+ ],
688
+ "schedule": "0 9 * * 1",
689
+ "timezone": "UTC",
690
+ "runner": "agent-prompt",
691
+ "modes": [
692
+ "agent-prompt"
693
+ ],
694
+ "compatible_agents": [
695
+ "claude",
696
+ "codex",
697
+ "hermes",
698
+ "openclaw",
699
+ "generic"
700
+ ],
701
+ "path": "jobs/support/csat-score-watch.yaml"
702
+ },
703
+ {
704
+ "id": "customs-clearance-check",
705
+ "version": 1,
706
+ "name": "Customs Clearance Check",
707
+ "description": "Flags a shipment that's been sitting in customs longer than expected. Use this if a shipment has ever been stuck at the border for weeks before anyone thought to follow up with the broker.",
708
+ "category": "logistics",
709
+ "tags": [
710
+ "logistics",
711
+ "customs",
712
+ "shipping"
713
+ ],
714
+ "schedule": "0 9 * * *",
715
+ "timezone": "UTC",
716
+ "runner": "agent-prompt",
717
+ "modes": [
718
+ "agent-prompt"
719
+ ],
720
+ "compatible_agents": [
721
+ "claude",
722
+ "codex",
723
+ "hermes",
724
+ "openclaw",
725
+ "generic"
726
+ ],
727
+ "path": "jobs/logistics/customs-clearance-check.yaml"
728
+ },
431
729
  {
432
730
  "id": "cve-watch",
433
731
  "version": 1,
@@ -529,6 +827,30 @@
529
827
  ],
530
828
  "path": "jobs/devops/db-backup-verify.yaml"
531
829
  },
830
+ {
831
+ "id": "dependabot-alert-digest",
832
+ "version": 1,
833
+ "name": "Dependabot Alert Digest",
834
+ "description": "Rolls up open Dependabot security alerts across a repo into one digest. Use this if Dependabot alerts have ever piled up in a tab nobody checks instead of getting triaged as they come in.",
835
+ "category": "security",
836
+ "tags": [
837
+ "security",
838
+ "dependabot",
839
+ "github"
840
+ ],
841
+ "schedule": "0 8 * * 1",
842
+ "timezone": "UTC",
843
+ "runner": "shell",
844
+ "modes": [
845
+ "script"
846
+ ],
847
+ "compatible_agents": [
848
+ "generic",
849
+ "claude",
850
+ "codex"
851
+ ],
852
+ "path": "jobs/security/dependabot-alert-digest.yaml"
853
+ },
532
854
  {
533
855
  "id": "dependency-audit",
534
856
  "version": 1,
@@ -629,17 +951,17 @@
629
951
  "path": "jobs/devops/docker-image-prune.yaml"
630
952
  },
631
953
  {
632
- "id": "env-drift-check",
954
+ "id": "email-deliverability-check",
633
955
  "version": 1,
634
- "name": "Env File Drift Check",
635
- "description": "Compares your .env against .env.example and flags keys that are missing or extra. Use this if you've ever deployed and hit a crash because a new required env var never got set.",
636
- "category": "devops",
956
+ "name": "Email Deliverability Check",
957
+ "description": "Checks recent bounce and spam-complaint rates for your email sends and flags a spike. Use this if a deliverability problem has ever quietly tanked open rates for a week before anyone checked the actual bounce numbers.",
958
+ "category": "marketing",
637
959
  "tags": [
638
- "config",
639
- "env",
640
- "drift"
960
+ "marketing",
961
+ "email",
962
+ "deliverability"
641
963
  ],
642
- "schedule": "0 8 * * *",
964
+ "schedule": "0 9 * * *",
643
965
  "timezone": "UTC",
644
966
  "runner": "shell",
645
967
  "modes": [
@@ -650,24 +972,23 @@
650
972
  "claude",
651
973
  "codex"
652
974
  ],
653
- "path": "jobs/devops/env-drift-check.yaml"
975
+ "path": "jobs/marketing/email-deliverability-check.yaml"
654
976
  },
655
977
  {
656
- "id": "error-rate-spike-watch",
978
+ "id": "engagement-drop-watch",
657
979
  "version": 1,
658
- "name": "Error Rate Spike Watch",
659
- "description": "Checks your error tracker's recent error count against a threshold and flags a spike. Use this if a bad deploy has ever quietly spiked errors for hours before anyone noticed.",
660
- "category": "devops",
980
+ "name": "Engagement Drop Watch",
981
+ "description": "Compares recent post engagement to your baseline and flags a real drop. Use this if you've ever kept posting into a falling algorithm curve for weeks before noticing the numbers were down.",
982
+ "category": "creator",
661
983
  "tags": [
662
- "errors",
663
- "monitoring",
664
- "alerting"
984
+ "content",
985
+ "engagement",
986
+ "social"
665
987
  ],
666
- "schedule": "*/15 * * * *",
988
+ "schedule": "0 9 * * 1",
667
989
  "timezone": "UTC",
668
- "runner": "hybrid",
990
+ "runner": "agent-prompt",
669
991
  "modes": [
670
- "script",
671
992
  "agent-prompt"
672
993
  ],
673
994
  "compatible_agents": [
@@ -677,13 +998,112 @@
677
998
  "openclaw",
678
999
  "generic"
679
1000
  ],
680
- "path": "jobs/devops/error-rate-spike-watch.yaml"
1001
+ "path": "jobs/creator/engagement-drop-watch.yaml"
681
1002
  },
682
1003
  {
683
- "id": "failed-login-watch",
1004
+ "id": "env-drift-check",
684
1005
  "version": 1,
685
- "name": "Failed Login Watch",
686
- "description": "Watches an auth log for a burst of failed login attempts and alerts if it crosses a threshold. Use this if you run a server exposed to SSH and want an early warning for brute-force attempts.",
1006
+ "name": "Env File Drift Check",
1007
+ "description": "Compares your .env against .env.example and flags keys that are missing or extra. Use this if you've ever deployed and hit a crash because a new required env var never got set.",
1008
+ "category": "devops",
1009
+ "tags": [
1010
+ "config",
1011
+ "env",
1012
+ "drift"
1013
+ ],
1014
+ "schedule": "0 8 * * *",
1015
+ "timezone": "UTC",
1016
+ "runner": "shell",
1017
+ "modes": [
1018
+ "script"
1019
+ ],
1020
+ "compatible_agents": [
1021
+ "generic",
1022
+ "claude",
1023
+ "codex"
1024
+ ],
1025
+ "path": "jobs/devops/env-drift-check.yaml"
1026
+ },
1027
+ {
1028
+ "id": "episode-publish-gap-check",
1029
+ "version": 1,
1030
+ "name": "Podcast Episode Publish Gap Check",
1031
+ "description": "Checks that a new episode has gone out recently and flags it if your publish cadence has slipped. Use this if listeners have ever noticed a gap in your feed before you did.",
1032
+ "category": "podcast",
1033
+ "tags": [
1034
+ "podcast",
1035
+ "publishing",
1036
+ "cadence"
1037
+ ],
1038
+ "schedule": "0 9 * * 1",
1039
+ "timezone": "UTC",
1040
+ "runner": "shell",
1041
+ "modes": [
1042
+ "script"
1043
+ ],
1044
+ "compatible_agents": [
1045
+ "generic",
1046
+ "claude",
1047
+ "codex"
1048
+ ],
1049
+ "path": "jobs/podcast/episode-publish-gap-check.yaml"
1050
+ },
1051
+ {
1052
+ "id": "error-rate-spike-watch",
1053
+ "version": 1,
1054
+ "name": "Error Rate Spike Watch",
1055
+ "description": "Checks your error tracker's recent error count against a threshold and flags a spike. Use this if a bad deploy has ever quietly spiked errors for hours before anyone noticed.",
1056
+ "category": "devops",
1057
+ "tags": [
1058
+ "errors",
1059
+ "monitoring",
1060
+ "alerting"
1061
+ ],
1062
+ "schedule": "*/15 * * * *",
1063
+ "timezone": "UTC",
1064
+ "runner": "hybrid",
1065
+ "modes": [
1066
+ "script",
1067
+ "agent-prompt"
1068
+ ],
1069
+ "compatible_agents": [
1070
+ "claude",
1071
+ "codex",
1072
+ "hermes",
1073
+ "openclaw",
1074
+ "generic"
1075
+ ],
1076
+ "path": "jobs/devops/error-rate-spike-watch.yaml"
1077
+ },
1078
+ {
1079
+ "id": "expiring-api-key-rotation",
1080
+ "version": 1,
1081
+ "name": "Expiring API Key Rotation Reminder",
1082
+ "description": "Warns you before a third-party API key or token you're tracking expires. Use this if an integration has ever gone down in production because a key expired and nobody rotated it in time.",
1083
+ "category": "security",
1084
+ "tags": [
1085
+ "security",
1086
+ "api-keys",
1087
+ "rotation"
1088
+ ],
1089
+ "schedule": "0 8 * * *",
1090
+ "timezone": "UTC",
1091
+ "runner": "shell",
1092
+ "modes": [
1093
+ "script"
1094
+ ],
1095
+ "compatible_agents": [
1096
+ "generic",
1097
+ "claude",
1098
+ "codex"
1099
+ ],
1100
+ "path": "jobs/security/expiring-api-key-rotation.yaml"
1101
+ },
1102
+ {
1103
+ "id": "failed-login-watch",
1104
+ "version": 1,
1105
+ "name": "Failed Login Watch",
1106
+ "description": "Watches an auth log for a burst of failed login attempts and alerts if it crosses a threshold. Use this if you run a server exposed to SSH and want an early warning for brute-force attempts.",
687
1107
  "category": "security",
688
1108
  "tags": [
689
1109
  "security",
@@ -801,6 +1221,30 @@
801
1221
  ],
802
1222
  "path": "jobs/productivity/focus-block-reminder.yaml"
803
1223
  },
1224
+ {
1225
+ "id": "food-safety-temp-log-check",
1226
+ "version": 1,
1227
+ "name": "Food Safety Temperature Log Check",
1228
+ "description": "Checks that fridge/freezer temperature logs were actually recorded today and flags any reading outside the safe range. Use this if a temperature log has ever gone unfilled for a shift, or a unit drifted out of range without anyone noticing until the food was already at risk.",
1229
+ "category": "hospitality",
1230
+ "tags": [
1231
+ "hospitality",
1232
+ "food-safety",
1233
+ "compliance"
1234
+ ],
1235
+ "schedule": "0 */4 * * *",
1236
+ "timezone": "UTC",
1237
+ "runner": "shell",
1238
+ "modes": [
1239
+ "script"
1240
+ ],
1241
+ "compatible_agents": [
1242
+ "generic",
1243
+ "claude",
1244
+ "codex"
1245
+ ],
1246
+ "path": "jobs/hospitality/food-safety-temp-log-check.yaml"
1247
+ },
804
1248
  {
805
1249
  "id": "frequent-flyer-miles-expiry",
806
1250
  "version": 1,
@@ -826,6 +1270,32 @@
826
1270
  ],
827
1271
  "path": "jobs/travel/frequent-flyer-miles-expiry.yaml"
828
1272
  },
1273
+ {
1274
+ "id": "fuel-card-anomaly-check",
1275
+ "version": 1,
1276
+ "name": "Fuel Card Anomaly Check",
1277
+ "description": "Flags fuel card transactions that look unusual (too large, too frequent, or outside normal hours/locations). Use this if fuel card misuse has ever gone unnoticed until the monthly statement showed up.",
1278
+ "category": "fleet",
1279
+ "tags": [
1280
+ "fleet",
1281
+ "fuel-card",
1282
+ "fraud"
1283
+ ],
1284
+ "schedule": "0 7 * * *",
1285
+ "timezone": "UTC",
1286
+ "runner": "agent-prompt",
1287
+ "modes": [
1288
+ "agent-prompt"
1289
+ ],
1290
+ "compatible_agents": [
1291
+ "claude",
1292
+ "codex",
1293
+ "hermes",
1294
+ "openclaw",
1295
+ "generic"
1296
+ ],
1297
+ "path": "jobs/fleet/fuel-card-anomaly-check.yaml"
1298
+ },
829
1299
  {
830
1300
  "id": "fx-rate-watch",
831
1301
  "version": 1,
@@ -850,6 +1320,33 @@
850
1320
  ],
851
1321
  "path": "jobs/finance/fx-rate-watch.yaml"
852
1322
  },
1323
+ {
1324
+ "id": "grant-deadline-reminder",
1325
+ "version": 1,
1326
+ "name": "Grant Deadline Reminder",
1327
+ "description": "Warns you before a grant application deadline, and can help draft the application. Use this if a funding opportunity has ever been missed simply because the deadline crept up during a busy week.",
1328
+ "category": "nonprofit",
1329
+ "tags": [
1330
+ "nonprofit",
1331
+ "grants",
1332
+ "fundraising"
1333
+ ],
1334
+ "schedule": "0 9 * * 1",
1335
+ "timezone": "UTC",
1336
+ "runner": "hybrid",
1337
+ "modes": [
1338
+ "script",
1339
+ "agent-prompt"
1340
+ ],
1341
+ "compatible_agents": [
1342
+ "claude",
1343
+ "codex",
1344
+ "hermes",
1345
+ "openclaw",
1346
+ "generic"
1347
+ ],
1348
+ "path": "jobs/nonprofit/grant-deadline-reminder.yaml"
1349
+ },
853
1350
  {
854
1351
  "id": "habit-checkin",
855
1352
  "version": 1,
@@ -874,6 +1371,30 @@
874
1371
  ],
875
1372
  "path": "jobs/personal/habit-checkin.yaml"
876
1373
  },
1374
+ {
1375
+ "id": "hreflang-audit",
1376
+ "version": 1,
1377
+ "name": "Hreflang Audit",
1378
+ "description": "Checks a page's hreflang tags for missing reciprocal links or obviously wrong language/region codes. Use this if a hreflang mistake has ever quietly sent the wrong country's visitors to the wrong language version.",
1379
+ "category": "content",
1380
+ "tags": [
1381
+ "seo",
1382
+ "hreflang",
1383
+ "international"
1384
+ ],
1385
+ "schedule": "0 7 * * 1",
1386
+ "timezone": "UTC",
1387
+ "runner": "shell",
1388
+ "modes": [
1389
+ "script"
1390
+ ],
1391
+ "compatible_agents": [
1392
+ "generic",
1393
+ "claude",
1394
+ "codex"
1395
+ ],
1396
+ "path": "jobs/content/hreflang-audit.yaml"
1397
+ },
877
1398
  {
878
1399
  "id": "hvac-filter-reminder",
879
1400
  "version": 1,
@@ -923,6 +1444,30 @@
923
1444
  ],
924
1445
  "path": "jobs/security/iam-key-rotation-reminder.yaml"
925
1446
  },
1447
+ {
1448
+ "id": "image-alt-text-audit",
1449
+ "version": 1,
1450
+ "name": "Image Alt Text Audit",
1451
+ "description": "Checks a page for images missing alt text. Use this if images have ever shipped without alt text because nobody double-checked before merging.",
1452
+ "category": "content",
1453
+ "tags": [
1454
+ "seo",
1455
+ "accessibility",
1456
+ "images"
1457
+ ],
1458
+ "schedule": "0 7 * * 1",
1459
+ "timezone": "UTC",
1460
+ "runner": "shell",
1461
+ "modes": [
1462
+ "script"
1463
+ ],
1464
+ "compatible_agents": [
1465
+ "generic",
1466
+ "claude",
1467
+ "codex"
1468
+ ],
1469
+ "path": "jobs/content/image-alt-text-audit.yaml"
1470
+ },
926
1471
  {
927
1472
  "id": "inbox-triage",
928
1473
  "version": 1,
@@ -949,6 +1494,56 @@
949
1494
  ],
950
1495
  "path": "jobs/productivity/inbox-triage.yaml"
951
1496
  },
1497
+ {
1498
+ "id": "inspection-deadline-reminder",
1499
+ "version": 1,
1500
+ "name": "Inspection Deadline Reminder",
1501
+ "description": "Warns you before a scheduled inspection date, so the site is actually ready. Use this if an inspector has ever shown up to a site that wasn't prepped because the date snuck up on the crew.",
1502
+ "category": "construction",
1503
+ "tags": [
1504
+ "construction",
1505
+ "inspection",
1506
+ "scheduling"
1507
+ ],
1508
+ "schedule": "0 7 * * *",
1509
+ "timezone": "UTC",
1510
+ "runner": "shell",
1511
+ "modes": [
1512
+ "script"
1513
+ ],
1514
+ "compatible_agents": [
1515
+ "generic",
1516
+ "claude",
1517
+ "codex"
1518
+ ],
1519
+ "path": "jobs/construction/inspection-deadline-reminder.yaml"
1520
+ },
1521
+ {
1522
+ "id": "inventory-count-discrepancy-check",
1523
+ "version": 1,
1524
+ "name": "Inventory Count Discrepancy Check",
1525
+ "description": "Compares a physical inventory count against system records and flags mismatches worth investigating. Use this if shrinkage or data entry errors have ever gone unnoticed until a full audit months later.",
1526
+ "category": "inventory",
1527
+ "tags": [
1528
+ "inventory",
1529
+ "audit",
1530
+ "discrepancy"
1531
+ ],
1532
+ "schedule": "0 9 1 * *",
1533
+ "timezone": "UTC",
1534
+ "runner": "agent-prompt",
1535
+ "modes": [
1536
+ "agent-prompt"
1537
+ ],
1538
+ "compatible_agents": [
1539
+ "claude",
1540
+ "codex",
1541
+ "hermes",
1542
+ "openclaw",
1543
+ "generic"
1544
+ ],
1545
+ "path": "jobs/inventory/inventory-count-discrepancy-check.yaml"
1546
+ },
952
1547
  {
953
1548
  "id": "invoice-overdue-check",
954
1549
  "version": 1,
@@ -973,6 +1568,102 @@
973
1568
  ],
974
1569
  "path": "jobs/finance/invoice-overdue-check.yaml"
975
1570
  },
1571
+ {
1572
+ "id": "k8s-pod-restart-watch",
1573
+ "version": 1,
1574
+ "name": "Kubernetes Pod Restart Watch",
1575
+ "description": "Checks for pods with a high restart count and flags them. Use this if a crash-looping pod has ever burned through hours before anyone noticed it wasn't actually staying up.",
1576
+ "category": "devops",
1577
+ "tags": [
1578
+ "kubernetes",
1579
+ "pods",
1580
+ "monitoring"
1581
+ ],
1582
+ "schedule": "*/15 * * * *",
1583
+ "timezone": "UTC",
1584
+ "runner": "shell",
1585
+ "modes": [
1586
+ "script"
1587
+ ],
1588
+ "compatible_agents": [
1589
+ "generic",
1590
+ "claude",
1591
+ "codex"
1592
+ ],
1593
+ "path": "jobs/devops/k8s-pod-restart-watch.yaml"
1594
+ },
1595
+ {
1596
+ "id": "lapsed-donor-check",
1597
+ "version": 1,
1598
+ "name": "Lapsed Donor Check",
1599
+ "description": "Flags donors who gave before but haven't in a while, before they're fully lost. Use this if lapsed-donor outreach only happens during the annual campaign instead of catching people while it's still recoverable.",
1600
+ "category": "nonprofit",
1601
+ "tags": [
1602
+ "nonprofit",
1603
+ "donors",
1604
+ "fundraising"
1605
+ ],
1606
+ "schedule": "0 9 1 * *",
1607
+ "timezone": "UTC",
1608
+ "runner": "shell",
1609
+ "modes": [
1610
+ "script"
1611
+ ],
1612
+ "compatible_agents": [
1613
+ "generic",
1614
+ "claude",
1615
+ "codex"
1616
+ ],
1617
+ "path": "jobs/nonprofit/lapsed-donor-check.yaml"
1618
+ },
1619
+ {
1620
+ "id": "lead-response-time-check",
1621
+ "version": 1,
1622
+ "name": "Lead Response Time Check",
1623
+ "description": "Flags new inbound leads that haven't gotten a first response within your target window. Use this if you've ever lost a hot lead simply because nobody replied fast enough.",
1624
+ "category": "sales",
1625
+ "tags": [
1626
+ "sales",
1627
+ "leads",
1628
+ "response-time"
1629
+ ],
1630
+ "schedule": "*/30 * * * *",
1631
+ "timezone": "UTC",
1632
+ "runner": "shell",
1633
+ "modes": [
1634
+ "script"
1635
+ ],
1636
+ "compatible_agents": [
1637
+ "generic",
1638
+ "claude",
1639
+ "codex"
1640
+ ],
1641
+ "path": "jobs/sales/lead-response-time-check.yaml"
1642
+ },
1643
+ {
1644
+ "id": "lease-expiry-reminder",
1645
+ "version": 1,
1646
+ "name": "Lease Expiry Reminder",
1647
+ "description": "Warns you before a lease ends so there's time to renew, renegotiate, or start looking. Use this if a lease has ever gone month-to-month, or ended, without anyone noticing the date was coming.",
1648
+ "category": "realestate",
1649
+ "tags": [
1650
+ "realestate",
1651
+ "lease",
1652
+ "reminder"
1653
+ ],
1654
+ "schedule": "0 9 1 * *",
1655
+ "timezone": "UTC",
1656
+ "runner": "shell",
1657
+ "modes": [
1658
+ "script"
1659
+ ],
1660
+ "compatible_agents": [
1661
+ "generic",
1662
+ "claude",
1663
+ "codex"
1664
+ ],
1665
+ "path": "jobs/realestate/lease-expiry-reminder.yaml"
1666
+ },
976
1667
  {
977
1668
  "id": "license-compliance-check",
978
1669
  "version": 1,
@@ -1020,6 +1711,54 @@
1020
1711
  ],
1021
1712
  "path": "jobs/devops/log-cleanup.yaml"
1022
1713
  },
1714
+ {
1715
+ "id": "log-forwarding-health-check",
1716
+ "version": 1,
1717
+ "name": "Log Forwarding Health Check",
1718
+ "description": "Checks that logs are still actually arriving at your log aggregator. Use this if a log shipper has ever silently died and nobody found out until they needed logs that were never collected.",
1719
+ "category": "devops",
1720
+ "tags": [
1721
+ "logging",
1722
+ "monitoring",
1723
+ "observability"
1724
+ ],
1725
+ "schedule": "*/30 * * * *",
1726
+ "timezone": "UTC",
1727
+ "runner": "shell",
1728
+ "modes": [
1729
+ "script"
1730
+ ],
1731
+ "compatible_agents": [
1732
+ "generic",
1733
+ "claude",
1734
+ "codex"
1735
+ ],
1736
+ "path": "jobs/devops/log-forwarding-health-check.yaml"
1737
+ },
1738
+ {
1739
+ "id": "low-stock-alert",
1740
+ "version": 1,
1741
+ "name": "Low Stock Alert",
1742
+ "description": "Checks inventory levels against a reorder point and flags SKUs running low. Use this if you've ever gone out of stock on a bestseller because nobody was watching the count.",
1743
+ "category": "inventory",
1744
+ "tags": [
1745
+ "inventory",
1746
+ "stock",
1747
+ "ecommerce"
1748
+ ],
1749
+ "schedule": "0 7 * * *",
1750
+ "timezone": "UTC",
1751
+ "runner": "shell",
1752
+ "modes": [
1753
+ "script"
1754
+ ],
1755
+ "compatible_agents": [
1756
+ "generic",
1757
+ "claude",
1758
+ "codex"
1759
+ ],
1760
+ "path": "jobs/inventory/low-stock-alert.yaml"
1761
+ },
1023
1762
  {
1024
1763
  "id": "meal-plan-reminder",
1025
1764
  "version": 1,
@@ -1143,6 +1882,32 @@
1143
1882
  ],
1144
1883
  "path": "jobs/security/open-port-check.yaml"
1145
1884
  },
1885
+ {
1886
+ "id": "open-req-aging-check",
1887
+ "version": 1,
1888
+ "name": "Open Req Aging Check",
1889
+ "description": "Flags job requisitions that have been open too long without enough candidates in the pipeline. Use this if a req has ever sat open for months before anyone asked why it wasn't moving.",
1890
+ "category": "hiring",
1891
+ "tags": [
1892
+ "hiring",
1893
+ "recruiting",
1894
+ "requisitions"
1895
+ ],
1896
+ "schedule": "0 9 * * 1",
1897
+ "timezone": "UTC",
1898
+ "runner": "agent-prompt",
1899
+ "modes": [
1900
+ "agent-prompt"
1901
+ ],
1902
+ "compatible_agents": [
1903
+ "claude",
1904
+ "codex",
1905
+ "hermes",
1906
+ "openclaw",
1907
+ "generic"
1908
+ ],
1909
+ "path": "jobs/hiring/open-req-aging-check.yaml"
1910
+ },
1146
1911
  {
1147
1912
  "id": "orphaned-branch-cleanup",
1148
1913
  "version": 1,
@@ -1167,6 +1932,30 @@
1167
1932
  ],
1168
1933
  "path": "jobs/devops/orphaned-branch-cleanup.yaml"
1169
1934
  },
1935
+ {
1936
+ "id": "page-speed-regression-watch",
1937
+ "version": 1,
1938
+ "name": "Page Speed Regression Watch",
1939
+ "description": "Checks a page's load time against a baseline and flags a real regression. Use this if a page has ever gotten slowly, silently slower release after release until it was a real problem.",
1940
+ "category": "content",
1941
+ "tags": [
1942
+ "performance",
1943
+ "seo",
1944
+ "monitoring"
1945
+ ],
1946
+ "schedule": "0 6 * * *",
1947
+ "timezone": "UTC",
1948
+ "runner": "shell",
1949
+ "modes": [
1950
+ "script"
1951
+ ],
1952
+ "compatible_agents": [
1953
+ "generic",
1954
+ "claude",
1955
+ "codex"
1956
+ ],
1957
+ "path": "jobs/content/page-speed-regression-watch.yaml"
1958
+ },
1170
1959
  {
1171
1960
  "id": "passport-expiry-check",
1172
1961
  "version": 1,
@@ -1191,6 +1980,54 @@
1191
1980
  ],
1192
1981
  "path": "jobs/travel/passport-expiry-check.yaml"
1193
1982
  },
1983
+ {
1984
+ "id": "payroll-run-reminder",
1985
+ "version": 1,
1986
+ "name": "Payroll Run Reminder",
1987
+ "description": "Warns you before the payroll submission deadline so employees actually get paid on time. Use this if payroll has ever run late because the submission cutoff snuck up during a busy week.",
1988
+ "category": "finance",
1989
+ "tags": [
1990
+ "finance",
1991
+ "payroll",
1992
+ "deadlines"
1993
+ ],
1994
+ "schedule": "0 9 * * *",
1995
+ "timezone": "UTC",
1996
+ "runner": "shell",
1997
+ "modes": [
1998
+ "script"
1999
+ ],
2000
+ "compatible_agents": [
2001
+ "generic",
2002
+ "claude",
2003
+ "codex"
2004
+ ],
2005
+ "path": "jobs/finance/payroll-run-reminder.yaml"
2006
+ },
2007
+ {
2008
+ "id": "permit-expiry-check",
2009
+ "version": 1,
2010
+ "name": "Building Permit Expiry Check",
2011
+ "description": "Warns you before a building permit expires so work doesn't get caught without valid coverage. Use this if a permit has ever lapsed mid-project and forced a costly re-inspection or re-application.",
2012
+ "category": "construction",
2013
+ "tags": [
2014
+ "construction",
2015
+ "permits",
2016
+ "compliance"
2017
+ ],
2018
+ "schedule": "0 8 * * 1",
2019
+ "timezone": "UTC",
2020
+ "runner": "shell",
2021
+ "modes": [
2022
+ "script"
2023
+ ],
2024
+ "compatible_agents": [
2025
+ "generic",
2026
+ "claude",
2027
+ "codex"
2028
+ ],
2029
+ "path": "jobs/construction/permit-expiry-check.yaml"
2030
+ },
1194
2031
  {
1195
2032
  "id": "plant-watering-reminder",
1196
2033
  "version": 1,
@@ -1215,6 +2052,56 @@
1215
2052
  ],
1216
2053
  "path": "jobs/home/plant-watering-reminder.yaml"
1217
2054
  },
2055
+ {
2056
+ "id": "portfolio-rebalance-check",
2057
+ "version": 1,
2058
+ "name": "Portfolio Rebalance Check",
2059
+ "description": "Compares your current asset allocation to your target and flags drift worth rebalancing. Use this if your portfolio only gets rebalanced whenever you happen to remember to look.",
2060
+ "category": "investing",
2061
+ "tags": [
2062
+ "investing",
2063
+ "portfolio",
2064
+ "rebalancing"
2065
+ ],
2066
+ "schedule": "0 9 1 * *",
2067
+ "timezone": "UTC",
2068
+ "runner": "agent-prompt",
2069
+ "modes": [
2070
+ "agent-prompt"
2071
+ ],
2072
+ "compatible_agents": [
2073
+ "claude",
2074
+ "codex",
2075
+ "hermes",
2076
+ "openclaw",
2077
+ "generic"
2078
+ ],
2079
+ "path": "jobs/investing/portfolio-rebalance-check.yaml"
2080
+ },
2081
+ {
2082
+ "id": "production-line-downtime-watch",
2083
+ "version": 1,
2084
+ "name": "Production Line Downtime Watch",
2085
+ "description": "Checks how long a production line has been stopped and flags it once it crosses a threshold. Use this if a line has ever sat down far longer than anyone realized because the stoppage alert never made it to the right person.",
2086
+ "category": "manufacturing",
2087
+ "tags": [
2088
+ "manufacturing",
2089
+ "downtime",
2090
+ "production"
2091
+ ],
2092
+ "schedule": "*/15 * * * *",
2093
+ "timezone": "UTC",
2094
+ "runner": "shell",
2095
+ "modes": [
2096
+ "script"
2097
+ ],
2098
+ "compatible_agents": [
2099
+ "generic",
2100
+ "claude",
2101
+ "codex"
2102
+ ],
2103
+ "path": "jobs/manufacturing/production-line-downtime-watch.yaml"
2104
+ },
1218
2105
  {
1219
2106
  "id": "pto-balance-check",
1220
2107
  "version": 1,
@@ -1239,6 +2126,30 @@
1239
2126
  ],
1240
2127
  "path": "jobs/team/pto-balance-check.yaml"
1241
2128
  },
2129
+ {
2130
+ "id": "quality-defect-rate-check",
2131
+ "version": 1,
2132
+ "name": "Quality Defect Rate Check",
2133
+ "description": "Checks today's defect rate against a target and flags it if it's running high. Use this if a quality problem has ever run for a full shift before anyone pulled the numbers and noticed.",
2134
+ "category": "manufacturing",
2135
+ "tags": [
2136
+ "manufacturing",
2137
+ "quality",
2138
+ "defects"
2139
+ ],
2140
+ "schedule": "0 */4 * * *",
2141
+ "timezone": "UTC",
2142
+ "runner": "shell",
2143
+ "modes": [
2144
+ "script"
2145
+ ],
2146
+ "compatible_agents": [
2147
+ "generic",
2148
+ "claude",
2149
+ "codex"
2150
+ ],
2151
+ "path": "jobs/manufacturing/quality-defect-rate-check.yaml"
2152
+ },
1242
2153
  {
1243
2154
  "id": "queue-depth-check",
1244
2155
  "version": 1,
@@ -1261,21 +2172,69 @@
1261
2172
  "claude",
1262
2173
  "codex"
1263
2174
  ],
1264
- "path": "jobs/devops/queue-depth-check.yaml"
2175
+ "path": "jobs/devops/queue-depth-check.yaml"
2176
+ },
2177
+ {
2178
+ "id": "reading-list-nudge",
2179
+ "version": 1,
2180
+ "name": "Reading List Nudge",
2181
+ "description": "Reminds you what's next on your reading list. Use this if you save articles/books to \"read later\" and later never comes.",
2182
+ "category": "learning",
2183
+ "tags": [
2184
+ "learning",
2185
+ "reading",
2186
+ "reminder"
2187
+ ],
2188
+ "schedule": "0 9 * * 6",
2189
+ "timezone": "America/Los_Angeles",
2190
+ "runner": "shell",
2191
+ "modes": [
2192
+ "script"
2193
+ ],
2194
+ "compatible_agents": [
2195
+ "generic",
2196
+ "claude",
2197
+ "codex"
2198
+ ],
2199
+ "path": "jobs/learning/reading-list-nudge.yaml"
2200
+ },
2201
+ {
2202
+ "id": "recurring-payment-failure-check",
2203
+ "version": 1,
2204
+ "name": "Recurring Payment Failure Check",
2205
+ "description": "Flags subscription charges that failed and haven't successfully retried yet. Use this if a failed card has ever silently churned a customer because nobody noticed the retry never succeeded.",
2206
+ "category": "finance",
2207
+ "tags": [
2208
+ "finance",
2209
+ "billing",
2210
+ "payments"
2211
+ ],
2212
+ "schedule": "0 */6 * * *",
2213
+ "timezone": "UTC",
2214
+ "runner": "shell",
2215
+ "modes": [
2216
+ "script"
2217
+ ],
2218
+ "compatible_agents": [
2219
+ "generic",
2220
+ "claude",
2221
+ "codex"
2222
+ ],
2223
+ "path": "jobs/finance/recurring-payment-failure-check.yaml"
1265
2224
  },
1266
2225
  {
1267
- "id": "reading-list-nudge",
2226
+ "id": "rental-vacancy-check",
1268
2227
  "version": 1,
1269
- "name": "Reading List Nudge",
1270
- "description": "Reminds you what's next on your reading list. Use this if you save articles/books to \"read later\" and later never comes.",
1271
- "category": "learning",
2228
+ "name": "Rental Vacancy Check",
2229
+ "description": "Flags a rental listing that's been vacant longer than expected. Use this if a unit has ever sat empty for months while everyone assumed someone else was handling the listing.",
2230
+ "category": "realestate",
1272
2231
  "tags": [
1273
- "learning",
1274
- "reading",
1275
- "reminder"
2232
+ "realestate",
2233
+ "vacancy",
2234
+ "listings"
1276
2235
  ],
1277
- "schedule": "0 9 * * 6",
1278
- "timezone": "America/Los_Angeles",
2236
+ "schedule": "0 9 * * 1",
2237
+ "timezone": "UTC",
1279
2238
  "runner": "shell",
1280
2239
  "modes": [
1281
2240
  "script"
@@ -1285,7 +2244,7 @@
1285
2244
  "claude",
1286
2245
  "codex"
1287
2246
  ],
1288
- "path": "jobs/learning/reading-list-nudge.yaml"
2247
+ "path": "jobs/realestate/rental-vacancy-check.yaml"
1289
2248
  },
1290
2249
  {
1291
2250
  "id": "repo-health-check",
@@ -1314,6 +2273,30 @@
1314
2273
  ],
1315
2274
  "path": "jobs/devops/repo-health-check.yaml"
1316
2275
  },
2276
+ {
2277
+ "id": "reservation-noshow-check",
2278
+ "version": 1,
2279
+ "name": "Reservation No-show Check",
2280
+ "description": "Checks yesterday's no-show rate against your normal baseline and flags a spike. Use this if a run of no-shows has ever quietly hurt revenue for days before anyone connected the pattern.",
2281
+ "category": "hospitality",
2282
+ "tags": [
2283
+ "hospitality",
2284
+ "reservations",
2285
+ "noshow"
2286
+ ],
2287
+ "schedule": "0 8 * * *",
2288
+ "timezone": "UTC",
2289
+ "runner": "shell",
2290
+ "modes": [
2291
+ "script"
2292
+ ],
2293
+ "compatible_agents": [
2294
+ "generic",
2295
+ "claude",
2296
+ "codex"
2297
+ ],
2298
+ "path": "jobs/hospitality/reservation-noshow-check.yaml"
2299
+ },
1317
2300
  {
1318
2301
  "id": "review-request-nudge",
1319
2302
  "version": 1,
@@ -1386,6 +2369,30 @@
1386
2369
  ],
1387
2370
  "path": "jobs/content/rss-feed-validate.yaml"
1388
2371
  },
2372
+ {
2373
+ "id": "rsvp-followup-reminder",
2374
+ "version": 1,
2375
+ "name": "RSVP Follow-up Reminder",
2376
+ "description": "Flags invitees who haven't RSVP'd as the event date gets close. Use this if you've ever had to guess headcount because half the guest list never replied and nobody chased them.",
2377
+ "category": "events",
2378
+ "tags": [
2379
+ "events",
2380
+ "rsvp",
2381
+ "planning"
2382
+ ],
2383
+ "schedule": "0 9 * * 1",
2384
+ "timezone": "UTC",
2385
+ "runner": "shell",
2386
+ "modes": [
2387
+ "script"
2388
+ ],
2389
+ "compatible_agents": [
2390
+ "generic",
2391
+ "claude",
2392
+ "codex"
2393
+ ],
2394
+ "path": "jobs/events/rsvp-followup-reminder.yaml"
2395
+ },
1389
2396
  {
1390
2397
  "id": "s3-public-bucket-check",
1391
2398
  "version": 1,
@@ -1510,6 +2517,30 @@
1510
2517
  ],
1511
2518
  "path": "jobs/content/seo-meta-check.yaml"
1512
2519
  },
2520
+ {
2521
+ "id": "shipment-delay-watch",
2522
+ "version": 1,
2523
+ "name": "Shipment Delay Watch",
2524
+ "description": "Checks a shipment's tracking status and flags it if it hasn't moved in a while. Use this if a stuck shipment has ever gone unnoticed until a customer asked where their order was.",
2525
+ "category": "logistics",
2526
+ "tags": [
2527
+ "logistics",
2528
+ "shipping",
2529
+ "tracking"
2530
+ ],
2531
+ "schedule": "0 */6 * * *",
2532
+ "timezone": "UTC",
2533
+ "runner": "shell",
2534
+ "modes": [
2535
+ "script"
2536
+ ],
2537
+ "compatible_agents": [
2538
+ "generic",
2539
+ "claude",
2540
+ "codex"
2541
+ ],
2542
+ "path": "jobs/logistics/shipment-delay-watch.yaml"
2543
+ },
1513
2544
  {
1514
2545
  "id": "sitemap-freshness-check",
1515
2546
  "version": 1,
@@ -1584,6 +2615,30 @@
1584
2615
  ],
1585
2616
  "path": "jobs/content/social-mentions-watch.yaml"
1586
2617
  },
2618
+ {
2619
+ "id": "sponsor-deliverable-tracker",
2620
+ "version": 1,
2621
+ "name": "Podcast Sponsor Deliverable Tracker",
2622
+ "description": "Flags sponsor deliverables (read, mention, social post) coming due. Use this if you've ever had a sponsor follow up asking where their promised mention was.",
2623
+ "category": "podcast",
2624
+ "tags": [
2625
+ "podcast",
2626
+ "sponsorship",
2627
+ "deliverables"
2628
+ ],
2629
+ "schedule": "0 9 * * 1",
2630
+ "timezone": "UTC",
2631
+ "runner": "shell",
2632
+ "modes": [
2633
+ "script"
2634
+ ],
2635
+ "compatible_agents": [
2636
+ "generic",
2637
+ "claude",
2638
+ "codex"
2639
+ ],
2640
+ "path": "jobs/podcast/sponsor-deliverable-tracker.yaml"
2641
+ },
1587
2642
  {
1588
2643
  "id": "ssl-cert-expiry-check",
1589
2644
  "version": 1,
@@ -1609,6 +2664,57 @@
1609
2664
  ],
1610
2665
  "path": "jobs/devops/ssl-cert-expiry-check.yaml"
1611
2666
  },
2667
+ {
2668
+ "id": "staging-prod-config-diff",
2669
+ "version": 1,
2670
+ "name": "Staging vs Production Config Diff",
2671
+ "description": "Diffs environment variable keys between staging and production and flags mismatches. Use this if staging and prod have ever quietly drifted apart until a deploy broke only in one of them.",
2672
+ "category": "devops",
2673
+ "tags": [
2674
+ "config",
2675
+ "environments",
2676
+ "drift"
2677
+ ],
2678
+ "schedule": "0 8 * * 1",
2679
+ "timezone": "UTC",
2680
+ "runner": "shell",
2681
+ "modes": [
2682
+ "script"
2683
+ ],
2684
+ "compatible_agents": [
2685
+ "generic",
2686
+ "claude",
2687
+ "codex"
2688
+ ],
2689
+ "path": "jobs/devops/staging-prod-config-diff.yaml"
2690
+ },
2691
+ {
2692
+ "id": "stale-deal-nudge",
2693
+ "version": 1,
2694
+ "name": "Stale Deal Nudge",
2695
+ "description": "Finds open pipeline deals nobody's touched in a while. Use this if deals have ever quietly died in \"in progress\" because follow-up only happens when someone remembers.",
2696
+ "category": "sales",
2697
+ "tags": [
2698
+ "sales",
2699
+ "pipeline",
2700
+ "crm"
2701
+ ],
2702
+ "schedule": "0 8 * * 1-5",
2703
+ "timezone": "UTC",
2704
+ "runner": "hybrid",
2705
+ "modes": [
2706
+ "script",
2707
+ "agent-prompt"
2708
+ ],
2709
+ "compatible_agents": [
2710
+ "claude",
2711
+ "codex",
2712
+ "hermes",
2713
+ "openclaw",
2714
+ "generic"
2715
+ ],
2716
+ "path": "jobs/sales/stale-deal-nudge.yaml"
2717
+ },
1612
2718
  {
1613
2719
  "id": "stale-dependency-pr-nudge",
1614
2720
  "version": 1,
@@ -1803,6 +2909,104 @@
1803
2909
  ],
1804
2910
  "path": "jobs/devops/terraform-drift-check.yaml"
1805
2911
  },
2912
+ {
2913
+ "id": "ticket-backlog-aging-check",
2914
+ "version": 1,
2915
+ "name": "Support Ticket Backlog Aging Check",
2916
+ "description": "Checks how many open support tickets have sat unanswered past your SLA window. Use this if tickets have ever quietly aged past their SLA because the backlog view wasn't checked that day.",
2917
+ "category": "support",
2918
+ "tags": [
2919
+ "support",
2920
+ "sla",
2921
+ "tickets"
2922
+ ],
2923
+ "schedule": "0 */4 * * *",
2924
+ "timezone": "UTC",
2925
+ "runner": "shell",
2926
+ "modes": [
2927
+ "script"
2928
+ ],
2929
+ "compatible_agents": [
2930
+ "generic",
2931
+ "claude",
2932
+ "codex"
2933
+ ],
2934
+ "path": "jobs/support/ticket-backlog-aging-check.yaml"
2935
+ },
2936
+ {
2937
+ "id": "timezone-meeting-conflict-check",
2938
+ "version": 1,
2939
+ "name": "Timezone Meeting Conflict Check",
2940
+ "description": "Checks tomorrow's meetings against a remote teammate's working hours and flags any that fall outside them. Use this if a meeting has ever gotten scheduled at 11pm for someone across the world without anyone realizing.",
2941
+ "category": "productivity",
2942
+ "tags": [
2943
+ "calendar",
2944
+ "timezone",
2945
+ "meetings"
2946
+ ],
2947
+ "schedule": "0 16 * * *",
2948
+ "timezone": "America/Los_Angeles",
2949
+ "runner": "agent-prompt",
2950
+ "modes": [
2951
+ "agent-prompt"
2952
+ ],
2953
+ "compatible_agents": [
2954
+ "claude",
2955
+ "codex",
2956
+ "hermes",
2957
+ "openclaw",
2958
+ "generic"
2959
+ ],
2960
+ "path": "jobs/productivity/timezone-meeting-conflict-check.yaml"
2961
+ },
2962
+ {
2963
+ "id": "tls-cipher-weak-check",
2964
+ "version": 1,
2965
+ "name": "Weak TLS Cipher/Protocol Check",
2966
+ "description": "Checks a host for weak TLS protocol versions or ciphers still enabled. Use this if a legacy protocol has ever stayed enabled for \"just in case\" long after every client that needed it was gone.",
2967
+ "category": "security",
2968
+ "tags": [
2969
+ "security",
2970
+ "tls",
2971
+ "ciphers"
2972
+ ],
2973
+ "schedule": "0 6 * * 1",
2974
+ "timezone": "UTC",
2975
+ "runner": "shell",
2976
+ "modes": [
2977
+ "script"
2978
+ ],
2979
+ "compatible_agents": [
2980
+ "generic",
2981
+ "claude",
2982
+ "codex"
2983
+ ],
2984
+ "path": "jobs/security/tls-cipher-weak-check.yaml"
2985
+ },
2986
+ {
2987
+ "id": "trademark-renewal-reminder",
2988
+ "version": 1,
2989
+ "name": "Trademark Renewal Reminder",
2990
+ "description": "Warns you before a trademark registration's renewal deadline. Use this if you've ever let a trademark lapse simply because the renewal date wasn't on anyone's calendar.",
2991
+ "category": "legal",
2992
+ "tags": [
2993
+ "legal",
2994
+ "trademark",
2995
+ "ip"
2996
+ ],
2997
+ "schedule": "0 9 1 * *",
2998
+ "timezone": "UTC",
2999
+ "runner": "shell",
3000
+ "modes": [
3001
+ "script"
3002
+ ],
3003
+ "compatible_agents": [
3004
+ "generic",
3005
+ "claude",
3006
+ "codex"
3007
+ ],
3008
+ "path": "jobs/legal/trademark-renewal-reminder.yaml"
3009
+ },
1806
3010
  {
1807
3011
  "id": "travel-insurance-expiry-check",
1808
3012
  "version": 1,
@@ -1878,6 +3082,54 @@
1878
3082
  ],
1879
3083
  "path": "jobs/devops/uptime-ping-check.yaml"
1880
3084
  },
3085
+ {
3086
+ "id": "vehicle-maintenance-due-check",
3087
+ "version": 1,
3088
+ "name": "Fleet Vehicle Maintenance Due Check",
3089
+ "description": "Flags fleet vehicles due for scheduled maintenance by date or mileage. Use this if a fleet vehicle has ever broken down on a job because its service interval quietly passed.",
3090
+ "category": "fleet",
3091
+ "tags": [
3092
+ "fleet",
3093
+ "vehicles",
3094
+ "maintenance"
3095
+ ],
3096
+ "schedule": "0 7 * * 1",
3097
+ "timezone": "UTC",
3098
+ "runner": "shell",
3099
+ "modes": [
3100
+ "script"
3101
+ ],
3102
+ "compatible_agents": [
3103
+ "generic",
3104
+ "claude",
3105
+ "codex"
3106
+ ],
3107
+ "path": "jobs/fleet/vehicle-maintenance-due-check.yaml"
3108
+ },
3109
+ {
3110
+ "id": "vendor-payment-deadline-reminder",
3111
+ "version": 1,
3112
+ "name": "Event Vendor Payment Deadline Reminder",
3113
+ "description": "Warns you before a vendor deposit or balance payment for an event is due. Use this if a vendor has ever threatened to cancel because a payment deadline slipped past unnoticed.",
3114
+ "category": "events",
3115
+ "tags": [
3116
+ "events",
3117
+ "vendors",
3118
+ "payments"
3119
+ ],
3120
+ "schedule": "0 9 * * *",
3121
+ "timezone": "UTC",
3122
+ "runner": "shell",
3123
+ "modes": [
3124
+ "script"
3125
+ ],
3126
+ "compatible_agents": [
3127
+ "generic",
3128
+ "claude",
3129
+ "codex"
3130
+ ],
3131
+ "path": "jobs/events/vendor-payment-deadline-reminder.yaml"
3132
+ },
1881
3133
  {
1882
3134
  "id": "visa-expiry-check",
1883
3135
  "version": 1,
@@ -1902,6 +3154,54 @@
1902
3154
  ],
1903
3155
  "path": "jobs/travel/visa-expiry-check.yaml"
1904
3156
  },
3157
+ {
3158
+ "id": "waf-rule-change-watch",
3159
+ "version": 1,
3160
+ "name": "WAF Rule Change Watch",
3161
+ "description": "Diffs your current WAF rules against a saved baseline and flags drift. Use this if a WAF rule has ever been loosened \"just for testing\" and never put back.",
3162
+ "category": "security",
3163
+ "tags": [
3164
+ "security",
3165
+ "waf",
3166
+ "drift"
3167
+ ],
3168
+ "schedule": "0 6 * * *",
3169
+ "timezone": "UTC",
3170
+ "runner": "shell",
3171
+ "modes": [
3172
+ "script"
3173
+ ],
3174
+ "compatible_agents": [
3175
+ "generic",
3176
+ "claude",
3177
+ "codex"
3178
+ ],
3179
+ "path": "jobs/security/waf-rule-change-watch.yaml"
3180
+ },
3181
+ {
3182
+ "id": "warranty-expiry-reminder",
3183
+ "version": 1,
3184
+ "name": "Warranty Expiry Reminder",
3185
+ "description": "Warns you before an appliance or product warranty expires. Use this if you've ever discovered a warranty lapsed the week before whatever it covered broke.",
3186
+ "category": "home",
3187
+ "tags": [
3188
+ "home",
3189
+ "warranty",
3190
+ "reminder"
3191
+ ],
3192
+ "schedule": "0 9 1 * *",
3193
+ "timezone": "America/Los_Angeles",
3194
+ "runner": "shell",
3195
+ "modes": [
3196
+ "script"
3197
+ ],
3198
+ "compatible_agents": [
3199
+ "generic",
3200
+ "claude",
3201
+ "codex"
3202
+ ],
3203
+ "path": "jobs/home/warranty-expiry-reminder.yaml"
3204
+ },
1905
3205
  {
1906
3206
  "id": "water-intake-reminder",
1907
3207
  "version": 1,