@wonsukchoi/crondex 0.7.0 → 0.9.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 (54) hide show
  1. package/README.md +58 -128
  2. package/bin/crondex.js +44 -0
  3. package/catalog.json +1298 -14
  4. package/jobs/agriculture/equipment-maintenance-due-reminder.yaml +36 -0
  5. package/jobs/agriculture/irrigation-schedule-check.yaml +41 -0
  6. package/jobs/agriculture/weather-frost-alert.yaml +41 -0
  7. package/jobs/construction/change-order-approval-reminder.yaml +31 -0
  8. package/jobs/creator/crosspost-lag-check.yaml +35 -0
  9. package/jobs/crypto/gas-price-alert.yaml +34 -0
  10. package/jobs/crypto/smart-contract-upgrade-watch.yaml +49 -0
  11. package/jobs/crypto/wallet-balance-watch.yaml +37 -0
  12. package/jobs/devops/github-issue-triage.yaml +38 -0
  13. package/jobs/ecommerce/abandoned-cart-recovery-check.yaml +38 -0
  14. package/jobs/ecommerce/low-stock-reorder-alert.yaml +33 -0
  15. package/jobs/ecommerce/return-refund-backlog-check.yaml +29 -0
  16. package/jobs/education/report-card-deadline-reminder.yaml +27 -0
  17. package/jobs/events/event-budget-overrun-check.yaml +31 -0
  18. package/jobs/finance/subscription-price-hike-watch.yaml +44 -0
  19. package/jobs/fleet/vehicle-registration-expiry-check.yaml +31 -0
  20. package/jobs/gaming/game-patch-notes-watch.yaml +39 -0
  21. package/jobs/gaming/stream-schedule-reminder.yaml +30 -0
  22. package/jobs/gaming/subscriber-churn-watch.yaml +39 -0
  23. package/jobs/healthcare/appointment-no-show-follow-up.yaml +32 -0
  24. package/jobs/healthcare/license-credential-expiry-check.yaml +35 -0
  25. package/jobs/healthcare/patient-recall-reminder.yaml +34 -0
  26. package/jobs/hiring/offer-expiry-reminder.yaml +31 -0
  27. package/jobs/hospitality/health-inspection-due-reminder.yaml +32 -0
  28. package/jobs/hr/benefits-enrollment-deadline-reminder.yaml +34 -0
  29. package/jobs/hr/new-hire-paperwork-check.yaml +35 -0
  30. package/jobs/hr/payroll-run-reminder.yaml +30 -0
  31. package/jobs/insurance/claim-status-check.yaml +30 -0
  32. package/jobs/insurance/coverage-gap-audit.yaml +37 -0
  33. package/jobs/insurance/policy-renewal-reminder.yaml +35 -0
  34. package/jobs/inventory/expiring-perishable-stock-check.yaml +24 -0
  35. package/jobs/investing/dividend-payment-tracker.yaml +34 -0
  36. package/jobs/legal/nda-expiry-check.yaml +31 -0
  37. package/jobs/logistics/freight-rate-spike-watch.yaml +38 -0
  38. package/jobs/manufacturing/preventive-maintenance-due-check.yaml +31 -0
  39. package/jobs/marketing/competitor-page-diff-watch.yaml +48 -0
  40. package/jobs/marketing/seo-rank-drop-watch.yaml +38 -0
  41. package/jobs/nonprofit/volunteer-hours-shortfall-check.yaml +30 -0
  42. package/jobs/personal/end-of-day-wrap-message.yaml +32 -0
  43. package/jobs/personal/new-restaurant-roundup.yaml +35 -0
  44. package/jobs/podcast/guest-followup-reminder.yaml +31 -0
  45. package/jobs/productivity/morning-briefing-digest.yaml +42 -0
  46. package/jobs/productivity/recurring-task-queue-reset.yaml +37 -0
  47. package/jobs/realestate/rent-payment-late-check.yaml +23 -0
  48. package/jobs/restaurant/health-inspection-prep-reminder.yaml +29 -0
  49. package/jobs/restaurant/inventory-waste-log-review.yaml +32 -0
  50. package/jobs/restaurant/reservation-noshow-deposit-check.yaml +32 -0
  51. package/jobs/sales/newly-funded-leads-scout.yaml +44 -0
  52. package/jobs/sales/quota-attainment-check.yaml +33 -0
  53. package/jobs/support/sla-breach-warning.yaml +31 -0
  54. package/package.json +1 -1
