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.

Plugin Kegel — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
P

dsh-plugin-kegel

Plugin Kegel

Kegel reminder for DeepSeek Harness: an interval timer with guided squeeze/release sets — a chip at the top-left of the conversation plus a full panel in the sidebar.

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

npx -y @deepseek-ai/dsh plugin --profile web add github:jueshali/dsh-plugin-kegel#245ec2f8aeb7b02e87ad5bf61a27cd07d1539559
READMECompatibilityVersions
The panel mid-set: a five-second squeeze, rep 1 of 10, settings expanded

Compatibility and provenance

Plugin Kegel is published as dsh-plugin-kegel 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
10/9/2026

Versions

0.1.0stable
10/9/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
★ 0
Weekly downloads
0
Last push
10/9/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 ui-customization.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profileExperimental Web profile layer for Agent Teams Remote and UI pluginsAb Chartdsh-ab-chartChart rendering tool with the browser card that draws its calls, in one publishable plugin packageWhale Widgetdsh-whale-widgetDeepSeek balance whale widget in the bottom-right corner of the DSH Web interface: balance/today’s usage/peak-off-peak pricing, customizable bubble click sequence (text/balance/today/peak-off-peak/image/random phrases and parallel weighted selection), per-line styles and fonts, floating quick editin

README

dsh-plugin-kegel

English | 中文

A Kegel (pelvic-floor) reminder for DeepSeek Harness — an interval timer that nudges you once an hour and then guides a set of squeeze/release reps with audio cues.

It is a reminder, not medical advice and not a training log. Go at a comfortable pace and stop if anything hurts.

┌ sidebar ────────────┐   ┌ panel ────────────────────────────────────┐
│  ⏱ Kegel reminder    │ → │  Next reminder in 42:15   ◔ progress ring │
│  ⚙ Plugins           │   │  [Do a set now] [Restart timer]           │
└─────────────────────┘   │  3 sets today · 30 reps   /  settings     │
                          └───────────────────────────────────────────┘

┌ conversation header ──────────────────────────────────────────────┐
│ (◔ 42:15 ·) ▶ ↗     Session title …                               │
└───────────────────────────────────────────────────────────────────┘
       │       │ └ open the full panel
       │       └ do a set now (hidden while a set is running)
       └ click = the current phase's main action
         (waiting → start · squeezing → pause/resume)

The panel mid-set: a five-second squeeze, rep 1 of 10, settings expanded

The full panel mid-set (Chinese UI — the plugin ships both zh and en dictionaries).

The chip sits in the window-drag band of the conversation header, so it carries its own -webkit-app-region: no-drag, written as .kg_chip.kg_chip to outrank the host's [data-window-drag] rule regardless of stylesheet order — otherwise a click would drag the window.

Install

Requires a DSH build with the web surface (@deepseek-ai/dsh-base + @deepseek-ai/dsh-web-app profile bundles). Developed and verified against 0.2.0-rc.2.

# From GitHub, through the plugin manager (installs the bundle and selects it):
plugin_manager install_bundle github:jueshali/dsh-plugin-kegel

You can also paste github:jueshali/dsh-plugin-kegel into the Plugins page in the sidebar, or, after an npm release, plugin_manager install_bundle dsh-plugin-kegel.

The plugin is a bundle: installing it adds dsh-plugin-kegel to dsh.profile.bundles, and its cordis.patch.yml inserts the one loader row the plugin needs. To uninstall:

plugin_manager remove_bundle dsh-plugin-kegel
Manual install (no package manager)

Clone the repository anywhere, then make the package resolvable from your profile and add it to the profile's bundle list:

// <profile>/package.json
{
  "dependencies": { "dsh-plugin-kegel": "link:/absolute/path/to/dsh-plugin-kegel" },
  "dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-plugin-kegel"] } }
}

No build step is needed — the browser half is committed as lib/client.js.

How it works

       interval elapses        "Start set"
wait ──────────────────► due ─────────────► squeeze #1 ─► release #1 ─► … ─► squeeze #N
  ▲                      │                                                      │
  │                      │ snooze 5 min                                         │ set done
  │                      └──────────────────────────► wait ◄────────────────────┘
  └───────────────────────────────────────────────────┘
  • wait — a countdown to the next reminder; it starts ticking as soon as the plugin mounts.
  • due — time is up: an audio cue plus an optional desktop notification. It waits for you to start or snooze; it does not auto-run the guided set by default, so a reminder that fires while you are away cannot silently "complete" itself and reset your clock. Turn on Start a set automatically when due if you want full automation.
  • squeeze / release — the guided set, with a different cue per transition (rising two-tone for squeeze, a low tone for release, a three-note flourish when the set completes).
  • A set that finishes credits itself, notifies you with the next reminder time, and immediately starts the next interval.
  • If the interval elapsed while the page was closed you get one reminder when you come back, not a backlog.
  • Countdowns are deadline-based (endAt timestamps), so a throttled background tab cannot make them drift; the state is mirrored into localStorage (dsh.kegel.v1) so a refresh never loses it.

Settings

SettingDefaultRange
Reminder interval (min)601–480
Reps per set101–50
Squeeze (seconds)51–60
Release (seconds)51–60
Start a set automatically when dueoffon/off
Audio cuesonon/off
Desktop notificationoffon/off

Today's set/reps counters reset with the calendar day.

Slots it occupies

SlotKindContent
mainkeyed, key kegelthe full panel
sidebar.panellistlist, id kegelthe sidebar icon; the id matches the main key, so the icon opens that panel
conversation.header.leadingsingle, rootthe header chip described above

Development

lib/index.js       node half  — an empty apply(); its only job is to exist as a loader row
lib/client.js      browser half — the whole UI, hand-written as a lazy-CJS bundle
cordis.patch.yml   the bundle patch that inserts the loader row
test/smoke.mjs     offline test: no browser, no DSH, ~60 assertions
node test/smoke.mjs     # syntax + contract + state machine + rendering, all stubbed

test/smoke.mjs reproduces the two contracts the shell enforces — the bundle shape (window.__ModuleLoader__.load({ id, factory }), side effects deferred to materialization) and the plugin body (apply(ctx) + inject) — then drives the reminder engine on a controlled clock and renders every component with a stub React. CI runs it on Node 18/20/22.

Two things worth knowing before you edit this

  1. The browser half is the package's client half. @deepseek-ai/dsh-client-modules scans enabled loader entries for packages declaring dsh.client.platform === "web", resolves exports["./client"], and serves it from /plugins/<package name>/client.js. The bundle's id must equal the package name. It only requires react, which the shell seeds, so the package has no runtime dependencies and no build step — edit lib/client.js directly.
  2. Editing lib/client.js is not enough on its own. The node half snapshots the bundle bytes at compose time, so a page refresh still serves the old code. To pick up a change, make the loader re-process the row — toggle the plugin off and on (plugin_manager set_plugin include:ui-kegel enabled=false, then enabled=true), or restart DSH. The client HMR chain then pushes the new module to the browser, usually without a manual refresh.

License

MIT