Preface¶
DeepSeek Harness (dsh) splits its runtime into layered plugins, with the official repository’s slogan being Everything is a Plugin. After installing the web interface, what truly determines what the model “sees in this round” is often not the system prompt itself, but whether you can append a paragraph to the bottom of the payload before each request.
There are two common types of needs. One is lighthearted: add a fixed phrase like “Thank you, Master Whale” after every user message as a fun easter egg. The other is more practical: when roleplaying, you want to override the <think> thinking convention, unify the tone, or limit the length, without having to manually paste the content into every message. The community plugin deepseek-manners turns these two things into a single mechanism — inject a suffix during the first model request of a turn, which only takes effect for that round.
This article is organized after cross-checking with the community directory page, GitHub repository README/source code, and the official DeepSeek Harness repository: what it is, how to install it, and how the configuration options actually work. The community plugin directory deepseek-harness-plugin.com is an independent site and has no official affiliation with DeepSeek / Fang Tian. Do not treat it as an official app store.
What It Is¶
deepseek-manners is a DeepSeek Harness plugin maintained by Moeblack, hosted on the GitHub repository Moeblack/deepseek-manners. The community directory categorizes it under the “Tools & Capabilities” section. The repository’s package.json has a version number of 0.1.0, and the primary language is TypeScript. As of August 17, 2026, GitHub showed 13 stars; the directory page listed 10 stars at the time, so refer to the repository page for the accurate count.
The positioning of both the directory page and the README is consistent: add a thank-you phrase after each message is sent, with the default text being “Thank you, Master Whale”, and it only takes effect for that round. In the source code, this functionality is implemented in agent/pre-step: take the text from the configuration, create a user message where source.kind === "plugin", and append it to the bottom of the current round’s payload.
What it solves is not just “adding decoration to the interface”, but:
- Only inject once per user input, and do not repeat in subsequent steps of tool loops
- Recycle the suffix from the previous round according to rules to avoid infinite accumulation in the context
- Replace text with multi-line instructions when needed to constrain tone, format, or thinking tags
The current repository does not include a LICENSE file, and GitHub has not detected an SPDX license. Before installing, you should read the source code yourself and confirm the usage terms.
Core Features¶
Only Inject on the First Request of a Turn¶
The injection condition is written in src/index.ts: there must be a direct input where source.kind === "user" in the current round’s messages, the switch is turned on, and text is not empty. This corresponds to what the README says — inject only in the step that includes direct user input (the first model request of a turn), and place it at the bottom of the payload. When the agent uses tool calls, subsequent steps will not paste the same suffix again.
Recycle Old Suffixes, Skip for Ultra-Long Replies¶
The suffix injected in the previous round will not stay visible to the model forever. The next round’s pre-step will look for the user/message written by this plugin, and use surface replace to replace the most recent one with empty text; the conversation log will still be retained, but it will no longer be visible to the model.
Whether to recycle only depends on the character count of the most recent assistant reply (including text and reasoning), and does not trace earlier history:
- Short reply: recycle the most recent old suffix
- Ultra-long reply: skip recycling, the suffix will be permanently retained to avoid surface replace disrupting the prompt cache of long replies
The threshold is controlled by hideAboveChars. The default value in the source code is 0, which means always mask it; the configuration example in the README uses 2000, which is an example of “skip recycling if the length exceeds this value”, not the factory default. If you want to protect the cache of long replies, you need to change this number to greater than 0 in settings.yaml yourself.
Turning off the switch only stops new injections. The source code comments clearly state: existing suffixes in history will still be recycled according to the above rules.
Heart-Shaped Switch on the Web Interface¶
After installing it to the web profile, a heart-shaped button will appear next to the input box (with aria-label “Thank You Switch” and tooltip text “Thank the Little Whale”). When enabled, it is solid green with a pulsing badge; when disabled, it is hollow gray. package.json declares the client as "platform": "web", and mounts it in the conversation.input.right slot.
The switch state is stored in the plugin directory’s config.json, and read/written via GET/POST /deepseek-manners/settings, which will override the enabled value in settings.yaml. Changes to text and hideAboveChars still go through $DSH_HOME/settings.yaml.
Replace the Thank-You Phrase with Any Suffix¶
The text will be pasted as-is to the bottom of the upstream payload, and template variables are not supported. The README notes that it can be written as a YAML block scalar to:
- Append roleplay-style reply guidelines
- Override the model’s thinking mode (behavior of <think> tags)
- Append style, tone, or output format requirements
The repository marks “adapting the chain-of-thought override for victorchen96/deepseek_v4_rolepaly_instruct” as an advanced usage (and listed it as a “main usage”). That document is targeted at the DeepSeek official app/web expert mode and the deepseek-v4-flash / deepseek-v4-pro API, and its principle is to paste thinking conventions at the end of user messages. deepseek-manners provides automatic pasting per round on the DSH side, and is not an official component of that repository.
Installation and Activation¶
You must first have a working DeepSeek Harness setup. The official repository is still in developer preview and notes that breaking changes will occur. The most recent push to this plugin (August 13, 2026, commit 32f58a8a008797a624f0f46367cb91fed9de5dee) was noted to be compatible with the open-source version 0.1.0-rc.5.
The installation command given on the community directory page is:
dsh plugin add github:Moeblack/deepseek-manners
For reproducible installations, the directory page requires pinning the commit hash:
dsh plugin add github:Moeblack/deepseek-manners#32f58a8a008797a624f0f46367cb91fed9de5dee
The repository README shows the syntax for installations with a web profile (GitHub usernames are case-insensitive, moeblack and Moeblack point to the same repository):
dsh plugin --profile web add github:moeblack/deepseek-manners
For local development, you can use a symlink:
dsh plugin --profile web add -w link:/path/to/deepseek-manners
index.mjs and client.js are already committed to the repository, so no additional build steps are needed for git installations. The official CLI will wrap bundles that declare dsh.bundle.patch into the current profile. If the heart-shaped switch does not appear on the interface, restart the corresponding profile according to DSH conventions (for example, dsh --profile web) and check again.
Follow the security warning on the directory page: the plugin runs with the permissions of the current dsh process, and may execute code during installation. Inspect the source repository and license before installing.
Typical Usage Scenarios¶
Default Thank-You Phrase¶
Write the following in $DSH_HOME/settings.yaml (use the field names from the repository README as the standard):
deepseek-manners:
text: 谢谢你,鲸鱼大人
enabled: true
hideAboveChars: 2000 # Skip masking if the most recent assistant reply exceeds this character count; 0 = always mask
If you do not modify text, the source code default is also “Thank you, Master Whale”. You can also just use the heart-shaped switch next to the input box on the web interface to control whether to inject the phrase.
The README clearly states that you do not need to restart after modifying settings.yaml. DSH’s dsh-settings-file uses chokidar for hot reloading by default (100ms debounce), and changes will take effect in approximately 1–2 seconds. If there is a YAML syntax error, the service will retain the last valid configuration and alert in the logs, and will not crash.
Multi-Line Instructions¶
Use | or |- block scalars in YAML. The README requires that each line in the block scalar be indented by at least 6 spaces (2 spaces of indentation for text: itself, and 4 more spaces for the body):
deepseek-manners:
text: |-
The following are supplementary requirements for this reply, please strictly abide by them:
1. Start the reply with the character's usual catchphrase and maintain consistent tone.
2. Place the thinking process inside <think> tags, and output the body text directly.
3. Do not use list structures in the body text; use natural paragraphs instead.
4. Keep each reply under 200 words.
enabled: true
hideAboveChars: 600
Override the Thinking Process¶
The repository provides the following thinking mode example:
deepseek-manners:
text: |-
<think>
Please follow these conventions during your thinking process:
- First briefly analyze the current conversation's goals and stance.
- List 2-3 optional response directions, then select the one that best fits the character's setting.
- After finishing your thinking, output the body text directly without rewriting or reviewing.
</think>
enabled: true
hideAboveChars: 600
This just pastes this text to the bottom of the payload. Whether it can stably alter the model’s behavior depends on the current model and prompt, and the repository does not provide success rate data.
Applicable Scenarios and Notes¶
This is suitable for users who are already running the DSH web interface and need to automatically append a fixed suffix per round: a thank-you phrase, character tone constraints, or turning manual pasting of thinking conventions into a configuration. The heart-shaped switch only appears on the web client; the pre-step injection on the host side depends on whether the profile has this bundle installed, and the installation examples in the README target --profile web.
Before using, pay attention to these verifiable boundaries:
1. Permissions and Licensing. The plugin runs with the same permissions as dsh, and may execute code during installation. The current repository has no license file, so do not assume it is available under the MIT license or other permissive agreements by default.
2. Default Value of hideAboveChars. The source code default is 0 (always recycle); the 2000 in the README example needs to be written into your configuration to take effect. If you set it too low, the prompt cache of long replies may be disrupted by surface replace; keeping it at 0 will recycle the old suffix every round.
3. No Template Variables. Older versions of the README once mentioned {{char}} / {{user}}, but the current README has removed them and clearly states “inject exactly what is written”.
4. Injected Content is Visible to the Model. The suffix is a real user message that will enter the context and occupy the window. Do not write secrets, internal instructions, or content that should not appear in logs into text.
5. DSH is Still Rapidly Iterating. The official README notes that compatibility-breaking changes will occur. This plugin’s most recent compatibility note targets 0.1.0-rc.5, so you should recheck the repository after upgrading Harness.
6. The Directory is Not an Official Store. Refer to the GitHub source code and the original text of dsh plugin add; star counts and categories are subject to the numbers on the page when you open it, and will change over time.
Summary¶
The public image of deepseek-manners is “say thank you to the whale girl every round”, and its implementation is a per-round suffix injection hooked into agent/pre-step: a default thank-you phrase, replaceable with multi-line instructions, and using hideAboveChars to balance between recycling old suffixes and protecting long reply caches. The web interface uses the heart-shaped switch next to the input box to control whether to continue injecting.
Community Directory Page: https://deepseek-harness-plugin.com/zh-CN/plugins/deepseek-manners/
GitHub Repository: https://github.com/Moeblack/deepseek-manners