All plugins

hermes-vision-inline

Attach an image inline to the session model when it can see one, instead of letting an explicit auxiliary.vision backend describe it. Core already attaches images natively by default; what this plugin changes is an explicit auxiliary.vision setting, which it overrides so the model reads the pixels directly. The image stays in context, so follow-ups do not reprocess it. The model's modality comes from the local models.dev cache; no network calls and nothing to configure. Disclosure — replaces the vision_analyze handler through tool_execution middleware: when the local models.dev cache says the main model takes images and its provider carries images in tool results, it attaches the image itself even if you configured an auxiliary.vision backend (agent.image_input_mode: text still turns this off); the image stays in the conversation and is resent on later turns; relies on Hermes private vision helpers, so after a Hermes update it may silently fall back to the normal path.

BrokeSkill1Toolsv1.1.0Updated 28 days ago

About

Attach an image inline to the session model when it can see one, instead of letting an explicit auxiliary.vision backend describe it. Core already attaches images natively by default; what this plugin changes is an explicit auxiliary.vision setting, which it overrides so the model reads the pixels directly. The image stays in context, so follow-ups do not reprocess it. The model's modality comes from the local models.dev cache; no network calls and nothing to configure. Disclosure — replaces the vision_analyze handler through tool_execution middleware: when the local models.dev cache says the main model takes images and its provider carries images in tool results, it attaches the image itself even if you configured an auxiliary.vision backend (agent.image_input_mode: text still turns this off); the image stays in the conversation and is resent on later turns; relies on Hermes private vision helpers, so after a Hermes update it may silently fall back to the normal path.

hermes-vision-inline

A Hermes plugin that attaches an image to your session model inline when the model can see it, instead of letting the auxiliary vision model write a description.

Core already attaches images natively by default. What this plugin changes is an explicit auxiliary.vision backend: with a captioning model configured, core sends every vision_analyze call there, and this plugin keeps the image in the conversation instead when the main model accepts it. The plugin still respects agent.image_input_mode: text, which turns image attachment off.

Keeping the image inline preserves the full context, supports follow-up questions without reprocessing, and lets the model inspect details directly.

routing

Install

Linux and macOS:

git clone https://github.com/BrokeSkill/hermes-vision-inline
cd hermes-vision-inline
./install.sh

Windows, from PowerShell in a clone:

git clone https://github.com/BrokeSkill/hermes-vision-inline
cd hermes-vision-inline
.\install.ps1

The script copies the plugin to ~/.hermes/plugins/hermes-vision-inline and
enables it. By hand, the same two steps:

hermes plugins enable hermes-vision-inline
systemctl --user restart hermes-dashboard.service

The desktop backend caches its plugin list per process, so a restart is needed.

Usage

When the model calls vision_analyze, the plugin looks up the session model and
picks a path:

| condition | path taken |
| --- | --- |
| agent.image_input_mode is text, the provider drops images inside tool results, or the model is not listed as vision-capable | vision_analyze_tool runs; the auxiliary vision model returns {"success": true, "analysis": "..."} |
| the model accepts images | _vision_analyze_native runs; the image is encoded into the tool result as an image_url part |

How the model is identified

The decision of whether a model is vision-capable comes from the models.dev catalog Hermes keeps on disk
(~/.hermes/models_dev_cache.json, 8000+ models, refreshed by Hermes).

Install without a plugin loader

The plugin is two files. Copy __init__.py and plugin.yaml into
~/.hermes/plugins/hermes-vision-inline/ and the loader picks them up; there
are no dependencies to resolve and nothing to configure.

Uninstall

hermes plugins disable hermes-vision-inline

License

MIT. See LICENSE.

README from the reviewed commit 281bce6; it updates when the author re-pins.

More by BrokeSkill

5 plugins by BrokeSkill in the catalog.

BrokeSkillhermes-insightSelection-definition lookup for Hermes Desktop. Select any text, get an AI definition with sources in a popup. Renders the definition inline, runnable code aside. Backend is a stateless hermes insight CLI; panel, providers, and one-click model picking are configurable. Disclosure — definitions are generated with your configured provider keys (the selected term, your format template and optional web-search results are sent to that provider) via a short-lived `hermes insight` CLI run; no background process remains. When web search is on it also queries your configured searxng instance and fetches result thumbnails from their image hosts, inlining them into the panel; nothing is fetched without a searxng URL.CommunityDesktop app3BrokeSkillhermes-desktop-cameraA camera button for the Hermes Desktop composer. Open the preview, take a photo, and the frame lands in the composer as an image attachment, ready to send.CommunityDesktop appBrokeSkillhermes-taskbar-badgeWindows taskbar badge on the Hermes window when a turn finishes. Calls navigator.setAppBadge on the message.complete event while the window is in the background, and clears it when the window regains focus or another session is opened. Disclosure — no network calls and no data leaves the machine; the badge is drawn by the app's own Electron process, which maps the Chromium Badging API onto the Windows taskbar overlay.CommunityDesktop appBrokeSkillturn-bellA bell in the Hermes desktop composer that pings the ntfy topic Hermes already uses when a turn finishes. Click to cycle off, current turn, or all turns. Disclosure — when enabled, posts the first line of each finished reply plus model, duration, token and cost figures to the ntfy server/topic Hermes is configured with (default ntfy.sh); reads NTFY_* from the profile .env and falls back to the ntfy CLI's ~/.config/ntfy/client.yml login (read-only).CommunityDesktop app