@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.
package/catalog.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "generated_by": "scripts/build-catalog.js",
3
3
  "schema": "schema/job.schema.json",
4
- "count": 132,
4
+ "count": 150,
5
5
  "jobs": [
6
6
  {
7
7
  "id": "1on1-prep-reminder",
@@ -444,6 +444,30 @@
444
444
  ],
445
445
  "path": "jobs/security/certificate-transparency-watch.yaml"
446
446
  },
447
+ {
448
+ "id": "change-order-approval-reminder",
449
+ "version": 1,
450
+ "name": "Change Order Approval Reminder",
451
+ "description": "Flags change orders that have been waiting on client sign-off too long. Use this if work has ever stalled, or gone ahead unapproved, because a change order sat in someone's inbox for weeks.",
452
+ "category": "construction",
453
+ "tags": [
454
+ "construction",
455
+ "change-orders",
456
+ "approvals"
457
+ ],
458
+ "schedule": "0 8 * * 1-5",
459
+ "timezone": "UTC",
460
+ "runner": "shell",
461
+ "modes": [
462
+ "script"
463
+ ],
464
+ "compatible_agents": [
465
+ "generic",
466
+ "claude",
467
+ "codex"
468
+ ],
469
+ "path": "jobs/construction/change-order-approval-reminder.yaml"
470
+ },
447
471
  {
448
472
  "id": "changelog-digest",
449
473
  "version": 1,
@@ -650,6 +674,32 @@
650
674
  ],
651
675
  "path": "jobs/learning/course-progress-checkin.yaml"
652
676
  },
677
+ {
678
+ "id": "crosspost-lag-check",
679
+ "version": 1,
680
+ "name": "Crosspost Lag Check",
681
+ "description": "Checks that content published on your primary platform actually got mirrored to your other channels. Use this if a video or post has ever gone up on YouTube and just never made it to the other platforms because crossposting was manual and someone forgot.",
682
+ "category": "creator",
683
+ "tags": [
684
+ "content",
685
+ "crosspost",
686
+ "publishing"
687
+ ],
688
+ "schedule": "0 10 * * *",
689
+ "timezone": "UTC",
690
+ "runner": "agent-prompt",
691
+ "modes": [
692
+ "agent-prompt"
693
+ ],
694
+ "compatible_agents": [
695
+ "claude",
696
+ "codex",
697
+ "hermes",
698
+ "openclaw",
699
+ "generic"
700
+ ],
701
+ "path": "jobs/creator/crosspost-lag-check.yaml"
702
+ },
653
703
  {
654
704
  "id": "crypto-price-alert",
655
705
  "version": 1,
@@ -902,6 +952,30 @@
902
952
  ],
903
953
  "path": "jobs/devops/disk-space-check.yaml"
904
954
  },
955
+ {
956
+ "id": "dividend-payment-tracker",
957
+ "version": 1,
958
+ "name": "Dividend Payment Tracker",
959
+ "description": "Checks that an expected dividend payment actually landed by its scheduled pay date. Use this if a dividend has ever quietly not shown up and it took weeks to notice something was wrong with a holding or broker.",
960
+ "category": "investing",
961
+ "tags": [
962
+ "investing",
963
+ "dividends",
964
+ "income"
965
+ ],
966
+ "schedule": "0 9 * * *",
967
+ "timezone": "UTC",
968
+ "runner": "shell",
969
+ "modes": [
970
+ "script"
971
+ ],
972
+ "compatible_agents": [
973
+ "generic",
974
+ "claude",
975
+ "codex"
976
+ ],
977
+ "path": "jobs/investing/dividend-payment-tracker.yaml"
978
+ },
905
979
  {
906
980
  "id": "dns-record-check",
907
981
  "version": 1,
@@ -1075,6 +1149,30 @@
1075
1149
  ],
1076
1150
  "path": "jobs/devops/error-rate-spike-watch.yaml"
1077
1151
  },
