Foreword¶
When running intelligent agent sessions with DeepSeek Harness (DSH), the time between the model’s thinking and generating a reply is pure waiting: a few seconds to tens of seconds where the session cannot be interrupted and there is nothing to do. You usually just switch tabs to browse other pages and come back. dynamic-schulte-dsh utilizes this time—it is a waiting-time mini-game plugin that lets you play a round of Schulte Grids in the DSH Web UI while the model is replying. DSH’s philosophy is “everything is a plugin,” and this plugin was built exactly along that line. Below is an introduction to its features, installation methods, and implementation.
What is it¶
dynamic-schulte-dsh is maintained by marvin9551. It can be summarized in one sentence: Dynamic Schulte Grid · DSH Waiting Time Mini-Game Plugin, played in the Web UI while waiting for a model reply. The model does not participate in the game—it opens specifically when waiting for a model reply, allowing you to play while you wait.
The plugin registers a “Schulte” entry at the bottom of the sidebar in the dsh Web UI; when the current session model is thinking, the entry lights up with a breathing green dot to indicate status. History and settings are stored in browser localStorage, with no backend and no account system. Current version is 0.1.0, licensed under MIT.
Core Features¶
The implemented capabilities are five:
- Static Grid: Classic n×n Schulte Grid (3×3 ~ 7×7), click 1..N in order;
- Dynamic Roulette: Numbers are distributed on concentric rings, the roulette rotates at an adjustable speed to train hand-eye coordination and resistance to distraction;
- Wait Indicator: When the model is thinking, the sidebar entry and the panel header display a synchronization indicator;
- Local Persistence: History and settings are stored in browser localStorage, no backend required;
- Optional Enhancements: Highlight target numbers / random color distractions.
Installation and Usage¶
The plugin declares a dsh.bundle manifest and can be installed via dsh plugin add. First build, then install into a profile, and finally start:
# 1. Build (or use the published artifacts)
pnpm install
pnpm build
# 2. Install into profile
dsh plugin --profile <name> add -w /path/to/dynamic-schulte-dsh
# 3. Start Web UI
dsh --profile <name>
Replace <name> with your own profile name, and /path/to/dynamic-schulte-dsh with the local path to the repository. After the steps above, open the Web UI and click “Schulte” at the bottom of the sidebar to start playing.
Uninstallation is also a single command:
dsh plugin --profile <name> remove dynamic-schulte-dsh
Architecture and Development¶
If you want to modify it, the code is split into two halves:
- Host half (
src/index.ts): A placeholder plugin. The game is pure browser-side; the host half only serves as a carrier for the Cordis Loader row anddsh.clientclient package discovery, registering no capabilities. - Client half (
src/client/): A browser bundle that registers thesidebar.footer.actionslot; inside the panel is the full game—engine.tsis a pure TS state machine (no React dependency),GridBoard/RouletteBoardrender the static grid and dynamic roulette respectively.
Regarding build configuration, tsdown.config.ts replicates the harness repository’s client bundle convention: platform modules are externalized and the rest are inlined, producing a window.__ModuleLoader__.load({id, factory}) closure factory, provided by the web shell at /plugins/dynamic-schulte-dsh/client.js.
Common commands used during development:
pnpm typecheck # tsc --noEmit
pnpm build # tsdown, producing lib/index.js (host placeholder) and lib/client.js (browser bundle)
pnpm verify:host # Smoke test of build artifacts
The runtime environment is the dsh Web UI (@deepseek-ai/dsh-web-app bundle), which depends on React 18 as the platform module and requires browser support for localStorage.
Applicable Scenarios and Notes¶
Suitable for two types of people: those who use dsh for daily sessions and want to utilize waiting time; and developers who want to write plugins for dsh Web UI and need a “client half slot registration + host half placeholder” minimal example—the architecture of this plugin is a ready-made reference.
Two notes before installation:
- The plugin runs with the permissions of the current dsh process. After installing into a profile, it loads with
dsh --profile; it is recommended to read the source code once before deciding whether to install. - The plugin depends on the React 18 platform module and browser localStorage. Confirm that your dsh Web UI environment meets these requirements before deployment.
Conclusion¶
The problem this plugin solves is very specific: the fragmented time waiting for a model reply. It introduces no backend, does not depend on the model, and is implemented purely on the browser side. Install and play. See the GitHub repository for source code and more details:
- GitHub: https://github.com/marvin9551/dynamic-schulte-dsh
- Community Directory Entry: https://www.skillhub.cn/plugins/marvin9551/dynamic-schulte-dsh
The Community Directory is an independent site with no official affiliation to DeepSeek or Hexagon.