Preface

When collaborating with agents in DSH (DeepSeek Harness), writing instructions for the model or messages to be sent often becomes incoherent halfway through. The common practice is to open a separate session, paste the draft for the model to rewrite, and then copy it back—switching back and forth involves quite a few steps.

@max-null/dsh-draft-polish brings this step into the input box: to the left of the send button is a ✨ button; clicking it invokes the LLM to polish the current draft, with the result filled back directly into the input box. Polishing does not create a session or write to history, and it remains available even while the session is outputting. Below, I will introduce this plugin in the order of features, installation, usage, and settings.

What is it

One-sentence positioning: A draft polishing plugin for DeepSeek Harness. The maintainer is Max-Null, part of the @max-null/* plugin series, and a component of the SSID (Seek Soul in Darkness) desktop experience, evolved from the similar functionality in Fractal (OC Desktop Shell). Current version 0.2.3, License MIT.

DSH’s philosophy is “everything is a plugin,” and a small tool like polishing, which hangs next to the input box, is well-suited to be integrated as a plugin rather than stuffed into the kernel.

Core Features

Six verified capabilities, listed one by one:

  1. One-click Polish: The ✨ button to the left of the send button, when clicked, has the LLM polish the draft and the result is filled back into the input box. The button does not trigger if the input is empty.
  2. Available During Session Output: Polishing uses the DSH llm channel, decoupled from agent session scheduling, so it polishes normally even while the session is outputting. This is an improvement over the old version of OC Desktop Shell.
  3. Carry Session Context: By default, the last 4 messages of the conversation are passed to the model as background context to help understand the intent of the draft; this can be disabled if not needed.
  4. Reuse Existing Model Channel: By default, it inherits the channel of the current session, so no separate API Key configuration is needed; it can also specify a provider and model separately.
  5. Zero Pollution: Polishing does not create a session or write to history; it only modifies the draft in the input box.
  6. Isolated by Session: The input box for each session is independent. If you switch to another session while polishing is in progress, the result is still written back to the session that initiated the polishing.

Installation and Enablement

First, do the installation. The official way is to add the plugin to a specified profile:

dsh plugin --profile <name> add @max-null/dsh-draft-polish

You can also manually add it to the profile’s package.json dependencies and dsh.profile.bundles:

- id: draft-polish
  name: '@max-null/dsh-draft-polish'

Version and Compatibility: 0.2.2 and above are compatible with DSH 0.1.2-alpha.2+ (current version 0.2.3 falls into this category); 0.2.1 and earlier versions are compatible with 0.1.1-rc.2. Confirm your DSH version before installing.

Typical Usage

After the steps above, the plugin is ready to use. The complete workflow for daily polishing consists of four steps:

  1. Write a draft in the input box;
  2. Click the ✨ button to the left of the send button (the button does not trigger if the input is empty);
  3. Wait a few seconds; the polishing result automatically replaces the input box content, and the button spins to indicate polishing in progress;
  4. Check the result and send as usual if satisfied.

Settings

Settings page → Left column “Polish Settings” entry (from DSH 0.1.2-alpha.2, config namespace draft-polish). Main configuration items and defaults are as follows:

Config Default Description
provider '' Polish model channel, leave empty to inherit current session channel
model deepseek-v4-flash Model to use for polishing
reasoningEffort off Reasoning effort, off is fastest for polishing scenarios
budgetTokens 1024 Output token budget
temperature 0.3 Low randomness to preserve original meaning
timeoutMs 30000 Timeout fallback
contextEnabled true Whether to carry session context
recentWindowMessages 4 Number of recent conversation messages as context

Only change the items you want to change; the default values cover most scenarios.

Permissions and Security

Before installing it in your own environment, it is worth figuring out what it touches:

  • Network: The client side only accesses the host JSON API (local machine) within the current DSH process via the same-origin relative path /draft-polish/api/*, does not request any external URLs, does not upload data, and has no telemetry.
  • Credentials: The plugin does not hold API Keys; polishing calls go through the DSH llm channel, reusing the model channels and credentials you have already configured.
  • Dependencies: Zero external npm dependencies at runtime (schemastery has been inlined into lib/index.js); peer dependencies are only DSH official service and React, provided by the DSH runtime.
  • File System: It does not read or write any files; the only persistent state is the draft-polish settings namespace, managed by the DSH settings service.

It also does not swallow drafts on failure: if the host API is unavailable → error is prompted, draft remains unchanged; if the LLM call fails → original draft is retained with a prompt, default timeout 30 seconds; if context read fails → degrades to polishing without context, does not interrupt.

A reminder: The plugin runs with the permissions of the current dsh process. Before installing, it is recommended to check the source code and license (this project is MIT) to confirm there are no behaviors beyond expectations.

Use Cases

Suitable for these situations: frequently writing instructions or sending messages to agents in DSH and wanting to smooth out the wording before sending; sessions often run for a long time, and you don’t want to open a separate session just to polish a paragraph; caring about keeping the session history clean and not wanting traces left by the polishing process. Using it in parallel across multiple sessions is also fine; the isolation mechanism ensures the result is written back to the correct input box.

Summary

@max-null/dsh-draft-polish simplifies “polishing a draft” from switching sessions, pasting, and copying to just clicking a button: it calls and reuses the DSH existing model channel, does not create a session or write to history, and does not lose the draft on failure. If your daily work relies heavily on the DSH input box, you can install and try it out following the steps above.

Plugin Directory Page: https://www.skillhub.cn/plugins/Max-Null/dsh-draft-polish

GitHub Repository: https://github.com/Max-Null/dsh-draft-polish

A note: SkillHub is an independent plugin directory maintained by the community and has no official affiliation with DeepSeek or HiPhish.