Preface

The official repository of DeepSeek Harness (dsh) summarizes its core philosophy as Everything is a Plugin: the interface, tools, and workspace capabilities can all be overlaid via profiles. Its tools read real native paths on the local machine and modify dependent files alongside those paths. However, web-based conversations often hit a roadblock: for security reasons, browsers typically do not expose the real filesystem path of dragged files to web pages, only providing a local file URI at most, and sometimes nothing at all.

The common outcomes are predictable: dragging a file into a regular web input box will either trigger an upload (creating a copy that breaks links to the original directory, relative references, and neighboring dependencies) or force users to manually type the absolute path, where drive letters, spaces, and UNC paths are prone to typos. The community plugin dsh-drag-and-drop fills this gap: it restores dragged files or folders to their native absolute paths on the machine running dsh, then inserts the paths into the current conversation input box. The files themselves are never uploaded, moved, or copied.

The community plugin directory is an independent site and has no official affiliation with DeepSeek / FangTian, and should not be treated as an official app store. The following content is collated after cross-verifying the directory details page, the plugin’s GitHub repository (including README.zh.md, package.json, and CHANGELOG.md), and the official DeepSeek Harness repository.

What is this

dsh-drag-and-drop is a memory-focused plugin for DeepSeek Harness’s Web UI, maintained by bill9109 under the BSD-3-Clause license, primarily written in JavaScript. The current version of the repository is 0.1.5 (consistent across package.json and CHANGELOG.md, with a release note dated 2026-08-14). The GitHub repository bill9109/dsh-drag-and-drop currently has 15 stars; the community directory收录 date is 2026-08-15.

One-sentence positioning: Drag a local file or folder to any position on the DeepSeek Harness page, and its original absolute path will be inserted into the current session input box.

It does not solve the problem of “turning files into attachments”, but rather lets the agent continue working on the original file. The directory categorizes it as a “memory” plugin, different from knowledge graphs and cross-session memory: it remembers the disk location of the file, avoiding the loss of context caused by uploading copies.

package.json declares dsh.bundle and dsh.client, making it a web-side plugin under the official profile/bundle model. No modification of dsh source code is required, and it no longer relies on the old config.yaml. The CHANGELOG 0.1.4 migrated the package name to @omdsh-dev/dsh-drag-and-drop, and the installation example in the README also uses github:omdsh-dev/dsh-drag-and-drop. The community directory lists and provides the installation command for bill9109/dsh-drag-and-drop; the installation steps below follow the original text from the directory page.

Core Features

The capabilities listed on the directory page and the repository README can be divided into three sections: drag-and-drop interaction, path formatting, and positioning strategy.

Drag-and-Drop and Input Writing

  • Drag a file to any position on the Web UI to insert its original absolute path.
  • The entire page dims and blurs during dragging, providing a visual cue that the drop is ready.
  • Supports both files and folders; when multiple items are dragged at once, each path will appear on a new line.
  • Writes to the draft via DSH’s input state service, rather than directly modifying the input box DOM.
  • A plugin toast pops up if positioning fails: it can be manually closed, auto-dismisses after 8 seconds, and the timer pauses when the mouse hovers over it.

Path Formatting and File Handling

  • Outputs native paths for macOS, Linux, and Windows.
  • Supports POSIX paths, Windows drive letter paths, and UNC network paths.
  • Never uploads, moves, copies, modifies, or deletes files.
  • Reads only metadata in most cases. Only when multiple candidates have the same name and size will a small amount of content be read to generate a sampling fingerprint; if there is still a conflict after sampling large files, the full SHA-256 will be calculated. Both positioning and fingerprinting are completed on the local machine running dsh.

Candidate Confirmation Logic

When the browser hides the original path, the plugin will not directly insert the first同名 file on the disk into the input box. The filtering order specified in the repository documentation is:
1. First filter by full file name and file size. Modification time is only used for sorting and is not treated as an identifier.
2. If only one candidate remains, use that path directly without reading the file content.
3. If multiple candidates exist, compare sampling fingerprints from the start, middle, and end of the file; if there is still a conflict after sampling large files, calculate the full SHA-256.
4. If multiple paths correspond to identical byte-for-byte copies, a path list will pop up for the user to select which one to insert.

