All plugins

hermes-quote-to-chat

Codex-style quote cards for Hermes Desktop: select text outside an input and press Add to chat; the excerpt becomes a removable card above the composer while your question stays a separate draft. On send the quotes are prepended once as Markdown blockquotes (composer.middleware). Quotes are scoped per chat, several can be collected and removed one by one, a busy-agent send goes through host.composer.submit with the quote attached, and a rejected send gives the quote back. Desktop-only (desktop/plugin.js inside the plugin SDK surface): no agent tools, hooks, Python middleware or env vars. Disclosure — reads window.getSelection() and the selection rectangle; adds its own button element to document.body; reads the live draft through host.composer.getDraft; keeps quotes in memory only. No network calls, no credentials, no files, no telemetry.

ivanvanes18Desktopv1.0.0Updated 4 hours ago

About

Codex-style quote cards for Hermes Desktop: select text outside an input and press Add to chat; the excerpt becomes a removable card above the composer while your question stays a separate draft. On send the quotes are prepended once as Markdown blockquotes (composer.middleware). Quotes are scoped per chat, several can be collected and removed one by one, a busy-agent send goes through host.composer.submit with the quote attached, and a rejected send gives the quote back. Desktop-only (desktop/plugin.js inside the plugin SDK surface): no agent tools, hooks, Python middleware or env vars. Disclosure — reads window.getSelection() and the selection rectangle; adds its own button element to document.body; reads the live draft through host.composer.getDraft; keeps quotes in memory only. No network calls, no credentials, no files, no telemetry.

Quote to Chat

Codex-style quoting for Hermes Desktop.

Select any text outside an input — an agent reply, your own earlier message, a tool output — and press Add to chat. The excerpt becomes a quote card above the composer. Type your question as usual; when you send, the quotes go in front of it as Markdown blockquotes, once.

> the exact sentence you selected

what does this mean for the migration?

Why

Asking about one specific sentence of a long reply normally means copy, paste, add > by hand, and hope the agent notices which part you meant. Quote to Chat keeps the quote and your question apart until you send, so you can collect several quotes, remove one with its ×, and edit your question freely.

How it differs from Quote & Ask

quote-ask pastes the selection into your draft as text. Quote to Chat keeps quotes as separate, removable cards and merges them only at send time (composer.middleware), so:

  • your draft is never edited, and several quotes can be collected and removed one by one;
  • quotes are scoped to the chat they were taken in;
  • a busy-agent send and a rejected send keep the quote attached to the question.

Behaviour

  • Per chat. Quotes belong to the chat you added them in; switching chats never leaks a quote into another conversation.
  • Several quotes. Add as many as you like; each card has its own ×.
  • Sent once. Quotes are cleared after a send. Nothing is ever sent automatically.
  • Busy agent. If the agent is still working, Enter sends quote + question through the same steer/queue path the composer uses.
  • Rejected send. If the app restores your draft after a failed send, the quotes come back too.
  • Slash commands (/status, …) are never wrapped.
  • English and Russian UI.

Install

Plugin catalog (once listed):

hermes plugins install hermes-quote-to-chat

Or from Git: Desktop → Capabilities → Plugins → Install from Git → https://github.com/ivanvanes18/hermes-quote-to-chat.

Or by hand: copy desktop/plugin.js to ~/.hermes/desktop-plugins/hermes-quote-to-chat/plugin.js, then ⌘K → Reload desktop plugins.

How it works

One file, desktop/plugin.js, plain ESM loaded uncompiled, importing only @hermes/plugin-sdk and react/jsx-runtime:

| Piece | SDK surface |
|---|---|
| Quote cards with × | composer.top slot |
| Prepending quotes on send | composer.middleware |
| Busy-agent send | host.composer.getDraft / host.composer.submit |
| Per-chat scoping | host.state.focusedStoredSessionId |
| Listeners, timers, cleanup | ctx.addEventListener, ctx.setTimeout, ctx.onDispose |

The floating button is the plugin's own element on <body>; the plugin never queries, restyles or clicks the app's markup. hermes plugins validate passes, including the desktop surface check.

Disclosure

No network calls, no agent tools/hooks/middleware, no env vars, no credentials, no files read or written. Quotes live in memory only and are dropped when the plugin is disabled.

Tests

QTC_NODE_MODULES=/path/to/node_modules node test/run.mjs   # needs jsdom + nanostores

16 behaviour tests on a jsdom page with a fake SDK: selection, cards, ×, per-chat scope, send, rejected send, busy send, slash commands, cleanup, and a guard that the source never selects app markup.

License

MIT

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

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section