Preface

DeepSeek Harness (dsh) is an agent harness open-sourced by DeepSeek AI, currently in developer preview. Its core design is “everything is a plugin”: models, tools, sessions, sandboxes, and UIs can all be mounted or replaced without modifying the framework’s source code. The official repository is at deepseek-ai/deepseek-harness.

There are already independent community sites that collect such plugins, for example, DeepSeek Harness Plugin Directory. It needs to be clarified upfront: this directory is a community-run site and has no official affiliation with DeepSeek / Fang Technology, and should not be treated as an official app store. Before installing any third-party plugins, you should verify the source code and license on your own.

When running long tasks with dsh, the main model performs self-checks while executing, and it is easy to miss issues like “contradicting user instructions”, “going in circles”, or “losing direction”. dsh-advisor does something restrained: it attaches an independent review model that only reads the main session transcript and injects suggestions into the session in order of severity. It does not approve actions, nor does it issue commands on behalf of the main agent.

What is this

dsh-advisor is a community-maintained “model and provider” type plugin, maintained by omdsh-dev, licensed under MIT, primarily written in TypeScript. The current GitHub repository version is 0.2.1 (package.json, 2026-08-17), with a Node requirement of ^22.19 || >=24. The directory page included this plugin on 2026-08-09.

The repository README states that it ports the advisor subsystem from omp (oh-my-pi) into a standalone dsh plugin bundle. Each session has an independent review model that observes the main transcript, uses explicitly configured provider and model to review each completed stepped turn, and injects suggestions sorted by severity (nit / concern / blocker) back into the session. The advisor’s own messages are excluded from subsequent deltas, so it will not review itself recursively.

The plugin is installed as a pure mount: bundle insertion, Advisor card in the Web settings page, dedicated gateway channel, and /advisor command. It does not patch dsh, nor does it have postinstall scripts to modify the host. It works with both frontends:
- web profile: Settings → Plugin Configuration → Advisor card
- dsh-tui terminal profile: /advisor and /advisor config; editing the Advisor section in TUI’s /settings requires dsh-tui ≥ v0.8.0

The README also emphasizes the capability boundary: only for suggestions. The advisor never approves or rejects the main agent’s actions, and will never issue commands like the main agent does. Misbehaving reviewers are constrained by emission guard, immuneTurns cooldown, and failure policy to avoid getting stuck or polluting the main loop. The current MVP intentionally does not achieve full parity with the omp advisor, and the publicly known gaps will be listed separately below.

Core Features

Based on the repository README and docs/configuration.md, the verified capabilities are as follows.

1. One independent reviewer per session
The review uses a separate model call, only observes the main transcript, and reviews the incremental content after each stepped main turn ends. The advisor’s messages will not be rendered into subsequent advisor deltas, so it cannot read the suggestions it just wrote.

2. Three severity levels, up to one note per review
The delivered messages have the [advisor:{severity}] prefix, with self-descriptive advisory text, for example:

[advisor:concern] extract the helper into a module and unit-test it

The three levels have different meanings and delivery methods:
- nit: Minor style, clarity, or quality suggestions. Delivered via non-intrusive agent.inject and consumed at the next pre-step boundary.
- concern: Significant risks worth weighing before proceeding, or a clearly better direction. Delivered via wakeful agent.steer and constrained by the immuneTurns cooldown.
- blocker: Continuing would clearly be a waste of effort, such as contradicting explicit user instructions, going in circles, or fundamentally unfeasible. Also delivered via agent.steer.

The default immuneTurns is 3: after a concern / blocker has successfully steered, a number of subsequent completed main turns must complete before another disruptive note can steer again; disruptive notes within the window will be downgraded to inject.

3. Explicit model access control
enabled defaults to false. Once enabled, both provider and model are required. If you only write enabled: true but miss either field, the plugin will not initiate any model calls, and the status will report disabled-with-reason with a cause. Unknown configuration keys will be rejected.

4. Zero tools, failures do not block the main loop
The reviewer is just a single independent model call, with no advisor tools, and cannot perform any other actions on the session except for advisory messages. On failure or quota exhaustion, it only discards its bounded backlog and will not halt the main loop. Quota exhaustion (quota_exhausted) has no automatic recovery timer, and you need to manually recover with /advisor on; permanent model errors (such as invalid credentials) will mark the advisor for that session as halted, and you can rebuild it with /advisor on.

5. Session-level toggle without modifying persistent configuration
/advisor on|off|toggle only flips the override for the current session and does not modify the on-disk configuration. Persistent configuration is set via the Settings card, TUI /settings, or $DSH_HOME/settings.yaml.

Installation and Activation

The installation command given on the directory details page is as follows, run it in the DeepSeek Harness terminal:

dsh plugin add github:omdsh-dev/dsh-advisor

For reproducible installations, the directory page recommends pinning the commit hash:

dsh plugin add github:omdsh-dev/dsh-advisor#2ee9844dd1920d024dbcc85c2fa4dc96a45ce698

The hash above corresponds to the main branch commit of the repository on 2026-08-17 (release notes for v0.2.1). Please check GitHub again before using to confirm it is still the version you want to lock.

The repository README also provides an installation method by profile, suitable for environments where web/terminal frontends have already been separated:

dsh plugin --profile web add dsh-advisor      # web profile (Settings → Advisor card)
dsh plugin --profile dsh-tui add dsh-advisor  # dsh-tui terminal profile

