All plugins

hermes-helm

One /helm menu in Discord or Telegram for the Hermes you run 24/7: switch MCP servers, skills and toolsets on or off, ranked by the tokens each adds to every request; resend the turns a gateway restart or crash killed; set a daily spend limit that blocks new turns; and get Discord replies too long for 8 messages as a .txt file instead of truncated. Owner-only, and menus open only in a DM. Disclosure — writes mcp_servers.<name>.enabled, skills.disabled, agent.disabled_toolsets and its own plugins.entries.hermes-helm.settings in config.yaml through one function that logs old and new values and refuses when the config is managed; stores the text of every top-level user turn, from any sender on any platform and from the CLI, for 7 days (to resend lost turns; subagent turns skipped), tokens and cost per model call, and the change log in plugin-data/hermes-helm/helm.db; writes helm-reply-*.txt into Hermes' document cache for long Discord replies; resends a lost turn with ctx.inject_message only when allow_gateway_injection is on, and Hermes re-checks the allowlist; reads some private Hermes internals (toolset resolution, pricing) behind try/except fallbacks. No network of its own, no shell, no credentials, no telemetry.

phucnhtToolsv0.1.0Updated 3 hours ago

About

One /helm menu in Discord or Telegram for the Hermes you run 24/7: switch MCP servers, skills and toolsets on or off, ranked by the tokens each adds to every request; resend the turns a gateway restart or crash killed; set a daily spend limit that blocks new turns; and get Discord replies too long for 8 messages as a .txt file instead of truncated. Owner-only, and menus open only in a DM. Disclosure — writes mcp_servers.<name>.enabled, skills.disabled, agent.disabled_toolsets and its own plugins.entries.hermes-helm.settings in config.yaml through one function that logs old and new values and refuses when the config is managed; stores the text of every top-level user turn, from any sender on any platform and from the CLI, for 7 days (to resend lost turns; subagent turns skipped), tokens and cost per model call, and the change log in plugin-data/hermes-helm/helm.db; writes helm-reply-*.txt into Hermes' document cache for long Discord replies; resends a lost turn with ctx.inject_message only when allow_gateway_injection is on, and Hermes re-checks the allowlist; reads some private Hermes internals (toolset resolution, pricing) behind try/except fallbacks. No network of its own, no shell, no credentials, no telemetry.

hermes-helm

/helm in Discord or Telegram opens a menu for the Hermes agent you run 24/7:

  • MCP, Skills, Toolsets. Everything installed, ranked by the tokens it adds to every request. Tap items to switch them, or All on / All off, then Done. Skills open by category.
  • Lost turns. Messages a gateway restart or crash killed mid-reply. Tap one to send it again.
  • Long replies. Discord delivers 8 messages per reply and drops the rest. A longer reply comes as its start plus the whole text as a .txt file.
  • Budget. Today's spend and the last 7 days. Tap a daily limit; at the limit Hermes stops taking new turns.

The /helm menu in Discord

Hermes can already change these, but only in the CLI, the desktop app or config.yaml. In chat, /tools, /toolsets, /skills and /plugins are CLI-only, so changing anything from your phone means an SSH session.

Only the owner can use it. Menus open only in a DM with the bot, since in a shared channel anyone on the bot's allowlist could tap them. Typed commands work anywhere.

Install

hermes plugins install phucnht/hermes-helm
hermes plugins enable hermes-helm

Add your user ID, the same one you put in DISCORD_ALLOWED_USERS or TELEGRAM_ALLOWED_USERS, then restart the gateway:

plugins:
  entries:
    hermes-helm:
      allow_gateway_injection: true   # lets Lost turns resend a message by itself
      settings:
        owner_ids: ["123456789012345678"]

Telegram shows 60 commands in its menu and Hermes has more, so /helm may not be listed. Typing it works; to list it first:

platforms:
  telegram:
    extra:
      command_menu:
        priority: [helm]

Typing instead of tapping

Every view also takes text, which is what the CLI and agents use:

| | |
|---|---|
| /helm mcp · skills · toolsets | the ranked list |
| /helm skills pdf web off · mcp all on | switch one, several or all; skills apply on /reload-skills or /new, MCP within a minute, toolsets on the next message |
| /helm lost · lost 2 · lost clear | list, resend, dismiss |
| /helm budget · budget 5 · budget off | spend, set or remove the daily limit |
| /helm modules budget off | hide a whole section (toggle, resume, budget) |

How it counts

Tokens are what each request carries, by Hermes' own rule for /context (bytes ÷ 4). For toolsets and MCP that is the tool list Hermes builds for this platform, so tools it never sends show no number: ones missing their setup, and ones Tool Search defers behind tool_search. For skills it is the index line; a skill's full SKILL.md loads only when used. An MCP server that is off isn't connected, so it shows no number.

Spend prices every model call, main and auxiliary, with your budget.prices first and Hermes' price table second. Hermes prices a ChatGPT/Codex subscription at $0, so on a subscription add a rate if you want a limit:

      settings:
        budget: {daily_usd: 5, warn_pct: 80, prices: {gpt-5.4: [2, 8]}}   # USD per 1M input, output tokens

At warn_pct it posts one warning a day. At the limit it blocks new turns and stops tool calls in the running one. The total resets at local midnight.

Lost turns are saved when a turn starts and closed when it ends. A turn still open when the gateway dies shows up after the restart. Turns you stop with /stop don't. Hermes holds a chat that lost a turn until you send /discard, so after Replay send /discard once and the replayed turn runs. Only text is resent, not attachments.

Long replies are measured the way Discord splits them. The session keeps the shortened text, so on the next turn the agent sees the start and the file path, not the whole reply.

What it writes and stores

  • config.yaml: mcp_servers.<name>.enabled, skills.disabled, agent.disabled_toolsets (the keys hermes mcp, hermes skills config and hermes tools write), and its own plugins.entries.hermes-helm.settings. Each change is logged with its old and new value. If Nix manages your config, it refuses to write.
  • <HERMES_HOME>/plugin-data/hermes-helm/helm.db: the text of every top-level user turn the gateway sees, from any sender on any platform, for 7 days (for lost turns; subagent turns are skipped), tokens and cost per model call, and the change log.
  • <HERMES_HOME>/cache/documents/helm-reply-*.txt (Hermes' document cache): the full text of each Discord reply too long to deliver.
  • Network: none.

Develop

cd tests && python -m pytest          # unit tests with a fake plugin context
hermes plugins doctor . --ci          # load check against Hermes' registries
hermes plugins validate .             # the catalog's admission check

MIT licensed.

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