1152
+ {
1153
+ "id": "event-budget-overrun-check",
1154
+ "version": 1,
1155
+ "name": "Event Budget Overrun Check",
1156
+ "description": "Compares committed spend so far against the event budget and flags overrun risk. Use this if an event has ever come in over budget because nobody totaled up the vendor contracts until after the fact.",
1157
+ "category": "events",
1158
+ "tags": [
1159
+ "events",
1160
+ "budget",
1161
+ "planning"
1162
+ ],
1163
+ "schedule": "0 9 * * 1",
1164
+ "timezone": "UTC",
1165
+ "runner": "shell",
1166
+ "modes": [
1167
+ "script"
1168
+ ],
1169
+ "compatible_agents": [
1170
+ "generic",
1171
+ "claude",
1172
+ "codex"
1173
+ ],
1174
+ "path": "jobs/events/event-budget-overrun-check.yaml"
1175
+ },
1078
1176
  {
1079
1177
  "id": "expiring-api-key-rotation",
1080
1178
  "version": 1,
@@ -1099,6 +1197,30 @@
1099
1197
  ],
1100
1198
  "path": "jobs/security/expiring-api-key-rotation.yaml"
1101
1199
  },
1200
+ {
1201
+ "id": "expiring-perishable-stock-check",
1202
+ "version": 1,
1203
+ "name": "Expiring Perishable Stock Check",
1204
+ "description": "Flags perishable inventory nearing its expiry date so it can be sold, discounted, or used before it's wasted. Use this if stock has ever expired on the shelf because nobody was tracking dates until it was too late.",
1205
+ "category": "inventory",
1206
+ "tags": [
1207
+ "inventory",
1208
+ "perishables",
1209
+ "waste"
1210
+ ],
1211
+ "schedule": "0 6 * * *",
1212
+ "timezone": "UTC",
1213
+ "runner": "shell",
1214
+ "modes": [
1215
+ "script"
1216
+ ],
1217
+ "compatible_agents": [
1218
+ "generic",
1219
+ "claude",
1220
+ "codex"
1221
+ ],
1222
+ "path": "jobs/inventory/expiring-perishable-stock-check.yaml"
1223
+ },
1102
1224
  {
1103
1225
  "id": "failed-login-watch",
1104
1226
  "version": 1,
@@ -1245,6 +1367,32 @@
1245
1367
  ],
1246
1368
  "path": "jobs/hospitality/food-safety-temp-log-check.yaml"
1247
1369
  },
1370
+ {
1371
+ "id": "freight-rate-spike-watch",
1372
+ "version": 1,
1373
+ "name": "Freight Rate Spike Watch",
1374
+ "description": "Checks a freight lane's current quoted rate against your baseline and flags a spike. Use this if a shipping rate has ever quietly doubled and only got noticed when the invoice came in.",
1375
+ "category": "logistics",
1376
+ "tags": [
1377
+ "logistics",
1378
+ "freight",
1379
+ "rates"
1380
+ ],
1381
+ "schedule": "0 7 * * 1",
1382
+ "timezone": "UTC",
1383
+ "runner": "agent-prompt",
1384
+ "modes": [
1385
+ "agent-prompt"
1386
+ ],
1387
+ "compatible_agents": [
1388
+ "claude",
1389
+ "codex",
1390
+ "hermes",
1391
+ "openclaw",
1392
+ "generic"
1393
+ ],
1394
+ "path": "jobs/logistics/freight-rate-spike-watch.yaml"
1395
+ },
1248
1396
  {
1249
1397
  "id": "frequent-flyer-miles-expiry",
1250
1398
  "version": 1,
@@ -1347,6 +1495,30 @@
1347
1495
  ],
1348
1496
  "path": "jobs/nonprofit/grant-deadline-reminder.yaml"
1349
1497
  },
