@wonsukchoi/crondex 0.6.0 → 0.8.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 (75) hide show
  1. package/README.md +52 -128
  2. package/bin/crondex.js +85 -0
  3. package/catalog.json +1891 -153
  4. package/jobs/construction/change-order-approval-reminder.yaml +31 -0
  5. package/jobs/construction/inspection-deadline-reminder.yaml +31 -0
  6. package/jobs/construction/permit-expiry-check.yaml +31 -0
  7. package/jobs/content/hreflang-audit.yaml +25 -0
  8. package/jobs/content/image-alt-text-audit.yaml +21 -0
  9. package/jobs/content/page-speed-regression-watch.yaml +26 -0
  10. package/jobs/creator/content-calendar-gap-check.yaml +31 -0
  11. package/jobs/creator/crosspost-lag-check.yaml +35 -0
  12. package/jobs/creator/engagement-drop-watch.yaml +36 -0
  13. package/jobs/devops/cdn-cache-purge-reminder.yaml +27 -0
  14. package/jobs/devops/ci-build-time-regression-watch.yaml +35 -0
  15. package/jobs/devops/k8s-pod-restart-watch.yaml +26 -0
  16. package/jobs/devops/log-forwarding-health-check.yaml +32 -0
  17. package/jobs/devops/staging-prod-config-diff.yaml +32 -0
  18. package/jobs/education/assignment-grading-backlog-check.yaml +23 -0
  19. package/jobs/education/attendance-anomaly-check.yaml +33 -0
  20. package/jobs/education/report-card-deadline-reminder.yaml +27 -0
  21. package/jobs/events/event-budget-overrun-check.yaml +31 -0
  22. package/jobs/events/rsvp-followup-reminder.yaml +30 -0
  23. package/jobs/events/vendor-payment-deadline-reminder.yaml +31 -0
  24. package/jobs/finance/payroll-run-reminder.yaml +27 -0
  25. package/jobs/finance/recurring-payment-failure-check.yaml +23 -0
  26. package/jobs/fleet/fuel-card-anomaly-check.yaml +37 -0
  27. package/jobs/fleet/vehicle-maintenance-due-check.yaml +36 -0
  28. package/jobs/fleet/vehicle-registration-expiry-check.yaml +31 -0
  29. package/jobs/hiring/candidate-followup-nudge.yaml +23 -0
  30. package/jobs/hiring/offer-expiry-reminder.yaml +31 -0
  31. package/jobs/hiring/open-req-aging-check.yaml +31 -0
  32. package/jobs/home/warranty-expiry-reminder.yaml +31 -0
  33. package/jobs/hospitality/food-safety-temp-log-check.yaml +36 -0
  34. package/jobs/hospitality/health-inspection-due-reminder.yaml +32 -0
  35. package/jobs/hospitality/reservation-noshow-check.yaml +20 -0
  36. package/jobs/inventory/expiring-perishable-stock-check.yaml +24 -0
  37. package/jobs/inventory/inventory-count-discrepancy-check.yaml +38 -0
  38. package/jobs/inventory/low-stock-alert.yaml +20 -0
  39. package/jobs/investing/crypto-price-alert.yaml +33 -0
  40. package/jobs/investing/dividend-payment-tracker.yaml +34 -0
  41. package/jobs/investing/portfolio-rebalance-check.yaml +32 -0
  42. package/jobs/legal/contract-renewal-reminder.yaml +31 -0
  43. package/jobs/legal/nda-expiry-check.yaml +31 -0
  44. package/jobs/legal/trademark-renewal-reminder.yaml +30 -0
  45. package/jobs/logistics/customs-clearance-check.yaml +34 -0
  46. package/jobs/logistics/freight-rate-spike-watch.yaml +38 -0
  47. package/jobs/logistics/shipment-delay-watch.yaml +38 -0
  48. package/jobs/manufacturing/preventive-maintenance-due-check.yaml +31 -0
  49. package/jobs/manufacturing/production-line-downtime-watch.yaml +34 -0
  50. package/jobs/manufacturing/quality-defect-rate-check.yaml +20 -0
  51. package/jobs/marketing/ad-spend-pacing-check.yaml +37 -0
  52. package/jobs/marketing/email-deliverability-check.yaml +37 -0
  53. package/jobs/marketing/seo-rank-drop-watch.yaml +38 -0
  54. package/jobs/nonprofit/grant-deadline-reminder.yaml +44 -0
  55. package/jobs/nonprofit/lapsed-donor-check.yaml +26 -0
  56. package/jobs/nonprofit/volunteer-hours-shortfall-check.yaml +30 -0
  57. package/jobs/podcast/episode-publish-gap-check.yaml +29 -0
  58. package/jobs/podcast/guest-followup-reminder.yaml +31 -0
  59. package/jobs/podcast/sponsor-deliverable-tracker.yaml +31 -0
  60. package/jobs/productivity/timezone-meeting-conflict-check.yaml +31 -0
  61. package/jobs/realestate/lease-expiry-reminder.yaml +30 -0
  62. package/jobs/realestate/rent-payment-late-check.yaml +23 -0
  63. package/jobs/realestate/rental-vacancy-check.yaml +30 -0
  64. package/jobs/sales/lead-response-time-check.yaml +23 -0
  65. package/jobs/sales/quota-attainment-check.yaml +33 -0
  66. package/jobs/sales/stale-deal-nudge.yaml +35 -0
  67. package/jobs/security/2fa-enrollment-audit.yaml +24 -0
  68. package/jobs/security/dependabot-alert-digest.yaml +30 -0
  69. package/jobs/security/expiring-api-key-rotation.yaml +31 -0
  70. package/jobs/security/tls-cipher-weak-check.yaml +31 -0
  71. package/jobs/security/waf-rule-change-watch.yaml +38 -0
  72. package/jobs/support/csat-score-watch.yaml +32 -0
  73. package/jobs/support/sla-breach-warning.yaml +31 -0
  74. package/jobs/support/ticket-backlog-aging-check.yaml +30 -0
  75. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ id: recurring-payment-failure-check