Folders are first searched by name. If there is only one candidate, it is returned directly without traversing the directory tree in the browser; if multiple candidates with the same name exist, the sorted relative paths, item types, and file sizes are compared. For directories with identical structures, content sampling will be performed on up to 24 files selected via deterministic rules; if differentiation is still impossible, the user will be asked to choose. Directory traversal will process a maximum of 10,000 items and 32 levels, and will not follow symbolic links or Windows junctions.

How Paths Are Located

If the browser provides a local file URI, the plugin will directly convert it to the native path for the current operating system.

If the browser hides the original path, the positioning sequence is as follows (consistent between the repository README and CHANGELOG 0.1.5):
1. Current Workspace
2. Other registered Workspaces
3. Desktop, Documents, Downloads
4. Shallow scanning within three levels of each search root: direct children of the root, direct children of direct subdirectories, and direct children of the next level. CHANGELOG 0.1.5 notes that this layer is designed to catch dragged items like ~/Downloads/dump2 11/iotclaw.ndjson (two levels deep under a commonly used directory). Previously, when only direct children were scanned, the bounded recursion would exhaust the 20,000-item budget in a large Downloads tree, eventually popping up a “failed to locate original path” prompt.
5. Operating system file index
6. Bounded platform directory search

System indexing is platform-specific:
- macOS: Spotlight
- Linux: plocate first, then locate
- Windows: Everything CLI first, then PowerShell

When the index has no candidates, Linux will also search the user’s home directory and mount points under /mnt and /media. Windows will search the user directory and available fixed disks. Each layer first checks the direct children of the search root, then queries the index within that range, before finally performing recursion.

Searches have hard limits to avoid scanning entire disks:
- Single external index command timeout of 3 seconds
- Maximum of 100 candidate paths retained
- Shallow three-level scan: maximum 4,096 direct subdirectories per search root
- Maximum 20,000 directory items accessed per recursive search root
- Unreadable directories and files will be ignored

Installation and Activation

The installation command provided on the community directory page is:

dsh plugin add github:bill9109/dsh-drag-and-drop

This is the original text from the directory page; do not construct the GitHub address manually based on the plugin name. The repository README also notes that this is a Web UI bundle that should be installed into the web profile, and the official dsh documentation uses the format dsh plugin --profile <profile> add github:owner/repo. For a more reliable installation to the web interface, the correct command is:

dsh plugin --profile web add github:bill9109/dsh-drag-and-drop

You can also install from a local checkout:

dsh plugin --profile web add /path/to/dsh-drag-and-drop

The repository has already committed the build artifacts (lib/), so no additional build steps are needed after installation. The engines field in package.json requires Node.js ^20.0.0 || >=22.0.0.

The directory page reminds users: For reproducible installations, pin the commit hash. The latest commit on the current main branch is 09088d6890866eda57adee6864cd2fbf8281f679 (dated 2026-08-14, corresponding to the three-level shallow positioning in 0.1.5), which can be written as:

dsh plugin --profile web add github:bill9109/dsh-drag-and-drop#09088d6890866eda57adee6864cd2fbf8281f679

After installation, restart DSH Web UI in your usual way, then refresh your browser. The plugin will appear in the browser boot data __DSH_BOOT__, and the client bundle will load with the new page. Without restarting and performing a hard refresh, no drag-and-drop prompt will appear on the page.

Upgrading (from the README):

dsh plugin --profile web update github:bill9109/dsh-drag-and-drop

If you installed from omdsh-dev following the README example, replace the repository name with omdsh-dev/dsh-drag-and-drop in the command above. For local path installations, run the add command again on the updated checkout.

Uninstallation requires the package name. After CHANGELOG 0.1.4, the package name is @omdsh-dev/dsh-drag-and-drop:

dsh plugin --profile web remove @omdsh-dev/dsh-drag-and-drop