1498
+ {
1499
+ "id": "guest-followup-reminder",
1500
+ "version": 1,
1501
+ "name": "Podcast Guest Follow-up Reminder",
1502
+ "description": "Flags recorded guest episodes that haven't been published or thanked yet. Use this if a guest has ever had to awkwardly ask when their episode was coming out because nobody followed up after recording.",
1503
+ "category": "podcast",
1504
+ "tags": [
1505
+ "podcast",
1506
+ "guests",
1507
+ "followup"
1508
+ ],
1509
+ "schedule": "0 9 * * 1",
1510
+ "timezone": "UTC",
1511
+ "runner": "shell",
1512
+ "modes": [
1513
+ "script"
1514
+ ],
1515
+ "compatible_agents": [
1516
+ "generic",
1517
+ "claude",
1518
+ "codex"
1519
+ ],
1520
+ "path": "jobs/podcast/guest-followup-reminder.yaml"
1521
+ },
1350
1522
  {
1351
1523
  "id": "habit-checkin",
1352
1524
  "version": 1,
@@ -1371,6 +1543,30 @@
1371
1543
  ],
1372
1544
  "path": "jobs/personal/habit-checkin.yaml"
1373
1545
  },
1546
+ {
1547
+ "id": "health-inspection-due-reminder",
1548
+ "version": 1,
1549
+ "name": "Health Inspection Due Reminder",
1550
+ "description": "Warns you before a health department inspection is expected, based on your jurisdiction's typical interval. Use this if an inspector has ever shown up to a kitchen that wasn't ready because nobody was tracking when the last one happened.",
1551
+ "category": "hospitality",
1552
+ "tags": [
1553
+ "hospitality",
1554
+ "health-inspection",
1555
+ "compliance"
1556
+ ],
1557
+ "schedule": "0 8 1 * *",
1558
+ "timezone": "UTC",
1559
+ "runner": "shell",
1560
+ "modes": [
1561
+ "script"
1562
+ ],
1563
+ "compatible_agents": [
1564
+ "generic",
1565
+ "claude",
1566
+ "codex"
1567
+ ],
1568
+ "path": "jobs/hospitality/health-inspection-due-reminder.yaml"
1569
+ },
1374
1570
  {
1375
1571
  "id": "hreflang-audit",
1376
1572
  "version": 1,
@@ -1810,6 +2006,30 @@
1810
2006
  ],
1811
2007
  "path": "jobs/personal/medication-refill-reminder.yaml"
1812
2008
  },
2009
+ {
2010
+ "id": "nda-expiry-check",
2011
+ "version": 1,
2012
+ "name": "NDA Expiry Check",
2013
+ "description": "Warns you before a signed NDA reaches its expiration or renewal date. Use this if an NDA has ever lapsed mid-relationship and nobody noticed the confidentiality coverage had run out.",
2014
+ "category": "legal",
2015
+ "tags": [
2016
+ "legal",
2017
+ "nda",
2018
+ "contracts"
2019
+ ],
2020
+ "schedule": "0 9 1 * *",
2021
+ "timezone": "UTC",
2022
+ "runner": "shell",
2023
+ "modes": [
2024
+ "script"
2025
+ ],
2026
+ "compatible_agents": [
2027
+ "generic",
2028
+ "claude",
2029
+ "codex"
2030
+ ],
2031
+ "path": "jobs/legal/nda-expiry-check.yaml"
2032
+ },
1813
2033
  {
1814
2034
  "id": "net-worth-snapshot",
1815
2035
  "version": 1,
@@ -1834,6 +2054,30 @@
1834
2054
  ],
1835
2055
  "path": "jobs/finance/net-worth-snapshot.yaml"
1836
2056
  },