2
+ version: 1
3
+ name: Recurring Payment Failure Check
4
+ description: >
5
+ Flags subscription charges that failed and haven't successfully retried
6
+ yet. Use this if a failed card has ever silently churned a customer
7
+ because nobody noticed the retry never succeeded.
8
+ category: finance
9
+ tags: [finance, billing, payments]
10
+ schedule: "0 */6 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ psql "{{database_url}}" -t -c "select customer_email, amount, failed_at, retry_count from subscription_charges where status = 'failed' and retry_count >= {{max_retries}};"
15
+ variables:
16
+ database_url:
17
+ default: "postgres://user:pass@host:5432/db"
18
+ description: Connection string for the billing database.
19
+ max_retries:
20
+ default: 2
21
+ description: Retry count at or above which a failed charge is flagged for manual follow-up.
22
+ compatible_agents: [generic, claude, codex]
23
+ notes: Assumes a `subscription_charges` table with `status`, `retry_count`, and `failed_at` columns — adjust the query to your billing provider's schema or webhook log.
@@ -0,0 +1,37 @@
1
+ id: fuel-card-anomaly-check
2
+ version: 1
3
+ name: Fuel Card Anomaly Check
4
+ description: >
5
+ Flags fuel card transactions that look unusual (too large, too frequent,
6
+ or outside normal hours/locations). Use this if fuel card misuse has
7
+ ever gone unnoticed until the monthly statement showed up.
8
+ category: fleet
9
+ tags: [fleet, fuel-card, fraud]
10
+ schedule: "0 7 * * *"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Review fuel card transactions from {{fuel_card_provider_hint}} for the
15
+ last 24 hours.
16
+ 1. Flag transactions over {{max_transaction_usd}} USD.
17
+ 2. Flag more than {{max_daily_transactions}} transactions on the same
18
+ card in one day.
19
+ 3. Flag transactions outside typical operating hours ({{operating_hours}})
20
+ if timestamps are available.
21
+ 4. Report flagged transactions with card holder, amount, time, and
22
+ location.
23
+ variables:
24
+ fuel_card_provider_hint:
25
+ default: "your fuel card provider (WEX, Fuelman, etc.)"
26
+ description: Name of the fuel card provider/portal.
27
+ max_transaction_usd:
28
+ default: 150
29
+ description: Single-transaction amount that triggers a flag.
30
+ max_daily_transactions:
31
+ default: 2
32
+ description: Transactions per card per day that triggers a flag.
33
+ operating_hours:
34
+ default: "06:00-19:00"
35
+ description: Normal operating hours; transactions outside this window are flagged.
36
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
37
+ notes: No generic script mode — fuel card provider APIs/exports vary and flagging patterns benefits from judgment, not just fixed rules.
@@ -0,0 +1,36 @@
1
+ id: vehicle-maintenance-due-check
2
+ version: 1
3
+ name: Fleet Vehicle Maintenance Due Check
4
+ description: >
5
+ Flags fleet vehicles due for scheduled maintenance by date or mileage.
6
+ Use this if a fleet vehicle has ever broken down on a job because its
7
+ service interval quietly passed.
8
+ category: fleet
9
+ tags: [fleet, vehicles, maintenance]
10
+ schedule: "0 7 * * 1"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ awk -F, -v today="$today" -v warn_days={{warn_days}} -v warn_miles={{warn_miles}} '
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
+ miles_left = $4 - $3;
21
+ if (days_left <= warn_days || miles_left <= warn_miles)
22
+ print "WARNING: vehicle " $1 " due in " days_left " days or " miles_left " miles (service due " $2 " / " $4 " mi)";
23
+ }
24
+ ' {{fleet_csv}}
25
+ variables:
26
+ fleet_csv:
27
+ default: "fleet-maintenance.csv"
28
+ description: "CSV with header row, columns: vehicle_id,next_service_date(YYYY-MM-DD),current_mileage,next_service_mileage."
29
+ warn_days:
30
+ default: 14
31
+ description: Days before the service date to start warning.
32
+ warn_miles:
33
+ default: 500
34
+ description: Miles remaining before the service mileage to start warning.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: Keep fleet-maintenance.csv updated from odometer readings/telematics exports before each run.
@@ -0,0 +1,31 @@
1
+ id: vehicle-registration-expiry-check
2
+ version: 1
3
+ name: Fleet Vehicle Registration Expiry Check
4
+ description: >
5
+ Warns you before a fleet vehicle's registration expires. Use this if a
6
+ vehicle has ever gotten pulled over, or failed a job site check-in,
7
+ because its registration quietly lapsed.
8
+ category: fleet
9
+ tags: [fleet, registration, compliance]
10
+ schedule: "0 8 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 exp_ts; close(cmd);
19
+ days_left = int((exp_ts - today) / 86400);
20
+ if (days_left <= warn) print "WARNING: vehicle " $1 " registration expires in " days_left " days (" $2 ")";
21
+ }
22
+ ' {{fleet_registration_csv}}
23
+ variables:
24
+ fleet_registration_csv:
25
+ default: "fleet-registration.csv"
26
+ description: "CSV with header row, columns: vehicle_id,registration_expiry(YYYY-MM-DD)."
27
+ warn_days:
28
+ default: 30
29
+ description: Days before expiry to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep fleet-registration.csv updated after each renewal — one row per vehicle.
@@ -0,0 +1,23 @@
1
+ id: candidate-followup-nudge
2
+ version: 1
3
+ name: Candidate Follow-up Nudge
4
+ description: >
5
+ Flags interviewed candidates who haven't heard back in a while. Use this
6
+ if candidates have ever gone quiet after a final interview simply
7
+ because nobody circled back with a decision.
8
+ category: hiring
9
+ tags: [hiring, recruiting, candidates]
10
+ schedule: "0 9 * * 1-5"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ psql "{{database_url}}" -t -c "select name, stage, last_interview_at from candidates where stage not in ('hired','rejected') and last_interview_at < now() - interval '{{stale_days}} days';"
15
+ variables:
16
+ database_url:
17
+ default: "postgres://user:pass@host:5432/db"
18
+ description: Connection string for the candidates/ATS database.
19
+ stale_days:
20
+ default: 7
21
+ description: Days since last interview before a candidate is flagged for follow-up.
22
+ compatible_agents: [generic, claude, codex]
23
+ notes: Assumes a `candidates` table with `stage` and `last_interview_at` columns — adjust the query to your ATS's schema or export.
@@ -0,0 +1,31 @@
1
+ id: offer-expiry-reminder
2
+ version: 1
3
+ name: Offer Expiry Reminder
4
+ description: >
5
+ Flags extended offers that are close to their response deadline with no
6
+ answer yet. Use this if an offer has ever quietly expired because
7
+ nobody followed up before the deadline passed.
8
+ category: hiring
9
+ tags: [hiring, offers, recruiting]
10
+ schedule: "0 9 * * 1-5"
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 && $3 == "pending" {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline exp_ts; close(cmd);
19
+ days_left = int((exp_ts - today) / 86400);
20
+ if (days_left <= warn && days_left >= 0) print "WARNING: offer to " $1 " expires in " days_left " days (" $2 "), no response yet";
21
+ }
22
+ ' {{offers_csv}}
23
+ variables:
24
+ offers_csv:
25
+ default: "offers.csv"
26
+ description: "CSV with header row, columns: candidate_name,expiry_date(YYYY-MM-DD),status(pending/accepted/declined)."
27
+ warn_days:
28
+ default: 2
29
+ description: Days before offer expiry to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep offers.csv updated as offers go out and candidates respond — one row per open offer.
@@ -0,0 +1,31 @@
1
+ id: open-req-aging-check
2
+ version: 1
3
+ name: Open Req Aging Check
4
+ description: >
5
+ Flags job requisitions that have been open too long without enough
6
+ candidates in the pipeline. Use this if a req has ever sat open for
7
+ months before anyone asked why it wasn't moving.
8
+ category: hiring
9
+ tags: [hiring, recruiting, requisitions]
10
+ schedule: "0 9 * * 1"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Review open job requisitions in {{ats_hint}}.
15
+ 1. For each req open more than {{stale_days}} days, note days open and
16
+ current candidate count by stage.
17
+ 2. Flag reqs with fewer than {{min_candidates}} active candidates as
18
+ needing sourcing attention.
19
+ 3. Report the list ranked by days open, oldest first.
20
+ variables:
21
+ ats_hint:
22
+ default: "your ATS (Greenhouse, Lever, Ashby)"
23
+ description: Name of the applicant tracking system in use.
24
+ stale_days:
25
+ default: 45
26
+ description: Days open before a req is flagged for review.
27
+ min_candidates:
28
+ default: 3
29
+ description: Minimum active candidates expected before a req is considered healthy.
30
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
31
+ notes: No generic script mode — ATS APIs vary widely and most need OAuth the agent may not have configured.
@@ -0,0 +1,31 @@
1
+ id: warranty-expiry-reminder
2
+ version: 1
3
+ name: Warranty Expiry Reminder
4
+ description: >
5
+ Warns you before an appliance or product warranty expires. Use this if
6
+ you've ever discovered a warranty lapsed the week before whatever it
7
+ covered broke.
8
+ category: home
9
+ tags: [home, warranty, reminder]
10
+ schedule: "0 9 1 * *"
11
+ timezone: "America/Los_Angeles"
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 exp_ts; close(cmd);
19
+ days_left = int((exp_ts - today) / 86400);
20
+ if (days_left <= warn) print "WARNING: warranty for \"" $1 "\" expires in " days_left " days (" $2 ")";
21
+ }
22
+ ' {{warranties_csv}}
23
+ variables:
24
+ warranties_csv:
25
+ default: "warranties.csv"
26
+ description: "CSV with header row, columns: item_name,expiry_date(YYYY-MM-DD)."
27
+ warn_days:
28
+ default: 30
29
+ description: Days before expiry to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep warranties.csv updated whenever you buy something worth tracking — add the receipt/warranty end date at purchase time.
@@ -0,0 +1,36 @@
1
+ id: food-safety-temp-log-check
2
+ version: 1
3
+ name: Food Safety Temperature Log Check
4
+ description: >
5
+ Checks that fridge/freezer temperature logs were actually recorded
6
+ today and flags any reading outside the safe range. Use this if a
7
+ temperature log has ever gone unfilled for a shift, or a unit drifted
8
+ out of range without anyone noticing until the food was already at risk.
9
+ category: hospitality
10
+ tags: [hospitality, food-safety, compliance]
11
+ schedule: "0 */4 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%Y-%m-%d);
16
+ last_entry=$(awk -F, -v today="$today" '$1 ~ today {last=$0} END {print last}' {{temp_log_csv}});
17
+ if [ -z "$last_entry" ]; then echo "WARNING: no temperature log entry today for {{unit_name}}"; exit 1; fi;
18
+ temp=$(echo "$last_entry" | cut -d, -f3);
19
+ if awk "BEGIN{exit !($temp > {{max_temp_f}} || $temp < {{min_temp_f}})}"; then
20
+ echo "WARNING: {{unit_name}} reading ${temp}F is out of range ({{min_temp_f}}-{{max_temp_f}}F): $last_entry"; exit 1;
21
+ else echo "OK: {{unit_name}} last reading ${temp}F, in range"; fi
22
+ variables:
23
+ unit_name:
24
+ default: "walk-in cooler"
25
+ description: Name of the unit being logged.
26
+ temp_log_csv:
27
+ default: "temp-log.csv"
28
+ description: "CSV with columns: date(YYYY-MM-DD HH:MM),unit,temp_f."
29
+ min_temp_f:
30
+ default: 33
31
+ description: Minimum safe temperature in Fahrenheit.
32
+ max_temp_f:
33
+ default: 40
34
+ description: Maximum safe temperature in Fahrenheit.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: Assumes manual or IoT-exported entries appended to temp-log.csv throughout the day — one job instance per unit tracked.
@@ -0,0 +1,32 @@
1
+ id: health-inspection-due-reminder
2
+ version: 1
3
+ name: Health Inspection Due Reminder
4
+ description: >
5
+ Warns you before a health department inspection is expected, based on
6
+ your jurisdiction's typical interval. Use this if an inspector has ever
7
+ shown up to a kitchen that wasn't ready because nobody was tracking when
8
+ the last one happened.
9
+ category: hospitality
10
+ tags: [hospitality, health-inspection, compliance]
11
+ schedule: "0 8 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ last_ts=$(date -d "{{last_inspection_date}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{last_inspection_date}}" +%s);
17
+ days_since=$(( (today - last_ts) / 86400 ));
18
+ days_left=$(( {{typical_interval_days}} - days_since ));
19
+ if [ "$days_left" -le "{{warn_days}}" ]; then echo "WARNING: next health inspection likely due within $days_left days (last was {{last_inspection_date}})"; exit 1;
20
+ else echo "OK: next inspection likely due in about $days_left days"; fi
21
+ variables:
22
+ last_inspection_date:
23
+ default: "2026-01-01"
24
+ description: Date of the last health inspection (YYYY-MM-DD).
25
+ typical_interval_days:
26
+ default: 180
27
+ description: Typical number of days between inspections in your jurisdiction.
28
+ warn_days:
29
+ default: 14
30
+ description: Days before the estimated next inspection to start warning.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: This is an estimate based on your jurisdiction's typical cadence, not an actual scheduled date — most health departments don't publish inspection dates in advance.
@@ -0,0 +1,20 @@
1
+ id: reservation-noshow-check
2
+ version: 1
3
+ name: Reservation No-show Check
4
+ description: >
5
+ Checks yesterday's no-show rate against your normal baseline and flags a
6
+ spike. Use this if a run of no-shows has ever quietly hurt revenue for
7
+ days before anyone connected the pattern.
8
+ category: hospitality
9
+ tags: [hospitality, reservations, noshow]
10
+ schedule: "0 8 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ psql "{{database_url}}" -t -c "select round(100.0 * sum(case when status = 'no_show' then 1 else 0 end) / count(*), 1) from reservations where reservation_date = current_date - interval '1 day';"
15
+ variables:
16
+ database_url:
17
+ default: "postgres://user:pass@host:5432/db"
18
+ description: Connection string for the reservations database.
19
+ compatible_agents: [generic, claude, codex]
20
+ notes: Assumes a `reservations` table with `status` and `reservation_date` columns — adjust the query for your reservation system's schema; compare the printed rate against your normal baseline manually.
@@ -0,0 +1,24 @@
1
+ id: expiring-perishable-stock-check
2
+ version: 1
3
+ name: Expiring Perishable Stock Check
4
+ description: >
5
+ Flags perishable inventory nearing its expiry date so it can be sold,
6
+ discounted, or used before it's wasted. Use this if stock has ever
7
+ expired on the shelf because nobody was tracking dates until it was too
8
+ late.
9
+ category: inventory
10
+ tags: [inventory, perishables, waste]
11
+ schedule: "0 6 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ psql "{{database_url}}" -t -c "select sku, quantity, expiry_date from inventory where expiry_date is not null and expiry_date <= current_date + interval '{{warn_days}} days' order by expiry_date;"
16
+ variables:
17
+ database_url:
18
+ default: "postgres://user:pass@host:5432/db"
19
+ description: Connection string for the inventory database.
20
+ warn_days:
21
+ default: 5
22
+ description: Days before expiry_date to start flagging stock.
23
+ compatible_agents: [generic, claude, codex]
24
+ notes: Assumes an `inventory` table with a nullable `expiry_date` column — adjust the query to your schema.
@@ -0,0 +1,38 @@
1
+ id: inventory-count-discrepancy-check
2
+ version: 1
3
+ name: Inventory Count Discrepancy Check
4
+ description: >
5
+ Compares a physical inventory count against system records and flags
6
+ mismatches worth investigating. Use this if shrinkage or data entry
7
+ errors have ever gone unnoticed until a full audit months later.
8
+ category: inventory
9
+ tags: [inventory, audit, discrepancy]
10
+ schedule: "0 9 1 * *"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Compare the physical count file at {{physical_count_file}} against
15
+ system inventory records (query {{database_url}} or the inventory
16
+ system).
17
+ 1. For each SKU, compute the difference between physical and system
18
+ quantity.
19
+ 2. Flag any SKU with a discrepancy of {{threshold_units}} units or more,
20
+ or {{threshold_pct}}% of system quantity, whichever is smaller.
21
+ 3. Report flagged SKUs ranked by discrepancy size, with a guess at
22
+ likely cause if the pattern suggests one (e.g. consistent
23
+ under-count of one category = possible shrinkage).
24
+ variables:
25
+ physical_count_file:
26
+ default: "physical-count.csv"
27
+ description: CSV export of the physical count, columns sku,quantity.
28
+ database_url:
29
+ default: "postgres://user:pass@host:5432/db"
30
+ description: Connection string for the system inventory database.
31
+ threshold_units:
32
+ default: 5
33
+ description: Absolute unit discrepancy that triggers a flag.
34
+ threshold_pct:
35
+ default: 10
36
+ description: Percent discrepancy that triggers a flag.
37
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
38
+ notes: No generic script mode — matching two data sources and judging what's a meaningful discrepancy needs an agent, not a fixed query.
@@ -0,0 +1,20 @@
1
+ id: low-stock-alert
2
+ version: 1
3
+ name: Low Stock Alert
4
+ description: >
5
+ Checks inventory levels against a reorder point and flags SKUs running
6
+ low. Use this if you've ever gone out of stock on a bestseller because
7
+ nobody was watching the count.
8
+ category: inventory
9
+ tags: [inventory, stock, ecommerce]
10
+ schedule: "0 7 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ psql "{{database_url}}" -t -c "select sku, quantity, reorder_point from inventory where quantity <= reorder_point;"
15
+ variables:
16
+ database_url:
17
+ default: "postgres://user:pass@host:5432/db"
18
+ description: Connection string for the inventory database.
19
+ compatible_agents: [generic, claude, codex]
20
+ notes: Assumes an `inventory` table with `sku`, `quantity`, and `reorder_point` columns — adjust the query to your schema.
@@ -0,0 +1,33 @@
1
+ id: crypto-price-alert
2
+ version: 1
3
+ name: Crypto Price Alert
4
+ description: >
5
+ Checks a crypto asset's price and alerts when it crosses a threshold you
6
+ set. Use this if you're waiting for a price target and don't want to
7
+ keep a tab open all day watching a chart.
8
+ category: investing
9
+ tags: [crypto, price, alert]
10
+ schedule: "*/15 * * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ price=$(curl -s "https://api.coingecko.com/api/v3/simple/price?ids={{coin_id}}&vs_currencies={{vs_currency}}" | grep -o '[0-9.]*' | head -n1);
15
+ if [ -z "$price" ]; then echo "ERROR: could not fetch price for {{coin_id}}"; exit 1; fi;
16
+ if awk "BEGIN{exit !($price {{comparison}} {{target_price}})}"; then
17
+ echo "ALERT: {{coin_id}} is $price {{vs_currency}} ({{comparison}} {{target_price}})";
18
+ else echo "OK: {{coin_id}} is $price {{vs_currency}}"; fi
19
+ variables:
20
+ coin_id:
21
+ default: "bitcoin"
22
+ description: CoinGecko coin id (e.g. bitcoin, ethereum).
23
+ vs_currency:
24
+ default: "usd"
25
+ description: Currency to price against.
26
+ target_price:
27
+ default: 50000
28
+ description: Threshold price to compare against.
29
+ comparison:
30
+ default: ">="
31
+ description: "Comparison operator for triggering the alert: <=, >=, <, or >."
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Uses the free CoinGecko public API, no key required; rate-limited so avoid scheduling much tighter than every few minutes.
@@ -0,0 +1,34 @@
1
+ id: dividend-payment-tracker
2
+ version: 1
3
+ name: Dividend Payment Tracker
4
+ description: >
5
+ Checks that an expected dividend payment actually landed by its
6
+ scheduled pay date. Use this if a dividend has ever quietly not shown up
7
+ and it took weeks to notice something was wrong with a holding or
8
+ broker.
9
+ category: investing
10
+ tags: [investing, dividends, income]
11
+ schedule: "0 9 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F, -v today="$today" '
17
+ NR>1 && $3 == "pending" {
18
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
19
+ cmd | getline pay_ts; close(cmd);
20
+ if (pay_ts < today) print "WARNING: " $1 " dividend was due " $2 " and is still marked pending";
21
+ }
22
+ ' {{dividends_csv}}
23
+ variables:
24
+ dividends_csv:
25
+ default: "dividends.csv"
26
+ description: "CSV with header row, columns: ticker,pay_date(YYYY-MM-DD),status(pending/received)."
27
+ warn_days:
28
+ default: 0
29
+ description: Unused placeholder kept for consistency with other date-check jobs; flags immediately once the pay date has passed.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: >
32
+ Update dividends.csv to "received" once a payment lands (check your
33
+ brokerage statement) — this job only flags entries still marked
34
+ "pending" past their pay date.
@@ -0,0 +1,32 @@
1
+ id: portfolio-rebalance-check
2
+ version: 1
3
+ name: Portfolio Rebalance Check
4
+ description: >
5
+ Compares your current asset allocation to your target and flags drift
6
+ worth rebalancing. Use this if your portfolio only gets rebalanced
7
+ whenever you happen to remember to look.
8
+ category: investing
9
+ tags: [investing, portfolio, rebalancing]
10
+ schedule: "0 9 1 * *"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Check current portfolio allocation against the target allocation below.
15
+ Target: {{target_allocation}}
16
+ 1. Pull current balances/allocation from {{brokerage_hint}} (or ask the
17
+ user for current values if no direct access).
18
+ 2. Compute drift per asset class vs. target.
19
+ 3. Flag any class drifted more than {{drift_threshold_pct}} percentage
20
+ points, and suggest the trade(s) to rebalance back.
21
+ variables:
22
+ target_allocation:
23
+ default: "60% stocks / 30% bonds / 10% cash"
24
+ description: Your target allocation across asset classes.
25
+ brokerage_hint:
26
+ default: "your brokerage account"
27
+ description: Where portfolio balances live.
28
+ drift_threshold_pct:
29
+ default: 5
30
+ description: Percentage-point drift from target that triggers a rebalance flag.
31
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
32
+ notes: No generic script mode — brokerage APIs vary widely and most require OAuth the agent may not have configured.
@@ -0,0 +1,31 @@
1
+ id: contract-renewal-reminder
2
+ version: 1
3
+ name: Contract Renewal Reminder
4
+ description: >
5
+ Warns you before a vendor or customer contract auto-renews or expires.
6
+ Use this if a contract has ever auto-renewed for another year because
7
+ nobody flagged the cancellation window in time.
8
+ category: legal
9
+ tags: [legal, contracts, renewal]
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 renew_ts; close(cmd);
19
+ days_left = int((renew_ts - today) / 86400);
20
+ if (days_left <= warn) print "WARNING: " $1 " renews/expires in " days_left " days (" $2 ")";
21
+ }
22
+ ' {{contracts_csv}}
23
+ variables:
24
+ contracts_csv:
25
+ default: "contracts.csv"
26
+ description: "CSV with header row, columns: name,renewal_date(YYYY-MM-DD)."
27
+ warn_days:
28
+ default: 30
29
+ description: Days before renewal/expiry to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep contracts.csv updated manually or export it from your contract management tool before each run.
@@ -0,0 +1,31 @@
1
+ id: nda-expiry-check
2
+ version: 1
3
+ name: NDA Expiry Check
4
+ description: >
5
+ Warns you before a signed NDA reaches its expiration or renewal date.
6
+ Use this if an NDA has ever lapsed mid-relationship and nobody noticed
7
+ the confidentiality coverage had run out.
8
+ category: legal
9
+ tags: [legal, nda, contracts]
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 exp_ts; close(cmd);
19
+ days_left = int((exp_ts - today) / 86400);
20
+ if (days_left <= warn) print "WARNING: NDA with \"" $1 "\" expires in " days_left " days (" $2 ")";
21
+ }
22
+ ' {{ndas_csv}}
23
+ variables:
24
+ ndas_csv:
25
+ default: "ndas.csv"
26
+ description: "CSV with header row, columns: counterparty,expiry_date(YYYY-MM-DD)."
27
+ warn_days:
28
+ default: 30
29
+ description: Days before expiry to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep ndas.csv updated whenever an NDA is signed — one row per counterparty/agreement.
@@ -0,0 +1,30 @@
1
+ id: trademark-renewal-reminder
2
+ version: 1
3
+ name: Trademark Renewal Reminder
4
+ description: >
5
+ Warns you before a trademark registration's renewal deadline. Use this
6
+ if you've ever let a trademark lapse simply because the renewal date
7
+ wasn't on anyone's calendar.
8
+ category: legal
9
+ tags: [legal, trademark, ip]
10
+ schedule: "0 9 1 * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ due_ts=$(date -d "{{renewal_date}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{renewal_date}}" +%s);
16
+ days_left=$(( (due_ts - today) / 86400 ));
17
+ if [ "$days_left" -le "{{warn_days}}" ]; then echo "WARNING: trademark {{mark_name}} renewal due in $days_left days ({{renewal_date}})"; exit 1;
18
+ else echo "OK: trademark {{mark_name}} renewal due in $days_left days"; fi
19
+ variables:
20
+ mark_name:
21
+ default: "your trademark"
22
+ description: Name/identifier of the trademark to track.
23
+ renewal_date:
24
+ default: "2027-01-01"
25
+ description: Renewal deadline date (YYYY-MM-DD).
26
+ warn_days:
27
+ default: 90
28
+ description: Days before deadline to start warning.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: Manual renewal_date input — update after each renewal cycle; run one copy per registered mark/jurisdiction.
@@ -0,0 +1,34 @@
1
+ id: customs-clearance-check
2
+ version: 1
3
+ name: Customs Clearance Check
4
+ description: >
5
+ Flags a shipment that's been sitting in customs longer than expected.
6
+ Use this if a shipment has ever been stuck at the border for weeks
7
+ before anyone thought to follow up with the broker.
8
+ category: logistics
9
+ tags: [logistics, customs, shipping]
10
+ schedule: "0 9 * * *"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Check the customs clearance status of shipment {{shipment_id}} via
15
+ {{tracking_source_hint}}.
16
+ 1. Determine how long it's been in a "customs hold" or equivalent
17
+ status.
18
+ 2. If it's been more than {{warn_days}} days, flag it and note any
19
+ stated reason for the hold (missing documents, duties owed,
20
+ inspection) if visible.
21
+ 3. Suggest the next action (contact broker, pay duties, provide
22
+ documents) based on the reason if known.
23
+ variables:
24
+ shipment_id:
25
+ default: "your-shipment-id"
26
+ description: Shipment/tracking identifier to check.
27
+ tracking_source_hint:
28
+ default: "carrier tracking page or customs broker portal"
29
+ description: Where to check customs status for this shipment.
30
+ warn_days:
31
+ default: 5
32
+ description: Days in customs hold before it's flagged.
33
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
34
+ notes: No generic script mode — customs status pages/APIs vary by carrier and broker, and reason codes need interpretation.