@wonsukchoi/crondex 0.10.0 → 0.12.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/README.md +39 -27
- package/bin/crondex.js +41 -6
- package/catalog.json +1865 -65
- package/jobs/agriculture/crop-price-market-watch.yaml +32 -0
- package/jobs/agriculture/livestock-feed-stock-check.yaml +35 -0
- package/jobs/automotive/loaner-vehicle-return-reminder.yaml +35 -0
- package/jobs/automotive/parts-backorder-check.yaml +33 -0
- package/jobs/automotive/repair-order-aging-check.yaml +35 -0
- package/jobs/childcare/immunization-record-compliance-check.yaml +33 -0
- package/jobs/childcare/staff-child-ratio-compliance-check.yaml +30 -0
- package/jobs/childcare/tuition-payment-late-check.yaml +35 -0
- package/jobs/construction/equipment-rental-return-reminder.yaml +35 -0
- package/jobs/construction/subcontractor-insurance-expiry-check.yaml +35 -0
- package/jobs/creator/sponsorship-deliverable-tracker.yaml +38 -0
- package/jobs/crypto/defi-liquidation-risk-watch.yaml +36 -0
- package/jobs/crypto/token-unlock-vesting-watch.yaml +34 -0
- package/jobs/ecommerce/checkout-conversion-drop-watch.yaml +39 -0
- package/jobs/ecommerce/negative-review-alert.yaml +35 -0
- package/jobs/education/at-risk-student-grade-watch.yaml +35 -0
- package/jobs/education/field-trip-permission-slip-check.yaml +36 -0
- package/jobs/events/attendee-checkin-rate-watch.yaml +37 -0
- package/jobs/events/event-staffing-shortfall-check.yaml +34 -0
- package/jobs/fitness/class-utilization-check.yaml +32 -0
- package/jobs/fitness/gym-equipment-maintenance-check.yaml +35 -0
- package/jobs/fitness/gym-membership-renewal-reminder.yaml +35 -0
- package/jobs/fleet/driver-license-cdl-expiry-check.yaml +35 -0
- package/jobs/fleet/vehicle-inspection-due-check.yaml +35 -0
- package/jobs/gaming/game-server-uptime-check.yaml +34 -0
- package/jobs/gaming/tournament-registration-deadline-check.yaml +34 -0
- package/jobs/government/constituent-casework-followup-check.yaml +33 -0
- package/jobs/government/foia-request-deadline-check.yaml +36 -0
- package/jobs/government/permit-application-backlog-check.yaml +37 -0
- package/jobs/healthcare/insurance-eligibility-verification-check.yaml +32 -0
- package/jobs/healthcare/lab-result-followup-check.yaml +34 -0
- package/jobs/hiring/background-check-status-check.yaml +35 -0
- package/jobs/hiring/interview-feedback-overdue-check.yaml +33 -0
- package/jobs/hospitality/guest-maintenance-request-backlog-check.yaml +35 -0
- package/jobs/hospitality/guest-review-response-check.yaml +35 -0
- package/jobs/hr/exit-interview-completion-check.yaml +33 -0
- package/jobs/hr/performance-review-cycle-reminder.yaml +34 -0
- package/jobs/insurance/certificate-of-insurance-request-check.yaml +38 -0
- package/jobs/insurance/premium-payment-due-reminder.yaml +35 -0
- package/jobs/inventory/inventory-shrinkage-watch.yaml +36 -0
- package/jobs/inventory/low-stock-alert.yaml +7 -4
- package/jobs/inventory/overstock-slow-mover-check.yaml +36 -0
- package/jobs/investing/earnings-calendar-watch.yaml +32 -0
- package/jobs/investing/tax-loss-harvesting-review.yaml +33 -0
- package/jobs/legal/compliance-filing-deadline-reminder.yaml +38 -0
- package/jobs/legal/court-deadline-reminder.yaml +40 -0
- package/jobs/logistics/container-demurrage-fee-watch.yaml +35 -0
- package/jobs/logistics/last-mile-delivery-exception-check.yaml +36 -0
- package/jobs/manufacturing/raw-material-shortage-risk-check.yaml +31 -0
- package/jobs/manufacturing/supplier-otd-performance-watch.yaml +38 -0
- package/jobs/marketing/campaign-utm-tracking-check.yaml +41 -0
- package/jobs/nonprofit/board-action-item-followup-check.yaml +28 -0
- package/jobs/nonprofit/grant-reporting-deadline-check.yaml +38 -0
- package/jobs/podcast/podcast-download-drop-watch.yaml +42 -0
- package/jobs/podcast/podcast-rating-review-watch.yaml +37 -0
- package/jobs/realestate/property-maintenance-inspection-reminder.yaml +35 -0
- package/jobs/realestate/property-tax-deadline-reminder.yaml +35 -0
- package/jobs/restaurant/food-cost-percentage-watch.yaml +35 -0
- package/jobs/restaurant/labor-cost-percentage-watch.yaml +36 -0
- package/jobs/retail/employee-shift-gap-check.yaml +35 -0
- package/jobs/retail/pos-till-reconciliation-check.yaml +33 -0
- package/jobs/retail/store-opening-checklist-reminder.yaml +30 -0
- package/jobs/support/agent-workload-balance-check.yaml +30 -0
- package/jobs/support/ticket-reopened-rate-watch.yaml +35 -0
- package/jobs/team/on-call-fatigue-check.yaml +39 -0
- package/jobs/veterinary/boarding-checkout-reminder.yaml +29 -0
- package/jobs/veterinary/controlled-substance-log-audit.yaml +33 -0
- package/jobs/veterinary/pet-vaccine-due-reminder.yaml +34 -0
- package/jobs/warehousing/climate-control-compliance-check.yaml +40 -0
- package/jobs/warehousing/dock-schedule-conflict-check.yaml +30 -0
- package/jobs/warehousing/pick-pack-error-rate-watch.yaml +35 -0
- package/package.json +6 -3
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: podcast-rating-review-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Podcast Rating/Review Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks for new ratings and reviews on your podcast platforms and flags
|
|
6
|
+
a negative one or a rating drop worth looking into. Use this if a
|
|
7
|
+
critical review has ever sat unanswered for months because nobody
|
|
8
|
+
checks the ratings page between episodes.
|
|
9
|
+
category: podcast
|
|
10
|
+
tags: [podcast, reviews, ratings, reputation]
|
|
11
|
+
schedule: "0 10 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Check {{podcast_platforms}} for {{podcast_name}} for reviews/ratings
|
|
16
|
+
posted in the last {{lookback_days}} days.
|
|
17
|
+
1. List any new review, with rating and a one-line summary.
|
|
18
|
+
2. Flag anything rated at or below {{alert_threshold_stars}} stars, or
|
|
19
|
+
any average-rating drop compared to the prior period.
|
|
20
|
+
3. Note if a review raises a specific, actionable complaint (audio
|
|
21
|
+
quality, ad load, pacing) versus general subjective taste — the
|
|
22
|
+
actionable ones are worth a closer look.
|
|
23
|
+
variables:
|
|
24
|
+
podcast_platforms:
|
|
25
|
+
default: "Apple Podcasts, Spotify"
|
|
26
|
+
description: Comma-separated list of platforms to check.
|
|
27
|
+
podcast_name:
|
|
28
|
+
default: "your podcast"
|
|
29
|
+
description: Name of the podcast to check.
|
|
30
|
+
lookback_days:
|
|
31
|
+
default: 7
|
|
32
|
+
description: How far back to check for new reviews.
|
|
33
|
+
alert_threshold_stars:
|
|
34
|
+
default: 3
|
|
35
|
+
description: Star rating at or below which a review gets flagged (out of 5).
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: Most podcast platforms don't expose a review API directly — this typically means checking the platform's creator dashboard manually or via whatever export it offers.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: property-maintenance-inspection-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Property Maintenance Inspection Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Tracks when each property was last inspected and flags any that are due
|
|
6
|
+
for their next routine walkthrough. Use this if a property has ever gone
|
|
7
|
+
a year or more without a proper inspection because nothing forced anyone
|
|
8
|
+
to schedule one.
|
|
9
|
+
category: realestate
|
|
10
|
+
tags: [realestate, maintenance, inspection, property]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v days="{{inspection_interval_days}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline last_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
days_since = (now_epoch - last_epoch) / 86400;
|
|
22
|
+
if (days_since >= days) {
|
|
23
|
+
printf "DUE: %s — last inspected %s (%d days ago)\n", $1, $2, days_since;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{properties_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
properties_csv_path:
|
|
29
|
+
default: "./property-inspections.csv"
|
|
30
|
+
description: "Path to a CSV with columns: property_name,last_inspection_date (YYYY-MM-DD)."
|
|
31
|
+
inspection_interval_days:
|
|
32
|
+
default: 180
|
|
33
|
+
description: How often each property should be inspected, in days.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Assumes a maintained CSV of last-inspection dates per property — export it from whatever property management system you use, or update it manually after each walkthrough.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: property-tax-deadline-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Property Tax Deadline Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Warns you before a property tax payment is due for a tracked property.
|
|
6
|
+
Use this if a property tax bill has ever gone unpaid past the deadline
|
|
7
|
+
because it arrived by mail and got buried, resulting in penalties or a
|
|
8
|
+
lien risk.
|
|
9
|
+
category: realestate
|
|
10
|
+
tags: [realestate, property-tax, payment, deadline]
|
|
11
|
+
schedule: "0 8 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v days="{{warn_days_before}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline due_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
diff_days = (due_epoch - now_epoch) / 86400;
|
|
22
|
+
if (diff_days <= days && diff_days >= 0) {
|
|
23
|
+
printf "TAX DUE: %s — due %s (%d days)\n", $1, $2, diff_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{properties_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
properties_csv_path:
|
|
29
|
+
default: "./property-tax-due-dates.csv"
|
|
30
|
+
description: "Path to a CSV with columns: property_name,tax_due_date (YYYY-MM-DD)."
|
|
31
|
+
warn_days_before:
|
|
32
|
+
default: 21
|
|
33
|
+
description: How many days before the tax due date to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Many jurisdictions bill property tax semi-annually or annually with different due dates per installment — add one row per installment rather than one per property per year.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: food-cost-percentage-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Food Cost Percentage Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks food cost as a percentage of sales against your target and flags
|
|
6
|
+
it when it runs high. Use this if food cost has ever crept up for weeks
|
|
7
|
+
before anyone pulled the numbers and noticed margins were shrinking.
|
|
8
|
+
category: restaurant
|
|
9
|
+
tags: [restaurant, food-cost, margin, finance]
|
|
10
|
+
schedule: "0 8 * * 1"
|
|
11
|
+
timezone: "America/New_York"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
cogs="{{food_cost_usd}}";
|
|
15
|
+
sales="{{sales_revenue_usd}}";
|
|
16
|
+
target="{{target_food_cost_pct}}";
|
|
17
|
+
pct=$(awk -v c="$cogs" -v s="$sales" 'BEGIN{ if (s>0) printf "%.1f", (c/s)*100; else print "0" }');
|
|
18
|
+
if awk -v p="$pct" -v t="$target" 'BEGIN{exit !(p > t)}'; then
|
|
19
|
+
echo "WARNING: food cost at $pct% of sales (target $target%)";
|
|
20
|
+
exit 1;
|
|
21
|
+
else
|
|
22
|
+
echo "OK: food cost at $pct% of sales (target $target%)";
|
|
23
|
+
fi
|
|
24
|
+
variables:
|
|
25
|
+
food_cost_usd:
|
|
26
|
+
default: 0
|
|
27
|
+
description: Total cost of food used for the period (from your POS/inventory system).
|
|
28
|
+
sales_revenue_usd:
|
|
29
|
+
default: 0
|
|
30
|
+
description: Total food sales revenue for the same period.
|
|
31
|
+
target_food_cost_pct:
|
|
32
|
+
default: 30
|
|
33
|
+
description: Target food cost as a percentage of sales.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Feed in period totals from your POS/accounting export — this compares a single period's ratio, so schedule it to match how often you close out food-cost numbers (weekly is typical).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: labor-cost-percentage-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Labor Cost Percentage Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks labor cost as a percentage of sales against your target and
|
|
6
|
+
flags it when it runs high. Use this if overstaffing on a slow shift
|
|
7
|
+
has ever quietly eaten a week's margin before anyone pulled the labor
|
|
8
|
+
numbers and noticed.
|
|
9
|
+
category: restaurant
|
|
10
|
+
tags: [restaurant, labor-cost, margin, finance]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
labor="{{labor_cost_usd}}";
|
|
16
|
+
sales="{{sales_revenue_usd}}";
|
|
17
|
+
target="{{target_labor_cost_pct}}";
|
|
18
|
+
pct=$(awk -v l="$labor" -v s="$sales" 'BEGIN{ if (s>0) printf "%.1f", (l/s)*100; else print "0" }');
|
|
19
|
+
if awk -v p="$pct" -v t="$target" 'BEGIN{exit !(p > t)}'; then
|
|
20
|
+
echo "WARNING: labor cost at $pct% of sales (target $target%)";
|
|
21
|
+
exit 1;
|
|
22
|
+
else
|
|
23
|
+
echo "OK: labor cost at $pct% of sales (target $target%)";
|
|
24
|
+
fi
|
|
25
|
+
variables:
|
|
26
|
+
labor_cost_usd:
|
|
27
|
+
default: 0
|
|
28
|
+
description: Total labor cost (wages, not including benefits/taxes unless you want them included) for the period.
|
|
29
|
+
sales_revenue_usd:
|
|
30
|
+
default: 0
|
|
31
|
+
description: Total sales revenue for the same period.
|
|
32
|
+
target_labor_cost_pct:
|
|
33
|
+
default: 30
|
|
34
|
+
description: Target labor cost as a percentage of sales.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Parallel structure to `food-cost-percentage-watch` — feed in period totals from your POS/payroll export, scheduled to match how often you close out labor numbers.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: employee-shift-gap-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Employee Shift Gap Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks the upcoming schedule for unfilled shifts and flags them while
|
|
6
|
+
there's still time to find coverage. Use this if a shift has ever gone
|
|
7
|
+
unfilled and nobody noticed until the store was short-staffed that
|
|
8
|
+
morning.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, scheduling, staffing, shifts]
|
|
11
|
+
schedule: "0 9 * * *"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v days="{{lookahead_days}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
$3 == "unfilled" {
|
|
18
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline shift_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
diff_days = (shift_epoch - now_epoch) / 86400;
|
|
22
|
+
if (diff_days >= 0 && diff_days <= days) {
|
|
23
|
+
printf "UNFILLED: %s shift on %s (%d days out)\n", $1, $2, diff_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{schedule_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
schedule_csv_path:
|
|
29
|
+
default: "./employee-schedule.csv"
|
|
30
|
+
description: "Path to a CSV with columns: shift_name,shift_date (YYYY-MM-DD),status (filled/unfilled)."
|
|
31
|
+
lookahead_days:
|
|
32
|
+
default: 7
|
|
33
|
+
description: How many days ahead to check for unfilled shifts.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Export this from your scheduling software (When I Work, Homebase, Deputy) on a schedule to keep the CSV current.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: pos-till-reconciliation-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: POS Till Reconciliation Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks each register's end-of-day cash count against expected POS
|
|
6
|
+
totals and flags any discrepancy. Use this if a till has ever come up
|
|
7
|
+
short for days running before anyone connected the pattern to a
|
|
8
|
+
specific shift or register.
|
|
9
|
+
category: retail
|
|
10
|
+
tags: [retail, pos, cash, reconciliation]
|
|
11
|
+
schedule: "0 23 * * *"
|
|
12
|
+
timezone: "America/New_York"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v tolerance="{{tolerance_usd}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
diff = $3 - $2;
|
|
19
|
+
abs_diff = (diff < 0) ? -diff : diff;
|
|
20
|
+
if (abs_diff > tolerance) {
|
|
21
|
+
printf "DISCREPANCY: register %s — expected $%.2f, counted $%.2f (diff $%.2f)\n", $1, $2, $3, diff;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
' "{{till_counts_csv_path}}"
|
|
25
|
+
variables:
|
|
26
|
+
till_counts_csv_path:
|
|
27
|
+
default: "./till-counts.csv"
|
|
28
|
+
description: "Path to a CSV with columns: register_id,pos_expected_total,counted_total — one row per register per closing shift."
|
|
29
|
+
tolerance_usd:
|
|
30
|
+
default: 5.00
|
|
31
|
+
description: Acceptable discrepancy in dollars before flagging.
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: A repeated discrepancy on the same register or shift is a much bigger signal than a single one-off — worth tracking over time, not just per-day.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
id: store-opening-checklist-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Store Opening Checklist Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Reminds the opening shift of the standard opening checklist every day,
|
|
6
|
+
not just when a manager happens to be on site to run it from memory.
|
|
7
|
+
Use this if the store has ever opened late, or opened with something
|
|
8
|
+
missed (lights, POS not booted, signage not out), because the checklist
|
|
9
|
+
lived only in one person's head.
|
|
10
|
+
category: retail
|
|
11
|
+
tags: [retail, checklist, opening, operations]
|
|
12
|
+
schedule: "0 8 * * *"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
echo "Store opening checklist ({{checklist_path}}):";
|
|
17
|
+
if [ -f "{{checklist_path}}" ]; then cat "{{checklist_path}}"; else
|
|
18
|
+
echo "- Unlock doors, disarm alarm";
|
|
19
|
+
echo "- Turn on lights, signage, music";
|
|
20
|
+
echo "- Boot and log into POS terminals";
|
|
21
|
+
echo "- Count starting cash drawer";
|
|
22
|
+
echo "- Check overnight deliveries/restocking needs";
|
|
23
|
+
echo "- Walk the floor for cleanliness/facing";
|
|
24
|
+
fi
|
|
25
|
+
variables:
|
|
26
|
+
checklist_path:
|
|
27
|
+
default: "./store-opening-checklist.txt"
|
|
28
|
+
description: Optional path to your own custom checklist file; falls back to a standard baseline if not found.
|
|
29
|
+
compatible_agents: [generic, claude, codex]
|
|
30
|
+
notes: A recurring reminder/checklist print, not an automated door-unlock or alarm system — pair with your actual physical security systems as needed.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
id: agent-workload-balance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Support Agent Workload Balance Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks how open tickets are distributed across agents and flags a real
|
|
6
|
+
imbalance. Use this if one agent has ever quietly ended up carrying
|
|
7
|
+
double the ticket load of a teammate because assignment was manual and
|
|
8
|
+
nobody was watching the split.
|
|
9
|
+
category: support
|
|
10
|
+
tags: [support, workload, agents, balance]
|
|
11
|
+
schedule: "0 9 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Check {{helpdesk_platform}} for currently open ticket counts per agent.
|
|
16
|
+
1. List each agent's open ticket count.
|
|
17
|
+
2. Flag any agent carrying {{imbalance_multiplier}}x or more the team
|
|
18
|
+
average as overloaded.
|
|
19
|
+
3. Flag any agent with zero or very few open tickets while others are
|
|
20
|
+
overloaded — that's the other half of the imbalance worth surfacing.
|
|
21
|
+
4. If the distribution looks reasonably even, say so in one line.
|
|
22
|
+
variables:
|
|
23
|
+
helpdesk_platform:
|
|
24
|
+
default: "your helpdesk (e.g. Zendesk, Intercom, Freshdesk)"
|
|
25
|
+
description: Where ticket assignment data is tracked.
|
|
26
|
+
imbalance_multiplier:
|
|
27
|
+
default: 1.5
|
|
28
|
+
description: How many times above the team average counts as overloaded.
|
|
29
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
30
|
+
notes: Read-only signal — rebalancing assignments is a team-lead decision, not something this job does automatically.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: ticket-reopened-rate-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Ticket Reopened Rate Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks what percentage of closed tickets get reopened and flags it when
|
|
6
|
+
the rate climbs — a quality signal that's different from SLA or backlog
|
|
7
|
+
size. Use this if tickets have ever been closed to hit a metric and
|
|
8
|
+
quietly bounced right back, without anyone tracking the reopen rate
|
|
9
|
+
itself.
|
|
10
|
+
category: support
|
|
11
|
+
tags: [support, tickets, quality, reopened]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: agent-prompt
|
|
15
|
+
prompt: |
|
|
16
|
+
Check {{helpdesk_platform}} for tickets closed in the last
|
|
17
|
+
{{lookback_days}} days.
|
|
18
|
+
1. Calculate what percentage were reopened at least once after closing.
|
|
19
|
+
2. Compare against the target of {{target_reopen_pct}}%.
|
|
20
|
+
3. If above target, look for a pattern in the reopened tickets — same
|
|
21
|
+
agent, same issue category, same customer — rather than treating
|
|
22
|
+
each as an isolated case.
|
|
23
|
+
4. If at or below target, report the rate in one line.
|
|
24
|
+
variables:
|
|
25
|
+
helpdesk_platform:
|
|
26
|
+
default: "your helpdesk (e.g. Zendesk, Intercom, Freshdesk)"
|
|
27
|
+
description: Where ticket status history is tracked.
|
|
28
|
+
lookback_days:
|
|
29
|
+
default: 7
|
|
30
|
+
description: How far back to check closed tickets.
|
|
31
|
+
target_reopen_pct:
|
|
32
|
+
default: 5
|
|
33
|
+
description: Target reopen rate percentage — above this is worth investigating.
|
|
34
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
35
|
+
notes: A high reopen rate usually points at a process problem (closing too early, incomplete fixes) rather than any single ticket being mishandled — read it as a trend, not a per-ticket blame signal.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: on-call-fatigue-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: On-Call Fatigue Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks the on-call rotation history and flags if the same person has
|
|
6
|
+
been covering on-call more often than the rotation intends. Use this if
|
|
7
|
+
someone has ever quietly ended up on-call three weeks running because
|
|
8
|
+
swaps kept landing on the same person and nobody was tracking the
|
|
9
|
+
pattern.
|
|
10
|
+
category: team
|
|
11
|
+
tags: [team, oncall, rotation, burnout]
|
|
12
|
+
schedule: "0 9 * * 1"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
awk -F',' -v weeks="{{lookback_weeks}}" -v max_share="{{max_share_pct}}" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
{ count[$1]++; total++ }
|
|
19
|
+
END {
|
|
20
|
+
for (person in count) {
|
|
21
|
+
pct = (count[person] / total) * 100;
|
|
22
|
+
if (pct >= max_share) {
|
|
23
|
+
printf "IMBALANCE: %s covered %d of %d on-call shifts (%.0f%%) in the last %s weeks\n", person, count[person], total, pct, weeks;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
' "{{oncall_history_csv_path}}"
|
|
28
|
+
variables:
|
|
29
|
+
oncall_history_csv_path:
|
|
30
|
+
default: "./oncall-history.csv"
|
|
31
|
+
description: "Path to a CSV with one row per on-call shift, column: person_name — covering the lookback window."
|
|
32
|
+
lookback_weeks:
|
|
33
|
+
default: 8
|
|
34
|
+
description: How many weeks of on-call history the CSV covers (for labeling output).
|
|
35
|
+
max_share_pct:
|
|
36
|
+
default: 40
|
|
37
|
+
description: Percentage share of total shifts above which one person is carrying a disproportionate load.
|
|
38
|
+
compatible_agents: [generic, claude, codex]
|
|
39
|
+
notes: Complements `oncall-handoff-reminder` (per-shift handoff notes) by looking at the rotation pattern over time instead of a single handoff.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: boarding-checkout-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Boarding/Kennel Checkout Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Lists pets scheduled to check out of boarding today or tomorrow, plus
|
|
6
|
+
anyone past their scheduled checkout with no extension logged. Use this
|
|
7
|
+
if a boarded pet has ever stayed an extra unplanned day because nobody
|
|
8
|
+
cross-checked the boarding calendar against who was actually still
|
|
9
|
+
there.
|
|
10
|
+
category: veterinary
|
|
11
|
+
tags: [veterinary, boarding, kennel, schedule]
|
|
12
|
+
schedule: "0 7 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%Y-%m-%d);
|
|
17
|
+
awk -F',' -v today="$today" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
{
|
|
20
|
+
if ($3 == today) print "CHECKOUT TODAY: " $1 " (" $2 ")";
|
|
21
|
+
else if ($3 < today && $4 != "extended") print "OVERDUE CHECKOUT: " $1 " (" $2 ") — was due " $3;
|
|
22
|
+
}
|
|
23
|
+
' "{{boarding_csv_path}}"
|
|
24
|
+
variables:
|
|
25
|
+
boarding_csv_path:
|
|
26
|
+
default: "./boarding-schedule.csv"
|
|
27
|
+
description: "Path to a CSV with columns: pet_name,owner_name,checkout_date (YYYY-MM-DD),status (or 'extended' if the stay was extended)."
|
|
28
|
+
compatible_agents: [generic, claude, codex]
|
|
29
|
+
notes: Update the CSV whenever a stay is extended so it doesn't get flagged as overdue — this just cross-checks dates, it doesn't know about a phone call extending someone's stay.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: controlled-substance-log-audit
|
|
2
|
+
version: 1
|
|
3
|
+
name: Controlled Substance Log Audit
|
|
4
|
+
description: >
|
|
5
|
+
Checks the controlled-substance usage log for gaps or unreconciled
|
|
6
|
+
counts. Use this if a discrepancy in the controlled-drug log has ever
|
|
7
|
+
gone unnoticed for weeks instead of being caught the same day it
|
|
8
|
+
happened, which is exactly what a DEA/board inspection will ask about.
|
|
9
|
+
category: veterinary
|
|
10
|
+
tags: [veterinary, controlled-substances, compliance, audit]
|
|
11
|
+
schedule: "0 20 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Read today's controlled-substance log from {{log_source}} for
|
|
16
|
+
{{substances_tracked}}.
|
|
17
|
+
1. Check that every entry has a matching patient/case reference — flag
|
|
18
|
+
any entry missing one.
|
|
19
|
+
2. Compare running balance against the last physical count on record;
|
|
20
|
+
flag any mismatch.
|
|
21
|
+
3. Flag any day with zero entries logged if the practice was open and
|
|
22
|
+
controlled substances are known to be in regular use — a
|
|
23
|
+
suspiciously quiet log is itself worth a second look.
|
|
24
|
+
4. If everything reconciles, say so in one line.
|
|
25
|
+
variables:
|
|
26
|
+
log_source:
|
|
27
|
+
default: "your controlled-substance log (paper log photographed/transcribed, or e-log system)"
|
|
28
|
+
description: Where the controlled-substance usage log is recorded.
|
|
29
|
+
substances_tracked:
|
|
30
|
+
default: "ketamine, butorphanol, and other Schedule II-IV substances kept on site"
|
|
31
|
+
description: Which substances this log covers.
|
|
32
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
33
|
+
notes: Read-only reconciliation check — does not replace your practice's actual DEA-compliant logging system, and any discrepancy found should go through your normal reporting/investigation process.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: pet-vaccine-due-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Pet Vaccine Due Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Checks which patients are due or overdue for a vaccine and lists them
|
|
6
|
+
for outreach. Use this if a pet has ever gone a year past due for a
|
|
7
|
+
core vaccine because the reminder postcard got lost in the mail.
|
|
8
|
+
category: veterinary
|
|
9
|
+
tags: [veterinary, vaccine, patients, reminder]
|
|
10
|
+
schedule: "0 8 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
awk -F',' -v days="{{warn_days_before}}" '
|
|
15
|
+
NR==1 {next}
|
|
16
|
+
{
|
|
17
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
18
|
+
cmd | getline due_epoch; close(cmd);
|
|
19
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
20
|
+
diff_days = (due_epoch - now_epoch) / 86400;
|
|
21
|
+
if (diff_days <= days) {
|
|
22
|
+
printf "VACCINE DUE: %s (%s) — %s due %s (%d days)\n", $1, $2, $4, $3, diff_days;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
' "{{patients_csv_path}}"
|
|
26
|
+
variables:
|
|
27
|
+
patients_csv_path:
|
|
28
|
+
default: "./pet-vaccines.csv"
|
|
29
|
+
description: "Path to a CSV with columns: pet_name,owner_name,due_date (YYYY-MM-DD),vaccine_type."
|
|
30
|
+
warn_days_before:
|
|
31
|
+
default: 14
|
|
32
|
+
description: How many days before (or past) the due date to start listing.
|
|
33
|
+
compatible_agents: [generic, claude, codex]
|
|
34
|
+
notes: Assumes a maintained export from your practice management software — this is the "did anyone actually check the due list" backstop.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: climate-control-compliance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Warehouse Climate Control Compliance Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks temperature/humidity logs for climate-controlled storage areas
|
|
6
|
+
and flags any reading outside the safe range. Use this if product has
|
|
7
|
+
ever been damaged or spoiled because a climate-controlled zone drifted
|
|
8
|
+
out of range and nobody noticed until the next physical walk-through.
|
|
9
|
+
category: warehousing
|
|
10
|
+
tags: [warehousing, climate-control, compliance, storage]
|
|
11
|
+
schedule: "0 */4 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v min_t="{{min_temp_f}}" -v max_t="{{max_temp_f}}" -v min_h="{{min_humidity_pct}}" -v max_h="{{max_humidity_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
if ($2 < min_t || $2 > max_t || $3 < min_h || $3 > max_h) {
|
|
19
|
+
printf "OUT OF RANGE: %s — %sF, %s%% humidity (limits %s-%sF, %s-%s%%)\n", $1, $2, $3, min_t, max_t, min_h, max_h;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
' "{{readings_csv_path}}"
|
|
23
|
+
variables:
|
|
24
|
+
readings_csv_path:
|
|
25
|
+
default: "./climate-readings.csv"
|
|
26
|
+
description: "Path to a CSV with columns: zone_name,temperature_f,humidity_pct — latest sensor readings per zone."
|
|
27
|
+
min_temp_f:
|
|
28
|
+
default: 60
|
|
29
|
+
description: Minimum acceptable temperature in Fahrenheit.
|
|
30
|
+
max_temp_f:
|
|
31
|
+
default: 75
|
|
32
|
+
description: Maximum acceptable temperature in Fahrenheit.
|
|
33
|
+
min_humidity_pct:
|
|
34
|
+
default: 30
|
|
35
|
+
description: Minimum acceptable relative humidity percentage.
|
|
36
|
+
max_humidity_pct:
|
|
37
|
+
default: 60
|
|
38
|
+
description: Maximum acceptable relative humidity percentage.
|
|
39
|
+
compatible_agents: [generic, claude, codex]
|
|
40
|
+
notes: Assumes readings are exported from your sensor/IoT system on a schedule matching this job's frequency — adjust thresholds per what's actually stored in each zone.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
id: dock-schedule-conflict-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Loading Dock Schedule Conflict Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks tomorrow's dock appointments for double-bookings or gaps too
|
|
6
|
+
tight to actually unload a truck in. Use this if two carriers have ever
|
|
7
|
+
shown up for the same dock door at the same time because scheduling was
|
|
8
|
+
done in a shared spreadsheet nobody cross-checked.
|
|
9
|
+
category: warehousing
|
|
10
|
+
tags: [warehousing, dock-scheduling, logistics, conflicts]
|
|
11
|
+
schedule: "0 16 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Check tomorrow's dock appointment schedule from {{scheduling_source}}.
|
|
16
|
+
1. Flag any two appointments assigned to the same dock door with
|
|
17
|
+
overlapping time windows.
|
|
18
|
+
2. Flag any appointment scheduled with less than
|
|
19
|
+
{{min_turnaround_minutes}} minutes between it and the next one at
|
|
20
|
+
the same door — likely too tight for an actual unload.
|
|
21
|
+
3. If the schedule is clean, say so in one line.
|
|
22
|
+
variables:
|
|
23
|
+
scheduling_source:
|
|
24
|
+
default: "your dock scheduling system or shared spreadsheet"
|
|
25
|
+
description: Where dock appointments are booked.
|
|
26
|
+
min_turnaround_minutes:
|
|
27
|
+
default: 30
|
|
28
|
+
description: Minimum minutes needed between appointments at the same dock door.
|
|
29
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
30
|
+
notes: Read-only conflict check — resolving a found conflict (rebooking one carrier) is a dispatcher decision.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: pick-pack-error-rate-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Pick/Pack Error Rate Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks recent order fulfillment error rate (wrong item, wrong quantity,
|
|
6
|
+
missing item) against a target and flags it when it climbs. Use this if
|
|
7
|
+
a fulfillment error rate has ever crept up for weeks before a spike in
|
|
8
|
+
return/complaint volume made the problem impossible to ignore.
|
|
9
|
+
category: warehousing
|
|
10
|
+
tags: [warehousing, fulfillment, quality, errors]
|
|
11
|
+
schedule: "0 6 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v target="{{target_error_rate_pct}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{ total++; if ($2 == "error") errors++ }
|
|
18
|
+
END {
|
|
19
|
+
pct = (total > 0) ? (errors / total) * 100 : 0;
|
|
20
|
+
if (pct > target) {
|
|
21
|
+
printf "ABOVE TARGET: %.2f%% error rate (%d of %d orders), target %.2f%%\n", pct, errors, total, target;
|
|
22
|
+
} else {
|
|
23
|
+
printf "OK: %.2f%% error rate (%d of %d orders)\n", pct, errors, total;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{orders_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
orders_csv_path:
|
|
29
|
+
default: "./fulfillment-log.csv"
|
|
30
|
+
description: "Path to a CSV with columns: order_id,outcome (ok/error) — one row per fulfilled order in the period."
|
|
31
|
+
target_error_rate_pct:
|
|
32
|
+
default: 1.0
|
|
33
|
+
description: Target maximum error rate as a percentage.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: If errors cluster on a specific picker, shift, or SKU, that's worth investigating separately — this job only flags the aggregate rate crossing target.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wonsukchoi/crondex",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "A public directory of pre-made, agent-editable cron jobs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -35,10 +35,13 @@
|
|
|
35
35
|
"build-catalog": "node scripts/build-catalog.js",
|
|
36
36
|
"validate": "node scripts/validate-jobs.js",
|
|
37
37
|
"lint-shell": "node scripts/lint-shell.js",
|
|
38
|
+
"check-duplicates": "node scripts/check-duplicates.js",
|
|
38
39
|
"test": "node --test"
|
|
39
40
|
},
|
|
40
|
-
"
|
|
41
|
-
"ajv": "^8.17.1",
|
|
41
|
+
"dependencies": {
|
|
42
42
|
"js-yaml": "^4.1.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"ajv": "^8.17.1"
|
|
43
46
|
}
|
|
44
47
|
}
|