2057
+ {
2058
+ "id": "offer-expiry-reminder",
2059
+ "version": 1,
2060
+ "name": "Offer Expiry Reminder",
2061
+ "description": "Flags extended offers that are close to their response deadline with no answer yet. Use this if an offer has ever quietly expired because nobody followed up before the deadline passed.",
2062
+ "category": "hiring",
2063
+ "tags": [
2064
+ "hiring",
2065
+ "offers",
2066
+ "recruiting"
2067
+ ],
2068
+ "schedule": "0 9 * * 1-5",
2069
+ "timezone": "UTC",
2070
+ "runner": "shell",
2071
+ "modes": [
2072
+ "script"
2073
+ ],
2074
+ "compatible_agents": [
2075
+ "generic",
2076
+ "claude",
2077
+ "codex"
2078
+ ],
2079
+ "path": "jobs/hiring/offer-expiry-reminder.yaml"
2080
+ },
1837
2081
  {
1838
2082
  "id": "oncall-handoff-reminder",
1839
2083
  "version": 1,
@@ -2078,6 +2322,30 @@
2078
2322
  ],
2079
2323
  "path": "jobs/investing/portfolio-rebalance-check.yaml"
2080
2324
  },
2325
+ {
2326
+ "id": "preventive-maintenance-due-check",
2327
+ "version": 1,
2328
+ "name": "Preventive Maintenance Due Check",
2329
+ "description": "Flags equipment coming due for scheduled preventive maintenance. Use this if a machine has ever failed unexpectedly that would've been caught by a PM visit nobody scheduled in time.",
2330
+ "category": "manufacturing",
2331
+ "tags": [
2332
+ "manufacturing",
2333
+ "maintenance",
2334
+ "equipment"
2335
+ ],
2336
+ "schedule": "0 7 * * 1",
2337
+ "timezone": "UTC",
2338
+ "runner": "shell",
2339
+ "modes": [
2340
+ "script"
2341
+ ],
2342
+ "compatible_agents": [
2343
+ "generic",
2344
+ "claude",
2345
+ "codex"
2346
+ ],
2347
+ "path": "jobs/manufacturing/preventive-maintenance-due-check.yaml"
2348
+ },
2081
2349
  {
2082
2350
  "id": "production-line-downtime-watch",
2083
2351
  "version": 1,
@@ -2174,6 +2442,30 @@
2174
2442
  ],
2175
2443
  "path": "jobs/devops/queue-depth-check.yaml"
2176
2444
  },
2445
+ {
2446
+ "id": "quota-attainment-check",
2447
+ "version": 1,
2448
+ "name": "Quota Attainment Check",
2449
+ "description": "Compares a rep's closed-won revenue this period against their quota pace and flags whether they're on track. Use this if a rep has ever found out they missed quota only at the end of the quarter, instead of with enough runway left to fix it.",
2450
+ "category": "sales",
2451
+ "tags": [
2452
+ "sales",
2453
+ "quota",
2454
+ "pipeline"
2455
+ ],
2456
+ "schedule": "0 8 * * 1",
2457
+ "timezone": "UTC",
2458
+ "runner": "shell",
2459
+ "modes": [
2460
+ "script"
2461
+ ],
2462
+ "compatible_agents": [
2463
+ "generic",
2464
+ "claude",
2465
+ "codex"
2466
+ ],
2467
+ "path": "jobs/sales/quota-attainment-check.yaml"
2468
+ },
2177
2469
  {
2178
2470
  "id": "reading-list-nudge",
2179
2471
  "version": 1,
@@ -2222,6 +2514,30 @@
2222
2514
  ],
2223
2515
  "path": "jobs/finance/recurring-payment-failure-check.yaml"
2224
2516
  },
2517
+ {
2518
+ "id": "rent-payment-late-check",
2519
+ "version": 1,
2520
+ "name": "Rent Payment Late Check",
2521
+ "description": "Flags tenants whose rent is overdue past the grace period. Use this if a late payment has ever gone unnoticed for weeks because nobody was cross-checking the rent roll against the bank deposits.",
2522
+ "category": "realestate",
2523
+ "tags": [
2524
+ "realestate",
2525
+ "rent",
2526
+ "payments"
2527
+ ],
2528
+ "schedule": "0 9 * * *",
2529
+ "timezone": "UTC",
2530
+ "runner": "shell",
2531
+ "modes": [
2532
+ "script"
2533
+ ],
2534
+ "compatible_agents": [
2535
+ "generic",
2536
+ "claude",
2537
+ "codex"
2538
+ ],
2539
+ "path": "jobs/realestate/rent-payment-late-check.yaml"
2540
+ },
2225
2541
  {
2226
2542
  "id": "rental-vacancy-check",
2227
2543
  "version": 1,
@@ -2273,6 +2589,30 @@
2273
2589
  ],
