Preface¶
DeepSeek Harness (dsh for short) is an open-source agent runtime developed by DeepSeek, currently in developer preview. The official documentation states its design principle directly: Everything is a plugin — model adapters, tools, skills, conversations, sandboxes, storage, scheduling, and interfaces are all implemented as replaceable plugins. Installing a plugin is equivalent to adding a new capability to the current agent pipeline without modifying the Harness source code.
Many community-maintained plugin directories have been created to collect such plugins. The DeepSeek Harness Plugin Repository used in this article is a community-run site and has no official affiliation with DeepSeek or FunPlus; the official discovery entry still uses the GitHub topic dsh-plugin. You can copy the installation commands from the directory, but you should still check the source code and license agreement by opening the plugin repository yourself.
A quick problem arises when actually using dsh for development: many base models only support plain text input, and cannot recognize screenshots, error images, or UI interfaces. Even if you paste the image path into the conversation, the model can only guess the content. dsh-vision takes a restrained approach: it does not modify the base model, but offloads the image recognition task to a self-configured external vision API, then injects the recognized text back into the current conversation or agent tool results. Below is an introduction based on cross-verified content from the repository README, package.json, and the directory page.
What it is¶
dsh-vision is a tool and capability plugin for DeepSeek Harness, maintained by linenxi-ctrl, licensed under MIT. The npm package name is @linenxi-ctrl/dsh-vision, current version v0.2.6, and the primary language is JavaScript. The README indicates compatibility with DeepSeek Harness 0.1.0-rc.6, and supports Windows, macOS, and Linux platforms.
One-sentence positioning: It adds a configurable image recognition channel to Harness conversations that originally had no visual input support, allowing you to set the API address, key, model name, and prompt words. It was added to the directory page on 2026-08-15. As of 2026-08-18, both the directory page and the GitHub repository have 12 stars.
There are other GitHub repositories with the same name (such as oil-oil/dsh-vision), with different capabilities and installation commands. This article only covers the linenxi-ctrl/dsh-vision repository.
Core Features¶
The capabilities listed in the repository README and directory details are consistent and can be divided into four sections.
-
Web Configuration Button and Panel. After enabling the client plugin, a draggable circular DeepSeek whale button will appear in the bottom right corner of the page. Clicking it opens a panel where you can fill in the image recognition API address, key, model name, recognition prompt (skill), HTTP proxy, and timeout. The key is treated as a secret, and the panel will not return the original key when reading the configuration, only reporting whether it has been configured.
-
Send Image for Recognition and Auto-Reply. After opening a conversation, click “Send Image” on the panel to select an image. The plugin converts the image to base64 and sends it to the host-side recognition service via the same-origin interface
POST /api/vision/recognize. After recognition is complete, the text will be automatically injected into the current conversation as a message, and the base model will continue to respond based on this text without manual copy-pasting. During recognition, a notification saying “External model is recognizing the image” will be displayed in the top right corner. -
Model Takes Screenshots and Performs Recognition. The agent plane registers two tools:
screenshot(for taking screenshots) andrecognize_image(for image recognition), and injects a system prompt telling the model to “take a screenshot first, then pass the path to the recognition tool”. Simply tell the model “Check the error on my current screen”, and according to the README usage, the model will follow the path “Screenshot → Recognize → Continue based on text”. Therecognize_imagetool can also directly accept image paths dragged by the user or existing images on the disk. -
Auto-Adapt to Image Recognition API Protocols. Four protocols are built-in: OpenAI Chat Completions, OpenAI Responses, Anthropic Messages, and Google Gemini. The default is
protocol=auto, which detects the protocol based on theapiBase; if it cannot be recognized, it falls back toopenai-chat. Acustomtemplate protocol is also provided, which usesrequestTemplateandresponsePathto connect to long-tail APIs.
Image recognition requests are sent on the host (Node) side, not directly connected from the browser, so they are not restricted by CORS. The maximum image size is hardcoded to 20MB after decoding in the source code.
Installation and Activation¶
The installation command given on the directory page is:
dsh plugin add github:linenxi-ctrl/dsh-vision
The plugin will run with the permissions of the current dsh process, and may execute code during installation. You should check the source code repository and license agreement before installing. For reproducible installations, the directory page recommends pinning the commit hash. The latest commit on the current main branch is 50f6ba065e8cf42c4ecc5a06c4e96dc2d5c69b11 (corresponding to v0.2.6):
dsh plugin add github:linenxi-ctrl/dsh-vision#50f6ba065e8cf42c4ecc5a06c4e96dc2d5c69b11
The repository README also provides an npm installation method (requires Node.js 18+ and pnpm), which is the recommended path marked by the author. This installs the plugin into the web profile and automatically merges cordis.patch.yml into the profile layer via DSH:
dsh plugin --profile web add @linenxi-ctrl/dsh-vision
# Optional: Configure the agent tool plane to allow the model to take screenshots and recognize images
node ~/.dsh/profiles/web/node_modules/@linenxi-ctrl/dsh-vision/install.mjs
If you do not have pnpm installed on your machine, you can also download the zip package from Releases. Double-click install.bat on Windows, or run bash install.sh on macOS/Linux. If the script does not detect Node.js, it will try to pull a portable version from npmmirror, Huawei Cloud, or Tencent Cloud without requiring administrator privileges. After installation, close and re-run dsh web.
The uninstallation commands correspond to uninstall.bat / uninstall.sh / uninstall.mjs. If you installed via npm, the README requires first running:
dsh plugin --profile web remove @linenxi-ctrl/dsh-vision
Then run the uninstallation script to clear preset and setting residuals.
Configuration¶
Click the whale button in the bottom right corner, or directly modify the vision section in $DSH_HOME/settings.yaml. The fields and default values are subject to the README:
| Field | Default Value | Description |
|---|---|---|
apiBase |
https://api.openai.com/v1 |
Base path of the recognition model API |
apiKey |
Empty | API key |
model |
gpt-4o-mini |
Model name |
protocol |
auto |
auto / openai-chat / openai-responses / anthropic / gemini / custom |
prompt |
Built-in recognition skill from the repository | Customizable |
proxy |
Empty | Example: http://127.0.0.1:65532 |
timeoutMs |
60000 |
Single recognition timeout (milliseconds) |
requestTemplate |
Empty | Only for custom: JSON template of the request body |
responsePath |
Empty | Only for custom: Dot notation path to extract text from the response |
apiBase should be filled to the protocol-specific base path. The corresponding rules in the README are: fill in /v1 for OpenAI, https://api.anthropic.com for Anthropic, and /v1beta for Gemini. A common mistake when filling in incorrectly is getting an HTTP 404 error.
Placeholders for the custom protocol must be written bare without quotes, supporting {{model}}, {{prompt}}, {{image}}, {{dataUrl}}, and {{mime}}. The default authentication method is Authorization: Bearer; interfaces that require special authentication headers are not yet supported as stated in the README.
Typical Usage¶
User selects an image for recognition. First open a conversation, confirm that the whale button appears in the bottom right corner, then click “Send Image”. If no conversation is open, clicking send will have no effect. The recognized text will be automatically added to the current conversation, and the base model will respond based on the text afterwards.
Model views the screen. Tell the agent “Check the error on my current screen”. The prerequisite is that tool.js has been added to the current preset’s agent.cordis.yml, and the conversation uses this preset. After installing via npm, you need to run the above install.mjs again; the one-click zip installation will create an agent preset named vision and set it as the default.
The screenshot implementation varies by platform:
- Windows: PowerShell + System.Drawing
- macOS: screencapture
- Linux: import from ImageMagick
If the screenshot fails on Linux, first confirm that ImageMagick is installed on your machine.
Applicable Scenarios and Notes¶
It is suitable for users who are already using the DeepSeek Harness Web UI, whose base models cannot view images, and who have existing vision APIs (OpenAI, Anthropic, Gemini, or transit services compatible with these protocols). Typical requirements include converting error screenshots, terminal outputs, or web page interfaces into text and passing them to coding agents, or allowing the model to capture the current screen and continue troubleshooting.
It is not a built-in free vision model. Without an available recognition API key, the plugin only provides a channel and will not “gain vision” on its own. It also does not replace other visual plugins in the directory (such as modlens, dsh-vision-router); those projects have different link chains and output formats, so do not install or mix them by name.
It is recommended to verify the following points before use:
1. The plugin runs with the permissions of the current dsh process, can capture the main screen and read local images you submit to it, and will send the images to the external API you configured. Check the source code and MIT license before installing, and only install plugins from sources you trust.
2. Harness is still in developer preview, and this plugin’s peerDependencies are pinned to @deepseek-ai/dsh-* ^0.1.0-rc.6 and @deepseek-ai/cordis ^4.0.1. If the versions do not match, first check the repository Issues and Releases instead of assuming forward compatibility.
3. Earlier versions 0.2.4 and earlier had known issues recorded in the release notes, such as BOM errors in cordis.patch.yml and client registration ID issues, which may cause DSH to fail to start. You should use v0.2.6 currently.
4. When recognition fails, troubleshoot based on the status code: 401/403 usually indicates a key issue, 404 usually indicates a mismatch between apiBase or protocol; if the result is empty, you can manually specify the protocol.
Summary¶
dsh-vision connects “select image for recognition and auto-reply” and “agent screenshot and recognition” to the same host-side visual service, covering common cloud vendor interface protocols and retaining the custom template function. It solves the problem that plain-text Harness cannot view images, provided that you prepare the recognition model and key yourself.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-vision-linenxi-ctrl/
GitHub: https://github.com/linenxi-ctrl/dsh-vision