Preface

When running long tasks in the web UI with DeepSeek Harness (command name dsh), the main interface quickly piles up thought streams, tool outputs, and pending approval requests. What you actually need to confirm at a glance are often just a few things: whether the agent is thinking, running a tool, or stuck waiting for your approval; whether this round ended in success, failure, truncation, or blocked goals. These signals are scattered across the session timeline and native input area, and if you switch to another window and come back, you have to search for them all over again.

DeepSeek Harness is open-sourced by DeepSeek AI, with the repository at deepseek-ai/deepseek-harness. The official page describes its architecture as Everything is a Plugin: models, tools, skills, sessions, sandboxes, scheduling, and the UI can all be added or removed via profiles without modifying the harness source code. It is still a developer preview version, and the APIs are subject to change. The community site DeepSeek Harness Plugin Repository is used to discover and compare plugins, and it has no official affiliation with DeepSeek / Fang Intelligence, so it should not be treated as an official app store. Follow the original instructions on the directory page for installation commands.

There is a UI enhancement plugin dsh-dynamic-island in the directory. It consolidates the aforementioned status into a glassmorphism dynamic island on the edge of the web GUI: the core pulses when thinking, the edge flashes when running a tool, and it expands to show “Approve / Decline” when waiting for approval. This article is collated after cross-checking the directory details page, the GitHub repository (including Chinese and English READMEs, package.json, docs/integration.md, and the MIT license), the npm page, and official DeepSeek Harness materials.

What is this

dsh-dynamic-island is a UI enhancement plugin maintained by ylifeonlyonce (GitHub username YLifeOnlyOnce). Its source code is hosted at YLifeOnlyOnce/dsh-dynamic-island, licensed under MIT, and its primary language is JavaScript. As of August 18, 2026, both the directory page and GitHub repository had 3 stars. The directory included this plugin on 2026-08-15, and the last push was made on 2026-08-14. The npm package name is also dsh-dynamic-island, with the current version 0.3.5 released on 2026-08-14.

It solves the problem of “unclear agent internal thoughts”: thinking, tool calls, approvals, exceptions, and completions are all stored in Harness’s session snapshots and events, and this plugin maps them into a lightweight floating surface on the edge of the screen. Both the directory page and the README emphasize: it is not a desktop pet unrelated to the task, every shape change is derived from the real Harness status.

It is important to clarify its positioning first. The repository README marks the project status as High-Fidelity Design Prototype: the same repository contains both a Vite demo playground and an installable dual-sided client plugin. The description in package.json also states design prototype + plugin in one repo. The roadmap item “Real GUI integration (verify with live instance + connect retry / continue / unblock / approve to real remote)” is still unchecked. The capabilities introduced below are based on the repository documentation and stub tests, do not assume they are all fully implemented in the production web GUI.

Core Features

The plugin hooks into the shell.overlay overlay slot of the web GUI without modifying the apps/web source code. It is a dual-sided npm package: the dsh.client export declares the browser side (exports["./client"] points to the built lib/client.js), while the Node.js side has an empty apply() function, only to make the package a valid loader entry. The dsh.client.platform field in package.json is set to web, meaning it is targeted at the web UI, not headless / TUI.

The browser side subscribes to the current session snapshot and projections (goal, todos, tokenUsage, contextPressure, permissions), generates the island model via src/plugin/protocol.js, and then renders it using the same React component set shared with the demo. Instead of directly dumping the raw event stream onto the screen, the README categorizes Harness signals into eight moods:

Mood Corresponding Signals (Repository Docs) Rough Appearance in UI
Idle agent/status: idle Quiet dot
Thinking Running, step start, reasoning delta Pulsing core, with a capsule showing current task and step
Working tool/call to corresponding tool/result Teal pulse, showing tool name and progress
Approval Pending approval in input area Warm coral edge, expands to show “Approve / Decline”
Complete Successful turn/end and usage metrics Result receipt
Alert Tool error, request error, failed turn/end Failure summary and fix entry
Blocked turn/end {blocked} Goal paused, waiting for resolution
Max Tokens turn/end {max-tokens} Output truncated, can resume running

On top of these eight states, there is a set of payloads: streaming preview lines (thinking and main content in different colors), tool command cards, result receipts, goal progress rings, three-state task lists, and model badges (provider · model). In the demo, the island can be dragged and its position is remembered; press ⌘K / Ctrl+K to open the command panel; press Esc to collapse it. According to the repository documentation, the approval feature is a mirrored entry of the native input area, it does not implement a separate state machine, nor does it make decisions on behalf of Harness.

Visually, the README describes it as handwritten CSS Liquid Glass: layered transparency, elastic shapes, animated light, and no additional UI component libraries introduced. The so-called “zero additional dependencies” means no extra component framework is added at runtime, and peer dependencies remain React 18 or 19. Styles are placed in Shadow DOM for two-way isolation from the native interface. For accessibility, the documentation states that it respects prefers-reduced-motion, does not rely solely on color to convey status, and the approval buttons are real clickable buttons.