2274
2590
  "path": "jobs/devops/repo-health-check.yaml"
2275
2591
  },
2592
+ {
2593
+ "id": "report-card-deadline-reminder",
2594
+ "version": 1,
2595
+ "name": "Report Card Deadline Reminder",
2596
+ "description": "Warns you before the grade submission deadline for report cards. Use this if grades have ever gone in late because the cutoff snuck up during the last busy week of the term.",
2597
+ "category": "education",
2598
+ "tags": [
2599
+ "education",
2600
+ "grading",
2601
+ "deadlines"
2602
+ ],
2603
+ "schedule": "0 8 * * *",
2604
+ "timezone": "UTC",
2605
+ "runner": "shell",
2606
+ "modes": [
2607
+ "script"
2608
+ ],
2609
+ "compatible_agents": [
2610
+ "generic",
2611
+ "claude",
2612
+ "codex"
2613
+ ],
2614
+ "path": "jobs/education/report-card-deadline-reminder.yaml"
2615
+ },
2276
2616
  {
2277
2617
  "id": "reservation-noshow-check",
2278
2618
  "version": 1,
@@ -2517,6 +2857,32 @@
2517
2857
  ],
2518
2858
  "path": "jobs/content/seo-meta-check.yaml"
2519
2859
  },
2860
+ {
2861
+ "id": "seo-rank-drop-watch",
2862
+ "version": 1,
2863
+ "name": "SEO Keyword Rank Drop Watch",
2864
+ "description": "Checks a tracked keyword's search ranking and flags a real drop. Use this if a page has ever slipped off page one and nobody noticed until organic traffic was already down for weeks.",
2865
+ "category": "marketing",
2866
+ "tags": [
2867
+ "seo",
2868
+ "rankings",
2869
+ "marketing"
2870
+ ],
2871
+ "schedule": "0 8 * * 1",
2872
+ "timezone": "UTC",
2873
+ "runner": "agent-prompt",
2874
+ "modes": [
2875
+ "agent-prompt"
2876
+ ],
2877
+ "compatible_agents": [
2878
+ "claude",
2879
+ "codex",
2880
+ "hermes",
2881
+ "openclaw",
2882
+ "generic"
2883
+ ],
2884
+ "path": "jobs/marketing/seo-rank-drop-watch.yaml"
2885
+ },
2520
2886
  {
2521
2887
  "id": "shipment-delay-watch",
2522
2888
  "version": 1,
@@ -2565,6 +2931,30 @@
2565
2931
  ],
2566
2932
  "path": "jobs/content/sitemap-freshness-check.yaml"
2567
2933
  },
2934
+ {
2935
+ "id": "sla-breach-warning",
2936
+ "version": 1,
2937
+ "name": "SLA Breach Warning",
2938
+ "description": "Flags open tickets that are about to breach their SLA, before they actually do. Use this if a ticket has ever blown past its SLA with zero warning because the only check was after the fact.",
2939
+ "category": "support",
2940
+ "tags": [
2941
+ "support",
2942
+ "sla",
2943
+ "tickets"
2944
+ ],
2945
+ "schedule": "*/15 * * * *",
2946
+ "timezone": "UTC",
2947
+ "runner": "shell",
2948
+ "modes": [
2949
+ "script"
2950
+ ],
2951
+ "compatible_agents": [
2952
+ "generic",
2953
+ "claude",
2954
+ "codex"
2955
+ ],
2956
+ "path": "jobs/support/sla-breach-warning.yaml"
2957
+ },
2568
2958
  {
2569
2959
  "id": "smoke-detector-battery-check",
2570
2960
  "version": 1,
@@ -3106,6 +3496,30 @@
3106
3496
  ],