@@ -0,0 +1,38 @@
1
+ id: seo-rank-drop-watch
2
+ version: 1
3
+ name: SEO Keyword Rank Drop Watch
4
+ description: >
5
+ Checks a tracked keyword's search ranking and flags a real drop. Use
6
+ this if a page has ever slipped off page one and nobody noticed until
7
+ organic traffic was already down for weeks.
8
+ category: marketing
9
+ tags: [seo, rankings, marketing]
10
+ schedule: "0 8 * * 1"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Check the current search ranking for the keyword "{{keyword}}" targeting
15
+ {{target_url}}, via {{rank_source_hint}}.
16
+ 1. Compare the current position to the baseline position of
17
+ {{baseline_position}}.
18
+ 2. Flag a drop of {{drop_threshold_positions}} positions or more.
19
+ 3. If dropped, note which competing URLs now outrank {{target_url}}, if
20
+ visible.
21
+ variables:
22
+ keyword:
23
+ default: "your target keyword"
24
+ description: Keyword to track.
25
+ target_url:
26
+ default: "https://example.com/page"
27
+ description: URL you're tracking rank for.
28
+ rank_source_hint:
29
+ default: "a rank tracker (Ahrefs, SEMrush, Search Console) or a manual SERP check"
30
+ description: Where to check current rank.
31
+ baseline_position:
32
+ default: 5
33
+ description: Baseline ranking position to compare against.
34
+ drop_threshold_positions:
35
+ default: 5
36
+ description: Position drop that counts as a real regression.
37
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
38
+ notes: No generic script mode — SERP position checking needs a rank-tracking API or live search, both of which vary by provider/region.
@@ -0,0 +1,30 @@
1
+ id: volunteer-hours-shortfall-check
2
+ version: 1
3
+ name: Volunteer Hours Shortfall Check
4
+ description: >
5
+ Compares logged volunteer hours against a program's target and flags a
6
+ shortfall. Use this if a program has ever fallen behind on a grant's
7
+ volunteer-hour commitment without anyone noticing until the report was
8
+ due.
9
+ category: nonprofit
10
+ tags: [nonprofit, volunteers, programs]
11
+ schedule: "0 9 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ logged=$(awk -F, -v month="$(date +%Y-%m)" -v program="{{program_name}}" '$1 ~ month && $2 == program {sum += $3} END {print sum+0}' {{volunteer_hours_csv}});
16
+ target={{monthly_target_hours}};
17
+ if awk "BEGIN{exit !($logged < $target)}"; then echo "WARNING: {{program_name}} logged $logged of $target target hours this month"; exit 1;
18
+ else echo "OK: {{program_name}} logged $logged of $target target hours"; fi
19
+ variables:
20
+ volunteer_hours_csv:
21
+ default: "volunteer-hours.csv"
22
+ description: "CSV with columns: month(YYYY-MM),program,hours."
23
+ program_name:
24
+ default: "your program"
25
+ description: Program name to check.
26
+ monthly_target_hours:
27
+ default: 100
28
+ description: Target volunteer hours for the program this month.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: Keep volunteer-hours.csv updated from your volunteer management system's export before each run.
@@ -0,0 +1,32 @@
1
+ id: end-of-day-wrap-message
2
+ version: 1
3
+ name: End-of-Day Wrap Message
4
+ description: >
5
+ Fires around the end of your work calendar and drafts a short wrap-up:
6
+ what got done today, what's carrying over to tomorrow. Use this if you
7
+ close your laptop most days without a clear sense of what actually
8
+ happened or what's still pending.
9
+ category: personal
10
+ tags: [reflection, end-of-day, productivity, wrap-up]
11
+ schedule: "0 18 * * 1-5"
12
+ timezone: "America/Los_Angeles"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Look at today's completed calendar events, closed tasks/tickets, and
16
+ commits (whatever of {{activity_sources}} is available) for
17
+ {{lookback_hours}} hours.
18
+ 1. Summarize in 2-3 bullets what got meaningfully done today.
19
+ 2. List anything left open that was expected to close today, as
20
+ "carrying over to tomorrow."
21
+ 3. End with one line acknowledging the day plainly — no forced
22
+ positivity, just an honest close.
23
+ Keep the whole thing short enough to read in 15 seconds.
24
+ variables:
25
+ activity_sources:
26
+ default: "your calendar, task tracker, and git commits"
27
+ description: Comma-separated list of sources to check for today's activity.
28
+ lookback_hours:
29
+ default: 10
30
+ description: Rough length of the workday to look back over.
31
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
32
+ notes: Schedule this against your actual calendar end time, not a fixed hour, if your agent can read "last event ends at" dynamically.
@@ -0,0 +1,35 @@
1
+ id: new-restaurant-roundup
2
+ version: 1
3
+ name: New Restaurant Roundup
4
+ description: >
5
+ Checks for restaurants that newly opened near you in the last week and
6
+ gives you a short list to consider. Use this if you like trying new
7
+ places but never remember to actually go looking for what just opened.
8
+ category: personal
9
+ tags: [restaurants, local, discovery, weekly]
10
+ schedule: "0 17 * * 5"
11
+ timezone: "America/Los_Angeles"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Check for restaurants that newly opened within {{radius_miles}} miles of
15
+ {{location}} in the last {{lookback_days}} days (via Yelp, Google Maps,
16
+ local news, or whatever local-discovery source is available).
17
+ 1. List each new place: name, cuisine, and distance.
18
+ 2. Note anything getting early buzz (a write-up, strong early reviews).
19
+ 3. Keep it to the top {{max_results}} most promising — this is a quick
20
+ Friday-evening list, not a research report.
21
+ variables:
22
+ location:
23
+ default: "your city/neighborhood"
24
+ description: Location to search around.
25
+ radius_miles:
26
+ default: 5
27
+ description: Search radius in miles.
28
+ lookback_days:
29
+ default: 14
30
+ description: How recently a restaurant must have opened to count as "new."
31
+ max_results:
32
+ default: 5
33
+ description: Max number of places to list.
34
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
35
+ notes: Quality depends on local coverage in whatever source the agent can reach — sparser in small towns than big cities.
@@ -0,0 +1,31 @@
1
+ id: guest-followup-reminder
2
+ version: 1
3
+ name: Podcast Guest Follow-up Reminder
4
+ description: >
5
+ Flags recorded guest episodes that haven't been published or thanked
6
+ yet. Use this if a guest has ever had to awkwardly ask when their
7
+ episode was coming out because nobody followed up after recording.
8
+ category: podcast
9
+ tags: [podcast, guests, followup]
10
+ schedule: "0 9 * * 1"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ awk -F, -v today="$today" -v warn={{warn_days}} '
16
+ NR>1 && $3 == "unpublished" {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline recorded_ts; close(cmd);
19
+ days_since = int((today - recorded_ts) / 86400);
20
+ if (days_since >= warn) print "WARNING: episode with " $1 " recorded " days_since " days ago, still unpublished";
21
+ }
22
+ ' {{guest_episodes_csv}}
23
+ variables:
24
+ guest_episodes_csv:
25
+ default: "guest-episodes.csv"
26
+ description: "CSV with header row, columns: guest_name,recorded_date(YYYY-MM-DD),status(unpublished/published)."
27
+ warn_days:
28
+ default: 14
29
+ description: Days since recording before an unpublished episode is flagged.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep guest-episodes.csv updated as episodes are recorded and published — one row per guest episode.
@@ -0,0 +1,42 @@
1
+ id: morning-briefing-digest
2
+ version: 1
3
+ name: Morning Briefing Digest
4
+ description: >
5
+ Pulls together overnight email, today's calendar, and any connected
6
+ analytics/monitoring dashboards into one short digest waiting for you at
7
+ the start of the day. Use this if you start your morning tab-hopping
8
+ across five dashboards before you've even had coffee.
9
+ category: productivity
10
+ tags: [briefing, digest, morning, calendar, email]
11
+ schedule: "0 7 * * 1-5"
12
+ timezone: "America/Los_Angeles"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Build a short morning briefing covering:
16
+ 1. Calendar: today's meetings from {{calendar_source}}, flagging any
17
+ back-to-back blocks with no prep time.
18
+ 2. Email: unread messages from {{email_source}} in the last
19
+ {{lookback_hours}} hours that look like they need a same-day reply —
20
+ skip newsletters/notifications.
21
+ 3. Metrics: anything notable from {{dashboard_sources}} (traffic spike or
22
+ drop, error rate change, ranking movement) — only report real changes,
23
+ not routine noise.
24
+ 4. End with a single "top 3 things to do today" list synthesized from the
25
+ above.
26
+ Keep the whole digest to one screen — this replaces tab-hopping, it
27
+ shouldn't become its own chore to read.
28
+ variables:
29
+ calendar_source:
30
+ default: "your calendar (e.g. Google Calendar)"
31
+ description: Calendar to pull today's meetings from.
32
+ email_source:
33
+ default: "your inbox (e.g. Gmail)"
34
+ description: Inbox to scan for messages needing a same-day reply.
35
+ dashboard_sources:
36
+ default: "analytics/search console/uptime monitoring, whatever you have connected"
37
+ description: Comma-separated list of dashboards/metrics sources to check.
38
+ lookback_hours:
39
+ default: 16
40
+ description: How far back to scan email (covers overnight since last workday).
41
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
42
+ notes: Value scales with how many sources you connect — start with just calendar+email and add dashboards as they're available.
@@ -0,0 +1,37 @@
1
+ id: recurring-task-queue-reset
2
+ version: 1
3
+ name: Recurring Task Queue Reset
4
+ description: >
5
+ Clears out last week's completed recurring-task checklist and creates a
6
+ fresh one from your template, so every cycle starts with the same
7
+ predefined owners and checklist instead of a copy-pasted mess. Use this
8
+ if your recurring weekly checklist has ever quietly drifted because
9
+ someone edited last week's copy instead of starting clean.
10
+ category: productivity
11
+ tags: [productivity, checklist, recurring, template]
12
+ schedule: "0 6 * * 1"
13
+ timezone: "UTC"
14
+ runner: shell
15
+ command: >
16
+ if [ ! -f "{{template_path}}" ]; then
17
+ echo "template not found at {{template_path}} — nothing to reset from.";
18
+ exit 1;
19
+ fi
20
+ week_label=$(date +%G-W%V);
21
+ dest="{{output_dir}}/${week_label}.md";
22
+ mkdir -p "{{output_dir}}";
23
+ if [ -f "$dest" ]; then
24
+ echo "$dest already exists — not overwriting this week's checklist.";
25
+ else
26
+ cp "{{template_path}}" "$dest";
27
+ echo "created fresh checklist: $dest";
28
+ fi
29
+ variables:
30
+ template_path:
31
+ default: "./templates/weekly-checklist.md"
32
+ description: Path to the checklist template with predefined owners/items.
33
+ output_dir:
34
+ default: "./weekly-checklists"
35
+ description: Directory where each week's fresh checklist file is written.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: File-based by default for portability — swap `cp` for your task tool's API call (Notion, Asana, ClickUp) if you want it created there instead of as a local file.
@@ -0,0 +1,23 @@
1
+ id: rent-payment-late-check
2
+ version: 1
3
+ name: Rent Payment Late Check
4
+ description: >
5
+ Flags tenants whose rent is overdue past the grace period. Use this if
6
+ a late payment has ever gone unnoticed for weeks because nobody was
7
+ cross-checking the rent roll against the bank deposits.
8
+ category: realestate
9
+ tags: [realestate, rent, payments]
10
+ schedule: "0 9 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ psql "{{database_url}}" -t -c "select tenant_name, unit, amount_due, due_date from rent_ledger where paid = false and due_date < current_date - interval '{{grace_days}} days';"
15
+ variables:
16
+ database_url:
17
+ default: "postgres://user:pass@host:5432/db"
18
+ description: Connection string for the property management database.
19
+ grace_days:
20
+ default: 5
21
+ description: Days past due_date before a late payment is flagged.
22
+ compatible_agents: [generic, claude, codex]
23
+ notes: Assumes a `rent_ledger` table with `paid`, `due_date`, and `amount_due` columns — adjust the query to your property management system's schema.
@@ -0,0 +1,29 @@
1
+ id: health-inspection-prep-reminder
2
+ version: 1
3
+ name: Health Inspection Prep Reminder
4
+ description: >
5
+ Reminds the team of the standard health-inspection checklist on a
6
+ recurring basis, not just when an inspection is imminent. Use this if
7
+ you've ever scrambled the morning an inspector showed up unannounced.
8
+ category: restaurant
9
+ tags: [compliance, health-inspection, checklist, kitchen]
10
+ schedule: "0 7 * * 1"
11
+ timezone: "America/New_York"
12
+ runner: shell
13
+ command: >
14
+ echo "Weekly health-inspection self-check ({{checklist_path}}):";
15
+ if [ -f "{{checklist_path}}" ]; then cat "{{checklist_path}}"; else
16
+ echo "- Fridge/freezer temps logged and in range";
17
+ echo "- Handwashing stations stocked (soap, towels, signage)";
18
+ echo "- Food storage labeled with dates, FIFO followed";
19
+ echo "- No bare-hand contact with ready-to-eat food";
20
+ echo "- Pest control log up to date";
21
+ echo "- Cleaning/sanitizing log current";
22
+ echo "- Employee health/illness policy posted";
23
+ fi
24
+ variables:
25
+ checklist_path:
26
+ default: "./health-inspection-checklist.txt"
27
+ description: Optional path to your own custom checklist file; falls back to a standard baseline if not found.
28
+ compatible_agents: [generic, claude, codex]
29
+ notes: This is a recurring self-audit reminder, not a substitute for your local health department's actual requirements — adapt the checklist to your jurisdiction.
@@ -0,0 +1,32 @@
1
+ id: inventory-waste-log-review
2
+ version: 1
3
+ name: Inventory Waste Log Review
4
+ description: >
5
+ Reviews the kitchen's waste log for the week and flags which items are
6
+ being tossed most, in case it's an over-ordering or portioning problem.
7
+ Use this if food cost keeps creeping up and nobody's sure why.
8
+ category: restaurant
9
+ tags: [inventory, waste, food-cost, kitchen]
10
+ schedule: "0 10 * * 1"
11
+ timezone: "America/New_York"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Read the waste log for the past {{lookback_days}} days from
15
+ {{waste_log_source}}.
16
+ 1. Total waste by item (quantity and estimated cost if given).
17
+ 2. Rank the top 5 items by wasted cost.
18
+ 3. For each top item, note the most common waste reason logged (spoilage,
19
+ over-prep, returned order, etc.) if that field exists.
20
+ 4. Flag any item where waste looks like it's trending up week over week,
21
+ not just a one-off bad night.
22
+ 5. Suggest one concrete action per top item (reduce par level, tighten
23
+ portioning, adjust prep timing).
24
+ variables:
25
+ waste_log_source:
26
+ default: "your POS/inventory system's waste log"
27
+ description: Where the waste log lives (e.g. "Toast waste tracking", "a shared spreadsheet").
28
+ lookback_days:
29
+ default: 7
30
+ description: How many days of waste log to review.
31
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
32
+ notes: Quality of the report depends entirely on how consistently staff logs waste — garbage in, garbage out.
@@ -0,0 +1,32 @@
1
+ id: reservation-noshow-deposit-check
2
+ version: 1
3
+ name: Reservation No-Show Pattern Check
4
+ description: >
5
+ Reviews recent reservation no-shows and flags parties/times where
6
+ no-shows cluster, so you know whether a deposit or confirmation-call
7
+ policy would help. Use this if a certain night or party size keeps
8
+ costing you empty tables.
9
+ category: restaurant
10
+ tags: [reservations, no-show, hospitality]
11
+ schedule: "0 11 * * 1"
12
+ timezone: "America/New_York"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Pull reservation data from {{reservation_system}} for the past
16
+ {{lookback_days}} days.
17
+ 1. Calculate the overall no-show rate.
18
+ 2. Break it down by day of week, time slot, and party size — flag any
19
+ segment with a no-show rate meaningfully above the overall average.
20
+ 3. List repeat no-show guests (2+ in the window) by name/phone if
21
+ available.
22
+ 4. Recommend whether a deposit or confirmation-text policy is warranted
23
+ for the flagged segments specifically, rather than restaurant-wide.
24
+ variables:
25
+ reservation_system:
26
+ default: "your reservation platform"
27
+ description: Name of the reservation system (e.g. "OpenTable", "Resy", "Tock").
28
+ lookback_days:
29
+ default: 30
30
+ description: Window of reservation history to analyze.
31
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
32
+ notes: Read-only analysis — any policy change (deposits, blocklisting repeat no-shows) is a business decision for a human to make.
@@ -0,0 +1,44 @@
1
+ id: newly-funded-leads-scout
2
+ version: 1
3
+ name: Newly Funded Companies Lead Scout
4
+ description: >
5
+ Checks funding-announcement sources for companies that just raised in
6
+ your target market and drafts a first-outreach message for each. Use
7
+ this if you sell to companies that spend differently right after a
8
+ funding round and you want to reach them before every other vendor does.
9
+ category: sales
10
+ tags: [sales, leads, funding, outreach, prospecting]
11
+ schedule: "0 8 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check {{funding_sources}} for companies that announced a funding round in
16
+ the last {{lookback_days}} days matching: industry "{{target_industry}}",
17
+ stage "{{target_stage}}".
18
+ 1. List each company: name, round size/stage, and a one-line note on why
19
+ they fit the target profile.
20
+ 2. For each, note the most relevant contact if discoverable (founder,
21
+ head of the department your product serves).
22
+ 3. Draft a short, non-generic first-touch outreach message per company
23
+ that references the funding news and ties it to a concrete reason
24
+ they'd need {{your_product}} now.
25
+ 4. Skip companies already in {{existing_crm_note}} to avoid duplicate
26
+ outreach.
27
+ variables:
28
+ funding_sources:
29
+ default: "Crunchbase, TechCrunch funding news, or your preferred funding-news feed"
30
+ description: Sources to check for funding announcements.
31
+ target_industry:
32
+ default: "SaaS"
33
+ description: Industry/vertical to filter for.
34
+ target_stage:
35
+ default: "Seed or Series A"
36
+ description: Funding stage(s) worth prospecting.
37
+ your_product:
38
+ default: "your product"
39
+ description: One-line description of what you sell, for the outreach draft to reference.
40
+ existing_crm_note:
41
+ default: "no CRM connected — skip duplicate check"
42
+ description: Where to check for companies already in your pipeline, to avoid re-outreaching.
43
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
44
+ notes: Draft-only — review before sending, and check the funding source's terms of use before scraping instead of using an official API/RSS feed.
@@ -0,0 +1,33 @@
1
+ id: quota-attainment-check
2
+ version: 1
3
+ name: Quota Attainment Check
4
+ description: >
5
+ Compares a rep's closed-won revenue this period against their quota
6
+ pace and flags whether they're on track. Use this if a rep has ever
7
+ found out they missed quota only at the end of the quarter, instead of
8
+ with enough runway left to fix it.
9
+ category: sales
10
+ tags: [sales, quota, pipeline]
11
+ schedule: "0 8 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ closed=$(psql "{{database_url}}" -t -c "select coalesce(sum(amount),0) from deals where owner = '{{rep_name}}' and stage = 'closed_won' and closed_at >= date_trunc('quarter', current_date);");
16
+ quota={{quarterly_quota}};
17
+ pct=$(awk "BEGIN{printf \"%.0f\", ($closed/$quota)*100}");
18
+ echo "quota check for {{rep_name}}: closed \$$closed of \$$quota quarterly quota (${pct}%) so far"
19
+ variables:
20
+ database_url:
21
+ default: "postgres://user:pass@host:5432/db"
22
+ description: Connection string for the CRM/deals database.
23
+ rep_name:
24
+ default: "rep-name"
25
+ description: Sales rep owner field to check.
26
+ quarterly_quota:
27
+ default: 100000
28
+ description: Quarterly quota amount for this rep.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: >
31
+ Prints closed-won revenue vs. quota for the current quarter; the pacing
32
+ math (days elapsed vs. days in quarter) is left for you or your agent to
33
+ interpret since exact quarter boundaries vary by fiscal calendar.
@@ -0,0 +1,31 @@
1
+ id: sla-breach-warning
2
+ version: 1
3
+ name: SLA Breach Warning
4
+ description: >
5
+ Flags open tickets that are about to breach their SLA, before they
6
+ actually do. Use this if a ticket has ever blown past its SLA with zero
7
+ warning because the only check was after the fact.
8
+ category: support
9
+ tags: [support, sla, tickets]
10
+ schedule: "*/15 * * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ count=$(curl -s -H "Authorization: Bearer {{api_token}}" "{{api_url}}" | grep -o '"status":"open"' | wc -l | tr -d ' ');
15
+ if [ -z "$count" ] || [ "$count" -eq 0 ]; then echo "OK: no tickets approaching SLA breach"; exit 0;
16
+ else echo "WARNING: $count ticket(s) within {{warn_minutes}} minutes of SLA breach at {{api_url}}"; exit 1; fi
17
+ variables:
18
+ api_url:
19
+ default: "https://api.example-helpdesk.com/tickets?status=open&sla_remaining_lt_minutes=30"
20
+ description: Helpdesk API endpoint pre-filtered to tickets close to breaching SLA.
21
+ api_token:
22
+ default: "your-api-token"
23
+ description: Bearer token for the helpdesk API.
24
+ warn_minutes:
25
+ default: 30
26
+ description: Minutes of SLA time remaining that counts as "about to breach", for labeling output.
27
+ compatible_agents: [generic, claude, codex]
28
+ notes: >
29
+ Proactive counterpart to `ticket-backlog-aging-check` (which flags
30
+ tickets already past SLA) — point api_url at your helpdesk's filtered
31
+ search for tickets still within SLA but running low on time.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wonsukchoi/crondex",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "A public directory of pre-made, agent-editable cron jobs.",
5
5
  "type": "module",
6
6
  "license": "MIT",