@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,36 @@
1
+ id: equipment-maintenance-due-reminder
2
+ version: 1
3
+ name: Farm Equipment Maintenance Due Reminder
4
+ description: >
5
+ Tracks engine hours or mileage against manufacturer service intervals for
6
+ tractors and other equipment, and warns when service is coming due. Use
7
+ this if equipment has ever broken down mid-season because a service
8
+ interval slipped by.
9
+ category: agriculture
10
+ tags: [equipment, maintenance, tractor, service]
11
+ schedule: "0 6 * * 1"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v interval="{{service_interval_hours}}" -v warn="{{warn_hours_before}}" '
16
+ NR==1 {next}
17
+ {
18
+ hours_since_service = $2 - $3;
19
+ hours_until_due = interval - hours_since_service;
20
+ if (hours_until_due <= warn) {
21
+ printf "DUE SOON: %s — %d hrs since last service, %d hrs until next service\n", $1, hours_since_service, hours_until_due;
22
+ }
23
+ }
24
+ ' "{{equipment_hours_csv_path}}"
25
+ variables:
26
+ equipment_hours_csv_path:
27
+ default: "./equipment-hours.csv"
28
+ description: "Path to a CSV with columns: equipment_name,current_hours,last_service_hours."
29
+ service_interval_hours:
30
+ default: 250
31
+ description: Manufacturer-recommended engine hours between services.
32
+ warn_hours_before:
33
+ default: 25
34
+ description: How many hours before the interval to start warning.
35
+ compatible_agents: [generic, claude, codex]
36
+ notes: Assumes a manually or telematics-updated CSV of current engine hours per machine — point it at whatever export your equipment's system provides.
@@ -0,0 +1,41 @@
1
+ id: irrigation-schedule-check
2
+ version: 1
3
+ name: Irrigation Need Check
4
+ description: >
5
+ Checks recent rainfall and forecast against a soil-moisture threshold to
6
+ tell you whether irrigation is actually needed today. Use this if you've
7
+ ever watered on a fixed schedule and either wasted water after rain or
8
+ under-watered during a dry stretch.
9
+ category: agriculture
10
+ tags: [irrigation, water, weather, crops]
11
+ schedule: "0 6 * * *"
12
+ timezone: "America/Chicago"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check rainfall for the last {{lookback_days}} days and the forecast for
16
+ the next {{forecast_days}} days at latitude {{latitude}}, longitude
17
+ {{longitude}} (use any weather API available).
18
+ 1. Sum recent rainfall (inches or mm) and note any significant rain
19
+ expected soon.
20
+ 2. Compare against the crop's typical weekly water need of
21
+ {{weekly_need_inches}} inches.
22
+ 3. Recommend: irrigate today, hold off (rain covers it), or irrigate
23
+ partially — with a one-line reason.
24
+ variables:
25
+ latitude:
26
+ default: "40.0"
27
+ description: Latitude of the field.
28
+ longitude:
29
+ default: "-95.0"
30
+ description: Longitude of the field.
31
+ lookback_days:
32
+ default: 7
33
+ description: Days of rainfall history to sum.
34
+ forecast_days:
35
+ default: 3
36
+ description: Days of forecast to check before recommending irrigation.
37
+ weekly_need_inches:
38
+ default: 1.0
39
+ description: Approximate weekly water requirement for the crop in question.
40
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
41
+ notes: A simple rainfall-vs-need heuristic — not a substitute for actual soil moisture sensors if you have them wired in.
@@ -0,0 +1,41 @@
1
+ id: weather-frost-alert
2
+ version: 1
3
+ name: Frost/Freeze Risk Alert
4
+ description: >
5
+ Checks the forecast for your fields and warns if frost or freeze
6
+ temperatures are coming, so you have time to cover crops or run
7
+ frost-protection irrigation. Use this if a surprise cold snap has ever
8
+ cost you a harvest.
9
+ category: agriculture
10
+ tags: [weather, frost, crops, alert]
11
+ schedule: "0 18 * * *"
12
+ timezone: "America/Chicago"
13
+ runner: hybrid
14
+ command: >
15
+ curl -s "https://api.open-meteo.com/v1/forecast?latitude={{latitude}}&longitude={{longitude}}&hourly=temperature_2m&forecast_days=2&temperature_unit=fahrenheit" |
16
+ grep -o '"temperature_2m":\[[^]]*\]' |
17
+ head -c 2000
18
+ prompt: |
19
+ Fetch the next 48-hour hourly forecast for latitude {{latitude}}, longitude
20
+ {{longitude}} (use any weather API available).
21
+ 1. Flag any hour where temperature is forecast at or below
22
+ {{frost_threshold_f}}°F.
23
+ 2. Note the earliest and coldest such hour.
24
+ 3. Give a plain recommendation: cover crops, run frost irrigation, or no
25
+ action needed, based on how low and how long the cold spell lasts.
26
+ script_note: >
27
+ `command` dumps raw hourly temperature numbers with no threshold check or
28
+ recommendation — you'd still have to scan for the frost hours yourself.
29
+ `prompt` does the threshold comparison and gives an action recommendation.
30
+ variables:
31
+ latitude:
32
+ default: "40.0"
33
+ description: Latitude of the field/farm location.
34
+ longitude:
35
+ default: "-95.0"
36
+ description: Longitude of the field/farm location.
37
+ frost_threshold_f:
38
+ default: 34
39
+ description: Temperature (°F) at or below which frost risk is a concern.
40
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
41
+ notes: Uses the free Open-Meteo API in script mode (no key required); swap in your preferred ag-weather provider if you have one.
@@ -0,0 +1,31 @@
1
+ id: change-order-approval-reminder
2
+ version: 1
3
+ name: Change Order Approval Reminder
4
+ description: >
5
+ Flags change orders that have been waiting on client sign-off too long.
6
+ Use this if work has ever stalled, or gone ahead unapproved, because a
7
+ change order sat in someone's inbox for weeks.
8
+ category: construction
9
+ tags: [construction, change-orders, approvals]
10
+ schedule: "0 8 * * 1-5"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ awk -F, -v today="$today" -v warn={{stale_days}} '
16
+ NR>1 && $3 == "pending" {
17
+ cmd="date -d \"" $2 "\" +%s 2>/dev/null || date -jf \"%Y-%m-%d\" \"" $2 "\" +%s";
18
+ cmd | getline sent_ts; close(cmd);
19
+ days_waiting = int((today - sent_ts) / 86400);
20
+ if (days_waiting >= warn) print "WARNING: change order \"" $1 "\" pending " days_waiting " days (sent " $2 ")";
21
+ }
22
+ ' {{change_orders_csv}}
23
+ variables:
24
+ change_orders_csv:
25
+ default: "change-orders.csv"
26
+ description: "CSV with header row, columns: description,sent_date(YYYY-MM-DD),status(pending/approved/rejected)."
27
+ stale_days:
28
+ default: 5
29
+ description: Days pending before it's flagged for follow-up.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep change-orders.csv updated as change orders go out and come back signed.
@@ -0,0 +1,35 @@
1
+ id: crosspost-lag-check
2
+ version: 1
3
+ name: Crosspost Lag Check
4
+ description: >
5
+ Checks that content published on your primary platform actually got
6
+ mirrored to your other channels. Use this if a video or post has ever
7
+ gone up on YouTube and just never made it to the other platforms because
8
+ crossposting was manual and someone forgot.
9
+ category: creator
10
+ tags: [content, crosspost, publishing]
11
+ schedule: "0 10 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Compare recent uploads on {{primary_platform}} against what's been
16
+ posted on {{secondary_platforms}} over the last {{lookback_days}} days.
17
+ 1. List content published on {{primary_platform}} with no matching post
18
+ on one or more of {{secondary_platforms}} within {{max_lag_days}}
19
+ days of the original.
20
+ 2. Report each gap with the platform(s) missing it.
21
+ variables:
22
+ primary_platform:
23
+ default: "YouTube"
24
+ description: Your main publishing platform.
25
+ secondary_platforms:
26
+ default: "Instagram, TikTok, X"
27
+ description: Comma-separated list of platforms content should also land on.
28
+ lookback_days:
29
+ default: 14
30
+ description: How far back to check for crossposting gaps.
31
+ max_lag_days:
32
+ default: 3
33
+ description: Days after the original post before a missing crosspost counts as a gap.
34
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
35
+ notes: No generic script mode — checking multiple platform APIs and matching content across them needs an agent, not a fixed query.
@@ -0,0 +1,34 @@
1
+ id: gas-price-alert
2
+ version: 1
3
+ name: Gas Price Alert
4
+ description: >
5
+ Checks current network gas price and alerts when it drops below your
6
+ target, so you can time a planned transaction instead of overpaying
7
+ during a busy window. Use this if you've ever paid 5x normal gas
8
+ because you executed at a random moment instead of waiting.
9
+ category: crypto
10
+ tags: [crypto, gas, ethereum, blockchain]
11
+ schedule: "*/15 * * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ gas_hex=$(curl -s "{{rpc_endpoint}}" -X POST -H "Content-Type: application/json" \
16
+ --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":1}' |
17
+ grep -o '"result":"0x[0-9a-fA-F]*"' | grep -o '0x[0-9a-fA-F]*');
18
+ if [ -n "$gas_hex" ]; then
19
+ wei=$((16#${gas_hex#0x}));
20
+ gwei=$(awk -v w="$wei" 'BEGIN{printf "%.2f", w/1000000000}');
21
+ echo "Current gas price: $gwei gwei";
22
+ awk -v g="$gwei" -v target="{{target_gwei}}" 'BEGIN{if (g+0 <= target+0) print "GAS BELOW TARGET — good time to transact"}';
23
+ else
24
+ echo "Could not fetch gas price — check RPC endpoint.";
25
+ fi
26
+ variables:
27
+ rpc_endpoint:
28
+ default: "https://eth.llamarpc.com"
29
+ description: JSON-RPC endpoint for the chain to query.
30
+ target_gwei:
31
+ default: 20
32
+ description: Gas price (in gwei) at or below which to alert that it's a good time to transact.
33
+ compatible_agents: [generic, claude, codex]
34
+ notes: Read-only network query — no wallet/signing involved. Point at an L2's RPC endpoint if that's the chain you care about instead of mainnet.
@@ -0,0 +1,49 @@
1
+ id: smart-contract-upgrade-watch
2
+ version: 1
3
+ name: Smart Contract Upgrade/Deprecation Watch
4
+ description: >
5
+ Watches a tracked smart contract's on-chain events and any linked
6
+ project announcements for upgrades, migrations, or deprecation notices.
7
+ Use this if a protocol you depend on has ever migrated to a new
8
+ contract address and you found out only after something broke.
9
+ category: crypto
10
+ tags: [crypto, smart-contract, upgrade, monitoring]
11
+ schedule: "0 */6 * * *"
12
+ timezone: "UTC"
13
+ runner: hybrid
14
+ command: >
15
+ curl -s "{{rpc_endpoint}}" -X POST -H "Content-Type: application/json" \
16
+ --data "{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":[\"{{contract_address}}\",\"latest\"],\"id\":1}" |
17
+ grep -o '"result":"0x[0-9a-fA-F]*"' | head -c 200
18
+ prompt: |
19
+ Check contract {{contract_address}} on the relevant chain for recent
20
+ activity in the last {{lookback_hours}} hours (via a block explorer API
21
+ or RPC): new admin/upgrade events, proxy implementation changes, or
22
+ pause events.
23
+ Also check {{project_announcement_url}} for any migration or
24
+ deprecation announcement.
25
+ 1. Report whether the contract's bytecode/implementation changed
26
+ recently (proxy upgrade) or an admin/ownership event fired.
27
+ 2. Summarize any related announcement about migration, deprecation, or
28
+ a new contract address to switch to.
29
+ 3. If nothing changed, say so in one line.
30
+ script_note: >
31
+ `command` only confirms the contract still has code deployed at that
32
+ address — it can't detect proxy upgrades, admin events, or read
33
+ announcements. `prompt` checks actual upgrade/admin events and
34
+ cross-references project announcements.
35
+ variables:
36
+ rpc_endpoint:
37
+ default: "https://eth.llamarpc.com"
38
+ description: JSON-RPC endpoint for the chain the contract lives on.
39
+ contract_address:
40
+ default: "0x0000000000000000000000000000000000000000"
41
+ description: Contract address to monitor.
42
+ project_announcement_url:
43
+ default: "https://example.com/blog"
44
+ description: Project blog/changelog/Twitter URL to check for migration announcements.
45
+ lookback_hours:
46
+ default: 6
47
+ description: How far back to check for on-chain events.
48
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
49
+ notes: Read-only — no private key involved. Proxy-upgrade detection depends on the contract following a common proxy pattern (e.g. EIP-1967); adapt for non-standard contracts.
@@ -0,0 +1,37 @@
1
+ id: wallet-balance-watch
2
+ version: 1
3
+ name: Wallet Balance Watch
4
+ description: >
5
+ Checks a public wallet address's balance and alerts if it drops below a
6
+ threshold, without needing any private key or exchange API access. Use
7
+ this if you've ever wanted a heads-up when a hot wallet's gas/funding
8
+ balance ran low.
9
+ category: crypto
10
+ tags: [crypto, wallet, balance, blockchain]
11
+ schedule: "*/30 * * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ balance=$(curl -s "{{rpc_endpoint}}" -X POST -H "Content-Type: application/json" \
16
+ --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["{{wallet_address}}","latest"],"id":1}' |
17
+ grep -o '"result":"0x[0-9a-fA-F]*"' | grep -o '0x[0-9a-fA-F]*');
18
+ if [ -n "$balance" ]; then
19
+ wei=$((16#${balance#0x}));
20
+ eth=$(awk -v w="$wei" 'BEGIN{printf "%.6f", w/1000000000000000000}');
21
+ echo "Balance for {{wallet_address}}: $eth ETH";
22
+ awk -v bal="$eth" -v min="{{min_balance_eth}}" 'BEGIN{if (bal+0 < min+0) print "LOW BALANCE ALERT: below " min " ETH threshold"}';
23
+ else
24
+ echo "Could not fetch balance — check RPC endpoint/address.";
25
+ fi
26
+ variables:
27
+ rpc_endpoint:
28
+ default: "https://eth.llamarpc.com"
29
+ description: JSON-RPC endpoint for the chain to query (public endpoint by default).
30
+ wallet_address:
31
+ default: "0x0000000000000000000000000000000000000000"
32
+ description: Public wallet address to monitor.
33
+ min_balance_eth:
34
+ default: 0.05
35
+ description: Balance threshold (in native token units) below which to alert.
36
+ compatible_agents: [generic, claude, codex]
37
+ notes: Read-only — public RPC calls only, no private key or signing involved. Swap the RPC endpoint and unit conversion for other EVM chains as needed.
@@ -0,0 +1,38 @@
1
+ id: github-issue-triage
2
+ version: 1
3
+ name: GitHub Issue Triage
4
+ description: >
5
+ Reviews new GitHub issues opened since the last run and sorts them into
6
+ urgent/normal/low-priority with a suggested label and one-line reason.
7
+ Use this if issues pile up untriaged and the urgent ones get lost in the
8
+ noise until someone stumbles on them days later.
9
+ category: devops
10
+ tags: [github, issues, triage, devops]
11
+ schedule: "0 8,14 * * 1-5"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ List issues opened in {{repo}} in the last {{lookback_hours}} hours (via
16
+ `gh issue list` or the GitHub API) that don't yet have a priority label.
17
+ 1. For each, classify as urgent / normal / low-priority based on: does it
18
+ describe a crash, data loss, or security issue (urgent); a real bug
19
+ with a workaround (normal); or a feature request/question
20
+ (low-priority).
21
+ 2. Give a one-line reason for the classification.
22
+ 3. Suggest the matching label from: {{priority_labels}}.
23
+ 4. List anything you'd flag for a human to look at today regardless of
24
+ label, separately at the top.
25
+ 5. Do not apply labels or comment automatically — output a review-ready
26
+ list only.
27
+ variables:
28
+ repo:
29
+ default: "owner/repo"
30
+ description: GitHub repo to triage, in owner/repo form.
31
+ lookback_hours:
32
+ default: 24
33
+ description: How far back to check for untriaged issues.
34
+ priority_labels:
35
+ default: "priority:urgent, priority:normal, priority:low"
36
+ description: Comma-separated label names to suggest, matching your repo's label scheme.
37
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
38
+ notes: Read-only triage suggestions — wire up label/comment application separately once you trust the classifications, and requires `gh` CLI auth or API token with issue read access.
@@ -0,0 +1,38 @@
1
+ id: abandoned-cart-recovery-check
2
+ version: 1
3
+ name: Abandoned Cart Recovery Check
4
+ description: >
5
+ Reviews carts abandoned in the last day and drafts recovery emails for
6
+ ones above a minimum value, instead of relying only on your platform's
7
+ generic auto-recovery flow. Use this if you've ever suspected your
8
+ default abandoned-cart email is too generic to convert high-value carts.
9
+ category: ecommerce
10
+ tags: [ecommerce, cart-abandonment, recovery, sales]
11
+ schedule: "0 10 * * *"
12
+ timezone: "UTC"
13
+ runner: agent-prompt
14
+ prompt: |
15
+ Check {{store_platform}} for carts abandoned in the last
16
+ {{lookback_hours}} hours with a value at or above ${{min_cart_value}}.
17
+ 1. List each cart: items, value, and how long ago it was abandoned.
18
+ 2. Draft a personalized recovery email per cart referencing the actual
19
+ items (not a generic template), with a mild incentive if
20
+ {{allow_discount}} is true.
21
+ 3. Flag any cart abandoned at the payment step specifically — these
22
+ often indicate a checkout friction problem worth investigating
23
+ separately from lack of interest.
24
+ variables:
25
+ store_platform:
26
+ default: "your storefront platform"
27
+ description: Name of the e-commerce platform (e.g. "Shopify", "WooCommerce", "BigCommerce").
28
+ lookback_hours:
29
+ default: 24
30
+ description: How far back to check for abandoned carts.
31
+ min_cart_value:
32
+ default: 50
33
+ description: Minimum cart value worth a personalized recovery attempt.
34
+ allow_discount:
35
+ default: false
36
+ description: Whether the draft email may offer a discount incentive.
37
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
38
+ notes: Draft-only — review before sending, and check your platform's marketing-consent rules before emailing anyone who didn't opt in.
@@ -0,0 +1,33 @@
1
+ id: low-stock-reorder-alert
2
+ version: 1
3
+ name: Low Stock Reorder Alert
4
+ description: >
5
+ Checks inventory levels against a reorder threshold per SKU and flags
6
+ anything that needs restocking before it actually sells out. Use this if
7
+ a bestseller has ever gone out of stock because nobody was watching the
8
+ count.
9
+ category: ecommerce
10
+ tags: [ecommerce, inventory, stock, reorder]
11
+ schedule: "0 7 * * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ awk -F',' -v days="{{lead_time_days}}" '
16
+ NR==1 {next}
17
+ {
18
+ daily_velocity = $3 / 30;
19
+ days_of_stock = (daily_velocity > 0) ? $2 / daily_velocity : 9999;
20
+ if (days_of_stock <= days) {
21
+ printf "REORDER: %s — %d units left, ~%d days of stock at current velocity\n", $1, $2, days_of_stock;
22
+ }
23
+ }
24
+ ' "{{inventory_csv_path}}"
25
+ variables:
26
+ inventory_csv_path:
27
+ default: "./inventory.csv"
28
+ description: "Path to a CSV with columns: sku,current_stock,units_sold_last_30_days."
29
+ lead_time_days:
30
+ default: 14
31
+ description: Supplier lead time in days — reorder when stock will run out before a new order could arrive.
32
+ compatible_agents: [generic, claude, codex]
33
+ notes: Velocity is a simple 30-day average — swap in a smarter forecast if your product has strong seasonality.
@@ -0,0 +1,29 @@
1
+ id: return-refund-backlog-check
2
+ version: 1
3
+ name: Return/Refund Backlog Check
4
+ description: >
5
+ Checks how many return/refund requests are sitting unprocessed and flags
6
+ any past your stated turnaround time. Use this if refund complaints have
7
+ ever shown up in reviews before anyone internally noticed the backlog.
8
+ category: ecommerce
9
+ tags: [ecommerce, returns, refunds, backlog]
10
+ schedule: "0 9 * * *"
11
+ timezone: "UTC"
12
+ runner: agent-prompt
13
+ prompt: |
14
+ Check {{store_platform}} for return/refund requests still open.
15
+ 1. Total open requests, grouped by how long they've been open.
16
+ 2. Flag any request older than {{turnaround_sla_days}} days as past SLA.
17
+ 3. For past-SLA requests, draft a short customer-facing update
18
+ apologizing for the delay and giving a status/next step.
19
+ 4. Summarize the most common return reason across the backlog, in case
20
+ it points to a product quality issue worth escalating.
21
+ variables:
22
+ store_platform:
23
+ default: "your storefront/returns platform"
24
+ description: Name of the platform to check (e.g. "Shopify", "Loop Returns", "Happy Returns").
25
+ turnaround_sla_days:
26
+ default: 3
27
+ description: Your stated turnaround time for processing a return/refund.
28
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
29
+ notes: Draft-only — review customer-facing messages before sending, especially any that touch on refund amounts or timing promises.
@@ -0,0 +1,27 @@
1
+ id: report-card-deadline-reminder
2
+ version: 1
3
+ name: Report Card Deadline Reminder
4
+ description: >
5
+ Warns you before the grade submission deadline for report cards. Use
6
+ this if grades have ever gone in late because the cutoff snuck up
7
+ during the last busy week of the term.
8
+ category: education
9
+ tags: [education, grading, deadlines]
10
+ schedule: "0 8 * * *"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ today=$(date +%s);
15
+ due_ts=$(date -d "{{grades_due_date}}" +%s 2>/dev/null || date -jf "%Y-%m-%d" "{{grades_due_date}}" +%s);
16
+ days_left=$(( (due_ts - today) / 86400 ));
17
+ if [ "$days_left" -le "{{warn_days}}" ] && [ "$days_left" -ge 0 ]; then echo "WARNING: grades due in $days_left days ({{grades_due_date}})"; exit 1;
18
+ else echo "OK: grades due in $days_left days"; fi
19
+ variables:
20
+ grades_due_date:
21
+ default: "2026-12-15"
22
+ description: Grade submission deadline for this term (YYYY-MM-DD).
23
+ warn_days:
24
+ default: 5
25
+ description: Days before the deadline to start warning.
26
+ compatible_agents: [generic, claude, codex]
27
+ notes: Manual grades_due_date input — update it each term based on the school's academic calendar.
@@ -0,0 +1,31 @@
1
+ id: event-budget-overrun-check
2
+ version: 1
3
+ name: Event Budget Overrun Check
4
+ description: >
5
+ Compares committed spend so far against the event budget and flags
6
+ overrun risk. Use this if an event has ever come in over budget because
7
+ nobody totaled up the vendor contracts until after the fact.
8
+ category: events
9
+ tags: [events, budget, planning]
10
+ schedule: "0 9 * * 1"
11
+ timezone: "UTC"
12
+ runner: shell
13
+ command: >
14
+ spent=$(awk -F, 'NR>1 {sum+=$2} END {print sum+0}' {{expenses_csv}});
15
+ budget={{budget_usd}};
16
+ if awk "BEGIN{exit !($spent >= $budget * {{warn_pct}} / 100)}"; then
17
+ echo "WARNING: committed spend \$$spent has hit ${warn_pct:-{{warn_pct}}}% of \$$budget budget";
18
+ exit 1;
19
+ else echo "OK: committed spend \$$spent of \$$budget budget"; fi
20
+ variables:
21
+ expenses_csv:
22
+ default: "event-expenses.csv"
23
+ description: "CSV with header row, columns: line_item,amount."
24
+ budget_usd:
25
+ default: 10000
26
+ description: Total event budget in USD.
27
+ warn_pct:
28
+ default: 90
29
+ description: Percent of budget committed before it's flagged.
30
+ compatible_agents: [generic, claude, codex]
31
+ notes: Keep event-expenses.csv updated as vendor contracts and deposits are committed, not just when invoices arrive.
@@ -0,0 +1,44 @@
1
+ id: subscription-price-hike-watch
2
+ version: 1
3
+ name: Subscription Price Hike Watch
4
+ description: >
5
+ Checks a tracked subscription's current price against the last price you
6
+ recorded and flags any increase. Use this if a service has ever quietly
7
+ raised its price and you only noticed months later scrolling through a
8
+ bank statement.
9
+ category: finance
10
+ tags: [subscriptions, price, billing, finance]
11
+ schedule: "0 8 1 * *"
12
+ timezone: "UTC"
13
+ runner: shell
14
+ command: >
15
+ history_file="{{price_history_path}}";
16
+ touch "$history_file";
17
+ current_price=$(curl -s -A "Mozilla/5.0" "{{pricing_page_url}}" | grep -o '{{price_pattern}}' | head -1);
18
+ if [ -z "$current_price" ]; then
19
+ echo "could not extract a price from {{pricing_page_url}} — check {{price_pattern}} still matches the page.";
20
+ exit 0;
21
+ fi
22
+ last_price=$(tail -1 "$history_file" | cut -d',' -f2);
23
+ today=$(date +%Y-%m-%d);
24
+ echo "$today,$current_price" >> "$history_file";
25
+ if [ -n "$last_price" ] && [ "$current_price" != "$last_price" ]; then
26
+ echo "PRICE CHANGED for {{service_name}}: $last_price -> $current_price";
27
+ else
28
+ echo "{{service_name}} price unchanged: $current_price";
29
+ fi
30
+ variables:
31
+ service_name:
32
+ default: "your subscription service"
33
+ description: Name of the subscription being tracked.
34
+ pricing_page_url:
35
+ default: "https://example.com/pricing"
36
+ description: Public pricing page URL to check.
37
+ price_pattern:
38
+ default: "\\$[0-9]+\\.[0-9][0-9]"
39
+ description: A grep pattern that extracts the price text from the page (adjust per site's markup).
40
+ price_history_path:
41
+ default: "./subscription-price-history.csv"
42
+ description: Local CSV file to append price observations to over time.
43
+ compatible_agents: [generic, claude, codex]
44
+ notes: Extraction is a simple grep on rendered HTML — pages that render price via JS won't match; use an agent-prompt job or a headless browser if that's the case for your target service.
@@ -0,0 +1,31 @@
1
+ id: vehicle-registration-expiry-check
2
+ version: 1
3
+ name: Fleet Vehicle Registration Expiry Check
4
+ description: >
5
+ Warns you before a fleet vehicle's registration expires. Use this if a
6
+ vehicle has ever gotten pulled over, or failed a job site check-in,
7
+ because its registration quietly lapsed.
8
+ category: fleet
9
+ tags: [fleet, registration, compliance]
10
+ schedule: "0 8 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 {
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: vehicle " $1 " registration expires in " days_left " days (" $2 ")";
21
+ }
22
+ ' {{fleet_registration_csv}}
23
+ variables:
24
+ fleet_registration_csv:
25
+ default: "fleet-registration.csv"
26
+ description: "CSV with header row, columns: vehicle_id,registration_expiry(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 fleet-registration.csv updated after each renewal — one row per vehicle.
@@ -0,0 +1,39 @@
1
+ id: game-patch-notes-watch
2
+ version: 1
3
+ name: Game Patch Notes Watch
4
+ description: >
5
+ Checks whether any game you regularly stream or play competitively has
6
+ shipped a new patch, and summarizes what changed. Use this if you've
7
+ ever gone live only to discover mid-stream that a balance patch dropped
8
+ and your strategies are stale.
9
+ category: gaming
10
+ tags: [gaming, patch-notes, updates, competitive]
11
+ schedule: "0 8 * * *"
12
+ timezone: "UTC"
13
+ runner: hybrid
14
+ command: >
15
+ for url in {{patch_notes_urls}}; do
16
+ echo "--- $url ---";
17
+ curl -s -A "Mozilla/5.0" "$url" | grep -io '<title>[^<]*</title>' | head -1;
18
+ done
19
+ prompt: |
20
+ Check each of these patch-notes sources for updates published in the
21
+ last {{lookback_hours}} hours: {{patch_notes_urls}}.
22
+ 1. For any source with a new patch, summarize the top 3-5 changes most
23
+ relevant to competitive play or content strategy (balance changes,
24
+ new content, meta-shifting changes) — skip pure bugfix trivia.
25
+ 2. Note the patch version/date.
26
+ 3. If nothing new, say so in one line per source.
27
+ script_note: >
28
+ `command` just fetches each page's title to spot an update, with no
29
+ actual summary of what changed — you'd still have to read the patch
30
+ notes yourself. `prompt` reads and summarizes the meaningful changes.
31
+ variables:
32
+ patch_notes_urls:
33
+ default: "https://www.leagueoflegends.com/en-us/news/tags/patch-notes/"
34
+ description: Space-separated list of patch-notes page URLs to watch.
35
+ lookback_hours:
36
+ default: 24
37
+ description: How recent a patch needs to be to count as "new."
38
+ compatible_agents: [claude, codex, hermes, openclaw, generic]
39
+ notes: Works best for games with a stable patch-notes URL/RSS feed; some publishers gate notes behind launcher clients instead of a webpage.
@@ -0,0 +1,30 @@
1
+ id: stream-schedule-reminder
2
+ version: 1
3
+ name: Stream Schedule Prep Reminder
4
+ description: >
5
+ Reminds you before a scheduled stream and checks that your streaming
6
+ software/overlays are up to date. Use this if you've ever gone live late
7
+ because you were still fighting an OBS update mid-countdown.
8
+ category: gaming
9
+ tags: [streaming, schedule, obs, reminder]
10
+ schedule: "0 * * * *"
11
+ timezone: "America/Los_Angeles"
12
+ runner: shell
13
+ command: >
14
+ now=$(date +%H:%M);
15
+ target="{{stream_time}}";
16
+ echo "Now: $now, next stream: $target on {{stream_days}}.";
17
+ if command -v obs >/dev/null 2>&1; then
18
+ obs --version 2>/dev/null || echo "OBS installed but version check failed";
19
+ else
20
+ echo "OBS CLI not found on PATH — check your streaming software manually.";
21
+ fi
22
+ variables:
23
+ stream_time:
24
+ default: "18:00"
25
+ description: Scheduled stream start time (24h, local timezone).
26
+ stream_days:
27
+ default: "Mon/Wed/Fri"
28
+ description: Days you typically stream, for the reminder text.
29
+ compatible_agents: [generic, claude, codex]
30
+ notes: Runs hourly and just prints the target time for a human/agent to compare — wire it to your actual OBS/streaming software's API for a real go/no-go check if available.