Preface¶
When running complex tasks in DeepSeek Harness (DSH), the Agent often calls a large number of tools consecutively with little interaction with the user in between. Users are left staring at the spinning sidebar, unsure if the task is progressing or stuck at a certain step. Occasionally, they might want to prompt “report progress,” but doing so risks interrupting the model’s context. The community plugin kiru-progress-bar turns this into a configurable rule: it triggers reminders based on step count or wall-clock time, injects synthetic messages through host-approved channels, prompting the model to proactively provide brief reports, while visualizing counts and reminder timings in both the sidebar and chat area.
Below is an introduction to the plugin’s positioning, capabilities, installation methods, and constraints you need to accept when using it.
What is this¶
kiru-progress-bar is released by maintainer Kiru-Sama and categorized as a DSH Workflow plugin (approx. 3 stars on GitHub). The core problem it solves is: The Agent lacks a sense of rhythm during long turns—users cannot see “how many steps have run” or “how long it has been since the last report,” and the model lacks an external clock to estimate elapsed time.
The plugin has zero npm dependencies. It injects synthetic user messages with source.kind = 'progress-nudge' via additionalContexts in tools/post-execute, without polluting the real user prompt history. In addition to progress reminders, it includes low-balance monitoring (reading the host’s deepseekAccount, not touching API keys) and DeepSeek official peak/off-peak billing period indicators.
In terms of ecosystem, DSH follows the philosophy of “everything is a plugin”; the SkillHub directory page is a community collection site with no official affiliation to DeepSeek or High-Flyer.
Core Features¶
Dual Triggers and Shared Metering¶
Two thresholds are adjustable in cordis.patch.yml and can also be input directly in the sidebar panel for immediate effect (debounce approx. 350ms; changes are runtime overrides and will revert to file defaults upon restart):
| Trigger | Default | Meaning |
|---|---|---|
| Steps | 10 steps | Cumulative N tool calls since the last report |
| Time | 120 seconds | Cumulative real wall-clock time since the last report |
If either is hit, a reminder is triggered once, and both step and time meters reset to zero. This prevents a time-based reminder from popping up a few seconds after a step-based reminder has just occurred.
Additionally, minGapSeconds (default 45) prevents rapid firing, and maxPerTurn (default 20) limits the maximum number of reminders per turn. exclude does not count steps for tools like todo_write and ask_user_question by default.
How Time and Steps are Counted¶
The clock follows wall-clock time, and whether it advances is determined by the running state. Pausing (via the panel button) freezes it immediately; the end of a turn (agent/turn-stopping) resets it to zero and stops the clock; a new turn or turn change resets it and starts the clock; when the Agent outputs visible text to the user (text-delta), it resets to zero and continues counting—this ensures that long thinking processes don’t display 0/10 · 0s indefinitely without ever hitting the time threshold. If you do not want speech to reset the counter, set resetOnSpeech to false.
Interface¶
- Sidebar Button: Real-time display of “Step N/Threshold · Elapsed Seconds”; shows “Paused” when stopped; can persistently display peak/off-peak tags “Liang Wen Feng” (Peak) / “Liang Wen Gu” (Off-Peak).
- Sidebar Panel: Two progress bars, step/time threshold inputs, pause/resume/restore defaults, reminders sent and reports made counts, balance and period descriptions.
- Chat Area Banner: After at least one reminder has been triggered, the “Last Reminder” time (from host
nudge.at) persists above the input box; new reminders highlight for about 12 seconds then fade. Can be hidden with a click on×until the next reminder.
The reminder itself is only visible to the model; the banner is for confirming “whether the reminder has been sent.”
Balance and Peak/Off-Peak¶
Balance polls the host’s deepseekAccount.getBalance, comparing the default total balance (recharge + gift, balance.scope: total) against a threshold of 1.5 CNY. If below the threshold, it delivers a [Insufficient Balance] type reminder at a tool boundary. It does not remind or crash if not logged in or if the service is unavailable.
Peak/Off-Peak follows DeepSeek official API documentation: 09:00–12:00 and 14:00–18:00 on Beijing time weekdays are peak hours; all other times (including weekends) are half-price off-peak hours. Statutory holidays require manual configuration of tariff.holidays; otherwise, the panel will indicate that judgment is based solely on weekends and time slots.
Installation and Activation¶
DSH plugins consist of “one package + registration in two places in the profile.” There is no one-line command like dsh plugin add. For complete steps, see the repository’s INSTALL.md. The summary is as follows.
0. Profile Directory (Default):
- Windows:
%USERPROFILE%\.dsh\profiles\desktop - macOS / Linux:
~/.dsh/profiles/desktop
1. Extract the plugin directory to a fixed location (do not stuff it directly into the profile’s node_modules to facilitate future updates via overwrite).
2. Edit the profile’s package.json to add the dependency and bundle:
{
"dependencies": {
"kiru-progress-bar": "link:/your-path/kiru-progress-bar"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"kiru-progress-bar"
]
}
}
}
Use forward slashes for link: paths.
3. Create a link pointing to the plugin directory under the profile’s node_modules/, or simply copy the entire folder to node_modules/kiru-progress-bar. Example for Linux / macOS:
ln -s /your-path/kiru-progress-bar \
~/.dsh/profiles/desktop/node_modules/kiru-progress-bar
4. Completely exit and restart DeepSeek Harness (new bundles are not hot-loaded).
5. Confirmation: A progress button like ● 0/10 · 0s and peak/off-peak tags should appear at the bottom of the sidebar; expanding the panel allows changing thresholds. If it does not appear, check node_modules links, bundles spelling, and did not activate in startup logs according to INSTALL.md.
Please read the GitHub source code and MIT license before installing; the plugin runs with the current DSH process permissions and requires trust in the maintainer, like any community plugin.
Typical Usage and Verification¶
The default configuration is ready to use: every 10 steps or 120 seconds, it reminds the Agent to provide a brief report in Chinese, including system time and duration of the current turn. The text requires “continue execution after reporting” to control length.
For persistent tuning, edit cordis.patch.yml in the plugin package and restart, for example:
stepThreshold: 15
timeThresholdSeconds: 180
locale: zh
balance:
thresholdCny: 2.0
tariff:
holidays: ["2026-01-01"]
The repository provides zero-dependency tests (Node 18+):
node test/run.mjs
Interface self-test: After refreshing, the sidebar should have a progress button; after triggering a reminder, a banner should appear above the chat area input box.
Use Cases and Notes¶
Suitable for: Long-duration coding, research, or batch processing tasks involving multiple tool calls, where you want the Agent to periodically sync progress visibly to the user, and also keep an eye on account balance and whether API peak billing periods are active.
Hard Constraints to Accept:
- Reminders can only be delivered at step boundaries—the model loop blocks during long command execution, preventing mid-execution injection; if the time threshold is crossed, it will display “Overdue by N seconds · Will remind after current step ends.”
- Balance and Peak/Off-Peak rely on the DSH login state and official billing standards respectively; judgments for relay stations or when holidays are not configured are subject to the documentation.
- INSTALL.md states it is currently tested mainly on Windows + DSH Desktop; macOS / Linux are theoretically usable via symlink installation but have not been fully verified.
- Do not register the same plugin configuration repeatedly in the same profile, as routing conflicts may cause the plugin tree to fail to start.
To uninstall, remove the dependency and bundle entries from package.json, remove the node_modules/kiru-progress-bar link or directory, and restart.
Conclusion¶
kiru-progress-bar turns “how often to report” into an observable, configurable rule, and uses a banner to add user-side visibility; balance and peak/off-peak are additional information on the same panel and can be disabled via configuration items as needed.
- Community Directory: SkillHub - kiru-progress-bar
- Source Code and Docs: github.com/Kiru-Sama/kiru-progress-bar