Automatically add emojis to AI replies.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-emoji
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:hellodigua/dsh-emoji
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
English | 简体中文
Add switchable, customizable inline emoji and standalone stickers to DeepSeek Harness responses.

Preview

Installation
Add the plugin to the Web Profile with the DSH CLI, then restart the Web Host:
dsh plugin --profile web add dsh-emoji
To try a prerelease, replace the package name in the installation command with dsh-emoji@beta. A plain npm install dsh-emoji only adds the package to the current Node.js project; it does not enable the DSH plugin.
How it works
- When the AI wants an emotional or decorative reaction, it chooses directly from 42 allowed Unicode emoji, such as
😊. They resolve to 40 stable semantic keys, and the Host converts the chosen character into an image from the active emoji pack without another model call. - Built-in and uploaded packs share 40 stable semantic keys, can be switched at any time, and support four display sizes.
- Rewriting applies only to the 40 canonical Unicode emoji, the common aliases
😄and🙂, and this plugin's images. Other Unicode emoji, code, links, double-colon text, and ordinary Markdown images are left unchanged. The program never guesses the reply's emotion or inserts a fallback image. Reply text must separate multiple plugin emoji, while the same emoji may repeat later.
Adjusting emoji frequency
After installation and a Web Host restart, open Plugins → dsh-emoji in the sidebar:
- Off: do not use emoji.
- Smart: use emoji only when it meaningfully helps express emotion, up to 3 per turn. This is the default.
- Frequent: include one fitting custom emoji in every conversational reply and place it after the sentence or short paragraph whose emotion it best matches, up to 4 per turn.
You can also choose an emoji pack, adjust its display size, or use Additional prompt to control emoji selection, tone, and usage. Changes apply to the next reply without a restart. The model is responsible for following the selected frequency policy.
Uploading your own emoji pack
Click Upload ZIP in the same settings card. After upload, select the pack and save; the next model call uses it without a Host restart. A custom pack implements the same 40 stable semantic keys as the built-in pack. The AI keeps using the same allowed Unicode emoji while the Host changes only the image.
The ZIP may contain these files directly or inside one top-level directory:
my-whale.zip
├── pack.json
└── images/
├── happy.png
├── sad.png
├── thinking.png
├── celebrate.png
└── ...the remaining canonical keys
The optional displayMode field controls presentation: omit it or use "inline" for inline emoji, or use "block" for standalone stickers. For block packs, the AI is instructed to place each emoji in its own paragraph with blank lines before and after it, and the Web client displays the sticker on a separate line. Standalone stickers default to 160px, with 120 / 160 / 200 / 240px options in settings. Inline and standalone sizes are saved separately. Switching packs does not change the presentation mode of historical replies.
Example pack.json for a standalone sticker pack:
{
"schemaVersion": 1,
"keySet": "dsh-emoji-core@1",
"id": "my-whale",
"name": "My Whale Emoji",
"version": "1.0.0",
"displayMode": "block"
}
schemaVersion identifies the technical ZIP format, while keySet identifies the semantic set implemented by the images. Uploaded packs must currently declare dsh-emoji-core@1. See the core semantic contract for the normative meaning, visual guidance, and boundaries of every key.
The 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 must have exactly one matching .png. IDs use lowercase letters, digits, and hyphens; versions use SemVer. Content at one id@version is immutable, so changes to assets or displayMode require a new version. Limits are 20 MiB per ZIP, 80 MiB expanded, 2 MiB per file, and 512 pixels per image dimension. Path traversal, extra files, missing keys, unknown keySet values, spoofed formats, and conflicting content are rejected.
User packs live under $DSH_HOME/emoji-packs/ (default ~/.dsh/emoji-packs/), while Settings stores only the active id@version. Remove hides a pack from the selector but intentionally retains its immutable bytes for historical messages. Uploading the exact same ZIP restores that version.
Compatibility
Supports DSH versions admitted by ^0.1.7-rc.2 || ^0.2.0-rc.2, with Node.js ^22.19.0 || >=24. Development pins the exact DSH 0.2.0-rc.2 type graph; the Web Profile supplies the shared runtime. Full runtime acceptance status is recorded in package.json under dsh.compatibility.dshReleases. Settings persist in the active Profile's cordis.patch.yml; image packs live in DSH Home.
Local development
Requires Node.js ^22.19.0 || >=24 and pnpm 11.
corepack pnpm install
corepack pnpm typecheck
corepack pnpm test
corepack pnpm build
npm pack --dry-run
Links
Available on the dshfind.com DSH plugin marketplace.
Links
More in this category
PC2005-cloud/dsh-pet#dsh-pet★ 5347
Desktop pet for the DSH Web UI on Windows, macOS and Linux: 106 transparent animations in the browser overlay or a transparent always-on-top desktop window, throw-and-bounce drag physics with squash and particle scoring, a work-status bubble driven by live session events, self-talk and chat with persistent memory, balance display, meme-image bubbles, multiple pets on screen, and drop-in custom animations and pet packs.
Alterssss/dsh-bili-whale★ 862
A Bilibili companion that keeps its own schedule. A 60-second tick in the plugin host wakes a dedicated agent session at a random moment inside the configured time windows (opting out of a day is a configurable chance), then hands it a bundled CLI of 38 subcommands — feed, subtitles, danmaku, comments, ffmpeg frame grabs, and two diaries. Shares at most N items a day by commenting on them and @-mentioning the owner (default 3, enforced from a written quota log, and it stops on rate-limit or captcha signals). Also polls comment replies, direct messages and live-room danmaku; replies to anyone but the owner are queued for approval in Settings. Settings → 养鱼 writes ~/.dsh/bili-whale.config.json; cookies live separately in ~/.bili-ai/credentials.json and are never echoed back. The HTTP routes are loopback-only behind DSH's trust fence. Needs Node 18+ and ffmpeg on PATH for frame extraction.
Nagi-ovo/dsh-ads★ 707
Parody ads in 2005-Chinese-web style: sidebar banners, in-chat feeds, corner popups, and a close button whose hit area is smaller than it looks. All fictional.
yyh-001/dsh-meme★ 488
Chat meme stickers: text-only send, mood auto-send, QQ/WeChat-style picker, auto-learn, custom packs.
vlln/whale-girl★ 400
Desktop pet (QQ-pet style): floats in the corner, draggable, feedable, playable.
a86582751/dsh-nexttavern★ 218
NextTavern is a long-form roleplay plugin for DeepSeek Harness 0.1.7-rc.2 Web, with character-card import and creation, worldlines, worldbooks, layered long-term memory, keyword/semantic/hybrid retrieval, character agents, and card or novel export. SillyTavern character-card import is supported; v0.2.9 fixes distribution and installation.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.