3107
3497
  "path": "jobs/fleet/vehicle-maintenance-due-check.yaml"
3108
3498
  },
3499
+ {
3500
+ "id": "vehicle-registration-expiry-check",
3501
+ "version": 1,
3502
+ "name": "Fleet Vehicle Registration Expiry Check",
3503
+ "description": "Warns you before a fleet vehicle's registration expires. Use this if a vehicle has ever gotten pulled over, or failed a job site check-in, because its registration quietly lapsed.",
3504
+ "category": "fleet",
3505
+ "tags": [
3506
+ "fleet",
3507
+ "registration",
3508
+ "compliance"
3509
+ ],
3510
+ "schedule": "0 8 1 * *",
3511
+ "timezone": "UTC",
3512
+ "runner": "shell",
3513
+ "modes": [
3514
+ "script"
3515
+ ],
3516
+ "compatible_agents": [
3517
+ "generic",
3518
+ "claude",
3519
+ "codex"
3520
+ ],
3521
+ "path": "jobs/fleet/vehicle-registration-expiry-check.yaml"
3522
+ },
3109
3523
  {
3110
3524
  "id": "vendor-payment-deadline-reminder",
3111
3525
  "version": 1,
@@ -3154,6 +3568,30 @@
3154
3568
  ],
3155
3569
  "path": "jobs/travel/visa-expiry-check.yaml"
3156
3570
  },
