@wonsukchoi/crondex 0.21.0 → 0.22.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 (92) hide show
  1. package/README.md +16 -30
  2. package/catalog.json +2294 -26
  3. package/jobs/ecommerce/affiliate-commission-payout-check.yaml +38 -0
  4. package/jobs/ecommerce/back-in-stock-notification-backlog-check.yaml +30 -0
  5. package/jobs/ecommerce/bundle-component-stock-mismatch-check.yaml +37 -0
  6. package/jobs/ecommerce/chargeback-fraud-risk-order-review.yaml +43 -0
  7. package/jobs/ecommerce/competitor-price-watch.yaml +60 -0
  8. package/jobs/ecommerce/economic-nexus-threshold-check.yaml +43 -0
  9. package/jobs/ecommerce/failed-payment-dunning-check.yaml +35 -0
  10. package/jobs/ecommerce/marketplace-listing-sync-drift-check.yaml +48 -0
  11. package/jobs/ecommerce/product-feed-health-check.yaml +35 -0
  12. package/jobs/ecommerce/purchase-order-overdue-check.yaml +32 -0
  13. package/jobs/ecommerce/storefront-ssl-domain-expiry-check.yaml +46 -0
  14. package/jobs/ecommerce/vip-tier-reclassification-check.yaml +55 -0
  15. package/jobs/ecommerce/wishlist-abandonment-check.yaml +37 -0
  16. package/jobs/finance/accounts-payable-aging-check.yaml +40 -0
  17. package/jobs/finance/bank-statement-reconciliation-check.yaml +40 -0
  18. package/jobs/finance/budget-vs-actual-variance-report.yaml +38 -0
  19. package/jobs/finance/contractor-1099-threshold-tracker.yaml +43 -0
  20. package/jobs/finance/credit-utilization-watch.yaml +40 -0
  21. package/jobs/finance/duplicate-payment-detection.yaml +43 -0
  22. package/jobs/finance/expense-report-compliance-check.yaml +46 -0
  23. package/jobs/finance/late-fee-interest-risk-check.yaml +43 -0
  24. package/jobs/finance/loan-covenant-compliance-check.yaml +37 -0
  25. package/jobs/finance/month-end-close-checklist-tracker.yaml +39 -0
  26. package/jobs/finance/multi-account-cash-position-rollup.yaml +45 -0
  27. package/jobs/finance/petty-cash-float-reconciliation.yaml +43 -0
  28. package/jobs/finance/quarterly-estimated-tax-calculator.yaml +66 -0
  29. package/jobs/finance/vendor-early-pay-discount-tracker.yaml +45 -0
  30. package/jobs/healthcare/appointment-slot-utilization-check.yaml +56 -0
  31. package/jobs/healthcare/claims-denial-resubmission-check.yaml +43 -0
  32. package/jobs/healthcare/clinical-supply-low-stock-check.yaml +30 -0
  33. package/jobs/healthcare/controlled-substance-inventory-reconciliation.yaml +42 -0
  34. package/jobs/healthcare/hipaa-access-log-audit.yaml +74 -0
  35. package/jobs/healthcare/patient-balance-collections-aging-check.yaml +41 -0
  36. package/jobs/healthcare/patient-immunization-schedule-check.yaml +41 -0
  37. package/jobs/healthcare/patient-portal-message-backlog-check.yaml +39 -0
  38. package/jobs/healthcare/patient-satisfaction-survey-tracking.yaml +59 -0
  39. package/jobs/healthcare/prescription-refill-request-backlog-check.yaml +38 -0
  40. package/jobs/healthcare/prior-authorization-expiry-check.yaml +53 -0
  41. package/jobs/healthcare/staff-cme-credit-tracking.yaml +41 -0
  42. package/jobs/healthcare/telehealth-session-issue-check.yaml +51 -0
  43. package/jobs/hr/aca-fte-threshold-monitor.yaml +44 -0
  44. package/jobs/hr/cobra-notification-deadline-tracker.yaml +47 -0
  45. package/jobs/hr/compliance-training-completion-check.yaml +41 -0
  46. package/jobs/hr/eeo1-filing-deadline-reminder.yaml +37 -0
  47. package/jobs/hr/handbook-acknowledgment-tracking.yaml +34 -0
  48. package/jobs/hr/headcount-budget-variance-check.yaml +37 -0
  49. package/jobs/hr/leave-of-absence-return-tracker.yaml +42 -0
  50. package/jobs/hr/org-chart-manager-drift-check.yaml +40 -0
  51. package/jobs/hr/pay-equity-band-outlier-check.yaml +58 -0
  52. package/jobs/hr/pto-year-end-use-it-or-lose-it-check.yaml +49 -0
  53. package/jobs/hr/retirement-plan-enrollment-deadline-check.yaml +40 -0
  54. package/jobs/hr/workers-comp-claim-status-check.yaml +42 -0
  55. package/jobs/legal/conflict-of-interest-check-tracker.yaml +38 -0
  56. package/jobs/legal/corporate-minute-book-completeness-check.yaml +31 -0
  57. package/jobs/legal/data-privacy-request-deadline-tracker.yaml +61 -0
  58. package/jobs/legal/entity-authority-document-expiry-check.yaml +37 -0
  59. package/jobs/legal/legal-document-retention-purge-review.yaml +39 -0
  60. package/jobs/legal/litigation-hold-acknowledgment-tracker.yaml +40 -0
  61. package/jobs/legal/non-compete-expiry-tracker.yaml +37 -0
  62. package/jobs/legal/outside-counsel-invoice-budget-check.yaml +37 -0
  63. package/jobs/legal/settlement-payment-schedule-tracker.yaml +34 -0
  64. package/jobs/legal/timekeeper-billable-hours-compliance-check.yaml +39 -0
  65. package/jobs/legal/trademark-infringement-watch.yaml +43 -0
  66. package/jobs/legal/vendor-coi-expiry-tracker.yaml +37 -0
  67. package/jobs/realestate/capital-reserve-fund-threshold-check.yaml +32 -0
  68. package/jobs/realestate/eviction-notice-deadline-tracker.yaml +37 -0
  69. package/jobs/realestate/landlord-insurance-claim-status-check.yaml +35 -0
  70. package/jobs/realestate/lease-renewal-offer-window-check.yaml +35 -0
  71. package/jobs/realestate/maintenance-request-sla-check.yaml +39 -0
  72. package/jobs/realestate/move-in-move-out-inspection-tracker.yaml +35 -0
  73. package/jobs/realestate/rent-increase-notice-deadline-check.yaml +54 -0
  74. package/jobs/realestate/rent-roll-vacancy-loss-report.yaml +32 -0
  75. package/jobs/realestate/rental-license-renewal-check.yaml +35 -0
  76. package/jobs/realestate/security-deposit-return-deadline-check.yaml +38 -0
  77. package/jobs/realestate/tenant-application-review-backlog-check.yaml +35 -0
  78. package/jobs/realestate/tenant-renters-insurance-compliance-check.yaml +35 -0
  79. package/jobs/realestate/utility-billback-reconciliation-check.yaml +41 -0
  80. package/jobs/sales/champion-departure-watch.yaml +44 -0
  81. package/jobs/sales/closed-lost-reason-audit.yaml +42 -0
  82. package/jobs/sales/commission-payout-tracker.yaml +32 -0
  83. package/jobs/sales/contract-renewal-opportunity-tracker.yaml +28 -0
  84. package/jobs/sales/discount-approval-pending-check.yaml +31 -0
  85. package/jobs/sales/forecast-submission-compliance-check.yaml +42 -0
  86. package/jobs/sales/multi-year-renewal-escalation-tracker.yaml +31 -0
  87. package/jobs/sales/pipeline-hygiene-audit.yaml +26 -0
  88. package/jobs/sales/poc-trial-conversion-tracker.yaml +29 -0
  89. package/jobs/sales/referral-followup-tracker.yaml +40 -0
  90. package/jobs/sales/territory-coverage-gap-check.yaml +43 -0
  91. package/lib/duplicates-allowlist.js +5 -0
  92. package/package.json +2 -2
