dsh-cron
Verified@maci0/dsh-cron · v0.3.0 · MIT
/cron for DeepSeek Harness: run a prompt on a cron or plain-English schedule, parsed in code, with the model as the last resort.
Install
dsh plugin add @maci0/dsh-cron Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Creators
Readme
dsh-cron
Run a prompt on a schedule in a DeepSeek Harness session: /cron takes a cron
expression or plain English like "every weekday at 9am", parses it in code,
and hands the timer to the harness schedule service, which keeps it across
restarts and wakes the session when it is due. Only text no grammar reads goes
to the model.
What you get
/cron */15 9-17 * * 1-5 check the deploy # cron; MON-FRI, JAN and @daily work too
/cron every 5 minutes check the queue # fixed interval (at least one minute)
/cron 5m check the build # the same, as /loop takes it
/cron every day at 9am standup notes # daily wall-clock time
/cron every mon, wed and fri at 18:00 gym log # weekly
/cron monthly on the 1st at 9am pay rent # monthly, as cron
/cron in 10 minutes check the oven # once, after a delay
/cron tomorrow at 9:30 review the PR # once, at a time
/cron every day at 9 Europe/Berlin standup # an explicit zone (the host zone otherwise)
/cron list # this session's schedules
/cron delete 2 # by list number, by id, or all
Each run arrives in the session as a message with the prompt, the way a
/loop round does.
Numbered deletes refer to the last /cron list shown in that session. List
again after a harness restart, or delete by the schedule id directly.
list, help, and delete are management verbs. Put timing first when the
scheduled task starts with one of those words, such as /cron every day at 9 list open PRs.
Install
Requires DeepSeek Harness >=0.2.1-rc.2 <0.3.0. Restart DSH and refresh the browser after upgrading.
Install it as a bundle.
dsh plugin add …mounts the row from the package's own patch layer, which is what the settings editor can write to. A row added with--patchis an overlay: it disappears at the next start.
dsh plugin --profile web add --save-exact @maci0/[email protected]
Pin an exact npm version. To upgrade, run the same command with the newer
version, then restart dsh web (bundle layers compose at boot).
The timers belong to the harness schedule service. The web profile mounts
@deepseek-ai/dsh-schedule through @deepseek-ai/dsh-web-app. A profile
without that row makes /cron answer an error that names the service.
How it works
/cron <schedule> <prompt> tries, in order:
- Cron. When the first five tokens are cron-shaped (numbers,
*, month or day names,,-/), they are read as the service's five-field Vixie dialect: names become numbers and@hourly,@daily,@weekly,@monthly,@yearlybecome their expressions. A field the dialect cannot take (out of range,L,W,#,?, a zero step, an inverted range) is an error naming the field, never a guess. - Phrases. A small English grammar:
every N minutes|hours|days|weeksand the compact5m/2h/1d(fixed intervals);hourly,every hour at :15;every day|daily, a weekday, a list (mon, wed and fri), a range (monday to friday),weekdays,weekends, each optionallyat <time>(weekly or daily wall-clock);monthly on the 15th at 18:30(cron);in 10 minutes,at 3pm,today|tomorrow at <time>,on 2026-12-24 at 18:00(once). Times are9,9:30,9am,7:30pm,21:00,noon,midnight; a day phrase with no time means 09:00. A trailing IANA zone orUTCoverrides the host zone. - The model. Anything else, including a recognized start followed by a
qualifier the grammar does not read (
every 15 minutes during business hours …), is sent to the agent as a message asking it to set the schedule up with itsschedule_createtool and report what it created.
The prompt is what follows the schedule (a leading : or to is dropped); the
task title is its first line, cut to 80 characters. The reply names the
schedule and its next run in the host zone. The service validates again and
its refusal (for example a date that never occurs) is reported with its code.
Limits
- Recurring intervals are at least one minute, the service's floor.
- The phrase grammar is English only; other languages reach the model.
- The model fallback runs as an agent turn, so it needs a working model route, and its result is whatever the agent creates (it reports it in the session).
Development
bun test # parser table, the /cron handler over a fake schedule service, and a real Cordis mount
For local development, install the checkout into a profile with
dsh plugin --profile <name> add <path-to-checkout>.
dsh loads plugins on Node ^22.19.0 || >=24.0.0; development and tests run on bun.
Licence
MIT. See LICENSE.