DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Water Reminder — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
W

@dsh-plugin/water-reminder

Water Reminder

Hydration reminder for DeepSeek Harness: a randomized 40-60 minute nudge delivered as a native OS notification, an in-conversation agent reminder, a sidebar countdown panel, and an embedded hydration-coach skill

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:Smallballoons01/dsh-water-reminder#338b003a4542ba1f804b78f84c5970fddaf157bc
READMECompatibilityVersions

Compatibility and provenance

Water Reminder is published as @dsh-plugin/water-reminder and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/17/2026

Versions

0.1.0stable
9/17/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 1
Weekly downloads
0
Last push
9/17/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in integrations-communication.

Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseRemote Web Ui@linxin666/dsh-remote-web-uiScan-to-pair remote access for the dsh web GUI that shares one official interface: a QR beside the settings button pairs phones and PCs into the same Web GUI (a portrait-touch adaptation layer for phones, full desktop on PCs) through one-time tokens and rPocketdsh-pocketPut DeepSeek Harness in your pocket: one package, one settings page, and scan a QR code on your phone to access DSH on your computer in sync (LAN + public network, real-time screen mirroring).DSCODE@toddzheng024/dscode-bundleA complete DeepSeek coding agent with persistent shell, Ultra collaboration and automatic permission review.

README

dsh-water-reminder

A hydration reminder plugin for DeepSeek Harness.

People forget to drink while they are deep in work. While a session is live this plugin reminds every 40–60 minutes, drawn at random, and delivers each reminder through three independent channels — missing one still leaves two:

ChannelHow it landsNeeds
🖥️ OS notificationosascript on macOS, a WinRT toast on Windows, notify-send on Linuxctx.subprocess (part of dsh-base)
💬 In-conversation nudgea plugin message injected into every live root session, so the assistant says one linethe agents service
🔔 Browser notificationthe sidebar panel watches reminderSeq and the tab raises its own notificationpage open + user permission

Plus a sidebar countdown panel, a settings page, and an embedded hydration-coach skill.

Why 40–60 at random

The irregularity is the point. A perfectly regular timer is what teaches people to ignore it — which is why "drink water on the hour" apps get switched off. Redrawing the interval from the band on every reminder keeps the rhythm unpredictable, which is what makes it work.

Install

# from a local checkout (writes the profile's package.json and dsh.profile.bundles)
dsh plugin --profile web add link:/path/to/water_reminder

# or from a packed tarball
pnpm pack && dsh plugin --profile web add ./dsh-plugin-water-reminder-0.1.0.tgz

Then restart dsh web: the timer and the tools mount at session start. Never keep two water-reminder rows in one profile — each would start its own timer and register the /water/api prefix route, and the duplicate route makes the whole plugin tree fail to boot.

Tools

ToolPurpose
water_statusToday's intake, remaining, cups, goal streak, current band, quiet hours, next reminder, 7-day series
water_logRecord a cup (defaults to the configured cup size; accepts milliliters and note). Append-only, never deduplicated
water_snoozeDefer the next reminder; defaults to 5 minutes
water_controlstart / stop / set-band / set-goal / remind-now / reset

water_control writes runtime overrides into the state file rather than editing the profile config; reset drops those overrides and falls back to configuration.

Configuration

In the profile's cordis.patch.yml (defaults ship in the plugin's own cordis.patch.yml):

FieldTypeDefaultMeaning
enabledbooleantrueWhether the loop runs at start-up
intervalMinMinutesnumber40Lower bound of the random interval, in minutes
intervalMaxMinutesnumber60Upper bound of the random interval, in minutes
dailyGoalMlnumber2000Daily intake goal
cupMlnumber250Milliliters recorded for one "cup"
snoozeMinutesnumber5Default deferral for water_snooze
quietHours.enabledbooleanfalseHold reminders inside a local-time window
quietHours.from / .tostring22:00 / 08:00The window (may wrap past midnight); a draw inside it resumes at the window's end
notify.osbooleantrueOS notification
notify.agentbooleantrueIn-conversation nudge
notify.soundbooleantruePlay a sound with the OS notification
stateFilestring$DSH_HOME/water-reminder.jsonPersisted state location
promptSectionbooleantrueInject the reminder briefing into the system prompt
skillbooleantrueRegister the embedded hydration-coach skill

The band is clamped to [5, 720] minutes, the goal to [200, 20000] ml, and the cup to [50, 2000] ml. A user patch replaces the whole entry config, so restate every field you want to keep when overriding one.

