@wonsukchoi/crondex 0.1.1 → 0.2.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 +55 -19
- package/catalog.json +272 -1
- package/jobs/content/broken-link-check.yaml +33 -0
- package/jobs/content/changelog-digest.yaml +40 -0
- package/jobs/content/social-mentions-watch.yaml +32 -0
- package/jobs/devops/disk-space-check.yaml +26 -0
- package/jobs/devops/docker-image-prune.yaml +24 -0
- package/jobs/devops/env-drift-check.yaml +34 -0
- package/jobs/devops/stale-dependency-pr-nudge.yaml +25 -0
- package/jobs/finance/net-worth-snapshot.yaml +33 -0
- package/jobs/finance/subscription-audit.yaml +34 -0
- package/jobs/personal/screen-time-check.yaml +27 -0
- package/jobs/personal/water-intake-reminder.yaml +20 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -58,7 +58,9 @@ crondex/
|
|
|
58
58
|
├── jobs/
|
|
59
59
|
│ ├── devops/
|
|
60
60
|
│ ├── productivity/
|
|
61
|
-
│
|
|
61
|
+
│ ├── personal/
|
|
62
|
+
│ ├── content/
|
|
63
|
+
│ └── finance/
|
|
62
64
|
└── scripts/
|
|
63
65
|
├── build-catalog.js regenerates catalog.json from jobs/**/*.yaml
|
|
64
66
|
└── validate-jobs.js validates every job against the schema
|
|
@@ -66,24 +68,58 @@ crondex/
|
|
|
66
68
|
|
|
67
69
|
## Available jobs
|
|
68
70
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
|
76
|
-
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
71
|
+
24 jobs across 5 categories. Full details (description, tags, variables)
|
|
72
|
+
live in `catalog.json` and each job's YAML file — run `crondex list` or
|
|
73
|
+
browse `jobs/<category>/` for the plain-language rundown of each.
|
|
74
|
+
|
|
75
|
+
**devops**
|
|
76
|
+
|
|
77
|
+
| id | schedule | modes |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| `dependency-audit` | `0 8 * * 1` | script + agent-prompt |
|
|
80
|
+
| `log-cleanup` | `30 3 * * *` | script |
|
|
81
|
+
| `repo-health-check` | `0 9 * * 1-5` | script + agent-prompt |
|
|
82
|
+
| `backup-reminder` | `0 9 * * *` | script |
|
|
83
|
+
| `ssl-cert-expiry-check` | `0 6 * * *` | script |
|
|
84
|
+
| `uptime-ping-check` | `*/15 * * * *` | script |
|
|
85
|
+
| `cost-alert` | `0 7 * * *` | script + agent-prompt |
|
|
86
|
+
| `disk-space-check` | `0 */6 * * *` | script |
|
|
87
|
+
| `docker-image-prune` | `0 4 * * *` | script |
|
|
88
|
+
| `env-drift-check` | `0 8 * * *` | script |
|
|
89
|
+
| `stale-dependency-pr-nudge` | `0 9 * * 1-5` | script |
|
|
90
|
+
|
|
91
|
+
**productivity**
|
|
92
|
+
|
|
93
|
+
| id | schedule | modes |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| `daily-standup-summary` | `0 8 * * 1-5` | script + agent-prompt |
|
|
96
|
+
| `inbox-triage` | `0 7,13 * * 1-5` | agent-prompt only |
|
|
97
|
+
| `weekly-report` | `0 16 * * 5` | script + agent-prompt |
|
|
98
|
+
|
|
99
|
+
**personal**
|
|
100
|
+
|
|
101
|
+
| id | schedule | modes |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| `bill-due-reminder` | `0 9 * * *` | script |
|
|
104
|
+
| `habit-checkin` | `0 20 * * *` | script |
|
|
105
|
+
| `meal-plan-reminder` | `0 9 * * 0` | script + agent-prompt |
|
|
106
|
+
| `water-intake-reminder` | `0 9,12,15,18 * * *` | script |
|
|
107
|
+
| `screen-time-check` | `0 20 * * *` | agent-prompt only |
|
|
108
|
+
|
|
109
|
+
**content**
|
|
110
|
+
|
|
111
|
+
| id | schedule | modes |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| `changelog-digest` | `0 10 * * 5` | script + agent-prompt |
|
|
114
|
+
| `broken-link-check` | `0 7 * * 1` | script |
|
|
115
|
+
| `social-mentions-watch` | `0 9 * * *` | agent-prompt only |
|
|
116
|
+
|
|
117
|
+
**finance**
|
|
118
|
+
|
|
119
|
+
| id | schedule | modes |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `subscription-audit` | `0 9 1 * *` | script |
|
|
122
|
+
| `net-worth-snapshot` | `0 9 1 * *` | script |
|
|
87
123
|
|
|
88
124
|
## How a job works
|
|
89
125
|
|
package/catalog.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"generated_by": "scripts/build-catalog.js",
|
|
3
3
|
"schema": "schema/job.schema.json",
|
|
4
|
-
"count":
|
|
4
|
+
"count": 24,
|
|
5
5
|
"jobs": [
|
|
6
6
|
{
|
|
7
7
|
"id": "backup-reminder",
|
|
@@ -51,6 +51,57 @@
|
|
|
51
51
|
],
|
|
52
52
|
"path": "jobs/personal/bill-due-reminder.yaml"
|
|
53
53
|
},
|
|
54
|
+
{
|
|
55
|
+
"id": "broken-link-check",
|
|
56
|
+
"version": 1,
|
|
57
|
+
"name": "Broken Link Check",
|
|
58
|
+
"description": "Checks a list of URLs and reports any that are dead. Use this if your site or docs have outbound/internal links that quietly rot over time.",
|
|
59
|
+
"category": "content",
|
|
60
|
+
"tags": [
|
|
61
|
+
"links",
|
|
62
|
+
"content",
|
|
63
|
+
"maintenance"
|
|
64
|
+
],
|
|
65
|
+
"schedule": "0 7 * * 1",
|
|
66
|
+
"timezone": "UTC",
|
|
67
|
+
"runner": "shell",
|
|
68
|
+
"modes": [
|
|
69
|
+
"script"
|
|
70
|
+
],
|
|
71
|
+
"compatible_agents": [
|
|
72
|
+
"generic",
|
|
73
|
+
"claude",
|
|
74
|
+
"codex"
|
|
75
|
+
],
|
|
76
|
+
"path": "jobs/content/broken-link-check.yaml"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "changelog-digest",
|
|
80
|
+
"version": 1,
|
|
81
|
+
"name": "Changelog Digest",
|
|
82
|
+
"description": "Rolls up recent commits into a draft changelog entry your users could actually read. Use this if you ship regularly but always write the changelog as an afterthought (or skip it).",
|
|
83
|
+
"category": "content",
|
|
84
|
+
"tags": [
|
|
85
|
+
"changelog",
|
|
86
|
+
"release",
|
|
87
|
+
"docs"
|
|
88
|
+
],
|
|
89
|
+
"schedule": "0 10 * * 5",
|
|
90
|
+
"timezone": "UTC",
|
|
91
|
+
"runner": "hybrid",
|
|
92
|
+
"modes": [
|
|
93
|
+
"script",
|
|
94
|
+
"agent-prompt"
|
|
95
|
+
],
|
|
96
|
+
"compatible_agents": [
|
|
97
|
+
"claude",
|
|
98
|
+
"codex",
|
|
99
|
+
"hermes",
|
|
100
|
+
"openclaw",
|
|
101
|
+
"generic"
|
|
102
|
+
],
|
|
103
|
+
"path": "jobs/content/changelog-digest.yaml"
|
|
104
|
+
},
|
|
54
105
|
{
|
|
55
106
|
"id": "cost-alert",
|
|
56
107
|
"version": 1,
|
|
@@ -132,6 +183,78 @@
|
|
|
132
183
|
],
|
|
133
184
|
"path": "jobs/devops/dependency-audit.yaml"
|
|
134
185
|
},
|
|
186
|
+
{
|
|
187
|
+
"id": "disk-space-check",
|
|
188
|
+
"version": 1,
|
|
189
|
+
"name": "Disk Space Check",
|
|
190
|
+
"description": "Checks how full a disk/volume is and warns you before it fills up. Use this if you've ever had a server or laptop grind to a halt because disk usage crept up unnoticed.",
|
|
191
|
+
"category": "devops",
|
|
192
|
+
"tags": [
|
|
193
|
+
"disk",
|
|
194
|
+
"monitoring",
|
|
195
|
+
"maintenance"
|
|
196
|
+
],
|
|
197
|
+
"schedule": "0 */6 * * *",
|
|
198
|
+
"timezone": "UTC",
|
|
199
|
+
"runner": "shell",
|
|
200
|
+
"modes": [
|
|
201
|
+
"script"
|
|
202
|
+
],
|
|
203
|
+
"compatible_agents": [
|
|
204
|
+
"generic",
|
|
205
|
+
"claude",
|
|
206
|
+
"codex"
|
|
207
|
+
],
|
|
208
|
+
"path": "jobs/devops/disk-space-check.yaml"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"id": "docker-image-prune",
|
|
212
|
+
"version": 1,
|
|
213
|
+
"name": "Docker Image & Container Prune",
|
|
214
|
+
"description": "Cleans up stopped containers and dangling Docker images so they don't quietly eat your disk. Use this if you run Docker locally or on a server and never remember to clean up after yourself.",
|
|
215
|
+
"category": "devops",
|
|
216
|
+
"tags": [
|
|
217
|
+
"docker",
|
|
218
|
+
"cleanup",
|
|
219
|
+
"disk-space"
|
|
220
|
+
],
|
|
221
|
+
"schedule": "0 4 * * *",
|
|
222
|
+
"timezone": "UTC",
|
|
223
|
+
"runner": "shell",
|
|
224
|
+
"modes": [
|
|
225
|
+
"script"
|
|
226
|
+
],
|
|
227
|
+
"compatible_agents": [
|
|
228
|
+
"generic",
|
|
229
|
+
"claude",
|
|
230
|
+
"codex"
|
|
231
|
+
],
|
|
232
|
+
"path": "jobs/devops/docker-image-prune.yaml"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"id": "env-drift-check",
|
|
236
|
+
"version": 1,
|
|
237
|
+
"name": "Env File Drift Check",
|
|
238
|
+
"description": "Compares your .env against .env.example and flags keys that are missing or extra. Use this if you've ever deployed and hit a crash because a new required env var never got set.",
|
|
239
|
+
"category": "devops",
|
|
240
|
+
"tags": [
|
|
241
|
+
"config",
|
|
242
|
+
"env",
|
|
243
|
+
"drift"
|
|
244
|
+
],
|
|
245
|
+
"schedule": "0 8 * * *",
|
|
246
|
+
"timezone": "UTC",
|
|
247
|
+
"runner": "shell",
|
|
248
|
+
"modes": [
|
|
249
|
+
"script"
|
|
250
|
+
],
|
|
251
|
+
"compatible_agents": [
|
|
252
|
+
"generic",
|
|
253
|
+
"claude",
|
|
254
|
+
"codex"
|
|
255
|
+
],
|
|
256
|
+
"path": "jobs/devops/env-drift-check.yaml"
|
|
257
|
+
},
|
|
135
258
|
{
|
|
136
259
|
"id": "habit-checkin",
|
|
137
260
|
"version": 1,
|
|
@@ -232,6 +355,30 @@
|
|
|
232
355
|
],
|
|
233
356
|
"path": "jobs/personal/meal-plan-reminder.yaml"
|
|
234
357
|
},
|
|
358
|
+
{
|
|
359
|
+
"id": "net-worth-snapshot",
|
|
360
|
+
"version": 1,
|
|
361
|
+
"name": "Net Worth Snapshot Reminder",
|
|
362
|
+
"description": "Reminds you to log your net worth each month and shows the trend from your last two entries. Use this if you want to track your finances over time but keep forgetting to actually sit down and do it.",
|
|
363
|
+
"category": "finance",
|
|
364
|
+
"tags": [
|
|
365
|
+
"finance",
|
|
366
|
+
"net-worth",
|
|
367
|
+
"tracking"
|
|
368
|
+
],
|
|
369
|
+
"schedule": "0 9 1 * *",
|
|
370
|
+
"timezone": "UTC",
|
|
371
|
+
"runner": "shell",
|
|
372
|
+
"modes": [
|
|
373
|
+
"script"
|
|
374
|
+
],
|
|
375
|
+
"compatible_agents": [
|
|
376
|
+
"generic",
|
|
377
|
+
"claude",
|
|
378
|
+
"codex"
|
|
379
|
+
],
|
|
380
|
+
"path": "jobs/finance/net-worth-snapshot.yaml"
|
|
381
|
+
},
|
|
235
382
|
{
|
|
236
383
|
"id": "repo-health-check",
|
|
237
384
|
"version": 1,
|
|
@@ -259,6 +406,58 @@
|
|
|
259
406
|
],
|
|
260
407
|
"path": "jobs/devops/repo-health-check.yaml"
|
|
261
408
|
},
|
|
409
|
+
{
|
|
410
|
+
"id": "screen-time-check",
|
|
411
|
+
"version": 1,
|
|
412
|
+
"name": "Screen Time Check",
|
|
413
|
+
"description": "Checks today's screen time against a goal and tells you if you're over. Use this if you're trying to cut down on screen time but never actually look at the stats your phone/laptop already collects.",
|
|
414
|
+
"category": "personal",
|
|
415
|
+
"tags": [
|
|
416
|
+
"health",
|
|
417
|
+
"screen-time",
|
|
418
|
+
"wellbeing"
|
|
419
|
+
],
|
|
420
|
+
"schedule": "0 20 * * *",
|
|
421
|
+
"timezone": "America/Los_Angeles",
|
|
422
|
+
"runner": "agent-prompt",
|
|
423
|
+
"modes": [
|
|
424
|
+
"agent-prompt"
|
|
425
|
+
],
|
|
426
|
+
"compatible_agents": [
|
|
427
|
+
"claude",
|
|
428
|
+
"codex",
|
|
429
|
+
"hermes",
|
|
430
|
+
"openclaw",
|
|
431
|
+
"generic"
|
|
432
|
+
],
|
|
433
|
+
"path": "jobs/personal/screen-time-check.yaml"
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"id": "social-mentions-watch",
|
|
437
|
+
"version": 1,
|
|
438
|
+
"name": "Social Mentions Watch",
|
|
439
|
+
"description": "Scans for recent mentions of your brand, product, or repo and summarizes them. Use this if you want to catch a complaint or bug report on social media before it turns into a bigger problem.",
|
|
440
|
+
"category": "content",
|
|
441
|
+
"tags": [
|
|
442
|
+
"social",
|
|
443
|
+
"mentions",
|
|
444
|
+
"monitoring"
|
|
445
|
+
],
|
|
446
|
+
"schedule": "0 9 * * *",
|
|
447
|
+
"timezone": "UTC",
|
|
448
|
+
"runner": "agent-prompt",
|
|
449
|
+
"modes": [
|
|
450
|
+
"agent-prompt"
|
|
451
|
+
],
|
|
452
|
+
"compatible_agents": [
|
|
453
|
+
"claude",
|
|
454
|
+
"codex",
|
|
455
|
+
"hermes",
|
|
456
|
+
"openclaw",
|
|
457
|
+
"generic"
|
|
458
|
+
],
|
|
459
|
+
"path": "jobs/content/social-mentions-watch.yaml"
|
|
460
|
+
},
|
|
262
461
|
{
|
|
263
462
|
"id": "ssl-cert-expiry-check",
|
|
264
463
|
"version": 1,
|
|
@@ -284,6 +483,54 @@
|
|
|
284
483
|
],
|
|
285
484
|
"path": "jobs/devops/ssl-cert-expiry-check.yaml"
|
|
286
485
|
},
|
|
486
|
+
{
|
|
487
|
+
"id": "stale-dependency-pr-nudge",
|
|
488
|
+
"version": 1,
|
|
489
|
+
"name": "Stale Dependency PR Nudge",
|
|
490
|
+
"description": "Lists open dependency-bump pull requests (from Dependabot/Renovate) that have been sitting for a while. Use this if automated PRs pile up and quietly go stale instead of getting merged or closed.",
|
|
491
|
+
"category": "devops",
|
|
492
|
+
"tags": [
|
|
493
|
+
"github",
|
|
494
|
+
"dependencies",
|
|
495
|
+
"pr"
|
|
496
|
+
],
|
|
497
|
+
"schedule": "0 9 * * 1-5",
|
|
498
|
+
"timezone": "UTC",
|
|
499
|
+
"runner": "shell",
|
|
500
|
+
"modes": [
|
|
501
|
+
"script"
|
|
502
|
+
],
|
|
503
|
+
"compatible_agents": [
|
|
504
|
+
"generic",
|
|
505
|
+
"claude",
|
|
506
|
+
"codex"
|
|
507
|
+
],
|
|
508
|
+
"path": "jobs/devops/stale-dependency-pr-nudge.yaml"
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"id": "subscription-audit",
|
|
512
|
+
"version": 1,
|
|
513
|
+
"name": "Subscription Audit",
|
|
514
|
+
"description": "Flags recurring subscriptions you haven't actually used in a while. Use this if you suspect you're paying for things you forgot to cancel.",
|
|
515
|
+
"category": "finance",
|
|
516
|
+
"tags": [
|
|
517
|
+
"subscriptions",
|
|
518
|
+
"budget",
|
|
519
|
+
"finance"
|
|
520
|
+
],
|
|
521
|
+
"schedule": "0 9 1 * *",
|
|
522
|
+
"timezone": "UTC",
|
|
523
|
+
"runner": "shell",
|
|
524
|
+
"modes": [
|
|
525
|
+
"script"
|
|
526
|
+
],
|
|
527
|
+
"compatible_agents": [
|
|
528
|
+
"generic",
|
|
529
|
+
"claude",
|
|
530
|
+
"codex"
|
|
531
|
+
],
|
|
532
|
+
"path": "jobs/finance/subscription-audit.yaml"
|
|
533
|
+
},
|
|
287
534
|
{
|
|
288
535
|
"id": "uptime-ping-check",
|
|
289
536
|
"version": 1,
|
|
@@ -308,6 +555,30 @@
|
|
|
308
555
|
],
|
|
309
556
|
"path": "jobs/devops/uptime-ping-check.yaml"
|
|
310
557
|
},
|
|
558
|
+
{
|
|
559
|
+
"id": "water-intake-reminder",
|
|
560
|
+
"version": 1,
|
|
561
|
+
"name": "Water Intake Reminder",
|
|
562
|
+
"description": "Nudges you to drink water a few times a day toward a daily goal. Use this if you sit at a desk all day and forget to drink water until you've got a headache.",
|
|
563
|
+
"category": "personal",
|
|
564
|
+
"tags": [
|
|
565
|
+
"health",
|
|
566
|
+
"hydration",
|
|
567
|
+
"reminder"
|
|
568
|
+
],
|
|
569
|
+
"schedule": "0 9,12,15,18 * * *",
|
|
570
|
+
"timezone": "America/Los_Angeles",
|
|
571
|
+
"runner": "shell",
|
|
572
|
+
"modes": [
|
|
573
|
+
"script"
|
|
574
|
+
],
|
|
575
|
+
"compatible_agents": [
|
|
576
|
+
"generic",
|
|
577
|
+
"claude",
|
|
578
|
+
"codex"
|
|
579
|
+
],
|
|
580
|
+
"path": "jobs/personal/water-intake-reminder.yaml"
|
|
581
|
+
},
|
|
311
582
|
{
|
|
312
583
|
"id": "weekly-report",
|
|
313
584
|
"version": 1,
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: broken-link-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Broken Link Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks a list of URLs and reports any that are dead. Use this if your
|
|
6
|
+
site or docs have outbound/internal links that quietly rot over time.
|
|
7
|
+
category: content
|
|
8
|
+
tags: [links, content, maintenance]
|
|
9
|
+
schedule: "0 7 * * 1"
|
|
10
|
+
timezone: "UTC"
|
|
11
|
+
runner: shell
|
|
12
|
+
command: >
|
|
13
|
+
file={{urls_file}};
|
|
14
|
+
[ -f "$file" ] || { echo "ERROR: $file not found"; exit 1; };
|
|
15
|
+
fail=0;
|
|
16
|
+
while IFS= read -r url; do
|
|
17
|
+
[ -z "$url" ] && continue;
|
|
18
|
+
code=$(curl -o /dev/null -s -w '%{http_code}' --max-time {{timeout_seconds}} "$url");
|
|
19
|
+
if [ "$code" -ge 400 ] || [ "$code" = "000" ]; then echo "BROKEN ($code): $url"; fail=1; fi
|
|
20
|
+
done < "$file";
|
|
21
|
+
[ "$fail" -eq 0 ] && echo "OK: all links responded successfully";
|
|
22
|
+
exit $fail
|
|
23
|
+
variables:
|
|
24
|
+
urls_file:
|
|
25
|
+
default: "./links.txt"
|
|
26
|
+
description: Plain text file with one URL per line to check.
|
|
27
|
+
timeout_seconds:
|
|
28
|
+
default: 10
|
|
29
|
+
description: Max seconds to wait per URL before treating it as broken.
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: >
|
|
32
|
+
Zero-token, deterministic. You maintain urls_file yourself (or generate
|
|
33
|
+
it from a sitemap) — this job only checks what's listed.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: changelog-digest
|
|
2
|
+
version: 1
|
|
3
|
+
name: Changelog Digest
|
|
4
|
+
description: >
|
|
5
|
+
Rolls up recent commits into a draft changelog entry your users could
|
|
6
|
+
actually read. Use this if you ship regularly but always write the
|
|
7
|
+
changelog as an afterthought (or skip it).
|
|
8
|
+
category: content
|
|
9
|
+
tags: [changelog, release, docs]
|
|
10
|
+
schedule: "0 10 * * 5"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: hybrid
|
|
13
|
+
command: >
|
|
14
|
+
cd {{repo_path}} && last_tag=$(git describe --tags --abbrev=0 2>/dev/null);
|
|
15
|
+
if [ -n "$last_tag" ]; then echo "--- commits since $last_tag ---"; git log "$last_tag"..HEAD --pretty=format:'%h %s';
|
|
16
|
+
else echo "--- no tags found, showing last {{lookback_days}} days ---"; git log --since="{{lookback_days}} days ago" --pretty=format:'%h %s'; fi
|
|
17
|
+
prompt: |
|
|
18
|
+
Draft a user-facing changelog entry for {{project_name}} covering commits
|
|
19
|
+
since the last release (or the last {{lookback_days}} days if no tags
|
|
20
|
+
exist) in {{repo_path}}.
|
|
21
|
+
1. Group into Added / Changed / Fixed.
|
|
22
|
+
2. Rewrite terse commit messages into plain language a user would
|
|
23
|
+
actually understand.
|
|
24
|
+
3. Skip purely internal commits (refactors, tests, CI) unless they're
|
|
25
|
+
user-visible.
|
|
26
|
+
script_note: >
|
|
27
|
+
`command` dumps the raw commit log since the last tag, zero tokens.
|
|
28
|
+
`prompt` groups and rewrites it into an actual user-facing changelog entry.
|
|
29
|
+
variables:
|
|
30
|
+
repo_path:
|
|
31
|
+
default: "."
|
|
32
|
+
description: Path to the repo to pull history from.
|
|
33
|
+
project_name:
|
|
34
|
+
default: "this project"
|
|
35
|
+
description: Name to use in the changelog header.
|
|
36
|
+
lookback_days:
|
|
37
|
+
default: 14
|
|
38
|
+
description: Fallback window if the repo has no tags yet.
|
|
39
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
40
|
+
notes: Schedule defaults to Friday; adjust to your release cadence.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
id: social-mentions-watch
|
|
2
|
+
version: 1
|
|
3
|
+
name: Social Mentions Watch
|
|
4
|
+
description: >
|
|
5
|
+
Scans for recent mentions of your brand, product, or repo and summarizes
|
|
6
|
+
them. Use this if you want to catch a complaint or bug report on social
|
|
7
|
+
media before it turns into a bigger problem.
|
|
8
|
+
category: content
|
|
9
|
+
tags: [social, mentions, monitoring]
|
|
10
|
+
schedule: "0 9 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Search for mentions of "{{brand_or_repo}}" from the last {{lookback_hours}}
|
|
15
|
+
hours across whatever sources you have access to (X/Twitter, Reddit,
|
|
16
|
+
Hacker News, web search).
|
|
17
|
+
1. List each mention with source, link, and a one-line sentiment read
|
|
18
|
+
(positive/neutral/negative).
|
|
19
|
+
2. Flag anything that looks like a bug report, complaint, or something
|
|
20
|
+
needing a response.
|
|
21
|
+
3. If nothing found, just say so.
|
|
22
|
+
variables:
|
|
23
|
+
brand_or_repo:
|
|
24
|
+
default: "your project"
|
|
25
|
+
description: Name, handle, or repo to search mentions of.
|
|
26
|
+
lookback_hours:
|
|
27
|
+
default: 24
|
|
28
|
+
description: Window of mentions to consider.
|
|
29
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
30
|
+
notes: >
|
|
31
|
+
No generic script mode — needs whatever search/API access your agent has
|
|
32
|
+
(web search, X API, Reddit API, etc.); sources vary too much to script generically.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: disk-space-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Disk Space Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks how full a disk/volume is and warns you before it fills up.
|
|
6
|
+
Use this if you've ever had a server or laptop grind to a halt because
|
|
7
|
+
disk usage crept up unnoticed.
|
|
8
|
+
category: devops
|
|
9
|
+
tags: [disk, monitoring, maintenance]
|
|
10
|
+
schedule: "0 */6 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
path={{path}}; threshold={{threshold_pct}};
|
|
15
|
+
pct=$(df -P "$path" | awk 'NR==2 {gsub("%","",$5); print $5}');
|
|
16
|
+
if [ "$pct" -ge "$threshold" ]; then echo "WARNING: $path is ${pct}% full (threshold ${threshold}%)"; exit 1;
|
|
17
|
+
else echo "OK: $path is ${pct}% full"; fi
|
|
18
|
+
variables:
|
|
19
|
+
path:
|
|
20
|
+
default: "/"
|
|
21
|
+
description: Mount point or path to check.
|
|
22
|
+
threshold_pct:
|
|
23
|
+
default: 85
|
|
24
|
+
description: Warn when usage reaches this percentage.
|
|
25
|
+
compatible_agents: [generic, claude, codex]
|
|
26
|
+
notes: Zero-token, deterministic. Uses `df -P` for portable output across macOS/Linux.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
id: docker-image-prune
|
|
2
|
+
version: 1
|
|
3
|
+
name: Docker Image & Container Prune
|
|
4
|
+
description: >
|
|
5
|
+
Cleans up stopped containers and dangling Docker images so they don't
|
|
6
|
+
quietly eat your disk. Use this if you run Docker locally or on a server
|
|
7
|
+
and never remember to clean up after yourself.
|
|
8
|
+
category: devops
|
|
9
|
+
tags: [docker, cleanup, disk-space]
|
|
10
|
+
schedule: "0 4 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
command -v docker >/dev/null 2>&1 || { echo "docker not installed, skipping"; exit 0; };
|
|
15
|
+
docker container prune -f --filter "until={{until}}";
|
|
16
|
+
docker image prune -f --filter "until={{until}}"
|
|
17
|
+
variables:
|
|
18
|
+
until:
|
|
19
|
+
default: "24h"
|
|
20
|
+
description: Only remove containers/images older than this (Docker duration syntax, e.g. "24h", "720h").
|
|
21
|
+
compatible_agents: [generic, claude, codex]
|
|
22
|
+
notes: >
|
|
23
|
+
Destructive by nature (removes stopped containers and dangling images) —
|
|
24
|
+
the `until` default of 24h protects anything recent. Widen with care.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: env-drift-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Env File Drift Check
|
|
4
|
+
description: >
|
|
5
|
+
Compares your .env against .env.example and flags keys that are missing
|
|
6
|
+
or extra. Use this if you've ever deployed and hit a crash because a new
|
|
7
|
+
required env var never got set.
|
|
8
|
+
category: devops
|
|
9
|
+
tags: [config, env, drift]
|
|
10
|
+
schedule: "0 8 * * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
example={{example_path}}; actual={{env_path}};
|
|
15
|
+
[ -f "$example" ] || { echo "ERROR: $example not found"; exit 1; };
|
|
16
|
+
[ -f "$actual" ] || { echo "ERROR: $actual not found"; exit 1; };
|
|
17
|
+
ex_keys=$(grep -vE '^\s*#|^\s*$' "$example" | cut -d= -f1 | sort -u);
|
|
18
|
+
ac_keys=$(grep -vE '^\s*#|^\s*$' "$actual" | cut -d= -f1 | sort -u);
|
|
19
|
+
missing=$(comm -23 <(echo "$ex_keys") <(echo "$ac_keys"));
|
|
20
|
+
extra=$(comm -13 <(echo "$ex_keys") <(echo "$ac_keys"));
|
|
21
|
+
[ -n "$missing" ] && echo "MISSING (in $example, not in $actual): $missing";
|
|
22
|
+
[ -n "$extra" ] && echo "EXTRA (in $actual, not in $example): $extra";
|
|
23
|
+
[ -z "$missing" ] && [ -z "$extra" ] && echo "OK: env keys match example"; true
|
|
24
|
+
variables:
|
|
25
|
+
example_path:
|
|
26
|
+
default: ".env.example"
|
|
27
|
+
description: Path to the example/template env file.
|
|
28
|
+
env_path:
|
|
29
|
+
default: ".env"
|
|
30
|
+
description: Path to the actual env file to check.
|
|
31
|
+
compatible_agents: [generic, claude, codex]
|
|
32
|
+
notes: >
|
|
33
|
+
Zero-token, deterministic. Requires bash (uses process substitution) —
|
|
34
|
+
won't run under plain POSIX sh.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: stale-dependency-pr-nudge
|
|
2
|
+
version: 1
|
|
3
|
+
name: Stale Dependency PR Nudge
|
|
4
|
+
description: >
|
|
5
|
+
Lists open dependency-bump pull requests (from Dependabot/Renovate) that
|
|
6
|
+
have been sitting for a while. Use this if automated PRs pile up and
|
|
7
|
+
quietly go stale instead of getting merged or closed.
|
|
8
|
+
category: devops
|
|
9
|
+
tags: [github, dependencies, pr]
|
|
10
|
+
schedule: "0 9 * * 1-5"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
command -v gh >/dev/null 2>&1 || { echo "gh CLI not installed, skipping"; exit 0; };
|
|
15
|
+
cd {{repo_path}} && gh pr list --state open --json number,title,author,createdAt --jq \
|
|
16
|
+
'.[] | select(.author.login | test("dependabot|renovate"; "i")) | select((now - (.createdAt | fromdateiso8601)) > ({{stale_days}} * 86400)) | "#\(.number) \(.title) (opened \(.createdAt))"'
|
|
17
|
+
variables:
|
|
18
|
+
repo_path:
|
|
19
|
+
default: "."
|
|
20
|
+
description: Path to the repo to check.
|
|
21
|
+
stale_days:
|
|
22
|
+
default: 3
|
|
23
|
+
description: Flag dependency PRs open longer than this many days.
|
|
24
|
+
compatible_agents: [generic, claude, codex]
|
|
25
|
+
notes: Requires an authenticated `gh` CLI. Zero-token, read-only.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
id: net-worth-snapshot
|
|
2
|
+
version: 1
|
|
3
|
+
name: Net Worth Snapshot Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Reminds you to log your net worth each month and shows the trend from
|
|
6
|
+
your last two entries. Use this if you want to track your finances over
|
|
7
|
+
time but keep forgetting to actually sit down and do it.
|
|
8
|
+
category: finance
|
|
9
|
+
tags: [finance, net-worth, tracking]
|
|
10
|
+
schedule: "0 9 1 * *"
|
|
11
|
+
timezone: "UTC"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
file={{net_worth_csv}};
|
|
15
|
+
[ -f "$file" ] || echo "date,net_worth" > "$file";
|
|
16
|
+
today=$(date +%F);
|
|
17
|
+
if tail -n +2 "$file" | cut -d, -f1 | grep -qx "$today"; then
|
|
18
|
+
echo "Already logged today.";
|
|
19
|
+
else
|
|
20
|
+
echo "$today," >> "$file";
|
|
21
|
+
echo "REMINDER: fill in today's net worth in $file";
|
|
22
|
+
fi;
|
|
23
|
+
prev=$(tail -n 2 "$file" | head -n 1 | cut -d, -f2);
|
|
24
|
+
last=$(tail -n 1 "$file" | cut -d, -f2);
|
|
25
|
+
[ -n "$prev" ] && [ -n "$last" ] && echo "Last entry: $last (previous: $prev)"; true
|
|
26
|
+
variables:
|
|
27
|
+
net_worth_csv:
|
|
28
|
+
default: "./net-worth.csv"
|
|
29
|
+
description: CSV log file, one row per month (date,net_worth).
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: >
|
|
32
|
+
Zero-token. Appends a blank row for you to fill in by hand — doesn't
|
|
33
|
+
pull balances from any bank automatically.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
id: subscription-audit
|
|
2
|
+
version: 1
|
|
3
|
+
name: Subscription Audit
|
|
4
|
+
description: >
|
|
5
|
+
Flags recurring subscriptions you haven't actually used in a while.
|
|
6
|
+
Use this if you suspect you're paying for things you forgot to cancel.
|
|
7
|
+
category: finance
|
|
8
|
+
tags: [subscriptions, budget, finance]
|
|
9
|
+
schedule: "0 9 1 * *"
|
|
10
|
+
timezone: "UTC"
|
|
11
|
+
runner: shell
|
|
12
|
+
command: >
|
|
13
|
+
file={{subs_file}}; unused_days={{unused_days}};
|
|
14
|
+
[ -f "$file" ] || { echo "ERROR: $file not found"; exit 1; };
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
tail -n +2 "$file" | while IFS=, read -r name cost last_used; do
|
|
17
|
+
last_epoch=$(date -j -f %Y-%m-%d "$last_used" +%s 2>/dev/null || date -d "$last_used" +%s);
|
|
18
|
+
days=$(( (today-last_epoch)/86400 ));
|
|
19
|
+
if [ "$days" -gt "$unused_days" ]; then echo "UNUSED: $name (\$$cost/mo) — not used in $days days"; fi
|
|
20
|
+
done
|
|
21
|
+
variables:
|
|
22
|
+
subs_file:
|
|
23
|
+
default: "./subscriptions.csv"
|
|
24
|
+
description: >
|
|
25
|
+
CSV with header "name,monthly_cost,last_used_date" (YYYY-MM-DD), one
|
|
26
|
+
subscription per row.
|
|
27
|
+
unused_days:
|
|
28
|
+
default: 30
|
|
29
|
+
description: Flag a subscription if it hasn't been used in this many days.
|
|
30
|
+
compatible_agents: [generic, claude, codex]
|
|
31
|
+
notes: >
|
|
32
|
+
Zero-token, deterministic. You maintain subs_file yourself (update
|
|
33
|
+
last_used_date when you actually use each service) — this job only
|
|
34
|
+
reads what's in the file, doesn't pull from any bank or card statement.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
id: screen-time-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Screen Time Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks today's screen time against a goal and tells you if you're over.
|
|
6
|
+
Use this if you're trying to cut down on screen time but never actually
|
|
7
|
+
look at the stats your phone/laptop already collects.
|
|
8
|
+
category: personal
|
|
9
|
+
tags: [health, screen-time, wellbeing]
|
|
10
|
+
schedule: "0 20 * * *"
|
|
11
|
+
timezone: "America/Los_Angeles"
|
|
12
|
+
runner: agent-prompt
|
|
13
|
+
prompt: |
|
|
14
|
+
Check today's screen time against a {{daily_limit_hours}} hour goal.
|
|
15
|
+
1. Use whatever screen-time source you have access to (macOS Screen
|
|
16
|
+
Time, iOS Screen Time via Shortcuts, Android Digital Wellbeing,
|
|
17
|
+
RescueTime, etc.).
|
|
18
|
+
2. Report total screen time so far today vs. the goal.
|
|
19
|
+
3. If over goal, note the top 3 apps/categories driving it.
|
|
20
|
+
variables:
|
|
21
|
+
daily_limit_hours:
|
|
22
|
+
default: 3
|
|
23
|
+
description: Daily screen time goal, in hours.
|
|
24
|
+
compatible_agents: [claude, codex, hermes, openclaw, generic]
|
|
25
|
+
notes: >
|
|
26
|
+
No generic script mode — screen-time data access is platform/tool
|
|
27
|
+
specific and usually needs OS-level permissions your agent may not have.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
id: water-intake-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Water Intake Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Nudges you to drink water a few times a day toward a daily goal. Use
|
|
6
|
+
this if you sit at a desk all day and forget to drink water until
|
|
7
|
+
you've got a headache.
|
|
8
|
+
category: personal
|
|
9
|
+
tags: [health, hydration, reminder]
|
|
10
|
+
schedule: "0 9,12,15,18 * * *"
|
|
11
|
+
timezone: "America/Los_Angeles"
|
|
12
|
+
runner: shell
|
|
13
|
+
command: >
|
|
14
|
+
echo "Reminder: drink some water. Goal: {{daily_goal_oz}} oz today."
|
|
15
|
+
variables:
|
|
16
|
+
daily_goal_oz:
|
|
17
|
+
default: 64
|
|
18
|
+
description: Your daily water intake goal, in ounces.
|
|
19
|
+
compatible_agents: [generic, claude, codex]
|
|
20
|
+
notes: Zero-token. Purely a nudge — doesn't track actual intake.
|