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:
- 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.
- Available During Session Output: Polishing uses the DSH
llmchannel, 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. - 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.
- 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.
- Zero Pollution: Polishing does not create a session or write to history; it only modifies the draft in the input box.
- 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:
- Write a draft in the input box;
- Click the ✨ button to the left of the send button (the button does not trigger if the input is empty);
- Wait a few seconds; the polishing result automatically replaces the input box content, and the button spins to indicate polishing in progress;
- 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
llmchannel, 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-polishsettings 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.