All plugins

next-prompt

Suggests your next message after each turn as a pill under the Desktop composer: your likely answer when the agent asks you something, or the natural next step.

soymarketing4Desktopv0.3.1Updated 23 days ago

Next Prompt

A Hermes Agent Desktop plugin
that suggests your next message after every turn. It shows up as a small pill
under the composer:

  • When the agent asks you something, the pill is the answer you would most
    likely give, committed to one option.
  • Otherwise, it is the natural next step: verify it, apply it elsewhere,
    dig into a detail.

Click it, or press Ctrl/⌘+Shift+Y, and the text lands in the composer for
you to review. Nothing is ever sent for you.

Install

hermes plugins install next-prompt
hermes plugins enable next-prompt

Restart Hermes Desktop, then turn Next Prompt on in Settings → Plugins
(desktop plugins are opt-in). Requires Hermes Agent ≥ 0.21 with the Desktop app.

What it looks like

The agent asked a question. The pill is your likely answer, ready to send
or tweak:

The agent asks whether dark mode should follow the OS or use a toggle; the pill answers "Go with the toggle (light/dark/system), start on system."

The agent finished a task. The pill is the natural next step:

After a palindrome function, the pill suggests "Add a quick unit test using Python's unittest module for these cases"

Command palette. Ctrl/⌘+K → Next Prompt: use suggestion (with a preview)
or dismiss suggestion:

The command palette filtered to Next Prompt, showing "use suggestion" with a preview and the Ctrl+Shift+Y shortcut, and "dismiss suggestion"

Using it

  • Click the pill or press Ctrl/⌘+Shift+Y to use the suggestion. The
    shortcut only acts on the suggestion shown in the chat you are looking at,
    and does nothing while that chat is working. Change it in
    Settings → Keybinds.
  • Click × to dismiss it. Sending your own message clears it too.
  • It stays until you act on it. Switching chats or screens, or restarting
    the backend, does not lose it. Stale suggestions expire after 7 days.
  • When a suggestion can't be generated, a muted note takes the pill's
    place and says why (credentials rejected, rate limit, timeout) with a hint
    on hover. It never shows the provider's error text.

On Desktop builds with the plugin SDK's composer API
(host.composer.insertText), using a suggestion puts the text straight into
the composer. On earlier builds it copies the text to the clipboard and tells
you so; paste it with Ctrl/⌘+V.

Choosing the model

Suggestions run on your main model unless you give the plugin's auxiliary
task its own. A small, fast model is plenty and far cheaper than an Opus-class
main model:

hermes config set auxiliary.next_prompt.provider anthropic
hermes config set auxiliary.next_prompt.model claude-sonnet-5

hermes config set warns that the key is not recognized: plugin tasks are
registered at runtime, and the value is still read. You can also pick it
interactively with hermes model → Auxiliary → Next Prompt. (Desktop's
Settings → Models → Auxiliary lists only Hermes' built-in tasks.) The change
applies from the next suggestion; no restart needed.

Measured on 16 conversations in English and Spanish (6 where a next step fits,
8 where the agent asked you something, 2 where the right answer is silence; 4
of them real exchanges scored against the reply actually sent), each run two
or three times and scored by an LLM judge:

| Model | Correct | Median latency | Notes |
|---|---|---|---|
| claude-opus-5-5 | 30/32 | 1.5 s | Most useful suggestions; the most expensive |
| claude-sonnet-5 | 43/48 | 1.2 s | Recommended balance |
| gpt-6-luna (reasoning off) | 25/32 | 1.8 s | Much cheaper; sometimes follows the topic's language instead of yours, or stays silent when a reply fits |

"Correct" means you would send it as is or after changing a word or two, in
your language, committed to one answer (no options or blanks), with silence
exactly where it should be. The miss all three share: when you report on a
test, the suggestion assumes it went well, so you fix a word when it didn't.

Settings

plugins:
  entries:
    next-prompt:
      settings:
        enabled: true            # toggle suggestions on/off
        max_context_messages: 4  # your last N/2 requests + the agent's reply to each (2-10)
        cooldown_seconds: 3      # minimum gap between suggestions per chat

Privacy and cost

  • Per completed turn, the model receives your last few requests and the
    agent's final reply to each (2 of each by default), each clipped to
    about 1,200 characters keeping the start and the end. Tool calls, tool
    output and the agent's intermediate notes are never sent.
  • One short completion per turn (max_tokens=100, about 900 input tokens with
    Anthropic models), on the model you choose.
  • Messaging platforms (Telegram, Discord, …) are skipped: nobody would see the
    pill there, so no call is spent on them.
  • No telemetry and no network access other than the host's own ctx.llm call.

How it works

  1. post_llm_call hook. When a turn finishes in a Desktop/TUI session, a
    background worker asks ctx.llm for the message you are most likely to
    send next: your answer when the agent asked you something, otherwise a
    next step. NULL only when the exchange is closed (thanks, goodbye).
  2. Per-chat storage. The suggestion is kept in a small SQLite file in
    the plugin's data directory (plugin-data/next-prompt/suggestions.db in
    the profile) until you use it, dismiss it, or send your own message
    (pre_llm_call). The hook and the REST route may run in different
    processes (a gateway serving several profiles runs a secondary profile's
    plugin API in that profile's plugin host), so this file is the only state
    they share.
  3. Desktop half. Reads the suggestion through the plugin's REST route
    (ctx.rest → /api/plugins/next-prompt/suggestion) and renders it in the
    composer.underside area.

Design notes

  • Pill, not ghost text. The plugin SDK does not expose the composer's
    input, so the suggestion lives in composer.underside, a first-class
    extension area.
  • Insert, don't send. Using a suggestion only places the text for you to
    review. The bundle stays inside the plugin SDK: it never touches the app's
    composer DOM or internal events, so composer changes can't break it
    silently.
  • Poll, not push. ctx.socket is a no-op on OAuth remote backends, so the
    desktop half polls (every 2 s right after a turn, every 20 s otherwise).
  • One answer, never a menu. When the agent ends with a question, a choice
    or a yes/no offer, the suggestion commits to the option the conversation or
    the agent favours, or says yes to a proposal that matches your request.
    Asked to try something and report back, it confirms you did it with the
    most likely outcome. It never offers a list of options or a blank to fill
    in, since deleting options is as much work as typing; a suggestion that
    comes back with brackets anyway is dropped. When the answer is a detail only
    you know (an email address), it shows nothing. It never includes a password.
  • Your language. The suggestion follows the language of your last
    message, not the topic's.

Development

git clone https://github.com/soymarketing/hermes-plugin-next-prompt
cd hermes-plugin-next-prompt
hermes plugins validate .

# tests (need hermes-agent importable, e.g. its venv, and Node 22+)
python -m unittest discover -s tests -v
node --test "tests/frontend/*.test.mjs"
node tests/check_sdk_exports.mjs /path/to/hermes-agent

# try it
cp -r . "$HERMES_HOME/plugins/next-prompt"
hermes plugins enable next-prompt

The same checks run in GitHub Actions on every push and pull request. Python
changes need a full Desktop restart (quit it from the system tray too);
desktop/plugin.js hot-reloads. See CHANGELOG.md for release
notes.

License

MIT

README from the reviewed commit c200200; 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