Aisland-SJL / dsh-reminder

Listed

🔔 Cross-window completion & approval notifications for DeepSeek Harness — popup reminders that bring you back to DSH, Codex/WorkBuddy style.

mainTool View source

Installation

pnpm run build # esbuild: host ESM + single-file client CJS (ModuleLoader handshake) + tsc d.ts

This command is generated from the GitHub repository address. Inspect the upstream README and source before running it; pin a release or commit when reproducibility matters.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit bd1b64fSynced Aug 18, 2026

dsh-reminder 🔔

English · 简体中文

A cross-window reminder plugin for DeepSeek Harness — while you work in any other window, it taps you on the shoulder the moment a task finishes or waits for your approval. Codex / WorkBuddy style.

Toast preview

✨ Features

🎯FeatureDescription
🟢CompletionPops "Task completed" on every turn end, with session · duration and a green check icon
🟡ApprovalPops "Waiting for your approval" with the tool name and an amber alert icon
🎯Pops in any windowNotifies even while you work in other apps
🖱️Click to returnClicking focuses the DSH window and opens the session
⏱️Auto-dismissGone in 3-5 s (adjustable)
🎵Soft chimeA gentle two-note chime (D4→A4) — nothing startling
🔁DeduplicatedNever pops twice for the same event
🛡️Reminds, never actsNever approves on your behalf

🤔 Why

  • 😴 Nobody calls you for approvals — the agent waits while you are away; now an amber popup tells you
  • 👀 Nobody tells you it's done — no completion signal before; now a green popup tells you

🚀 Quick start

  1. Install: dsh plugin --profile web add <dsh-reminder> (or npm i dsh-reminder), register dsh-reminder in the profile bundle list, restart the DSH web process
  2. Grant permission: Settings → Reminders → "Enable & test notifications" → Allow — a test popup arrives instantly
  3. Enjoy: Switch away and work — the popups come to you

⚙️ Settings

SettingDefaultDescription
Notification permissionunsetOne-click grant + test popup
Approval remindersOnOff = no approval popups
Completion remindersOnOff = no completion popups
Duration3-5 sSeconds before auto-dismiss
Failure alertsOff (reserved)Planned for v0.3

🏗️ Architecture

One package ships the host Cordis plugin and the web client:

  • host: registers the settings namespace plus a plugin-owned Typert Remote (reminder/getSettings · updateSettings) — plugin namespaces sit outside the web settings allowlist
  • client: subscribes to the session list and conversation snapshots (turn/end, approval/requested arrive over the mux stream), pops via the Notification API with a Web Audio chime
  • Read-only: never mutates DSH core behavior

🔧 Development

pnpm install
pnpm run typecheck   # tsc --noEmit
pnpm test            # node tests/unit/*.test.cjs (16 tests)
pnpm run build       # esbuild: host ESM + single-file client CJS (ModuleLoader handshake) + tsc d.ts
  • Artifacts: lib/index.js (host ESM), lib/client.js (client), lib/types/ (.d.ts)
  • Offline dev: no new dependencies; @deepseek-ai/* types and local esbuild/typescript come from 03_local/codes (not in git)

⚠️ Known limits

  • Chrome page notifications reject actions (ServiceWorker persistent notifications only) — dismiss via auto-close or the hover ✕
  • Permission must be requested from a user gesture (browser policy) — the settings button does it in one click
  • The chime unlocks on the first click (autoplay policy)

📄 License

MIT

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

TestsDetected
DocumentationDetected

Repository information

Language
TypeScript
License
MIT
Latest release
v0.1.0
Last updated
Aug 16, 2026, 1:54 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.