scheduled urgent overdue # dsh-later — In-Session Scheduled Message Plugin [中文](./README.md) | **English**
> Set reminders for yourself inside DSH: **set by you, delivered into the current conversation, driven server-side, available across devices** — on time, even with the browser closed. **`/later` delayed send** — no panel needed: type one line in the input box and it is sent later as yourself (demo: typing `/later +5s`, `+3m`, `+1h20m` character by character, then Enter to start the countdowns; the `+5s` one really lands when due):

/later demo: type /later +5s 检查部署结果 → Enter → dock countdown → delivered as yourself when due

--- ## How to use ### Schedule panel Click the **"Schedule send"** button to the right of the input box. The panel uses the **input box content** as the reminder text; pick a time, then click **"Add · send at HH:MM"** (the button stays disabled until a time is chosen). A countdown row then appears above the input box. | Capability | Description | |---|---| | Quick chips | One-tap `in 10 minutes` / `in 1 hour` / `work hours` (configurable in settings) | | Custom time | "Custom…" opens date + time inputs | | Send preview | See the exact due-time form before confirming | | Task list | All scheduled items, deletable one by one | | Cancel all | Cancel action on the chip clears every reminder in this conversation | ### Time formats All of these are accepted (`/schedule`, `/later`, and the panel's custom time share the same parser; the rows marked *commands only* are rejected by the panel): | Kind | Examples | |---|---| | Relative duration | `+30m` · `+1h30m` · `+90s` · `+1w` · `30分钟后` · `半小时后` | | Time today | `15:32` · `9点` · `9点半` · `1532` | | Relative day + time | `明天9点` · `后天 10:00` | | Date + time | `8月21日 15:32` · `2026-08-21 15:32` · `0821-1532` | | Repeat, fixed interval (*commands only*) | `+1h*3 drink water` · `+30m×2 check build` | | Repeat, chained sequence (*commands only*) | `+1h+1h+0.5h watch the rollout` · `+1h +30m submit report` | | Anchor sequence (*commands only*) | `15:32+16:32+17:32 three meetings` · `9:00+1d+1d standup` · `明天9点+1h` | The three bolded rows above are **[Advanced syntax (Beta)](#configuration)** and can be switched off together in settings; every other form is unaffected. A bare time (like `1532`) rolls over to tomorrow if it has already passed today (up to 7 days). Writing `明天`/`后天` is taken literally — if that time has passed you are told to use a concrete date instead. A month/day only (like `8月21日`) rolls over to next year when this year's has passed. Multi-shot rules — **the first occurrence lands after the first interval**: | Input | Expands to | |---|---| | `+1h*3` | t+1h, t+2h, t+3h | | `+1h+1h+0.5h` | t+1h, t+2h, t+2.5h (chained — good for "2 h → 1 h → 30 min before the deadline" nagging) | | `15:32+16:32+17:32` | those three clock times today | | `23:00+01:00` | 23:00 today, **tomorrow** 01:00 (an earlier time in the chain rolls over, same rule as a single shot) | | `9:00+1d+1d` | 09:00 on three consecutive days | At most **10 tasks** per command, and multi-shot intervals must be **≥ 60 seconds** (single shots are unrestricted — `/later +5s` still works). `*`, `×` and `x` all work, an optional Chinese counter suffix is accepted (`*3次`), and the count must be followed by a space. Every occurrence is an **independent task**: cancel it, edit it or send it early on its own, and `/later` attachments are carried by each one. Absolute times (`15:32`, `明天9点`) do **not** accept `*count` — you get an explicit error instead of a silently wrong single task. Chains allow exactly **one direction: an absolute anchor, then forward accumulation.** `+1h+15:32` (a clock time after a duration) is rejected rather than guessed. One difference between anchor and relative chains (deliberate, not a bug): | Form | Stored as | Pausable | Across DST | |---|---|---|---| | `+1h*3` / `+1h+30m` (relative) | `after` | ✅ | —— | | `15:32+16:32` / `9:00+1d` (anchor) | `at` | ❌ (button disabled with a reason) | ✅ wall clock holds: on a fall-back day `9:00+1d` is **25 h** later and still 09:00, whereas adding 86400 s would drift to 08:00 | `+1d` advances by **calendar day**, not 86400 seconds — which is why `+1d*3` and `9:00+1d+1d` differ in zones with DST (the former counts real seconds, the latter counts wall clock). A wall clock that does not exist (the hour skipped by the spring-forward) is an error, never a silently shifted time. ### Commands | Command | Effect | |---|---| | `/schedule