@wonsukchoi/crondex 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +48 -41
  2. package/bin/crondex.js +7 -1
  3. package/catalog.json +1790 -40
  4. package/jobs/agriculture/crop-price-market-watch.yaml +32 -0
  5. package/jobs/agriculture/livestock-feed-stock-check.yaml +35 -0
  6. package/jobs/automotive/loaner-vehicle-return-reminder.yaml +35 -0
  7. package/jobs/automotive/parts-backorder-check.yaml +33 -0
  8. package/jobs/automotive/repair-order-aging-check.yaml +35 -0
  9. package/jobs/childcare/immunization-record-compliance-check.yaml +33 -0
  10. package/jobs/childcare/staff-child-ratio-compliance-check.yaml +30 -0
  11. package/jobs/childcare/tuition-payment-late-check.yaml +35 -0
  12. package/jobs/construction/equipment-rental-return-reminder.yaml +35 -0
  13. package/jobs/construction/subcontractor-insurance-expiry-check.yaml +35 -0
  14. package/jobs/creator/sponsorship-deliverable-tracker.yaml +38 -0
  15. package/jobs/crypto/defi-liquidation-risk-watch.yaml +36 -0
  16. package/jobs/crypto/token-unlock-vesting-watch.yaml +34 -0
  17. package/jobs/ecommerce/checkout-conversion-drop-watch.yaml +39 -0
  18. package/jobs/ecommerce/negative-review-alert.yaml +35 -0
  19. package/jobs/education/at-risk-student-grade-watch.yaml +35 -0
  20. package/jobs/education/field-trip-permission-slip-check.yaml +36 -0
  21. package/jobs/events/attendee-checkin-rate-watch.yaml +37 -0
  22. package/jobs/events/event-staffing-shortfall-check.yaml +34 -0
  23. package/jobs/fitness/class-utilization-check.yaml +32 -0
  24. package/jobs/fitness/gym-equipment-maintenance-check.yaml +35 -0
  25. package/jobs/fitness/gym-membership-renewal-reminder.yaml +35 -0
  26. package/jobs/fleet/driver-license-cdl-expiry-check.yaml +35 -0
  27. package/jobs/fleet/vehicle-inspection-due-check.yaml +35 -0
  28. package/jobs/gaming/game-server-uptime-check.yaml +34 -0
  29. package/jobs/gaming/tournament-registration-deadline-check.yaml +34 -0
  30. package/jobs/government/constituent-casework-followup-check.yaml +33 -0
  31. package/jobs/government/foia-request-deadline-check.yaml +36 -0
  32. package/jobs/government/permit-application-backlog-check.yaml +37 -0
  33. package/jobs/healthcare/insurance-eligibility-verification-check.yaml +32 -0
  34. package/jobs/healthcare/lab-result-followup-check.yaml +34 -0
  35. package/jobs/hiring/background-check-status-check.yaml +35 -0
  36. package/jobs/hiring/interview-feedback-overdue-check.yaml +33 -0
  37. package/jobs/hospitality/guest-maintenance-request-backlog-check.yaml +35 -0
  38. package/jobs/hospitality/guest-review-response-check.yaml +35 -0
  39. package/jobs/hr/exit-interview-completion-check.yaml +33 -0
  40. package/jobs/hr/performance-review-cycle-reminder.yaml +34 -0
  41. package/jobs/insurance/certificate-of-insurance-request-check.yaml +38 -0
  42. package/jobs/insurance/premium-payment-due-reminder.yaml +35 -0
  43. package/jobs/inventory/inventory-shrinkage-watch.yaml +36 -0
  44. package/jobs/inventory/overstock-slow-mover-check.yaml +36 -0
  45. package/jobs/investing/earnings-calendar-watch.yaml +32 -0
  46. package/jobs/investing/tax-loss-harvesting-review.yaml +33 -0
  47. package/jobs/legal/compliance-filing-deadline-reminder.yaml +38 -0
  48. package/jobs/logistics/container-demurrage-fee-watch.yaml +35 -0
  49. package/jobs/logistics/last-mile-delivery-exception-check.yaml +36 -0
  50. package/jobs/manufacturing/raw-material-shortage-risk-check.yaml +31 -0
  51. package/jobs/manufacturing/supplier-otd-performance-watch.yaml +38 -0
  52. package/jobs/marketing/campaign-utm-tracking-check.yaml +41 -0
  53. package/jobs/nonprofit/board-action-item-followup-check.yaml +28 -0
  54. package/jobs/nonprofit/grant-reporting-deadline-check.yaml +38 -0
  55. package/jobs/podcast/podcast-download-drop-watch.yaml +42 -0
  56. package/jobs/podcast/podcast-rating-review-watch.yaml +37 -0
  57. package/jobs/realestate/property-tax-deadline-reminder.yaml +35 -0
  58. package/jobs/restaurant/food-cost-percentage-watch.yaml +35 -0
  59. package/jobs/restaurant/labor-cost-percentage-watch.yaml +36 -0
  60. package/jobs/retail/employee-shift-gap-check.yaml +35 -0
  61. package/jobs/retail/pos-till-reconciliation-check.yaml +33 -0
  62. package/jobs/retail/store-opening-checklist-reminder.yaml +30 -0
  63. package/jobs/support/agent-workload-balance-check.yaml +30 -0
  64. package/jobs/support/ticket-reopened-rate-watch.yaml +35 -0
  65. package/jobs/team/on-call-fatigue-check.yaml +39 -0
  66. package/jobs/veterinary/boarding-checkout-reminder.yaml +29 -0
  67. package/jobs/veterinary/controlled-substance-log-audit.yaml +33 -0
  68. package/jobs/veterinary/pet-vaccine-due-reminder.yaml +34 -0
  69. package/jobs/warehousing/climate-control-compliance-check.yaml +40 -0
  70. package/jobs/warehousing/dock-schedule-conflict-check.yaml +30 -0
  71. package/jobs/warehousing/pick-pack-error-rate-watch.yaml +35 -0
  72. package/lib/catalog-summary.js +47 -0
  73. package/lib/category-descriptions.js +50 -0
  74. package/lib/duplicates.js +29 -0
  75. package/lib/shellcheck-prep.js +20 -0
  76. package/package.json +1 -1