docs/integration.md provides more specific details on “what has been connected”, and you should refer to it when writing, rather than treating all clickable buttons in the demo as fully connected to the live instance:
1. Display side: idle / thinking / working / approval moods, approval copy, completion and exception end reasons, streaming preview (limited by snapshot batch granularity), todo list, goal ring, token usage and receipt duration, stop/cancel, unblock. These are documented as having been connected per the contract and tested with stubs.
2. Remaining gaps: tools stuck in running only show the name, full parameters and exit codes require subscribing to session logs, and live-bridge has not yet subscribed to this data; the files / checks section of the result receipt is not currently projected; the retry / continue session.prompt body has not received the most recent user message in the queue; the recent completed receipt stack has not been implemented.
3. The final validation is real GUI integration. The documentation notes: stub tests cannot replace live verification of currentProvideInfo, snapshots, and projections in the browser.

Installation and Activation

The installation command given on the community directory page, run in the DeepSeek Harness terminal:

dsh plugin add github:ylifeonlyonce/dsh-dynamic-island

This is the original text from the directory page, do not modify the owner/repo combination on your own. For reproducible installation, the directory page recommends appending a fixed commit hash:

dsh plugin add github:ylifeonlyonce/dsh-dynamic-island#commit

Replace commit with the actual hash. As of August 18, 2026, when checking the main branch of this repository, the latest commit was d92f9bc83d20949b5f1beec1fd0051f9386a8b63 (corresponding to npm version 0.3.5). The hash will change as the repository updates, so you should confirm on GitHub before installing.

The repository README also includes installation methods targeted at the web profile, and installation from npm with the same package name:

dsh plugin --profile web add dsh-dynamic-island
dsh --profile web

For local installation from source, first run npm run build:plugin to generate lib/client.js, then execute dsh plugin --profile web add /path/to/this-repo. After installation, you need to restart the web profile: the documentation states that the package metadata cache for client modules will not automatically expire, and you must restart after changing the plugin set. After restarting, you can use the following command to check if the plugin appears in the configuration tree:

dsh --profile web --dump-config | grep dynamic-island

The directory page includes a security note applicable to all plugins: plugins run with the permissions of the current dsh process, and may execute code during installation. Please review the source code repository and license before installing.

Typical Usage

If you have not yet installed it into Harness, the repository provides a standalone demo to preview all eight moods and interactions without going through the real GUI:

git clone https://github.com/YLifeOnlyOnce/dsh-dynamic-island.git
cd dsh-dynamic-island
npm install
npm run dev

Open the address printed by Vite, there is a Dynamic Island Demo bar at the bottom. You can manually switch moods, or click “▶ Auto Demo” to walk through the sequence: idle → thinking → working → approval (auto-approve) → complete. The reproducible operations listed in the repository include:
1. Click “Approve / Decline” in the approval state to see if the island synchronizes the result immediately.
2. Click “View Process” to expand the in-island activity stream; the tool cards in the demo include exit codes, duration, and one-click copy commands.
3. Click “List” to expand the three-state task list, and the goal progress ring shows the goal round.
4. Click “Retry” in the alert state, “Unblock” in the blocked state, and “Continue” in the max-tokens state. Stop operations are handed over to the native Harness UI per the documentation.
5. Drag the island by holding its empty space to another position, and the position will be retained after refresh; press Esc to collapse it at any time.

After installing into the web profile and restarting, the documentation expects the island to appear in the upper-right corner overlay of the workspace, draggable with position memory. The model badge displays the current provider and model. These are the repository’s descriptions of “what you should see after installation”; real GUI integration is still on the roadmap, so if the overlay does not appear or the buttons have no feedback, you should refer to the gap list in section 7 of docs/integration.md, rather than assuming you installed it incorrectly.

Applicable Scenarios and Notes

It is suitable for users who are already using dsh --profile web and want to consolidate agent status into an edge floating surface, as well as developers who want to design UI plugins by referencing Harness signals: the injection point, dual-sided package structure, and protocol adaptation layer are all documented in the repository. It is not suitable for use as a production-stable status bar, nor for headless / pure terminal profiles, as dsh.client.platform is explicitly set to web.

It is recommended to remember these boundaries before use:
1. DeepSeek Harness itself is a developer preview, and the internal @deepseek-ai/* client packages do not have public SDK version commitments. Third-party UI plugins rely on the in-repository contract, and any upstream changes will require corresponding updates to the island’s bridge layer.
2. The author himself marks the project as a high-fidelity prototype. The display side is largely aligned at the stub test level, and the action side is estimated to be about 70% complete per the documentation: cancel, approval feedback, and unblock have been connected; retry and continue are still pending connection. The files / checks receipt and process timeline are also not yet implemented.
3. The operations on the island are designed as mirrors of the native interface, and do not replace the composer, input bar, or top bar. Approvals share the same feedback channel with the native ApprovalPanel, and whichever submits feedback first will settle the request.
4. The plugin runs with the permissions of the current dsh process. Read the GitHub source code and MIT license before installing, and fix the commit hash for reproducible installations, do not just trust the one-sentence introduction on the directory page.

Summary

dsh-dynamic-island consolidates the scattered thoughts, tools, approvals, and end reasons in the DeepSeek Harness web UI into a Liquid Glass-style status island. The installation entry on the community directory is dsh plugin add github:ylifeonlyonce/dsh-dynamic-island; the repository provides both a Vite demo and web profile installation method for npm version 0.3.5. It is still an installable design prototype, and real GUI integration is still on the roadmap. If you want to try it out, first review the source code and license, then install it using the command from the directory page, and verify the live behavior against the gap list in the repository’s docs/integration.md.

Directory page: https://deepseek-harness-plugin.com/en-US/plugins/dsh-dynamic-island/

GitHub: https://github.com/YLifeOnlyOnce/dsh-dynamic-island