DeepSeek Harness Plugin

LWLAymh/dsh-tool-emoji

Stars ★ 1 Category UI Enhancements Added 2026-08-30

Replace tool-card leading icons with emoji while preserving the original cards.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:LWLAymh/dsh-tool-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

中文

A DeepSeek Harness Web plugin that replaces the simple leading icons in tool cards with emoji, without replacing or removing any of the original card content.

Mapping

Tool Emoji
think (reasoning row) 🤔
read / web_fetch / grep / glob / web_search 🧐
pwsh 👨‍💻
edit / write / str_replace_editor ☝️🤓
Any of the above cards in the error state 😫

Screenshots

Installation

# from a local checkout
dsh plugin --profile web add file:./dsh-tool-emoji

# or from GitHub
dsh plugin --profile web add git+https://github.com/LWLAymh/dsh-tool-emoji.git

Then restart the web profile:

dsh --profile web

The plugin does not hot-reload into an already-running Web process.

Uninstall:

dsh plugin --profile web remove dsh-tool-emoji

How it works

  • This plugin does not register tool.call.toolview, so it does not take over the original tool cards.
  • It only injects a small global stylesheet:
    • hides the built-in leading SVG icon;
    • renders an emoji in the same leading cell with ::before;
    • preserves the title, summary, diff, terminal output, expand/collapse behavior, and all other card details.
  • When a mapped card is in the error state, the leading error dot is replaced with 😫 while the rest of the card stays intact.

Settings / Customization

In the DSH Settings page, open Tool emoji to customize every icon without editing code:

  • Enable / disable each tool icon independently.
  • Enable / disable the whole plugin from the master switch.
  • Custom emoji — type any emoji/text into the input field.
  • Upload an image — choose a local PNG/JPEG/GIF/WebP/BMP to use as the icon (kept in localStorage, max 1MB per image; SVG is not accepted).
  • Remove an uploaded image to fall back to the emoji text.
  • Reset one tool or reset all back to defaults.

Changes take effect immediately on the chat page and persist after refresh.

dsh-edit-guardian compatibility

If you also use dsh-edit-guardian, it replaces the built-in rows for edit / str_replace_editor / pwsh with its own custom DOM (dshg_row).

To make the emoji apply to those custom rows too:

  1. Use a dsh-edit-guardian build that exposes data-tool on .dshg_row (the local dev version already does);
  2. Reinstall dsh-edit-guardian using the same source you installed it from, then reinstall this plugin;
  3. Restart the Web profile.

If dsh-edit-guardian does not have the data-tool attributes, the emoji will not be applied to edit / pwsh rows.

Customization

Edit the CSS in lib/client.js to add or change tools and emoji.

For example, to add bash:

[data-variant="bash"] > span:first-child > span:first-child svg:not([data-state]) { display:none; }
[data-variant="bash"] > span:first-child::before { content:"💻"; font-size:14px; line-height:18px; }

Notes

  • The selectors rely on official source-level data attributes:
    • data-tool="edit" / data-tool="str_replace_editor" / data-tool="pwsh"
    • data-variant="think" / data-variant="search" / data-variant="read"
    • [data-disclosure-row] > span:first-child
  • If a future DSH version changes these DOM structures, the CSS selectors may need to be updated.
  • The plugin is Web-profile oriented; TUI/headless profiles have no leading-icon UI surface.

License

MIT

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.