Introduction

In the usage scenarios of DSH (DeepSeek Harness), a common limitation is that some models are text-only and cannot directly handle image pastes or image blocks. dsh-sight is a plugin designed for such models. Its goal is to use a vision tool and built-in VLM presets to convert image content into text descriptions, allowing text-only models to answer questions based on images.

Below is an introduction to its capabilities, installation methods, typical usage, and limitations.

What is this

dsh-sight is a DSH plugin maintained by Fu3rte with an MIT license.

The problem it solves can be summarized as: adding “see and describe” capabilities to text-only DeepSeek Harness (dsh) models. The plugin wraps the prompt admission process, allowing image pastes to enter the flow and converting image blocks into path hints; subsequently, the model can call the vision tool, and the plugin passes the image to the configured VLM backend, returning a text description.

Core Capabilities

Built-in VLM Presets

The plugin provides two types of built-in presets:

  • opencode-zen: OpenCode Zen, free, no key required.
  • gemini-flash: Gemini Flash, free tier.

It also supports custom mode to connect to any OpenAI-compatible endpoint. The configuration entry is on the Web Settings page; simply select a preset or custom endpoint and save.

vision tool

The vision tool accepts local paths or http(s) URLs. A single call can accept up to 10 paths or URLs and returns annotated descriptions one by one in a single request.

The return format is similar to:

--- Image 1 ---
<description>
--- Image 2 ---
<description>

Pasting Images to Path Hints

For text-only models, dsh typically does not accept image pastes. dsh-sight implements a prompt-admission override by wrapping apiProxy.sessions.prompt:

  • Image pastes are accepted;
  • Image content is saved to the plugin directory;
  • Image blocks are converted to path hints before entering history.

For example, after pasting an image, a prompt similar to this might be generated:

[Image #1 auto-saved to /tmp/dsh-sight/image1/xxxx.png]

This path hint can be used for subsequent calls to the vision tool.

Web Settings Page

The plugin provides a Settings → Vision page where you can:

  • Select a preset or custom endpoint;
  • Fill in the model, Base URL, and API key;
  • View the effective config to confirm which backend will actually be used;
  • Hot reload after saving, no restart required.

Installation and Activation

Installation command:

dsh plugin --profile web add dsh-sight

After installation, open:

Settings → Vision

On the settings page, select a preset or fill in a custom endpoint and save the configuration.

Regarding environment requirements, the engines requirement in package.json:

{
  "engines": {
    "node": ">=20"
  }
}

Typical Usage

Using Pasted Images

First, paste an image. The plugin will save the image to the plugin directory and generate a path hint, for example:

[Image #1 auto-saved to /tmp/dsh-sight/image1/xxxx.png]

The model can then call the vision tool based on that path.

Directly Calling the vision tool

You can also pass local paths or URLs directly:

{
  "paths": ["/tmp/dsh-sight/image1/xxxx.png"],
  "question": "What does this chart show?"
}

If you need to analyze multiple images at once, you can pass up to 10 paths or URLs:

{
  "paths": [
    "/tmp/dsh-sight/image1/xxxx.png",
    "https://example.com/chart-2.png"
  ],
  "question": "Compare these two charts."
}

The plugin will return descriptions for each image sequentially.

Caching and Cleanup

Pasted images are saved to the plugin directory, for example in the documentation:

/tmp/dsh-sight/image{N}/

The cache strategy includes:

  • MD5 deduplication;
  • LRU limit, maxImages defaults to 200;
  • Cleanup of plugin image directories older than 7 days at startup.

Configuration Priority

When there is no GUI or scripted configuration, the configuration priority from high to low is:

  1. The dsh-sight: section in settings.yaml;
  2. DSH_SIGHT_* environment variables;
  3. ~/.config/dsh-sight/config.json;
  4. Plugin configuration in the profile’s cordis.patch.yml;
  5. Preset defaults.

Related environment variables include:

DSH_SIGHT_PROVIDER
DSH_SIGHT_API_KEY
DSH_SIGHT_MODEL
DSH_SIGHT_BASE_URL
DSH_SIGHT_TIMEOUT_MS
DSH_SIGHT_MAX_TOKENS
DSH_SIGHT_MAX_IMAGES
DSH_SIGHT_CONFIG

Security and Limitations

The plugin imposes limits on API keys and inputs:

  • API key is marked as secret using role('secret');
  • API key is not returned with the settings response;
  • UI uses write-only fields and reports whether it has been stored;
  • Local image read limit is 25 MiB;
  • URL fetching has a 30-second timeout;
  • URL fetching limit is 25 MiB;
  • URL fetching requires declaring image/* content type;
  • Only accepts png/jpeg/webp/gif/bmp images.

Applicable Scenarios and Notes

dsh-sight is suitable for the following scenarios:

  • Currently using text-only DSH models but need to handle image content;
  • Want to complete image description using free or low-cost VLM presets;
  • Need to batch convert multiple images into text descriptions;
  • Want to keep the original model without switching to a vision model.

Note before use: The plugin runs under the permissions of the current dsh process, reads local files, fetches URLs, and calls external VLM endpoints. It is recommended to check the source code, license, and endpoint configuration before installation. Although the API key is marked as secret, you should still avoid using it in untrusted environments.

Links

GitHub:

https://github.com/Fu3rte/dsh-sight