3571
+ {
3572
+ "id": "volunteer-hours-shortfall-check",
3573
+ "version": 1,
3574
+ "name": "Volunteer Hours Shortfall Check",
3575
+ "description": "Compares logged volunteer hours against a program's target and flags a shortfall. Use this if a program has ever fallen behind on a grant's volunteer-hour commitment without anyone noticing until the report was due.",
3576
+ "category": "nonprofit",
3577
+ "tags": [
3578
+ "nonprofit",
3579
+ "volunteers",
3580
+ "programs"
3581
+ ],
3582
+ "schedule": "0 9 1 * *",
3583
+ "timezone": "UTC",
3584
+ "runner": "shell",
3585
+ "modes": [
3586
+ "script"
3587
+ ],
3588
+ "compatible_agents": [
3589
+ "generic",
3590
+ "claude",
3591
+ "codex"
3592
+ ],
3593
+ "path": "jobs/nonprofit/volunteer-hours-shortfall-check.yaml"
3594
+ },
3157
3595
  {
3158
3596
  "id": "waf-rule-change-watch",
3159
3597
  "version": 1,
@@ -0,0 +1,31 @@
1
+ id: change-order-approval-reminder
2
+ version: 1
3
+ name: Change Order Approval Reminder
4
+ description: >
5
+ Flags change orders that have been waiting on client sign-off too long.
6
+ Use this if work has ever stalled, or gone ahead unapproved, because a
7
+ change order sat in someone's inbox for weeks.
8
+ category: construction
9
+ tags: [construction, change-orders, approvals]
10
+ schedule: "0 8 * * 1-5"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ awk -F, -v today="$today" -v warn={{stale_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 sent_ts; close(cmd);
19
+ days_waiting = int((today - sent_ts) / 86400);
20
+ if (days_waiting >= warn) print "WARNING: change order \"" $1 "\" pending " days_waiting " days (sent " $2 ")";
21
+ }
22
+ ' {{change_orders_csv}}
23
+ variables:
24
+ change_orders_csv:
25
+ default: "change-orders.csv"
26
+ description: "CSV with header row, columns: description,sent_date(YYYY-MM-DD),status(pending/approved/rejected)."
27
+ stale_days:
28
+ default: 5
29
+ description: Days pending before it's flagged for follow-up.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep change-orders.csv updated as change orders go out and come back signed.
@@ -0,0 +1,35 @@
1
+ id: crosspost-lag-check
2
+ version: 1
3
+ name: Crosspost Lag Check
4
+ description: >
5
+ Checks that content published on your primary platform actually got
6
+ mirrored to your other channels. Use this if a video or post has ever
7
+ gone up on YouTube and just never made it to the other platforms because
8
+ crossposting was manual and someone forgot.
9
+ category: creator
10
+ tags: [content, crosspost, publishing]
11
+ schedule: "0 10 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Compare recent uploads on {{primary_platform}} against what's been
16
+ posted on {{secondary_platforms}} over the last {{lookback_days}} days.
17
+ 1. List content published on {{primary_platform}} with no matching post
18
+ on one or more of {{secondary_platforms}} within {{max_lag_days}}
19
+ days of the original.
20
+ 2. Report each gap with the platform(s) missing it.
21
+ variables:
22
+ primary_platform:
23
+ default: "YouTube"
24
+ description: Your main publishing platform.
25
+ secondary_platforms:
26
+ default: "Instagram, TikTok, X"
27
+ description: Comma-separated list of platforms content should also land on.
28
+ lookback_days:
29
+ default: 14
30
+ description: How far back to check for crossposting gaps.
31
+ max_lag_days:
32
+ default: 3
33
+ description: Days after the original post before a missing crosspost counts as a gap.
34
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
35
+ notes: No generic script mode — checking multiple platform APIs and matching content across them needs an agent, not a fixed query.
@@ -0,0 +1,27 @@
1
+ id: report-card-deadline-reminder
2
+ version: 1
3
+ name: Report Card Deadline Reminder
4
+ description: >
5
+ Warns you before the grade submission deadline for report cards. Use
6
+ this if grades have ever gone in late because the cutoff snuck up
7
+ during the last busy week of the term.
8
+ category: education
9
+ tags: [education, grading, deadlines]
10
+ schedule: "0 8 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ due_ts=$(date -d "{{grades_due_date}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{grades_due_date}}" +%s);
16
+ days_left=$(( (due_ts - today) / 86400 ));
17
+ if [ "$days_left" -le "{{warn_days}}" ] && [ "$days_left" -ge 0 ]; then echo "WARNING: grades due in $days_left days ({{grades_due_date}})"; exit 1;
18
+ else echo "OK: grades due in $days_left days"; fi
19
+ variables:
20
+ grades_due_date:
21
+ default: "2026-12-15"
22
+ description: Grade submission deadline for this term (YYYY-MM-DD).
23
+ warn_days:
24
+ default: 5
25
+ description: Days before the deadline to start warning.
26
+ compatible_agents: [generic, claude, codex]
27
+ notes: Manual grades_due_date input — update it each term based on the school's academic calendar.
@@ -0,0 +1,31 @@
1
+ id: event-budget-overrun-check
2
+ version: 1
3
+ name: Event Budget Overrun Check
4
+ description: >
5
+ Compares committed spend so far against the event budget and flags
6
+ overrun risk. Use this if an event has ever come in over budget because
7
+ nobody totaled up the vendor contracts until after the fact.
8
+ category: events
9
+ tags: [events, budget, planning]
10
+ schedule: "0 9 * * 1"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ spent=$(awk -F, 'NR>1 {sum+=$2} END {print sum+0}' {{expenses_csv}});
15
+ budget={{budget_usd}};
16
+ if awk "BEGIN{exit !($spent >= $budget * {{warn_pct}} / 100)}"; then
17
+ echo "WARNING: committed spend \$$spent has hit ${warn_pct:-{{warn_pct}}}% of \$$budget budget";
18
+ exit 1;
19
+ else echo "OK: committed spend \$$spent of \$$budget budget"; fi
20
+ variables:
21
+ expenses_csv:
22
+ default: "event-expenses.csv"
23
+ description: "CSV with header row, columns: line_item,amount."
24
+ budget_usd:
25
+ default: 10000
26
+ description: Total event budget in USD.
27
+ warn_pct:
28
+ default: 90
29
+ description: Percent of budget committed before it's flagged.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep event-expenses.csv updated as vendor contracts and deposits are committed, not just when invoices arrive.