@@ -0,0 +1,34 @@
1
+ id: performance-review-cycle-reminder
2
+ version: 1
3
+ name: Performance Review Cycle Reminder
4
+ description: >
5
+ Tracks the performance review cycle deadline and flags managers who
6
+ haven't submitted reviews yet as the deadline approaches. Use this if a
7
+ review cycle has ever closed with a chunk of reviews still missing
8
+ because nobody chased the stragglers until HR asked.
9
+ category: hr
10
+ tags: [hr, performance-review, reminder, deadline]
11
+ schedule: "0 9 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check {{hris_system}} for the current performance review cycle, due
16
+ {{cycle_deadline}}.
17
+ 1. Report days remaining until the deadline.
18
+ 2. List managers who haven't submitted reviews for their direct reports
19
+ yet, with how many are outstanding.
20
+ 3. If within {{final_warn_days}} days of the deadline, draft an urgent
21
+ reminder to each manager still missing reviews.
22
+ 4. If the deadline has passed, report final completion rate instead.
23
+ variables:
24
+ hris_system:
25
+ default: "your HRIS/performance management system"
26
+ description: Name of the system to check (e.g. "Lattice", "15Five", "Workday").
27
+ cycle_deadline:
28
+ default: "YYYY-MM-DD"
29
+ description: Date the current review cycle closes.
30
+ final_warn_days:
31
+ default: 5
32
+ description: Days before deadline to switch from routine reminders to urgent ones.
33
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
34
+ notes: Draft-only — review reminder messages before sending, especially the "urgent" framing near the deadline.
@@ -0,0 +1,38 @@
1
+ id: certificate-of-insurance-request-check
2
+ version: 1
3
+ name: Certificate of Insurance Request Check
4
+ description: >
5
+ Checks for incoming certificate-of-insurance (COI) requests from
6
+ vendors, clients, or landlords that haven't been fulfilled yet. Use this
7
+ if a COI request has ever sat unanswered long enough to hold up a
8
+ contract or a lease signing.
9
+ category: insurance
10
+ tags: [insurance, coi, compliance, requests]
11
+ schedule: "0 9 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{escalate_after_days}}" '
16
+ NR==1 {next}
17
+ $3 == "pending" {
18
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
19
+ cmd | getline requested_epoch; close(cmd);
20
+ "date +%s" | getline now_epoch; close("date +%s");
21
+ age_days = (now_epoch - requested_epoch) / 86400;
22
+ if (age_days >= days) {
23
+ printf "OVERDUE: %s — requested %s (%d days ago)\n", $1, $2, age_days;
24
+ }
25
+ }
26
+ ' "{{coi_requests_csv_path}}"
27
+ variables:
28
+ coi_requests_csv_path:
29
+ default: "./coi-requests.csv"
30
+ description: "Path to a CSV with columns: requester_name,requested_date (YYYY-MM-DD),status (pending/fulfilled)."
31
+ escalate_after_days:
32
+ default: 3
33
+ description: Days a request can sit before it counts as overdue.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ This is about issuing COIs to others who need proof of your coverage —
37
+ the opposite direction from `policy-renewal-reminder` and
38
+ `premium-payment-due-reminder`, which track your own policies.
@@ -0,0 +1,35 @@
1
+ id: premium-payment-due-reminder
2
+ version: 1
3
+ name: Insurance Premium Payment Due Reminder
4
+ description: >
5
+ Warns you before an insurance premium payment is due, separate from the
6
+ policy's renewal date. Use this if a policy has ever lapsed for
7
+ non-payment even though the renewal itself was months away, because a
8
+ monthly or quarterly premium payment was missed.
9
+ category: insurance
10
+ tags: [insurance, premium, payment, reminder]
11
+ schedule: "0 8 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ {
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 && diff_days >= 0) {
23
+ printf "PREMIUM DUE: %s — due %s (%d days)\n", $1, $2, diff_days;
24
+ }
25
+ }
26
+ ' "{{premiums_csv_path}}"
27
+ variables:
28
+ premiums_csv_path:
29
+ default: "./insurance-premiums.csv"
30
+ description: "Path to a CSV with columns: policy_name,next_payment_due_date (YYYY-MM-DD)."
31
+ warn_days_before:
32
+ default: 7
33
+ description: How many days before a premium payment is due to start warning.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: Complements `policy-renewal-reminder` — that one tracks the annual/term renewal date, this one tracks the recurring payment schedule within the term.
@@ -0,0 +1,36 @@
1
+ id: inventory-shrinkage-watch
2
+ version: 1
3
+ name: Inventory Shrinkage Watch
4
+ description: >
5
+ Tracks the gap between expected and actual inventory over time and
6
+ flags when shrinkage (theft, damage, data-entry error) crosses a
7
+ threshold. Use this if shrinkage has ever only gotten noticed at the
8
+ annual physical count instead of trending visibly for months first.
9
+ category: inventory
10
+ tags: [inventory, shrinkage, loss-prevention, audit]
11
+ schedule: "0 6 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v pct="{{alert_threshold_pct}}" '
16
+ NR==1 {next}
17
+ {
18
+ expected = $2;
19
+ actual = $3;
20
+ if (expected > 0) {
21
+ shrink_pct = ((expected - actual) / expected) * 100;
22
+ if (shrink_pct >= pct) {
23
+ printf "SHRINKAGE: %s — expected %d, actual %d (%.1f%% shrink)\n", $1, expected, actual, shrink_pct;
24
+ }
25
+ }
26
+ }
27
+ ' "{{inventory_counts_csv_path}}"
28
+ variables:
29
+ inventory_counts_csv_path:
30
+ default: "./inventory-counts.csv"
31
+ description: "Path to a CSV with columns: sku,expected_quantity,actual_counted_quantity."
32
+ alert_threshold_pct:
33
+ default: 3
34
+ description: Shrinkage percentage that triggers a flag.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: Complements `inventory-count-discrepancy-check` (single-count mismatch) by tracking shrinkage as an ongoing percentage worth watching for a trend, not just a one-off count reconciliation.
@@ -0,0 +1,36 @@
1
+ id: overstock-slow-mover-check
2
+ version: 1
3
+ name: Overstock / Slow-Mover Check
4
+ description: >
5
+ Flags SKUs sitting well above normal stock levels with low recent sales
6
+ velocity, tying up capital and warehouse space. Use this if slow-moving
7
+ stock has ever piled up quietly until a year-end count revealed how
8
+ much cash was sitting on shelves doing nothing.
9
+ category: inventory
10
+ tags: [inventory, overstock, slow-mover, capital]
11
+ schedule: "0 6 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v mult="{{overstock_multiplier}}" -v min_days="{{min_days_of_stock}}" '
16
+ NR==1 {next}
17
+ {
18
+ daily_velocity = $3 / 30;
19
+ days_of_stock = (daily_velocity > 0) ? $2 / daily_velocity : 9999;
20
+ if (days_of_stock >= min_days && $2 > ($4 * mult)) {
21
+ printf "OVERSTOCK: %s — %d units (%.0f days of stock, %.1fx normal par)\n", $1, $2, days_of_stock, $2/$4;
22
+ }
23
+ }
24
+ ' "{{inventory_csv_path}}"
25
+ variables:
26
+ inventory_csv_path:
27
+ default: "./inventory-with-par.csv"
28
+ description: "Path to a CSV with columns: sku,current_stock,units_sold_last_30_days,normal_par_level."
29
+ overstock_multiplier:
30
+ default: 2
31
+ description: How many times above normal par level counts as overstocked.
32
+ min_days_of_stock:
33
+ default: 90
34
+ description: Minimum days-of-stock-on-hand (at current velocity) before flagging, to avoid noise from normal restocking bumps.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: Complements `low-stock-alert`/`low-stock-reorder-alert` by catching the opposite problem — too much stock, not too little.
@@ -0,0 +1,32 @@
1
+ id: earnings-calendar-watch
2
+ version: 1
3
+ name: Earnings Calendar Watch
4
+ description: >
5
+ Checks for upcoming earnings dates on stocks you hold, so a report
6
+ doesn't catch you off guard. Use this if a holding has ever moved
7
+ sharply overnight and you only afterward realized earnings had been
8
+ scheduled for that day.
9
+ category: investing
10
+ tags: [investing, earnings, stocks, calendar]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "America/New_York"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check upcoming earnings dates for these holdings: {{tickers}}, over the
16
+ next {{lookahead_days}} days (via any market data source or earnings
17
+ calendar).
18
+ 1. List each ticker with an earnings date in the window, and whether
19
+ it's before or after market close.
20
+ 2. Note the analyst consensus estimate if easily available, for
21
+ context.
22
+ 3. If none of the tracked tickers report in this window, say so in one
23
+ line.
24
+ variables:
25
+ tickers:
26
+ default: "AAPL, MSFT"
27
+ description: Comma-separated list of stock tickers to track.
28
+ lookahead_days:
29
+ default: 14
30
+ description: How far ahead to check for scheduled earnings reports.
31
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
32
+ notes: Informational only — not a recommendation to trade around earnings, which is notoriously volatile and easy to get wrong.
@@ -0,0 +1,33 @@
1
+ id: tax-loss-harvesting-review
2
+ version: 1
3
+ name: Tax-Loss Harvesting Review
4
+ description: >
5
+ Checks your holdings for unrealized losses worth considering for
6
+ tax-loss harvesting before year-end. Use this if you've ever realized in
7
+ December that a position had been sitting at a loss all year and you
8
+ never did anything about it for tax purposes.
9
+ category: investing
10
+ tags: [investing, tax, portfolio, capital-gains]
11
+ schedule: "0 9 * * 1"
12
+ timezone: "America/New_York"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check current holdings and cost basis in {{brokerage_or_source}}.
16
+ 1. List any position with an unrealized loss of at least
17
+ ${{min_loss_usd}}.
18
+ 2. Note the loss amount and how long the position has been held
19
+ (relevant for short- vs. long-term treatment).
20
+ 3. Flag anything that would trigger a wash sale if repurchased within 30
21
+ days, based on recent buy activity in the same or a substantially
22
+ identical security.
23
+ 4. This is informational only, not tax advice — say so, and recommend
24
+ confirming with a tax professional before acting.
25
+ variables:
26
+ brokerage_or_source:
27
+ default: "your brokerage account"
28
+ description: Where holdings and cost basis are tracked.
29
+ min_loss_usd:
30
+ default: 500
31
+ description: Minimum unrealized loss (USD) worth surfacing.
32
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
33
+ notes: Not tax or investment advice — flags candidates for a human (ideally with a tax professional) to evaluate, doesn't execute any trades.
@@ -0,0 +1,38 @@
1
+ id: compliance-filing-deadline-reminder
2
+ version: 1
3
+ name: Corporate Compliance Filing Deadline Reminder
4
+ description: >
5
+ Warns you before a recurring corporate compliance filing is due —
6
+ annual reports, franchise tax, registered agent renewals. Use this if
7
+ you've ever had a company administratively dissolved (and had to pay to
8
+ reinstate it) because a routine state filing quietly lapsed.
9
+ category: legal
10
+ tags: [legal, compliance, corporate, filing]
11
+ schedule: "0 8 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ {
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 && diff_days >= 0) {
23
+ printf "FILING DUE: %s — due %s (%d days)\n", $1, $2, diff_days;
24
+ }
25
+ }
26
+ ' "{{filings_csv_path}}"
27
+ variables:
28
+ filings_csv_path:
29
+ default: "./compliance-filings.csv"
30
+ description: "Path to a CSV with columns: filing_name,due_date (YYYY-MM-DD) — e.g. annual report, franchise tax, registered agent renewal."
31
+ warn_days_before:
32
+ default: 30
33
+ description: How many days before a filing is due to start warning.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ Covers routine corporate/administrative filings — distinct from
37
+ `court-deadline-reminder` (litigation deadlines) and
38
+ `tax-deadline-reminder` in finance (income/estimated tax deadlines).
@@ -0,0 +1,35 @@
1
+ id: container-demurrage-fee-watch
2
+ version: 1
3
+ name: Container Demurrage/Detention Fee Watch
4
+ description: >
5
+ Checks tracked containers against their free-time deadline and warns
6
+ before demurrage or detention fees start accruing. Use this if a
7
+ container has ever sat at port past its free days and the fee bill only
8
+ showed up weeks later as a surprise.
9
+ category: logistics
10
+ tags: [logistics, shipping, demurrage, fees]
11
+ schedule: "0 7 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ {
18
+ cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
19
+ cmd | getline deadline_epoch; close(cmd);
20
+ "date +%s" | getline now_epoch; close("date +%s");
21
+ diff_days = (deadline_epoch - now_epoch) / 86400;
22
+ if (diff_days <= days) {
23
+ printf "FEE RISK: container %s — free time ends %s (%d days)\n", $1, $2, diff_days;
24
+ }
25
+ }
26
+ ' "{{containers_csv_path}}"
27
+ variables:
28
+ containers_csv_path:
29
+ default: "./container-free-time.csv"
30
+ description: "Path to a CSV with columns: container_number,free_time_expiry_date (YYYY-MM-DD)."
31
+ warn_days_before:
32
+ default: 2
33
+ description: How many days before free time expires to start warning — demurrage windows are usually short.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: Assumes free-time deadlines are exported or manually tracked from your carrier/terminal portal — this is the "did anyone actually check" backstop before fees start accruing.
@@ -0,0 +1,36 @@
1
+ id: last-mile-delivery-exception-check
2
+ version: 1
3
+ name: Last-Mile Delivery Exception Check
4
+ description: >
5
+ Checks recent deliveries for exceptions — failed attempts, refused
6
+ packages, address issues — and flags them for follow-up. Use this if a
7
+ failed delivery has ever sat unresolved until an annoyed customer
8
+ emailed asking where their order was.
9
+ category: logistics
10
+ tags: [logistics, delivery, last-mile, exceptions]
11
+ schedule: "0 */4 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check {{carrier_or_tms}} for delivery exceptions (failed attempt,
16
+ refused, address issue, damaged) logged in the last
17
+ {{lookback_hours}} hours.
18
+ 1. List each exception: order/tracking number, exception type, and how
19
+ long ago it occurred.
20
+ 2. Flag anything with no follow-up action logged yet (redelivery
21
+ scheduled, customer contacted) past {{escalate_after_hours}} hours.
22
+ 3. Draft a short customer-facing message per unresolved exception,
23
+ appropriate to the exception type (e.g. rescheduling for a failed
24
+ attempt vs. apologizing for damage).
25
+ variables:
26
+ carrier_or_tms:
27
+ default: "your carrier's tracking API or TMS"
28
+ description: Where delivery exception data is available (carrier API, transportation management system).
29
+ lookback_hours:
30
+ default: 24
31
+ description: How far back to check for new exceptions.
32
+ escalate_after_hours:
33
+ default: 12
34
+ description: Hours an exception can sit without follow-up before it counts as overdue.
35
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
36
+ notes: Draft-only — review customer messages before sending, and confirm any rescheduled delivery actually gets booked through the carrier.
@@ -0,0 +1,31 @@
1
+ id: raw-material-shortage-risk-check
2
+ version: 1
3
+ name: Raw Material Shortage Risk Check
4
+ description: >
5
+ Compares raw material stock against what the production schedule needs
6
+ over the next planning window, and flags anything that'll run short.
7
+ Use this if a production run has ever stalled mid-shift because a
8
+ component ran out and nobody had cross-checked stock against the
9
+ schedule beforehand.
10
+ category: manufacturing
11
+ tags: [manufacturing, materials, production-planning, shortage]
12
+ schedule: "0 6 * * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' '
17
+ NR==1 {next}
18
+ {
19
+ material = $1; on_hand = $2; needed = $3;
20
+ if (needed > on_hand) {
21
+ shortfall = needed - on_hand;
22
+ printf "SHORTFALL: %s — need %d, have %d (short %d)\n", material, needed, on_hand, shortfall;
23
+ }
24
+ }
25
+ ' "{{materials_needs_csv_path}}"
26
+ variables:
27
+ materials_needs_csv_path:
28
+ default: "./material-requirements.csv"
29
+ description: "Path to a CSV with columns: material_name,on_hand_qty,needed_qty_for_schedule — needed_qty computed from your production schedule/BOM for the planning window."
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Assumes `needed_qty` is derived from your MRP/production schedule export — this job just does the comparison and flags shortfalls, it doesn't calculate the BOM requirement itself.
@@ -0,0 +1,38 @@
1
+ id: supplier-otd-performance-watch
2
+ version: 1
3
+ name: Supplier On-Time Delivery Performance Watch
4
+ description: >
5
+ Tracks a supplier's on-time delivery rate over recent orders and flags
6
+ it when performance drops below target. Use this if a supplier's
7
+ reliability has ever quietly slipped for months before it showed up as a
8
+ production delay bad enough to notice.
9
+ category: manufacturing
10
+ tags: [manufacturing, supplier, otd, procurement]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v target="{{otd_target_pct}}" '
16
+ NR==1 {next}
17
+ {
18
+ total[$1]++;
19
+ if ($2 == "on-time") ontime[$1]++;
20
+ }
21
+ END {
22
+ for (s in total) {
23
+ pct = (ontime[s] / total[s]) * 100;
24
+ if (pct < target) {
25
+ printf "BELOW TARGET: %s — %.1f%% on-time (%d of %d orders), target %d%%\n", s, pct, ontime[s], total[s], target;
26
+ }
27
+ }
28
+ }
29
+ ' "{{orders_csv_path}}"
30
+ variables:
31
+ orders_csv_path:
32
+ default: "./supplier-orders.csv"
33
+ description: "Path to a CSV with columns: supplier_name,status (on-time or late) — one row per recent order."
34
+ otd_target_pct:
35
+ default: 90
36
+ description: Minimum acceptable on-time delivery percentage.
37
+ compatible_agents: [generic, claude, codex]
38
+ notes: Assumes an exported or manually logged record of recent order statuses per supplier — export this from your ERP/procurement system on a schedule to keep the CSV current.
@@ -0,0 +1,41 @@
1
+ id: campaign-utm-tracking-check
2
+ version: 1
3
+ name: Campaign UTM Tracking Check
4
+ description: >
5
+ Checks a list of campaign links for missing or malformed UTM parameters
6
+ before (or after) launch. Use this if a campaign has ever run for a week
7
+ with broken tracking, making every attribution report for that period
8
+ useless.
9
+ category: marketing
10
+ tags: [marketing, utm, tracking, analytics]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ required="{{required_params}}";
16
+ fail=0;
17
+ while IFS= read -r url; do
18
+ [ -z "$url" ] && continue;
19
+ missing="";
20
+ IFS=',' read -ra params <<< "$required";
21
+ for p in "${params[@]}"; do
22
+ case "$url" in
23
+ *"${p}="*) ;;
24
+ *) missing="$missing $p" ;;
25
+ esac;
26
+ done;
27
+ if [ -n "$missing" ]; then
28
+ echo "MISSING PARAMS ($missing): $url";
29
+ fail=1;
30
+ fi;
31
+ done < "{{urls_file_path}}";
32
+ exit $fail
33
+ variables:
34
+ urls_file_path:
35
+ default: "./campaign-urls.txt"
36
+ description: Path to a plain text file with one campaign URL per line.
37
+ required_params:
38
+ default: "utm_source,utm_medium,utm_campaign"
39
+ description: Comma-separated list of UTM parameter names every URL must include.
40
+ compatible_agents: [generic, claude, codex]
41
+ notes: Checks parameter presence only, not that values are consistent/correctly spelled (e.g. "linkedin" vs "LinkedIn") — pair with a naming convention doc if that's a recurring issue.
@@ -0,0 +1,28 @@
1
+ id: board-action-item-followup-check
2
+ version: 1
3
+ name: Board Action Item Follow-Up Check
4
+ description: >
5
+ Checks action items from recent board meeting minutes and flags any
6
+ that are overdue with no update. Use this if a board commitment has
7
+ ever quietly died between meetings because nobody tracked it after the
8
+ minutes were filed away.
9
+ category: nonprofit
10
+ tags: [nonprofit, board, governance, followup]
11
+ schedule: "0 9 * * 1"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Read the action items list from {{action_items_source}} (extracted from
16
+ recent board meeting minutes).
17
+ 1. List each open action item: owner, due date, and current status.
18
+ 2. Flag anything past its due date with no completion note as overdue.
19
+ 3. Draft a short status-check message per overdue item, addressed to
20
+ its owner.
21
+ 4. Note any item with no owner assigned at all — that's usually the
22
+ first thing to fix, since it explains why nothing happened.
23
+ variables:
24
+ action_items_source:
25
+ default: "your board meeting minutes / action item tracker"
26
+ description: Where board action items and their owners/due dates are recorded.
27
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
28
+ notes: Draft-only — status-check messages should go out through whatever channel the board already uses.
@@ -0,0 +1,38 @@
1
+ id: grant-reporting-deadline-check
2
+ version: 1
3
+ name: Grant Reporting Deadline Check
4
+ description: >
5
+ Warns you before a post-award grant report is due, separate from the
6
+ application deadline. Use this if a funder relationship has ever soured
7
+ because a required progress or financial report was late, even though
8
+ the grant itself was won and the work was going fine.
9
+ category: nonprofit
10
+ tags: [nonprofit, grants, reporting, compliance]
11
+ schedule: "0 8 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ {
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 && diff_days >= 0) {
23
+ printf "REPORT DUE: %s — due %s (%d days)\n", $1, $2, diff_days;
24
+ }
25
+ }
26
+ ' "{{reports_csv_path}}"
27
+ variables:
28
+ reports_csv_path:
29
+ default: "./grant-reports.csv"
30
+ description: "Path to a CSV with columns: grant_name,report_due_date (YYYY-MM-DD) — one row per required progress/financial report."
31
+ warn_days_before:
32
+ default: 14
33
+ description: How many days before a report is due to start warning.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ Tracks post-award reporting obligations — distinct from
37
+ `grant-deadline-reminder`, which tracks application deadlines for grants
38
+ not yet won.
@@ -0,0 +1,42 @@
1
+ id: podcast-download-drop-watch
2
+ version: 1
3
+ name: Podcast Download Drop Watch
4
+ description: >
5
+ Compares a new episode's early download numbers against your recent
6
+ average and flags a real drop. Use this if a listenership decline has
7
+ ever gone unnoticed for months because nobody compared episode numbers
8
+ side by side.
9
+ category: podcast
10
+ tags: [podcast, downloads, analytics, listenership]
11
+ schedule: "0 10 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check download/listen numbers for the most recent episode of
16
+ {{podcast_name}} at the {{days_since_release}}-day mark, via
17
+ {{hosting_platform}}.
18
+ 1. Compare against the average {{days_since_release}}-day download
19
+ count for the last {{baseline_episode_count}} episodes.
20
+ 2. Flag a drop of {{drop_threshold_pct}}% or more below that average.
21
+ 3. If flagged, note anything that coincided with this episode
22
+ (different topic, guest vs. solo, publish day/time change) that
23
+ might explain it, if that context is available.
24
+ 4. If downloads are in the normal range, report the number in one line.
25
+ variables:
26
+ podcast_name:
27
+ default: "your podcast"
28
+ description: Name of the podcast to check.
29
+ hosting_platform:
30
+ default: "your podcast host (e.g. Spotify for Podcasters, Buzzsprout, Libsyn)"
31
+ description: Where download analytics are available.
32
+ days_since_release:
33
+ default: 3
34
+ description: How many days after release to compare (early numbers are more predictive than day-one spikes).
35
+ baseline_episode_count:
36
+ default: 8
37
+ description: How many recent episodes to average for the baseline comparison.
38
+ drop_threshold_pct:
39
+ default: 20
40
+ description: Percentage drop below baseline that counts as worth flagging.
41
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
42
+ notes: Complements `podcast-rating-review-watch` (qualitative feedback) with a quantitative listenership signal.
@@ -0,0 +1,37 @@
1
+ id: podcast-rating-review-watch
2
+ version: 1
3
+ name: Podcast Rating/Review Watch
4
+ description: >
5
+ Checks for new ratings and reviews on your podcast platforms and flags
6
+ a negative one or a rating drop worth looking into. Use this if a
7
+ critical review has ever sat unanswered for months because nobody
8
+ checks the ratings page between episodes.
9
+ category: podcast
10
+ tags: [podcast, reviews, ratings, reputation]
11
+ schedule: "0 10 * * 1"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check {{podcast_platforms}} for {{podcast_name}} for reviews/ratings
16
+ posted in the last {{lookback_days}} days.
17
+ 1. List any new review, with rating and a one-line summary.
18
+ 2. Flag anything rated at or below {{alert_threshold_stars}} stars, or
19
+ any average-rating drop compared to the prior period.
20
+ 3. Note if a review raises a specific, actionable complaint (audio
21
+ quality, ad load, pacing) versus general subjective taste — the
22
+ actionable ones are worth a closer look.
23
+ variables:
24
+ podcast_platforms:
25
+ default: "Apple Podcasts, Spotify"
26
+ description: Comma-separated list of platforms to check.
27
+ podcast_name:
28
+ default: "your podcast"
29
+ description: Name of the podcast to check.
30
+ lookback_days:
31
+ default: 7
32
+ description: How far back to check for new reviews.
33
+ alert_threshold_stars:
34
+ default: 3
35
+ description: Star rating at or below which a review gets flagged (out of 5).
36
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
37
+ notes: Most podcast platforms don't expose a review API directly — this typically means checking the platform's creator dashboard manually or via whatever export it offers.
@@ -0,0 +1,35 @@
1
+ id: property-tax-deadline-reminder
2
+ version: 1
3
+ name: Property Tax Deadline Reminder
4
+ description: >
5
+ Warns you before a property tax payment is due for a tracked property.
6
+ Use this if a property tax bill has ever gone unpaid past the deadline
7
+ because it arrived by mail and got buried, resulting in penalties or a
8
+ lien risk.
9
+ category: realestate
10
+ tags: [realestate, property-tax, payment, deadline]
11
+ schedule: "0 8 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{warn_days_before}}" '
16
+ NR==1 {next}
17
+ {
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 && diff_days >= 0) {
23
+ printf "TAX DUE: %s — due %s (%d days)\n", $1, $2, diff_days;
24
+ }
25
+ }
26
+ ' "{{properties_csv_path}}"
27
+ variables:
28
+ properties_csv_path:
29
+ default: "./property-tax-due-dates.csv"
30
+ description: "Path to a CSV with columns: property_name,tax_due_date (YYYY-MM-DD)."
31
+ warn_days_before:
32
+ default: 21
33
+ description: How many days before the tax due date to start warning.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: Many jurisdictions bill property tax semi-annually or annually with different due dates per installment — add one row per installment rather than one per property per year.