按项目调度提示词,在全新的无头 Agent 会话中执行,支持单次、固定间隔和 cron 计划,并持久化运行历史。
安装
# npm 包(预构建)
dsh plugin --profile web add @opendsh/dsh-plugin-scheduled-tasks
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Ceelog/dsh-plugins#path:/src/plugins/dsh-plugin-scheduled-tasks
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DSH web plugin: per-project scheduled tasks with prompts. Create a task in the sidebar (⏰ 定时任务), give it a prompt, and the plugin runs that prompt on schedule — as a fresh headless agent session in the project directory — then records the outcome as durable run history.

What it does
- Project-scoped tasks — each task belongs to a project directory (a DSH workspace). The panel lists tasks for the selected workspace.
- Three schedule kinds
at— run once at an absolute time (strict RFC 3339 instant, or a local date/time with an explicit IANA time zone; DST gaps are rejected, overlaps pick the earlier instant).every— run on a fixed creation-anchored interval (≥ 5 minutes); missed intervals are never replayed, only the latest due occurrence runs.cron— run on a cron calendar rule (five/six/seven-field expression, e.g.0 9 * * 1-5, evaluated in an explicit IANA time zone, DST-aware).
- Prompt execution — on schedule, a brand-new agent session is created in
the project directory with the task's prompt and driven to quiescence (the
same drive pattern as
dsh --profile headless). The run session appears in the project's conversation list with a pinned title (⏰ <task name>) and stays resumable; the final assistant text is also captured into the run record. - Run history — status (
running/completed/failed), start/finish times, output (truncated at 20 KB), error messages; newest first, capped at 20 records per task (configurable). - Manual run-now — runs a task immediately without touching its schedule.
- Lifecycle semantics
- Runs only while the DSH web process is alive. After a restart, overdue
one-shots run once and are marked
overdue; overdueeverytasks run only their latest due occurrence. - One-shot
attasks finish after their single run;everytasks stay active and advance to the next anchor-aligned target.
- Runs only while the DSH web process is alive. After a restart, overdue
one-shots run once and are marked
Architecture
A dual-face npm package installed into the web profile:
| Half | Entry | Role |
|---|---|---|
| Server | lib/index.js |
Cordis plugin: opens the scheduled_tasks storage domain (ctx.storageDomain), mounts the task store, the scheduler (bounded timers, clock-rollback-safe wakes), the headless executor, and the ctx.tasks typert service. |
| Protocol | lib/typert.js |
Host TYPERT face (tasks/* endpoints), auto-registered by dsh-typert-loader. |
| Browser | lib/client.js |
React panel mounted into the sidebar.footer.action slot; calls the host through the installed remote.tasks namespace. |
The client↔server channel is the DSH typert protocol (the same mechanism
dsh-commands uses): strict zod codecs validate every argument and result on
both sides, and no session needs to exist for the panel to work.
Install
dsh plugin --profile web add @opendsh/dsh-plugin-scheduled-tasks
Development
pnpm --dir src/plugins/dsh-plugin-scheduled-tasks typecheck # tsc (TypeScript 7)
pnpm --dir src/plugins/dsh-plugin-scheduled-tasks test # vitest
pnpm --dir src/plugins/dsh-plugin-scheduled-tasks build # tsc emit + tsdown client bundle + loader wrapper
After changing sources, rebuild and re-sync the profile copy
(pnpm install inside the profile re-copies file: dependencies), then
restart dsh web — the plugin has no HMR channel.
Configuration
| Key | Default | Meaning |
|---|---|---|
maxConcurrentRuns |
2 |
Maximum concurrently running agent sessions across all tasks. |
keepRunsPerTask |
20 |
Run-history records retained per task (oldest pruned beyond the cap). |
Troubleshooting
Tool calls that fail with “Interrupted: interrupted” (underlying error
Cannot read properties of undefined (reading 'prepare')) are almost always a
duplicate @deepseek-ai/dsh-tools copy caused by declaring DSH packages in
dependencies instead of peerDependencies. See
docs/troubleshooting.md for the full write-up.
Limitations
- Schedules fire only while the web process is running (same posture as
dsh-schedule); there is no external wake-up when the process is down. - Each run consumes model tokens with the current default model — the panel says so explicitly.
- Run history is refreshed by polling while the panel is open (10 s interval); push updates are deferred work.
链接
同类插件
NanmiCoder/dsh-agent-teams★ 263
AgentTeams 多智能体团队。
icetomoyo/dsh_workflow★ 54
把 UltraCode 式多 Agent 调度带给 DSH:可生成、可保存、可治理、可观察、可恢复的 Workflow 层。
btspoony/mstar-harness★ 43
技能驱动的 harness/loop 工程化工作流插件。
titanwings/dsh-automation★ 32
定时任务:让 Coding 任务按计划在全新 Agent Session 中运行,保留可审计历史。
whyihaveyou/dsh-suite#plugin-team-board★ 19
多 agent 共享任务板:经 Cordis service key 创建/认领/流转/查询任务。
omdsh-dev/dsh-deep-research★ 10
自适应深度研究编排器(基于官方 workflow 引擎)。