Preface

DeepSeek Harness (DSH) supports expanding capabilities through plugins. For agent developers, a common issue is that DeepSeek itself is a pure text model—directly pasting images into the conversation doesn’t allow the model to treat them as input. If you integrate a vision API separately, you need to apply for a key, bear the cost, or face network environment restrictions.

dsh-vision is a DSH plugin maintained by 54xkeee, designed to add image understanding capabilities to the pure text DeepSeek. By default, it uses the Doubao Web channel, requiring only a one-time browser login without needing an API key. It also supports Antigravity IDE quotas, Gemini API fallback channels, Cockpit reverse proxy, aicode direct connection channels, and any IDE CLI via ideCli configuration. The relevant directory is a community-independent site, not an official app store.

Plugin Positioning

  • Repository/README name: dsh-vision
  • npm package name: dsh-vision-web
  • Maintainer: 54xkeee
  • License: MIT
  • Runtime requirements: Node >=20, dsh >=0.1.0
  • Basic function: Wraps an adapter for the pure text DeepSeek, declares image input, and automatically converts images to text placeholders. Recognition results are backfilled as textual evidence for DeepSeek to continue answering.

Core Capabilities

Below are several verified capabilities.

  1. Default Doubao Web Channel
    Uses Doubao Web by default, requiring only a one-time browser login, zero cost, and no API key.

  2. Antigravity IDE Quota
    Supports using Antigravity IDE quotas, selecting flash / pro tiers based on the model name.

  3. Gemini API Fallback Channel
    Supports Gemini API as a fallback channel.

  4. Cockpit Reverse Proxy & aicode Direct Connection
    Supports Cockpit reverse proxy channels and aicode direct connection channels.

  5. Any IDE CLI Integration
    Supports Claude Code, Gemini CLI, Qwen Code, MiMo, and other IDE CLIs via ideCli configuration.

  6. Image Input Wrapping
    Wraps an adapter for the pure text DeepSeek, declares image input, and automatically converts images to text placeholders.

  7. Visual Evidence Memory
    Persists recognition results to the conversation timeline, supports cross-turn reuse, and recovers after compaction.

  8. Content Hash Caching
    Recognizes the same image with the same question at most once within the process.

  9. Tier Auto-Upgrade
    Performs standard checks first and automatically escalates to in-depth checks for complex images.

  10. Four Task Modes
    Provides glance, ocr, region, and compare task modes.

  11. Structured Evidence Output
    Outputs structured JSON evidence objects containing fields like complexity, base_evidence, and query_answer.

  12. Two Usage Entry Points
    Provides panel and conversation flow entry points.

  13. WSL/Blocked Environment Fallback
    Supports winCurl fallback in WSL/blocked environments.

Installation and Enabling

First, execute the official installation command:

dsh plugin --profile web add dsh-vision-web

Note: The installation command uses the npm package name dsh-vision-web, while the repository and README use dsh-vision. The names are not entirely consistent.

The plugin runs with the permissions of the current dsh process. Before installation, you should check the source code, dependencies, and license; in this introduction, the license has been verified as MIT.

Typical Usage

Default Doubao Web Channel

First, install the plugin, then set up the bridge and log in:

  1. Install the plugin:
dsh plugin --profile web add dsh-vision-web
  1. Run the bridge on the Windows side:
node bridge.mjs
  1. Log in to doubao.com in the corresponding Chrome browser.

  2. Restart dsh web, then paste and send images in the conversation.

After these steps, the default channel is ready to use. This channel sends images to your logged-in Doubao session; it depends on Windows-side Chrome, bridge.mjs queue polling, and requires logging into Doubao.

Antigravity Channel

If using Antigravity IDE, you can configure the following:

config:
  antigravityWorkspace: /path/to/workspace
  antigravityProjectId: your-project-id
  antigravityLsExe: /path/to/language_server.exe
  antigravityWindowsHome: /mnt/c/Users/you
  antigravityBrainDir: /mnt/c/Users/you/.gemini/antigravity/brain

After configuration, the plugin automatically prioritizes using Antigravity quotas and selects the flash / pro tier based on the model name.

Note: This channel requires the Antigravity IDE to be running and logged in, and the language_server.exe path must be provided.

Gemini API Channel

Enable the Gemini API channel after configuring genlangKey:

config:
  genlangKey: your-api-key

This channel requires users to provide an API key. The key is stored only in the local configuration, and error messages are automatically masked.

Any IDE CLI Channel

If you have a local IDE CLI, such as Claude Code, Gemini CLI, Qwen Code, or MiMo, you can integrate via ideCli configuration:

config:
  ideCli:
    enabled: true
    exe: claude
    argsTemplate: "-p {prompt}"
    imageRefTemplate: "{path}"
    timeoutMs: 120000

Where:

  • exe corresponds to the actual CLI executable file
  • argsTemplate is used to construct CLI arguments
  • imageRefTemplate is used to specify the image reference format
  • timeoutMs is used to set the timeout duration

Specific values need to be adjusted based on the capabilities of the CLI being used.

Panel Entry Point

Click “Image Recognition” in the conversation header, then operate in sequence:

  1. Add or paste an image
  2. Enter a prompt
  3. Select the mode, tier, and channel
  4. Click “Recognize”

Conversation Flow Entry Point

Select the deepseek-vision route in the model selector, then paste and send an image.

Local Development

If you need to build and test locally:

git clone https://github.com/54xkeee/dsh-vision
cd dsh-vision
npm install
npm run build
npm test

Use Cases and Precautions

dsh-vision is suitable for the following scenarios:

  • Adding image understanding capabilities to pure text DeepSeek in DSH
  • Using the Doubao Web channel by default to avoid additional API keys
  • Having Antigravity IDE quotas, Gemini API, Cockpit reverse proxy, aicode credentials, or local IDE CLIs
  • Needing a winCurl fallback path in WSL/blocked environments

Before use, note the following:

  • The plugin runs with the permissions of the current dsh process. Check the source code and license before installation.
  • The Doubao Web channel sends images to the user’s logged-in Doubao session.
  • The Doubao Web channel depends on Windows-side Chrome, bridge.mjs queue polling, and requires logging into Doubao.
  • The Antigravity channel requires the Antigravity IDE to be running and logged in, and the language_server.exe path must be provided.
  • The Gemini API channel requires users to provide an API key; the key is stored only in the local configuration, and error messages are automatically masked.
  • OAuth credentials are not built-in; the aicode channel requires users to bring their own credentials stored in local configuration.
  • When WSL cannot connect to the API, you can configure curlPath to use Windows curl as a fallback.
  • When allowedImageDirs is non-empty, image_path is only allowed to read from specified directories.
  • Caching is an in-process LRU, not a cross-process persistent cache.

Conclusion

The value of dsh-vision lies in making image understanding a DSH plugin capability, using Doubao Web by default to lower the entry barrier, while retaining channels like Antigravity, Gemini API, Cockpit, aicode, and IDE CLI, allowing selection based on existing accounts, quotas, or local tools. For developers needing to add image viewing capabilities to pure text DeepSeek, it provides a practical plugin-based solution.

Relevant links:

  • GitHub: https://github.com/54xkeee/dsh-vision
  • Directory Page Clue: https://www.skillhub.cn/plugins/54xkeee/dsh-vision

The directory page link comes from plugin clues and is not listed in the fetched README/package.json. It is recommended to open and verify it before use.