Web surfaces

  • Sidebar footer 💧 button — carries the live countdown to the next reminder (shows "Paused" while off, ✅ once the goal is met). The panel has today's progress bar, cups/streak/band, next reminder, a 7-day bar chart, +250ml logging, snooze, remind-now, pause/resume, and a control to grant browser-notification permission.
  • Settings page — the full rhythm/goal/quiet-hours/channels form. Writes land in $DSH_HOME/settings.yaml and hot-reload; changing the band or quiet hours rearms the timer immediately.

The two switches marked "(restart)" (promptSection, skill) are read at load time and need a Harness reload.

Skill

The same instructions ship two ways:

  1. Runtime registration — at mount the plugin calls ctx.skills.register(), so the model sees hydration-coach in its skill catalog with no filesystem skill root at all.
  2. On disk — skills/hydration-coach/SKILL.md, for deployments that prefer a filesystem skill root (~/.dsh/skills, ~/.agents/skills, a project .dsh/skills).

skill.js is the single source of truth and npm test asserts the checked-in SKILL.md matches the embedded body byte for byte, so the two delivery paths cannot drift. Run npm run skill after editing the body.

The skill covers which tool to call when, how to react to a reminder (one short line, no health lecture, never derail the current task), logging rules, how to retune the rhythm, estimating a personal goal from body weight (30 ml × kg), and tone/safety boundaries (no medical claims).

How the reminder loop behaves

  • The state file owns the state. Timer, next due time, and intake log live in $DSH_HOME/water-reminder.json, written through a temp file plus rename so a crash cannot truncate it.
  • No backlog after a restart. A stale nextDueAt draws a fresh interval instead of firing the missed reminders at once.
  • Quiet hours push a draw inside the window to the window's end rather than redrawing, so the behaviour stays predictable.
  • A manual reminder leaves the rhythm alone. remind-now delivers once without resetting the pending reminder.
  • Disposal drains. Unloading the plugin waits for an already-queued state write, so a cup logged at the last moment is not lost.
  • The timer is unref()ed, so the reminder loop never keeps the process alive.

Known limitations

  • Reminders only exist while Harness is alive. There is no email, SMS, or push channel. With the process down, only the OS notification path exists — and only while it is up.
  • The Windows toast needs WinRT, invoked as powershell -EncodedCommand (UTF-16LE base64) so quoting and CJK text are safe. If PowerShell is restricted by policy the reminder degrades to a log line, while the other two channels still fire.
  • Browser notifications need a user gesture to request permission; the 🔔 control in the panel is that gesture.
  • The 7-day series is panel-only. water_status returns a compact one-line text form instead, which keeps the tool's output schema free of nested arrays.

Development

Prerequisites

The plugin has zero runtime dependencies — @deepseek-ai/dsh-tools, dsh-llm, schemastery and friends are peer dependencies that the Harness supplies at runtime.

Note, though, that the versions this plugin is developed against are not published to npm (npm's latest @deepseek-ai/dsh-tools is 0.0.1-rc.1; this plugin targets 0.1.6-alpha.1), so a fresh clone cannot npm install a working test environment. Pick one of three:

# 1) Run the dependency-free part only — works immediately after cloning
npm test              # 35 pass / 2 skip, and each skip says why

# 2) Reuse the packages from an existing local Harness profile (fastest, offline)
mkdir -p node_modules/@deepseek-ai
for p in cordis dsh-llm dsh-tools dsh-settings dsh-skill dsh-system-prompt schemastery; do
  ln -sfn "$HOME/.dsh/profiles/node_modules/@deepseek-ai/$p" "node_modules/@deepseek-ai/$p"
done
npm test              # 60 pass, including the real cordis composition tests

# 3) Build the Harness from source and link this plugin the way it documents
git clone https://github.com/deepseek-ai/deepseek-harness

Use 2 or 3 for the full suite; 1 is enough when you are only touching pure logic (hydration.js / notify.js).

Scripts

npm test              # 60 tests with dependencies; 35 pass + 2 skip without
npm run skill         # regenerate SKILL.md from skill.js
npm run skill:check   # verify SKILL.md is in sync
FileCoverageNeeds Harness
test/hydration.test.jsPure logic: band normalization, random-draw bounds, quiet hours across midnight, streaks, summary, config completionno
test/notify.test.jsExact per-platform argv, AppleScript/XML escaping, PowerShell encode round-tripno
test/skill.test.jsEmbedded skill identical to the on-disk SKILL.md byte for byte, spec-compliant name, tool names completeno
test/plugin.test.jsTool behavior against a minimal fake context, asserting every result matches its own declared output.schemayes
test/integration.test.jsMounted on a real Context with the real tools/skills/systemPrompt services: dependency resolution, skill discoverability, clean disposal, and no disk writes during teardownyes

When the packages are missing, the last two files skip with a printed reason instead of turning the suite red.

License

MIT — see LICENSE.