Introduction¶
In DSH’s plugin system, many interactions occur during the agent execution process: permission approvals, task running, and task completion. These states are only visible within the Harness window by default. If you switch to another application, you can only rely on the window title or check the logs later. DSH Status Notifier is built for this problem: it renders the agent’s status into the macOS menu bar and sends system notifications when the window is not visible.
What is it¶
DSH Status Notifier is a DSH bundle maintained by Carlos5986515, with the repository at https://github.com/Carlos5986515/dsh-status-notifier, categorized as a client plugin, and has 1 star on GitHub. Its positioning is clear: to put the agent’s real-time status in the menu bar (depending on SwiftBar), rather than making a new panel.
The main components are divided into two halves: the Host half (index.js) runs in the DSH Host process, responsible for observing persistent events and rendering SwiftBar scripts; the Client half (client.js) runs in the Web GUI, responsible for sending notifications when the page leaves.
Core Features¶
The menu bar icon is colored based on status, with the meanings as follows:
| Menu Bar Display | Meaning |
|---|---|
⚠ 1 (Orange) |
There is a permission request waiting for your approval |
● 1 (Blue) |
There is a task running |
✓ 1 (Green) |
There is a task ending within 30 minutes |
○ Idle (Gray) |
Idle |
Clicking the menu bar item pops up a dropdown list listing sessions under each state; clicking any line, or the “Open DeepSeek Harness” row, will bring the Harness window to the foreground. The menu bar status refreshes every 5 seconds.
There are two paths for notifications, and they will not trigger repeatedly:
- When the page is open but the window is hidden or unfocused, the Client half triggers browser notifications (based on the framework’s own
uiSession.sessionStatus, with valuesrunning/pendingInteraction/completionUnread). - When the window is closed but the Host is still running, the Host half triggers macOS system notifications via
osascript. The Host only sends notifications when there is no page connection, so the two paths won’t double-notify.
The Host half observes persistent, order-independent event signals: approval/asked and approval/decided (approval audit pairs appended by the Approval service) inside session/event, and the running↔idle conversion of agent/status. It renders dsh-status.5s.sh and its output to the plugin directory; the rendered status files are placed outside the plugin directory to avoid SwiftBar mistaking them for plugins.
Installation and Enablement¶
Prerequisites: macOS, and SwiftBar installed; DSH supports plugin bundles. First install SwiftBar:
brew install --cask swiftbar
Then follow the steps below to install the bundle.
-
Clone the repository to any location, or copy the directory to your workspace.
-
Install this bundle in DSH. Choose one of two ways: select “install local bundle” in Plugin Manager; or let the agent execute
plugin_manager’sinstall_bundle, passing this directory as the target. -
Point SwiftBar to the plugin directory. Choose one:
- Create~/.swiftbarand point SwiftBar’s Preferences → General → Plugin Folder to it;
- Or keep SwiftBar’s own directory, and write its path to the first line of~/.dsh/swiftbar-dir.txt. -
Restart DeepSeek Harness to load the Host half. The menu bar item will appear within a few seconds.
Note: The official method is local installation after cloning; do not try to construct commands like dsh plugin add github:owner/repo based on the plugin name.
Configuration¶
Changing behavior relies on these variables or files:
| Variable / File | Function |
|---|---|
DSH_SWIFTBAR_DIR |
SwiftBar plugin directory (highest priority) |
~/.dsh/swiftbar-dir.txt |
First line is the plugin directory path |
DSH_SWIFTBAR_STATE_DIR |
Storage location for rendered status files, default ~/.dsh/swiftbar-state |
Parsing order: DSH_SWIFTBAR_DIR → ~/.dsh/swiftbar-dir.txt → ~/.swiftbar. The state directory is parsed when plugins load; changes require restarting DSH to take effect.
Local Testing of Rendering Logic¶
The test-render.mjs in the repository will run the Host half using mocked Cordis context, simulating approval / running / idle events, and checks the rendered SwiftBar output and old file cleanup:
node test-render.mjs
You can run it first when changing rendering logic.
Use Cases and Notes¶
Suitable for people using DSH on macOS who want to see status when long tasks run, but don’t want to frequently switch back to the Harness window.
A few practical limitations to know in advance:
- The menu bar item is essentially a SwiftBar script; if SwiftBar isn’t running, the menu bar item won’t appear.
- Clicking a line only brings the Harness window to the foreground; it cannot yet directly deep-link into a specific session.
- The plugin runs with the permissions of the current DSH process and reads and writes the directories mentioned above in your local environment. Read the source code and
LICENSE(MIT license) before installing.
Conclusion¶
The value of DSH Status Notifier is simple: provide an outlet for agent status that can be seen without switching windows, filling the status blind spot when DSH’s window is in the background. The community directory page is https://www.skillhub.cn/plugins/Carlos5986515/dsh-status-notifier, source code and README at https://github.com/Carlos5986515/dsh-status-notifier.