@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.
- package/README.md +41 -40
- package/catalog.json +1955 -58
- package/jobs/agriculture/field-soil-test-due-reminder.yaml +35 -0
- package/jobs/agriculture/grain-storage-temperature-check.yaml +34 -0
- package/jobs/automotive/fleet-inspection-expiry-check.yaml +35 -0
- package/jobs/automotive/warranty-claim-deadline-check.yaml +35 -0
- package/jobs/childcare/allergy-action-plan-expiry-check.yaml +34 -0
- package/jobs/childcare/classroom-supply-low-stock-check.yaml +28 -0
- package/jobs/construction/crew-safety-cert-expiry-check.yaml +35 -0
- package/jobs/construction/material-delivery-delay-check.yaml +32 -0
- package/jobs/creator/affiliate-link-expiry-check.yaml +35 -0
- package/jobs/creator/brand-deal-payment-followup-check.yaml +32 -0
- package/jobs/crypto/nft-floor-price-watch.yaml +37 -0
- package/jobs/crypto/stablecoin-peg-deviation-watch.yaml +33 -0
- package/jobs/ecommerce/coupon-code-expiry-check.yaml +36 -0
- package/jobs/ecommerce/shipping-delay-check.yaml +31 -0
- package/jobs/education/overdue-library-materials-check.yaml +34 -0
- package/jobs/education/tuition-payment-plan-delinquency-check.yaml +35 -0
- package/jobs/events/post-event-survey-response-rate-watch.yaml +39 -0
- package/jobs/events/speaker-confirmation-deadline-check.yaml +35 -0
- package/jobs/fitness/class-waitlist-overflow-check.yaml +31 -0
- package/jobs/fitness/locker-rental-expiry-check.yaml +35 -0
- package/jobs/fleet/fleet-insurance-expiry-check.yaml +34 -0
- package/jobs/fleet/vehicle-idle-time-check.yaml +31 -0
- package/jobs/gaming/game-server-disk-space-check.yaml +34 -0
- package/jobs/gaming/player-contract-renewal-check.yaml +35 -0
- package/jobs/government/public-comment-period-closing-check.yaml +35 -0
- package/jobs/government/public-records-retention-purge-check.yaml +32 -0
- package/jobs/growth/onboarding-completion-stall-check.yaml +38 -0
- package/jobs/growth/seat-utilization-upsell-check.yaml +34 -0
- package/jobs/healthcare/medical-equipment-calibration-check.yaml +35 -0
- package/jobs/healthcare/referral-pending-followup-check.yaml +36 -0
- package/jobs/hiring/job-posting-expiry-check.yaml +41 -0
- package/jobs/hiring/reference-check-overdue-reminder.yaml +36 -0
- package/jobs/home/gutter-cleaning-reminder.yaml +30 -0
- package/jobs/home/utility-bill-anomaly-check.yaml +36 -0
- package/jobs/hospitality/housekeeping-turnover-time-check.yaml +41 -0
- package/jobs/hospitality/lost-and-found-item-aging-check.yaml +36 -0
- package/jobs/hr/i9-reverification-deadline-check.yaml +36 -0
- package/jobs/hr/probation-period-review-reminder.yaml +36 -0
- package/jobs/insurance/beneficiary-designation-review-reminder.yaml +35 -0
- package/jobs/insurance/endorsement-request-followup-check.yaml +37 -0
- package/jobs/inventory/purchase-order-receiving-delay-check.yaml +33 -0
- package/jobs/inventory/supplier-lead-time-drift-check.yaml +34 -0
- package/jobs/investing/bond-cd-maturity-reminder.yaml +31 -0
- package/jobs/investing/dca-contribution-reminder.yaml +33 -0
- package/jobs/learning/practice-streak-check.yaml +33 -0
- package/jobs/learning/webinar-attendance-reminder.yaml +32 -0
- package/jobs/legal/business-license-renewal-check.yaml +37 -0
- package/jobs/legal/patent-maintenance-fee-reminder.yaml +35 -0
- package/jobs/logistics/driver-hos-compliance-check.yaml +38 -0
- package/jobs/logistics/port-congestion-watch.yaml +34 -0
- package/jobs/manufacturing/energy-consumption-spike-check.yaml +37 -0
- package/jobs/manufacturing/equipment-calibration-due-check.yaml +32 -0
- package/jobs/marketing/broken-campaign-link-check.yaml +31 -0
- package/jobs/marketing/newsletter-unsubscribe-spike-check.yaml +37 -0
- package/jobs/nonprofit/donation-acknowledgment-lag-check.yaml +32 -0
- package/jobs/nonprofit/event-rsvp-shortfall-check.yaml +40 -0
- package/jobs/podcast/rss-feed-health-check.yaml +25 -0
- package/jobs/podcast/transcript-publish-lag-check.yaml +31 -0
- package/jobs/realestate/hoa-fee-collection-check.yaml +35 -0
- package/jobs/realestate/insurance-policy-renewal-reminder.yaml +31 -0
- package/jobs/restaurant/supplier-price-increase-watch.yaml +36 -0
- package/jobs/restaurant/walk-in-cooler-temp-log-check.yaml +31 -0
- package/jobs/retail/loyalty-points-expiry-reminder.yaml +31 -0
- package/jobs/retail/markdown-aging-inventory-check.yaml +33 -0
- package/jobs/sales/proposal-followup-nudge.yaml +31 -0
- package/jobs/sales/quote-expiry-reminder.yaml +24 -0
- package/jobs/support/knowledge-base-article-staleness-check.yaml +39 -0
- package/jobs/support/macro-usage-staleness-check.yaml +33 -0
- package/jobs/team/expense-report-deadline-reminder.yaml +28 -0
- package/jobs/team/new-hire-onboarding-task-check.yaml +32 -0
- package/jobs/travel/flight-layover-buffer-check.yaml +35 -0
- package/jobs/travel/hotel-cancellation-deadline-reminder.yaml +32 -0
- package/jobs/veterinary/lab-result-turnaround-check.yaml +35 -0
- package/jobs/veterinary/medication-inventory-expiry-check.yaml +31 -0
- package/jobs/warehousing/pallet-putaway-delay-check.yaml +35 -0
- package/jobs/warehousing/returns-processing-backlog-check.yaml +33 -0
- package/package.json +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: field-soil-test-due-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Field Soil Test Due Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Checks each field's last soil test date against a retest interval and
|
|
6
|
+
flags any field that's overdue. Use this if you've ever applied
|
|
7
|
+
fertilizer off a soil test that was two years stale because nobody was
|
|
8
|
+
tracking when each field was last sampled.
|
|
9
|
+
category: agriculture
|
|
10
|
+
tags: [agriculture, soil, testing, fields]
|
|
11
|
+
schedule: "0 7 1 * *"
|
|
12
|
+
timezone: "America/Chicago"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v interval="{{retest_interval_days}}" -v today="$today" '
|
|
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_ts; close(cmd);
|
|
21
|
+
days_since = (today - last_ts) / 86400;
|
|
22
|
+
if (days_since > interval) {
|
|
23
|
+
printf "OVERDUE: %s — last tested %s (%d days ago)\n", $1, $2, days_since;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{fields_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
fields_csv_path:
|
|
29
|
+
default: "./fields.csv"
|
|
30
|
+
description: "Path to a CSV with columns: field_name,last_soil_test_date (YYYY-MM-DD)."
|
|
31
|
+
retest_interval_days:
|
|
32
|
+
default: 730
|
|
33
|
+
description: Days allowed between soil tests before a field counts as overdue (default ~2 years).
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Keep fields.csv updated whenever a new soil sample comes back from the lab — one row per field.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: grain-storage-temperature-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Grain Storage Temperature Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks logged grain bin temperature and moisture readings against safe
|
|
6
|
+
storage thresholds and flags any bin trending toward spoilage. Use this
|
|
7
|
+
if you've ever caught hot spots or mold in stored grain only after the
|
|
8
|
+
smell gave it away.
|
|
9
|
+
category: agriculture
|
|
10
|
+
tags: [agriculture, grain, storage, spoilage]
|
|
11
|
+
schedule: "0 6 * * *"
|
|
12
|
+
timezone: "America/Chicago"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v maxtemp="{{max_temp_f}}" -v maxmoist="{{max_moisture_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
if ($2+0 > maxtemp+0 || $3+0 > maxmoist+0) {
|
|
19
|
+
printf "ALERT: bin %s — %.1f°F, %.1f%% moisture (limits %s°F / %s%%)\n", $1, $2, $3, maxtemp, maxmoist;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
' "{{bin_readings_csv_path}}"
|
|
23
|
+
variables:
|
|
24
|
+
bin_readings_csv_path:
|
|
25
|
+
default: "./grain-bin-readings.csv"
|
|
26
|
+
description: "Path to a CSV with columns: bin_id,temperature_f,moisture_pct."
|
|
27
|
+
max_temp_f:
|
|
28
|
+
default: 70
|
|
29
|
+
description: Temperature (F) above which a bin is flagged as a spoilage risk.
|
|
30
|
+
max_moisture_pct:
|
|
31
|
+
default: 15
|
|
32
|
+
description: Moisture percentage above which a bin is flagged as a spoilage risk.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Reads whatever your bin sensor system exports to CSV — point bin_readings_csv_path at that export. Safe thresholds vary by grain type; adjust the defaults accordingly.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: fleet-inspection-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Fleet Inspection Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks each fleet vehicle's state inspection or emissions sticker expiry
|
|
6
|
+
date and flags anything expiring soon. Use this if a shop or fleet
|
|
7
|
+
vehicle has ever gotten pulled over — or failed a customer handoff —
|
|
8
|
+
because its inspection quietly lapsed.
|
|
9
|
+
category: automotive
|
|
10
|
+
tags: [automotive, fleet, inspection, compliance]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v warn="{{warn_days}}" -v today="$today" '
|
|
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 exp_ts; close(cmd);
|
|
21
|
+
days_left = (exp_ts - today) / 86400;
|
|
22
|
+
if (days_left <= warn) {
|
|
23
|
+
printf "WARNING: vehicle %s — inspection expires %s (%d days left)\n", $1, $2, days_left;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{fleet_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
fleet_csv_path:
|
|
29
|
+
default: "./fleet-inspections.csv"
|
|
30
|
+
description: "Path to a CSV with columns: vehicle_id,inspection_expiry_date (YYYY-MM-DD)."
|
|
31
|
+
warn_days:
|
|
32
|
+
default: 21
|
|
33
|
+
description: Days before expiry to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Update fleet-inspections.csv whenever a vehicle is re-inspected — one row per vehicle in the fleet.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: warranty-claim-deadline-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Warranty Claim Deadline Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks open warranty claims against the manufacturer's submission
|
|
6
|
+
deadline and flags any about to expire unfiled. Use this if a claim has
|
|
7
|
+
ever gone unpaid because it was submitted a day past the manufacturer's
|
|
8
|
+
filing window.
|
|
9
|
+
category: automotive
|
|
10
|
+
tags: [automotive, warranty, claims, deadline]
|
|
11
|
+
schedule: "0 8 * * 1-5"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" -v warn="{{warn_days_before}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 == "open" {
|
|
19
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline deadline_epoch; close(cmd);
|
|
21
|
+
days_left = (deadline_epoch - today) / 86400;
|
|
22
|
+
if (days_left <= warn) {
|
|
23
|
+
printf "DEADLINE: claim %s for RO %s — due %s (%d days left)\n", $1, $2, $3, days_left;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{warranty_claims_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
warranty_claims_csv_path:
|
|
29
|
+
default: "./warranty-claims.csv"
|
|
30
|
+
description: "Path to a CSV with columns: claim_id,ro_number,filing_deadline (YYYY-MM-DD),status (open/submitted)."
|
|
31
|
+
warn_days_before:
|
|
32
|
+
default: 5
|
|
33
|
+
description: Days before the filing deadline to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Filing deadlines vary by manufacturer — keep warranty-claims.csv current from your DMS/warranty system export.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: allergy-action-plan-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Allergy Action Plan Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks each child's allergy action plan against its annual renewal date
|
|
6
|
+
and warns before it lapses. Use this if a plan has ever gone stale
|
|
7
|
+
without anyone noticing until an incident made it obvious.
|
|
8
|
+
category: childcare
|
|
9
|
+
tags: [childcare, allergy, health, compliance]
|
|
10
|
+
schedule: "0 8 * * 1"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
awk -F',' -v days="{{warn_days_before}}" '
|
|
15
|
+
NR==1 {next}
|
|
16
|
+
{
|
|
17
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
18
|
+
cmd | getline expiry_epoch; close(cmd);
|
|
19
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
20
|
+
diff_days = (expiry_epoch - now_epoch) / 86400;
|
|
21
|
+
if (diff_days <= days) {
|
|
22
|
+
printf "EXPIRING: %s — allergy action plan expires %s (%d days)\n", $1, $2, diff_days;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{allergy_plans_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
allergy_plans_csv_path:
|
|
28
|
+
default: "./allergy-action-plans.csv"
|
|
29
|
+
description: "Path to a CSV with columns: child_name,plan_expiry_date (YYYY-MM-DD)."
|
|
30
|
+
warn_days_before:
|
|
31
|
+
default: 30
|
|
32
|
+
description: How many days before a plan expires to start warning.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: A lapsed plan means staff no longer have a current, doctor-signed protocol on file — treat this as a same-week fix, not a queue item.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
id: classroom-supply-low-stock-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Classroom Supply Low Stock Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks consumable classroom supplies like diapers, wipes, and formula
|
|
6
|
+
against a reorder threshold per item and flags anything running low.
|
|
7
|
+
Use this if a classroom has ever run out of diapers or wipes mid-day
|
|
8
|
+
because nobody noticed the shelf was nearly empty.
|
|
9
|
+
category: childcare
|
|
10
|
+
tags: [childcare, supplies, inventory, classroom]
|
|
11
|
+
schedule: "0 7 * * 1,4"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
if ($2+0 <= $3+0) {
|
|
19
|
+
printf "LOW STOCK: %s — %d on hand (reorder at %d)\n", $1, $2, $3;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
' "{{supplies_csv_path}}"
|
|
23
|
+
variables:
|
|
24
|
+
supplies_csv_path:
|
|
25
|
+
default: "./classroom-supplies.csv"
|
|
26
|
+
description: "Path to a CSV with columns: item_name,current_stock,reorder_threshold."
|
|
27
|
+
compatible_agents: [generic, claude, codex]
|
|
28
|
+
notes: Update classroom-supplies.csv whenever a supply count is taken — one row per consumable item tracked.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: crew-safety-cert-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Crew Safety Certification Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks each crew member's safety certifications, like OSHA 10/30 or
|
|
6
|
+
forklift operator cards, against their expiry date and flags anyone
|
|
7
|
+
lapsing soon. Use this if a worker has ever been pulled off a site
|
|
8
|
+
because their safety card expired and nobody caught it beforehand.
|
|
9
|
+
category: construction
|
|
10
|
+
tags: [construction, safety, certification, crew]
|
|
11
|
+
schedule: "0 7 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v warn="{{warn_days}}" -v today="$today" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline exp_ts; close(cmd);
|
|
21
|
+
days_left = (exp_ts - today) / 86400;
|
|
22
|
+
if (days_left <= warn) {
|
|
23
|
+
printf "WARNING: %s — %s expires %s (%d days left)\n", $1, $2, $3, days_left;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{crew_certs_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
crew_certs_csv_path:
|
|
29
|
+
default: "./crew-safety-certs.csv"
|
|
30
|
+
description: "Path to a CSV with columns: worker_name,cert_name,expiry_date (YYYY-MM-DD)."
|
|
31
|
+
warn_days:
|
|
32
|
+
default: 30
|
|
33
|
+
description: Days before expiry to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Distinct from subcontractor-insurance-expiry-check — this tracks your own crew's individual safety cards, not a sub's company insurance policy.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: material-delivery-delay-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Material Delivery Delay Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks ordered construction materials against their expected delivery
|
|
6
|
+
date and flags anything overdue from the supplier. Use this if a crew
|
|
7
|
+
has ever stood idle on site because a material delivery was quietly
|
|
8
|
+
late and nobody chased it up.
|
|
9
|
+
category: construction
|
|
10
|
+
tags: [construction, materials, delivery, supplier]
|
|
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
|
+
$4 == "pending" {
|
|
19
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline expected_epoch; close(cmd);
|
|
21
|
+
if (today > expected_epoch) {
|
|
22
|
+
overdue_days = (today - expected_epoch) / 86400;
|
|
23
|
+
printf "OVERDUE: %s for job %s — expected %s (%d days late)\n", $1, $2, $3, overdue_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{material_orders_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
material_orders_csv_path:
|
|
29
|
+
default: "./material-orders.csv"
|
|
30
|
+
description: "Path to a CSV with columns: material_name,job_site,expected_delivery_date (YYYY-MM-DD),status (pending/delivered)."
|
|
31
|
+
compatible_agents: [generic, claude, codex]
|
|
32
|
+
notes: Follow up directly with the supplier once flagged overdue — this job only surfaces the gap, it doesn't contact anyone.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: affiliate-link-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Affiliate Link Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks affiliate links and discount codes in your published content
|
|
6
|
+
against their expiry date and flags anything expiring soon. Use this if
|
|
7
|
+
a viewer has ever hit a dead discount code in an old video description
|
|
8
|
+
because nobody remembered to pull or update it before it lapsed.
|
|
9
|
+
category: creator
|
|
10
|
+
tags: [creator, affiliate, links, monetization]
|
|
11
|
+
schedule: "0 9 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v warn="{{warn_days}}" -v today="$today" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline exp_ts; close(cmd);
|
|
21
|
+
days_left = (exp_ts - today) / 86400;
|
|
22
|
+
if (days_left <= warn) {
|
|
23
|
+
printf "WARNING: code %s (%s) expires %s (%d days left)\n", $1, $2, $3, days_left;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{affiliate_links_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
affiliate_links_csv_path:
|
|
29
|
+
default: "./affiliate-links.csv"
|
|
30
|
+
description: "Path to a CSV with columns: code_or_link,associated_post,expiry_date (YYYY-MM-DD)."
|
|
31
|
+
warn_days:
|
|
32
|
+
default: 14
|
|
33
|
+
description: Days before expiry to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Update affiliate-links.csv whenever you add a new sponsored link or code to a post — one row per tracked link.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: brand-deal-payment-followup-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Brand Deal Payment Followup Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks sponsor invoices against their agreed payment due date and flags
|
|
6
|
+
anything overdue and unpaid. Use this if a sponsor has ever gone quiet
|
|
7
|
+
on an invoice and you only noticed the payment never showed up weeks
|
|
8
|
+
later.
|
|
9
|
+
category: creator
|
|
10
|
+
tags: [creator, sponsorship, invoicing, payment]
|
|
11
|
+
schedule: "0 9 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v today="$today" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$4 == "unpaid" {
|
|
19
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline due_epoch; close(cmd);
|
|
21
|
+
if (today > due_epoch) {
|
|
22
|
+
overdue_days = (today - due_epoch) / 86400;
|
|
23
|
+
printf "OVERDUE: invoice %s to %s — due %s (%d days late)\n", $1, $2, $3, overdue_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{sponsor_invoices_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
sponsor_invoices_csv_path:
|
|
29
|
+
default: "./sponsor-invoices.csv"
|
|
30
|
+
description: "Path to a CSV with columns: invoice_id,sponsor_name,due_date (YYYY-MM-DD),status (unpaid/paid)."
|
|
31
|
+
compatible_agents: [generic, claude, codex]
|
|
32
|
+
notes: Send the actual follow-up email yourself once flagged — this job only surfaces which invoices are overdue.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: nft-floor-price-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: NFT Floor Price Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks an NFT collection's floor price via a public marketplace API and
|
|
6
|
+
alerts if it drops below a threshold. Use this if you've ever wanted a
|
|
7
|
+
heads-up when a collection you hold or track dips below a price level
|
|
8
|
+
you care about, without staring at a marketplace tab all day.
|
|
9
|
+
category: crypto
|
|
10
|
+
tags: [crypto, nft, floor-price, marketplace]
|
|
11
|
+
schedule: "0 * * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
floor=$(curl -s -H "accept: application/json" "{{floor_price_api_url}}" |
|
|
16
|
+
grep -o '"floor_price":[0-9.]*' | head -1 | cut -d: -f2);
|
|
17
|
+
if [ -n "$floor" ]; then
|
|
18
|
+
echo "Floor price for {{collection_slug}}: $floor {{price_unit}}";
|
|
19
|
+
awk -v floor="$floor" -v min="{{min_floor_price}}" 'BEGIN{if (floor+0 < min+0) print "LOW FLOOR ALERT: below " min " " "{{price_unit}}" " threshold"}';
|
|
20
|
+
else
|
|
21
|
+
echo "Could not fetch floor price — check API URL/collection slug.";
|
|
22
|
+
fi
|
|
23
|
+
variables:
|
|
24
|
+
floor_price_api_url:
|
|
25
|
+
default: "https://api.opensea.io/api/v2/collections/{{collection_slug}}/stats"
|
|
26
|
+
description: Marketplace API endpoint returning a floor_price field for the collection.
|
|
27
|
+
collection_slug:
|
|
28
|
+
default: "your-collection-slug"
|
|
29
|
+
description: Marketplace slug/identifier for the NFT collection to watch.
|
|
30
|
+
min_floor_price:
|
|
31
|
+
default: 0.1
|
|
32
|
+
description: Floor price threshold below which to alert.
|
|
33
|
+
price_unit:
|
|
34
|
+
default: "ETH"
|
|
35
|
+
description: Unit the floor price is denominated in, for display only.
|
|
36
|
+
compatible_agents: [generic, claude, codex]
|
|
37
|
+
notes: Read-only public API call — some marketplace APIs require a free API key in a header; add it via a wrapper script or an authenticated endpoint if needed.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: stablecoin-peg-deviation-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Stablecoin Peg Deviation Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks a stablecoin's market price against its $1 peg and alerts when it
|
|
6
|
+
drifts beyond your threshold. Use this if you've ever held a "stable"
|
|
7
|
+
balance through a depeg event because nothing was watching the price.
|
|
8
|
+
category: crypto
|
|
9
|
+
tags: [crypto, stablecoin, peg, price]
|
|
10
|
+
schedule: "*/30 * * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
price=$(curl -s "https://api.coingecko.com/api/v3/simple/price?ids={{coingecko_id}}&vs_currencies=usd" |
|
|
15
|
+
grep -o '"usd":[0-9.]*' | grep -o '[0-9.]*$');
|
|
16
|
+
if [ -n "$price" ]; then
|
|
17
|
+
awk -v p="$price" -v dev="{{deviation_pct}}" 'BEGIN{
|
|
18
|
+
diff = (p-1)*100; if (diff < 0) diff = -diff;
|
|
19
|
+
printf "Current price: $%.4f\n", p;
|
|
20
|
+
if (diff >= dev+0) printf "DEPEG ALERT: %.2f%% off $1 peg\n", diff;
|
|
21
|
+
}';
|
|
22
|
+
else
|
|
23
|
+
echo "Could not fetch price — check coingecko_id.";
|
|
24
|
+
fi
|
|
25
|
+
variables:
|
|
26
|
+
coingecko_id:
|
|
27
|
+
default: "usd-coin"
|
|
28
|
+
description: CoinGecko API id for the stablecoin to track (e.g. "usd-coin", "tether").
|
|
29
|
+
deviation_pct:
|
|
30
|
+
default: 1
|
|
31
|
+
description: Percentage deviation from the $1 peg that triggers an alert.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Uses CoinGecko's free public API — no key required, but rate limits apply if you increase the schedule frequency.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: coupon-code-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Coupon Code Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks active promo and coupon codes against their expiry date and flags
|
|
6
|
+
any expiring soon so you can decide to extend, replace, or let them
|
|
7
|
+
lapse on purpose. Use this if a customer has ever complained a code from
|
|
8
|
+
your last campaign stopped working and nobody on the team knew it had
|
|
9
|
+
quietly expired.
|
|
10
|
+
category: ecommerce
|
|
11
|
+
tags: [ecommerce, coupons, promotions, marketing]
|
|
12
|
+
schedule: "0 8 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%s);
|
|
17
|
+
awk -F',' -v warn="{{warn_days}}" -v today="$today" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
{
|
|
20
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
21
|
+
cmd | getline exp_ts; close(cmd);
|
|
22
|
+
days_left = (exp_ts - today) / 86400;
|
|
23
|
+
if (days_left <= warn) {
|
|
24
|
+
printf "WARNING: code %s expires %s (%d days left)\n", $1, $2, days_left;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
' "{{coupons_csv_path}}"
|
|
28
|
+
variables:
|
|
29
|
+
coupons_csv_path:
|
|
30
|
+
default: "./coupons.csv"
|
|
31
|
+
description: "Path to a CSV with columns: coupon_code,expiry_date (YYYY-MM-DD)."
|
|
32
|
+
warn_days:
|
|
33
|
+
default: 7
|
|
34
|
+
description: Days before expiry to start warning.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Update coupons.csv whenever a new promo code is created or an existing one is deactivated — one row per active code.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: shipping-delay-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Shipping Delay Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks shipped orders against their expected delivery date and flags
|
|
6
|
+
anything running late. Use this if a customer has ever emailed asking
|
|
7
|
+
"where's my order" before you had any idea it was already late.
|
|
8
|
+
category: ecommerce
|
|
9
|
+
tags: [ecommerce, shipping, fulfillment, delivery]
|
|
10
|
+
schedule: "0 8 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
today=$(date +%s);
|
|
15
|
+
awk -F',' -v today="$today" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
$4 == "in_transit" {
|
|
18
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline expected_epoch; close(cmd);
|
|
20
|
+
if (today > expected_epoch) {
|
|
21
|
+
overdue_days = (today - expected_epoch) / 86400;
|
|
22
|
+
printf "LATE: order %s — expected %s (%d days late), tracking %s\n", $1, $3, overdue_days, $2;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{shipments_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
shipments_csv_path:
|
|
28
|
+
default: "./shipments.csv"
|
|
29
|
+
description: "Path to a CSV with columns: order_id,tracking_number,expected_delivery_date (YYYY-MM-DD),status (in_transit/delivered)."
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: Reads whatever your fulfillment platform exports to CSV — point shipments_csv_path at that export.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: overdue-library-materials-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Overdue Library Materials Check
|
|
4
|
+
description: >
|
|
5
|
+
Scans checked-out library items and flags anything past its due date by
|
|
6
|
+
more than a grace period. Use this if overdue textbooks or library books
|
|
7
|
+
have ever piled up unnoticed until inventory time.
|
|
8
|
+
category: education
|
|
9
|
+
tags: [education, library, overdue]
|
|
10
|
+
schedule: "0 8 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
awk -F',' -v graceDays="{{grace_days}}" '
|
|
15
|
+
NR==1 {next}
|
|
16
|
+
$3 == "no" {
|
|
17
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
18
|
+
cmd | getline due_epoch; close(cmd);
|
|
19
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
20
|
+
diff_days = (now_epoch - due_epoch) / 86400;
|
|
21
|
+
if (diff_days >= graceDays) {
|
|
22
|
+
printf "OVERDUE: %s — due %s (%d days overdue)\n", $1, $2, diff_days;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{checkouts_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
checkouts_csv_path:
|
|
28
|
+
default: "./library-checkouts.csv"
|
|
29
|
+
description: "Path to a CSV with columns: item_title,due_date (YYYY-MM-DD),returned (yes/no)."
|
|
30
|
+
grace_days:
|
|
31
|
+
default: 3
|
|
32
|
+
description: Days past the due date before an item is flagged as overdue.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Update the returned column as soon as items come back, or every returned item will keep showing up as overdue.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: tuition-payment-plan-delinquency-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Tuition Payment Plan Delinquency Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks tuition installment plans against their due dates and flags
|
|
6
|
+
accounts that have missed a payment. Use this if a family has ever
|
|
7
|
+
fallen behind on a payment plan for weeks before anyone in the office
|
|
8
|
+
noticed and followed up.
|
|
9
|
+
category: education
|
|
10
|
+
tags: [education, tuition, payments, billing]
|
|
11
|
+
schedule: "0 8 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v grace="{{grace_days}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
$4 == "no" {
|
|
18
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline due_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
diff_days = (now_epoch - due_epoch) / 86400;
|
|
22
|
+
if (diff_days >= grace) {
|
|
23
|
+
printf "DELINQUENT: %s — installment $%s due %s (%d days overdue)\n", $1, $2, $3, diff_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{payment_plans_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
payment_plans_csv_path:
|
|
29
|
+
default: "./tuition-payment-plans.csv"
|
|
30
|
+
description: "Path to a CSV with columns: student_name,installment_amount,due_date (YYYY-MM-DD),paid (yes/no)."
|
|
31
|
+
grace_days:
|
|
32
|
+
default: 5
|
|
33
|
+
description: Days past the due date before an unpaid installment is flagged as delinquent.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Mark the paid column as soon as a payment clears, or a settled installment will keep showing up as delinquent.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: post-event-survey-response-rate-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Post-Event Survey Response Rate Watch
|
|
4
|
+
description: >
|
|
5
|
+
Compares how many attendees were sent a post-event survey against how
|
|
6
|
+
many actually responded, and flags events with a weak response rate.
|
|
7
|
+
Use this if you've ever sent a feedback survey after an event and had
|
|
8
|
+
no idea whether the response rate was normal or a sign nobody cared to
|
|
9
|
+
reply.
|
|
10
|
+
category: events
|
|
11
|
+
tags: [events, survey, feedback, response-rate]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v min_pct="{{min_response_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{
|
|
19
|
+
sent[$1] += 1;
|
|
20
|
+
if ($3 == "yes") responded[$1] += 1;
|
|
21
|
+
}
|
|
22
|
+
END {
|
|
23
|
+
for (event in sent) {
|
|
24
|
+
pct = (responded[event] / sent[event]) * 100;
|
|
25
|
+
if (pct < min_pct) {
|
|
26
|
+
printf "LOW RESPONSE RATE: %s — %d of %d responded (%.0f%%)\n", event, responded[event], sent[event], pct;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
' "{{survey_sends_csv_path}}"
|
|
31
|
+
variables:
|
|
32
|
+
survey_sends_csv_path:
|
|
33
|
+
default: "./event-survey-sends.csv"
|
|
34
|
+
description: "Path to a CSV with columns: event_name,attendee_email,responded (yes/no)."
|
|
35
|
+
min_response_pct:
|
|
36
|
+
default: 25
|
|
37
|
+
description: Minimum survey response percentage before an event is flagged as low-response.
|
|
38
|
+
compatible_agents: [generic, claude, codex]
|
|
39
|
+
notes: Update the responded column as replies come in — this only reads whatever the CSV currently reflects, it doesn't poll a survey tool directly.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: speaker-confirmation-deadline-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Speaker Confirmation Deadline Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks the speaker/presenter list against each person's confirm-by date
|
|
6
|
+
and flags anyone who hasn't confirmed yet. Use this if an event has ever
|
|
7
|
+
gotten close with a session slot still unconfirmed and nobody noticed
|
|
8
|
+
until the program had to go to print.
|
|
9
|
+
category: events
|
|
10
|
+
tags: [events, speakers, confirmation]
|
|
11
|
+
schedule: "0 9 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v days="{{warn_days_before}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
$3 == "no" {
|
|
18
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline due_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
diff_days = (due_epoch - now_epoch) / 86400;
|
|
22
|
+
if (diff_days <= days) {
|
|
23
|
+
printf "UNCONFIRMED: %s — confirm by %s (%d days)\n", $1, $2, diff_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{speakers_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
speakers_csv_path:
|
|
29
|
+
default: "./event-speakers.csv"
|
|
30
|
+
description: "Path to a CSV with columns: speaker_name,confirm_by_date (YYYY-MM-DD),confirmed (yes/no)."
|
|
31
|
+
warn_days_before:
|
|
32
|
+
default: 7
|
|
33
|
+
description: How many days before the confirm-by date to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Chase unconfirmed speakers early — an empty session slot is much harder to fill a few days out than a few weeks out.
|