Preface¶
DeepSeek Harness (dsh) is an agent framework open-sourced by DeepSeek AI, currently in the developer preview stage. Its core philosophy is “everything is a plugin”: tools, interfaces, themes, and workflows can be packaged into the current profile layer by layer. Many independent repositories have emerged in the community to collect these plugins, among which DeepSeek Harness Plugin Repository is a community-run site not officially affiliated with DeepSeek / Fang Info.
When using the Web UI to view agent responses on a daily basis, the main body is often pure Markdown. The model occasionally outputs Unicode emojis, but these are just characters that cannot have their art style changed or be unified into a set of community-style emoticons. What dsh-emoji aims to do is more specific: let the model output emoticons using fixed semantic markers, which are then converted into inline images from the current emoji pack by the Host side.
Below is an explanation of what it is, how to install it, and how to use it, based on information verified against the repository README, package.json, changelog, and plugin directory page.
What is dsh-emoji¶
dsh-emoji is a fun plugin for DeepSeek Harness, maintained by hellodigua, with code licensed under MIT. Its GitHub repository is hellodigua/dsh-emoji, the primary language is TypeScript, and the repository topic includes dsh-plugin. As of 2026-08-17, GitHub shows 23 stars; the community directory page recorded 17 stars during the same period, and star counts should be referenced from the repository page.
One-sentence positioning: Add switchable, customizable inline emoticons to DSH responses. The introduction on the plugin directory page states: “Let AI responses include custom emoticons, supporting emoticon packs from platforms such as Bilibili, Xiaohongshu, Tieba, Zhihu, etc., or custom emoticons.” After cross-referencing the repository documentation, a more accurate description is: the runtime has 40 built-in blue whale (big fat fish) emoticons; switching art styles from Tieba, Bilibili, etc., or uploading ZIP packs is done through the same semantic protocol, which does not mean that emoticons from these platforms are pre-packaged into the release.
The current npm package version is 0.2.2-beta.1 (2026-08-15). The changelog notes that 0.2.1 is the recommended installation version, and the runtime behavior of 0.2.2-beta.1 is consistent with 0.2.1 / 0.1.0. The compatibility statement targets @deepseek-ai/dsh@0.1.0-rc.6, with a peer dependency range of ^0.1.0-rc.6. The client platform marked in package.json is web, and it needs to be added to the Web Profile before restarting the Web Host.
Working Principle and Core Capabilities¶
The emoticons are not generated by the model drawing a new image, nor do they trigger a new model call. The built-in protocol requires the model to output semantic markers such as ::happy:: when it needs to express emotions or decorations; the plugin replaces these markers with inline images corresponding to the current emoticon pack on the Host side.
The built-in package and user-uploaded packages share 40 stable semantic keys, with the contract identifier dsh-emoji-core@1. The keys are machine-readable protocols and should not be translated or renamed. The current 40 filename keys are:
happy, sad, confused, watching, angry, speechless, doge, overloaded,
neutral, laughing, crying, sweating, thinking, okay, nodding, sleeping,
hurt, peeking, approve, heart, shy, star-eyes, laugh-cry, touched,
scared, facepalm, eye-roll, sigh, frustrated, playful, snickering,
sarcastic, cool, celebrate, cheer, thanks, sorry, hug, please, applause
Each key corresponds to a PNG image with the same name. Similar semantics have boundaries in the contract. For example, happy refers to mild joy, clear laughter is reserved for laughing, and tears of laughter use laugh-cry. The complete meanings and drawing suggestions can be found in the repository’s EMOJI_KEYS.md.
The repository README also lists several rendering boundaries that are worth remembering during actual use:
- Only plugin markers and plugin images are processed; Unicode emojis, code, links, unknown markers, and other Markdown images in ordinary body text will not be rewritten.
- Multiple plugin emoticons can appear in the same response, but they must be separated by valid body text; the same key can be reused in different positions.
- There are four display sizes: small, normal, large, and extra large.
- The default built-in assets are blue whale emoticons. The README shows the conversation effects after switching to the Tieba emoticon pack and uploading the Bilibili emoticon pack, and notes that the same protocol can also be used for custom packs from Xiaohongshu, Douyin, Weibo, etc.
- The repository’s ASSETS.md clearly states that assets/emoji/bilibili/ is only for development reference, does not enter the current runtime catalog, and is not included in the publishing whitelist of package.json#files. Therefore, “supporting Bilibili emoticons” should not be interpreted as meaning that the complete Bilibili pack is included by default after installation.
The code is licensed under MIT, but the assets may not be. ASSETS.md explicitly states that the code license does not claim ownership of the whale image or secondary-creation emoticon assets; the 40 runtime images can be distributed publicly with the npm package, but are not covered by the MIT license, and the right to copy, adapt, or redistribute the assets separately from this project is not granted.
Installation and Activation¶
The installation command given on the community directory page can be run in the DeepSeek Harness terminal:
dsh plugin add github:hellodigua/dsh-emoji
For reproducible installations, the directory page recommends pinning the commit hash:
dsh plugin add github:hellodigua/dsh-emoji#commit
Replace #commit with the actual commit hash from the repository, do not leave this placeholder.
The repository README provides the method using the npm package name and specifying the Web Profile. After installation, you need to restart the Web Host:
dsh plugin --profile web add dsh-emoji
The stable version recommended in the changelog is dsh-emoji@0.2.1. To try the pre-release version, replace the package name with dsh-emoji@beta. Do not just run npm install dsh-emoji: this will only install the package into the current Node.js project and will not enable the DSH plugin.
The directory page has a security reminder that should be read before installation: the plugin runs with the permissions of the current dsh process, and may execute code during installation. Please check the source code repository and license before installing. GitHub installations may also run build scripts locally; only install sources you have reviewed yourself.
Adjust Emoticon Frequency and Display¶
After installing and restarting the Web Host, open Settings → Plugins → Emoticons (Whale Emoji):
- Off: Do not use emoticons.
- Smart: Use emoticons naturally only when they truly help express meaning, up to 3 per turn. This is the default option.
- High Frequency: Proactively consider using emoticons, but do not force them on every response or pursue multiple emoticons; up to 4 per turn.
You can also select the emoticon pack, adjust the display size, or fill in the “Additional Prompt Words” to constrain the selection, tone, and usage scenarios on the same settings card. Changes take effect from the next response after saving, and no Host restart is required. Whether emoticons are actually inserted is still determined by the model, and the plugin will not forcibly paste images after every sentence.
Upload Your Own Emoticon Pack¶
Custom packs reuse the same set of 40 keys, so the model still outputs markers such as ::happy::, only replacing the final images, and there is no need to retrain the model to recognize images for each set of assets.
Click “Upload ZIP” on the aforementioned settings card. After a successful upload, select the new pack and save, and it will be used in the next model call. The ZIP can directly contain the following files, or wrap them in a top-level directory with the same name:
my-whale.zip
├── pack.json
└── images/
├── happy.png
├── sad.png
├── thinking.png
├── celebrate.png
└── ...remaining standard keys
The format of pack.json is as follows. The current uploaded pack must declare keySet as dsh-emoji-core@1:
{
"schemaVersion": 1,
"keySet": "dsh-emoji-core@1",
"id": "my-whale",
"name": "我的鲸鱼表情",
"version": "1.0.0"
}
schemaVersion represents the ZIP technical format, and keySet represents the semantic set implemented by the images. Each key must provide exactly one .png file with the same name. id uses lowercase letters, numbers, and hyphens, and version uses SemVer. The content of the same id@version cannot be overwritten; you must increase the version when updating assets.
The hard limits given by the repository are: maximum ZIP size 20 MiB, maximum unzipped size 80 MiB, maximum single file size 2 MiB, and image width and height must not exceed 512 pixels. Path traversal, extra files, missing keys, unknown keySet, forged formats, and same-version conflicts will all be rejected.
User packs are saved in $DSH_HOME/emoji-packs/ (default ~/.dsh/emoji-packs/), and the settings only save the current id@version. “Removing” it from the selection list will not physically delete the asset bytes, so that versioned URLs in historical messages can still be played back; re-uploading the exact same ZIP will restore that version.
When making your own pack, you must also handle the rights to the assets separately: the contract requires contributors to hold original copyright or redistribution authorization. Do not disassemble and republish the built-in blue whale images as your own pack.
Applicable Scenarios and Notes¶
It is more suitable for these situations:
- You are already using the DSH Web UI and want unified-style inline emoticons in responses instead of scattered Unicode symbols.
- You want to change the conversation tone from “documentary style” to community emoticon style, such as Tieba, Bilibili, or original character styles, without modifying the model itself.
- You need to create a fixed 40-semantic emoticon pack for your team or personal use, and switch between multiple sets of assets.
The clear restrictions to note are:
- The current version is for Web Profile and @deepseek-ai/dsh@0.1.0-rc.6. DSH is still in developer preview, and future incompatible changes may occur.
- The local development environment requires Node.js ^22.19.0 || >=24 and pnpm 11; this is the requirement for developing this plugin, and does not mean end users must compile from source code.
- Whether emoticons appear is determined by the model. Setting it to “Smart” or “High Frequency” only changes the prompting strategy and per-turn limit, and cannot guarantee that every response will include images.
- The plugin runs with the permissions of the current dsh process. Before installing, you should read the source code, license, and asset descriptions in ASSETS.md; production environments are recommended to pin the commit.
- The community plugin directory is not an official DeepSeek app store, and inclusion does not represent official endorsement.
Summary¶
dsh-emoji condenses “AI wants to express a certain emotion” into 40 stable keys, and renders them into inline images from the current emoticon pack on the Host side. The default is the blue whale emoticons, and the frequency and size can be adjusted in the settings, or you can upload your own ZIP pack according to the contract. It does not add additional model calls, nor does it rewrite emojis and code in ordinary body text.
Directory page: https://deepseek-harness-plugin.com/en-US/plugins/dsh-emoji/
GitHub: https://github.com/hellodigua/dsh-emoji