A small runtime plugin for Hermes Desktop that lets you control the width of the conversation column and message composer.
This is a community plugin. It is not bundled with Hermes and it is not an official marketplace listing.
Open this link on a computer with Hermes Desktop installed:
Install Hermes Chat Width
Hermes shows a confirmation dialog, checks what the repository contains, and lets you choose the desktop component before installing it. The link does not silently install code.
After installation:
- Open Settings → Plugins.
- Make sure Chat Width is enabled.
- If the status bar is hidden, enable the status bar in Hermes Desktop.
- If needed, press Ctrl/Cmd+K and run Reload desktop plugins.
The control appears on the right side of the status bar as a value such as
↔ 52rem.
Some Hermes Desktop builds expose a built-in installer at Settings → Plugins → Install from Git. If that menu exists in your build:
- Enter
Gohans1/chat-width. - Select the desktop component when Hermes asks.
- Confirm the installation.
- Enable Chat Width and reload desktop plugins if it does not appear.
If your build does not show that menu, use the one-click link above or the manual installation path below. The one-click link is the reliable current path for the public installer.
The recommended method is the Hermes installer above. Manual installation is useful for older builds or local development.
Copy plugin.js into the active Hermes Desktop plugin directory. The folder
name and the plugin id must both be chat-width.
Default profile:
%LOCALAPPDATA%\hermes\desktop-plugins\chat-width\plugin.js
Named profile:
%LOCALAPPDATA%\hermes\profiles\<profile>\desktop-plugins\chat-width\plugin.js
Default profile:
~/.hermes/desktop-plugins/chat-width/plugin.js
Named profile:
~/.hermes/profiles/<profile>/desktop-plugins/chat-width/plugin.js
Then reload desktop plugins from the command palette.
The GitHub checkout can live anywhere. Hermes does not load a plugin merely because the repository is on the Windows Desktop; the runtime file must be in the Hermes plugin directory above.
- Adds a status-bar chip that opens a native Hermes popover.
- Accepts a bounded numeric width with
rem,px, or%units.rem:0.1to120px:0.1to2400%:0.1to100
- Keeps quick presets:
- Narrow:
44rem - Medium:
52rem - Wide:
64rem - Full:
100%
- Narrow:
- Applies a custom value with the button or Enter.
- Closes without applying with Escape or by dismissing the popover.
- Resets to
100%. - Remembers the selected preset or custom value across restarts.
- Adds the presets to the Hermes command palette.
rem is the recommended unit because it follows the app's text scale better
than a fixed pixel value. Use % when you want the content to track the
available workspace width.
The plugin is a standalone native Hermes Desktop disk plugin. It does not ship an agent-side Python plugin, a dashboard plugin, a backend, or an npm runtime dependency.
It requires a Hermes Desktop build that supports the native Desktop Plugin SDK
and the --composer-width layout variable. This release was smoke-tested with
the Hermes Desktop build reporting Hermes Agent v0.20.5 in the development
workspace.
The plugin uses the documented plugin surfaces for its UI and state:
@hermes/plugin-sdk- status-bar contributions
- command-palette contributions
- Hermes UI components
- plugin-scoped storage
- plugin i18n
- reactive SDK state
The width variable itself is an app layout hook, not a dedicated public SDK setter. Hermes may rename or change that hook in a future release. If that happens, the chip can still load while the width no longer changes; check the compatibility notes and open an issue with the Hermes version.
A loaded Hermes Desktop plugin runs with the authority of the app's renderer and plugin SDK. A plugin is not a sandbox. Review third-party plugin source before installing it.
The one-click route uses the repository's current default branch. Hermes' current standalone disk-plugin installer does not pin a commit or verify a signature or integrity hash. Review the source before installing. Use the tagged release or its ZIP asset when you need a reproducible copy.
This plugin intentionally:
- makes no network requests;
- does not call a Hermes backend;
- does not read or write files;
- does not spawn processes;
- does not access credentials, tokens, cookies, or session content;
- has no runtime npm dependencies;
- stores only the selected width in its namespaced Hermes plugin storage.
While enabled, it manages the document-root --composer-width declaration. It
records the previous inline declaration and restores it on unload only when the
current value is still the value owned by this plugin. That prevents unload
from overwriting a value changed by another owner.
See SECURITY.md for reporting guidance.
- Confirm Chat Width is enabled in Settings → Plugins.
- Confirm the Hermes status bar is visible.
- Run Ctrl/Cmd+K → Reload desktop plugins.
- Confirm the file path is exactly:
.../desktop-plugins/chat-width/plugin.js. - Confirm the folder name and exported id are both
chat-width. - Check the Hermes GUI log with
hermes logs gui -f.
The current Hermes build may not expose the --composer-width hook or may
have changed its layout precedence. Check the Hermes version, reload the
plugin, and open an issue with the version and a sanitized log excerpt.
- Disable Chat Width in Settings → Plugins.
- Close Hermes or reload desktop plugins.
- Delete the
chat-widthplugin directory if you installed it manually.
Disabling first lets the plugin run its cleanup path.
The disk plugin is plain uncompiled ESM. There is no build step and no runtime package installation.
npm run verifyThe command runs:
node --check plugin.js;- CSS ownership smoke tests in
tests/ownership.test.mjs; - width-boundary tests in
tests/validation.test.mjs.
For local iteration, copy plugin.js to the active Hermes profile's
desktop-plugins/chat-width/ directory. Hermes watches that directory and
hot-reloads later saves.
Supported disk-plugin imports are intentionally limited to:
@hermes/plugin-sdk
react
react/jsx-runtime
That is why the file uses jsx() and jsxs() instead of JSX syntax.
plugin.js # Hermes Desktop entry point
package.json # repository metadata and validation scripts
LICENSE # MIT license
CHANGELOG.md # release history
SECURITY.md # vulnerability reporting policy
CONTRIBUTING.md # contribution rules
docs/marketplace.md # current marketplace/index status
tests/ownership.test.mjs # CSS ownership smoke tests
.github/workflows/validate.yml # syntax and test validation
The repository intentionally does not contain plugin.yaml, plugin.json, or
Python code. Those belong to other Hermes plugin surfaces and are not needed by
this standalone Desktop plugin.
The supported public distribution path is this repository and its Hermes install link. Hermes' community plugin index and a Desktop marketplace are still evolving. The current status and source links are recorded in docs/marketplace.md.
If an official index submission process becomes available, this repository can be submitted there. Index inclusion should be treated as discovery metadata, not as a code audit.