How dsh-automation behaves
DeepSeek Harness dispatches each scheduled occurrence into a new root Agent and a new Session. The dispatched input is the saved prompt, not the source conversation history. The run also receives the captured workspace, cwd, Agent preset, model target, permission preset, and an automation message source containing the automation ID, run ID, and scheduled time. The terminal result comes from the actual DSH turn end.
Schedules support one-shot, fixed-interval, daily, and weekly rules. Daily and weekly schedules use an IANA time zone and are normalised to a validated RFC 5545 RRULE. Runs move through queued and running to a terminal state such as succeeded, failed, skipped, or cancelled.
Configuring dsh-automation
Set the following Cordis plugin option when completed run Sessions should be archived from the ordinary DeepSeek Harness conversation list:
| Key |
Default |
Effect |
archiveRunSessions |
false |
Archives terminal run Sessions while retaining their logs and run-history records |
Archived results retain the Session ID, summary, and error in Automations history. Current Harness releases do not expose an unarchive API, so an archived result is labelled rather than given a Session-open action. Retention removes only the oldest terminal records; queued and running records are not pruned. Updating a definition increments its revision, and retained runs identify the revision they executed. Deleting a definition does not immediately delete its run records.
Commands and management tools
DeepSeek Harness exposes the Automations conversation tab in the Web profile. An eligible root Agent can use workspace-scoped management tools, including automation_create, automation_list, automation_update, and the controls for running, pausing, resuming, and deleting automations. These operations apply only to the Agent's exact workspace.
Requirements and limits
The README requires Node.js 22.19 or newer. Install the GitHub bundle into the DeepSeek Harness web profile and restart dsh web. The task must be self-contained: work that depends on unstated chat history, interactive approval, or non-time conditions is outside this plugin's documented use.
Written from the project's own documentation and kept in sync with it. Where the two disagree, the source is authoritative — read the README on GitHub