sched

Schedule commands, agent prompts, and webhooks.
One CLI. Local-first. Built for humans and agents.

curl -sL schedx.run/get | bash

How It Works

--run001

Commands

schedx add "every 6h" \
  --run "./backup.sh"
--prompt002

Agent Prompts

schedx add "0 6 * * *" \
  --prompt "Summarize yesterday,
  add to my Notion" \
  --agent claude
--webhook003

Webhooks

schedx add "in 2h" \
  --webhook https://hooks.slack.com/T00
every 6hin 30m0 9 * * 1-52026-07-01T09:00

Put It in a File

# schedx.yaml
name: my-jobs
jobs:
  backup:
    schedule: "every 6h"
    run: "restic backup ~/"
  morning-brief:
    schedule: "0 9 * * 1-5"
    prompt: "Summarize my unread PRs"
  slack-ping:
    schedule: "every 15m"
    webhook: "https://hooks.slack.com/T/B/X"
    headers:
      Authorization: "Bearer ${SLACK_TOKEN}"
$ schedx up
+ create backup [run] (aovboa)
+ create morning-brief [prompt] (xuv4gm)
+ create slack-ping [webhook] (9ocepi)
Applied manifest 'my-jobs': 3 created, 0 updated,
0 drift-corrected, 0 recreated, 0 removed, 0 unchanged.

$ schedx up
No changes. 3 job(s) up to date for manifest 'my-jobs'.

$ schedx down
- removed backup [run] (aovboa)
- removed morning-brief [prompt] (xuv4gm)
- removed slack-ping [webhook] (9ocepi)
Brought down manifest 'my-jobs': 3 job(s) removed.
docker-compose for schedules

Watch It Work

$ schedx list
  9ocepi   slack-ping                              active  webhook
           every 15m  (*/15 * * * *)
           Next: 12th Jun at 10:30am (in 14m)

  aovboa   backup                                  active  run
           every 6h  (0 */6 * * *)
           Next: 12th Jun at 12:00pm (in 1h and 44m)

  xuv4gm   morning-brief                           active  prompt
           cron 0 9 * * 1-5
           Next: 14th Jun at 9:00am (in 1 day and 22h)
schedx logsschedx historyschedx pause / resume / skip--json on everything