@@ -0,0 +1,37 @@
1
+ id: eeo1-filing-deadline-reminder
2
+ version: 1
3
+ name: EEO-1 Filing Deadline Reminder
4
+ description: >
5
+ Counts down to the annual EEO-1 component filing deadline so data
6
+ collection and submission don't get rushed at the last minute. Use this
7
+ if the EEO-1 window has ever snuck up because it only comes around once
8
+ a year and nobody put it on a recurring calendar.
9
+ category: hr
10
+ tags: [hr, eeo1, compliance, filing, deadline]
11
+ schedule: "0 9 * * *"
12
+ timezone: "America/New_York"
13
+ runner: shell
14
+ command: >
15
+ today_epoch=$(date +%s);
16
+ deadline_epoch=$(date -d "{{filing_deadline}}" +%s 2>/dev/null || date -j -f %Y-%m-%d "{{filing_deadline}}" +%s);
17
+ days_left=$(( (deadline_epoch - today_epoch) / 86400 ));
18
+ if [ "$days_left" -lt 0 ]; then
19
+ echo "note: this cycle's EEO-1 deadline ({{filing_deadline}}) has passed — update filing_deadline for next year's cycle.";
20
+ elif [ "$days_left" -le {{warn_days_before}} ]; then
21
+ echo "EEO-1 FILING DUE: $days_left day(s) until deadline ({{filing_deadline}}). Confirm workforce snapshot data and file via the EEOC portal.";
22
+ else
23
+ echo "OK: $days_left day(s) until EEO-1 filing deadline ({{filing_deadline}}).";
24
+ fi
25
+ variables:
26
+ filing_deadline:
27
+ default: "YYYY-MM-DD"
28
+ description: This cycle's EEO-1 Component 1 filing deadline, published annually by the EEOC — update each cycle.
29
+ warn_days_before:
30
+ default: 30
31
+ description: How many days before the deadline to start reminding.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: >
34
+ Only applies to employers required to file (generally 100+ employees, or
35
+ federal contractors meeting lower thresholds) — confirm your filing
36
+ obligation and the current cycle's exact deadline on the EEOC's site
37
+ rather than assuming last year's date still applies.
@@ -0,0 +1,34 @@
1
+ id: handbook-acknowledgment-tracking
2
+ version: 1
3
+ name: Employee Handbook Acknowledgment Tracking
4
+ description: >
5
+ Checks the full roster against the current handbook version and flags
6
+ anyone who hasn't signed off on it yet — including existing employees
7
+ after a handbook update, not just new hires. Use this if a handbook
8
+ revision has ever gone out and only a fraction of the company actually
9
+ acknowledged it, which nobody discovered until it mattered in a dispute.
10
+ category: hr
11
+ tags: [hr, handbook, compliance, policy]
12
+ schedule: "0 8 1 * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v current="{{current_handbook_version}}" '
17
+ NR==1 {next}
18
+ $2 != current {
19
+ printf "NOT ACKNOWLEDGED: %s — on file for v%s, current is v%s\n", $1, ($2 == "" ? "none" : $2), current;
20
+ }
21
+ ' "{{handbook_ack_csv_path}}"
22
+ variables:
23
+ handbook_ack_csv_path:
24
+ default: "./handbook-acknowledgments.csv"
25
+ description: "Path to a CSV with columns: employee_name,acknowledged_version (blank if never acknowledged any version)."
26
+ current_handbook_version:
27
+ default: "2026.1"
28
+ description: Version label of the currently effective handbook, updated whenever a new revision goes out.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: >
31
+ Assumes a maintained acknowledgment export covering the whole roster.
32
+ Distinct from new-hire-paperwork-check, which bundles the initial
33
+ handbook sign-off into a new hire's first-30-days checklist rather than
34
+ tracking re-acknowledgment across the whole company after updates.
@@ -0,0 +1,37 @@
1
+ id: headcount-budget-variance-check
2
+ version: 1
3
+ name: Headcount vs. Budget Variance Check
4
+ description: >
5
+ Compares actual headcount per department against the planned/budgeted
6
+ headcount and flags departments that are over or under plan. Use this
7
+ if a department has ever quietly overhired (or sat understaffed) for a
8
+ quarter before finance and HR compared notes and noticed.
9
+ category: hr
10
+ tags: [hr, headcount, budget, finance, planning]
11
+ schedule: "0 9 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v threshold="{{variance_threshold}}" '
16
+ NR==1 {next}
17
+ {
18
+ variance = $3 - $2;
19
+ abs_variance = (variance < 0 ? -variance : variance);
20
+ if (abs_variance >= threshold) {
21
+ direction = (variance > 0 ? "OVER PLAN" : "UNDER PLAN");
22
+ printf "%s: %s — budgeted %d, actual %d (variance %+d)\n", direction, $1, $2, $3, variance;
23
+ }
24
+ }
25
+ ' "{{headcount_budget_csv_path}}"
26
+ variables:
27
+ headcount_budget_csv_path:
28
+ default: "./headcount-budget.csv"
29
+ description: "Path to a CSV with columns: department,budgeted_headcount,actual_headcount."
30
+ variance_threshold:
31
+ default: 2
32
+ description: Minimum absolute headcount variance (in people) before a department is flagged.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: >
35
+ Assumes a maintained monthly export reconciling the HRIS actual
36
+ headcount against finance's approved plan by department. Zero-token —
37
+ no synthesis or interpretation beyond the raw variance.
@@ -0,0 +1,42 @@
1
+ id: leave-of-absence-return-tracker
2
+ version: 1
3
+ name: Leave of Absence Return Tracker
4
+ description: >
5
+ Tracks employees on FMLA, parental, medical, or other formal leave and
6
+ flags upcoming or overdue return dates. Use this if a return-to-work
7
+ date has ever been missed — either the team wasn't ready for someone
8
+ coming back, or nobody noticed an expected return date came and went
9
+ with no check-in.
10
+ category: hr
11
+ tags: [hr, leave-of-absence, fmla, parental-leave, compliance]
12
+ schedule: "0 8 * * 1-5"
13
+ timezone: "America/New_York"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v warn="{{warn_days_before}}" '
18
+ NR==1 {next}
19
+ $4 != "active" {next}
20
+ {
21
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
22
+ cmd | getline return_epoch; close(cmd);
23
+ diff_days = (return_epoch - today) / 86400;
24
+ if (diff_days < 0) {
25
+ printf "OVERDUE RETURN: %s — %s leave, expected back %s (%d day(s) past, still marked active)\n", $1, $2, $3, -diff_days;
26
+ } else if (diff_days <= warn) {
27
+ printf "RETURN UPCOMING: %s — %s leave, expected back %s (%d day(s))\n", $1, $2, $3, diff_days;
28
+ }
29
+ }
30
+ ' "{{leave_tracking_csv_path}}"
31
+ variables:
32
+ leave_tracking_csv_path:
33
+ default: "./leave-of-absence-tracking.csv"
34
+ description: "Path to a CSV with columns: employee_name,leave_type,expected_return_date (YYYY-MM-DD),status (active/returned)."
35
+ warn_days_before:
36
+ default: 10
37
+ description: How many days before the expected return date to start flagging as upcoming.
38
+ compatible_agents: [generic, claude, codex]
39
+ notes: >
40
+ Assumes a maintained export from HR/leave-administration tracking active
41
+ leaves; this is the backstop that flags dates, not a substitute for
42
+ legally required FMLA/state-leave notices or interactive-process steps.
@@ -0,0 +1,40 @@
1
+ id: org-chart-manager-drift-check
2
+ version: 1
3
+ name: Org Chart Manager Drift Check
4
+ description: >
5
+ Compares the manager field in the HRIS against a separately maintained
6
+ org-chart source of truth and flags mismatches. Use this if the
7
+ "reports to" field has ever gone stale after a reorg, leaving reviews,
8
+ approvals, or reminders routed to someone's old manager for months.
9
+ category: hr
10
+ tags: [hr, org-chart, data-quality, hris]
11
+ schedule: "0 8 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' '
16
+ NR==FNR {
17
+ if (FNR>1) hris_mgr[$1]=$2;
18
+ next;
19
+ }
20
+ FNR==1 {next}
21
+ {
22
+ if (($1 in hris_mgr) && hris_mgr[$1] != $2) {
23
+ printf "MANAGER DRIFT: %s — HRIS says \"%s\", org chart says \"%s\"\n", $1, hris_mgr[$1], $2;
24
+ } else if (!($1 in hris_mgr)) {
25
+ printf "MISSING FROM HRIS: %s — in org chart reporting to \"%s\" but not found in HRIS export\n", $1, $2;
26
+ }
27
+ }
28
+ ' "{{hris_manager_csv_path}}" "{{org_chart_csv_path}}"
29
+ variables:
30
+ hris_manager_csv_path:
31
+ default: "./hris-manager-export.csv"
32
+ description: "Path to a CSV export from the HRIS with columns: employee_name,manager_name."
33
+ org_chart_csv_path:
34
+ default: "./org-chart-source.csv"
35
+ description: "Path to a CSV from your org-chart source of truth (e.g. an org-design tool or a maintained spreadsheet) with columns: employee_name,manager_name."
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: >
38
+ Matches purely on employee_name strings — dedupe/normalize names (or
39
+ swap in employee IDs) before relying on this for a large or
40
+ name-collision-prone roster.
@@ -0,0 +1,58 @@
1
+ id: pay-equity-band-outlier-check
2
+ version: 1
3
+ name: Pay Equity Band Outlier Check
4
+ description: >
5
+ Scans a salary-band export for employees paid outside their role's band
6
+ or unusually far from the band midpoint, and summarizes any patterns
7
+ worth a closer look. Use this if pay outliers have ever gone unnoticed
8
+ for a review cycle simply because nobody cross-checked salaries against
9
+ bands until an audit or a pay-equity complaint forced the issue.
10
+ category: hr
11
+ tags: [hr, pay-equity, compensation, compliance]
12
+ schedule: "0 9 1 1,4,7,10 *"
13
+ timezone: "UTC"
14
+ runner: hybrid
15
+ command: >
16
+ awk -F',' -v tol="{{tolerance_pct}}" '
17
+ NR==1 {next}
18
+ {
19
+ band_min=$3; band_max=$4; salary=$5;
20
+ low_bound = band_min * (1 - tol/100);
21
+ high_bound = band_max * (1 + tol/100);
22
+ if (salary < low_bound) {
23
+ printf "BELOW BAND: %s (%s) — $%d vs band $%d-$%d\n", $1, $2, salary, band_min, band_max;
24
+ } else if (salary > high_bound) {
25
+ printf "ABOVE BAND: %s (%s) — $%d vs band $%d-$%d\n", $1, $2, salary, band_min, band_max;
26
+ }
27
+ }
28
+ ' "{{salary_band_csv_path}}"
29
+ prompt: |
30
+ Run the outlier check above against {{salary_band_csv_path}} (columns:
31
+ employee_name, role, band_min, band_max, current_salary). Using the
32
+ BELOW BAND / ABOVE BAND lines it produces:
33
+ 1. Group outliers by role/level and note any pattern (e.g. one role
34
+ consistently under band, one department skewing above).
35
+ 2. Do not draw conclusions about protected-class pay gaps — this export
36
+ has no demographic data. Just flag the raw outliers and patterns for
37
+ HR/legal to review with proper pay-equity analysis tooling.
38
+ 3. Summarize as a short list HR can triage, ranked by how far outside
39
+ the band each person is.
40
+ script_note: >
41
+ The command gives you the raw list of employees outside their band for
42
+ free. The prompt adds pattern-level grouping (by role/department) to
43
+ help HR prioritize triage — it does not perform statistical pay-equity
44
+ analysis or draw demographic conclusions.
45
+ variables:
46
+ salary_band_csv_path:
47
+ default: "./salary-bands.csv"
48
+ description: "Path to an anonymized/exported CSV with columns: employee_name,role,band_min,band_max,current_salary. No demographic fields."
49
+ tolerance_pct:
50
+ default: 0
51
+ description: Percent tolerance outside the band before flagging (0 = flag anything strictly outside min/max).
52
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
53
+ notes: >
54
+ This is a band-boundary check, not a statistical pay-equity or
55
+ disparate-impact analysis — it deliberately excludes demographic data.
56
+ Route real pay-equity audits through legal counsel and proper
57
+ statistical tooling. Assumes an already-exported salary-band CSV rather
58
+ than live comp-system access.
@@ -0,0 +1,49 @@
1
+ id: pto-year-end-use-it-or-lose-it-check
2
+ version: 1
3
+ name: Company-Wide PTO Use-It-or-Lose-It Check
4
+ description: >
5
+ Scans the full employee roster for anyone whose unused PTO balance is
6
+ above the policy cap or won't be usable before the year-end reset, so
7
+ HR/payroll can send a bulk nudge. Use this if payout or forfeiture
8
+ disputes have ever come up in December because nobody flagged high
9
+ balances company-wide until it was too late to schedule time off. This
10
+ is the HR-wide roster check — for tracking just your own balance, use
11
+ team/pto-balance-check instead.
12
+ category: hr
13
+ tags: [hr, pto, vacation, compliance, payroll]
14
+ schedule: "0 9 1 10,11,12 *"
15
+ timezone: "America/New_York"
16
+ runner: shell
17
+ command: >
18
+ today_epoch=$(date +%s);
19
+ cutoff_epoch=$(date -d "{{year_end_date}}" +%s 2>/dev/null || date -j -f %Y-%m-%d "{{year_end_date}}" +%s);
20
+ days_left=$(( (cutoff_epoch - today_epoch) / 86400 ));
21
+ awk -F',' -v cap="{{cap_hours}}" -v days_left="$days_left" -v warn="{{warn_days_before}}" '
22
+ NR==1 {next}
23
+ {
24
+ if ($2 > cap) {
25
+ printf "OVER CAP: %s — %s hours unused (cap %s)\n", $1, $2, cap;
26
+ } else if (days_left <= warn && $2 > 0) {
27
+ printf "USE-IT-OR-LOSE-IT: %s — %s hours unused, %d day(s) until year-end reset (%s)\n", $1, $2, days_left, "{{year_end_date}}";
28
+ }
29
+ }
30
+ ' "{{pto_roster_csv_path}}"
31
+ variables:
32
+ pto_roster_csv_path:
33
+ default: "./pto-balances.csv"
34
+ description: "Path to a CSV export with columns: employee_name,pto_balance_hours."
35
+ cap_hours:
36
+ default: 80
37
+ description: Company policy cap on unused PTO hours, above which balances are flagged regardless of date.
38
+ year_end_date:
39
+ default: "2026-12-31"
40
+ description: Date (YYYY-MM-DD) unused PTO resets or is forfeited under company policy.
41
+ warn_days_before:
42
+ default: 45
43
+ description: How many days before year_end_date to start flagging nonzero balances.
44
+ compatible_agents: [generic, claude, codex]
45
+ notes: >
46
+ Assumes a maintained roster export from payroll/HRIS with current PTO
47
+ balances for every employee. Distinct from team/pto-balance-check,
48
+ which is a single self-maintained personal reminder, not a company-wide
49
+ audit.
@@ -0,0 +1,40 @@
1
+ id: retirement-plan-enrollment-deadline-check
2
+ version: 1
3
+ name: Retirement Plan Enrollment Deadline Check
4
+ description: >
5
+ Flags employees who are eligible for the 401(k)/retirement plan but
6
+ haven't enrolled or waived as their enrollment deadline approaches. Use
7
+ this if someone has ever missed the window to make an active election
8
+ and got dropped into a default auto-enrollment deferral rate they didn't
9
+ actually want.
10
+ category: hr
11
+ tags: [hr, retirement, 401k, benefits, deadline]
12
+ schedule: "0 8 * * 1"
13
+ timezone: "America/New_York"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v days="{{warn_days_before}}" '
17
+ NR==1 {next}
18
+ $4 != "" {next}
19
+ {
20
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
21
+ cmd | getline due_epoch; close(cmd);
22
+ "date +%s" | getline now_epoch; close("date +%s");
23
+ diff_days = (due_epoch - now_epoch) / 86400;
24
+ if (diff_days <= days) {
25
+ printf "ENROLLMENT DEADLINE: %s — eligible since %s, deadline %s (%d days), no election on file\n", $1, $2, $3, diff_days;
26
+ }
27
+ }
28
+ ' "{{retirement_tracking_csv_path}}"
29
+ variables:
30
+ retirement_tracking_csv_path:
31
+ default: "./retirement-plan-tracking.csv"
32
+ description: "Path to a CSV with columns: employee_name,eligibility_date (YYYY-MM-DD),enrollment_deadline (YYYY-MM-DD),election_status (enrolled/waived, blank if no election yet)."
33
+ warn_days_before:
34
+ default: 14
35
+ description: How many days before the enrollment deadline to start warning.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: >
38
+ Many plans auto-enroll non-responders at a default deferral rate after
39
+ the deadline rather than defaulting to no contribution — confirm your
40
+ plan document's actual default behavior rather than assuming.
@@ -0,0 +1,42 @@
1
+ id: workers-comp-claim-status-check
2
+ version: 1
3
+ name: Workers' Comp Claim Status Check
4
+ description: >
5
+ Checks open workers' compensation claims with the carrier and flags ones
6
+ that have gone quiet or are approaching an expected return-to-work date
7
+ with no update. Use this if an injured employee's claim has ever
8
+ stalled with the carrier for weeks with nobody at the company noticing
9
+ or following up.
10
+ category: hr
11
+ tags: [hr, workers-comp, compliance, safety]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: agent-prompt
15
+ prompt: |
16
+ Check {{wc_carrier}} for open workers' compensation claims and
17
+ cross-reference against {{hris_system}} for each claimant's expected
18
+ return-to-work date, if any.
19
+ 1. List each open claim: employee name, date of injury, days since last
20
+ status update, and expected return date (if set).
21
+ 2. Flag any claim with no status update in the last {{stale_days}} days,
22
+ or with a return date within {{escalate_within_days}} days and no
23
+ recent update, as needing a follow-up call with the carrier.
24
+ 3. If everything is progressing normally, say so in one line.
25
+ variables:
26
+ wc_carrier:
27
+ default: "your workers' compensation carrier/TPA"
28
+ description: Where claim status is tracked (the insurance carrier or third-party administrator portal).
29
+ hris_system:
30
+ default: "your HRIS"
31
+ description: Where employee return-to-work dates and leave status are recorded.
32
+ stale_days:
33
+ default: 14
34
+ description: Days with no status update before a claim is flagged as stalled.
35
+ escalate_within_days:
36
+ default: 7
37
+ description: Days before an expected return date at which a claim with no recent update becomes urgent.
38
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
39
+ notes: >
40
+ Read-only status check — actually contacting the carrier, adjusting
41
+ duties, or making return-to-work decisions is for HR/legal/safety to
42
+ handle. No generic script mode since carrier portals vary widely.
@@ -0,0 +1,38 @@
1
+ id: conflict-of-interest-check-tracker
2
+ version: 1
3
+ name: Conflict-of-Interest Check Tracker
4
+ description: >
5
+ Checks new matters or clients waiting on a conflict-of-interest clearance
6
+ and flags any that have sat unresolved past a set number of days. Use
7
+ this if a new engagement has ever started before the conflicts check
8
+ actually cleared, because the request got sent and then forgotten.
9
+ category: legal
10
+ tags: [legal, conflicts-check, intake, compliance]
11
+ schedule: "0 9 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{overdue_days}}" '
16
+ NR==1 {next}
17
+ $4 == "pending" {
18
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
19
+ cmd | getline requested_epoch; close(cmd);
20
+ "date +%s" | getline now_epoch; close("date +%s");
21
+ pending_days = (now_epoch - requested_epoch) / 86400;
22
+ if (pending_days >= days) {
23
+ printf "CONFLICTS CHECK PENDING: %s (matter: %s) — requested %s (%d days ago)\n", $1, $2, $3, pending_days;
24
+ }
25
+ }
26
+ ' "{{conflicts_csv_path}}"
27
+ variables:
28
+ conflicts_csv_path:
29
+ default: "./conflict-checks.csv"
30
+ description: "Path to a CSV with columns: client_or_matter_name,proposed_matter,check_requested_date (YYYY-MM-DD),status (pending/cleared/conflict-identified)."
31
+ overdue_days:
32
+ default: 2
33
+ description: Days a conflicts check can remain pending before it's flagged.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ This tracks whether a conflicts check was run and resolved before
37
+ engagement start — it does not run the conflicts search itself, which
38
+ depends on your practice management/conflicts database.
@@ -0,0 +1,31 @@
1
+ id: corporate-minute-book-completeness-check
2
+ version: 1
3
+ name: Corporate Minute Book Completeness Check
4
+ description: >
5
+ Checks the corporate minute book against the list of resolutions and
6
+ actions that should be documented for the year and flags anything
7
+ missing. Use this if a board resolution or annual consent has ever been
8
+ discussed and acted on but never actually got written up and filed in
9
+ the minute book, which surfaces at the worst time — due diligence for
10
+ a financing or sale.
11
+ category: legal
12
+ tags: [legal, corporate-governance, board-resolutions, minute-book]
13
+ schedule: "0 9 1 1,4,7,10 *"
14
+ timezone: "UTC"
15
+ runner: shell
16
+ command: >
17
+ awk -F',' '
18
+ NR==1 {next}
19
+ $4 == "no" {
20
+ printf "MISSING FROM MINUTE BOOK: %s — %s (required by %s, not yet filed)\n", $1, $2, $3;
21
+ }
22
+ ' "{{minute_book_checklist_csv_path}}"
23
+ variables:
24
+ minute_book_checklist_csv_path:
25
+ default: "./minute-book-checklist.csv"
26
+ description: "Path to a CSV with columns: item_id,description (e.g. 'annual board consent', 'officer appointment resolution'),required_by_date (YYYY-MM-DD or a plain label like 'Q2'),filed (yes/no)."
27
+ compatible_agents: [generic, claude, codex]
28
+ notes: >
29
+ Assumes someone maintains the checklist whenever a resolution, consent,
30
+ or corporate action is decided — this only checks whether the paper
31
+ trail is complete, it doesn't draft the resolutions themselves.
@@ -0,0 +1,61 @@
1
+ id: data-privacy-request-deadline-tracker
2
+ version: 1
3
+ name: Data Privacy Request (GDPR/CCPA) Deadline Tracker
4
+ description: >
5
+ Flags open data subject access/deletion requests approaching their
6
+ statutory response deadline and drafts a status summary for whoever
7
+ owns the response. Use this if a GDPR or CCPA-style privacy request has
8
+ ever come uncomfortably close to its response window because tracking
9
+ it lived in someone's inbox instead of a real deadline list.
10
+ category: legal
11
+ tags: [legal, data-privacy, gdpr, ccpa, deadline]
12
+ schedule: "0 8 * * *"
13
+ timezone: "UTC"
14
+ runner: hybrid
15
+ command: >
16
+ awk -F',' -v days="{{warn_days_before}}" '
17
+ NR==1 {next}
18
+ $5 == "open" {
19
+ cmd = "date -d \"" $4 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $4 "\" +%s 2>/dev/null";
20
+ cmd | getline due_epoch; close(cmd);
21
+ "date +%s" | getline now_epoch; close("date +%s");
22
+ diff_days = (due_epoch - now_epoch) / 86400;
23
+ if (diff_days <= days) {
24
+ printf "PRIVACY REQUEST DUE: %s — %s request, due %s (%d days)\n", $1, $2, $4, diff_days;
25
+ }
26
+ }
27
+ ' "{{privacy_requests_csv_path}}"
28
+ prompt: |
29
+ Here is the raw list of open data privacy requests approaching their
30
+ deadline (from the shell check): {{command_output}}. For each one:
31
+ 1. Note the request type ({{request_types_hint}}) and which regulation's
32
+ clock applies (e.g. GDPR's ~30-day window, CCPA's 45-day window).
33
+ 2. Flag anything with fewer than {{urgent_within_days}} days left as
34
+ urgent and needing an owner today.
35
+ 3. Draft a short status update summarizing what's open, what's urgent,
36
+ and who should act next, suitable for pasting into a privacy/legal
37
+ ops channel.
38
+ variables:
39
+ privacy_requests_csv_path:
40
+ default: "./data-privacy-requests.csv"
41
+ description: "Path to a CSV with columns: request_id,request_type (access/deletion/correction/opt-out),regulation (gdpr/ccpa/other),response_due_date (YYYY-MM-DD),status (open/closed)."
42
+ warn_days_before:
43
+ default: 7
44
+ description: Days before the statutory response deadline to start flagging.
45
+ urgent_within_days:
46
+ default: 2
47
+ description: Days left at which an open request becomes urgent in the drafted summary.
48
+ request_types_hint:
49
+ default: "access, deletion, correction, or opt-out of sale"
50
+ description: Short reminder of the request categories your intake form uses.
51
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
52
+ script_note: >
53
+ The shell command gives a zero-token list of requests inside the warning
54
+ window from date math alone; the prompt adds regulation-specific
55
+ framing and a drafted, prioritized summary a non-lawyer can act on
56
+ without re-reading each row.
57
+ notes: >
58
+ Actual statutory deadlines, extensions, and exceptions vary by
59
+ regulation and request type — confirm with privacy counsel. This is a
60
+ tracking and drafting aid, not a substitute for legal review of any
61
+ individual request.
@@ -0,0 +1,37 @@
1
+ id: entity-authority-document-expiry-check
2
+ version: 1
3
+ name: Entity Authority Document Expiry Check
4
+ description: >
5
+ Warns before a power of attorney, corporate signing-authority
6
+ certificate, or other entity-authority document reaches its expiration
7
+ date. Use this if a bank, counterparty, or government office has ever
8
+ rejected a signature because the power of attorney or authority
9
+ certificate backing it had quietly expired.
10
+ category: legal
11
+ tags: [legal, power-of-attorney, corporate-authority, compliance]
12
+ schedule: "0 9 1 * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F, -v today="$today" -v warn={{warn_days}} '
18
+ NR>1 {
19
+ cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
20
+ cmd | getline exp_ts; close(cmd);
21
+ days_left = int((exp_ts - today) / 86400);
22
+ if (days_left <= warn) print "WARNING: \"" $1 "\" (" $2 ") expires in " days_left " days (" $3 ")";
23
+ }
24
+ ' {{authority_docs_csv}}
25
+ variables:
26
+ authority_docs_csv:
27
+ default: "entity-authority-documents.csv"
28
+ description: "CSV with header row, columns: document_name,document_type (e.g. power-of-attorney, signing-authority-certificate),expiry_date(YYYY-MM-DD)."
29
+ warn_days:
30
+ default: 45
31
+ description: Days before expiry to start warning.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: >
34
+ Distinct from `business-license-renewal-check` (operating licenses/permits)
35
+ — this tracks documents that grant someone authority to act or sign on
36
+ the entity's behalf. Update the CSV whenever an authority document is
37
+ issued, renewed, or revoked.
@@ -0,0 +1,39 @@
1
+ id: legal-document-retention-purge-review
2
+ version: 1
3
+ name: Legal Document Retention Purge Review
4
+ description: >
5
+ Checks contracts and legal documents against their retention schedule
6
+ and flags anything past its retention period as eligible for archival
7
+ or destruction review. Use this if signed contracts and legal files
8
+ have ever piled up indefinitely because nobody was checking them
9
+ against how long the business's own retention policy actually requires
10
+ keeping them.
11
+ category: legal
12
+ tags: [legal, records-retention, document-management, compliance]
13
+ schedule: "0 8 1 * *"
14
+ timezone: "UTC"
15
+ runner: shell
16
+ command: >
17
+ today=$(date +%s);
18
+ awk -F',' -v today="$today" '
19
+ NR==1 {next}
20
+ $4 == "no" {
21
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
22
+ cmd | getline exp_epoch; close(cmd);
23
+ if (today >= exp_epoch) {
24
+ printf "RETENTION EXPIRED: %s (%s) — retention ended %s, check for holds before purging\n", $1, $2, $3;
25
+ }
26
+ }
27
+ ' "{{records_csv_path}}"
28
+ variables:
29
+ records_csv_path:
30
+ default: "./legal-records-retention-schedule.csv"
31
+ description: "Path to a CSV with columns: document_id,document_type,retention_end_date (YYYY-MM-DD),reviewed (yes/no). One row per contract/legal document tracked under the retention policy."
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: >
34
+ Business's own contract/legal-file retention schedule — distinct from
35
+ `public-records-retention-purge-check` in government (public-sector
36
+ records law) and from `litigation-hold-acknowledgment-tracker` in this
37
+ category. Always cross-check against any active litigation hold before
38
+ destroying anything this flags — a hold overrides the normal retention
39
+ schedule.
@@ -0,0 +1,40 @@
1
+ id: litigation-hold-acknowledgment-tracker
2
+ version: 1
3
+ name: Litigation Hold Acknowledgment Tracker
4
+ description: >
5
+ Checks active litigation hold notices against the custodian list and
6
+ flags anyone who hasn't acknowledged receipt yet. Use this if a
7
+ litigation hold has ever gone out and nobody could later prove every
8
+ custodian actually got and confirmed it, which is exactly what gets
9
+ picked apart in a spoliation motion.
10
+ category: legal
11
+ tags: [legal, litigation, litigation-hold, ediscovery, compliance]
12
+ schedule: "0 8 * * 1-5"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v days="{{escalate_after_days}}" '
17
+ NR==1 {next}
18
+ $5 == "active" && $4 == "" {
19
+ cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
20
+ cmd | getline sent_epoch; close(cmd);
21
+ "date +%s" | getline now_epoch; close("date +%s");
22
+ pending_days = (now_epoch - sent_epoch) / 86400;
23
+ if (pending_days >= days) {
24
+ printf "NOT ACKNOWLEDGED: %s — hold \"%s\" sent %s (%d days ago)\n", $1, $2, $3, pending_days;
25
+ }
26
+ }
27
+ ' "{{holds_csv_path}}"
28
+ variables:
29
+ holds_csv_path:
30
+ default: "./litigation-holds.csv"
31
+ description: "Path to a CSV with columns: custodian_name,matter_name,notice_sent_date (YYYY-MM-DD),acknowledged_date (blank if not yet acknowledged),hold_status (active/released)."
32
+ escalate_after_days:
33
+ default: 5
34
+ description: Days a sent hold notice can go unacknowledged before it's flagged for follow-up.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: >
37
+ Assumes counsel maintains the CSV whenever a hold is issued, released, or
38
+ a custodian confirms receipt. Distinct from court-deadline-reminder
39
+ (filing/response deadlines within a matter) — this tracks preservation
40
+ obligations and custodian acknowledgment instead.