Introduction¶
The default tool-call card display in DeepSeek Harness (DSH) is relatively generic. When handling complex tool chains (such as MCP calls, sub-agent execution, and streaming parameter generation), the information density is low and the presentation can feel visually fragmented. This plugin aims to render these outputs uniformly as a compact timeline: a continuous color rail on the left and a GitHub PR-like code-change view on the right, improving the debugging and interaction experience.
Plugin Introduction¶
dsh-better-tool-ui is a client-side plugin maintained by GeekRicardo. It takes over the rendering logic for DSH built-in tools, MCP tools, and sub-calls, aggregating originally scattered cards into a compact timeline view. The plugin supports 28 built-in tools, is compatible with the MCP protocol, and optimizes streaming output and the experience on older DSH versions.
Core Features¶
-
Built-in Tool Rendering
Takes over thetool.call.toolviewslot, covering 28 keys (including bash/pwsh, read, write/edit, grep/glob, web_search/web_fetch, todo_write, job_output, subagent/send_message, skill, workflow, ask_user_question, etc.).
The rendering style adopts a GitHub PR-style code-change view and a compact timeline:
- bash/pwsh: dark terminal block, displaying the full command and exit code.
- read: code block with line numbers.
- write/edit: file name header + badge + diff view (red/green background).
- job_output: terminal block + colored status bar.
- ask_user_question: paginated question panel, with options annotated in the same style as DSH composer. -
MCP Tool Support
Supports rendering MCP tool rows, including automatic registration, segmented display of arguments/results, and error handling.
- Arguments are displayed as a key/value grid; results are routed by content (JSON lightly highlighted, images/audio/resource placeholders rendered as chips).
- When a call fails, a unified red error block is displayed. -
Sub-Call Handling
For tools inside subagents/workflows, supports name normalization (such as Task -> subagent) and fallback adoption.
- Does not repeatedly render tree structure; uses style indentation for alignment only.
- Adapts to driver-side names (such asBash/Readwhen using theclaude-in-dshdriver), ensuring rendering consistency. -
Special Tools and Styling
- Goal family:create_goal,get_goal, andupdate_goalare rendered as colored callout blocks.
- Thinking behavior: rendered with a purple rail (#8c93f8).
- Spacing and interaction: consecutive tool rows/steps are placed 2px apart with tight spacing; Bash expansion automatically lingers for at least 2 seconds to avoid flickering from sub-second commands. -
Streaming Preview
Supports streaming tool row previews and is compatible with older DSHconversation.input.dock. During parameter streaming, a “Generating…” row is displayed in the message stream and automatically yields once the formal card is rendered.
Installation and Enabling¶
Use the official installation script:
curl -fsSL https://raw.githubusercontent.com/GeekRicardo/dsh-better-tool-ui/main/install.sh | bash
After installation, restart DSH Web and hard refresh (Cmd/Ctrl+Shift+R) for the changes to take effect.
Development and Maintenance¶
After modifying code, run the following command in the plugin directory to update:
cd ~/.dsh/profiles/web && pnpm up dsh-better-tool-ui
Notes¶
- Version changes: The early version name was
dsh-hebbian-rows; it has been renamed todsh-better-tool-uistarting from v2. - Compatibility: Compatible with older DSH (0.1.0-rc.5 and earlier), where streaming rows appear from
conversation.input.dock; newer DSH usesconversation.chat.streamingCall. - Environment requirements: Node >= 20 is required.
- Capability scope: Web client only; no host capabilities.
- Theme adaptation: Colors use DSH theme tokens (
--dsw-alias-*) and support automatic light/dark theme following.