Preface

In the development and debugging of DSH (DeepSeek Harness), it is common to encounter situations where the model gets stuck, goes off track, or requires immediate intervention. The traditional approach is usually to wait for the current turn to finish, or to completely abort the conversation. The dsh-steer plugin solves this problem by allowing real-time injection of corrective information into a session, or directly interrupting the current turn while the model is thinking.

What This Is

dsh-steer is a DSH bundle plugin maintained by CAI-MH. Through the host’s sessionController orchestration layer, it provides real-time steering and interruption capabilities, enabling developers to finely control the runtime state of large models without waiting for the entire task to complete.

Core Features

Send Steering: Without interrupting the current turn, inject corrective information into the running session. The model reads this information at the next step boundary, preserving work that has already been completed.

Interrupt: Stop the current turn, but retain messages that are queued.

Visual Control: The floating ball in the lower-left corner of the interface displays a status indicator dot: a green dot indicates a session is thinking, and a gray dot indicates idle. The plugin supports automatically listing and selecting the session currently thinking; when multiple sessions are running in parallel, users can manually switch the target.

Interface Control: Provides same-origin HTTP interfaces for operations.

Installation and Activation

Based on verified facts, the official installation command is plugin_forge_install. The specific steps are as follows:

  1. Copy the plugin directory into the web profile’s node_modules/dsh-steer/.
  2. Register dependencies and dsh.profile.bundles in the profile’s package.json.
  3. Restart DSH Desktop to load the bundle (the bundle is only scanned and loaded by the loader after a restart).

Typical Usage

The plugin interacts with the host through code or HTTP interfaces.

Code invocation examples:
* Inject steering: call prompt({ requestId, sessionId, mode: 'steer', content }); the message enters the real-time inbox as a steering node.
* Queue a message: call prompt(..., mode: 'queue').
* Interrupt a session: call cancel({ sessionId }).

HTTP interface call examples:
* Get the session list:

    GET /api/steer/sessions
  • Send a message:
    POST /api/steer/message
    Body: { sessionId, text, mode? }
The `mode` parameter defaults to `steer`, and falls back to `queue` on failure.
  • Interrupt a session:
    POST /api/steer/cancel
    Body: { sessionId }

Applicable Scenarios and Notes

Effective Granularity: The effective granularity of steering information is the “next step boundary”; it does not interrupt tokens that are being streamed. If the model is stuck in a long-running tool call, steering information is read only after that step naturally ends. If an immediate full stop is needed, use the “Interrupt” feature.

Permissions and Security: The interfaces are same-origin HTTP, limited to local loopback + same-origin validation. The plugin runs with the current DSH process permissions; source code and license should be checked before installation.

Conclusion

dsh-steer provides fine-grained runtime control capabilities to the DSH plugin ecosystem. For more details, refer to the Community Catalog or GitHub.