@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.
- package/README.md +52 -128
- package/bin/crondex.js +85 -0
- package/catalog.json +1891 -153
- package/jobs/construction/change-order-approval-reminder.yaml +31 -0
- package/jobs/construction/inspection-deadline-reminder.yaml +31 -0
- package/jobs/construction/permit-expiry-check.yaml +31 -0
- package/jobs/content/hreflang-audit.yaml +25 -0
- package/jobs/content/image-alt-text-audit.yaml +21 -0
- package/jobs/content/page-speed-regression-watch.yaml +26 -0
- package/jobs/creator/content-calendar-gap-check.yaml +31 -0
- package/jobs/creator/crosspost-lag-check.yaml +35 -0
- package/jobs/creator/engagement-drop-watch.yaml +36 -0
- package/jobs/devops/cdn-cache-purge-reminder.yaml +27 -0
- package/jobs/devops/ci-build-time-regression-watch.yaml +35 -0
- package/jobs/devops/k8s-pod-restart-watch.yaml +26 -0
- package/jobs/devops/log-forwarding-health-check.yaml +32 -0
- package/jobs/devops/staging-prod-config-diff.yaml +32 -0
- package/jobs/education/assignment-grading-backlog-check.yaml +23 -0
- package/jobs/education/attendance-anomaly-check.yaml +33 -0
- package/jobs/education/report-card-deadline-reminder.yaml +27 -0
- package/jobs/events/event-budget-overrun-check.yaml +31 -0
- package/jobs/events/rsvp-followup-reminder.yaml +30 -0
- package/jobs/events/vendor-payment-deadline-reminder.yaml +31 -0
- package/jobs/finance/payroll-run-reminder.yaml +27 -0
- package/jobs/finance/recurring-payment-failure-check.yaml +23 -0
- package/jobs/fleet/fuel-card-anomaly-check.yaml +37 -0
- package/jobs/fleet/vehicle-maintenance-due-check.yaml +36 -0
- package/jobs/fleet/vehicle-registration-expiry-check.yaml +31 -0
- package/jobs/hiring/candidate-followup-nudge.yaml +23 -0
- package/jobs/hiring/offer-expiry-reminder.yaml +31 -0
- package/jobs/hiring/open-req-aging-check.yaml +31 -0
- package/jobs/home/warranty-expiry-reminder.yaml +31 -0
- package/jobs/hospitality/food-safety-temp-log-check.yaml +36 -0
- package/jobs/hospitality/health-inspection-due-reminder.yaml +32 -0
- package/jobs/hospitality/reservation-noshow-check.yaml +20 -0
- package/jobs/inventory/expiring-perishable-stock-check.yaml +24 -0
- package/jobs/inventory/inventory-count-discrepancy-check.yaml +38 -0
- package/jobs/inventory/low-stock-alert.yaml +20 -0
- package/jobs/investing/crypto-price-alert.yaml +33 -0
- package/jobs/investing/dividend-payment-tracker.yaml +34 -0
- package/jobs/investing/portfolio-rebalance-check.yaml +32 -0
- package/jobs/legal/contract-renewal-reminder.yaml +31 -0
- package/jobs/legal/nda-expiry-check.yaml +31 -0
- package/jobs/legal/trademark-renewal-reminder.yaml +30 -0
- package/jobs/logistics/customs-clearance-check.yaml +34 -0
- package/jobs/logistics/freight-rate-spike-watch.yaml +38 -0
- package/jobs/logistics/shipment-delay-watch.yaml +38 -0
- package/jobs/manufacturing/preventive-maintenance-due-check.yaml +31 -0
- package/jobs/manufacturing/production-line-downtime-watch.yaml +34 -0
- package/jobs/manufacturing/quality-defect-rate-check.yaml +20 -0
- package/jobs/marketing/ad-spend-pacing-check.yaml +37 -0
- package/jobs/marketing/email-deliverability-check.yaml +37 -0
- package/jobs/marketing/seo-rank-drop-watch.yaml +38 -0
- package/jobs/nonprofit/grant-deadline-reminder.yaml +44 -0
- package/jobs/nonprofit/lapsed-donor-check.yaml +26 -0
- package/jobs/nonprofit/volunteer-hours-shortfall-check.yaml +30 -0
- package/jobs/podcast/episode-publish-gap-check.yaml +29 -0
- package/jobs/podcast/guest-followup-reminder.yaml +31 -0
- package/jobs/podcast/sponsor-deliverable-tracker.yaml +31 -0
- package/jobs/productivity/timezone-meeting-conflict-check.yaml +31 -0
- package/jobs/realestate/lease-expiry-reminder.yaml +30 -0
- package/jobs/realestate/rent-payment-late-check.yaml +23 -0
- package/jobs/realestate/rental-vacancy-check.yaml +30 -0
- package/jobs/sales/lead-response-time-check.yaml +23 -0
- package/jobs/sales/quota-attainment-check.yaml +33 -0
- package/jobs/sales/stale-deal-nudge.yaml +35 -0
- package/jobs/security/2fa-enrollment-audit.yaml +24 -0
- package/jobs/security/dependabot-alert-digest.yaml +30 -0
- package/jobs/security/expiring-api-key-rotation.yaml +31 -0
- package/jobs/security/tls-cipher-weak-check.yaml +31 -0
- package/jobs/security/waf-rule-change-watch.yaml +38 -0
- package/jobs/support/csat-score-watch.yaml +32 -0
- package/jobs/support/sla-breach-warning.yaml +31 -0
- package/jobs/support/ticket-backlog-aging-check.yaml +30 -0
- 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.
|