@wonsukchoi/crondex 0.20.1 → 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 (121) hide show
  1. package/README.md +20 -30
  2. package/catalog.json +3052 -81
  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/fieldservice/maintenance-contract-renewal-check.yaml +36 -0
  17. package/jobs/fieldservice/parts-low-stock-reorder-check.yaml +29 -0
  18. package/jobs/fieldservice/tech-eta-no-show-check.yaml +32 -0
  19. package/jobs/fieldservice/tech-license-renewal-check.yaml +36 -0
  20. package/jobs/fieldservice/unpaid-invoice-aging-check.yaml +35 -0
  21. package/jobs/fieldservice/unresolved-callback-tracker.yaml +35 -0
  22. package/jobs/fieldservice/warranty-claim-expiry-check.yaml +35 -0
  23. package/jobs/finance/accounts-payable-aging-check.yaml +40 -0
  24. package/jobs/finance/bank-statement-reconciliation-check.yaml +40 -0
  25. package/jobs/finance/budget-vs-actual-variance-report.yaml +38 -0
  26. package/jobs/finance/contractor-1099-threshold-tracker.yaml +43 -0
  27. package/jobs/finance/credit-utilization-watch.yaml +40 -0
  28. package/jobs/finance/duplicate-payment-detection.yaml +43 -0
  29. package/jobs/finance/expense-report-compliance-check.yaml +46 -0
  30. package/jobs/finance/late-fee-interest-risk-check.yaml +43 -0
  31. package/jobs/finance/loan-covenant-compliance-check.yaml +37 -0
  32. package/jobs/finance/month-end-close-checklist-tracker.yaml +39 -0
  33. package/jobs/finance/multi-account-cash-position-rollup.yaml +45 -0
  34. package/jobs/finance/petty-cash-float-reconciliation.yaml +43 -0
  35. package/jobs/finance/quarterly-estimated-tax-calculator.yaml +66 -0
  36. package/jobs/finance/vendor-early-pay-discount-tracker.yaml +45 -0
  37. package/jobs/healthcare/appointment-slot-utilization-check.yaml +56 -0
  38. package/jobs/healthcare/claims-denial-resubmission-check.yaml +43 -0
  39. package/jobs/healthcare/clinical-supply-low-stock-check.yaml +30 -0
  40. package/jobs/healthcare/controlled-substance-inventory-reconciliation.yaml +42 -0
  41. package/jobs/healthcare/hipaa-access-log-audit.yaml +74 -0
  42. package/jobs/healthcare/patient-balance-collections-aging-check.yaml +41 -0
  43. package/jobs/healthcare/patient-immunization-schedule-check.yaml +41 -0
  44. package/jobs/healthcare/patient-portal-message-backlog-check.yaml +39 -0
  45. package/jobs/healthcare/patient-satisfaction-survey-tracking.yaml +59 -0
  46. package/jobs/healthcare/prescription-refill-request-backlog-check.yaml +38 -0
  47. package/jobs/healthcare/prior-authorization-expiry-check.yaml +53 -0
  48. package/jobs/healthcare/staff-cme-credit-tracking.yaml +41 -0
  49. package/jobs/healthcare/telehealth-session-issue-check.yaml +51 -0
  50. package/jobs/hr/aca-fte-threshold-monitor.yaml +44 -0
  51. package/jobs/hr/cobra-notification-deadline-tracker.yaml +47 -0
  52. package/jobs/hr/compliance-training-completion-check.yaml +41 -0
  53. package/jobs/hr/eeo1-filing-deadline-reminder.yaml +37 -0
  54. package/jobs/hr/handbook-acknowledgment-tracking.yaml +34 -0
  55. package/jobs/hr/headcount-budget-variance-check.yaml +37 -0
  56. package/jobs/hr/leave-of-absence-return-tracker.yaml +42 -0
  57. package/jobs/hr/org-chart-manager-drift-check.yaml +40 -0
  58. package/jobs/hr/pay-equity-band-outlier-check.yaml +58 -0
  59. package/jobs/hr/pto-year-end-use-it-or-lose-it-check.yaml +49 -0
  60. package/jobs/hr/retirement-plan-enrollment-deadline-check.yaml +40 -0
  61. package/jobs/hr/workers-comp-claim-status-check.yaml +42 -0
  62. package/jobs/legal/conflict-of-interest-check-tracker.yaml +38 -0
  63. package/jobs/legal/corporate-minute-book-completeness-check.yaml +31 -0
  64. package/jobs/legal/data-privacy-request-deadline-tracker.yaml +61 -0
  65. package/jobs/legal/entity-authority-document-expiry-check.yaml +37 -0
  66. package/jobs/legal/legal-document-retention-purge-review.yaml +39 -0
  67. package/jobs/legal/litigation-hold-acknowledgment-tracker.yaml +40 -0
  68. package/jobs/legal/non-compete-expiry-tracker.yaml +37 -0
  69. package/jobs/legal/outside-counsel-invoice-budget-check.yaml +37 -0
  70. package/jobs/legal/settlement-payment-schedule-tracker.yaml +34 -0
  71. package/jobs/legal/timekeeper-billable-hours-compliance-check.yaml +39 -0
  72. package/jobs/legal/trademark-infringement-watch.yaml +43 -0
  73. package/jobs/legal/vendor-coi-expiry-tracker.yaml +37 -0
  74. package/jobs/publishing/arc-review-copy-followup.yaml +35 -0
  75. package/jobs/publishing/isbn-registration-tracker.yaml +35 -0
  76. package/jobs/publishing/manuscript-deadline-tracker.yaml +34 -0
  77. package/jobs/publishing/permissions-clearance-tracker.yaml +36 -0
  78. package/jobs/publishing/print-run-reorder-threshold-check.yaml +32 -0
  79. package/jobs/publishing/rights-license-expiry-check.yaml +35 -0
  80. package/jobs/publishing/royalty-statement-due-check.yaml +33 -0
  81. package/jobs/realestate/capital-reserve-fund-threshold-check.yaml +32 -0
  82. package/jobs/realestate/eviction-notice-deadline-tracker.yaml +37 -0
  83. package/jobs/realestate/landlord-insurance-claim-status-check.yaml +35 -0
  84. package/jobs/realestate/lease-renewal-offer-window-check.yaml +35 -0
  85. package/jobs/realestate/maintenance-request-sla-check.yaml +39 -0
  86. package/jobs/realestate/move-in-move-out-inspection-tracker.yaml +35 -0
  87. package/jobs/realestate/rent-increase-notice-deadline-check.yaml +54 -0
  88. package/jobs/realestate/rent-roll-vacancy-loss-report.yaml +32 -0
  89. package/jobs/realestate/rental-license-renewal-check.yaml +35 -0
  90. package/jobs/realestate/security-deposit-return-deadline-check.yaml +38 -0
  91. package/jobs/realestate/tenant-application-review-backlog-check.yaml +35 -0
  92. package/jobs/realestate/tenant-renters-insurance-compliance-check.yaml +35 -0
  93. package/jobs/realestate/utility-billback-reconciliation-check.yaml +41 -0
  94. package/jobs/sales/champion-departure-watch.yaml +44 -0
  95. package/jobs/sales/closed-lost-reason-audit.yaml +42 -0
  96. package/jobs/sales/commission-payout-tracker.yaml +32 -0
  97. package/jobs/sales/contract-renewal-opportunity-tracker.yaml +28 -0
  98. package/jobs/sales/discount-approval-pending-check.yaml +31 -0
  99. package/jobs/sales/forecast-submission-compliance-check.yaml +42 -0
  100. package/jobs/sales/multi-year-renewal-escalation-tracker.yaml +31 -0
  101. package/jobs/sales/pipeline-hygiene-audit.yaml +26 -0
  102. package/jobs/sales/poc-trial-conversion-tracker.yaml +29 -0
  103. package/jobs/sales/referral-followup-tracker.yaml +40 -0
  104. package/jobs/sales/territory-coverage-gap-check.yaml +43 -0
  105. package/jobs/spa/appointment-no-show-tracker.yaml +46 -0
  106. package/jobs/spa/gift-card-expiry-check.yaml +35 -0
  107. package/jobs/spa/license-renewal-tracker.yaml +35 -0
  108. package/jobs/spa/membership-unused-session-expiry-check.yaml +35 -0
  109. package/jobs/spa/product-chemical-expiry-check.yaml +35 -0
  110. package/jobs/spa/retail-product-low-stock-check.yaml +26 -0
  111. package/jobs/spa/safety-inspection-due-reminder.yaml +33 -0
  112. package/jobs/telecom/circuit-outage-detection.yaml +38 -0
  113. package/jobs/telecom/circuit-provisioning-order-aging.yaml +36 -0
  114. package/jobs/telecom/cpe-firmware-update-tracker.yaml +45 -0
  115. package/jobs/telecom/link-capacity-threshold-alert.yaml +37 -0
  116. package/jobs/telecom/peering-transit-contract-renewal-check.yaml +36 -0
  117. package/jobs/telecom/service-ticket-churn-risk-review.yaml +56 -0
  118. package/jobs/telecom/sla-uptime-breach-tracker.yaml +36 -0
  119. package/lib/category-descriptions.js +4 -0
  120. package/lib/duplicates-allowlist.js +10 -0
  121. package/package.json +2 -2
