@wonsukchoi/crondex 0.8.0 → 0.9.1
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 +22 -8
- package/bin/crondex.js +44 -0
- package/catalog.json +862 -16
- package/jobs/agriculture/equipment-maintenance-due-reminder.yaml +36 -0
- package/jobs/agriculture/irrigation-schedule-check.yaml +41 -0
- package/jobs/agriculture/weather-frost-alert.yaml +41 -0
- package/jobs/crypto/gas-price-alert.yaml +34 -0
- package/jobs/crypto/smart-contract-upgrade-watch.yaml +49 -0
- package/jobs/crypto/wallet-balance-watch.yaml +37 -0
- package/jobs/devops/cost-alert.yaml +2 -2
- package/jobs/devops/github-issue-triage.yaml +38 -0
- package/jobs/devops/repo-health-check.yaml +2 -2
- package/jobs/ecommerce/abandoned-cart-recovery-check.yaml +38 -0
- package/jobs/ecommerce/low-stock-reorder-alert.yaml +33 -0
- package/jobs/ecommerce/return-refund-backlog-check.yaml +29 -0
- package/jobs/finance/subscription-price-hike-watch.yaml +44 -0
- package/jobs/gaming/game-patch-notes-watch.yaml +39 -0
- package/jobs/gaming/stream-schedule-reminder.yaml +30 -0
- package/jobs/gaming/subscriber-churn-watch.yaml +39 -0
- package/jobs/healthcare/appointment-no-show-follow-up.yaml +32 -0
- package/jobs/healthcare/license-credential-expiry-check.yaml +35 -0
- package/jobs/healthcare/patient-recall-reminder.yaml +34 -0
- package/jobs/hr/benefits-enrollment-deadline-reminder.yaml +34 -0
- package/jobs/hr/new-hire-paperwork-check.yaml +35 -0
- package/jobs/hr/payroll-run-reminder.yaml +30 -0
- package/jobs/insurance/claim-status-check.yaml +30 -0
- package/jobs/insurance/coverage-gap-audit.yaml +37 -0
- package/jobs/insurance/policy-renewal-reminder.yaml +35 -0
- package/jobs/marketing/competitor-page-diff-watch.yaml +52 -0
- package/jobs/personal/bill-due-reminder.yaml +2 -2
- package/jobs/personal/end-of-day-wrap-message.yaml +32 -0
- package/jobs/personal/new-restaurant-roundup.yaml +35 -0
- package/jobs/productivity/morning-briefing-digest.yaml +42 -0
- package/jobs/productivity/recurring-task-queue-reset.yaml +37 -0
- package/jobs/restaurant/health-inspection-prep-reminder.yaml +29 -0
- package/jobs/restaurant/inventory-waste-log-review.yaml +32 -0
- package/jobs/restaurant/reservation-noshow-deposit-check.yaml +32 -0
- package/jobs/sales/newly-funded-leads-scout.yaml +44 -0
- package/jobs/security/open-port-check.yaml +2 -2
- package/package.json +3 -2
|
@@ -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,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.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
id: cost-alert
|
|
2
|
-
version:
|
|
2
|
+
version: 2
|
|
3
3
|
name: Cloud/API Cost Alert
|
|
4
4
|
description: >
|
|
5
5
|
Checks your recent cloud or API spend against a budget and warns you if
|
|
@@ -14,7 +14,7 @@ command: >
|
|
|
14
14
|
if command -v aws >/dev/null 2>&1; then
|
|
15
15
|
start=$(date -d "-{{lookback_days}} days" +%Y-%m-%d 2>/dev/null || date -v-{{lookback_days}}d +%Y-%m-%d);
|
|
16
16
|
end=$(date +%Y-%m-%d);
|
|
17
|
-
aws ce get-cost-and-usage --time-period Start
|
|
17
|
+
aws ce get-cost-and-usage --time-period Start="$start",End="$end" --granularity DAILY --metrics UnblendedCost 2>/dev/null || echo "aws cost explorer call failed (check credentials/permissions)";
|
|
18
18
|
elif command -v vercel >/dev/null 2>&1; then
|
|
19
19
|
vercel billing 2>/dev/null || echo "vercel CLI present but no billing subcommand available";
|
|
20
20
|
else
|
|
@@ -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.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
id: repo-health-check
|
|
2
|
-
version:
|
|
2
|
+
version: 2
|
|
3
3
|
name: Git Repo Health Check
|
|
4
4
|
description: >
|
|
5
5
|
Checks a git repo for branches nobody's touched in a while, uncommitted
|
|
@@ -15,7 +15,7 @@ command: >
|
|
|
15
15
|
cd {{repo_path}} && now=$(date +%s) &&
|
|
16
16
|
echo "--- branches stale >{{stale_branch_days}}d ---" &&
|
|
17
17
|
git for-each-ref --format='%(committerdate:unix) %(refname:short)' refs/heads/ |
|
|
18
|
-
while read ts name; do age=$(( (now-ts)/86400 )); [ "$age" -gt {{stale_branch_days}} ] && echo "$name: ${age}d"; done;
|
|
18
|
+
while read -r ts name; do age=$(( (now-ts)/86400 )); [ "$age" -gt {{stale_branch_days}} ] && echo "$name: ${age}d"; done;
|
|
19
19
|
echo "--- uncommitted changes ---"; git status --short;
|
|
20
20
|
command -v gh >/dev/null && { echo "--- open PRs ---"; gh pr list --state open; } || echo "(gh not installed, skipping PR check)"
|
|
21
21
|
prompt: |
|
|
@@ -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,44 @@
|
|
|
1
|
+
id: subscription-price-hike-watch
|
|
2
|
+
version: 2
|
|
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,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.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
id: subscriber-churn-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Subscriber/Follower Churn Watch
|
|
4
|
+
description: >
|
|
5
|
+
Checks your channel's subscriber or follower count trend and flags a
|
|
6
|
+
meaningful drop so you can investigate before it becomes a pattern. Use
|
|
7
|
+
this if you've ever noticed a slow bleed of subscribers only after
|
|
8
|
+
checking your dashboard months later.
|
|
9
|
+
category: gaming
|
|
10
|
+
tags: [streaming, subscribers, churn, analytics]
|
|
11
|
+
schedule: "0 9 * * 1"
|
|
12
|
+
timezone: "America/Los_Angeles"
|
|
13
|
+
runner: agent-prompt
|
|
14
|
+
prompt: |
|
|
15
|
+
Check subscriber/follower counts for {{channel_name}} on
|
|
16
|
+
{{platform_name}} for the last {{lookback_weeks}} weeks (via any
|
|
17
|
+
analytics dashboard or API available).
|
|
18
|
+
1. Report week-over-week change in subscriber/follower count.
|
|
19
|
+
2. Flag if this week's net change is negative or more than
|
|
20
|
+
{{drop_threshold_pct}}% below the recent average.
|
|
21
|
+
3. If there's a drop, note anything that coincided with it (missed
|
|
22
|
+
stream days, controversial clip, platform-wide event) if that
|
|
23
|
+
information is available.
|
|
24
|
+
4. If growth is healthy, just report the trend in one line.
|
|
25
|
+
variables:
|
|
26
|
+
channel_name:
|
|
27
|
+
default: "your channel"
|
|
28
|
+
description: Channel/handle to check.
|
|
29
|
+
platform_name:
|
|
30
|
+
default: "Twitch"
|
|
31
|
+
description: Platform to check (e.g. "Twitch", "YouTube", "Kick").
|
|
32
|
+
lookback_weeks:
|
|
33
|
+
default: 8
|
|
34
|
+
description: Weeks of history to establish a baseline trend.
|
|
35
|
+
drop_threshold_pct:
|
|
36
|
+
default: 15
|
|
37
|
+
description: Percentage drop below the recent average that counts as worth flagging.
|
|
38
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
39
|
+
notes: Depends on what the platform's API/dashboard exposes — some platforms require OAuth to pull subscriber history.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: appointment-no-show-follow-up
|
|
2
|
+
version: 1
|
|
3
|
+
name: Appointment No-Show Follow-Up
|
|
4
|
+
description: >
|
|
5
|
+
Reviews yesterday's no-show appointments and drafts a follow-up message
|
|
6
|
+
offering to rebook. Use this if you've ever let a missed appointment go
|
|
7
|
+
quiet and lost the patient/client entirely instead of just rebooking them.
|
|
8
|
+
category: healthcare
|
|
9
|
+
tags: [appointments, no-show, patients, scheduling]
|
|
10
|
+
schedule: "0 9 * * *"
|
|
11
|
+
timezone: "America/New_York"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Pull yesterday's appointments from {{scheduling_system}} and find any marked
|
|
15
|
+
no-show or cancelled-late.
|
|
16
|
+
1. For each, note the patient/client name, appointment type, and provider.
|
|
17
|
+
2. Draft a short, warm follow-up message (SMS or email length) offering to
|
|
18
|
+
rebook, without shaming them for missing it.
|
|
19
|
+
3. Flag anyone with 2+ no-shows in the last {{lookback_days}} days
|
|
20
|
+
separately — practices often want a different (firmer) policy for
|
|
21
|
+
repeat no-shows.
|
|
22
|
+
4. Output as a list ready for staff to review and send — do not send
|
|
23
|
+
anything automatically.
|
|
24
|
+
variables:
|
|
25
|
+
scheduling_system:
|
|
26
|
+
default: "your scheduling/EHR system"
|
|
27
|
+
description: Name of the scheduling or EHR system to check (e.g. "Epic", "Calendly", "SimplePractice").
|
|
28
|
+
lookback_days:
|
|
29
|
+
default: 90
|
|
30
|
+
description: Window to check for repeat no-show patterns.
|
|
31
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
32
|
+
notes: Draft-only — never send messages automatically. Confirm HIPAA/compliance rules for your practice before wiring this to an agent with system access.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: license-credential-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Staff License/Credential Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks a tracked list of staff licenses, certifications, or credentials
|
|
6
|
+
(e.g. nursing license, CPR cert, DEA registration) and warns before any
|
|
7
|
+
expire. Use this if you've ever had a provider accidentally see patients
|
|
8
|
+
on a lapsed license or certification.
|
|
9
|
+
category: healthcare
|
|
10
|
+
tags: [compliance, licensing, credentials, staff]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v days="{{warn_days_before}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline expiry_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
diff_days = (expiry_epoch - now_epoch) / 86400;
|
|
22
|
+
if (diff_days <= days) {
|
|
23
|
+
printf "EXPIRING: %s — %s expires %s (%d days)\n", $1, $2, $3, diff_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{credential_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
credential_csv_path:
|
|
29
|
+
default: "./staff-credentials.csv"
|
|
30
|
+
description: "Path to a CSV of staff credentials with columns: staff_name,credential_type,expiry_date (YYYY-MM-DD)."
|
|
31
|
+
warn_days_before:
|
|
32
|
+
default: 45
|
|
33
|
+
description: How many days before expiry to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Assumes a maintained CSV export from your credentialing/HR system — point it at whatever that system can export on a schedule.
|