Introduction

When chatting with a plain-text primary model (such as DeepSeek) in DeepSeek Harness (DSH), a common issue is that the primary model does not recognize images. You either have to switch to a multimodal model or manually type the content of a screenshot into the conversation. dsh-vision-opencode takes a different approach: when an image is sent in the chat, it is first passed to a configurable vision model to be converted into text, and the primary model responds normally without needing to switch models.

Below is an introduction to the positioning, capabilities, and installation/configuration of this plugin. The information is sourced from the SkillHub Directory Page and the GitHub Repository (maintainer poiuyjie, MIT license, current version 0.4.2).

What It Is

dsh-vision-opencode is a web-side plugin for DSH, classified under model inference. In one sentence: it automatically converts images into text via any vision model, making them usable by plain-text LLMs.

The plugin automatically identifies and takes over images for plain-text primary models. If the primary model itself supports multimodality, it retains DSH’s native pipeline and requires no changes to the model directory.

Core Features

Automatic Conversion of Images Sent in Chat

When an image is sent in a conversation, the plugin passes it to the selected vision model (e.g., MiMo-V2.5) to generate a text description, which is then sent to the primary model for further reasoning. A “Vision Model” dropdown is provided on the right side of the input box, automatically listing models from each provider that support images.

Vision Settings and Tools

Under Settings → Vision, you can independently manage vision models. The plugin also provides:

  • The vision_read_image tool
  • The vision-image-analysis skill

These can be used for scenarios such as OCR, chart interpretation, and screenshot understanding.

Fallback Handling for Exceptions

  • 60-second timeout per request
  • One retry on failure
  • After retries are exhausted, it degrades to placeholder text, preventing the entire round from being disrupted.

Channel Status and Reasoning Strategies

In Settings → Vision, each channel (provider group) has a status indicator dot next to its name, following the same logic as the official “Models” page:

  • Green dot: API key is configured (either the host-routed apiKeyEnv or the plugin-written <PROVIDER>_API_KEY is available)
  • Red dot: Key is explicitly not configured
  • No indicator: Status is unknown (e.g., credential service is unavailable)

Each vision model can have its own “Reasoning” strategy:

Option Meaning
Default Follows the provider’s default tier
Off No thinking; faster and more economical; only available when the provider explicitly declares it off
Force Off Attempts to turn off thinking (e.g., via reasoning_effort:"none"), but success is not guaranteed

Providers have inconsistent declarations for the “thinking off” field, so the plugin can only try to differentiate between “Off” and “Force Off” and attempt parameters, without guaranteeing that thinking can be turned off for every provider.

Installation and Enabling

It is recommended to install using DSH’s native command:

dsh plugin --profile web add -w github:poiuyjie/dsh-vision-opencode

You can also use a one-click script (install.sh for Ubuntu, install.ps1 for Windows):

curl -fsSL https://raw.githubusercontent.com/poiuyjie/dsh-vision-opencode/main/scripts/install.sh | bash

After installation, restart dsh and select a vision model from the dropdown on the right side of the input box to enable the plugin.

Uninstall command:

dsh plugin --profile web remove -w dsh-vision-opencode

Alternatively, use uninstall.sh from the repository. Before uninstalling, it is recommended to back up conversations containing images—after uninstallation, these old conversations may no longer be sendable to plain-text primary models.

Configuration

Edit ~/.dsh/settings.yaml or manage it graphically under Settings → Vision:

vision-opencode:
  provider: ''       # Vision model provider; empty = not selected
  model: ''          # Vision model ID; empty = not selected
  autoConvert: true  # Auto-convert switch for image sending; set to false if issues arise

If you only want to keep the tool and selector but disable auto-conversion, set autoConvert to false and restart.

Typical Usage

  1. Install the plugin and restart dsh.
  2. In Settings → Vision, select the provider and model ID for the vision model, or choose directly from the “Vision Model” dropdown on the right side of the input box.
  3. Confirm that the API key for the corresponding channel is configured (status dot is green).
  4. Send an image in the conversation. The plugin automatically calls the vision model to convert it to text, and the primary model continues its response based on the conversion result.
  5. To actively recognize an image, call the vision_read_image tool or use the vision-image-analysis skill.

Use Cases and Notes

Who is it suitable for:

  • Users whose primary model is fixed to a plain-text model but occasionally need to send screenshots, charts, or document images in conversations.
  • Users who want to configure vision models separately from the primary model, switching providers without changing the model directory.
  • Users who need OCR or screenshot understanding within DSH and want to reuse the same vision capabilities via tools/skills.

Notes:

  • The plugin runs with the current dsh process permissions. Before installation, review the source code and the MIT license.
  • Requires Node.js >= 20.3; depends on peer packages like @deepseek-ai/dsh-llm, dsh-tools, dsh-settings (rc.6 and above).
  • If image conversion fails or the selector does not appear, it is likely due to the vision model not being selected or version discrepancies. Check the browser console for errors and open an issue on GitHub.
  • Plain-text and multimodal primary models are automatically distinguished; switching providers generally requires no additional configuration changes.

Links

SkillHub is a community directory for Skills aimed at Chinese users and has no official affiliation with DeepSeek or High-Flyer. The value of dsh-vision-opencode lies in adding configurable vision capabilities to plain-text LLMs without changing the primary model.