Introduction¶
When developing agents with DeepSeek Harness (DSH), you will likely encounter this issue: the built-in read_image tool stuffs image chunks directly into the current model’s context; it only works if the current main model itself supports images. If your main model is a pure text model like deepseek v4 flash, calling read_image will be rejected outright—the main model cannot see the image, so the image reading path is broken.
dsh-auto-vision takes a different path: internally, the plugin forwards images to a multimodal model for recognition, while the main model only sees text throughout. This article explains its principle, installation, and configuration.
What is this¶
dsh-auto-vision is a DSH plugin maintained by NormanFxxkingRockwell, open-sourced under the MIT license, currently version 0.4.0 (released 2026-08-24). Its positioning can be summarized in one sentence: automatically discover your configured multimodal models, install a vision tool for your pure text main model, return recognition results as plain text, zero configuration, installable with a single command.
The prerequisite is that you have at least one multimodal model configured in your DSH that declares image input. If not, the plugin will report an error at startup with suggestions for handling.
Core Workflow¶
The plugin does three things:
-
Auto-hide
read_image. In a session with a pure text main model, the plugin hides the inevitable-to-failread_image, forcing the model to usevisioninstead of hitting a failure and switching paths. When switching to a multimodal main model, the nativeread_imageis automatically restored; they don’t interfere with each other. -
visiontool calls multimodal model. When the main model gives an image file path (or instructs it to access an image file), it automatically callsvision. The plugin forwards the image to the multimodal model, and the recognition result is returned as plain text. -
Images don’t enter the main session. Image chunks exist only within the plugin’s internal visual requests; there will be no images in the main model’s context, preventing pollution or errors.
The recognition request uses the host’s own model runtime (ctx.llm), using your configured keys and retry strategies. It requires no extra API keys or services. The entire plugin has zero runtime dependencies and does not depend on any npm packages, relying solely on the host service.
Auto-Discovery and Failover¶
Zero configuration by default. The plugin lists all models declaring the image modality from registered providers as candidates, sorted by “explicit prefer -> provider configured in settings -> remaining registered providers”.
Candidates are tried in order. If empty content, an error, or interruption is encountered, it automatically switches to the next one—models declared as image in the directory but actually unavailable (e.g., official placeholder models without configured keys) won’t get stuck. The plugin also records the last successful model and prioritizes it next time.
There is a pre-check at startup: if the manually specified model does not support images, or auto-discovery fails, the plugin reports an actionable error at startup rather than crashing when you call it.
Parameters for the vision tool:
file_path: Single image path.file_paths: Array of multiple image paths, max 10 per request, described one by one by index.instruction: Optional, recognition requirements.
It shares the same attachment pipeline and size limits as read_image.
Installation¶
Choose either of two methods. Method 1, npm install (recommended):
dsh plugin --profile <你的profile名> add dsh-auto-vision
Method 2, GitHub source install (pure JS, zero build steps, no build authorization required):
dsh plugin --profile <你的profile名> add github:NormanFxxkingRockwell/dsh-auto-vision
After installation, use directly; no extra configuration is needed.
Configuration (All Optional)¶
All configuration items are optional; it works via auto-discovery even without configuration.
Override plugin configuration in the profile’s cordis.patch.yml, for example, manually specifying the vision model:
- id: dsh-auto-vision
config:
provider: bailian
model: qwen3.7-plus
Available configuration items:
| Configuration Item | Description |
|---|---|
provider + model |
Manually specify vision model. Both must be provided together. Startup validates that the model actually supports images; otherwise, it reports an error. |
prefer |
Provider order to prioritize during auto-discovery, e.g., prefer: [bailian]. |
discovery: false |
Disable auto-discovery. In this case, provider/model must be manually specified; otherwise, the plugin reports an error. |
autoHideReadImage: false |
Disable “auto-hide read_image”. |
transcribeImages: false |
Disable “paste image transcription” (experimental feature, see below). |
Auto-discovery relies on “the model declares an image modality”. If your model hasn’t declared it yet, add input: [text, image] to the image-supporting model in settings.yaml:
providers:
bailian:
models:
- id: qwen3.7-plus
name: Qwen3.7-Plus
contextWindow: 100000
input: [text, image]
Typical Usage¶
After installation, simply say in the main chat:
Read this image
C:\path\to\image.jpgand describe it
The main model will automatically call the vision tool and return the recognition result as text. Multiple images work the same way; put multiple paths into file_paths, max 10 per request, described one by one by index.
One point needs clarification: pasting images directly into the chat box is currently not automatically readable. The DSH official layer hard-rejects pure text models carrying images at the message admission layer (error MODEL_DOES_NOT_SUPPORT_IMAGES), which happens before any plugin hooks and has no public extension points. Therefore, please save the image as a file and give the file path to the model—the file path reading is fully automatic.
The plugin has implemented “paste image auto-transcription” (via the agent/pre-step hook, converting image chunks in session messages to text starting with 【图片转述】, with caching), but due to the admission limitation mentioned above, this path is currently unreachable. It is an experimental feature and will automatically take effect once the official side opens it.
Use Cases and Notes¶
The scenarios suitable for this plugin are clear: the main model uses a pure text model (e.g., deepseek v4 flash), but you have other configured multimodal models (e.g., qwen3.7-plus) on hand, and you want the former to gain image reading capabilities without changing the main model or adding services.
Pay attention to three points before use:
- You must have at least one multimodal model configured that declares image input; otherwise, the plugin will report an error immediately at startup.
- When manually specifying the vision model,
providerandmodelmust be provided together, and startup will validate that the model supports images. - The plugin runs with the permissions of the current DSH process; it is recommended to check the source code and license before installation.
dsh-auto-visionis under the MIT license, and the source code is available on GitHub.
Conclusion¶
dsh-auto-vision solves a specific problem: pure text main models cannot read images. It does not introduce new services or keys; instead, it relies on auto-discovering your existing multimodal models, turning file path image reading into a capability installable with one command that works immediately. It also reports configuration errors at startup. If you use a pure text main model in DSH and occasionally need to read images, it is worth trying.
- GitHub: https://github.com/NormanFxxkingRockwell/dsh-auto-vision
- Community Directory: https://www.skillhub.cn/plugins/NormanFxxkingRockwell/dsh-auto-vision (Independent community site, no official affiliation with DeepSeek / 幻方)