@wonsukchoi/crondex 0.5.0 → 0.7.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 +9 -1
- package/bin/crondex.js +85 -0
- package/catalog.json +2397 -522
- package/jobs/construction/inspection-deadline-reminder.yaml +31 -0
- package/jobs/construction/permit-expiry-check.yaml +31 -0
- package/jobs/content/canonical-tag-check.yaml +25 -0
- package/jobs/content/hreflang-audit.yaml +25 -0
- package/jobs/content/image-alt-text-audit.yaml +21 -0
- package/jobs/content/page-speed-regression-watch.yaml +26 -0
- package/jobs/content/sitemap-freshness-check.yaml +31 -0
- package/jobs/content/stale-post-audit.yaml +28 -0
- package/jobs/creator/content-calendar-gap-check.yaml +31 -0
- package/jobs/creator/engagement-drop-watch.yaml +36 -0
- package/jobs/devops/cdn-cache-purge-reminder.yaml +27 -0
- package/jobs/devops/ci-build-time-regression-watch.yaml +35 -0
- package/jobs/devops/error-rate-spike-watch.yaml +43 -0
- package/jobs/devops/feature-flag-staleness-audit.yaml +30 -0
- package/jobs/devops/k8s-pod-restart-watch.yaml +26 -0
- package/jobs/devops/log-forwarding-health-check.yaml +32 -0
- package/jobs/devops/staging-prod-config-diff.yaml +32 -0
- package/jobs/devops/terraform-drift-check.yaml +24 -0
- package/jobs/education/assignment-grading-backlog-check.yaml +23 -0
- package/jobs/education/attendance-anomaly-check.yaml +33 -0
- package/jobs/events/rsvp-followup-reminder.yaml +30 -0
- package/jobs/events/vendor-payment-deadline-reminder.yaml +31 -0
- package/jobs/finance/budget-overspend-check.yaml +29 -0
- package/jobs/finance/fx-rate-watch.yaml +33 -0
- package/jobs/finance/payroll-run-reminder.yaml +27 -0
- package/jobs/finance/recurring-payment-failure-check.yaml +23 -0
- package/jobs/fleet/fuel-card-anomaly-check.yaml +37 -0
- package/jobs/fleet/vehicle-maintenance-due-check.yaml +36 -0
- package/jobs/growth/churn-risk-watch.yaml +33 -0
- package/jobs/growth/trial-expiring-nudge.yaml +33 -0
- package/jobs/hiring/candidate-followup-nudge.yaml +23 -0
- package/jobs/hiring/open-req-aging-check.yaml +31 -0
- package/jobs/home/car-maintenance-due-reminder.yaml +30 -0
- package/jobs/home/warranty-expiry-reminder.yaml +31 -0
- package/jobs/hospitality/food-safety-temp-log-check.yaml +36 -0
- package/jobs/hospitality/reservation-noshow-check.yaml +20 -0
- package/jobs/inventory/inventory-count-discrepancy-check.yaml +38 -0
- package/jobs/inventory/low-stock-alert.yaml +20 -0
- package/jobs/investing/crypto-price-alert.yaml +33 -0
- package/jobs/investing/portfolio-rebalance-check.yaml +32 -0
- package/jobs/learning/cert-renewal-reminder.yaml +30 -0
- package/jobs/learning/conference-cfp-deadline-reminder.yaml +42 -0
- package/jobs/legal/contract-renewal-reminder.yaml +31 -0
- package/jobs/legal/trademark-renewal-reminder.yaml +30 -0
- package/jobs/logistics/customs-clearance-check.yaml +34 -0
- package/jobs/logistics/shipment-delay-watch.yaml +38 -0
- package/jobs/manufacturing/production-line-downtime-watch.yaml +34 -0
- package/jobs/manufacturing/quality-defect-rate-check.yaml +20 -0
- package/jobs/marketing/ad-spend-pacing-check.yaml +37 -0
- package/jobs/marketing/email-deliverability-check.yaml +37 -0
- package/jobs/nonprofit/grant-deadline-reminder.yaml +44 -0
- package/jobs/nonprofit/lapsed-donor-check.yaml +26 -0
- package/jobs/personal/medication-refill-reminder.yaml +30 -0
- package/jobs/podcast/episode-publish-gap-check.yaml +29 -0
- package/jobs/podcast/sponsor-deliverable-tracker.yaml +31 -0
- package/jobs/productivity/calendar-double-booking-check.yaml +21 -0
- package/jobs/productivity/stale-todo-sweep.yaml +26 -0
- package/jobs/productivity/timezone-meeting-conflict-check.yaml +31 -0
- package/jobs/realestate/lease-expiry-reminder.yaml +30 -0
- package/jobs/realestate/rental-vacancy-check.yaml +30 -0
- package/jobs/sales/lead-response-time-check.yaml +23 -0
- package/jobs/sales/stale-deal-nudge.yaml +35 -0
- package/jobs/security/2fa-enrollment-audit.yaml +24 -0
- package/jobs/security/cve-watch.yaml +27 -0
- package/jobs/security/dependabot-alert-digest.yaml +30 -0
- package/jobs/security/expiring-api-key-rotation.yaml +31 -0
- package/jobs/security/iam-key-rotation-reminder.yaml +27 -0
- package/jobs/security/s3-public-bucket-check.yaml +20 -0
- package/jobs/security/tls-cipher-weak-check.yaml +31 -0
- package/jobs/security/waf-rule-change-watch.yaml +38 -0
- package/jobs/support/csat-score-watch.yaml +32 -0
- package/jobs/support/ticket-backlog-aging-check.yaml +30 -0
- package/jobs/team/oncall-handoff-reminder.yaml +26 -0
- package/jobs/team/team-anniversary-reminder.yaml +22 -0
- package/jobs/travel/frequent-flyer-miles-expiry.yaml +30 -0
- package/jobs/travel/travel-insurance-expiry-check.yaml +26 -0
- package/package.json +1 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: vendor-payment-deadline-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Event Vendor Payment Deadline Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Warns you before a vendor deposit or balance payment for an event is
|
|
6
|
+
due. Use this if a vendor has ever threatened to cancel because a
|
|
7
|
+
payment deadline slipped past unnoticed.
|
|
8
|
+
category: events
|
|
9
|
+
tags: [events, vendors, payments]
|
|
10
|
+
schedule: "0 9 * * *"
|
|
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 {
|
|
17
|
+
cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
|
|
18
|
+
cmd | getline due_ts; close(cmd);
|
|
19
|
+
days_left = int((due_ts - today) / 86400);
|
|
20
|
+
if (days_left <= warn && days_left >= 0) print "WARNING: payment to \"" $1 "\" (" $3 ") due in " days_left " days (" $2 ")";
|
|
21
|
+
}
|
|
22
|
+
' {{vendor_payments_csv}}
|
|
23
|
+
variables:
|
|
24
|
+
vendor_payments_csv:
|
|
25
|
+
default: "vendor-payments.csv"
|
|
26
|
+
description: "CSV with header row, columns: vendor_name,due_date(YYYY-MM-DD),amount."
|
|
27
|
+
warn_days:
|
|
28
|
+
default: 7
|
|
29
|
+
description: Days before due date to start warning.
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: Keep vendor-payments.csv updated as contracts are signed — one row per deposit/balance milestone.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: budget-overspend-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Budget Overspend Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares this month's spend in a budget category against your limit and
|
|
6
|
+
warns if you're over. Use this if you set budgets once and then never
|
|
7
|
+
actually check them until the month's already blown.
|
|
8
|
+
category: finance
|
|
9
|
+
tags: [budget, spending, finance]
|
|
10
|
+
schedule: "0 9 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
spent=$(awk -F, -v month="$(date +%Y-%m)" -v cat="{{category}}" '$1 ~ month && $2 == cat {sum += $3} END {print sum+0}' {{transactions_csv}});
|
|
15
|
+
limit={{budget_limit}};
|
|
16
|
+
if awk "BEGIN{exit !($spent >= $limit)}"; then echo "WARNING: {{category}} spend \$$spent has hit/exceeded budget \$$limit this month"; exit 1;
|
|
17
|
+
else echo "OK: {{category}} spend \$$spent, budget \$$limit"; fi
|
|
18
|
+
variables:
|
|
19
|
+
transactions_csv:
|
|
20
|
+
default: "transactions.csv"
|
|
21
|
+
description: "CSV of transactions with columns: date(YYYY-MM-DD),category,amount."
|
|
22
|
+
category:
|
|
23
|
+
default: "dining"
|
|
24
|
+
description: Budget category to check.
|
|
25
|
+
budget_limit:
|
|
26
|
+
default: 300
|
|
27
|
+
description: Monthly budget limit for this category, in your currency.
|
|
28
|
+
compatible_agents: [generic, claude, codex]
|
|
29
|
+
notes: Expects a plain CSV export; point transactions_csv at wherever your bank/budgeting tool exports to.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: fx-rate-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: FX Rate Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks a currency pair's exchange rate and alerts when it crosses a
|
|
6
|
+
threshold you set. Use this if you're timing a transfer, payment, or
|
|
7
|
+
purchase around a favorable rate and don't want to check manually every day.
|
|
8
|
+
category: finance
|
|
9
|
+
tags: [finance, currency, fx]
|
|
10
|
+
schedule: "0 8 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
rate=$(curl -s "https://api.exchangerate.host/latest?base={{from_currency}}&symbols={{to_currency}}" | grep -o '"{{to_currency}}":[0-9.]*' | cut -d: -f2);
|
|
15
|
+
if [ -z "$rate" ]; then echo "ERROR: could not fetch rate for {{from_currency}}/{{to_currency}}"; exit 1; fi;
|
|
16
|
+
if awk "BEGIN{exit !($rate {{comparison}} {{target_rate}})}"; then
|
|
17
|
+
echo "ALERT: {{from_currency}}/{{to_currency}} is $rate ({{comparison}} {{target_rate}})";
|
|
18
|
+
else echo "OK: {{from_currency}}/{{to_currency}} is $rate"; fi
|
|
19
|
+
variables:
|
|
20
|
+
from_currency:
|
|
21
|
+
default: "USD"
|
|
22
|
+
description: Base currency code.
|
|
23
|
+
to_currency:
|
|
24
|
+
default: "EUR"
|
|
25
|
+
description: Target currency code.
|
|
26
|
+
target_rate:
|
|
27
|
+
default: 0.95
|
|
28
|
+
description: Threshold rate to compare against.
|
|
29
|
+
comparison:
|
|
30
|
+
default: "<="
|
|
31
|
+
description: "Comparison operator for triggering the alert: <=, >=, <, or >."
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Uses the free exchangerate.host API; swap in another FX API if you need higher rate limits or historical accuracy.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: payroll-run-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Payroll Run Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Warns you before the payroll submission deadline so employees actually
|
|
6
|
+
get paid on time. Use this if payroll has ever run late because the
|
|
7
|
+
submission cutoff snuck up during a busy week.
|
|
8
|
+
category: finance
|
|
9
|
+
tags: [finance, payroll, deadlines]
|
|
10
|
+
schedule: "0 9 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
today=$(date +%s);
|
|
15
|
+
cutoff_ts=$(date -d "{{next_cutoff_date}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{next_cutoff_date}}" +%s);
|
|
16
|
+
days_left=$(( (cutoff_ts - today) / 86400 ));
|
|
17
|
+
if [ "$days_left" -le "{{warn_days}}" ] && [ "$days_left" -ge 0 ]; then echo "WARNING: payroll submission cutoff in $days_left days ({{next_cutoff_date}})"; exit 1;
|
|
18
|
+
else echo "OK: payroll submission cutoff in $days_left days"; fi
|
|
19
|
+
variables:
|
|
20
|
+
next_cutoff_date:
|
|
21
|
+
default: "2026-08-01"
|
|
22
|
+
description: Next payroll submission cutoff date (YYYY-MM-DD).
|
|
23
|
+
warn_days:
|
|
24
|
+
default: 2
|
|
25
|
+
description: Days before the cutoff to start warning.
|
|
26
|
+
compatible_agents: [generic, claude, codex]
|
|
27
|
+
notes: Manual next_cutoff_date input — update it each pay cycle, or generate a recurring schedule externally if your payroll provider uses a fixed cadence.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
id: recurring-payment-failure-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Recurring Payment Failure Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags subscription charges that failed and haven't successfully retried
|
|
6
|
+
yet. Use this if a failed card has ever silently churned a customer
|
|
7
|
+
because nobody noticed the retry never succeeded.
|
|
8
|
+
category: finance
|
|
9
|
+
tags: [finance, billing, payments]
|
|
10
|
+
schedule: "0 */6 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
psql "{{database_url}}" -t -c "select customer_email, amount, failed_at, retry_count from subscription_charges where status = 'failed' and retry_count >= {{max_retries}};"
|
|
15
|
+
variables:
|
|
16
|
+
database_url:
|
|
17
|
+
default: "postgres://user:pass@host:5432/db"
|
|
18
|
+
description: Connection string for the billing database.
|
|
19
|
+
max_retries:
|
|
20
|
+
default: 2
|
|
21
|
+
description: Retry count at or above which a failed charge is flagged for manual follow-up.
|
|
22
|
+
compatible_agents: [generic, claude, codex]
|
|
23
|
+
notes: Assumes a `subscription_charges` table with `status`, `retry_count`, and `failed_at` columns — adjust the query to your billing provider's schema or webhook log.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: fuel-card-anomaly-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Fuel Card Anomaly Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags fuel card transactions that look unusual (too large, too frequent,
|
|
6
|
+
or outside normal hours/locations). Use this if fuel card misuse has
|
|
7
|
+
ever gone unnoticed until the monthly statement showed up.
|
|
8
|
+
category: fleet
|
|
9
|
+
tags: [fleet, fuel-card, fraud]
|
|
10
|
+
schedule: "0 7 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Review fuel card transactions from {{fuel_card_provider_hint}} for the
|
|
15
|
+
last 24 hours.
|
|
16
|
+
1. Flag transactions over {{max_transaction_usd}} USD.
|
|
17
|
+
2. Flag more than {{max_daily_transactions}} transactions on the same
|
|
18
|
+
card in one day.
|
|
19
|
+
3. Flag transactions outside typical operating hours ({{operating_hours}})
|
|
20
|
+
if timestamps are available.
|
|
21
|
+
4. Report flagged transactions with card holder, amount, time, and
|
|
22
|
+
location.
|
|
23
|
+
variables:
|
|
24
|
+
fuel_card_provider_hint:
|
|
25
|
+
default: "your fuel card provider (WEX, Fuelman, etc.)"
|
|
26
|
+
description: Name of the fuel card provider/portal.
|
|
27
|
+
max_transaction_usd:
|
|
28
|
+
default: 150
|
|
29
|
+
description: Single-transaction amount that triggers a flag.
|
|
30
|
+
max_daily_transactions:
|
|
31
|
+
default: 2
|
|
32
|
+
description: Transactions per card per day that triggers a flag.
|
|
33
|
+
operating_hours:
|
|
34
|
+
default: "06:00-19:00"
|
|
35
|
+
description: Normal operating hours; transactions outside this window are flagged.
|
|
36
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
37
|
+
notes: No generic script mode — fuel card provider APIs/exports vary and flagging patterns benefits from judgment, not just fixed rules.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: vehicle-maintenance-due-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Fleet Vehicle Maintenance Due Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags fleet vehicles due for scheduled maintenance by date or mileage.
|
|
6
|
+
Use this if a fleet vehicle has ever broken down on a job because its
|
|
7
|
+
service interval quietly passed.
|
|
8
|
+
category: fleet
|
|
9
|
+
tags: [fleet, vehicles, maintenance]
|
|
10
|
+
schedule: "0 7 * * 1"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
today=$(date +%s);
|
|
15
|
+
awk -F, -v today="$today" -v warn_days={{warn_days}} -v warn_miles={{warn_miles}} '
|
|
16
|
+
NR>1 {
|
|
17
|
+
cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
|
|
18
|
+
cmd | getline due_ts; close(cmd);
|
|
19
|
+
days_left = int((due_ts - today) / 86400);
|
|
20
|
+
miles_left = $4 - $3;
|
|
21
|
+
if (days_left <= warn_days || miles_left <= warn_miles)
|
|
22
|
+
print "WARNING: vehicle " $1 " due in " days_left " days or " miles_left " miles (service due " $2 " / " $4 " mi)";
|
|
23
|
+
}
|
|
24
|
+
' {{fleet_csv}}
|
|
25
|
+
variables:
|
|
26
|
+
fleet_csv:
|
|
27
|
+
default: "fleet-maintenance.csv"
|
|
28
|
+
description: "CSV with header row, columns: vehicle_id,next_service_date(YYYY-MM-DD),current_mileage,next_service_mileage."
|
|
29
|
+
warn_days:
|
|
30
|
+
default: 14
|
|
31
|
+
description: Days before the service date to start warning.
|
|
32
|
+
warn_miles:
|
|
33
|
+
default: 500
|
|
34
|
+
description: Miles remaining before the service mileage to start warning.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Keep fleet-maintenance.csv updated from odometer readings/telematics exports before each run.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: churn-risk-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Churn Risk Watch
|
|
4
|
+
description: >
|
|
5
|
+
Flags accounts whose usage has dropped off sharply, before they actually
|
|
6
|
+
cancel. Use this if you only ever find out someone churned after the
|
|
7
|
+
cancellation email arrives.
|
|
8
|
+
category: growth
|
|
9
|
+
tags: [growth, churn, retention]
|
|
10
|
+
schedule: "0 9 * * 1"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Review usage/activity data (from {{analytics_hint}} or the database) for
|
|
15
|
+
paying accounts.
|
|
16
|
+
1. Compare each account's activity in the last {{recent_days}} days to
|
|
17
|
+
their prior baseline.
|
|
18
|
+
2. Flag accounts with a drop of {{drop_threshold_pct}}% or more as churn
|
|
19
|
+
risks.
|
|
20
|
+
3. Report the flagged accounts ranked by drop size, with their plan
|
|
21
|
+
value, so outreach can be prioritized.
|
|
22
|
+
variables:
|
|
23
|
+
analytics_hint:
|
|
24
|
+
default: "product analytics tool (e.g. Mixpanel, PostHog, Amplitude)"
|
|
25
|
+
description: Where usage/activity data lives.
|
|
26
|
+
recent_days:
|
|
27
|
+
default: 14
|
|
28
|
+
description: Recent window to compare against baseline.
|
|
29
|
+
drop_threshold_pct:
|
|
30
|
+
default: 50
|
|
31
|
+
description: Percent drop in activity that counts as churn risk.
|
|
32
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
33
|
+
notes: No generic script mode — "baseline vs. recent activity" needs querying an analytics source and judgment on what counts as a meaningful drop.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: trial-expiring-nudge
|
|
2
|
+
version: 1
|
|
3
|
+
name: Trial Expiring Nudge
|
|
4
|
+
description: >
|
|
5
|
+
Finds trial users about to expire who haven't upgraded yet, and can
|
|
6
|
+
draft the nudge email. Use this if trial-to-paid conversion nudges only
|
|
7
|
+
happen when someone remembers to send them.
|
|
8
|
+
category: growth
|
|
9
|
+
tags: [growth, trials, conversion]
|
|
10
|
+
schedule: "0 10 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: hybrid
|
|
13
|
+
command: >
|
|
14
|
+
psql "{{database_url}}" -t -c "select email, trial_ends_at from users where trial_ends_at between now() and now() + interval '{{lookahead_days}} days' and plan = 'trial';"
|
|
15
|
+
prompt: |
|
|
16
|
+
Find users whose trial ends within the next {{lookahead_days}} days and
|
|
17
|
+
who haven't upgraded to a paid plan (query {{database_url}} or the
|
|
18
|
+
billing system).
|
|
19
|
+
1. List each user with their trial end date.
|
|
20
|
+
2. Draft a short, friendly nudge email for each, mentioning what they'd
|
|
21
|
+
lose access to and a clear upgrade link. Don't send — draft only.
|
|
22
|
+
script_note: >
|
|
23
|
+
`command` lists trial-ending users from Postgres with zero tokens.
|
|
24
|
+
`prompt` also drafts the nudge email per user, which needs an LLM.
|
|
25
|
+
variables:
|
|
26
|
+
database_url:
|
|
27
|
+
default: "postgres://user:pass@host:5432/db"
|
|
28
|
+
description: Connection string for the users/billing database.
|
|
29
|
+
lookahead_days:
|
|
30
|
+
default: 3
|
|
31
|
+
description: How many days ahead to look for trial expirations.
|
|
32
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
33
|
+
notes: Script mode assumes a `users` table with `trial_ends_at` and `plan` columns — adjust the query to your schema.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
id: candidate-followup-nudge
|
|
2
|
+
version: 1
|
|
3
|
+
name: Candidate Follow-up Nudge
|
|
4
|
+
description: >
|
|
5
|
+
Flags interviewed candidates who haven't heard back in a while. Use this
|
|
6
|
+
if candidates have ever gone quiet after a final interview simply
|
|
7
|
+
because nobody circled back with a decision.
|
|
8
|
+
category: hiring
|
|
9
|
+
tags: [hiring, recruiting, candidates]
|
|
10
|
+
schedule: "0 9 * * 1-5"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
psql "{{database_url}}" -t -c "select name, stage, last_interview_at from candidates where stage not in ('hired','rejected') and last_interview_at < now() - interval '{{stale_days}} days';"
|
|
15
|
+
variables:
|
|
16
|
+
database_url:
|
|
17
|
+
default: "postgres://user:pass@host:5432/db"
|
|
18
|
+
description: Connection string for the candidates/ATS database.
|
|
19
|
+
stale_days:
|
|
20
|
+
default: 7
|
|
21
|
+
description: Days since last interview before a candidate is flagged for follow-up.
|
|
22
|
+
compatible_agents: [generic, claude, codex]
|
|
23
|
+
notes: Assumes a `candidates` table with `stage` and `last_interview_at` columns — adjust the query to your ATS's schema or export.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: open-req-aging-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Open Req Aging Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags job requisitions that have been open too long without enough
|
|
6
|
+
candidates in the pipeline. Use this if a req has ever sat open for
|
|
7
|
+
months before anyone asked why it wasn't moving.
|
|
8
|
+
category: hiring
|
|
9
|
+
tags: [hiring, recruiting, requisitions]
|
|
10
|
+
schedule: "0 9 * * 1"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Review open job requisitions in {{ats_hint}}.
|
|
15
|
+
1. For each req open more than {{stale_days}} days, note days open and
|
|
16
|
+
current candidate count by stage.
|
|
17
|
+
2. Flag reqs with fewer than {{min_candidates}} active candidates as
|
|
18
|
+
needing sourcing attention.
|
|
19
|
+
3. Report the list ranked by days open, oldest first.
|
|
20
|
+
variables:
|
|
21
|
+
ats_hint:
|
|
22
|
+
default: "your ATS (Greenhouse, Lever, Ashby)"
|
|
23
|
+
description: Name of the applicant tracking system in use.
|
|
24
|
+
stale_days:
|
|
25
|
+
default: 45
|
|
26
|
+
description: Days open before a req is flagged for review.
|
|
27
|
+
min_candidates:
|
|
28
|
+
default: 3
|
|
29
|
+
description: Minimum active candidates expected before a req is considered healthy.
|
|
30
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
31
|
+
notes: No generic script mode — ATS APIs vary widely and most need OAuth the agent may not have configured.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
id: car-maintenance-due-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Car Maintenance Due Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Warns you when a car maintenance task (oil change, registration, etc.)
|
|
6
|
+
is coming due by date. Use this if you've ever found out your
|
|
7
|
+
registration expired because a sticker in the mail got ignored.
|
|
8
|
+
category: home
|
|
9
|
+
tags: [home, car, maintenance]
|
|
10
|
+
schedule: "0 9 * * 1"
|
|
11
|
+
timezone: "America/Los_Angeles"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
today=$(date +%s);
|
|
15
|
+
due_ts=$(date -d "{{due_date}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{due_date}}" +%s);
|
|
16
|
+
days_left=$(( (due_ts - today) / 86400 ));
|
|
17
|
+
if [ "$days_left" -le "{{warn_days}}" ]; then echo "WARNING: {{task_name}} due in $days_left days ({{due_date}})"; exit 1;
|
|
18
|
+
else echo "OK: {{task_name}} due in $days_left days"; fi
|
|
19
|
+
variables:
|
|
20
|
+
task_name:
|
|
21
|
+
default: "oil change"
|
|
22
|
+
description: Name of the maintenance task to track.
|
|
23
|
+
due_date:
|
|
24
|
+
default: "2026-09-01"
|
|
25
|
+
description: Date the task is due (YYYY-MM-DD).
|
|
26
|
+
warn_days:
|
|
27
|
+
default: 7
|
|
28
|
+
description: Days before due date to start warning.
|
|
29
|
+
compatible_agents: [generic, claude, codex]
|
|
30
|
+
notes: One task per job instance — schedule multiple copies with different task_name/due_date for oil change, registration, inspection, etc.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
id: warranty-expiry-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Warranty Expiry Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Warns you before an appliance or product warranty expires. Use this if
|
|
6
|
+
you've ever discovered a warranty lapsed the week before whatever it
|
|
7
|
+
covered broke.
|
|
8
|
+
category: home
|
|
9
|
+
tags: [home, warranty, reminder]
|
|
10
|
+
schedule: "0 9 1 * *"
|
|
11
|
+
timezone: "America/Los_Angeles"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
today=$(date +%s);
|
|
15
|
+
awk -F, -v today="$today" -v warn={{warn_days}} '
|
|
16
|
+
NR>1 {
|
|
17
|
+
cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
|
|
18
|
+
cmd | getline exp_ts; close(cmd);
|
|
19
|
+
days_left = int((exp_ts - today) / 86400);
|
|
20
|
+
if (days_left <= warn) print "WARNING: warranty for \"" $1 "\" expires in " days_left " days (" $2 ")";
|
|
21
|
+
}
|
|
22
|
+
' {{warranties_csv}}
|
|
23
|
+
variables:
|
|
24
|
+
warranties_csv:
|
|
25
|
+
default: "warranties.csv"
|
|
26
|
+
description: "CSV with header row, columns: item_name,expiry_date(YYYY-MM-DD)."
|
|
27
|
+
warn_days:
|
|
28
|
+
default: 30
|
|
29
|
+
description: Days before expiry to start warning.
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: Keep warranties.csv updated whenever you buy something worth tracking — add the receipt/warranty end date at purchase time.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: food-safety-temp-log-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Food Safety Temperature Log Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks that fridge/freezer temperature logs were actually recorded
|
|
6
|
+
today and flags any reading outside the safe range. Use this if a
|
|
7
|
+
temperature log has ever gone unfilled for a shift, or a unit drifted
|
|
8
|
+
out of range without anyone noticing until the food was already at risk.
|
|
9
|
+
category: hospitality
|
|
10
|
+
tags: [hospitality, food-safety, compliance]
|
|
11
|
+
schedule: "0 */4 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%Y-%m-%d);
|
|
16
|
+
last_entry=$(awk -F, -v today="$today" '$1 ~ today {last=$0} END {print last}' {{temp_log_csv}});
|
|
17
|
+
if [ -z "$last_entry" ]; then echo "WARNING: no temperature log entry today for {{unit_name}}"; exit 1; fi;
|
|
18
|
+
temp=$(echo "$last_entry" | cut -d, -f3);
|
|
19
|
+
if awk "BEGIN{exit !($temp > {{max_temp_f}} || $temp < {{min_temp_f}})}"; then
|
|
20
|
+
echo "WARNING: {{unit_name}} reading ${temp}F is out of range ({{min_temp_f}}-{{max_temp_f}}F): $last_entry"; exit 1;
|
|
21
|
+
else echo "OK: {{unit_name}} last reading ${temp}F, in range"; fi
|
|
22
|
+
variables:
|
|
23
|
+
unit_name:
|
|
24
|
+
default: "walk-in cooler"
|
|
25
|
+
description: Name of the unit being logged.
|
|
26
|
+
temp_log_csv:
|
|
27
|
+
default: "temp-log.csv"
|
|
28
|
+
description: "CSV with columns: date(YYYY-MM-DD HH:MM),unit,temp_f."
|
|
29
|
+
min_temp_f:
|
|
30
|
+
default: 33
|
|
31
|
+
description: Minimum safe temperature in Fahrenheit.
|
|
32
|
+
max_temp_f:
|
|
33
|
+
default: 40
|
|
34
|
+
description: Maximum safe temperature in Fahrenheit.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Assumes manual or IoT-exported entries appended to temp-log.csv throughout the day — one job instance per unit tracked.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
id: reservation-noshow-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Reservation No-show Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks yesterday's no-show rate against your normal baseline and flags a
|
|
6
|
+
spike. Use this if a run of no-shows has ever quietly hurt revenue for
|
|
7
|
+
days before anyone connected the pattern.
|
|
8
|
+
category: hospitality
|
|
9
|
+
tags: [hospitality, reservations, noshow]
|
|
10
|
+
schedule: "0 8 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
psql "{{database_url}}" -t -c "select round(100.0 * sum(case when status = 'no_show' then 1 else 0 end) / count(*), 1) from reservations where reservation_date = current_date - interval '1 day';"
|
|
15
|
+
variables:
|
|
16
|
+
database_url:
|
|
17
|
+
default: "postgres://user:pass@host:5432/db"
|
|
18
|
+
description: Connection string for the reservations database.
|
|
19
|
+
compatible_agents: [generic, claude, codex]
|
|
20
|
+
notes: Assumes a `reservations` table with `status` and `reservation_date` columns — adjust the query for your reservation system's schema; compare the printed rate against your normal baseline manually.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: inventory-count-discrepancy-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Inventory Count Discrepancy Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares a physical inventory count against system records and flags
|
|
6
|
+
mismatches worth investigating. Use this if shrinkage or data entry
|
|
7
|
+
errors have ever gone unnoticed until a full audit months later.
|
|
8
|
+
category: inventory
|
|
9
|
+
tags: [inventory, audit, discrepancy]
|
|
10
|
+
schedule: "0 9 1 * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Compare the physical count file at {{physical_count_file}} against
|
|
15
|
+
system inventory records (query {{database_url}} or the inventory
|
|
16
|
+
system).
|
|
17
|
+
1. For each SKU, compute the difference between physical and system
|
|
18
|
+
quantity.
|
|
19
|
+
2. Flag any SKU with a discrepancy of {{threshold_units}} units or more,
|
|
20
|
+
or {{threshold_pct}}% of system quantity, whichever is smaller.
|
|
21
|
+
3. Report flagged SKUs ranked by discrepancy size, with a guess at
|
|
22
|
+
likely cause if the pattern suggests one (e.g. consistent
|
|
23
|
+
under-count of one category = possible shrinkage).
|
|
24
|
+
variables:
|
|
25
|
+
physical_count_file:
|
|
26
|
+
default: "physical-count.csv"
|
|
27
|
+
description: CSV export of the physical count, columns sku,quantity.
|
|
28
|
+
database_url:
|
|
29
|
+
default: "postgres://user:pass@host:5432/db"
|
|
30
|
+
description: Connection string for the system inventory database.
|
|
31
|
+
threshold_units:
|
|
32
|
+
default: 5
|
|
33
|
+
description: Absolute unit discrepancy that triggers a flag.
|
|
34
|
+
threshold_pct:
|
|
35
|
+
default: 10
|
|
36
|
+
description: Percent discrepancy that triggers a flag.
|
|
37
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
38
|
+
notes: No generic script mode — matching two data sources and judging what's a meaningful discrepancy needs an agent, not a fixed query.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
id: low-stock-alert
|
|
2
|
+
version: 1
|
|
3
|
+
name: Low Stock Alert
|
|
4
|
+
description: >
|
|
5
|
+
Checks inventory levels against a reorder point and flags SKUs running
|
|
6
|
+
low. Use this if you've ever gone out of stock on a bestseller because
|
|
7
|
+
nobody was watching the count.
|
|
8
|
+
category: inventory
|
|
9
|
+
tags: [inventory, stock, ecommerce]
|
|
10
|
+
schedule: "0 7 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
psql "{{database_url}}" -t -c "select sku, quantity, reorder_point from inventory where quantity <= reorder_point;"
|
|
15
|
+
variables:
|
|
16
|
+
database_url:
|
|
17
|
+
default: "postgres://user:pass@host:5432/db"
|
|
18
|
+
description: Connection string for the inventory database.
|
|
19
|
+
compatible_agents: [generic, claude, codex]
|
|
20
|
+
notes: Assumes an `inventory` table with `sku`, `quantity`, and `reorder_point` columns — adjust the query to your schema.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: crypto-price-alert
|
|
2
|
+
version: 1
|
|
3
|
+
name: Crypto Price Alert
|
|
4
|
+
description: >
|
|
5
|
+
Checks a crypto asset's price and alerts when it crosses a threshold you
|
|
6
|
+
set. Use this if you're waiting for a price target and don't want to
|
|
7
|
+
keep a tab open all day watching a chart.
|
|
8
|
+
category: investing
|
|
9
|
+
tags: [crypto, price, alert]
|
|
10
|
+
schedule: "*/15 * * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
price=$(curl -s "https://api.coingecko.com/api/v3/simple/price?ids={{coin_id}}&vs_currencies={{vs_currency}}" | grep -o '[0-9.]*' | head -n1);
|
|
15
|
+
if [ -z "$price" ]; then echo "ERROR: could not fetch price for {{coin_id}}"; exit 1; fi;
|
|
16
|
+
if awk "BEGIN{exit !($price {{comparison}} {{target_price}})}"; then
|
|
17
|
+
echo "ALERT: {{coin_id}} is $price {{vs_currency}} ({{comparison}} {{target_price}})";
|
|
18
|
+
else echo "OK: {{coin_id}} is $price {{vs_currency}}"; fi
|
|
19
|
+
variables:
|
|
20
|
+
coin_id:
|
|
21
|
+
default: "bitcoin"
|
|
22
|
+
description: CoinGecko coin id (e.g. bitcoin, ethereum).
|
|
23
|
+
vs_currency:
|
|
24
|
+
default: "usd"
|
|
25
|
+
description: Currency to price against.
|
|
26
|
+
target_price:
|
|
27
|
+
default: 50000
|
|
28
|
+
description: Threshold price to compare against.
|
|
29
|
+
comparison:
|
|
30
|
+
default: ">="
|
|
31
|
+
description: "Comparison operator for triggering the alert: <=, >=, <, or >."
|
|
32
|
+
compatible_agents: [generic, claude, codex]
|
|
33
|
+
notes: Uses the free CoinGecko public API, no key required; rate-limited so avoid scheduling much tighter than every few minutes.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: portfolio-rebalance-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Portfolio Rebalance Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares your current asset allocation to your target and flags drift
|
|
6
|
+
worth rebalancing. Use this if your portfolio only gets rebalanced
|
|
7
|
+
whenever you happen to remember to look.
|
|
8
|
+
category: investing
|
|
9
|
+
tags: [investing, portfolio, rebalancing]
|
|
10
|
+
schedule: "0 9 1 * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Check current portfolio allocation against the target allocation below.
|
|
15
|
+
Target: {{target_allocation}}
|
|
16
|
+
1. Pull current balances/allocation from {{brokerage_hint}} (or ask the
|
|
17
|
+
user for current values if no direct access).
|
|
18
|
+
2. Compute drift per asset class vs. target.
|
|
19
|
+
3. Flag any class drifted more than {{drift_threshold_pct}} percentage
|
|
20
|
+
points, and suggest the trade(s) to rebalance back.
|
|
21
|
+
variables:
|
|
22
|
+
target_allocation:
|
|
23
|
+
default: "60% stocks / 30% bonds / 10% cash"
|
|
24
|
+
description: Your target allocation across asset classes.
|
|
25
|
+
brokerage_hint:
|
|
26
|
+
default: "your brokerage account"
|
|
27
|
+
description: Where portfolio balances live.
|
|
28
|
+
drift_threshold_pct:
|
|
29
|
+
default: 5
|
|
30
|
+
description: Percentage-point drift from target that triggers a rebalance flag.
|
|
31
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
32
|
+
notes: No generic script mode — brokerage APIs vary widely and most require OAuth the agent may not have configured.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
id: cert-renewal-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Professional Certification Renewal Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Warns you before a professional certification expires or its renewal
|
|
6
|
+
window opens. Use this if you've ever let a cert lapse and had to retake
|
|
7
|
+
an exam that a renewal course would've avoided.
|
|
8
|
+
category: learning
|
|
9
|
+
tags: [learning, certification, renewal]
|
|
10
|
+
schedule: "0 9 1 * *"
|
|
11
|
+
timezone: "America/Los_Angeles"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
today=$(date +%s);
|
|
15
|
+
expiry_ts=$(date -d "{{expiry_date}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{expiry_date}}" +%s);
|
|
16
|
+
days_left=$(( (expiry_ts - today) / 86400 ));
|
|
17
|
+
if [ "$days_left" -le "{{warn_days}}" ]; then echo "WARNING: {{cert_name}} expires in $days_left days ({{expiry_date}})"; exit 1;
|
|
18
|
+
else echo "OK: {{cert_name}} expires in $days_left days"; fi
|
|
19
|
+
variables:
|
|
20
|
+
cert_name:
|
|
21
|
+
default: "your certification"
|
|
22
|
+
description: Name of the certification to track.
|
|
23
|
+
expiry_date:
|
|
24
|
+
default: "2027-01-01"
|
|
25
|
+
description: Certification expiry date (YYYY-MM-DD).
|
|
26
|
+
warn_days:
|
|
27
|
+
default: 60
|
|
28
|
+
description: Days before expiry to start warning.
|
|
29
|
+
compatible_agents: [generic, claude, codex]
|
|
30
|
+
notes: Manual expiry_date input — update after each renewal cycle.
|