HermPlugin object with an id, optional enabled flag, and a tui(api) factory.
What plugins can do today
Plugins can register UI, routes, commands, gateway event listeners, namespaced state, lifecycle cleanup, and Eikon rasterizers.Slots: inject UI into mounted host regions
Slots: inject UI into mounted host regions
Herm’s public slot type lists several possible slots. In the current host,
app_bottom is the mounted plugin slot. It renders in the one-row gutter below the composer and receives { sid, tab, streaming }.The app_bottom call site uses single_winner composition. The contribution with the lowest order wins.Routes: add a top-level tab
Routes: add a top-level tab
Register a named route and Herm appends it after the built-in tabs. Navigate to a plugin route with
api.route.navigate("RouteName").Commands: add command-palette entries
Commands: add command-palette entries
Register commands with a title, value, optional description, optional category, and
onSelect callback. They appear in the Ctrl+K command palette.Events: listen to gateway traffic
Events: listen to gateway traffic
Subscribe to the live gateway event stream with
api.event.on(fn). Use it for UI updates, toasts, or route changes that react to Hermes Agent state.Eikon rasterizers: add render backends
Eikon rasterizers: add render backends
Register a rasterizer for Eikon Studio. Studio owns cropping, state selection, playback, and knob UI. Your rasterizer maps the prepared window to terminal frames.
Add a bundled plugin
1
Create a bundled module
Add a module under
src/plugins/bundled/. It must export a default HermPlugin value.2
Register it in internal.ts
Import the module in
src/plugins/internal.ts and append it to INTERNAL.Default enablement
Plugins are enabled by default unless they setenabled: false. User toggles in the plugin manager override the compiled default and persist across launches.
The bundled demo plugins, demo.clock and demo.files, ship disabled by default.
Persistent plugin state
Herm stores local plugin state in~/.hermes/herm/tui.json, or $HERM_CONFIG_DIR/tui.json when set.
plugin.enabledstores per-plugin enablement overrides.api.kvstores plugin data under keys scoped by plugin id.