You can pin the version when installing from the registry, for example dsh-advisor@0.2.1. The installation documentation states that pulling from the registry gets a published tarball with lib/ and cordis.patch.yml included, so the target machine does not need to build again; runtime dependencies are declared as peerDependencies, parsed by the current dsh installation.

After installation, you can confirm the plugin layer has been added with the following command:

dsh --profile web --dump-config

You should see the # == dsh-advisor section with advisor configuration lines in the output. After installing the web profile, you need to restart the dsh session; after startup, the “Plugin Configuration” page of the Web settings will render the Advisor card.

The corresponding uninstall command is:

dsh plugin --profile web remove dsh-advisor
dsh --profile web --dump-config

For the dsh-tui profile, replace --profile web with --profile dsh-tui in the above commands. You also need to restart the session after uninstalling.

Configuration and Typical Usage

The advisor is disabled by default. To run it properly, you need to add an advisor: section in the global settings file (default $DSH_HOME/settings.yaml, shared across profiles) and explicitly turn on the switch. The example from the README is as follows:

advisor:
  enabled: true                # Master switch (default false) — must be explicitly enabled to take effect
  provider: deepseek-official  # Required when enabled: true
  model: deepseek-v4-flash     # Required when enabled: true
  systemPrompt: ""             # Optional; empty string uses the built-in review prompt
  immuneTurns: 3               # Integer ≥ 0, default 3
  maxDeltaMessages: 60         # Integer ≥ 0, default 60; 0 means no truncation

provider and model must be changed to the provider and model already configured in your current dsh environment. The dropdown menu in the Web card will only list the system’s configured providers and their models; the deepseek-official / deepseek-v4-flash in the YAML above are just documentation examples and are not included in all environments by default.

There are three editing paths for the same set of keys, with later layers overriding earlier ones:
1. Plugin-level config: In the profile patch layer (such as $DSH_HOME/profiles/web/cordis.patch.yml), the row with id: advisor, which is the synthesized base config.
2. Advisor card on the Web “Plugin Configuration” page, or the Advisor section in /settings of dsh-tui ≥ v0.8.0. Both write to the same user layer ($DSH_HOME/settings.yaml), and changes take effect immediately for new sessions without restarting. You cannot edit systemPrompt in the TUI (single-line controls will truncate multi-line text), so you need to use the Web card or directly edit the YAML file to modify the prompt.
3. /advisor command: Only modifies the current session, does not write back to disk.

The Web card will prevent saving when enabled: true but required fields are empty. The TUI /settings does not have this cross-field validation, and it is possible to create a configuration that is “enabled but provider/model is empty”; the runtime access control will still parse it as disabled-with-reason and will not initiate model calls. You can use /advisor status or /advisor config to see the cause.

After installation and activation, in sessions that have the command registry integrated, you can use:

/advisor            Toggle the advisor for the current session
/advisor on         Enable the advisor for the current session
/advisor off        Disable the advisor for the current session
/advisor status     View status, model, running state, pending count, recent activity

In dsh-tui, there is also a read-only /advisor config command to read back the synthesized configuration and prompt the actual writing path. These commands will appear in the TUI’s / menu with subcommand completion (requires the dsh-tui-command-trees package included with the dsh-tui bundle).

Applicable Scenarios and Notes

It is suitable for these scenarios:
- Long-session coding or refactoring, where the main agent easily deviates from the user’s original instructions, and you need a second model to remind you from the side.
- You want review comments to appear in the main transcript instead of opening a separate review window that does not communicate with the main session.
- You use both the Web UI and dsh-tui and want the same advisor: configuration to be shared across profiles.

Things that are not suitable, or not yet supported, refer to the repository’s “Limitations and Roadmap” — do not expect full parity with the omp advisor:
- Only one advisor per session, no parallel review groups, no WATCHDOG-style file discovery.
- The reviewer has no tools and cannot read files or run tests on its own to verify claims.
- No in-session advisor panel; suggestions only appear as tagged injected messages. The Web Advisor card is a configuration interface, not a session view.
- No transcript persistence or cost statistics.
- maxDeltaMessages truncates long session windows, and early context may be lost after compaction.
- A lagging advisor will not catch up and wait for the main loop, backlogs are bounded and will be discarded, and notes may arrive after the next main turn has already started.

There are two security points that must be emphasized separately.

First, the plugin runs with the permissions of the current dsh process, and may execute code during installation. Before installing, please check the source code repository and the MIT license; for reproducible installations, pin the commit hash or registry version number.

Second, the README notes that delta content is not currently obfuscated with encryption, and secrets appearing in the transcript may reach the advisor model; please only configure review models that you trust. In addition, misbehaving notes may carry instructional text, and the plugin does not isolate unsafe output. JSON frame validation and the advisory-only framework are the only current mitigation measures, and notes will be delivered to the main transcript as-is.

Summary

dsh-advisor does not add a second executor to DeepSeek Harness, but instead adds an onlooker reviewer that is disabled by default and requires explicit model specification. It injects suggestions into the session in the order of nit / concern / blocker, discards its backlog on failure, and does not interrupt the main loop. It is still an MVP currently: no tools, no in-session panel, and no full parity with omp advisor. If you are already using dsh to run long tasks and want an extra pair of eyes that only speaks and does not act, you can install it using the directory page’s command and then enable the configuration.

  • Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-advisor/
  • GitHub: https://github.com/omdsh-dev/dsh-advisor
  • DeepSeek Harness official repository: https://github.com/deepseek-ai/deepseek-harness