@wonsukchoi/crondex 0.7.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.
@@ -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,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,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,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,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,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,38 @@
1
+ id: freight-rate-spike-watch
2
+ version: 1
3
+ name: Freight Rate Spike Watch
4
+ description: >
5
+ Checks a freight lane's current quoted rate against your baseline and
6
+ flags a spike. Use this if a shipping rate has ever quietly doubled and
7
+ only got noticed when the invoice came in.
8
+ category: logistics
9
+ tags: [logistics, freight, rates]
10
+ schedule: "0 7 * * 1"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Check the current freight rate for the lane {{lane_description}} via
15
+ {{rate_source_hint}}.
16
+ 1. Compare the current quote to the baseline rate of {{baseline_rate}}
17
+ per {{rate_unit}}.
18
+ 2. Flag if it's {{spike_threshold_pct}}% or more above baseline.
19
+ 3. Report the current rate, the delta, and if visible, the likely driver
20
+ (fuel surcharge, capacity crunch, seasonal demand).
21
+ variables:
22
+ lane_description:
23
+ default: "Los Angeles, CA to Chicago, IL"
24
+ description: Origin/destination lane to check.
25
+ rate_source_hint:
26
+ default: "your freight broker or a rate index (DAT, Freightos)"
27
+ description: Where to check current freight rates.
28
+ baseline_rate:
29
+ default: 2.50
30
+ description: Baseline rate per unit to compare against.
31
+ rate_unit:
32
+ default: "mile"
33
+ description: Unit the rate is quoted in.
34
+ spike_threshold_pct:
35
+ default: 20
36
+ description: Percent above baseline that counts as a spike.
37
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
38
+ notes: No generic script mode — freight rate sources vary (broker quotes, load boards, rate indices) and most don't expose a simple public API.
@@ -0,0 +1,31 @@
1
+ id: preventive-maintenance-due-check
2
+ version: 1
3
+ name: Preventive Maintenance Due Check
4
+ description: >
5
+ Flags equipment coming due for scheduled preventive maintenance. Use
6
+ this if a machine has ever failed unexpectedly that would've been
7
+ caught by a PM visit nobody scheduled in time.
8
+ category: manufacturing
9
+ tags: [manufacturing, maintenance, equipment]
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={{warn_days}} '
16
+ NR>1 {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline due_ts; close(cmd);
19
+ days_left = int((due_ts - today) / 86400);
20
+ if (days_left <= warn) print "WARNING: equipment \"" $1 "\" PM due in " days_left " days (" $2 ")";
21
+ }
22
+ ' {{pm_schedule_csv}}
23
+ variables:
24
+ pm_schedule_csv:
25
+ default: "pm-schedule.csv"
26
+ description: "CSV with header row, columns: equipment_id,next_pm_date(YYYY-MM-DD)."
27
+ warn_days:
28
+ default: 7
29
+ description: Days before the scheduled PM date to start warning.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep pm-schedule.csv updated from your CMMS export or maintenance log before each run.
@@ -0,0 +1,38 @@
1
+ id: seo-rank-drop-watch
2
+ version: 1
3
+ name: SEO Keyword Rank Drop Watch
4
+ description: >
5
+ Checks a tracked keyword's search ranking and flags a real drop. Use
6
+ this if a page has ever slipped off page one and nobody noticed until
7
+ organic traffic was already down for weeks.
8
+ category: marketing
9
+ tags: [seo, rankings, marketing]
10
+ schedule: "0 8 * * 1"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Check the current search ranking for the keyword "{{keyword}}" targeting
15
+ {{target_url}}, via {{rank_source_hint}}.
16
+ 1. Compare the current position to the baseline position of
17
+ {{baseline_position}}.
18
+ 2. Flag a drop of {{drop_threshold_positions}} positions or more.
19
+ 3. If dropped, note which competing URLs now outrank {{target_url}}, if
20
+ visible.
21
+ variables:
22
+ keyword:
23
+ default: "your target keyword"
24
+ description: Keyword to track.
25
+ target_url:
26
+ default: "https://example.com/page"
27
+ description: URL you're tracking rank for.
28
+ rank_source_hint:
29
+ default: "a rank tracker (Ahrefs, SEMrush, Search Console) or a manual SERP check"
30
+ description: Where to check current rank.
31
+ baseline_position:
32
+ default: 5
33
+ description: Baseline ranking position to compare against.
34
+ drop_threshold_positions:
35
+ default: 5
36
+ description: Position drop that counts as a real regression.
37
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
38
+ notes: No generic script mode — SERP position checking needs a rank-tracking API or live search, both of which vary by provider/region.
@@ -0,0 +1,30 @@
1
+ id: volunteer-hours-shortfall-check
2
+ version: 1
3
+ name: Volunteer Hours Shortfall Check
4
+ description: >
5
+ Compares logged volunteer hours against a program's target and flags a
6
+ shortfall. Use this if a program has ever fallen behind on a grant's
7
+ volunteer-hour commitment without anyone noticing until the report was
8
+ due.
9
+ category: nonprofit
10
+ tags: [nonprofit, volunteers, programs]
11
+ schedule: "0 9 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ logged=$(awk -F, -v month="$(date +%Y-%m)" -v program="{{program_name}}" '$1 ~ month && $2 == program {sum += $3} END {print sum+0}' {{volunteer_hours_csv}});
16
+ target={{monthly_target_hours}};
17
+ if awk "BEGIN{exit !($logged < $target)}"; then echo "WARNING: {{program_name}} logged $logged of $target target hours this month"; exit 1;
18
+ else echo "OK: {{program_name}} logged $logged of $target target hours"; fi
19
+ variables:
20
+ volunteer_hours_csv:
21
+ default: "volunteer-hours.csv"
22
+ description: "CSV with columns: month(YYYY-MM),program,hours."
23
+ program_name:
24
+ default: "your program"
25
+ description: Program name to check.
26
+ monthly_target_hours:
27
+ default: 100
28
+ description: Target volunteer hours for the program this month.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: Keep volunteer-hours.csv updated from your volunteer management system's export before each run.
@@ -0,0 +1,31 @@
1
+ id: guest-followup-reminder
2
+ version: 1
3
+ name: Podcast Guest Follow-up Reminder
4
+ description: >
5
+ Flags recorded guest episodes that haven't been published or thanked
6
+ yet. Use this if a guest has ever had to awkwardly ask when their
7
+ episode was coming out because nobody followed up after recording.
8
+ category: podcast
9
+ tags: [podcast, guests, followup]
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 && $3 == "unpublished" {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline recorded_ts; close(cmd);
19
+ days_since = int((today - recorded_ts) / 86400);
20
+ if (days_since >= warn) print "WARNING: episode with " $1 " recorded " days_since " days ago, still unpublished";
21
+ }
22
+ ' {{guest_episodes_csv}}
23
+ variables:
24
+ guest_episodes_csv:
25
+ default: "guest-episodes.csv"
26
+ description: "CSV with header row, columns: guest_name,recorded_date(YYYY-MM-DD),status(unpublished/published)."
27
+ warn_days:
28
+ default: 14
29
+ description: Days since recording before an unpublished episode is flagged.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep guest-episodes.csv updated as episodes are recorded and published — one row per guest episode.
@@ -0,0 +1,23 @@
1
+ id: rent-payment-late-check
2
+ version: 1
3
+ name: Rent Payment Late Check
4
+ description: >
5
+ Flags tenants whose rent is overdue past the grace period. Use this if
6
+ a late payment has ever gone unnoticed for weeks because nobody was
7
+ cross-checking the rent roll against the bank deposits.
8
+ category: realestate
9
+ tags: [realestate, rent, payments]
10
+ schedule: "0 9 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ psql "{{database_url}}" -t -c "select tenant_name, unit, amount_due, due_date from rent_ledger where paid = false and due_date < current_date - interval '{{grace_days}} days';"
15
+ variables:
16
+ database_url:
17
+ default: "postgres://user:pass@host:5432/db"
18
+ description: Connection string for the property management database.
19
+ grace_days:
20
+ default: 5
21
+ description: Days past due_date before a late payment is flagged.
22
+ compatible_agents: [generic, claude, codex]
23
+ notes: Assumes a `rent_ledger` table with `paid`, `due_date`, and `amount_due` columns — adjust the query to your property management system's schema.
@@ -0,0 +1,33 @@
1
+ id: quota-attainment-check
2
+ version: 1
3
+ name: Quota Attainment Check
4
+ description: >
5
+ Compares a rep's closed-won revenue this period against their quota
6
+ pace and flags whether they're on track. Use this if a rep has ever
7
+ found out they missed quota only at the end of the quarter, instead of
8
+ with enough runway left to fix it.
9
+ category: sales
10
+ tags: [sales, quota, pipeline]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ closed=$(psql "{{database_url}}" -t -c "select coalesce(sum(amount),0) from deals where owner = '{{rep_name}}' and stage = 'closed_won' and closed_at >= date_trunc('quarter', current_date);");
16
+ quota={{quarterly_quota}};
17
+ pct=$(awk "BEGIN{printf \"%.0f\", ($closed/$quota)*100}");
18
+ echo "quota check for {{rep_name}}: closed \$$closed of \$$quota quarterly quota (${pct}%) so far"
19
+ variables:
20
+ database_url:
21
+ default: "postgres://user:pass@host:5432/db"
22
+ description: Connection string for the CRM/deals database.
23
+ rep_name:
24
+ default: "rep-name"
25
+ description: Sales rep owner field to check.
26
+ quarterly_quota:
27
+ default: 100000
28
+ description: Quarterly quota amount for this rep.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: >
31
+ Prints closed-won revenue vs. quota for the current quarter; the pacing
32
+ math (days elapsed vs. days in quarter) is left for you or your agent to
33
+ interpret since exact quarter boundaries vary by fiscal calendar.
@@ -0,0 +1,31 @@
1
+ id: sla-breach-warning
2
+ version: 1
3
+ name: SLA Breach Warning
4
+ description: >
5
+ Flags open tickets that are about to breach their SLA, before they
6
+ actually do. Use this if a ticket has ever blown past its SLA with zero
7
+ warning because the only check was after the fact.
8
+ category: support
9
+ tags: [support, sla, tickets]
10
+ schedule: "*/15 * * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ count=$(curl -s -H "Authorization: Bearer {{api_token}}" "{{api_url}}" | grep -o '"status":"open"' | wc -l | tr -d ' ');
15
+ if [ -z "$count" ] || [ "$count" -eq 0 ]; then echo "OK: no tickets approaching SLA breach"; exit 0;
16
+ else echo "WARNING: $count ticket(s) within {{warn_minutes}} minutes of SLA breach at {{api_url}}"; exit 1; fi
17
+ variables:
18
+ api_url:
19
+ default: "https://api.example-helpdesk.com/tickets?status=open&sla_remaining_lt_minutes=30"
20
+ description: Helpdesk API endpoint pre-filtered to tickets close to breaching SLA.
21
+ api_token:
22
+ default: "your-api-token"
23
+ description: Bearer token for the helpdesk API.
24
+ warn_minutes:
25
+ default: 30
26
+ description: Minutes of SLA time remaining that counts as "about to breach", for labeling output.
27
+ compatible_agents: [generic, claude, codex]
28
+ notes: >
29
+ Proactive counterpart to `ticket-backlog-aging-check` (which flags
30
+ tickets already past SLA) — point api_url at your helpdesk's filtered
31
+ search for tickets still within SLA but running low on time.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wonsukchoi/crondex",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "A public directory of pre-made, agent-editable cron jobs.",
5
5
  "type": "module",
6
6
  "license": "MIT",