{"slug": "show-hn-crondex-all-the-cron-jobs", "title": "Show HN: Crondex - All the Cron Jobs", "summary": "Wonsuk Choi released Crondex, a public directory of 35 pre-made cron jobs across 7 categories designed for AI agents to browse, tweak, and schedule. The tool is available on GitHub and npm, enabling agents like Claude or Codex to autonomously set up tasks such as dependency audits and backup reminders. Crondex aims to simplify automation by providing a structured catalog that agents can query and customize.", "body_md": "A public, growing directory of pre-made cron jobs — built so any AI agent (Claude, Codex, Hermes, OpenClaw, or a plain LLM with shell access) can pull one, tweak it, and schedule it. Clone it, grab a job, adjust the knobs, run it.\n\n```\ngit clone https://github.com/wonsukchoi/crondex.git\ncat crondex/catalog.json          # browse what's available\ncat crondex/jobs/devops/dependency-audit.yaml   # read one job\n```\n\nGive an agent the repo and a goal (\"set up something that checks my repo\nhealth every morning\") — it reads `catalog.json`\n\n, finds the closest match,\nadjusts `schedule`\n\n/`variables`\n\n, and wires it into whatever scheduler it has.\n\nPublished on npm as `@wonsukchoi/crondex`\n\n(the plain name `crondex`\n\nwas\nblocked by npm's anti-typosquat check). The command itself is still\n`crondex`\n\nonce installed — only the package name is scoped:\n\n```\nnpx @wonsukchoi/crondex list                          # browse everything\nnpx @wonsukchoi/crondex list --category devops        # filter by category or --tag\nnpx @wonsukchoi/crondex show backup-reminder          # print one job's YAML\nnpx @wonsukchoi/crondex add backup-reminder --dest ./cron/backup-reminder.yaml\n```\n\nOr install once and drop the scope prefix on every call:\n\n```\nnpm install -g @wonsukchoi/crondex\ncrondex list\n```\n\n`add`\n\ncopies the job's YAML as-is into your project — it's yours to edit\nfrom there. `npx`\n\nalways pulls the latest published catalog; a global\ninstall needs `npm update -g @wonsukchoi/crondex`\n\nto see new jobs (`crondex list`\n\nprints a reminder either way).\n\nA clone works too, no npm required:\n\n```\ngit clone https://github.com/wonsukchoi/crondex.git && cd crondex\nnode bin/crondex.js list\ncrondex/\n├── bin/crondex.js         CLI: list / show / add\n├── catalog.json           generated index of every job — read this first\n├── schema/job.schema.json spec every job file follows\n├── jobs/\n│   ├── devops/\n│   ├── productivity/\n│   ├── personal/\n│   ├── content/\n│   ├── finance/\n│   ├── security/\n│   └── learning/\n└── scripts/\n    ├── build-catalog.js   regenerates catalog.json from jobs/**/*.yaml\n    └── validate-jobs.js   validates every job against the schema\n```\n\n35 jobs across 7 categories. Full details (description, tags, variables)\nlive in `catalog.json`\n\nand each job's YAML file — run `crondex list`\n\nor\nbrowse `jobs/<category>/`\n\nfor the plain-language rundown of each.\n\n**devops**\n\n| id | schedule | modes |\n|---|---|---|\n`dependency-audit` |\n`0 8 * * 1` |\nscript + agent-prompt |\n`log-cleanup` |\n`30 3 * * *` |\nscript |\n`repo-health-check` |\n`0 9 * * 1-5` |\nscript + agent-prompt |\n`backup-reminder` |\n`0 9 * * *` |\nscript |\n`ssl-cert-expiry-check` |\n`0 6 * * *` |\nscript |\n`uptime-ping-check` |\n`*/15 * * * *` |\nscript |\n`cost-alert` |\n`0 7 * * *` |\nscript + agent-prompt |\n`disk-space-check` |\n`0 */6 * * *` |\nscript |\n`docker-image-prune` |\n`0 4 * * *` |\nscript |\n`env-drift-check` |\n`0 8 * * *` |\nscript |\n`stale-dependency-pr-nudge` |\n`0 9 * * 1-5` |\nscript |\n`db-backup-verify` |\n`0 5 * * *` |\nscript |\n`license-compliance-check` |\n`0 8 * * 1` |\nscript |\n`orphaned-branch-cleanup` |\n`0 9 * * 1` |\nscript |\n\n**productivity**\n\n| id | schedule | modes |\n|---|---|---|\n`daily-standup-summary` |\n`0 8 * * 1-5` |\nscript + agent-prompt |\n`inbox-triage` |\n`0 7,13 * * 1-5` |\nagent-prompt only |\n`weekly-report` |\n`0 16 * * 5` |\nscript + agent-prompt |\n`focus-block-reminder` |\n`0 9,14 * * 1-5` |\nscript |\n\n**personal**\n\n| id | schedule | modes |\n|---|---|---|\n`bill-due-reminder` |\n`0 9 * * *` |\nscript |\n`habit-checkin` |\n`0 20 * * *` |\nscript |\n`meal-plan-reminder` |\n`0 9 * * 0` |\nscript + agent-prompt |\n`water-intake-reminder` |\n`0 9,12,15,18 * * *` |\nscript |\n`screen-time-check` |\n`0 20 * * *` |\nagent-prompt only |\n\n**content**\n\n| id | schedule | modes |\n|---|---|---|\n`changelog-digest` |\n`0 10 * * 5` |\nscript + agent-prompt |\n`broken-link-check` |\n`0 7 * * 1` |\nscript |\n`social-mentions-watch` |\n`0 9 * * *` |\nagent-prompt only |\n\n**finance**\n\n| id | schedule | modes |\n|---|---|---|\n`subscription-audit` |\n`0 9 1 * *` |\nscript |\n`net-worth-snapshot` |\n`0 9 1 * *` |\nscript |\n`saas-seat-audit` |\n`0 9 1 * *` |\nscript |\n\n**security**\n\n| id | schedule | modes |\n|---|---|---|\n`secrets-scan` |\n`0 3 * * *` |\nscript |\n`open-port-check` |\n`0 */4 * * *` |\nscript |\n`failed-login-watch` |\n`*/15 * * * *` |\nscript |\n\n**learning**\n\n| id | schedule | modes |\n|---|---|---|\n`daily-flashcard-review` |\n`0 8 * * *` |\nscript |\n`reading-list-nudge` |\n`0 9 * * 6` |\nscript |\n`course-progress-checkin` |\n`0 9 * * 1` |\nscript |\n\nEvery job is one YAML file with a `runner`\n\n:\n\n— run`shell`\n\n`command`\n\ndirectly. Zero LLM tokens, deterministic, no judgment calls.— hand the`agent-prompt`\n\n`prompt`\n\nfield to an LLM agent each run. Costs tokens, but can synthesize, prioritize, and draft prose.— ships both. You (or your agent) pick per run:`hybrid`\n\n`command`\n\nto save tokens and get raw data, or`prompt`\n\nwhen you want the LLM to interpret it.`script_note`\n\non the job explains exactly what you trade away by choosing the script.\n\n`{{placeholders}}`\n\nin `command`\n\n/`prompt`\n\nresolve from `variables`\n\n. Each job\nalso carries a `version`\n\n— bumped whenever `prompt`\n\n/`command`\n\nbehavior\nchanges, so if you've already scheduled a job elsewhere you can tell when\nthe upstream copy has moved on without you.\n\n```\nid: dependency-audit\nversion: 1\nname: Dependency Vulnerability Audit\ndescription: ...\ncategory: devops\ntags: [security, dependencies]\nschedule: \"0 8 * * 1\"        # standard 5-field cron\ntimezone: \"UTC\"\nrunner: hybrid\ncommand: |\n  ...raw shell audit, zero tokens...\nprompt: |\n  ...instructions with {{repo_path}}, LLM synthesizes+prioritizes...\nscript_note: what you lose by using `command` instead of `prompt`\nvariables:\n  repo_path:\n    default: \".\"\n    description: ...\ncompatible_agents: [claude, codex, hermes, openclaw, generic]\n```\n\nFull spec: [ schema/job.schema.json](/wonsukchoi/crondex/blob/main/schema/job.schema.json).\n\n- Pick a job from\n`catalog.json`\n\n— check`modes`\n\nto see if it's script-only, agent-prompt-only, or both. - Decide script vs. agent-prompt if the job is\n`hybrid`\n\n: script saves tokens, agent-prompt gives you more detail/judgment (see`script_note`\n\n). - Override any\n`variables`\n\nand`schedule`\n\nfor your case. - Hand\n`command`\n\nor`prompt`\n\nplus`schedule`\n\nto your scheduler — system crontab, a hosted cron, or your agent's own scheduling mechanism. This repo defines*what*to run and*when*, not the executor.\n\nSee [ CONTRIBUTING.md](/wonsukchoi/crondex/blob/main/CONTRIBUTING.md) — copy\n\n`templates/job.template.yaml`\n\n,\nfill it in, `npm run validate && npm run build-catalog`\n\n, open a PR.", "url": "https://wpnews.pro/news/show-hn-crondex-all-the-cron-jobs", "canonical_source": "https://github.com/wonsukchoi/crondex", "published_at": "2026-07-08 18:56:01+00:00", "updated_at": "2026-07-08 19:12:23.463213+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents"], "entities": ["Crondex", "Wonsuk Choi", "Claude", "Codex", "Hermes", "OpenClaw", "GitHub", "npm"], "alternates": {"html": "https://wpnews.pro/news/show-hn-crondex-all-the-cron-jobs", "markdown": "https://wpnews.pro/news/show-hn-crondex-all-the-cron-jobs.md", "text": "https://wpnews.pro/news/show-hn-crondex-all-the-cron-jobs.txt", "jsonld": "https://wpnews.pro/news/show-hn-crondex-all-the-cron-jobs.jsonld"}}