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,
maxImagesdefaults to200; - 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:
- The
dsh-sight:section insettings.yaml; DSH_SIGHT_*environment variables;~/.config/dsh-sight/config.json;- Plugin configuration in the profile’s
cordis.patch.yml; - 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
secretusingrole('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/bmpimages.
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