Foreword

When building Agents with DeepSeek Harness (DSH), offloading reasoning to DeepSeek’s text model is no problem. However, many tasks require “seeing”: reading error text from screenshots, comparing layout differences between two versions of an interface, or extracting primary colors from design drafts. The common approach is to manually drop the image to another multimodal service and then carry the result back to the conversation, breaking the chain in the middle.

dsh-vision-suite solves this problem. While retaining the official deepseek-official text routing, it integrates image understanding, OCR, screenshot cropping, pixel comparison, primary color extraction, and secure webpage capture into Harness. Text inference is still handled by DeepSeek; the plugin will only send the user-selected image to a configured OpenAI-compatible vision model when calling remote vision tools.

What is this

dsh-vision-suite is maintained by princefrogdida-ux, is licensed under MIT, has a package name of dsh-vision-workbench (with the GitHub repository named dsh-vision-suite), is currently version 0.7.1, and targets Windows. The philosophy of DSH is “Everything is a plugin,” and this plugin fills the gap of vision for text-centric workflows.

The runtime environment requires Node ^22.19.0 || >=24.0.0. Local pixel processing, OCR, and browser capabilities rely on sharp, tesseract.js, and playwright-core, respectively. All three are optional dependencies loaded on demand—if you don’t use local tools, these overheads are not introduced.

Core Features

Six Vision Tools

Tool Purpose Execution Location
vision_describe Understand 1-4 uploaded images or workspace images, supporting image Q&A, multi-image comparison, and structured screenshot evidence Visual Provider
vision_ocr Recognize text in the whole image or a specified area, choose between remote vision model or local Tesseract Provider or Local Machine
vision_crop Crop images by pixel coordinates and save as persistent attachments for further use Local Machine
vision_compare Compare two screenshots of the same size, return the change ratio and a magenta difference map Local Machine
vision_palette Extract approximate dominant colors from images Local Machine
vision_browser_capture Capture whitelisted webpages using a standalone headless Edge or Chrome Local Browser

You can see the division of labor: tasks requiring model understanding go to the Visual Provider; pure pixel operations (cropping, comparing, color picking) and webpage capture are all done locally, so images don’t need to leave the machine.

Other Basic Capabilities

  • Supports PNG, JPEG, and WebP.
  • Image attachments use persistent IDs; tool results can be saved and replayed with the session.
  • Supports one primary Visual Provider and up to three sequential fallback Providers. It executes limited fallback on failure and avoids continuously requesting failed endpoints through a cooling mechanism.
  • Supports limits on image count, file size, pixel count, working pixels, timeout, and cache.
  • API Keys are saved via Harness Credentials; they are not written into plugin configuration, logs, or page responses.
  • Supports configuring separate HTTP/HTTPS proxies (proxyUrl, default empty) for plugin requests without modifying global network settings.

Installation and Enablement

When compiling this information, neither the README nor package.json contained a ready-to-use one-line installation command, so I have not concatenated it myself. Please refer to the README in the GitHub repository for specific installation methods.

After installation, the plugin defaults to being disabled (enabled default false). It does not automatically take over model routing or send images. To enable it via the Harness native configuration page:

  1. Start the Web Profile where the plugin is installed.
  2. Open “Settings → Plugins → Plugin Configuration”.
  3. Click on Vision Workbench to expand all configuration items.
  4. Fill in the text model, visual provider, and API Key.
  5. Turn on “Enable Plugin” and save the configuration.
  6. Restart the current Profile to make routing and tool configuration take effect.

Regarding the API Key input box: the key will not echo back after the page refreshes; it will only indicate whether the corresponding credential is already configured. When the password box is empty, the saved key is retained, and no need to paste it again.

Minimal Viable Configuration

For first-time use, you only need the following items:

Configuration Item Recommended Value or Description
enabled Enable
wrapperRoute Keep deepseek-vision-workbench; it cannot conflict with deepseek-official or text Provider names
textProvider.provider Keep deepseek-official
textProvider.model Select the DeepSeek model available in the current Harness (default deepseek-v4-pro)
visionProvider.name primary
visionProvider.baseURL OpenAI-compatible API address of the vision service
visionProvider.model The visual model name provided by the service provider
visionProvider.credentialRef Credential name, e.g., VISION_API_KEY
API Key Enter in the password box of the corresponding Provider card

After saving and restarting the Profile, select in the model selector:

DeepSeek + Vision Workbench / <configured DeepSeek model>

Then upload an image and ask directly, for example, “Recognize the text in this screenshot” or “Compare the layout differences of these two images.”

Configuring Remote Vision Services

Any service compatible with OpenAI’s /chat/completions and supporting image_url image input can be connected. The README provides entry points for several common services:

Provider baseURL API Key Official Site
OpenAI https://api.openai.com/v1 platform.openai.com/api-keys
OpenRouter https://openrouter.ai/api/v1 openrouter.ai/settings/keys
SiliconFlow https://api.siliconflow.cn/v1 cloud.siliconflow.cn/account/ak
Alibaba Cloud Bailian Mainland China: https://dashscope.aliyuncs.com/compatible-mode/v1; International: https://dashscope-intl.aliyuncs.com/compatible-mode/v1 help.aliyun.com

Configuration follows three steps:

  1. Fill the provider’s API address into visionProvider.baseURL.
  2. Copy a model ID that supports image input from the provider’s official website and fill it into visionProvider.model.
  3. Set a separate credentialRef for this service, for example OPENAI_VISION_KEY or OPENROUTER_VISION_KEY, and paste the real Key into the password box of the corresponding Provider card.

Note three points: The same provider may offer both a pure text model and a vision model; before selecting a model, you must confirm it supports image_url input and the /chat/completions interface; baseURL cannot embed username, password, or API Key; normal use must be HTTPS, and only when allowInsecureLocalhost is explicitly enabled is connecting to HTTP test services on the local loopback address allowed.

Local OCR

vision_ocr defaults to going through the remote visual Provider; it only enters local Tesseract when explicitly selecting backend="local". Local OCR is disabled by default (localOcr.enabled default false), and you need to prepare trusted language data files yourself—the plugin will not automatically download language packs, access CDNs, or write to the Tesseract cache, and will not automatically switch to the remote Provider after a local recognition failure.

Windows configuration example:

localOcr:
  enabled: true
  languagePath: 'D:\vision-data\tesseract'
  languages: [eng, chi_sim]
  gzip: true
  timeoutMs: 60000
  maxLanguageBytes: 52428800
  maxRegions: 50
  pageSegMode: auto
  autoRotate: true
  lowConfidenceThreshold: 40

Files such as eng.traineddata.gz and chi_sim.traineddata.gz should exist in the directory pointed to by languagePath. Gzip is enabled by default, auto-orientation is handled, and the low-confidence hint threshold is 40.

Browser Capture

vision_browser_capture is disabled by default (browserCapture.enabled default false). After enabling, you must fill in an exact host whitelist; the plugin uses a standalone headless browser (browserCapture.browserChannel default msedge, chrome can be chosen) to capture only pages within the whitelist.

Provider Fallback and Limits

In addition to the primary Provider (visionProvider), you can configure up to three fallback Providers (fallbackProviders). The plugin attempts them one by one in the list order and will not concurrently send images to multiple endpoints; primary and backup Providers cannot have the same name.

Fallback behavior is controlled by three parameters:

Field Default Value Description
providerRouting.attemptTimeoutMs 45000 Attempt timeout for a single Provider
providerRouting.failureThreshold 2 Number of consecutive failures before entering cooldown
providerRouting.cooldownSeconds 60 Cooldown time for a failed Provider

The total timeout timeoutMs (default 120000) should be greater than attemptTimeoutMs; otherwise, there may not be enough time to attempt fallback Providers.

Default limits for images and cache: a single call supports a maximum of 4 images, single image max 10485760 bytes (10 MiB), 40000000 pixels; vision result cache is enabled by default, 200 items, TTL 3600 seconds; local processing max working pixels 16000000; visual model max output maxTokens default 4096. These all have corresponding configuration items and can be adjusted as needed.

Additionally, vision_compare requires the two screenshots to be exactly the same size; the plugin will not automatically scale or align images to avoid masking real layout changes.

Applicable Scenarios and Notes

This plugin is suitable for Windows users of DSH and Agent developers who need to handle screenshots and images: for example, letting an Agent read text from interface screenshots, compare the changed areas of two versions of UI, extract colors from images, or take screenshots of whitelisted webpages as session evidence. The premise is that you have a vision service API Key compatible with the OpenAI image_url format, or are willing to prepare Tesseract language files yourself for local OCR.

Before using, there are a few points to be clear about:

  1. The plugin runs with the permissions of the current DSH process; local tools can read and write your workspace images and invoke the local browser. It is recommended to check the repository source code and license (MIT) before installation to ensure it meets your security requirements.
  2. The plugin is disabled by default and will not take over routing or send images without your knowledge; images are only sent to the endpoint you configured when calling a remote vision tool.
  3. Remote vision services must be HTTPS, baseURL must not contain keys, and webpage capture must go through an exact whitelist. These three points are built-in boundaries of the plugin; do not bypass them during configuration.

Summary

What dsh-vision-suite does is very focused: it does not replace DeepSeek’s text inference but only adds six tools when “seeing” is needed, and it turns engineering details like credentials, fallback, and limits into explicit configuration. If you often deal with screenshots on DSH, it is worth installing and trying once.