dsh-automation
September 2, 2026 · View on GitHub
dsh-automation
Schedule future Agent work in DSH with one sentence.
Run one-time or recurring tasks. Runs use a fresh visible session by default, or a confirmed pinned persisted session with no fresh fallback.
简体中文 · English
✨ Highlights
- 🗣️ Create naturally — tell an Agent what to do and when.
- 🗓️ Schedule precisely — one-time instants, RFC 5545 recurrence, and IANA time zones.
- 🧼 Start fresh — every run uses a new session with no previous chat history.
- 👀 Stay informed — see result summaries, duration, errors, history, and session links in one place.
- 🛡️ Limit access — choose any permission preset advertised by the DSH Host for each task.
- 🤖 Choose execution — optionally pin an Agent preset, provider/model pair, and ordered skills.
- 📌 Continue a conversation (MVP) —
automation_createmay pin only the current Agent conversation to a persisted session after explicit target and creation confirmation. The target is checked by the Host persistence API; REST target changes and arbitrary session pickers are unsupported. Pinned runs resume exactly, never create a replacement, and show an Open conversation link when available. - 🧭 Start with guidance — use outcome-focused templates or a guided creation conversation.
- 🎛️ Stay in control — edit, run, pause, resume, or delete tasks from the UI.
🚀 Quick start
1. Install
dsh plugin --profile web add @alpacachen/dsh-automation
2. Restart DSH
Restart dsh web so the plugin can load.
3. Ask an Agent
Tomorrow at 9:00 AM in Asia/Shanghai, review this workspace for release blockers and create a one-time automation.
Or:
Every weekday at 6:00 PM, summarize today's changes and open work. Report only; do not modify files.
After creation, open Automations in the sidebar to manage the task.
Use New automation at any time for a guided setup, or choose a result-focused template in the empty state. Before creation, the Agent previews the name, schedule and time zone, workspace, Agent preset, provider/model, selected skills, exact Host permission, notifications, and failure-pause policy, then waits for confirmation.
🎛️ Manage and edit
Each task card lets you:
- change the name, prompt, or schedule;
- run now, pause, resume, or resume and run;
- open the latest session or any recent run;
- choose failure-only, every-completion, or no sidebar notifications;
- choose a saved Agent preset, provider/model pair, and ordered skills, or follow Host defaults;
- see or change any Host permission preset for future runs; actual permission changes require confirmation;
- retry failed runs and optionally pause after three consecutive failures;
- delete future scheduling while keeping existing sessions.

Visual recurrence editor
Common schedules do not require writing RRULE by hand:
| Settings | Meaning |
|---|---|
Daily · every 1 day | Run every day |
Weekly · every 3 weeks · Monday–Friday | Every third week, run Monday through Friday |
Monthly · every 2 months · day 15 | Run on day 15 every two months |
You can also stop after a number of runs or on a date. Use Advanced RRULE for uncommon rules.

⏱️ How runs work
Schedule due → Global queue → Fresh or pinned persisted session → Agent runs → Result and session link recorded
- Automations run globally one at a time and never overlap.
- Runs time out after one hour by default; set
maxRunDurationMsin plugin config to change the limit. - Queued or running work can be stopped without moving its future schedule.
- A run active during an unexpected restart is marked outcome unknown instead of being reported as failed or retried.
- Notification-worthy results add a persistent unread badge to the Automations sidebar action.
- Successful runs clear the consecutive-failure count; tasks can optionally auto-pause after three failures or timeouts.
- DSH must be running when work is due; after restart, only the latest missed occurrence runs.
- Transient scheduler failures retry automatically with bounded exponential backoff.
- Paused occurrences are skipped; Resume & run does not move the original schedule.
- Selected skill names load their current definitions before every run. A removed/broken preset, model, skill, or permission fails the run instead of falling back.
- Permission presets with
approval: askremain interactive: unattended runs never auto-approve and may wait until the run timeout. - Existing state stays at version 1. Older tasks are normalized in memory without a startup rewrite and retain their saved execution and permission settings.
🗓️ Schedule formats
| Type | Parameters | Example |
|---|---|---|
| One-time | once_at | 2026-09-01T01:00:00.000Z |
| Recurring | rrule + time_zone + start_at | FREQ=WEEKLY;BYDAY=MO,WE,FR |
once_atis an RFC 3339 UTC instant.rruleis one RFC 5545 rule withoutDTSTART.time_zoneis an IANA zone such asAsia/Shanghai.start_atis local wall-clock time inYYYY-MM-DDTHH:mm:ssform.
🧰 Agent tools
| Tool | Purpose |
|---|---|
automation_options | List current Host Agent, model, skill, and permission options |
automation_create | Create after confirming optional agent_preset, provider/model, ordered skills, permission, and policies |
automation_update | Set or clear execution overrides and replace skills; permission changes require confirmation |
automation_list | List tasks and current run state |
automation_run | Queue one immediate run without changing the schedule |
automation_pause | Pause future scheduling |
automation_resume | Resume, optionally with one immediate run |
automation_delete | Delete the task and cancel future scheduling |
💡 Example requests
“Every Monday at 9:30 AM, check dependencies for important updates.”
“Move the release check to Friday at 4:00 PM.”
“Resume the daily handoff and run it once now.”
“List all automations and pause the dependency check.”
The built-in release readiness, dependency watch, and daily handoff templates remain editable drafts; selecting one never sends it automatically.
License
MIT