@@ -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.
@@ -0,0 +1,37 @@
1
+ id: non-compete-expiry-tracker
2
+ version: 1
3
+ name: Non-Compete / Non-Solicit Expiry Tracker
4
+ description: >
5
+ Tracks the restricted-period end date of non-compete and non-solicit
6
+ agreements for departed employees and warns as each one is about to
7
+ expire. Use this if you've ever needed to know exactly when a former
8
+ employee's restrictive covenant runs out — before deciding whether to
9
+ act on a suspected violation, or before it's too late to.
10
+ category: legal
11
+ tags: [legal, non-compete, non-solicit, restrictive-covenants, employment]
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: " $2 " covenant for " $1 " expires in " days_left " days (" $3 ")";
23
+ }
24
+ ' {{covenants_csv}}
25
+ variables:
26
+ covenants_csv:
27
+ default: "non-compete-covenants.csv"
28
+ description: "CSV with header row, columns: former_employee_name,covenant_type (non-compete/non-solicit),restricted_period_end_date(YYYY-MM-DD)."
29
+ warn_days:
30
+ default: 30
31
+ description: Days before the restricted period ends to start warning.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: >
34
+ Enforceability of these covenants varies a lot by state/country and has
35
+ been narrowing in many jurisdictions — confirm with counsel before
36
+ relying on any covenant as still enforceable. Update the CSV whenever
37
+ an employee with a covenant departs.
@@ -0,0 +1,37 @@
1
+ id: outside-counsel-invoice-budget-check
2
+ version: 1
3
+ name: Outside Counsel Invoice Budget Check
4
+ description: >
5
+ Compares outside counsel invoices billed to date against each matter's
6
+ approved budget and flags matters approaching or over budget. Use this
7
+ if a matter budget has ever been blown through silently because
8
+ invoices got approved one at a time without anyone tracking the
9
+ running total against the budget set at intake.
10
+ category: legal
11
+ tags: [legal, outside-counsel, billing, budget]
12
+ schedule: "0 9 1,15 * *"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v warn_pct="{{warn_at_percent}}" '
17
+ NR==1 {next}
18
+ {
19
+ budget = $3 + 0;
20
+ billed = $4 + 0;
21
+ if (budget > 0) {
22
+ pct = (billed / budget) * 100;
23
+ if (pct >= warn_pct) {
24
+ printf "BUDGET ALERT: %s (firm: %s) — billed $%.2f of $%.2f budget (%.0f%%)\n", $1, $2, billed, budget, pct;
25
+ }
26
+ }
27
+ }
28
+ ' "{{matter_budgets_csv_path}}"
29
+ variables:
30
+ matter_budgets_csv_path:
31
+ default: "./outside-counsel-matter-budgets.csv"
32
+ description: "Path to a CSV with columns: matter_name,firm_name,approved_budget,billed_to_date. One row per matter with active outside counsel."
33
+ warn_at_percent:
34
+ default: 80
35
+ description: Percent of approved budget billed at which a matter gets flagged.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: Update billed_to_date from approved invoices (e.g. e-billing/LEDES exports) before each run — this only compares numbers you supply, it doesn't parse invoices itself.
@@ -0,0 +1,34 @@
1
+ id: settlement-payment-schedule-tracker
2
+ version: 1
3
+ name: Settlement Payment Schedule Tracker
4
+ description: >
5
+ Checks scheduled settlement agreement installment payments — both
6
+ owed and owed to you — and flags anything due soon or missed. Use this
7
+ if a settlement installment has ever been paid late (risking default
8
+ terms kicking back in) or received late without anyone noticing until
9
+ the next reconciliation.
10
+ category: legal
11
+ tags: [legal, settlement, payment-schedule, litigation]
12
+ schedule: "0 8 * * *"
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 && $5 == "unpaid" {
19
+ cmd="date -d \"" $4 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $4 "\" +%s";
20
+ cmd | getline due_ts; close(cmd);
21
+ days_left = int((due_ts - today) / 86400);
22
+ if (days_left < 0) print "MISSED: " $1 " installment #" $2 " ($" $3 ") was due " $4 " (" (days_left*-1) " days overdue)";
23
+ else if (days_left <= warn) print "DUE SOON: " $1 " installment #" $2 " ($" $3 ") due " $4 " (" days_left " days)";
24
+ }
25
+ ' {{settlements_csv}}
26
+ variables:
27
+ settlements_csv:
28
+ default: "settlement-payment-schedule.csv"
29
+ description: "CSV with header row, columns: matter_or_counterparty,installment_number,amount,due_date(YYYY-MM-DD),status(paid/unpaid)."
30
+ warn_days:
31
+ default: 7
32
+ description: Days before an installment's due date to start warning.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: Update the status column as each installment clears — this only reads dates and status you supply, it doesn't confirm receipt/disbursement of funds itself.
@@ -0,0 +1,39 @@
1
+ id: timekeeper-billable-hours-compliance-check
2
+ version: 1
3
+ name: Timekeeper Billable Hours Compliance Check
4
+ description: >
5
+ Checks attorneys and paralegals against their weekly timesheet
6
+ submission and minimum billable-hour targets, and flags anyone missing
7
+ or short. Use this if unbilled time has ever quietly leaked out of a
8
+ matter because a timekeeper fell behind on entering hours and nobody
9
+ caught it before the billing cycle closed.
10
+ category: legal
11
+ tags: [legal, timekeeping, billable-hours, compliance]
12
+ schedule: "0 8 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ awk -F',' -v target="{{min_weekly_hours}}" '
17
+ NR==1 {next}
18
+ {
19
+ hours = $3 + 0;
20
+ if ($3 == "" ) {
21
+ printf "MISSING TIMESHEET: %s — week of %s not submitted\n", $1, $2;
22
+ } else if (hours < target) {
23
+ printf "SHORT OF TARGET: %s — week of %s logged %.1f hrs (target %s)\n", $1, $2, hours, target;
24
+ }
25
+ }
26
+ ' "{{timesheets_csv_path}}"
27
+ variables:
28
+ timesheets_csv_path:
29
+ default: "./timekeeper-hours.csv"
30
+ description: "Path to a CSV with columns: timekeeper_name,week_start_date (YYYY-MM-DD),billable_hours_logged (blank if not yet submitted). One row per timekeeper per week."
31
+ min_weekly_hours:
32
+ default: 30
33
+ description: Minimum billable hours expected per timekeeper per week before flagging a shortfall.
34
+ compatible_agents: [generic, claude, codex]
35
+ notes: >
36
+ Distinct from any HR timesheet/payroll job — this checks billable-hour
37
+ compliance for legal timekeepers against matter-billing targets, not
38
+ hourly payroll attendance. Export the CSV from your time & billing
39
+ system before each run.
@@ -0,0 +1,43 @@
1
+ id: trademark-infringement-watch
2
+ version: 1
3
+ name: Trademark Infringement Watch
4
+ description: >
5
+ Searches for new trademark applications, domain registrations, and
6
+ marketplace listings that look like they could infringe on your
7
+ registered marks, and summarizes anything worth a closer look. Use
8
+ this if you've ever found out about a confusingly similar competitor
9
+ mark or copycat domain months after it started causing customer
10
+ confusion, instead of when it first appeared.
11
+ category: legal
12
+ tags: [legal, trademark, ip, infringement-watch]
13
+ schedule: "0 9 * * 1"
14
+ timezone: "UTC"
15
+ runner: agent-prompt
16
+ prompt: |
17
+ Check for potential infringement of these registered marks:
18
+ {{marks_to_watch}} (owned in classes/goods: {{goods_or_classes}}).
19
+ 1. Search recent trademark application filings (e.g. via the relevant
20
+ trademark office's public search/TESS-style database) for new marks
21
+ confusingly similar in name or logo, filed in overlapping
22
+ goods/services classes.
23
+ 2. Search for newly registered domain names that are close
24
+ misspellings or lookalikes of {{marks_to_watch}}.
25
+ 3. Spot-check major marketplaces/app stores for listings using the mark
26
+ or a confusing variant without authorization.
27
+ 4. For each hit, summarize: what was found, how similar it is, and
28
+ whether it looks like routine noise or worth flagging to counsel.
29
+ 5. This is a monitoring aid, not legal advice on whether infringement
30
+ exists — say so, and recommend counsel review anything flagged.
31
+ variables:
32
+ marks_to_watch:
33
+ default: "list your registered trademark(s) here"
34
+ description: The registered mark(s)/brand name(s) to watch for lookalikes.
35
+ goods_or_classes:
36
+ default: "your registered goods/services classes"
37
+ description: The goods/services or trademark classes your registration covers, to judge overlap.
38
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
39
+ notes: >
40
+ Distinct from `trademark-renewal-reminder`, which tracks renewing your
41
+ own registration — this watches for others potentially infringing it.
42
+ Search coverage depends on what databases/tools the agent can actually
43
+ reach; a paid watch service will catch more than open search alone.
@@ -0,0 +1,37 @@
1
+ id: vendor-coi-expiry-tracker
2
+ version: 1
3
+ name: Vendor Certificate of Insurance Expiry Tracker
4
+ description: >
5
+ Checks certificates of insurance you've collected from vendors and
6
+ contractors and warns before any expire, so a lapsed COI doesn't sit
7
+ unnoticed in the file. Use this if a vendor's insurance has ever lapsed
8
+ mid-contract and nobody found out until a claim needed it.
9
+ category: legal
10
+ tags: [legal, vendor-management, coi, contractor-compliance]
11
+ schedule: "0 9 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F, -v today="$today" -v warn={{warn_days}} '
17
+ NR>1 {
18
+ cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
19
+ cmd | getline exp_ts; close(cmd);
20
+ days_left = int((exp_ts - today) / 86400);
21
+ if (days_left <= warn) print "WARNING: COI for \"" $1 "\" (" $2 ") expires in " days_left " days (" $3 ")";
22
+ }
23
+ ' {{vendor_cois_csv}}
24
+ variables:
25
+ vendor_cois_csv:
26
+ default: "vendor-certificates-of-insurance.csv"
27
+ description: "CSV with header row, columns: vendor_name,coverage_type (e.g. general-liability, workers-comp),expiry_date(YYYY-MM-DD)."
28
+ warn_days:
29
+ default: 30
30
+ description: Days before a vendor's COI expires to start warning.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: >
33
+ Opposite direction from insurance's `certificate-of-insurance-request-check`
34
+ (which tracks fulfilling requests for your own COI) — this tracks
35
+ certificates other parties gave you, as a contract-compliance/vendor-risk
36
+ check rather than an insurance-desk workflow. Update the CSV whenever a
37
+ vendor sends a new or renewed COI.
@@ -0,0 +1,35 @@
1
+ id: arc-review-copy-followup
2
+ version: 1
3
+ name: ARC Review Copy Followup
4
+ description: >
5
+ Flags reviewers, bloggers, or media contacts who received an advance
6
+ review copy (ARC) but haven't posted or filed a review within a set
7
+ window, so a nudge can go out before the publication date. Use this if
8
+ ARCs have ever been sent out and quietly forgotten with no review to show
9
+ for them.
10
+ category: publishing
11
+ tags: [publishing, arc, review-copies, marketing]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v follow={{followup_days}} '
18
+ NR>1 && $4 == "no" {
19
+ cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
20
+ cmd | getline sent_ts; close(cmd);
21
+ days_since = int((today - sent_ts) / 86400);
22
+ if (days_since >= follow) print "FOLLOW UP: " $2 " received ARC for \"" $1 "\" " days_since " days ago, no review posted";
23
+ }
24
+ ' "{{arc_recipients_csv}}"
25
+ variables:
26
+ arc_recipients_csv:
27
+ default: "./arc-recipients.csv"
28
+ description: "CSV with header row, columns: title,recipient,sent_date(YYYY-MM-DD),review_posted(yes|no)."
29
+ followup_days:
30
+ default: 21
31
+ description: Days after sending an ARC to wait before flagging a followup nudge.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: >
34
+ Mark review_posted=yes in arc-recipients.csv as reviews come in so they
35
+ stop being flagged. Pair with your publicist's contact list export.
@@ -0,0 +1,35 @@
1
+ id: isbn-registration-tracker
2
+ version: 1
3
+ name: ISBN Registration Tracker
4
+ description: >
5
+ Flags upcoming titles that don't yet have an ISBN assigned and registered
6
+ with the relevant agency, checked against their planned publication date.
7
+ Use this if a title has ever hit its pub date without an ISBN because
8
+ registration wasn't started early enough.
9
+ category: publishing
10
+ tags: [publishing, isbn, metadata, pre-press]
11
+ schedule: "0 9 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F',' -v today="$today" -v lead={{lead_days}} '
17
+ NR>1 {
18
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
19
+ cmd | getline pub_ts; close(cmd);
20
+ days_left = int((pub_ts - today) / 86400);
21
+ if ($3 == "" && days_left <= lead) print "MISSING ISBN: \"" $1 "\" publishes in " days_left " days (" $2 ") — no ISBN registered";
22
+ }
23
+ ' "{{titles_csv}}"
24
+ variables:
25
+ titles_csv:
26
+ default: "./upcoming-titles.csv"
27
+ description: "CSV with header row, columns: title,pub_date(YYYY-MM-DD),isbn(blank if not yet assigned)."
28
+ lead_days:
29
+ default: 60
30
+ description: Days before publication to start warning if an ISBN is still missing.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: >
33
+ Update upcoming-titles.csv as soon as an ISBN is assigned so the title
34
+ drops off the warning list. Registration lead time varies by agency, so
35
+ set lead_days to comfortably exceed your agency's typical turnaround.
@@ -0,0 +1,34 @@
1
+ id: manuscript-deadline-tracker
2
+ version: 1
3
+ name: Manuscript Deadline Tracker
4
+ description: >
5
+ Flags manuscript milestones (first draft, revisions, final delivery) coming
6
+ due from authors or editors. Use this if a book has ever slipped its
7
+ production schedule because a manuscript deadline only lived in an email
8
+ thread nobody rechecked.
9
+ category: publishing
10
+ tags: [publishing, manuscripts, authors, deadlines]
11
+ schedule: "0 9 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F',' -v today="$today" -v warn={{warn_days}} '
17
+ NR>1 {
18
+ cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
19
+ cmd | getline due_ts; close(cmd);
20
+ days_left = int((due_ts - today) / 86400);
21
+ if (days_left <= warn) print "DUE SOON: \"" $1 "\" (" $2 ") milestone due in " days_left " days (" $3 ")";
22
+ }
23
+ ' "{{manuscripts_csv}}"
24
+ variables:
25
+ manuscripts_csv:
26
+ default: "./manuscripts.csv"
27
+ description: "CSV with header row, columns: title,milestone(draft|revision|final),due_date(YYYY-MM-DD)."
28
+ warn_days:
29
+ default: 7
30
+ description: Days before a milestone due date to start warning.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: >
33
+ Keep manuscripts.csv updated with each title's next milestone as it's
34
+ scheduled or renegotiated with the author/editor.
@@ -0,0 +1,36 @@
1
+ id: permissions-clearance-tracker
2
+ version: 1
3
+ name: Permissions Clearance Tracker
4
+ description: >
5
+ Flags quoted material, images, lyrics, or other third-party content in a
6
+ forthcoming title that still needs permissions clearance before the book
7
+ goes to press. Use this if a title has ever gone to print with an
8
+ uncleared quote or image because clearance status wasn't tracked
9
+ centrally.
10
+ category: publishing
11
+ tags: [publishing, permissions, rights-clearance, pre-press]
12
+ schedule: "0 9 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ today=$(date +%s);
17
+ awk -F',' -v today="$today" -v lead={{lead_days}} '
18
+ NR>1 && $4 != "cleared" {
19
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
20
+ cmd | getline pub_ts; close(cmd);
21
+ days_left = int((pub_ts - today) / 86400);
22
+ if (days_left <= lead) print "UNCLEARED: \"" $1 "\" — item \"" $3 "\" status=" $4 ", publishes in " days_left " days";
23
+ }
24
+ ' "{{permissions_csv}}"
25
+ variables:
26
+ permissions_csv:
27
+ default: "./permissions-clearances.csv"
28
+ description: "CSV with header row, columns: title,pub_date(YYYY-MM-DD),item_description,status(pending|requested|denied|cleared)."
29
+ lead_days:
30
+ default: 30
31
+ description: Days before publication to start warning about any item not yet marked cleared.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: >
34
+ Update permissions-clearances.csv as each request is sent, denied, or
35
+ cleared. A "denied" item still shows up here deliberately — it needs
36
+ editorial follow-up (cut or replace) before press, not just tracking.
@@ -0,0 +1,32 @@
1
+ id: print-run-reorder-threshold-check
2
+ version: 1
3
+ name: Print Run Reorder Threshold Check
4
+ description: >
5
+ Flags titles whose warehouse stock has dropped below the reorder
6
+ threshold, so a reprint can be queued before the book goes out of stock.
7
+ Use this if a title has ever gone unavailable for weeks because nobody
8
+ noticed the print run was running low until it was already sold out.
9
+ category: publishing
10
+ tags: [publishing, print-run, inventory, reprints]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v default_threshold={{default_reorder_threshold}} '
16
+ NR>1 {
17
+ threshold = ($3 != "" ? $3 : default_threshold);
18
+ if ($2+0 <= threshold+0) print "LOW STOCK: \"" $1 "\" at " $2 " units (reorder threshold " threshold ")";
19
+ }
20
+ ' "{{stock_csv}}"
21
+ variables:
22
+ stock_csv:
23
+ default: "./print-run-stock.csv"
24
+ description: "CSV with header row, columns: title,units_in_stock,reorder_threshold(optional, blank uses default)."
25
+ default_reorder_threshold:
26
+ default: 250
27
+ description: Fallback reorder threshold (in units) used when a title's row doesn't set its own.
28
+ compatible_agents: [generic, claude, codex]
29
+ notes: >
30
+ Update print-run-stock.csv from your distributor or warehouse inventory
31
+ export before each run. Reorder threshold should account for reprint
32
+ lead time, not just current demand.
@@ -0,0 +1,35 @@
1
+ id: rights-license-expiry-check
2
+ version: 1
3
+ name: Rights and License Expiry Check
4
+ description: >
5
+ Warns you before a granted or acquired rights/licensing deal (foreign
6
+ rights, film/TV options, audio, translation) expires or comes up for
7
+ renewal. Use this if a rights deal has ever lapsed silently because the
8
+ expiry date only lived in the signed contract's PDF.
9
+ category: publishing
10
+ tags: [publishing, rights, licensing, contracts]
11
+ schedule: "0 9 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ today=$(date +%s);
16
+ awk -F',' -v today="$today" -v warn={{warn_days}} '
17
+ NR>1 {
18
+ cmd="date -d \"" $3 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $3 "\" +%s";
19
+ cmd | getline exp_ts; close(cmd);
20
+ days_left = int((exp_ts - today) / 86400);
21
+ if (days_left <= warn) print "WARNING: " $2 " rights for \"" $1 "\" expire in " days_left " days (" $3 ")";
22
+ }
23
+ ' "{{rights_csv}}"
24
+ variables:
25
+ rights_csv:
26
+ default: "./rights-licenses.csv"
27
+ description: "CSV with header row, columns: title,rights_type(foreign|film|audio|translation|other),expiry_date(YYYY-MM-DD)."
28
+ warn_days:
29
+ default: 45
30
+ description: Days before a rights expiry date to start warning, so renegotiation or renewal can start in time.
31
+ compatible_agents: [generic, claude, codex]
32
+ notes: >
33
+ Covers both rights you've acquired (e.g. translation rights into a
34
+ language) and rights you've granted out (e.g. a film option). Keep
35
+ rights-licenses.csv updated from your contracts database.