This command will remove the package from the profile and dsh.profile.bundles. A restart of the Web UI and a hard browser refresh are required after uninstallation as well.

Typical Usage

The repository lists only three steps, with no additional configuration options.
1. Drag a file or folder from Finder, Linux file manager, or Windows File Explorer to any position on the DSH Web UI.
2. Release the mouse only after the full-page drag prompt appears. The plugin will write the located original absolute path into the current session input box.
3. When multiple items are dragged at once, each path will appear on a new line in the input box, which can be directly sent to the agent to read, run, or modify those paths.

The Linux side requires the file manager to provide text/uri-list. The macOS documentation supports Finder drag-and-drop and Spotlight, and notes that the plugin has been validated on Chrome for macOS. Windows supports drive letter paths and UNC paths; when the browser hides the path, it will prioritize the Everything CLI, and fall back to PowerShell to search the user directory and fixed disks if Everything is not available.

The troubleshooting table in the README can be referenced directly:
| Phenomenon | Solution |
| — | — |
| No response after dragging | Drag again and confirm that the full-page prompt appears. Use dsh --profile web --dump-config | grep drag-and-drop to confirm that the bundle is included in the profile, and verify that you have restarted the Web UI and performed a hard refresh after installation |
| Incorrect path when multiple identical copies exist | Candidates are first filtered by full file name and size, and content sampling is only performed between remaining files; if there are still identical copies, a selection list will pop up to let you specify the path |
| Slow positioning on large disks | Install plocate on Linux, install Everything and its command-line tools on Windows, and尽量 place files in Workspace, Desktop, Documents, or Downloads |
| Failed to drag folders on macOS / Linux | Folders are matched by name against Workspaces and common directories; if the browser hides the path, folders outside all searchable roots cannot be located and need to be moved into a Workspace or have the system index enabled |
| Plugin not loading after installation | Restart the Web UI and perform a hard refresh. The client bundle only loads on new pages after the plugin is added to __DSH_BOOT__ |

Applicable Scenarios and Notes

This plugin is suitable for users who want to hand local files to an agent in the Web UI without uploading copies, such as:
- Dragging source code, logs, or configuration files from a workspace into a conversation to let tools read, modify, or act on them at their original paths
- Dragging multiple related files at once to get their paths listed line-by-line
- Needing UNC network paths on Windows, or POSIX absolute paths on Linux / macOS

Situations where it is not suitable, or where you need to clarify the limitations:
- Using dsh only in a TUI / profile without a Web UI: this is a web-side client bundle, and installing it to the wrong profile will not show the drag-and-drop layer.
- Files are completely outside the Workspace, common directories, and system index, and the browser hides the path. Folders are particularly likely to fail to locate.
- Multiple identical byte-for-byte copies exist on the disk: the plugin will not guess and will ask you to choose.
- Misunderstanding “memory” as a cross-session knowledge graph: it does not extract triples or compress conversation history.

Before installing, you should review the repository source code and the BSD-3-Clause license. The directory page clearly states: The plugin runs with the permissions of the current dsh process, and code may be executed during installation. This aligns with the official documentation’s reminder for git-based installations: allowing builds or installations equals allowing the package’s code to run on your machine, outside the agent sandbox. Do not install untrusted repositories; for reproducible environments, pin the commit hash to avoid subsequent pushes silently modifying the runtime code.

There are also derivative repositories in the community with similar names but different interactions (for example, turning dragged items into chips above the input box instead of inserting path text into the draft). Before selecting a plugin, confirm that the GitHub address is bill9109/dsh-drag-and-drop, do not only search by the plugin name.

Summary

dsh-drag-and-drop does one narrow thing: when the browser refuses to expose the real path, it restores dragged files to their absolute native paths on the machine running dsh, then inserts those paths into the current conversation. It never uploads or copies files, prioritizes searching Workspaces and common directories first, and falls back to bounded indexing when needed. For Web UI workflows that rely on real filesystem paths, this is far less likely to break context than manually typing paths or uploading copies.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-drag-and-drop/

GitHub: https://github.com/bill9109/dsh-drag-and-drop