{"generated_at": "2026-10-26T19:47:13.214176+00:00", "entries": [{"name": "0bull", "repo": "https://github.com/0bull/agent-plugin", "sha": "240890a71715375bc877b238491e414517e9d902", "description": "Control real iPhones rented from 0bull (screenshots, on-screen text, taps, typing, device commands, recorded macros, an on-phone agent) and publish videos to TikTok and YouTube Shorts from them, through the hosted 0bull Streamable HTTP MCP server plus three workflow skills. Portable Agent Plugins v1 package (mcp.json + skills/), no plugin code. Requires a 0bull account with a rented phone and browser OAuth consent (add the server with auth: oauth, then hermes mcp login 0bull); no API key or client secret is stored in the plugin. Posting sends the user's video and caption to TikTok or YouTube through the phone's own apps. Disclosure \u2014 hosted-only connector; screenshots, on-screen text, anything typed on the phone (including passwords or codes you hand the agent) and your videos and captions go to 0bull.net; posts publish publicly to TikTok or YouTube; the server also exposes rental tools that spend money, which the skills tell the model never to call but Hermes does not block.", "maintainer": "0bull", "tier": "community", "category": "tools", "docs_url": "https://github.com/0bull/agent-plugin#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "aave-mcp", "title": "Aave", "repo": "https://github.com/aave/skills", "sha": "7132f6e952f9100f16577c33774a1e63948f7fab", "subdir": "plugins/mcp", "version": "1.0.0", "description": "Aave V3 and V4 through Aave's official MCP server (Streamable HTTP at https://mcp.aave.com, no sign-in, no keys in config): live markets and rates on every chain Aave runs on, wallet positions and health factor, rewards, DAO governance, swap quotes, and unsigned transactions for the user's own wallet to sign. Bundles five workflow skills: safe transactions, deleverage, yield analysis, account activity and transaction confirmation. Agent Plugins v1 package (plugin.json + mcp.json + skills/), configuration only. Disclosure: hosted-only connector with no local code; every tool call goes to mcp.aave.com, which records tool usage for analytics and keeps a wallet address only as a keyed hash. The server never holds keys. Every tool is annotated read-only except submit_signed_order and cancel_order, which relay an order or cancellation the user already signed; the package marks the server untrusted, so Hermes asks before either runs and refuses them in unattended runs. The tool set is served by the remote server at runtime and is not covered by the pinned sha.", "maintainer": "Aave Labs", "tier": "community", "category": "tools", "docs_url": "https://github.com/aave/skills/tree/main/plugins/mcp", "requires_hermes": ">=0.21.6", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "abstract-provider", "title": "Abstract", "repo": "https://github.com/abstractpbc/hermes-abstract-provider", "sha": "e322e42578586af1c376b7e836dfce437308682a", "description": "Abstract model provider (GLM-5.3, DeepSeek-V4-Flash, Kimi-K3) over the OpenAI Responses API with a bundled model catalog. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); requests go to https://api.abstract.inc/v1 through Hermes' own client with ABSTRACT_API_KEY, which Hermes reads; the plugin itself opens no connections, reads and writes no files and starts no processes.", "maintainer": "abstractpbc", "tier": "community", "category": "models", "requires_hermes": ">=0.22.2", "version": "1.0.0", "docs_url": "https://github.com/abstractpbc/hermes-abstract-provider#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ABSTRACT_API_KEY"]}}, {"name": "accent-picker", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "abec9e822a23089943dd1d476a104bf746f19f86", "subdir": "accent-picker", "title": "Accent Picker", "description": "OKLCH accent colour picker for the Hermes Desktop status bar: drag it and the whole theme retints live, with palette commands to reset to the theme default or copy the current colour. A theme-authoring tool; the colour is scratch state and is never persisted. Desktop-only (desktop/plugin.js inside the plugin SDK surface); no agent tools, hooks, middleware or env vars.", "maintainer": "NousResearch", "tier": "official", "category": "desktop", "version": "1.0.0", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/accent-picker", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/abec9e822a23089943dd1d476a104bf746f19f86/assets/accent-picker.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "account-pool", "repo": "https://github.com/roqianjas/hermes-account-pool", "sha": "7a4fc9fd976ed68de9e6f70ba326ef2053741e69", "subdir": "plugins/account-pool", "version": "4.0.2", "title": "Account Pool", "description": "Run several accounts of one provider in Hermes' credential pool: `hermes account <provider> <action>` adds accounts with email verification, shows live usage per account, keeps the least-used account first (fill_first + a 5-minute balance timer over every provider with accounts), parks accounts for hours or on a weekly schedule, shows which bot is on which account and its tokens at API prices, alerts on dead logins, a full pool or a runaway bot, and can start an idle account's 5-hour window with one tiny request (wake). Adapters for anthropic and openai-codex; generic commands for any pool provider. Optional Accounts page in Hermes Desktop. Linux and Windows. Disclosure \u2014 logins stay in Hermes: park holds an entry out of rotation in Hermes' pool (mark_exhausted_and_rotate, reason \"parked\") and unpark is reset_status; the plugin's park list holds labels, ids and times only; expired tokens are refreshed by Hermes (try_refresh_matching); sign-in, in the terminal and on the Desktop page, runs `hermes auth add`; other profiles' accounts are read with read_credential_pool. It uses each account's access token as Hermes stores it for live usage and the email check (api.anthropic.com/api/oauth/usage and /profile, chatgpt.com/backend-api/wham/usage, with the client headers of Hermes' usage fetcher) and for wake (a command, a page button, or the timer after the opt-in `wake auto-on`): one one-word request per account through Hermes' Anthropic client or the Codex Responses endpoint, and the account's model list. Telegram alerts through `hermes send -t telegram` to the bot's home channel or a chat id kept in account-pool.json; no telemetry. Its session tracker, a post_api_request hook, runs in every profile and writes labels, ids and token counts only. `setup` writes plugins.enabled of every profile, links the plugin into every profile, removes the retired account-pool-tracker (`hermes plugins remove`) and, with --timer, adds a systemd user timer (Linux) or a Task Scheduler task for the user (Windows, no admin rights). Runs systemctl --user and notify-send (Linux), schtasks, powershell.exe and taskkill (Windows), hermes config set, hermes auth add/remove, hermes send, hermes plugins remove; reads every profile's config.yaml and state.db (read-only), the gateway config (whether the Telegram bot has a home channel) and /proc on Linux. The command registers in the default profile only and provides no tools. Live usage, the email check and wake send each account's own access token from Hermes' pool straight to its vendor with Claude Code (anthropic) and Codex CLI (openai-codex) client headers. The session tracker reads the running agent's current pool account (label and id only) by scanning Python thread frames for Hermes' private _credential_pool. On the first run after 3.x it moves parked logins from account-pool-parked.json back into Hermes' pool and deletes that file.", "maintainer": "roqianjas", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/roqianjas/hermes-account-pool/blob/7a4fc9fd976ed68de9e6f70ba326ef2053741e69/README.md", "platforms": ["linux", "windows"], "screenshots": ["https://raw.githubusercontent.com/roqianjas/hermes-account-pool/7a4fc9fd976ed68de9e6f70ba326ef2053741e69/docs/screenshots/accounts.png", "https://raw.githubusercontent.com/roqianjas/hermes-account-pool/7a4fc9fd976ed68de9e6f70ba326ef2053741e69/docs/screenshots/report.png", "https://raw.githubusercontent.com/roqianjas/hermes-account-pool/7a4fc9fd976ed68de9e6f70ba326ef2053741e69/docs/screenshots/sessions.png", "https://raw.githubusercontent.com/roqianjas/hermes-account-pool/7a4fc9fd976ed68de9e6f70ba326ef2053741e69/docs/screenshots/alerts.png", "https://raw.githubusercontent.com/roqianjas/hermes-account-pool/7a4fc9fd976ed68de9e6f70ba326ef2053741e69/docs/screenshots/add-account.png", "https://raw.githubusercontent.com/roqianjas/hermes-account-pool/7a4fc9fd976ed68de9e6f70ba326ef2053741e69/docs/screenshots/add-account-codex.png"], "known_issues": ["After installing, run `hermes account <provider> setup` (add --timer for the 5-minute balance timer): it lists the plugin in every profile for the Desktop page and links it into every profile for the session tracker. Coming from 3.x it also removes account-pool-tracker.", "Hermes can let a parked account back into rotation early (`hermes auth reset`, or a Codex quota it sees come back); the next balance run parks it again, and doctor names it until then. A park without --until is held for 30 days, and a balance run renews it once less than 15 days are left, so without the timer it ends after 30 days.", "Windows: tested with a stand-in Task Scheduler and, up to 3.13, with Windows' own Python, cmd.exe and wscript.exe under Wine; not yet on a Windows machine. On Windows the timer runs only while the user is signed in.", "Built for plugins.isolation: in_process (the default). Under host, Hermes skips plugin CLI commands, so `hermes account` and the timer's balance are unavailable.", "Usage comes from undocumented provider endpoints (api.anthropic.com/api/oauth/usage, chatgpt.com/backend-api/wham/usage) that can change or rate-limit without notice; bots are unaffected when they do.", "The Desktop page's sign-in relays `hermes auth add` and has run in sandbox tests (Hermes' real sign-in code, provider calls replaced), not yet with a new account on a real install. The Codex browser sign-in needs the browser on the same computer; when port 1455 is taken, Hermes signs in with a device code instead."], "capabilities": {"provides_tools": [], "provides_hooks": ["post_api_request"], "provides_middleware": [], "requires_env": []}}, {"name": "account-switcher", "repo": "https://github.com/SmelterLabs/hermes-account-switcher", "sha": "f31ad5e715fa32a3c0350d8fcf8ee787b224d105", "subdir": "", "description": "Windows desktop plugin that switches which Codex login and which Claude subscription account every local Hermes profile uses, with one idle-only, verified restart of the gateway (and, on Hermes before 0.22, of Hermes Desktop). Refuses while any profile is busy, restores the previous selection if a step fails, and writes a receipt that says whether the switch took effect. Disclosure \u2014 Windows only. A switch rewrites, through Hermes's own commands, the Codex credential order in every profile's auth.json and the CLAUDE_SUBSCRIPTION_DIRECTSDK_CONFIG_DIR line in every profile's .env, so every profile that has the plugin enabled spends the same selected Codex login and the same Claude login (one Hermes-owned claude-auth folder; no token is copied between profiles). It reads Codex tokens from each profile's auth.json. On Hermes 0.22 and later it stops and restarts the gateway once Hermes's own idle proof and the gateway's drain report idle, and Hermes Desktop stays open and reconnects; on earlier Hermes it also reads the Desktop backends' dashboard session token from their process environment and closes and reopens Hermes Desktop (work started in the seconds after the idle check is cut off). It sends the target Codex token to OpenAI's usage endpoint and Claude login tokens to Anthropic's OAuth profile endpoint (also when the setup screen opens); if the target Claude login has expired it first runs the claude CLI once so the CLI renews its own token, which rotates that login's refresh token. No telemetry and no automatic account rotation.", "maintainer": "SmelterLabs", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/SmelterLabs/hermes-account-switcher#readme", "version": "1.3.2", "platforms": ["windows"], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "acedatacloud-media", "title": "Ace Data Cloud Media", "repo": "https://github.com/AceDataCloud/AceDataCloudMediaHermes", "sha": "8eaebfb86152d754061375de881548bfa096dd2d", "description": "Suno music, Seedance video, HappyHorse (Happy Horse) video, GPT Image images and Nano Banana images by Ace Data Cloud; 17 selectable service toolsets and a Nano Banana image_generate backend. Each generate call spends Ace Data Cloud credits on your ACEDATACLOUD_API_KEY with no Hermes approval prompt; the model can choose costly options (pro models, 4K, up to 4 images), and prompts and reference URLs go to api.acedata.cloud. Google Search and face analysis also spend Credits. Disclosure \u2014 Each generate call spends Ace Data Cloud credits on your ACEDATACLOUD_API_KEY with no Hermes approval prompt, and the model can pick costly options (pro models, 4K, up to 4 outputs); Google Search and face analysis are billed too. Prompts, reference URLs and face images go to api.acedata.cloud. The tools are on wherever you enable their toolsets, including gateways.", "maintainer": "AceDataCloud", "tier": "community", "category": "tools", "version": "2.0.2", "requires_hermes": ">=0.21.6", "image": "https://raw.githubusercontent.com/AceDataCloud/AceDataCloudMediaHermes/8eaebfb86152d754061375de881548bfa096dd2d/assets/catalog.png", "readme": true, "capabilities": {"provides_tools": ["acedatacloud_nano_banana_generate", "acedatacloud_nano_banana_task", "acedatacloud_veo_generate", "acedatacloud_veo_task", "acedatacloud_suno_generate", "acedatacloud_suno_task", "acedatacloud_fish_generate", "acedatacloud_fish_task", "acedatacloud_gpt_image_generate", "acedatacloud_gpt_image_task", "acedatacloud_seedance_generate", "acedatacloud_seedance_task", "acedatacloud_seedream_generate", "acedatacloud_seedream_task", "acedatacloud_happyhorse_generate", "acedatacloud_happyhorse_task", "acedatacloud_qwen_image_generate", "acedatacloud_qwen_image_task", "acedatacloud_google_search_search", "acedatacloud_grok_generate", "acedatacloud_grok_task", "acedatacloud_face_analyze", "acedatacloud_midjourney_generate", "acedatacloud_midjourney_task", "acedatacloud_flux_generate", "acedatacloud_flux_task", "acedatacloud_minimax_generate", "acedatacloud_minimax_task", "acedatacloud_wan_generate", "acedatacloud_wan_task", "acedatacloud_kling_generate", "acedatacloud_kling_task"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ACEDATACLOUD_API_KEY"]}, "docs_url": "https://github.com/AceDataCloud/AceDataCloudMediaHermes/blob/8eaebfb86152d754061375de881548bfa096dd2d/README.md"}, {"name": "acedatacloud", "title": "Ace Data Cloud", "repo": "https://github.com/AceDataCloud/AceDataCloudModelProviderHermes", "sha": "568763ee21fe081562bb9bcd91e7323f8f81d6ff", "image": "https://raw.githubusercontent.com/AceDataCloud/AceDataCloudModelProviderHermes/568763ee21fe081562bb9bcd91e7323f8f81d6ff/assets/catalog.png", "description": "Ace Data Cloud GPT models with streaming and tool calling.", "maintainer": "AceDataCloud", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "version": "1.0.2", "docs_url": "https://github.com/AceDataCloud/AceDataCloudModelProviderHermes/blob/568763ee21fe081562bb9bcd91e7323f8f81d6ff/README.md", "known_issues": ["The model picker currently offers gpt-4.1-mini and gpt-4.1 only."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ACEDATACLOUD_API_KEY"]}}, {"name": "actvox", "title": "ActVox", "repo": "https://github.com/ActVox/actvox-plugins", "sha": "76e394d381c3cf56632d7fd6c91d442c68b181f2", "subdir": "hermes", "version": "0.1.1", "description": "Make Hermes a team member in an ActVox workspace: on a schedule it works the tasks people assign it and answers the comments that @mention it, and submits each task for a person's review. Skills actvox:actvox and actvox:actvox-inbox, a first-turn inbox line (pre_llm_call), /actvox inbox|status, and hermes actvox setup|install-gate. A cron pre-run gate wakes the agent only when the inbox has work, so an empty tick makes no model call. Disclosure \u2014 ActVox is reached only through the user's own actvox MCP server (ctx.call_mcp, needs plugins.entries.actvox.mcp_allowlist) and the user's own actvox CLI (the gate runs `actvox inbox --all --json`); on the first turn of every non-cron session the pre_llm_call hook calls the server's check_inbox (up to 5 s) and adds one line saying how many tasks and mentions wait; the plugin holds and reads no credential and sends no telemetry. `hermes actvox install-gate` writes one file, $HERMES_HOME/scripts/actvox-inbox-gate.py, only on that explicit command and never over a file it did not write; gate state lives in $HERMES_HOME/plugin-data/actvox/. No background work of its own: the cron job runs only after the user creates it, and from then on anyone who can assign Hermes a task or @mention it in your ActVox workspaces decides what an unattended agent run on your host works on, with that job's toolsets (dangerous commands follow approvals.cron_mode, deny by default). Unattended writes need the default trust: full on the actvox server.", "maintainer": "ActVox", "tier": "community", "category": "automation", "docs_url": "https://github.com/ActVox/actvox-plugins/tree/main/hermes", "requires_hermes": ">=0.22.5", "readme": true, "platforms": [], "known_issues": ["The inbox gate needs Node.js and the ActVox CLI (npm i -g @actvox/cli) on the gateway host.", "With plugins.isolation: host, the `hermes actvox` terminal commands are not available."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "adaption", "repo": "https://github.com/adaptionlabs/adaption-hermes-plugin", "sha": "958ad2e9077107be1919a5365541caa4e0acdcc8", "description": "Dataset import, adaptation, augmentation, translation, synthetic generation, and AutoScientist fine-tuning through the hosted Adaption MCP. Portable Agent Plugins v1 package with three workflow skills; the MCP server is added separately with OAuth (or an API key for headless use). Disclosure \u2014 skill-only, no code; the MCP tools call api.prod.adaptionlabs.ai, and launches spend Adaption credits (the skills request a cost estimate first, Hermes does not enforce it). Hermes does not prompt before those tools unless the server is configured with trust: untrusted.", "maintainer": "adaptionlabs", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/adaptionlabs/adaption-hermes-plugin#readme", "version": "0.1.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "adaptive-inference-routing", "repo": "https://github.com/midhatn/adaptive-inference", "sha": "d6f4e201ba28602189872746922e527c58ed0cbd", "subdir": "plugins/hermes", "title": "Adaptive Inference Routing", "description": "Opt-in background scheduling for host-known delegated sessions, supported cron execution and explicit worker profiles using an existing Adaptive Inference gateway. Interactive and explicitly classified requests retain their routing; model, tools, prompts, output limits and credentials are unchanged. Disclosure: adds only X-Adaptive-Class on an exactly configured chat-completions endpoint. No network calls, file access, processes, telemetry or credential handling in plugin code. Uses a bounded in-memory session index. Cron detection requires the newer public execution-identity capability; auxiliary routing is an explicit provider configuration, not an auxiliary middleware claim.", "maintainer": "midhatn", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/midhatn/adaptive-inference/blob/d6f4e201ba28602189872746922e527c58ed0cbd/plugins/hermes/README.md", "version": "0.1.0", "capabilities": {"provides_tools": [], "provides_hooks": ["subagent_start", "subagent_stop", "post_compaction"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "adkit", "title": "AdKit", "repo": "https://github.com/adkit/ads-mcp", "sha": "97f9a776fd317329f544d10ce22792eb4b115c62", "subdir": "hermes", "version": "1.0.0", "description": "Manage ads on Google Ads, Meta Ads (Facebook, Instagram), TikTok, LinkedIn, Microsoft, Reddit and X Ads through the hosted AdKit MCP: launch campaigns, ad sets and ads as drafts, pull performance reports with breakdowns, browse competitor ads in the Meta, Google and LinkedIn ad libraries, and generate ad creatives. Built for people who run several ad accounts. Agent Plugins v1 package (plugin.json + mcp.json), configuration only; OAuth uses pinned mcp-remote@0.1.49 over npx stdio, so Node.js 20.18.1+ and npm are required. Disclosure \u2014 creates and edits real ad campaigns that spend your ad budgets (creates are drafts until you approve publishing); the package marks the adkit server untrusted, so Hermes asks before every tool the server does not annotate as read-only and refuses them in cron and headless runs. Every tool call goes to mcp.adkit.so; sign-in runs npx mcp-remote@0.1.49 from the npm registry, which stores its OAuth tokens in ~/.mcp-auth. The tool set is served by the remote server at runtime and is not covered by the pinned sha.", "maintainer": "AdKit", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/adkit/ads-mcp/tree/main/hermes#readme", "image": "https://raw.githubusercontent.com/adkit/ads-mcp/97f9a776fd317329f544d10ce22792eb4b115c62/assets/logo.png", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "adspirer", "repo": "https://github.com/Adspirer/adspirer-hermes-plugin", "sha": "4688c38295a7b86f8119d7a0ecc09cd0b83a2730", "description": "Create, analyze, and optimize campaigns across Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Amazon Ads, ChatGPT Ads, and Microsoft Ads through the hosted Adspirer MCP. Portable Agent Plugins v1 package with fourteen paid-media workflow skills and approval safeguards; OAuth uses pinned mcp-remote@0.1.49 over npx stdio, so Node.js 20.18.1+ and npm are required. Disclosure \u2014 creates and edits real ad campaigns that spend your ad budgets; confirm-before-spend is enforced by skill instructions, not by Hermes.", "maintainer": "Adspirer", "tier": "community", "category": "tools", "requires_hermes": ">=0.20", "docs_url": "https://github.com/Adspirer/adspirer-hermes-plugin#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/Adspirer/adspirer-hermes-plugin/4688c38295a7b86f8119d7a0ecc09cd0b83a2730/assets/icon.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "advanced-delegation", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "e404b6816b20237a82f6fbe2749b5a576cf75dba", "subdir": "advanced-delegation", "title": "Advanced Delegation", "description": "Two extra delegation modes for `delegate_task`, next to the built-in default. Model routes (`delegation.backend: model_map`): the agent picks a named model route per subagent from a list you define (e.g. fast, deep, local). Profile routes (`delegation.backend: profile_routes`): the agent runs a subagent as one of your Hermes profiles, with that profile's own model, credentials, skills and SOUL.md. Only route names and their one-line descriptions reach the model. Adds `hermes delegation config` (pick the mode and edit its routes; `--show` prints the setup) and the `/delegation` slash command (save a mode for the next session, or `--now` to apply it to the current chat). Needs Hermes 0.22.5 or newer, the first release with pluggable delegation providers; Hermes 0.22.0 to 0.22.4 refuses to install it, and on a core older than 0.22.0 it installs, logs one warning and does nothing. Disclosure \u2014 no Python dependencies and no network or model calls of its own; subagents run through core's `delegate_task` on the routes you configured. Writes only `delegation.backend` and `delegation.backends.*` (model_map / profile_routes) in the active profile's config.yaml, through core's config writer. A model route's optional `api_key` is stored in config.yaml in plain text (`provider:` keeps keys in .env / auth.json). Listing a profile under profile routes lets this profile's subagents use that profile's credentials, SOUL.md and terminal policy.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.22.5", "version": "1.0.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e404b6816b20237a82f6fbe2749b5a576cf75dba/assets/advanced-delegation.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/advanced-delegation", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "advisor", "repo": "https://github.com/ljubomirj/hermes-advisor-plugin", "sha": "37e55975611d38212cf082029ece504f207df656", "version": "1.2.0", "title": "Advisor", "description": "A persistent second model reviews every agent turn. After each turn the plugin hands the transcript to the model you nominate as advisor and delivers its findings as advice in the same session: [NIT], [CONCERN] or [BLOCKER] notes, held back until a later review raises the same point again, so the primary agent is not interrupted by a one-off remark. It reviews, it does not act: the advisor never edits files, calls tools or changes session state, and only reads the turn transcript. This is the backend counterpart of MoA \u2014 one extra model, not a committee: the primary agent does the work and the advisor checks it. Port of pi-omplike-advisor (Petr Baudis / pasky), itself rooted in oh-my-pi (Can Boluk). Runs inside the plugin host with no dependencies beyond Hermes itself. Disclosure \u2014 once the plugin is enabled, every completed turn costs one extra completion through Hermes's ctx.llm to the advisor model (the primary agent's provider unless you allow a provider/model override under plugins.entries.advisor.llm), carrying the user message, the final reply, every tool call and tool result in the session so far (each clipped to 500 characters) and the contents of a WATCHDOG.md in Hermes's working directory if one exists; deliverable advice is queued into the CLI session as a user-role message, which starts or interrupts an agent turn; state is kept under $HERMES_HOME/advisor/ and reviews run on one background thread; no other network, files or credentials.", "maintainer": "ljubomirj", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/ljubomirj/hermes-advisor-plugin/blob/37e55975611d38212cf082029ece504f207df656/README.md", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": ["post_llm_call", "on_session_finalize"], "provides_middleware": [], "requires_env": []}, "known_issues": ["Every reviewed turn costs one extra completion on the advisor model. Reviews run on a single worker in the background after the hook returns (the hook itself never blocks turn finalization), so a long advisor call delays advice, not the agent.", "Advice is injected into the live conversation with ctx.inject_message, which the interactive CLI provides. On gateway surfaces (Telegram, Slack, ...) the review still runs and its notes are held, but there is no in-session place to inject them, so delivery is CLI-shaped.", "Concerns are only delivered once a later review repeats them (hold-and-reconfirm), so a genuine one-off concern can stay silent by design. /advisor test <severity> <note> injects a synthetic note to see the delivery path.", "The cross-provider trust gate is conservative: point the advisor at a provider different from the primary agent's, or accept the default inherit-primary behaviour.", "The interactive provider/model picker (/advisor model with no argument) needs PluginContext.request_model_selection, and the status-bar badge needs ctx.register_status_segment. Where a build lacks those newer seams the plugin still loads and the text commands keep working (/advisor provider <name>, /advisor model <name>).", "State lives in $HERMES_HOME/advisor/state.json, per profile."]}, {"name": "adwhispr", "repo": "https://github.com/adwhispr/adwhispr-hermes-plugin", "sha": "80fd0e8fd93fe6207e6e9dd288811be9fe695bc2", "description": "Research competitor ads, clone the winners, and run campaigns through the hosted AdWhispr MCP. Finds brands verified to be advertising in a niche right now, their longest-running Meta and TikTok ads, Instagram content and Google keyword data; clones a proven ad into a finished image or AI video for your brand (free script approval before any credit is charged); and launches paused campaigns on Meta, Google, TikTok, X and ChatGPT Ads. Portable Agent Plugins v1 package with twenty-four workflow skills; OAuth uses pinned mcp-remote@0.1.49 over npx stdio, so Node.js 20.18.1+ and npm are required. Disclosure \u2014 creates and edits real ad campaigns that spend your ad budgets (always created paused, two-step confirm server-side) and renders videos that use paid credits; the AdWhispr server is marked untrusted, so Hermes asks before every write or spend tool and refuses them in cron and headless runs. Sends research queries and your brand assets to adwhispr.com; sign-in is OAuth through npx mcp-remote@0.1.49.", "maintainer": "AdWhispr", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/adwhispr/adwhispr-hermes-plugin#readme", "version": "1.0.1", "image": "https://raw.githubusercontent.com/adwhispr/adwhispr-hermes-plugin/80fd0e8fd93fe6207e6e9dd288811be9fe695bc2/assets/icon.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "afterforge", "repo": "https://github.com/ussyverse/afterforge", "sha": "067a739e5ab64097140c5200bde2cc5d52662ea5", "description": "Local-first regression workbench turning agent failures and corrections into reviewed, evidence-backed checks.", "maintainer": "ussyverse", "tier": "community", "category": "tools", "docs_url": "https://github.com/ussyverse/afterforge/blob/067a739e5ab64097140c5200bde2cc5d52662ea5/README.md", "platforms": ["linux"], "capabilities": {"provides_tools": ["fixlab_status", "fixlab_scan", "fixlab_list_cases", "fixlab_inspect_case", "fixlab_review_case", "fixlab_build_regression", "fixlab_verify_regression", "fixlab_report"], "provides_hooks": ["post_tool_call", "on_session_end", "pre_verify"], "provides_middleware": [], "requires_env": []}}, {"name": "agent-analytics", "repo": "https://github.com/Agent-Analytics/agent-analytics-hermes-plugin", "sha": "63f11d3669330e40dad977b7d32f9b69e69a9fb8", "description": "Dashboard-only read plugin for Agent Analytics inside Hermes.", "maintainer": "Agent-Analytics", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Agent-Analytics/agent-analytics-hermes-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agent-batch", "repo": "https://github.com/raaaas/hermes-agent-batch", "sha": "064afc5dba8869df703ba055aa2760730c0d30dc", "subdir": "plugin", "description": "Parallel AI task orchestrator. Paste a task list into the desktop panel; Hermes phases it into dependency-ordered groups through the agent_batch_plan / agent_batch_phase tools (or you group it yourself in one click), then each phase dispatches one independent coding agent per task to a GitHub Actions workflow in a repo you name \u2014 own branch, own PR \u2014 and the panel tracks the runs and the PRs. GITHUB_TOKEN is the only required credential; AGENT_BATCH_REPO, AGENT_BATCH_WORKFLOW, AGENT_BATCH_MODEL and AGENT_BATCH_STATE are optional (the last is a directory override for the plan file, not a secret) and each can be set per plan in the panel instead. Disclosure \u2014 Hermes can read and rewrite the stored phase plan through the agent_batch_plan / agent_batch_phase tools, but dispatch is always a confirmed click in the panel. Each dispatch fires a GitHub workflow_dispatch with your GITHUB_TOKEN (Actions + pull-requests write) on the repo you name. The workflow you copy into that repo installs third-party coding-agent CLIs (cline by default; the others are unpinned npm packages) and runs them unattended, with auto-approve / skip-permissions, repo write access and your provider secrets. They push real branches and open real PRs, and your task text and repository code go to that runner's model vendor. LLM cost belongs to the runner: cline spends Cline Credits or a BYOK key, opencode free models need its zen relay, kilo needs an active Kilo Go subscription (keyless CI runs fail), and claude-code / codex / dsh need their own keys.", "maintainer": "raaaas", "tier": "community", "category": "automation", "docs_url": "https://github.com/raaaas/hermes-agent-batch", "capabilities": {"provides_tools": ["agent_batch_plan", "agent_batch_phase"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GITHUB_TOKEN"]}, "requires_hermes": ">=0.21.3", "version": "1.0.0"}, {"name": "agent-hint", "repo": "https://github.com/dachaimahogany/hermes-agent-hint", "sha": "5601d2353529352fb89c5ad85a1a9d3a68150cbb", "description": "Give the inference engine behind each request a standard, machine-readable view of the agent session that produced it. Injects an X-Agent-Hint header (base64url JSON: session identity and call index, lifecycle state, soft priority, a cache-pinning hint, optional measured statistics) on main LLM requests, and can emit session lifecycle events out of band as local ndjson or as POSTs to a URL you configure. Request bodies are never modified, and nothing is added or sent until the plugin is enabled. Lets a scheduler pin a session to the instance already holding its KV cache, or rank a user-blocked session above background work, without teaching the engine anything about the client. Disclosure \u2014 when enabled, every main LLM request carries an X-Agent-Hint header (base64url JSON with the session id, call index, lifecycle state, priority and cache hints) to whatever provider is configured, not only hint-aware engines; with status_sink: http the same session events and usage/latency statistics are POSTed to the status_url you set, and ndjson writes them under $HERMES_HOME.", "maintainer": "dachaimahogany", "tier": "community", "category": "general", "docs_url": "https://github.com/dachaimahogany/hermes-agent-hint#readme", "version": "0.5.1", "requires_hermes": ">=0.21.6", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start", "on_session_end", "on_session_finalize", "pre_tool_call", "post_tool_call", "pre_approval_request", "post_approval_response", "subagent_start", "subagent_stop", "post_api_request"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "agent-hold-em", "repo": "https://github.com/tony-simons-aiowa/agent-hold-em", "sha": "dcd3b8d265778a70e6e671467cf2e6ec3cf21f42", "subdir": "package/agent-hold-em", "version": "1.0.0", "description": "No-Limit Texas Hold 'Em for Hermes Desktop: play with three isolated Hermes profile agents using play chips only. Agent decisions use configured models and may consume provider tokens; this is a local game, not gambling software. Disclosure \u2014 each opponent is a zero-tool Hermes agent run in-process under the local Hermes profile you select for it, using that profile's configured provider credentials and spending its tokens; reads every local profile's name, model and avatar for the picker; stores the table (including hole cards) in plugin-data/agent-hold-em/table.json.", "maintainer": "tony-simons-aiowa", "tier": "community", "category": "desktop", "screenshots": ["https://raw.githubusercontent.com/tony-simons-aiowa/agent-hold-em/dcd3b8d265778a70e6e671467cf2e6ec3cf21f42/assets/catalog-setup.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agent-importers", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "b5932f1b03ccd0f7738cb4975318df990408f3a3", "subdir": "agent-importers", "description": "`hermes import-agent`: import an OpenClaw (~/.openclaw, or legacy ~/.clawdbot / ~/.moltbot), Claude Code (~/.claude), Codex CLI (~/.codex) or Cursor (~/.cursor) setup into Hermes in one command; always previews first and asks before applying. Claude Code / Codex / Cursor: instructions, Cursor rules and memories become memory entries, Bash permission rules become command allow/deny lists, MCP servers land in config.yaml, skills are copied, and `--sync` re-imports sources that changed. OpenClaw (core's former `hermes claw migrate`; the plugin keeps that spelling, `hermes claw cleanup` and the openclaw-migration skill): persona, memories, skills, model and messaging settings, MCP servers and agent behaviour. Formerly built into Hermes core; `hermes setup` offers to install it when it finds one of these agents, and profiles with a registered sync source are migrated automatically. Disclosure \u2014 no Python dependencies, no network calls and no model calls. Claude Code / Codex / Cursor: reads those agents' local config trees (never their credential files; secret-looking MCP env vars and headers are stripped and listed) and writes only into the active profile (memories/MEMORY.md with a backup, config.yaml, skills/ and import-sync.json). OpenClaw: reads the OpenClaw dir (openclaw.json, its .env, workspace files such as SOUL.md / MEMORY.md / USER.md, skills); API keys and bot tokens come over only with --migrate-secrets (allowlisted names, shown in the preview). It writes into the active profile (config.yaml, .env, SOUL.md, memories/, skills/openclaw-imports/, a migration/openclaw/<time>/ report with item backups, and a backups/pre-migration-*.zip restore point), plus a workspace dir only when --workspace-target names one. It runs local pgrep / systemctl / tasklist checks to warn when OpenClaw or a Hermes gateway is still running, and `hermes claw cleanup` renames the OpenClaw dir to *.pre-migration after a confirmation.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.21.6", "version": "1.1.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/b5932f1b03ccd0f7738cb4975318df990408f3a3/assets/agent-importers.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/agent-importers", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agent-janitor", "version": "0.3.1", "repo": "https://github.com/ZidoCode/agent-janitor", "sha": "f8306948aa8edd0f7197dc9890ccd4fa19dd7aee", "description": "Process hygiene for agent machines \u2014 finds the background processes your agent left behind (dev servers, tunnels, watchers, nohup jobs) using evidence signals (ppid=1 reparent, port listener via /proc/net/tcp{,6}, dev-server traits, TTL exceeded) and attributes them to the originating tool call via agent-ledger's ledger when present. Dry-run by default: nothing is killed until you write policy_mode=enforce; system daemons and host/VM management agents are exempt by name, a user-editable whitelist covers your real infrastructure, and each kill re-reads the cmdline first (SIGTERM, 2s, SIGKILL with PID-reuse check). stdlib-only, fails open. Disclosure \u2014 inside Hermes it only appends terminal commands that look like they start background work (first 300 characters, which can include inline secrets) to plugin-data/agent-janitor/spawns.jsonl, and reads agent-ledger's ledger.db read-only when present. Killing is a separate CLI you run yourself (janitor_cli.py sweep): after you write \"enforce\" to plugin-data/agent-janitor/policy_mode it sends SIGTERM then SIGKILL to every process re-parented to PID 1 for over a minute that is not on its built-in exempt list or your whitelist, whoever started it (for example a tmux server or a nohup'd hermes gateway), including other users' processes when run as root. Dry-run first; the dry-run list is the kill list.", "maintainer": "ZidoCode", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/ZidoCode/agent-janitor#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "agent-ledger", "version": "0.4.4", "repo": "https://github.com/ZidoCode/agent-ledger", "sha": "e9eba114cbebd9c4f55a90efe2eb3e1afe70a336", "description": "Write-ahead ledger for agent side effects, with an OWASP Agentic Top 10 posture scorer. Disclosure \u2014 records the arguments (up to 4000 chars: terminal commands, file contents, MCP args) and a 300-char result digest of every state-changing tool call in a local plaintext SQLite ledger under HERMES_HOME/plugin-data/agent-ledger/ that is never pruned; injects a warning listing this session's unconfirmed calls into the next turn's context; an optional policy engine (off by default; you add policy.json and set policy_mode) can refuse matching tool calls before they run; the optional posture_daily.py script, run from your own cron, sends a score summary to Telegram with the bot token you give it.", "maintainer": "ZidoCode", "tier": "community", "category": "tools", "requires_hermes": ">=0.19.0", "docs_url": "https://github.com/ZidoCode/agent-ledger#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_llm_call", "on_session_start"], "provides_middleware": [], "requires_env": []}}, {"name": "agent-log", "repo": "https://github.com/PixelAlchemist4/hermes-agent-log-plugin", "sha": "e58702e60b2697c9d1dc3daa9eb65ac1fcc50560", "description": "Readable agent.log viewer in the desktop status bar \u2014 a live, colour-coded feed of API calls, tools, turns, fallbacks, warnings and errors, with per-call tokens/latency/cache, stats tables, and a single-dot alert for genuine non-self-healing faults. Follows app theme/language.", "maintainer": "PixelAlchemist4", "tier": "community", "category": "desktop", "docs_url": "https://github.com/PixelAlchemist4/hermes-agent-log-plugin#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agent-mail-gateway", "repo": "https://github.com/dominikamann/agent-mail-gateway", "sha": "90c444bd7c0d2bf1955b8844ba3cf68d95f7f7fb", "subdir": "integrations/hermes/agent-mail-gateway", "description": "Email for your agents through a self-hosted Agent Mail Gateway: the agent-mail skill teaches reading, searching, replying and forwarding mail, attachments, sending and answering calendar invitations, how to react when the gateway's pre-send review or the operator's policies stop a message, and prompt-injection rules for email content. Portable Agent Plugins v1 package (skills/ only, no code, no mcp.json): you connect the gateway yourself as a remote MCP server in mcp_servers with your own key; the gateway enforces per-mailbox sender/recipient allow lists.", "maintainer": "dominikamann", "tier": "community", "category": "tools", "docs_url": "https://github.com/dominikamann/agent-mail-gateway/blob/main/docs/hermes.md", "version": "0.3.3", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agent-run-debugger", "repo": "https://github.com/Sahil-SS9/agent-run-debugger", "sha": "f4eefefb47372afedee56618c89c6fbc5024ca2a", "description": "Local-first evidence debugger for failed, stalled or expensive agent runs: import one explicitly selected trace and get a deterministic timeline, observed failure points, ranked hypotheses that cite their evidence, missing-evidence gaps and an inert replay of the recorded run. Disclosure \u2014 imports a trace file explicitly named by you or by the model through the rundebug_import tool and writes only under the active profile's plugin-data directory, with redaction before the store, the journal and exports; replay executes nothing (no subprocess, no network connection, no live database); no telemetry, no background capture, no stored credentials, no third-party network calls and no self-updater; the export command is operator-CLI-only and is not exposed through tool, slash or gateway routes.", "maintainer": "Sahil-SS9", "tier": "community", "category": "tools", "docs_url": "https://github.com/Sahil-SS9/agent-run-debugger", "version": "0.1.1", "platforms": [], "capabilities": {"provides_tools": ["rundebug_import", "rundebug_timeline", "rundebug_explain", "rundebug_replay", "rundebug_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agent-station", "repo": "https://github.com/thealps01-netizen/agent-station", "sha": "ce8e97d25a3de6894e7f6066977c6346120b655b", "subdir": "", "description": "Read-only Hermes Desktop page for the focused chat: the main agent and its subagents, background commands and a Replay of file edits. Disclosure \u2014 its local dashboard routes serve the file-edit contents (Replay) and background-command output tails of the chat you view to the Desktop page; reads state.db read-only.", "title": "Agent Station", "maintainer": "thealps01-netizen", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.7", "version": "3.0.3", "docs_url": "https://github.com/thealps01-netizen/agent-station#readme", "screenshots": ["https://raw.githubusercontent.com/thealps01-netizen/agent-station/ce8e97d25a3de6894e7f6066977c6346120b655b/Docs/images/agents.png", "https://raw.githubusercontent.com/thealps01-netizen/agent-station/ce8e97d25a3de6894e7f6066977c6346120b655b/Docs/images/commands.png", "https://raw.githubusercontent.com/thealps01-netizen/agent-station/ce8e97d25a3de6894e7f6066977c6346120b655b/Docs/images/replay.png"], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agent_memory_es", "repo": "https://github.com/patrykkopycinski/hermes-plugin-agent-memory-es", "sha": "e9469ee90396eae9db4a6b2526b5a0bc3d37dd62", "description": "Self-owned long-term memory backed by the agent-memory-es service (Elasticsearch). Three agent tools \u2014 recall, retain, reflect \u2014 over episodic/ semantic/procedural tiers with hybrid BM25+kNN recall and server-enforced private/team/common visibility. Requires a running agent-memory-es instance. Disclosure \u2014 each user prompt (as a recall query), each user message and Hermes memory writes are sent to the agent-memory-es service at AMES_SERVICE_URL (default localhost:8123) with AMES_SERVICE_KEY; the model may store facts in shared team/common visibility tiers.", "maintainer": "patrykkopycinski", "tier": "community", "category": "memory", "requires_hermes": ">=0.19", "version": "0.1.0", "docs_url": "https://github.com/patrykkopycinski/hermes-plugin-agent-memory-es#readme", "homepage_url": "https://patrykkopycinski.github.io/hermes-plugin-agent-memory-es/", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["agent_memory_recall", "agent_memory_retain", "agent_memory_reflect"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["AMES_SERVICE_URL", "AMES_SERVICE_KEY"]}}, {"name": "agentchat", "repo": "https://github.com/agentchatme/agentchat-hermes", "sha": "8322d5c97fc81b1493c2ccfc83c19cee03173196", "description": "AgentChat \u2014 peer-to-peer messaging for AI agents. Owns its own WebSocket; pokes the agent on inbound; the agent decides whether to reply. Send is a tool call, never automatic. Bundles the etiquette skill.", "maintainer": "agentchatme", "tier": "community", "category": "platform", "docs_url": "https://github.com/agentchatme/agentchat-hermes#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agentplaybooks-memory", "repo": "https://github.com/matebenyovszky/agentplaybooks", "sha": "f31e9c3af6520cebda1c0712447b4b487ffc12a7", "subdir": "packages/hermes-memory/agentplaybooks", "description": "Private AgentPlaybooks memory for Hermes: bounded keyword recall across personal and team sources, exact native memory-write mirroring, archive and history. Disclosure \u2014 keywords derived from each turn's query are sent to the configured AgentPlaybooks service for recall from your personal and configured team playbooks; explicit native memory writes are mirrored there. Defaults to agentplaybooks.ai over HTTPS; localhost HTTP is supported, and remote intranet HTTP requires an explicit opt-in that sends the API key unencrypted. Team and shared playbooks are configured explicitly: the agent can write, archive and permanently delete entries in configured team playbooks (shared playbooks are read-only), and teammates' entries are recalled into context.", "maintainer": "matebenyovszky", "tier": "community", "category": "memory", "requires_hermes": ">=0.22.4", "version": "0.3.0", "docs_url": "https://github.com/matebenyovszky/agentplaybooks/tree/f31e9c3af6520cebda1c0712447b4b487ffc12a7/packages/hermes-memory/agentplaybooks", "image": "https://raw.githubusercontent.com/matebenyovszky/agentplaybooks/f31e9c3af6520cebda1c0712447b4b487ffc12a7/public/plugin-catalog/hermes-memory.png", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["AGENTPLAYBOOKS_MEMORY_API_KEY"]}}, {"name": "agentplaybooks-tools", "repo": "https://github.com/matebenyovszky/agentplaybooks", "sha": "f31e9c3af6520cebda1c0712447b4b487ffc12a7", "subdir": "packages/hermes-portable/agentplaybooks-tools", "description": "Connect AgentPlaybooks skills and hosted MCP/OpenAPI tools to Hermes, with guided setup, profile selection, permission diagnostics and an authenticated MCP check. Requires Node.js 20+ and @agentplaybooks/cli@0.7.0; the CLI is installed separately. Disclosure \u2014 skill-only; the separately installed apb CLI does the work. `apb hermes setup --apply` restores complete skill trees into the chosen project and edits the selected Hermes profile's config.yaml to register those skills and a hosted playbook MCP endpoint. Local writes require --apply; setup also probes MCP initialization and tool listing using a scoped key from the process environment, without invoking tools. `doctor` checks profile credential variable names without exposing their values. Hosted operations contact agentplaybooks.ai (or an explicitly configured service); skill restore uses `apb login`, and `apb push --apply` uploads project configuration (secret references, not values).", "maintainer": "matebenyovszky", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.4", "version": "0.2.0", "docs_url": "https://github.com/matebenyovszky/agentplaybooks/tree/f31e9c3af6520cebda1c0712447b4b487ffc12a7/packages/hermes-portable/agentplaybooks-tools", "image": "https://raw.githubusercontent.com/matebenyovszky/agentplaybooks/f31e9c3af6520cebda1c0712447b4b487ffc12a7/public/plugin-catalog/hermes-tools.png", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "agentvault", "title": "Agent Vault", "repo": "https://github.com/synnada-ai/agentvault-plugins", "sha": "6e0e3ded804cefb19b362736e5818c99cc061d48", "subdir": "plugins/hermes", "version": "0.1.1", "description": "Search archived coding conversations and retrieve exact session revisions through the separately installed Agent Vault macOS app. Launches the app's existing MCP server through sh; reads the authorized archive through its local daemon. Vault handles storage-provider traffic. No bundled binaries, telemetry, credential-file reads, self-updater, or new background service. Disclosure \u2014 launches the separately installed Agent Vault app's own bundled Node MCP server (/Applications/Agent Vault.app or VAULT_APP_PATH) through sh with your VAULT_MCP_TOKEN binding token; that server code ships with the app, not in this repository. Its tools return archived conversations from Cursor, Codex, Claude Code and Hermes stored under ~/.vault (or VAULT_HOME) into the model's context, which is sent to your model provider. The app handles its own storage-provider traffic; the plugin adds no telemetry, network calls, credential-file reads or background service.", "maintainer": "synnada-ai", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.4", "docs_url": "https://github.com/synnada-ai/agentvault-plugins/blob/6e0e3ded804cefb19b362736e5818c99cc061d48/plugins/hermes/README.md", "readme": true, "platforms": ["macos"], "known_issues": ["Requires the separately installed, running Agent Vault app and an authorized Hermes binding.", "Existing mcp_servers.vault configuration takes precedence over the plugin server."], "capabilities": {"provides_tools": ["mcp__vault__search_sessions", "mcp__vault__get_session"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["VAULT_MCP_TOKEN"]}}, {"name": "agentwalletapi", "repo": "https://github.com/openclawcash/agentwalletapi-hermes", "sha": "ae547a9c51dfc6060fe2441411f9ec846250ef75", "version": "1.31.0", "image": "https://raw.githubusercontent.com/openclawcash/agentwalletapi-hermes/ae547a9c51dfc6060fe2441411f9ec846250ef75/assets/catalog-banner.png", "subdir": "agentwalletapi", "description": "OpenClawCash managed EVM and Solana wallets for AI agents \u2014 thin bridge to the OpenClawCash agent API. Disclosure \u2014 payments plugin for the OpenClawCash custodial wallet service (openclawcash.com); the model can create wallets and send EVM/Solana transfers from wallets reachable by OPENCLAWCASH_AGENT_KEY with no Hermes confirmation prompt; tool arguments go to openclawcash.com, and wallet_create also sends OPENCLAWCASH_EXPORT_PASSPHRASE to that API.", "maintainer": "openclawcash", "tier": "community", "category": "tools", "docs_url": "https://openclawcash.com/mcp", "platforms": [], "capabilities": {"provides_tools": ["agentwalletapi_wallets_list", "agentwalletapi_wallet_get", "agentwalletapi_wallet_rename", "agentwalletapi_wallet_create", "agentwalletapi_transfer_send"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPENCLAWCASH_AGENT_KEY"]}}, {"name": "agora", "repo": "https://github.com/yzy806806/agora", "sha": "4e06ea3daa38aabf280483a91bbba64315927369", "description": "Self-driving multi-agent development team. Role-based workers (architect, developer, reviewer, tester, researcher, writer, devops) are each a real Hermes profile with its own SOUL.md and skills; they discuss and vote on decisions, and the adopted conclusion is executed by the same team. A \"leader\" profile chairs the discussions and a heartbeat cron wakes it to assess state, unblock workers and plan the next phase. Discussion and execution share one board: a motion is a sub-task of a per-project team channel task, speech and votes are `[agora:msg]` comments, the conclusion is written to task.result, and an adopted conclusion becomes execution tasks parented to the motion so context reaches workers through Hermes' own parent handoff. Ships 20 tools, 3 kanban lifecycle hooks, a dashboard tab and an `hermes agora` CLI; installing writes nothing \u2014 the three bundled skills are deployed by an explicit `hermes agora setup`. Disclosure \u2014 creates a Hermes profile per worker by asking core to provision it (`hermes profile create --clone`, which copies config.yaml and .env into the new profile as owner-only files, never symlinks to the real credentials); spawns `hermes -p <profile> chat -Q -q` subprocesses to speak in discussions and to run dispatched tasks, which execute as full agents with that profile's toolset, including terminal and file writes inside the project workdir. Those subprocesses receive `--yolo --accept-hooks` ONLY when the project opted in via `agora_start_project(allow_unattended=True)`; the default is off, so a freshly installed team can read, discuss and plan but its flagged writes and shell commands fail closed. Also reads and writes the kanban database (tasks, task_comments, task_events, task_runs, task_links) restricted to its own project boards, including a persistent team-channel task pinned in `scheduled` status, and deletes a project's own tasks when it stops or completes; registers one recurring cron job and writes its runner script to HERMES_HOME/scripts/leader_heartbeat.sh; writes AGENTS.md into the configured project workdir; deploys three bundled skills into HERMES_HOME/skills/collaboration/; and serves a dashboard tab plus REST routes through the Hermes dashboard. No network egress of its own \u2014 model calls happen inside the spawned Hermes subprocesses under the operator's own provider credentials.", "maintainer": "yzy806806", "tier": "community", "category": "automation", "requires_hermes": ">=0.20", "docs_url": "https://github.com/yzy806806/agora#readme", "version": "2.0.12", "platforms": [], "readme": true, "capabilities": {"provides_tools": ["agora_start_project", "agora_stop_project", "agora_project_status", "agora_update_project", "agora_create_task", "agora_close_task", "agora_raise_motion", "agora_get_messages", "agora_get_result", "agora_list_motions", "agora_close_motion", "agora_message", "agora_read_chat", "agora_create_worker", "agora_list_workers", "agora_remove_worker", "agora_list_templates", "agora_create_team", "agora_list_teams", "agora_remove_team"], "provides_hooks": ["kanban_task_completed", "kanban_task_claimed", "kanban_task_blocked"], "provides_middleware": [], "requires_env": []}}, {"name": "ai-subscriptions", "repo": "https://github.com/rahuloruganti/hermes-ai-subscriptions", "sha": "b59e286ea1d5eaae3ebdddc056f6b5307cbfd6bf", "subdir": "catalog", "version": "0.3.5", "title": "AI Subscriptions", "description": "Your AI subscriptions and token usage in Hermes Desktop. A page with Overview, Usage and Plans tabs, plus a status-bar chip where you pick which subscriptions to keep. Quota comes from Hermes's own model.options and usage.bars RPCs; the page polls Hermes' cached windows (Hermes refreshes them in its own background threads) and only its Refresh button asks for an explicit refresh; token usage covers Hermes, Claude Code and the Grok CLI, clicking a day shows that day's per-source, per-model and hourly breakdown, and measured tokens per second are shown per model, per day and overall. Disclosure: read-only reads outside the plugin's data - Hermes state.db and models_dev_cache.json, ~/.claude/projects/**/*.jsonl and ~/.grok/logs/unified.jsonl plus ~/.grok/sessions/*/*/summary.json (token counts only). No credential, .env or auth.json reads, no network calls, no shell commands, no background processes, no telemetry.", "maintainer": "rahuloruganti", "tier": "community", "category": "desktop", "docs_url": "https://github.com/rahuloruganti/hermes-ai-subscriptions#readme", "requires_hermes": ">=0.22.2", "screenshots": ["https://raw.githubusercontent.com/rahuloruganti/hermes-ai-subscriptions/b59e286ea1d5eaae3ebdddc056f6b5307cbfd6bf/assets/plans-and-picker.png", "https://raw.githubusercontent.com/rahuloruganti/hermes-ai-subscriptions/b59e286ea1d5eaae3ebdddc056f6b5307cbfd6bf/assets/usage.png", "https://raw.githubusercontent.com/rahuloruganti/hermes-ai-subscriptions/b59e286ea1d5eaae3ebdddc056f6b5307cbfd6bf/assets/day-breakdown.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "ai-usage-tracker", "repo": "https://github.com/lvabarajithan/hermes-ai-usage-tracker", "sha": "14e844f6ced5e0d618c767d726330a78c5cadadd", "description": "Live subscription-quota windows for every AI provider Hermes can route to, as a desktop page plus a status-bar chip, with a per-profile picker \u2014 Codex, Claude, Copilot, OpenCode Go/Zen, Z.AI, Kimi, MiniMax, Nous, OpenRouter, DeepSeek.", "maintainer": "lvabarajithan", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "platforms": ["linux", "macos"], "docs_url": "https://github.com/lvabarajithan/hermes-ai-usage-tracker", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "aichipmunk", "repo": "https://github.com/Pacific-Cloud-Solutions/hermes-plugins", "sha": "d565d7698a28f4364f819446e5f7ae2b67c57352", "subdir": "plugins/aichipmunk", "description": "Pairs this machine's Hermes bots with the AI Chipmunk mobile app from inside Hermes Desktop \u2014 pick a bot, get the reachable host, profile and API key as a scannable code. Registers a `hermes aichipmunk` CLI command, a desktop page and a dashboard API; no tools or hooks. Disclosure \u2014 on an explicit confirmed \"Switch to Tailscale\" it adds a persistent tailscale serve handler putting the API server's own port (plain HTTP inside the tailnet, API_SERVER_KEY auth) onto the tailnet; on a machine with no Tailscale CLI it instead runs hermes config set platforms.api_server.host <tailnet IP> on the owning profile and restarts that gateway; reads API_SERVER_KEY from every profile's .env on this machine on each status poll (masked in lists, the full key only in the pairing link and QR returned to an authenticated dashboard caller, which may be the phone over a published dashboard); shells out to the tailscale and hermes CLIs and probes only this machine's own /health; no third-party network calls.", "maintainer": "Pacific-Cloud-Solutions", "tier": "community", "category": "platform", "version": "0.1.0", "image": "https://raw.githubusercontent.com/Pacific-Cloud-Solutions/hermes-plugins/d565d7698a28f4364f819446e5f7ae2b67c57352/plugins/aichipmunk/docs/hero-2x1.webp", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "aihubmix", "repo": "https://github.com/AIhubmix/hermes-provider-aihubmix", "sha": "b55e916362ebd0528c5d8981d12f3b8f7268b847", "subdir": "aihubmix", "description": "AIHubMix \u2014 unified OpenAI-compatible access to 400+ models; /model picker filtered to tool-capable routes.", "maintainer": "AIHubMix", "tier": "community", "category": "models", "docs_url": "https://github.com/AIhubmix/hermes-provider-aihubmix#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["AIHUBMIX_API_KEY"]}}, {"name": "airlock", "title": "airlock", "repo": "https://github.com/otsoa-dubief/airlock", "sha": "e379b7a8f9fad21391f477732e8386944ee7d68a", "subdir": "airlock", "version": "0.2.1", "description": "Guardrails that follow what a conversation has read. Once a session reads untrusted content (a web page, a browser snapshot, an MCP or third-party plugin's output, a customer's message), airlock seals it: messages to anyone but the owner, network writes, pushes and deploys, memory, skill and cron writes, browser input, URLs that could carry data out and code that reaches the network go through Hermes's own approval gate. Walls hold in every session: credential paths and secret files, the guard's own files and Hermes's config, shell startup files, other profiles, commands that switch approvals off. Shell commands are read the way the shell reads them, so a command that computes or hides what it runs (eval, base64 | sh, $G push, wildcards, write-then-run) is refused until written in clear. Subagents inherit the seal. It also catches an injection by its signature: recognized secrets never leave in a call; a private marker in the agent's context locks the session if it shows up in a tool call; a send to an address the untrusted content named is blocked; repeated refusals lock the session; lookalike Unicode in commands is refused. Plugin and MCP tools nobody admitted need approval. Observe mode, stop switch, `hermes airlock check|demo|log`. Tested on a corpus of 251 attacks and everyday commands, and end to end in the official image. Disclosure \u2014 hooks only (pre_tool_call, post_tool_call, pre_llm_call, subagent_start, on_session_reset, post_approval_response), no tools. No network, no LLM call, runs no command. Reads the profile's config.yaml (home channels, approvals mode) and its own policy file (<HERMES_HOME>/airlock.yaml); lists directories to expand wildcards in commands it checks. Writes under plugin-data/airlock: a journal of decisions, taints and approvals that includes tool arguments, truncated (journal.args: none leaves them out), the taint state and the stop switch. When nobody can approve (--yolo, approvals.mode: off, cron set to approve) it blocks instead of letting Hermes auto-approve (policy approvals_off: follow restores Hermes's behaviour). Install scan: caution, because the default policy and the shell reader name the patterns airlock guards against (startup files, crontab, credential commands, exfiltration shapes).", "maintainer": "otsoa-dubief", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/otsoa-dubief/airlock#readme", "image": "https://raw.githubusercontent.com/otsoa-dubief/airlock/e379b7a8f9fad21391f477732e8386944ee7d68a/docs/images/social-preview.png", "screenshots": ["https://raw.githubusercontent.com/otsoa-dubief/airlock/e379b7a8f9fad21391f477732e8386944ee7d68a/docs/images/live-session.gif", "https://raw.githubusercontent.com/otsoa-dubief/airlock/e379b7a8f9fad21391f477732e8386944ee7d68a/docs/images/how-it-works.png", "https://raw.githubusercontent.com/otsoa-dubief/airlock/e379b7a8f9fad21391f477732e8386944ee7d68a/docs/images/check.png"], "platforms": [], "known_issues": ["Built for in-process plugins (Hermes's default): under plugins.isolation: host it cannot tell third-party plugin tools from Hermes's own."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_llm_call", "subagent_start", "on_session_reset", "post_approval_response"], "provides_middleware": [], "requires_env": []}}, {"name": "aistupidlevel", "title": "AI Stupid Level", "repo": "https://github.com/StudioPlatforms/aistupidlevel-sdk", "sha": "ba908770f2e97b0a85cc1f5a83240cbe94c8dfa9", "subdir": "integrations/hermes/aistupidlevel", "description": "AI Stupid Level Smart Router \u2014 OpenAI-compatible; routing modes such as auto-tooling send each request to the model currently scoring best on continuously re-run benchmarks, called with your own provider keys. Disclosure \u2014 sends your prompts, tool definitions, tool results and ASL_ROUTER_KEY to aistupidlevel.info (S.C. Studio Platforms S.R.L.), which forwards each request to the AI provider it routes to using the provider keys you store on your AI Stupid Level account; model usage is billed to your provider accounts, and prompts are logged only if you enable logging for a key.", "maintainer": "StudioPlatforms", "tier": "community", "category": "models", "docs_url": "https://github.com/StudioPlatforms/aistupidlevel-sdk/tree/main/integrations/hermes/aistupidlevel#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ASL_ROUTER_KEY"]}, "version": "0.1.0"}, {"name": "alans-way-computer", "repo": "https://github.com/capthvnsen/alans-way-agents", "sha": "23cce292c867a42ccf9853b99d798add028788f0", "subdir": "alans-way-computer", "version": "0.21.10", "title": "Alan's Way Plugin: Computer Use", "description": "Computer-use provider for Hermes: the stock computer_use tool drives desktop apps on the user's computer through the Alan's Workspace app, and on the VM's own desktop when the computer is offline. Needs the Alan's Way Plugin's workspace setup. Select it with computer_use.backend: alans-way-computer (the Alan's Way Plugin's setup.sh sets this when it installs the provider; in the catalog flow it prints the command). Disclosure \u2014 starts the workspace router from the profile's mcp_servers.workspace_browser block (command and args from config.yaml, with a filtered environment plus HERMES_WORKSPACE_ALLOW_DESKTOP_ACTIONS=1, which lets this private router child serve desktop input) as a long-running node child per session. The filtered environment passes PATH, HOME, locale and OS basics, plus DISPLAY, XAUTHORITY and DBUS_SESSION_BUS_ADDRESS so the router's VM-desktop fallback finds the X display and session bus, plus HERMES_HOME set to the bound profile's home, under which the router appends a content-free serving log to logs/workspace-router.log; no keys or tokens. It talks to the router over stdio (app lists, element trees, screenshots and input actions). The router reaches the user's computer over SSH on the user's tailnet and falls back to the VM's desktop, where it uses xdotool, a screenshot tool and the AT-SPI accessibility bus if they are installed (the provider installs none of them). On the user's Mac the provider can bring the target app to the front when the model asks for it (focus_app with raise_window, or an input action with delivery_mode foreground), and the Alan's Workspace host does so only after the user has been idle for at least 2 seconds; focus_app can also launch a named app, or open a document or folder by absolute path in its app (the host refuses app bundles, executables, scripts and off-limits apps). Every input action still goes through Hermes's computer_use approval gate, with raising and foreground input under their own approval scopes (the cua:<action>:background entries in command_allowlist that the Alan's Way Plugin's --allow-desktop-actions adds skip the prompt for background input, focus_app and launches, not for raising or foreground input). The provider itself makes no network calls. On Hermes 0.21.5, which has no provider API, it installs and does nothing. Since 0.21.0, captures keep element numbers stable across action replies on Mac and Windows, fold in changed controls and report removed numbers; a truncated list never treats unseen controls as removed. Linux keeps the whole-tree generation guard, so capture again before acting by number after a change. Action replies describe nearby changes and can mark the effect confirmed. Default som captures skip the screenshot call entirely when finite snapshot window geometry proves named controls cover at least 35%; older snapshots without geometry still fetch a screenshot to measure coverage and may omit it from the model; mode vision explicitly includes it and mode ax requests no screenshot. Replies identify the coordinate space and explain locked screens, missing permissions, unreadable or cut trees, hung apps and uncertain outcomes before a retry. Captures request generation-based snapshot deltas, validate them against the held tree and retry once for a full list on invalid or mismatched deltas; older apps may return full or unchanged lists. Once a reply identifies a window, later captures, screenshots and input stay bound to that window; capture(window_id=...) selects another. Mismatched window replies clear the target and require a fresh capture. Desktop actions carry expect_host from the observed host so a routing switch refuses input before dispatch; app IDs and element numbers must be reacquired after a switch. Element trees, generation, bound window ID, screenshots' geometry and host OS are session memory, with no new persistent provider state, tools, hooks, middleware, required environment variables or direct network destinations. Hermes's unmodified CI-pinned scanner reports SAFE: 0 HIGH, 2 MEDIUM (python_subprocess: the long-running router Popen in __init__.py and its bounded 40-second --probe subprocess) and 0 LOW. Browser commit approvals are separate from this provider's unchanged computer_use approval gate.", "maintainer": "capthvnsen", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/capthvnsen/alans-way-agents/tree/23cce292c867a42ccf9853b99d798add028788f0/alans-way-computer", "readme": true, "platforms": ["linux", "macos"], "known_issues": ["Needs a Hermes build with the pluggable computer-use API (Hermes 0.21.6 or newer). On older Hermes the plugin installs and does nothing. Install alans-way first and run its workspace setup, which writes the workspace_browser block this provider reuses.", "Hermes asks for approval on every computer_use action type until it is granted. For an unattended Telegram bot, grant them once with Always in Telegram, or add cua:<action>:background entries to command_allowlist (see the README). Takes effect after a gateway restart.", "The pinned README requires in-process loading and says plugins.isolation: host is unsupported because the provider hands Hermes a live router session. The current admission validator reports host readiness; remote isolation compatibility has not been verified.", "Typing without a target field types into the focused field (still approval-gated). On the user's Mac this needs Alan's Workspace 0.21.9: the target app is brought forward only after the user has been idle for at least 2 seconds, password fields are refused, and the focused field must belong to the target app.", "The VM desktop path needs xdotool, a screenshot tool (scrot, maim or ImageMagick import), the AT-SPI bus and python3-gi on the VM. Without them those calls fail and the agent reports it; setup.sh warns about what is missing.", "A default som capture skips the screenshot request when snapshot geometry establishes 35% named-control coverage; older apps without geometry still require a screenshot to check it and may omit it from the model. Use mode vision to request it explicitly, or mode ax for an element-only capture. When a screenshot is omitted, coordinate= and element bounds are screen pixels.", "Mac and Windows action replies update the held element list without shifting surviving numbers. On Linux, capture again before acting by number after a tree change; cut replies do not prove an unseen control is gone. A timeout or hung app can leave the action's outcome uncertain: capture before retrying.", "This release changes provider code: focus_app launches a named app, or opens a document or folder by absolute path in its app on the user's computer (needs Alan's Workspace 0.21.9 with computer-open-v1; app bundles, executables, scripts and off-limits apps are refused). It binds the window showing the opened item. When an action lands on an unfocused window it returns that error and tells the model to ask for a raise explicitly (focus_app with raise_window=true, or delivery_mode='foreground'), which Hermes approves under its foreground scopes; the provider never raises on its own. It follows the focused window after an app shortcut, and passes the app's step notes to the model. Older apps refuse path opens and keep the earlier behavior.", "Admission validation passes with a private-import warning: __init__.py uses tools.mcp_tool_config._resolve_stdio_command to resolve the router launcher; this internal helper may change across Hermes releases."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "alans-way", "repo": "https://github.com/capthvnsen/alans-way-agents", "sha": "0f65549ac1353f6b74b8ac6a22d58f3eb6dea0a3", "subdir": "alans-way", "version": "0.21.9", "title": "Alan's Way Plugin", "description": "Idle check-ins from the primary bot of a Hermes gateway on a Linux machine or a macOS guest VM: when the bound Telegram chat has been quiet for two hours, during 08:00-22:00 in the user's timezone, the bot checks in once (does one safe step and reports it, suggests one, or asks one question), backing off when unanswered. The model tool can only make check-ins quieter; more often, resume and wider hours are operator-only via /proactivity or the CLI. After install, the workspace-setup skill walks the agent through setting up Alan's Workspace (a separate desktop app for the user's computer: macOS or Windows) and Tailscale; desktop input goes only through Hermes's approval-gated computer_use tool. Disclosure \u2014 once the gateway connects Telegram, a background thread checks every 60 seconds. When the bound Telegram DM has been quiet (2 h by default, doubling per unanswered check-in, 08:00-22:00 user time), it injects an internal user-role prompt into that chat (needs plugins.entries.alans-way.allow_gateway_injection, which setup sets), so the bot runs a turn on its own and may take one \"safe, reversible\" step; the user still approves tool calls in Telegram. Its pre_llm_call/post_llm_call hooks see every session's turns and store the bound chat's activity timestamps in plugin state; optional cross-bot export adds the separate storage disclosed below. On first load it reads $HERMES_HOME/companion/proactivity/proactivity.sqlite3 once, read-only. The plugin itself makes no network calls. The workspace-setup skill has the agent fetch this repo at the catalog pin into ~/alans-way-agents (or reuse a clean clone there) and hand a JSON setup plan to the human in Alan's Workspace. The app runs setup.sh through an external SSH process outside the gateway, checks the exact repoRef and desktopRef and rejects tracked checkout changes; the agent must never run setup or even --verify in its gateway terminal or bypass the lifecycle guard. Windows guests require the human's external Git Bash shell. The human pastes the app's output for review. The external setup does the following. (1) Installs long-running services (Alan's Tools: a managed Chrome/Chromium on a loopback-only debugging port, the first free port from 9223 up, plus a browser broker and an optional availability watcher): systemd units hermes-alans-way-chromium, -browser and mac-watch with loginctl enable-linger where systemd is running; supervisord programs alans-way-chromium, alans-way-browser and alans-way-mac-watch, written to a conf.d file, where it is not (VM images and containers); a KeepAlive LaunchAgent on a macOS guest; logon Scheduled Tasks on Windows. When no X display is running it also installs and runs Xvfb on :99 (unit hermes-alans-way-xvfb or program alans-way-xvfb, -nolisten tcp). (2) Installs packages when they are missing, only as root or with passwordless sudo, through apt, dnf or yum: Google Chrome stable (the current .deb downloaded from dl.google.com on amd64 apt hosts, which also adds Google's apt repository, so the host keeps taking Chrome updates from Google), else the distro chromium package, else Playwright 1.49.1 Chromium through npx (root only); and xvfb. It only warns, and installs nothing, for xdotool, scrot, at-spi2-core and python3-gi, which the VM desktop path needs. (3) Appends the user's computer's public key to ~/.ssh/authorized_keys (administrators_authorized_keys on a Windows admin account) with a from= restriction to the Tailscale ranges 100.64.0.0/10 and fd7a:115c:a1e0::/48, rewriting an existing unrestricted line for the same key; pins its host key in known_hosts and adds a ControlMaster block to ~/.ssh/config for Tailscale hosts only (with a tailscale nc ProxyCommand when Tailscale runs in userspace-networking mode). (4) Adds a TimeoutStartSec=180 drop-in to the hermes-gateway unit. Hermes refuses plugin file changes while a gateway is running, so setup drain-stops that profile's gateway (SIGUSR1 under supervisord, else systemctl stop or hermes gateway stop), replays the refused plugin install or update, and starts it again. With --restart it restarts the gateway only if setup changed something the gateway loads (or an earlier restart never happened), detached about ten seconds after printing its summary: by SIGUSR1 drain under supervisord, else a transient systemd-run timer or hermes gateway restart. (5) For the main profile and every profile with its own Telegram bot, writes a managed mcp_servers.workspace_browser block with connect_timeout: 25 seconds (removing other entries that run this router, with a backup; a re-run keeps the computer address and OS it already holds, and --mac-ssh none removes them), turns off the built-in browser toolset for Telegram and cron (--keep-browser only skips disabling it; it does not re-enable a previously disabled toolset), turns computer_use on for Telegram and cron, and sets computer_use.backend to alans-way-computer when it installed or found that provider (under the skill's --skip-plugin flow it only warns and prints the config command). It reads each profile's TELEGRAM_BOT_TOKEN only to derive the numeric bot id. It warns, and changes nothing, when a copy of the workspace-operations skill in a profile's skills directory shadows the plugin's. The workspace router reaches the user's computer over SSH on their tailnet; on the user's computer it calls the local API of Alan's Workspace on 127.0.0.1 with that app's bearer token. The skill's moved-VM checklist has the agent read the app's preferences.json on the user's computer over the same SSH path and tell the human where the VNC password lives without pasting it. The Alan's Workspace setup page has the human run the alans-way connect script from its main branch on their own computer, and the agent may install Tailscale with its official install script. The manual --allow-desktop-actions setup flag, which the skill offers but never adds itself, adds cua:*:background entries to command_allowlist. On a Hermes without the computer-use provider API, including 0.21.5, it also exposes workspace_computer_action, which drives the user's desktop, Terminal included, with no approval. The repo also holds bootstrap-orgo.sh and migrate.sh, which the plugin, setup.sh and the skills never run: a user runs them by hand to provision a fresh supervisord Linux computer (it fetches the Hermes and Tailscale installers over HTTPS, pipes setup.sh from this repo's main branch into bash unless --repo-ref is given, installs openssh-server if absent, writes supervisord programs, and POSTs the Tailscale login URL with a shared secret to a --callback URL when one is given) or to copy ~/.hermes, including .env, auth.json and state.db, to another host over SSH (it also looks up each profile's bot username at api.telegram.org with that profile's bot token). Since 0.21.0, every enabled profile also gets a default-on Telegram texting voice: an additional pre_llm_call hook reads that profile's voice mode and adds a tone note to Telegram turns, and transform_llm_output can remove a known leading assistant opener from the final Telegram reply. Messages containing backticks, quotes, indentation or silence markers are left unchanged by that polish. /tone texting|default|status and hermes tone store the mode under voice in Hermes plugin state; setup.sh --tone applies it to each configured profile. It layers over the user's persona without writing SOUL.md or agent.system_prompt. Check-ins now name one concrete open thread. /proactivity now requests one immediately from the bound chat even when paused or outside active hours, without changing the settings or unanswered-check-in count. Morning briefs are off by default: /proactivity brief on (or the operator CLI) enables one daily internal user-role prompt near active_start, with 0-20 minutes of jitter, at most two hours late and skipped after recent user activity. It asks the model to consult calendar and email read-only if those tools exist. The existing proactivity tool may disable the brief but cannot enable it; settings.morning_brief and last_brief_date are stored in the existing idle plugin state. The workspace router adds a commit object to the existing browser open/action tools for purchases, bookings, sends, posts, submissions, deletions and account changes. It checks control names, selectors, refs, action-looking URLs, batches, scripts, keys and dialogs against page state; missing page knowledge needs a snapshot or explicit commit. Shared commit-name patterns allow benign Buy it again, Book a demo and Subscribe & Save labels without excusing other commit-bearing words. Tax schedule names are treated as benign labels without exempting one-on-one bookings from approval. It asks through MCP elicitation (60-second default wait, configurable with HERMES_ROUTER_APPROVAL_MS), refuses unavailable, declined, timed-out or stale approvals, drops agent-supplied approval receipts and adds a single-use receipt bound to the approved tab and epoch. An approved commit is never replayed after a lost connection or host change. It appends commit decisions to commit-decisions.jsonl beside the mac-watch state file, creating the log with mode 0600: timestamp, bot id, page origin, decision and any supplied kind, summary, amount, currency and counterparty, or the detected target. Page/control/challenge and pending-approval state is held in memory. The same two skills now prefer Hermes web_search/web_extract for plain lookups and the user's computer for interactive search, hand CAPTCHAs to the human, poll at most every 30 seconds for up to 30 minutes, and switch sources after two challenges in ten minutes. The router stops remembering challenge pages for failover and reports changed tab ids in result metadata. The operations skill covers the app's automatic takeover after its grace period; CAPTCHA and recording holds and Take-back cooldowns still keep the bot out. It asks the agent to save only lasting general facts and preferences to memory; procedures belong in skills and project/task records in the user's chosen file or tracker, asking where if none is chosen. Existing memory is not migrated or deleted, and live tab state is never saved there. The setup skill pins the companion app source to f110115ff23367e4e21eeaf00e658a8706369652 and adds a long-chat reference: report effective compression and summary routing read-only, then only with explicit consent for each profile enable compression.proactive_prune_tokens at 48000, with 8000-character eligibility and 4096-token minimum reclaim, using the profile-scoped config CLI and keeping custom values, micro_compact and summary routing. This writes the approved profile's config.yaml and records prior values outside the repo for undo; setup.sh does not run it. A weekly time-saved report is a user-created Hermes cron recipe, not an installed job. setup.sh --verify now checks the running service manager, display, SSH ProxyCommand and managed browser's loopback /json/version endpoint, and reports noVNC reachability from its actual bind address. Manual supervisord restart guidance drains with USR1 first. The repo also adds scripts/voice_eval.py, user-run only: it sends fixed fictional scenarios and replies to Anthropic models through the SDK or claude -p for scoring and optionally writes a JSON result; the plugin, setup and skills never run it. Since 0.21.5, the plugin registers two more bundled skills, web-errands and integrations, with no new tools, hooks, commands or required environment variables. web-errands is guidance for shopping, booking, applications, filings, cancellations and claims in the workspace browser: every purchase, booking, send, submission and deletion still goes through the commit approval gate described above, CAPTCHA, sign-in and card-entry walls go back to the human, and card numbers are never stored. It has the agent record each application's company, role, date, posting URL and confirmation in the user's chosen project/task record, asking where if none is chosen. For a price, restock or status watch the user asks for or explicitly accepts, it has the agent create a Hermes cron job with Hermes's cronjob_manage tool (or ask the operator), polling no more often than every 10 minutes and stopping after three consecutive failures; cron runs cannot answer approvals, so a watch that reaches its target stages the result for the user. Watches use attach_to_session: true with no deliver override and continuity: true; each check is a fresh session, uses its prior completed output as a baseline and replies [SILENT] unless something meaningful changed, failed or reached its target. An optional safe read-only deterministic monitor URL or script can skip the model and delivery on unchanged output; probe errors still need reporting/backoff. Cron cannot pause/remove itself unless the operator enabled cron.allow_agent_scheduling. In-chat monitoring is a separate user-entered /heartbeat every command, one per conversation replacing the previous one; it runs only while idle with the chat process/gateway alive, costs a model turn per check and needs /heartbeat clear from the user. The integrations skill has the agent check that an account is connected, with a small read, before promising a task that needs it, and reuses Hermes's Google Workspace, Himalaya, Home Assistant, Honcho and X routes first. The Google route uses Hermes's own setup, whose fixed scope list includes write access; the skill says so and stops if the user declines. Only after the user agrees in chat does it guide an install: a Hermes catalog plugin (Home Assistant or Honcho), a separately reviewed Himalaya v1.2.0 binary, rclone v1.75.2 (the release zip from downloads.rclone.org, checked against that release's SHA256SUMS before extraction) or Taskwarrior 3.5.0 (a source build of upstream commit 3419d5ba1e6a780fbbb0a8d68d8fd31e675c1bf8 cloned from GitHub, after checking the CMake and Rust versions and asking before changing any toolchain), the last two into versioned directories under ~/.local/share/alans-tools/. Secrets are entered by the human in a private terminal outside the agent session, never in Telegram; where a recipe needs a secret in the agent's terminal (a mail credential, RCLONE_CONFIG_PASS), it explains the grant and adds only that variable to the profile's terminal.env_passthrough. The recipes keep rclone.conf (mode 0600) and Taskwarrior's taskrc and data under the profile's HERMES_HOME/integrations. Scheduled reads are read-only cron jobs with a profile-local failure-count file, and pausing goes through the owner conversation or an explicitly authorized hermes cron pause. API writes (send, post, delete, share) need fresh explicit approval in the live conversation, and a declined, timed-out or unavailable browser commit is never completed through another tool. Mastodon is not bundled: its recipe is human-run documentation in this repo (docs/integrations/mastodon.md) that the plugin and skills never run. None of this runs at plugin load or from setup.sh. Telegram replies, check-ins and briefs share one status-first style: concrete status, evidence or caveat, plain limits, and no tool names, file paths, scripts or job and session IDs in user-facing text unless asked. Prices, availability and policies must come from a page read this turn or be labeled unconfirmed. Multi-step browser work continues in short chunks until done or blocked, with one short start line and one-line updates only at milestones, routed-around failures or noticeable waits; routine reads, actions and transitions stay quiet, a new mid-task message is acknowledged and folded in, and Hermes's clarify buttons may be used for decisions the user owns, never for approvals; a whole checkout batch still sits under one commit. For a message of 200 characters or fewer that is wholly a recap request, greeting, thanks or acknowledgment, the voice hook appends a three-sentence limit; the check reads only the current message, with no model call, history or network. The check-in menu now ends with asking about a decision the user owns. The operations skill adds tab hygiene: the agent closes finished tabs it owns with the existing close tool, never another bot's or the user's and never one with a pending handback or recording hold. The router adds requestingBotId to tab-list replies and forwards a reply over 4 MiB unchanged, without that decoration, writing a content-free line to stderr. The skill also tells the agent to report installed versions by running hermes --version, reading the plugin's install metadata, running local git describe and rev-parse on the Alan's Tools checkout, and calling the app's existing status tool. setup.sh --bind now also makes the bound DM Hermes's Telegram home by running hermes -p PROFILE config set for TELEGRAM_HOME_CHANNEL and TELEGRAM_HOME_CHANNEL_THREAD_ID (30-second limit each; on failure it warns to send /sethome); it loads on gateway restart. setup.sh --verify exits 0 for a complete local audit, 1 for failed required checks and 2 for a partial install (warnings, or skipped browser or services). The setup skill's checkout step now initializes ~/alans-way-agents if absent and fetches the pin (depth 1) from the repo's GitHub origin, or reuses a clean clone there after two read-only local git helpers (5-second limit) confirm one recorded and effective origin URL naming this repo; for file and direct Git installs it uses the installer-recorded revision, and it never falls back to a tag when that record is invalid. Its computer-use API probe separates an absent API from a failed or timed-out probe and ends the probe's process group or tree on timeout. The setup skill also offers, each only after an explicit answer, with readback and a remembered-choice marker in the profile's config: one grouped autonomy choice for display.busy_input_mode: steer and agent.intent_ack_continuation: true, for every platform in that profile after restart. It reads effective values, including defaults, proposes changes only from stock interrupt/auto and preserves deliberate choices, custom or unknown values and unreadable config. General setup/proactivity consent is insufficient; an explicit no preserves both settings, silence writes nothing. Both keys are read back, including unchanged keys, before writing and reading back skills.config.workspace-setup.autonomy_choice as chosen or keep-current. Failed writes/readbacks leave the marker untouched; it records the answer only and never restores settings. Legacy busy_input_choice: keep-interrupt skips only the busy key; unknown legacy state is reported and skipped. agent.verify_on_stop is left alone unless the coding user requests stricter checks and one grouped Telegram question covering platforms.telegram.typing_indicator, display.platforms.telegram.interim_assistant_messages, tool_progress, notifications, long_running_notifications and busy_steer_ack_enabled, platforms.telegram.reactions, display.memory_notifications (hides the Memory updated and Self-improvement review notices on every platform in that profile), cron.wrap_response (profile-wide: removes scheduled-message headers, job IDs and footers for all delivery targets) and, as a separate city-confirmed question, timezone. Markers written through the same CLI are skills.config.workspace-setup.autonomy_choice and telegram_feel_choice; the former busy_input_choice is read but no longer written; a legacy busy_steer_ack_choice marker is only read, never written. Silence and non-interactive runs write nothing, and neither setup script writes any of these keys. When the VNC viewer binds loopback only, the skill can, with explicit consent, have the human run a temporary SSH forward to the computer's loopback (local port 16080, ends after 30 minutes) and verify it with curl from that computer. For a manual or file install, SAFE requires no scanner confirmation; setup and dependency consent remain separate. A later CAUTION revision needs review and explicit consent to the exact tree before retrying hermes plugins install with --ref SHA --enable --force; --enable alone does not confirm a warning, and --force confirms CAUTION and can replace an install but cannot override DANGEROUS. Hermes's unmodified scanner reports SAFE for this plugin: 0 HIGH, 2 MEDIUM (python_subprocess: the two git helpers in skills/workspace-setup/SKILL.md) and 3 LOW (hardcoded_ip_port: the loopback forward examples in the same file). This pin also extends the existing texting-note and minimal final-opener polish to public session source tags desktop, tui and bot_room, alongside Telegram; CLI, cron, webhook and API-server sources keep their default voice. A tone-independent pre_llm_call task note asks the agent to track and verify mini goals with Hermes's todo tool or working context, continue independent authorized work through completion, recheck historical blockers against newer messages and verify every requested criterion with each item's own source before replying. It requests a short start line and milestone-only updates, keeps routine work quiet and preserves questions, approvals, failures and honest completion. Recap replies are capped at three sentences total including any detail offer. Follow-up cron jobs are saved only after the user asks or says yes, attached to this chat with attach_to_session: true and no deliver override; no later message may be promised without a saved job. A not-yet reply allows one offer at a named local time, with no saved repeat until consent, and jobs are removed when their reason ends. /goal is suggested once for a big multi-step job, not small asks. Fixed Hermes progress/error/approval messages are unchanged. Scripted tool conversations prove hook delivery; consistent real-model quiet behavior is unverified. Browser guidance starts normal work in the user's Workspace even while they are away; host vm is for explicit VM requests or router-reported outages, never login/CAPTCHA/approval errors. Existing VM tasks finish there when the computer returns; no third-tier browser is substituted. Reasoned human handbacks hold VM tabs as well as computer tabs for up to 30 minutes until Give back; a chat reply alone cannot bypass awaiting_human. Resume uses the host, tab ID and fresh epoch from one reply. The human-only Move button can carry URL/scroll and chosen drafts; cookies move only when a restore is reported, while passwords, uploads and in-memory state stay behind, and the agent has no move tool. Router changes bind approvals to exact observed page targets, reject missing/malformed action success receipts, bound recovery and owned-child shutdown, and project agent-facing replies without exposing internal approval proof. The router never replays a sent write after connector retry, timeout or host change, including writes before the first response; only reads and unsent calls can replay within their original remaining budget. Cancellation is forwarded and stale-host checks reject queued desktop input before sending it; uncertainty requires checking the outcome before any repeat. Browser and desktop replies add a content-free diagnostic, on stderr and appended to the profile's logs/workspace-router.log, with fixed tool name, serving host, default/request/fallback selection and reason, and elapsed time; it contains no URLs or page/task content. Idle direct SSH probes can discover a recovered computer sooner without moving an active VM task. Cross-bot proactivity adds the cross_bot_ask tool and pre_tool_call/on_session_end hooks; no middleware, required secrets or direct network destinations are added. Optional cross-bot proactivity is off by default, configured with the same explicit absolute shared root and designated primary in each participating profile, then enrolled per bot through /proactivity cross on (activation in a running gateway needs a restart). Only completed user/final-assistant exchanges from each enrolled bot's bound owner Telegram DM are exported: at most four recent exchanges and 2 KiB per digest, expiring after 24 hours per exchange. There is no historical backfill or export of groups, other chats, attachments, reasoning, tool history, cron, check-ins, briefs, child or imported turns. Exchanges that appear to contain credentials or payment details, or match operator redact terms, are skipped entirely before truncation; sanitization cannot detect every secret. Only the designated primary receives other enabled profiles' fresh digests during permitted check-ins, including user-requested /proactivity now; its own digest is excluded and exports are JSON-escaped as untrusted observations, bounded to 32 KiB across 16 profiles. Ordinary turns receive no digests or dispatch permit; separately consented helper results can arrive there as disclosed below. Briefs and cron receive neither. The primary may automatically schedule one read_only or draft_only cross_bot_ask with fresh target evidence per check-in into another enrolled bot's existing bound DM; replies appear there with primary attribution, and only separately consented short outcomes can return to the primary. The receiver needs its own gateway-injection permission and verified routing, observes pause/hours/busy settings, and starts no spontaneous secondary check-ins. Queued asks are at most 800 characters, expire after two hours and are deleted before injection; sent means scheduled, not delivered or completed, with no replay, delivery-receipt store or result polling. Result sharing is separately off by default, including for existing cross-bot users: /proactivity cross results on must be chosen in both bound owner DMs. Only future asks can return a sanitized Done/Blocked summary of at most 280 UTF-8 bytes, correlated to one ask, with the same two-hour expiry measured from ask creation. The private shared results.json stores up to 64 pending/running/completed records with profile identities, enrollment generations, ask IDs, timestamps, prompt/session-correlation hashes, status and summary. Results are consumed once before exposure at the primary's next ordinary owner turn or permitted check-in, as untrusted helper reports rather than independently verified facts. There is no wake, retry or delivery guarantee; a crash or helper restart can lose an outcome. /proactivity cross results off purges pending outcomes; cross off also revokes the choice. Copied outcomes can persist in chat/provider context after expiry or opt-out. Attempts are limited to four per rolling day gateway-wide, two per target and 60-minute target spacing. The plugin-owned POSIX shared directory uses mode 0700 and files 0600: digests and queued bodies, persistent enrollment/generation and eligibility/heartbeat records, body-free turn/attempt hashes retained for 48 hours, one-use check-in permits and imported-session locks expiring within 30 minutes. Session locks contain the exact session key and ask ID and survive restart until session end, expiry or opt-out. Pruning runs on activated startup, before store access and every 60 seconds while connected; offline expired files can remain until an activated profile prunes them. Dormant profiles do no cross-bot store access. /proactivity cross off immediately stops sharing, receiving and dispatch and purges that profile's digest, permits, locks and pending asks; body-free records remain until expiry and scheduler roles revert on restart. Only the operator can enable or expand sharing; the model may disable it. Launch-gateway profile routing policy is read through public configuration/home-scope APIs; no Hermes session DB or credential store is read for export. Imported sessions block terminal/code, desktop actions, delegation, messaging, scheduling, further cross-bot asks and unknown connectors; reviewed reads/drafting and existing gated browser actions remain allowed. Browser approval, CAPTCHA and ownership gates still apply; this is not universal read-only enforcement. Copied context goes through the configured model provider and target Telegram delivery and may remain in Hermes history, API-content sidecars, compaction and memory-provider records, including Honcho when configured, and model-provider retention after expiry or opt-out. The instruction not to save other bots' excerpts is model policy, not enforced deletion; the plugin performs no memory-provider writes. No new direct network endpoint or telemetry is introduced. Optional integrations use the user's selected Google Workspace API, IMAP/SMTP mail service, Home Assistant instance, Honcho API, X API or rclone cloud/WebDAV/S3 endpoint; browser errands contact user-selected sites. Honcho can receive conversation turns, derived conclusions, peer/session IDs and version/OS/plugin headers. Native tools retain their own profile-scoped credentials, including Google client/token/pending OAuth files and encrypted rclone provider tokens; the plugin does not create a separate credential store. Setup downloads also reach GitHub/raw.githubusercontent.com, the official Tailscale installer, configured distro package repositories and the npm/Playwright distribution, in addition to Google and rclone downloads already disclosed.", "maintainer": "capthvnsen", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/capthvnsen/alans-way-agents/tree/0f65549ac1353f6b74b8ac6a22d58f3eb6dea0a3/alans-way", "readme": true, "platforms": ["linux", "macos"], "known_issues": ["Install this on the machine that runs Hermes (a Linux host or a macOS guest VM), not on the user's primary computer. Windows guests are new and untested on real hardware. If the plugin is already installed from the catalog, setup leaves it as it is, so this pin stays.", "Setup turns off Hermes's stock browser toolset for Telegram and cron so the agent uses the workspace browser (pass --keep-browser to skip disabling it; this does not re-enable it). It never turns off computer_use: on Hermes with the computer-use provider API, desktop input goes through the gated computer_use tool and its alans-way-computer provider.", "Check-ins need plugins.entries.alans-way.allow_gateway_injection: true and a bound Telegram DM (setup does both). A background thread checks every 60 seconds once the gateway connects Telegram.", "Setup may install Chrome, Chromium, Playwright's Chromium or Xvfb with root or passwordless sudo, and may drain-stop and start the profile's gateway to apply a plugin change Hermes refuses while it runs. Pass --skip-services to skip the services and their packages.", "The computer's SSH key is only accepted from the tailnet (from= restriction). An existing unrestricted line for the same key is rewritten with it.", "A copy of the workspace-operations skill under a profile's skills directory shadows the plugin's and never gets its updates. Setup only warns; move anything worth keeping out of it, then delete it.", "The texting voice is default-on for Telegram, desktop, TUI and bot_room source tags. /tone default disables its note and final-opener polish per profile. CLI, cron, webhook and API-server sources retain the default voice. Check-ins and morning briefs keep their own short style. Fixed Hermes progress/error/approval messages, direct sends and cron reports are outside these hooks; interim messages get the tone note but no polish, and streaming can show raw chunks before a final edit. Consistent real-model quiet behavior remains unverified.", "Morning briefs are opt-in (/proactivity brief on), use the existing bound DM and gateway-injection permission, and may read calendar/email through tools already available to the model. /proactivity now is user-only from that chat and bypasses pause/hours for one requested check-in.", "Telegram browser Approve buttons need Hermes v0.21.6 or newer including commit 239740a19e (first in date tag v2026.6.19), despite the generic >=0.21.5 install floor. Without MCP form elicitation support commits fail with approval_unavailable; unattended cron declines them. The gate protects against agent mistakes and malicious pages, not a deliberately hostile bot with same-user terminal/file access.", "The router appends approval details and detected targets to commit-decisions.jsonl beside mac-watch state, shared by routers using that path; no retention or rotation is implemented. Keep this local log private. CAPTCHA handback, recording holds and Take-back cooldowns still block takeover. If the router reports human_has_control before a commit approval, wait or claim the tab through the normal app control flow first.", "Long-chat pruning is an agent-guided, separately consented config option per profile, not a setup.sh default. It preserves customized values and summary routing, rewrites sent history and can break the prompt-cache prefix; undo affects future pruning and cannot restore tool bodies already pruned from active context.", "web-errands and integrations are agent guidance, not setup steps. Any Himalaya, rclone, Taskwarrior, Home Assistant or Honcho install happens only after the user agrees in chat, never from setup.sh or plugin load. Taskwarrior is built from source (CMake >=3.24, Rust >=1.91.1 and several GiB of temporary space). The Google Workspace route requests Hermes's fixed scope list, which includes write access.", "Guided setup can change a profile's busy-input, intent-ack continuation, Telegram display, notification, reaction, memory-notice, cron-wrapping and timezone settings, but only after explicit answers. Busy mode, intent-ack continuation, memory-notice hiding, cron.wrap_response and timezone reach beyond Telegram within that profile; the autonomy choice takes effect after restart and preserves existing deliberate choices. Silence and non-interactive runs write nothing; neither setup script writes these keys.", "setup.sh --bind also sets TELEGRAM_HOME_CHANNEL for the bound profile through hermes config set and clears TELEGRAM_HOME_CHANNEL_THREAD_ID; it loads on gateway restart. If that fails, send /sethome in the primary DM.", "Desktop control needs a Hermes with tools.computer_use.backend.ComputerUseProvider (commit 63f5e0ea45726c5d8d7d207d140613997730aab3 or newer); a version string alone does not prove it. setup.sh --verify exits 2, not 0, for a partial install.", "This pin needs the paired workspace/remote browser host with approval-binding-v1 support for approved browser actions. Older hosts fail closed when that proof is unavailable; update and verify the paired workspace before rollout.", "Cross-bot proactivity is off by default and requires operator configuration and per-bot /proactivity cross on; activation needs a gateway restart. It exports bounded completed owner-DM excerpts across enabled profiles on one gateway. /proactivity cross off stops sharing/receiving/dispatch immediately and purges local shared text and permits; body-free hashes remain for 48 hours. Sanitization skips credential/payment-looking exchanges but cannot guarantee secrecy. Digest TTL is 24 hours, queued asks two hours; offline expired files remain until an activated profile prunes them. Copied context in Hermes history, sidecars, compaction, memory-provider records and model-provider retention is not erased by expiry or opt-out. The no-memory instruction is model policy. Shared storage requires POSIX owner-only directories/files. Dormant profiles do no store access.", "During a permitted primary check-in the model may automatically schedule one read-only/draft-only ask into an enrolled target bot's existing owner DM, with primary attribution. sent means scheduled, not delivered or completed; there is no delivery receipt or replay. A separate off-by-default results opt-in in both owner DMs permits one sanitized summary (280 UTF-8 bytes) per future ask, held in private results.json for at most two hours from the ask and consumed once at the primary's next owner turn or permitted check-in. There is no wake/retry; missing means unknown. Result opt-out purges pending outcomes and cross opt-out revokes the choice; already copied chat/provider context remains. Imported-session restrictions last at most 30 minutes and survive restart; terminal/code, desktop input, delegation, messaging, scheduling and unknown connectors are blocked, while existing gated browser calls remain possible. Existing approval/CAPTCHA/ownership gates apply; this is not universal read-only enforcement. Targets require gateway-injection permission and verified same-bot routes; missing permission, routing, busy/pause/hours or expiry can prevent delivery.", "Admission validation passes with warnings: cross_bot_ask is declared but only registers for an activated primary cross-bot profile; the default isolated probe does not activate it. proactivity.py and voice.py read gateway.session_context.get_session_env, which current Hermes flags as private imports that may break across releases.", "0.21.9 router changes: when the computer's ssh link drops and mac-watch reports it online, the router reconnects to it at most once a minute, re-initializes and replays only read-only and never-sent calls; an action that may already have run is answered as uncertain, never repeated. Only a failed reconnect or an offline/stale computer fails over to the VM, and after a failover a call that names a computer tab is refused rather than served by the VM. The approval gate also learns page names from a tab-open snapshot. A pre_llm_call note on every turn names the workspace tools and routine Mac moves."], "capabilities": {"provides_tools": ["proactivity", "cross_bot_ask"], "provides_hooks": ["pre_tool_call", "pre_llm_call", "post_llm_call", "on_session_end", "transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "alice-voice", "repo": "https://github.com/bablobanov/hermes-alice-voice", "sha": "e31f2c8e65bb861c6806bd19e8f57a1e89726450", "subdir": "plugins/alice-voice", "description": "Private Yandex Alice voice input for Hermes, with replies in Telegram. Disclosure \u2014 off until you set enabled: true and allow_gateway_injection: true; then, while the Telegram gateway is connected, it listens on 127.0.0.1 (port 8788 by default) for webhooks forwarded by your own HTTPS reverse proxy. The secret URL path (ALICE_WEBHOOK_SECRET) is the only authentication: Yandex request signatures are not checked, and the skill and account IDs in the request can be forged by anyone who has the URL. Each accepted request becomes a user message in one fixed Telegram DM session and runs with that session's tools; approvals stay in Telegram and slash commands are refused. Leaving owner_user_id empty accepts any Alice account presenting the URL.", "maintainer": "bablobanov", "tier": "community", "category": "voice", "requires_hermes": ">=0.21.3", "version": "0.3.0", "title": "Alice Voice Input", "image": "https://raw.githubusercontent.com/bablobanov/hermes-alice-voice/e31f2c8e65bb861c6806bd19e8f57a1e89726450/assets/hero.png", "docs_url": "https://github.com/bablobanov/hermes-alice-voice/blob/e31f2c8e65bb861c6806bd19e8f57a1e89726450/README.md", "readme": true, "platforms": ["linux", "macos", "windows"], "onboarding": false, "known_issues": ["Default profile and one existing authorized Telegram DM session only; a private Alice skill and operator-controlled HTTPS reverse proxy are required.", "Requires in-process plugin execution: the Telegram connect factory receives the native Application and is not supported by plugins.isolation: host.", "The webhook URL contains a bearer secret. Yandex request signatures are not verified; body skill/account IDs are not cryptographic authentication.", "Alice acknowledges asynchronous scheduling, not completion or delivery. Replies are sent to Telegram, not spoken by Alice.", "Deduplication is bounded and memory-only; no durable queue, exactly-once guarantee, or built-in global rate limiter."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ALICE_WEBHOOK_SECRET"]}}, {"name": "ample", "repo": "https://github.com/ishanray/hermes-ample", "sha": "0f35366996a71b72ff93dc81e291bbda564b4bf0", "version": "0.1.0", "title": "Ample", "description": "Ample (ample.computer) as native tools: deploy the websites and web apps Hermes builds to public HTTPS URLs, release changes to the same URLs, read build and runtime logs, list and delete apps; bundled skill ample:web-apps. Disclosure \u2014 maintained by Ample, the hosting service it deploys to; talks to Ample's API (https://api.ample.computer); on first use downloads the pinned Ample CLI 0.1.36 from Ample's release server (https://get.ample.computer/releases/0.1.36/, SHA-256 checked, never self-updated; cli_path uses your own binary instead) and runs it as a subprocess with an allowlisted environment and its crash reports off; ample_deploy uploads the folder it is given (home, Hermes home and credential directories refused) and writes ample.toml and .ample/ into it; with no AMPLE_CLIENT_ID/AMPLE_CLIENT_SECRET or AMPLE_TOKEN set, the first deploy signs up for a free Ample account (deleted after two days unless claimed) and saves its credential in Hermes's .env. A pre_tool_call hook sends every delete (scoped to that app) and the first publish of each folder to Hermes's approval gate; only folders the user has published, recorded in plugin state, skip it. No telemetry, no background processes.", "maintainer": "ishanray", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/ishanray/hermes-ample#readme", "readme": true, "capabilities": {"provides_tools": ["ample_deploy", "ample_logs", "ample_apps", "ample_app_delete"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "anatomy-museum", "title": "Anatomy Museum", "repo": "https://github.com/danrudy33/anatomy-museum", "sha": "6c2f3912b6af87d1149e38be523157057533d585", "version": "0.1.0", "description": "Native Anatomy community gallery with search, local favorites and explicit sandboxed standalone playback. Disclosure \u2014 when opened it fetches gallery metadata and thumbnails from a third-party GitHub repository (wheresryan22/anatomy-community, resolved at runtime from its mutable previews branch via api.github.com and raw.githubusercontent.com). \"Open figure in Hermes\" downloads that community figure's HTML and runs its JavaScript inside the Desktop SDK sandbox (opaque origin, scripts only), and \"Browse Ryan's website\" embeds skills.wheresryan.sh the same way. Favorites and filters stay in Desktop-local plugin storage; no credentials or Hermes data are sent.", "maintainer": "DanRudy33", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "platforms": ["macos"], "readme": true, "docs_url": "https://github.com/danrudy33/anatomy-museum#readme", "screenshots": ["https://raw.githubusercontent.com/danrudy33/anatomy-museum/6c2f3912b6af87d1149e38be523157057533d585/docs/gallery-dark.png", "https://raw.githubusercontent.com/danrudy33/anatomy-museum/6c2f3912b6af87d1149e38be523157057533d585/docs/gallery-light.png"], "known_issues": ["Requires the matching native Desktop SDK; tested source-built Desktop reports 0.0.0, not a certified prebuilt release number.", "Full embedded website navigation and website-wrapper Play-with-it are unsupported; repository standalone playback and external recovery are separate.", "Wankel, Zipper and WebGL Ripple tank were interaction-tested; the other catalog figures were not individually certified."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "ando-platform", "repo": "https://github.com/Ando-Corporation/hermes-ando", "sha": "1bfde877e1ed194ebf461d64e0468605d7e21a87", "tier": "community", "category": "platform", "maintainer": "Ando-Corporation", "version": "0.2.4", "description": "Connect a Hermes agent through an existing Ando invitation and receive authorized messages. Disclosure \u2014 connects outbound to Ando (mcp.ando.so, api.ando.so, realtime.ando.so) with an agent API key stored at $HERMES_HOME/ando/connection.json (mode 600); Ando messages from the connecting member (or members the operator explicitly allowlists) start Hermes turns and the final reply, with any files it attaches, is posted back to Ando; message attachments are uploaded and downloaded through short-lived single-use links Ando issues (up to 20 MB each; received files are cached in the profile's Hermes cache); hermes ando connect edits gateway.platforms.ando in config.yaml.", "docs_url": "https://github.com/Ando-Corporation/hermes-ando/blob/1bfde877e1ed194ebf461d64e0468605d7e21a87/README.md", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "android-emulator", "repo": "https://github.com/PIR8-Software/hermes-android-emulator", "sha": "3b5cb61e8bd6c4600f797a44c44234a6371bd59a", "description": "Control a headless Android emulator from Hermes \u2014 live sidebar, app management, GPS/battery/network simulation, and ADB tools. Emulator host is Linux. Disclosure \u2014 requires a pre-installed Android SDK under ~/Android/Sdk; runs adb, emulator, avdmanager and sdkmanager on the host, and the dashboard's Create AVD action downloads Android system images from Google via sdkmanager. emu_shell runs arbitrary commands inside the emulator; emu_install/emu_push copy host files into it.", "maintainer": "PIR8-Software", "tier": "community", "category": "tools", "version": "1.1.1", "image": "https://raw.githubusercontent.com/PIR8-Software/hermes-android-emulator/3b5cb61e8bd6c4600f797a44c44234a6371bd59a/docs/images/android-emulator-banner.png", "docs_url": "https://github.com/PIR8-Software/hermes-android-emulator#readme", "platforms": ["linux"], "capabilities": {"provides_tools": ["emu_status", "emu_shell", "emu_install", "emu_uninstall", "emu_screenshot", "emu_tap", "emu_swipe", "emu_type", "emu_key", "emu_launch", "emu_packages", "emu_push", "emu_pull", "emu_logcat", "emu_gps", "emu_battery", "emu_network", "emu_deeplink"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "antenna", "repo": "https://github.com/ClawReefAntenna/antenna-hermes", "sha": "f1fe906ea3b7292dcec5e59754cf4a50f84d737b", "description": "Signed messaging with paired Hermes and OpenClaw agents, with receiver-controlled live and opt-in non-YOLO headless delivery. Disclosure \u2014 runs a loopback-only Node receiver when listen_port is set (you expose only its HTTPS receive route); messages from paired peers become agent turns in the sessions you approve and may cause tool use, and opt-in background delivery runs them in non-YOLO sessions only; smart scanning sends message text through your configured provider; ClawReef Public Groups use a plaintext relay that ClawReef can read; identity keys, peer credentials, holds and receipts live in the profile's plugin-data/antenna (0700/0600) and backups contain credentials; policy and storage commands rewrite config.yaml (comments and formatting are lost).", "maintainer": "ClawReefAntenna", "tier": "community", "category": "automation", "title": "Antenna for Hermes", "image": "https://raw.githubusercontent.com/ClawReefAntenna/antenna-hermes/c3285e552389d4e117ed9e4dd959aa888c813570/docs/assets/antenna-hermes-feature-header-v1.jpg", "version": "1.7.0", "docs_url": "https://github.com/ClawReefAntenna/antenna-hermes/blob/f1fe906ea3b7292dcec5e59754cf4a50f84d737b/references/USER-GUIDE.md", "platforms": ["linux"], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start", "on_session_finalize", "on_session_reset", "pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "antigravity-agy", "repo": "https://github.com/Realtyxxx/hermes-plugin-antigravity-agy", "sha": "f85003d3ce0de3844e2d5c23174d630ff3586e5d", "description": "Run Hermes on a Google Antigravity subscription through the official agy CLI, with agy as the model only: a generated custom agent removes agy's built-in tools, Hermes tools are exposed through an inventory-only MCP server with native function calling, and every tool call is handed back to Hermes. Fails closed on any non-Hermes tool step or silent agent fallback; pre-warms agy for fast tool loops. Disclosure \u2014 routes inference through Google's official agy CLI and counts against the Antigravity/Gemini subscription agy is signed in to; the plugin never reads, copies or links agy's credential files. agy runs in your real HOME with the gateway's environment; by default the plugin moves the agy conversation records created by its own idle pre-warmed processes under ~/.gemini/antigravity-cli/ to the trash (trash-put from PATH; ANTIGRAVITY_AGY_CLEANUP=off disables) and pre-warms up to 4 idle agy processes (~400 MB each).", "maintainer": "Realtyxxx", "tier": "community", "category": "models", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/Realtyxxx/hermes-plugin-antigravity-agy#readme", "version": "0.1.0", "readme": true, "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "antigravity-oauth", "repo": "https://github.com/neerazz/hermes-antigravity-oauth", "sha": "466fafb9b6e8099735d79ed32f97005a477ba144", "description": "Sign in to Google Antigravity with `hermes auth add antigravity-oauth` (or one command, `npx hermes-antigravity-oauth`) and run Hermes on the Antigravity plan: Gemini 3.x, Claude 4.6, GPT-OSS. Every request is made by Google's official agy CLI under agy's own login. The plugin writes your Hermes SOUL.md and system prompt into agy's workspace GEMINI.md so the persona carries over. When a model reaches for an agy-native tool (run_command, view_file, grep_search, and so on) the call is re-issued as the matching Hermes tool, which then runs under Hermes approvals. agy never executes tools on the host, and unmapped native tools are blocked. Disclosure: inference counts against the Antigravity/Gemini subscription agy is signed in to. The plugin never reads, copies or uploads the OAuth token. It symlinks agy's antigravity-oauth-token file, and on macOS ~/Library/Keychains, into a per-session private temp HOME, which is deleted on close. It also probes the OS keyring (security / secret-tool / cmdkey) for credential presence only. Derived from antigravity-subscription-directsdk (MIT). Disclosure \u2014 inference counts against the Antigravity/Gemini subscription agy is signed in to. The plugin does not read or upload the OAuth token itself; it symlinks (hard-links, or as a last resort copies) agy's antigravity-oauth-token file, and on macOS ~/Library/Keychains, into a per-session private temp HOME that is deleted on close, probes the OS keyring (security / secret-tool / cmdkey) for credential presence only, and writes the full Hermes system prompt into that temp workspace as GEMINI.md each turn. Derived from antigravity-subscription-directsdk (MIT).", "maintainer": "neerazz", "tier": "community", "category": "models", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/neerazz/hermes-antigravity-oauth#readme", "version": "0.1.2", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "antigravity-subscription-directsdk", "repo": "https://github.com/soyelmismo/hermes-antigravity-subscription", "sha": "4cbb0563a670d318dfc81bb5e7813b86621e71b5", "description": "Run Hermes on an Antigravity subscription via the official agy CLI (DirectSDK path). Streams tokens progressively, persists multi-turn trajectories via agy --conversation (up to 239k tokens), discovers models dynamically per account, maps thinking effort, reports quota in /usage, and aborts reported native tools. Disclosure \u2014 routes inference and /usage quota reads through Google's official agy CLI under your subscription (usage counts against it); links (symlink, else hardlink/copy) the antigravity-oauth-token into a per-session private temp HOME deleted on close; probes OS keyring presence (Linux Secret Service, macOS Keychain, Windows Credential Manager) without reading secrets; on macOS symlinks ~/Library/Keychains for CLI session reuse; never writes to vendor credential stores; strips credential-looking environment variables before spawning agy (name heuristic; ANTIGRAVITY_ENV_STRICT for an allow-list). Disclosure \u2014 the opt-in ANTIGRAVITY_DEBUG_PROMPT_DIR env var writes every outgoing prompt (full conversation text) to that directory.", "maintainer": "soyelmismo", "tier": "community", "category": "models", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/soyelmismo/hermes-antigravity-subscription#readme", "version": "1.0.21", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "anyapi", "title": "AnyAPI.ai", "repo": "https://github.com/es697/hermes-provider-anyapi", "sha": "e5b7b985b5aa56bc585ef1924858978696eb0c3a", "subdir": "anyapi", "description": "AnyAPI.ai \u2014 unified OpenAI-compatible access to 400+ models; /model picker filtered to tool-capable routes. Disclosure \u2014 sends your prompts, tool results and ANYAPI_API_KEY to api.anyapi.ai, a third-party relay (AnyAPI Inc.) that forwards them to the upstream vendor serving the chosen model; billed to your AnyAPI account.", "maintainer": "es697", "tier": "community", "category": "models", "docs_url": "https://github.com/es697/hermes-provider-anyapi#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ANYAPI_API_KEY"]}, "version": "0.1.0", "requires_hermes": ">=0.20.0"}, {"name": "anyrouter", "repo": "https://github.com/duyet/hermes-provider-anyrouter", "sha": "86bc17dd61ade9baa6f2fb7d440979b55359a907", "subdir": "anyrouter", "description": "AnyRouter \u2014 unified model gateway (OpenAI-compatible); /model picker filtered to tool-capable routes, first-party meta-models like anyrouter/hermes. Disclosure \u2014 sends your prompts and ANYROUTER_API_KEY to anyrouter.dev, a third-party relay that forwards to upstream vendors (OpenAI, Anthropic, Google, xAI, \u2026), on some plans through a shared pool of other members' donated free-tier vendor keys; billed in prepaid AnyRouter credits. anyrouter/hermes is AnyRouter's own routing meta-model, not a Nous Research model. Opt-in ANYROUTER_APP_ATTRIBUTION=1 adds Hermes attribution headers.", "maintainer": "duyet", "tier": "community", "category": "models", "docs_url": "https://github.com/duyet/hermes-provider-anyrouter#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ANYROUTER_API_KEY"]}}, {"name": "anysearch", "repo": "https://github.com/vollegrewar/hermes-plugin-anysearch", "sha": "43c1757a5d12d4d7adb4e74326c99182f4957b6f", "description": "AnySearch web search and extraction plus two real-time fallback chains: when a primary backend fails (Exa quota, Firecrawl timeout), the same call is served by AnySearch (1,000 free requests/day).", "maintainer": "vollegrewar", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/vollegrewar/hermes-plugin-anysearch#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "aphrodite", "repo": "https://github.com/PlayForm/Aphrodite-Hermes", "sha": "e95afcd9d99360fdf73ecdd2f540af7cd81597ec", "description": "CCR compression plugin - 28-type classifier, 13 tools, opt-in context engine, TOML-driven templates. Disclosure - pre_tool_call auto-backgrounds long terminal/process commands (modify: background=true, notify_on_complete=true) and rewrites chained terminal commands when enabled. Disclosure \u2014 hook and tool logic runs in prebuilt native binaries (libaphrodite_hermes + aphrodite proxy, v1.6.6) built from the public PlayForm/Aphrodite source and fetched by an explicit download.sh step checked against in-tree SHA-256 sums; register() starts a background proxy on 127.0.0.1:9797/9798 whose management routes are open to local processes unless APHRODITE_MGMT_TOKEN is set; pre_tool_call by default rewrites slow terminal commands (cargo/npm/pip/docker/curl\u2026) to run in the background (background=true, notify_on_complete=true) and splits chained commands when enabled; aphrodite_prefetch reads files the model names into its store (refuses .env, auth.json, ~/.ssh and the Hermes home); requires its own APHRODITE_API_KEY for an upstream LLM endpoint (default api.openai.com).", "maintainer": "NikolaRHristov", "tier": "community", "category": "tools", "requires_hermes": ">=0.20.2", "docs_url": "https://github.com/PlayForm/Aphrodite-Hermes#readme", "version": "2.2.6", "capabilities": {"provides_tools": ["aphrodite_retrieve", "aphrodite_compress", "aphrodite_stats", "aphrodite_rebuild", "aphrodite_files", "aphrodite_diff", "aphrodite_search", "aphrodite_directive", "aphrodite_test", "aphrodite_catalog", "aphrodite_reclassify", "aphrodite_prefetch", "aphrodite_prefetch_status"], "provides_hooks": ["on_session_start", "transform_tool_result", "pre_llm_call", "transform_terminal_output", "post_llm_call", "pre_tool_call"], "provides_middleware": [], "requires_env": ["APHRODITE_API_KEY"]}}, {"name": "apify", "repo": "https://github.com/apify/apify-hermes-agent-plugin", "sha": "a3a7af0c0dda9fdac79d67fb0a7a50b7a39cd91d", "description": "Apify, the largest marketplace of tools for AI: discover, run, and collect results from thousands of ready-to-run Actors, from the comfort of your agent, plus an Apify backend for the built-in web_search and web_extract tools.", "maintainer": "apify", "title": "Apify", "version": "0.1.5", "image": "https://raw.githubusercontent.com/apify/apify-hermes-agent-plugin/a3a7af0c0dda9fdac79d67fb0a7a50b7a39cd91d/assets/banner.png", "tier": "community", "category": "web", "docs_url": "https://docs.apify.com/integrations/hermes-agent", "capabilities": {"provides_tools": ["apify_discover", "apify_start", "apify_collect"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["APIFY_API_TOKEN"]}}, {"name": "approval-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "4a2ef866a51f1c99ed1d77e423136450340d901b", "subdir": "approval-ledger", "description": "Local ledger of Hermes's approval prompts (dangerous commands, protected writes, MCP consent, smart-mode verdicts): /approval-log shows how often each rule asked, how many prompts were approved, denied or left unanswered, and how long a person took to answer, per rule, per surface or per day, for the last 24 hours, any number of hours or days, the latest session or everything recorded; /approval-log recent lists the newest decisions (ten, or up to 100 with /approval-log recent 50). Disclosure \u2014 writes decision metadata (session id, surface, rule label, answer, timings; no command, description or session key) to plugin-data/approval-ledger/approvals.jsonl, trimmed to 5,000 rows past 2 MB; observer only, cannot answer or change an approval; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/approval-ledger", "version": "1.2.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/4a2ef866a51f1c99ed1d77e423136450340d901b/docs/approval-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_approval_request", "post_approval_response"], "provides_middleware": [], "requires_env": []}}, {"name": "ard-kit", "repo": "https://gitlab.com/ameobius-ai/ard-kit", "sha": "99796c7d776d89c8dcf99489b89a2b52831c4dc9", "description": "Agentic Resource Discovery \u2014 search a local tool catalog by intent and inspect an entry to get its invoke command. Ships the ard-registry skill plus an stdio MCP server (ard_search / ard_inspect / ard_verify); stdlib only, the run stays local. Disclosure \u2014 no network egress, no API keys and no environment variables read by the MCP front, which ranks a catalog JSON on disk; no catalog ships in the repo, so the first call returns an explicit error naming the `python -m ard_kit.catalogize` command that builds one.", "maintainer": "ameobius-ai", "tier": "community", "category": "tools", "docs_url": "https://gitlab.com/ameobius-ai/ard-kit#readme", "version": "0.20.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "artifact-relay", "repo": "https://github.com/eloktev/hermes-artifact-relay", "sha": "c91fa9229121dd616a275a45447301eacca45e6f", "description": "Publish and read private Markdown or HTML reports through your Artifact Relay server.", "maintainer": "eloktev", "tier": "community", "category": "tools", "docs_url": "https://github.com/eloktev/hermes-artifact-relay#readme", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["artifact_read", "artifact_publish"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ARTIFACT_RELAY_API_TOKEN"]}}, {"name": "artifacts", "repo": "https://github.com/dmmeteo/hermes-artifacts", "sha": "57b61fca2872d15060d8a9b30b9e51242e9cb357", "subdir": "plugin", "title": "Hermes Artifacts", "description": "Private library for the finished documents agents make (self-contained HTML, Markdown, SVG, PNG, WebP), with an Artifacts dashboard tab and explicit, expiring, revocable guest links for one artifact each. Early public preview. Disclosure \u2014 the plugin is a client of a separate Artifacts service you run yourself from the same repository (not installed by the plugin): six tools and the dashboard tab send artifact bytes and metadata to HERMES_ARTIFACTS_URL with the machine credential HERMES_ARTIFACTS_TOKEN, resolved through Hermes secret scope, held server-side and never sent to the browser. artifact_publish reads a resolved local path only after Hermes read-policy and supported-extension checks; an explicit kind must match. artifact_download checks raw and resolved destinations against Hermes write policy, refuses approval-required paths even with overwrite=true, and writes atomically through a temporary sibling. File policy is defense in depth, not filesystem isolation. Sharing creates a public bearer link on your service; revocation cannot recall copies. Stores no data and no credentials of its own; no hooks, background processes or telemetry.", "maintainer": "dmmeteo", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/dmmeteo/hermes-artifacts/blob/57b61fca2872d15060d8a9b30b9e51242e9cb357/docs/hermes.md", "version": "0.1.0", "readme": false, "platforms": [], "known_issues": ["Conflicts with artifact-relay because both register artifact_publish. Enable only one of these plugins.", "Needs the Hermes Artifacts service running separately (run from source; no package or image yet). Tested with Hermes 0.21.x and in Chromium only."], "capabilities": {"provides_tools": ["artifact_publish", "artifact_list", "artifact_get", "artifact_download", "artifact_share", "artifact_revoke_share"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["HERMES_ARTIFACTS_URL", "HERMES_ARTIFACTS_TOKEN"]}}, {"name": "aside-browser", "repo": "https://github.com/leonphull/hermes-aside-browser", "sha": "ffd4e0e0de4b3a8624f3d83f98c378b88d6f9581", "description": "Use the signed-in Aside browser as Hermes's browser when the Aside CLI is installed. Disclosure \u2014 runs the local aside CLI to drive your signed-in Aside browser (page text, screenshots, Aside memory, model-written JavaScript via aside_repl) without a Hermes approval prompt; Aside's permission level is a user-only setting (default ask) that covers aside_exec only. Optional pre_tool_call hook blocks Hermes' built-in browser tools while Aside is ready when browser_policy is always. Reads Aside's settings.json for the model list; no telemetry.", "maintainer": "leonphull", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/leonphull/hermes-aside-browser#readme", "version": "0.3.0", "platforms": [], "known_issues": ["Drives the signed-in Aside browser on this machine. Does not install Aside."], "capabilities": {"provides_tools": ["aside_status", "aside_exec", "aside_repl", "aside_session", "aside_memory"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "astro-agents", "title": "Astro Agents", "repo": "https://github.com/aidatatools-dev/astro-agents-mcp", "sha": "84285c6cee5d7f2779fba968445c167b505ed62a", "version": "1.1.0", "description": "Exact Western and Vedic astrology through the Astro Agents MCP server (Streamable HTTP at https://astro-agent.dev/mcp, no sign-in, no keys in config): birth chart, transits, synastry, kundli with D1-D60 divisional charts, Vimshottari dashas, doshas, panchang and Gun Milan, computed from the NASA/JPL DE440 ephemeris with no LLM; every result carries a SHA-256 hash. Bundles the astrology skill (when to call which tool, input conventions). Agent Plugins v1 package (plugin.json + mcp.json + skills/), configuration only. Disclosure \u2014 hosted-only connector with no local code; every tool call sends the birth date, time and coordinates it is given to astro-agent.dev, and the tool set is served by that server at runtime, not covered by the pinned sha. Each client gets 3 free calls, after which a tool returns REST payment instructions (x402 or MPP); nothing is charged over MCP and the package holds no wallet or key.", "maintainer": "aidatatools-dev", "tier": "community", "category": "tools", "docs_url": "https://github.com/aidatatools-dev/astro-agents-mcp", "requires_hermes": ">=0.22.5", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "athletedata", "title": "athletedata", "repo": "https://github.com/athletedata-health/mcp", "sha": "1ca2fa8d129c6b7c80a8af516a6653b7aa250679", "version": "1.0.0", "description": "The athlete's own training and health data from 39 apps (Garmin, Oura, WHOOP, Hevy, Apple Health, Intervals.icu and more) through athletedata's hosted MCP server (Streamable HTTP at https://mcp.athletedata.health/mcp): activities, training load, HRV, sleep, readiness, nutrition, body composition, race predictions, and structured workouts pushed to the athlete's watch. Bundles one skill that tells the agent when to use it. Agent Plugins v1 package (plugin.json + mcp.json + skills/), configuration only. Disclosure \u2014 hosted-only connector with no local code: every tool call, with its arguments, goes to mcp.athletedata.health and needs an athletedata account (paid, 7-day free trial) with its API key in ATHLETEDATA_API_KEY; the athlete's health and training data is returned from that server. Write tools (push a workout to the watch, log food, create a Hevy routine) change the athlete's own accounts; the package marks the server untrusted, so Hermes asks before every tool the server does not annotate as read-only. The tool set is served by the remote server at runtime and is not covered by the pinned sha.", "maintainer": "athletedata", "tier": "community", "category": "tools", "docs_url": "https://github.com/athletedata-health/mcp#hermes-agent", "requires_hermes": ">=0.21.6", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ATHLETEDATA_API_KEY"]}}, {"name": "atmorouter", "title": "AtmoRouter", "repo": "https://github.com/bayuh85/hermes-atmorouter", "sha": "fd1002c51cc7069696a5db5b391faed77279f910", "description": "AtmoRouter \u2014 OpenAI-compatible gateway; one key for Claude, GPT, Gemini, GLM, Kimi, Qwen, DeepSeek, MiniMax and Grok models, with the /model picker fed by the live GET /v1/models catalog. Disclosure \u2014 sends your prompts, conversation history, tool definitions, tool results and ATMOROUTER_API_KEY to atmorouter.dev, which forwards each request to the upstream infrastructure serving the chosen model; that infrastructure's location and retention vary per model and zero retention is not promised (AtmoRouter states it keeps metadata, not prompt or response content, in its usage records and does not train on API content; https://atmorouter.dev/privacy). Usage is billed per token from a prepaid AtmoRouter balance (USDC on Solana or QRIS); prices vary by capacity tier and a request can route to any listed tier, including tiers above official pricing, unless you set maximum prices under Budgets; failed upstream requests are not billed and the plugin itself makes no payments.", "maintainer": "bayuh85", "tier": "community", "category": "models", "docs_url": "https://github.com/bayuh85/hermes-atmorouter#readme", "version": "0.1.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ATMOROUTER_API_KEY"]}}, {"name": "author-feed", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-author-feed", "sha": "cf5321d057d59fbe953ba28ef7ba3288dd6b4782", "description": "Read one public profile and watch one account, with profile_get, author_feed and author_watch. It reads public posts and profiles from the Bluesky social media network, which is built on the AT Protocol (atproto), without signing in. Disclosure \u2014 HTTPS GET only to public.api.bsky.app, no API key, and no program on your machine. The tools are on for every surface, including gateways, and ask for no approval: anyone you allow on your gateway can call them. Turn a surface off with hermes tools. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. hermes author-feed schedule creates one cron job, a model turn every hour by default (two or more model requests, no daily cap). Delivered to local unless you pass --deliver, so no chat by default. Run hermes author-feed unschedule before removal. A leftover job after the plugin is gone stops with hermes cron remove <id>. Under plugins.isolation: host the watch cannot run and posts a notice saying so on every run. The first run only records what is already there. One run reads at most the latest 3 pages and announces a new post by this account on them. When every row on those pages is new, with no saved post or mark, and the feed still offers another cursor, it also posts a possible-miss notice, at most once in 24 hours while that keeps happening. Replies, including the account's own thread continuations, are not announced. It relies on private Hermes parts, so an update can stop it. State stays in <HERMES_HOME>/plugin-data/author-feed after uninstall.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-author-feed#readme", "version": "0.1.1", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-author-feed/cf5321d057d59fbe953ba28ef7ba3288dd6b4782/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["profile_get", "author_feed", "author_watch"], "provides_hooks": [], "provides_middleware": []}}, {"name": "auto-pin", "repo": "https://github.com/bmcfiv/hermes-plugin-auto-pin", "sha": "4458088ccfe3b5371e16fdae37753956f1296713", "description": "Automatically pin every new interactive session (desktop, CLI, TUI) and the branches you fork from them. Cron, one-shot, subagent and messaging sessions are left alone, and unpinning a session sticks. Disclosure \u2014 on each new desktop/CLI/TUI session it sets the session's pinned flag in Hermes's session database (state.db) through the shared SessionDB handle, and records each automatic pin in $HERMES_HOME/auto-pin/ledger.txt; no network, no tools.", "maintainer": "bmcfiv", "tier": "community", "category": "general", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/bmcfiv/hermes-plugin-auto-pin#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start"], "provides_middleware": [], "requires_env": []}}, {"name": "aux-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "aee39a67b4ffb1ff786c417fb92f997a8c7663b7", "subdir": "aux-ledger", "description": "Local ledger of Hermes's auxiliary LLM calls (titling, compression, vision, approval): /aux shows tokens, time and failures per task, model, provider or day, or lists the newest calls (ten, or up to 100 with /aux recent 50), for the last 24 hours, any number of hours or days, the latest session or everything recorded. Disclosure \u2014 writes auxiliary-call metadata (ids, models, timings, token counts, no prompt or response text) to plugin-data/aux-ledger/calls.jsonl, trimmed to 5,000 rows past 2 MB; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/aux-ledger", "version": "1.4.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/aee39a67b4ffb1ff786c417fb92f997a8c7663b7/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["post_auxiliary_call"], "provides_middleware": [], "requires_env": []}}, {"name": "b64-ref", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "89b15726e6f44bc072bd6af5fc6a1402e50aafa3", "subdir": "b64-ref", "description": "@b64: context references that decode encoded text for the model: @b64:<value> takes base64 (standard or URL-safe, padded or not), hex (0x48656c6c6f, 48:65:6c, \\x48\\x65), percent-encoding or a data: URI, told apart by the value's shape or picked with base64:, base64url:, hex: or url:, and attaches what it holds: text as text with control and invisible characters escaped, JSON pretty-printed, gzip and zlib inflated in memory (at most 1 MiB, one layer), and binary named by its format (PNG and GIF with their size, JPEG, PDF, ZIP, ELF, SQLite and more) with a hex dump of its first 128 bytes; notes point out a value that was cut short, padding that is off, a second layer of encoding and a JWT inside; the TUI and Desktop composer preview a value as you type it. Disclosure \u2014 reads only the text of the reference itself, using Python's base64, json, urllib.parse and zlib; nothing decoded is run, opened or saved; no network, no files read or written, no subprocess, no credentials read; the plugin keeps no copy of what it decodes, but the @b64: reference and the decoded contents become part of the message sent to your model provider and saved in the session history, so decode only values you are willing to share with it; register() only adds the @b64: reference provider.", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/b64-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/89b15726e6f44bc072bd6af5fc6a1402e50aafa3/docs/b64-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "background-review-watch", "repo": "https://github.com/vectorforge22/background-review-watch", "sha": "75c6f45741021529e19f87bbf2803ea1b608aa5e", "description": "Status-bar chips for the background self-improvement review and batch context compaction: review running/done/stale with live elapsed time, a turn-countdown fill bar to the next nudge, an always-visible compaction chip (compacting/done/failed/stale with committed reduction or failure class), reply-guard recovery and review-overlap diagnostics, and a Settings page that tunes both orphan ceilings. Disclosure \u2014 renderer-only; polls filtered read-only tails of agent.log via host.logs to parse lifecycle markers; listens for review.summary/message.start/message.complete events; stores three small plugin-storage records (settings + last compaction + last review); no network calls beyond the local gateway, no credential access, no self-update.", "maintainer": "vectorforge22", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "0.5.0", "docs_url": "https://github.com/vectorforge22/background-review-watch", "platforms": [], "screenshots": ["https://raw.githubusercontent.com/vectorforge22/background-review-watch/75c6f45741021529e19f87bbf2803ea1b608aa5e/docs/screenshots/status-bar-idle.png", "https://raw.githubusercontent.com/vectorforge22/background-review-watch/75c6f45741021529e19f87bbf2803ea1b608aa5e/docs/screenshots/review-running.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "beam", "repo": "https://github.com/Beam-Network/beam-hermes", "sha": "d41448cb3f08bacbc368a4948ecbe310e5f6964c", "version": "0.1.1", "title": "Beam", "description": "Move data across cloud storage and exchange end-to-end encrypted messages, files and media between agents with Beam Network (Bittensor SN105).", "maintainer": "Beam-Network", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Beam-Network/beam-hermes#readme", "readme": true, "capabilities": {"provides_tools": ["beam_account", "beam_transfer_estimate", "beam_transfer_start", "beam_transfer_status", "beam_transfer_list", "beam_transfer_cancel", "beam_rooms", "beam_room_listen", "beam_room_messages"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["BEAM_API_KEY"]}}, {"name": "bento", "repo": "https://github.com/shagghiesuperstar/hermes-plugin-bento", "sha": "f490ed02c0e377acc9112bf57192bacedbbcd9b1", "description": "Bento (bentonow.com) email marketing: subscribers, tags, fields, events incl. $purchase, stats, draft/scheduled broadcasts and transactional email, with dry-run + human-approval gates on every send. Native Python plugin, no dependencies. Disclosure \u2014 sends real email (bento_email_send, bento_broadcast_schedule), and events, purchases and consent changes can trigger Bento Flows that email people; calls only app.bentonow.com (an operator base_url override is limited to https *.bentonow.com or loopback) with the BENTO_* keys from the profile .env; no telemetry, no self-update; T2/T3 calls go to the Hermes approval prompt, which asks no human under YOLO, approvals.mode off, or cron/single-query/unattended mode set to approve. T3 sends then still need a dry-run confirm token and hard guards, but T2 writes (events, purchases, consent, bulk upserts) need no token unless safety.tier2 is token_only; T1 writes (tags, tag/field definitions, drafts, upserts up to bulk_threshold) are never gated and still run under environment=disabled; environment=staging does not block sends, only environment=disabled blocks T2/T3.", "maintainer": "shagghiesuperstar", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/shagghiesuperstar/hermes-plugin-bento#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["bento_subscriber_get", "bento_subscriber_upsert", "bento_subscriber_tag", "bento_subscriber_consent", "bento_tag_list", "bento_tag_create", "bento_field_list", "bento_field_create", "bento_event_track", "bento_purchase_track", "bento_broadcast_list", "bento_broadcast_create", "bento_broadcast_schedule", "bento_email_send", "bento_stats"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": ["BENTO_PUBLISHABLE_KEY", "BENTO_SECRET_KEY", "BENTO_SITE_UUID"]}}, {"name": "better-session-appearance", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "a503f2d3166f41bb0eacd7158150894da7eff14d", "subdir": "public/better-session-appearance", "description": "Set a color for each session and show an idle glyph to make rows easier to scan.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/better-session-appearance", "version": "1.2.2", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/a503f2d3166f41bb0eacd7158150894da7eff14d/public/better-session-appearance/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "betterdb", "repo": "https://github.com/BetterDB-inc/monitor", "subdir": "packages/hermes-memory-py", "sha": "cf54fb5f97afef8b3387ffe91be6272d5da23ea2", "version": "0.1.0", "description": "BetterDB long-term memory provider \u2014 semantic recall on Valkey / valkey-search via the betterdb-agent-memory SDK. Completed turns are embedded and stored in a vector index; the next turn recalls the most relevant memories with a composite similarity/recency/importance score. Explicit betterdb_remember / betterdb_recall / betterdb_forget tools. Disclosure \u2014 turn text and tool-stored facts are embedded through an OpenAI-compatible embeddings endpoint you configure (embeddings_base_url, default api.openai.com) and written to the Valkey instance you point it at; plaintext http:// to a remote host is refused. Opt-in, off by default: a discovery marker (set discovery=true to let BetterDB Monitor enumerate the tier) and SDK usage analytics (set telemetry=true).", "maintainer": "betterdb-inc", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/BetterDB-inc/monitor/tree/master/packages/hermes-memory-py#readme", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["betterdb_remember", "betterdb_recall", "betterdb_forget"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "bharatcode-provider", "repo": "https://github.com/thenabbu/bharatcode-hermes", "sha": "f4cc1d1f2977963173b23b9ac6a19c3ca8851050", "subdir": "model-providers/bharatcode", "description": "BharatCode (bharatcode.ai) OpenAI-compatible model provider \u2014 free student tier, native /model integration. Disclosure \u2014 model provider; prompts, tool schemas and BHARATCODE_API_KEY go to bharatcode.ai (BharatCode, India), which processes prompts through third-party inference partners, some outside India; outside paid Pro (complimentary or referral Pro included) BharatCode may retain private prompt/response logs for debugging, abuse review and product quality, and even on paid Pro a flagged account can have a time-limited sample of up to 100 prompts and responses captured for security review.", "maintainer": "thenabbu", "tier": "community", "category": "models", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/thenabbu/bharatcode-hermes#readme", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["BHARATCODE_API_KEY"]}}, {"name": "bilinc", "repo": "https://github.com/ReARCLabs/bilinc-hermes-plugin", "sha": "1ad81b4aaef8632ba5d6438384f3f063f46a0ebd", "version": "1.0.0", "description": "Hosted memory for Hermes with a full history: see what your agent remembered, when it changed and why. Recalls relevant memories before each turn, adds bilinc_recall, bilinc_remember, bilinc_revise and bilinc_forget tools, and mirrors Hermes built-in memory writes. Maintained by ReARC Labs; free plan available. Disclosure \u2014 recall queries (the text of each message, when auto_recall is on), tool arguments, mirrored built-in memory writes, the Hermes session id and, only if memory.bilinc.capture_turns is turned on, each turn's user and assistant text are sent over HTTPS to bilinc.space under your BILINC_API_KEY; requests carry User-Agent bilinc-hermes/<version> and X-Bilinc-Client: hermes-plugin headers. Secret-looking strings are redacted before sending. Recall and writes run on background threads inside Hermes; no separate process, local database or telemetry.", "maintainer": "ReARCLabs", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/ReARCLabs/bilinc-hermes-plugin#readme", "title": "Bilinc", "image": "https://raw.githubusercontent.com/ReARCLabs/bilinc-hermes-plugin/1ad81b4aaef8632ba5d6438384f3f063f46a0ebd/docs/banner.jpg", "screenshots": ["https://raw.githubusercontent.com/ReARCLabs/bilinc-hermes-plugin/1ad81b4aaef8632ba5d6438384f3f063f46a0ebd/docs/screenshots/memory-history.png", "https://raw.githubusercontent.com/ReARCLabs/bilinc-hermes-plugin/1ad81b4aaef8632ba5d6438384f3f063f46a0ebd/docs/screenshots/memory-workspace.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["BILINC_API_KEY"]}}, {"name": "billing", "repo": "https://github.com/anotherchu/billing", "sha": "2dfcc8ef346c1be65861bc8e8295c9727eb77c39", "description": "Nous Portal usage widget for the Hermes desktop statusbar \u2014 remaining credits plus plan-usage percentage, with portal detail on hover.", "maintainer": "anotherchu", "tier": "community", "category": "desktop", "requires_hermes": ">=0.19", "docs_url": "https://github.com/anotherchu/billing#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "biomimetic-brain", "repo": "https://github.com/ousiaresearch/biomimetic-brain", "sha": "efbf72d0afc4dff0ab212542eed584114f88d70d", "description": "Meters and a gate for a long-running agent \u2014 25 subsystem state files (energy, fatigue, circadian phase, motivation, novelty, attention, conflict, values, open questions), one folded brain-state.json the rest of the agent reads, four maintenance passes that keep it honest, and a read-only PROCEED / CAUTION / VETO decision gate whose refusals name the numbers behind them. Provides the mind-kit skill, which seeds the files, produces the aggregate, schedules the passes and teaches the gate. Disclosure \u2014 portable Agent Plugins v1 package; it registers no hooks, no tools and no middleware, makes no network calls, and reads and writes state files only under the agent directory you choose, where a subsystem that has stopped updating reports stale instead of asserting an old number. No dependencies beyond the Python standard library (two shell scripts for the scheduled passes). Its scripts, when the agent or operator runs them, read and write JSON state under the directory chosen with MIND_AGENT_DIR (default an agent/ folder inside the plugin's own install dir), read HERMES_HOME/cron/executions.db for cron counts, and execute scripts/batch-maintenance.sh or scripts/verify-invariants.py from that agent directory if present; no network egress and no LLM calls.", "maintainer": "ousiaresearch", "tier": "community", "category": "general", "version": "1.1.0", "docs_url": "https://github.com/ousiaresearch/biomimetic-brain", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "birkin-mnemosyne", "repo": "https://github.com/ashmoonori-afk/birkin-mnemosyne", "sha": "f91aeac0dcb3ff06bf5d82337a69b3f694880bd5", "subdir": "integrations/hermes", "version": "0.2.3", "description": "Local Markdown memory provider with multilingual lexical recall and profile-local durable notes. Create-only writes are limited to primary agent contexts. Uses published birkin-mnemosyne 0.7.2 with compatible updates below 1.0; no API key, network service or telemetry. Session handoff capture is opt-in. Native Hermes memory files remain separate.", "maintainer": "ashmoonori-afk", "tier": "community", "category": "memory", "docs_url": "https://github.com/ashmoonori-afk/birkin-mnemosyne/tree/f91aeac0dcb3ff06bf5d82337a69b3f694880bd5/integrations/hermes", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "blackbox", "repo": "https://github.com/umanitek/agent-blackbox", "sha": "7d697683e0d56608cfe3fee374d6a6866702058a", "subdir": "plugins/blackbox", "title": "Agent Blackbox", "description": "Security for agents: checks every tool call and model request before it runs against a curated, verifiable threat graph (prompt injection, dangerous commands, malicious packages, unsafe skills, phishing and drainer indicators) and local rules that keep an agent away from wallet stores, seed phrases, private keys and exchange API keys. Audit mode records; block mode refuses. Can share privacy-safe threat reports with an open community graph once the user turns sharing on (off by default); community findings only ever flag. Hooks only: no tools, no middleware. Disclosure \u2014 hooks see every tool call and model request; `hermes blackbox setup` installs Node (via a checksum-pinned nvm installer) if missing, the OriginTrail DKG node from npm (checksum-pinned) and Blazegraph in Docker or Oxigraph, registers the DKG node and the dashboard as login services (systemd/LaunchAgent), and joins the DKG peer-to-peer network; package installs are looked up on api.osv.dev (name and version); community threat reports signed by a local reporter key (threat identifiers, including domains of fetched pages that served a verified injection) are shared to the community graph only after you turn sharing on (off by default); the optional LLM reviewer sends the current turn's user and tool text to OpenAI or Anthropic; `blackbox attach` copies the plugin into the Hermes homes/profiles and OpenClaw workspaces you name and enables it in their config (automatic attaching is off unless you set `auto_attach: true`); `hermes blackbox chat` creates an `agent-blackbox` profile cloned from the current one (config.yaml and .env); the dashboard runs on 127.0.0.1:9700.", "maintainer": "Umanitek", "tier": "community", "category": "tools", "version": "1.0.0", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/umanitek/agent-blackbox/tree/7d697683e0d56608cfe3fee374d6a6866702058a/plugins/blackbox", "image": "https://raw.githubusercontent.com/umanitek/agent-blackbox/7d697683e0d56608cfe3fee374d6a6866702058a/docs/catalog/banner.png", "screenshots": ["https://raw.githubusercontent.com/umanitek/agent-blackbox/7d697683e0d56608cfe3fee374d6a6866702058a/docs/catalog/dashboard.png", "https://raw.githubusercontent.com/umanitek/agent-blackbox/7d697683e0d56608cfe3fee374d6a6866702058a/docs/catalog/trader-shield.png", "https://raw.githubusercontent.com/umanitek/agent-blackbox/7d697683e0d56608cfe3fee374d6a6866702058a/docs/catalog/threat-tiers.png"], "readme": true, "platforms": [], "known_issues": ["After installing, run `hermes blackbox setup` once: it installs Blackbox's local DKG node (a pinned, checksum-verified OriginTrail release from npm) and its graph store (Blazegraph in Docker, or Oxigraph when Docker is not available), then syncs the verified threat graph. Until setup has run, the built-in rules protect and `hermes blackbox status` says setup is needed."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_api_request", "on_session_start", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "blender", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "9b11ffeda84b077bea9de52d22733c7a41ca581a", "subdir": "blender", "version": "0.4.1", "description": "Official Blender Lab MCP server over stdio, pinned to upstream v1.0.3, with a Blender workflow skill. Needs Git and uv; Blender 5.1+ is not needed at install. The skill opens Blender itself when a task needs it and, after you agree, installs Blender and Blender Lab's MCP add-on. First startup downloads Python dependencies; prepare the uv environment before connecting. Disclosure \u2014 tools execute arbitrary Python in Blender with your privileges; the skill starts Blender with online access for that session only (your saved preference is unchanged), and the add-on's local server on port 9876 has no password, so any program on this computer can use it while Blender is open; only after you agree does the skill download Blender from download.blender.org (about 400 MB, about 1.5 GB unpacked), check it against blender.org's sha256 list and install it in your own folder without administrator rights (Linux ~/.local/opt, macOS ~/Applications, Windows %LOCALAPPDATA%\\Programs\\Blender Foundation; never over an existing Blender), and download the v1.0.3 add-on, check its hash and install or enable it; first start downloads the pinned Blender Lab MCP server and its Python dependencies with uv. Server discovery does not prove scene readiness.", "title": "Blender", "maintainer": "NousResearch", "tier": "official", "category": "tools", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/blender", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/9b11ffeda84b077bea9de52d22733c7a41ca581a/assets/blender.jpg", "platforms": ["windows", "macos", "linux"], "onboarding": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "blinkenbar", "repo": "https://github.com/cygnostik/Hermes-Plugin-Blinkenlights", "sha": "eae7c2ebf76fdc6e9615753972e15c3a956f9e48", "description": "Dense, animated supercomputer light banks driven by system telemetry and live agent activity in Hermes Desktop.", "maintainer": "cygnostik", "tier": "community", "category": "desktop", "version": "0.9.0-pre.3", "docs_url": "https://github.com/cygnostik/Hermes-Plugin-Blinkenlights#readme", "image": "https://raw.githubusercontent.com/cygnostik/Hermes-Plugin-Blinkenlights/eae7c2ebf76fdc6e9615753972e15c3a956f9e48/docs/media/blinkenbar-catalog-hero.png", "platforms": ["windows", "macos", "linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "boardstate", "title": "Boardstate", "repo": "https://github.com/100yenadmin/boardstate-hermes-plugin", "sha": "a52cb77f5f98efd0108e45e64751193cc9dd700a", "description": "A live board your agent builds for you: tabs of notes, tables, charts, KPI cards and live Hermes data, in the dashboard and Hermes Desktop. It appears as a Board tab in the dashboard and a page in Desktop, and the agent lays it out with 19 native boardstate_* tools, approval widgets included. Runs a local Node >= 20 sidecar on loopback with a per-spawn nonce; no network access unless you opt in to operator-gated connectors. Disclosure \u2014 spawns a local Node.js \u226520 sidecar (from PATH/HERMES_NODE_BIN, nothing downloaded) on 127.0.0.1 on first use; state under HERMES_HOME/boardstate-state/. Reads the dashboard's loopback session token from Hermes internals (web_server._SESSION_TOKEN) and passes it to the sidecar for live usage/sessions/cron widgets; mounts one token-gated static route for approved widget assets. No outbound network unless you author boardstate.connectors.json (stdio/HTTP MCP connectors); connector actions need operator approval. Ships one plugin skill, boardstate:boardstate-report-problem, which drafts a bug report and files it with the GitHub CLI only after the user approves the exact text.", "maintainer": "100yenadmin", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.2", "image": "https://raw.githubusercontent.com/100yenadmin/boardstate-hermes-plugin/a52cb77f5f98efd0108e45e64751193cc9dd700a/docs/media/banner.png", "docs_url": "https://github.com/100yenadmin/boardstate-hermes-plugin#readme", "version": "1.5.2", "screenshots": ["https://raw.githubusercontent.com/100yenadmin/boardstate-hermes-plugin/a52cb77f5f98efd0108e45e64751193cc9dd700a/docs/screenshots/desktop-board.png", "https://raw.githubusercontent.com/100yenadmin/boardstate-hermes-plugin/a52cb77f5f98efd0108e45e64751193cc9dd700a/docs/screenshots/web-board.png"], "platforms": [], "capabilities": {"provides_tools": ["boardstate_workspace_get", "boardstate_tab_create", "boardstate_tab_update", "boardstate_tab_delete", "boardstate_tabs_reorder", "boardstate_widget_add", "boardstate_widget_update", "boardstate_widget_move", "boardstate_widget_remove", "boardstate_layout_set", "boardstate_workspace_replace", "boardstate_undo", "boardstate_widget_catalog", "boardstate_design_review", "boardstate_tool_search", "boardstate_widget_scaffold", "boardstate_data_read", "boardstate_connector_read", "boardstate_connector_invoke"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "bot-activity", "title": "Bot Activity", "repo": "https://github.com/risyadul/hermes-bot-activity", "sha": "da1c9d10eb228cd6f0a93e255ee92c8c3a6717f2", "version": "0.1.0", "description": "Live per-Bot activity timeline for Hermes Desktop: turns, tool calls (arguments, result, duration), approvals and Group Chat streams, grouped by Bot or by Group Chat, with one-click tracking for new Bots. Disclosure \u2014 local only, no network or telemetry; records every Bot profile's turns, assistant replies, tool arguments and results, approval commands and Group Chat streams (redacted with agent.redact, capped per field, 3-day / 20k-row retention) into one SQLite file shared by all profiles under plugin-data/bot-activity; reads each Bot profile's state.db, profile.yaml and config.yaml read-only; Track now / Update runs `hermes -p <bot> plugins install <same source> --ref <same sha> --enable --yes-deps` (or copies the plugin and runs `plugins enable`) in the Bot profiles you track, never re-enabling one you disabled.", "maintainer": "risyadul", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/risyadul/hermes-bot-activity", "screenshots": ["https://raw.githubusercontent.com/risyadul/hermes-bot-activity/da1c9d10eb228cd6f0a93e255ee92c8c3a6717f2/docs/screenshots/by-bot.png", "https://raw.githubusercontent.com/risyadul/hermes-bot-activity/da1c9d10eb228cd6f0a93e255ee92c8c3a6717f2/docs/screenshots/by-group-chat.png"], "readme": true, "platforms": [], "known_issues": ["Group Chat attribution relies on Desktop's member-session title and room prompt header, which are not public APIs.", "A Bot's first turn in a new Group Chat thread, or a re-titled session, can show its room without a thread label."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_llm_call", "pre_tool_call", "post_tool_call", "pre_approval_request", "post_approval_response", "on_room_member_activity"], "provides_middleware": [], "requires_env": []}}, {"name": "bot-cabinet-v2", "title": "Cabinet", "repo": "https://github.com/Dgardenhire/hermes-cabinet", "sha": "d6a816c350f800e908075de437a108c44ff982e3", "description": "Tell Cabinet the job you need done and it answers with the smallest setup that does it (one chat, a skill, a routine, a Bot or a crew), shows which answers led there, then helps you act: add one of botcabinet.com's 20 Bots (each with its test record shown) as a Hermes profile, plan a new Bot line by line, or set up a crew of Bots in a handoff order with blocked Kanban cards. Everything Cabinet makes can be removed again from My Bots, and a Bot that Hermes's own Bots catalog carries is handed over to it, never duplicated. Disclosure \u2014 fetches its Bot catalog from https://botcabinet.com/catalog.json on open and Refresh (data only, 2 MB cap) and, after you confirm, creates Hermes profiles whose instructions (SOUL.md) come from that catalog; can create and archive Kanban cards for a crew; deletes only profiles it created that you have not changed; reads ~/.hermes/profiles and hashes profile files to track what it made; calls private Hermes modules (hermes_cli.profiles, kanban_db), so a Hermes update can break it; no shell, credentials, telemetry or self-updates.", "maintainer": "Dgardenhire", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.0", "docs_url": "https://botcabinet.com/hermes/manual/", "version": "0.3.11", "image": "https://raw.githubusercontent.com/Dgardenhire/hermes-cabinet/d6a816c350f800e908075de437a108c44ff982e3/docs/card.png", "screenshots": ["https://raw.githubusercontent.com/Dgardenhire/hermes-cabinet/d6a816c350f800e908075de437a108c44ff982e3/harness/shots/01-start.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-cabinet/d6a816c350f800e908075de437a108c44ff982e3/harness/shots/10-answer-bot.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-cabinet/d6a816c350f800e908075de437a108c44ff982e3/harness/shots/21-add-bot.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-cabinet/d6a816c350f800e908075de437a108c44ff982e3/harness/shots/27-setup-crew.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-cabinet/d6a816c350f800e908075de437a108c44ff982e3/harness/shots/31-mybots.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-cabinet/d6a816c350f800e908075de437a108c44ff982e3/harness/shots/16-records.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "bot-forge", "repo": "https://github.com/BkashJEE/hermes-bot-forge", "sha": "b313916b25aa631af7b473cd0ac1d72737b0aa72", "description": "Say \"make me a <role>\" and your agent spawns a complete Bot Mode Bot \u2014 name, face, SOUL.md, memory, tools, skills, routines, gateway \u2014 tested, with rollback. Then hire a whole crew in one call, ask what is waiting on you, and edit, teach, share and health-check Bots by chatting. Disclosure \u2014 spawns the hermes CLI to create and run Bot profiles under HERMES_HOME/profiles/, and installs its own small companion hook plugin (bot-forge-marks, two hooks, no tools) into each Bot profile it manages, enabling it in that profile's config.yaml; never the root profile. Disclosure \u2014 when a Bot journals a blocked/failed entry, the plugin emails its title and summary to your own address via the SMTP account in Hermes' EMAIL_* settings (TLS verified; off with notify_blocked or notify_email false); adopt_bots (off by default) installs the companion hook into every profile on load.", "maintainer": "BkashJEE", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/BkashJEE/hermes-bot-forge#readme", "version": "0.15.3", "image": "https://raw.githubusercontent.com/BkashJEE/hermes-bot-forge/b313916b25aa631af7b473cd0ac1d72737b0aa72/docs/social-preview.png", "platforms": [], "capabilities": {"provides_tools": ["create_agent", "create_team", "teach_agent", "update_agent", "copy_agent", "list_agents", "check_agents", "check_install", "agent_journal", "ask_agent", "share_agent", "import_agent", "hide_agent", "delete_agent"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "brain-graph", "repo": "https://github.com/PIR8-Software/hermes-brain-graph", "sha": "54923ce800fa07d0a81997ad899a3a1c6384d635", "subdir": "catalog", "description": "Local Markdown vault for Hermes Desktop \u2014 notes, wikilinks, search, recycle bin, and an interactive graph.", "maintainer": "PIR8-Software", "tier": "community", "category": "desktop", "version": "2.0.1", "image": "https://raw.githubusercontent.com/PIR8-Software/hermes-brain-graph/54923ce800fa07d0a81997ad899a3a1c6384d635/docs/images/brain-graph-banner.png", "docs_url": "https://github.com/PIR8-Software/hermes-brain-graph#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "brave-search", "repo": "https://github.com/rabilrbl/hermes-brave-search-plugin", "sha": "4134cbef910c14c63e6b284b0820b30f3811ab47", "description": "Brave Search API tools for live web search inside Hermes", "maintainer": "rabilrbl", "tier": "community", "category": "web", "docs_url": "https://github.com/rabilrbl/hermes-brave-search-plugin#readme", "capabilities": {"provides_tools": ["brave_web_search"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "brethof-brain", "repo": "https://github.com/BrethofAI/brethof-brain-client", "sha": "dea65da574b4069db932409e422816fa30990522", "subdir": "adapters/hermes", "version": "1.0.0", "description": "brethof-brain long-term memory provider \u2014 the memory's briefing in the system prompt at session start, ambient recall on every turn, every turn archived; one memory shared with the user's other agents (Claude Code, Codex, OpenCode and more). Sends each turn to the user's own brethof-brain memory (on their machine at 127.0.0.1:8610, or hosted at memory.brethof.cloud). Needs a brethof-brain account. Disclosure \u2014 sends every user prompt and each turn's user and assistant text, with your API key, to the brethof-brain server you configure (default a local box at 127.0.0.1:8610; hosted at memory.brethof.cloud), and puts the server's returned briefing and recall text into the system prompt and each turn; reads BRETHOF_BRAIN_* from $HERMES_HOME/.env and ~/.brethof-brain/config.json.", "maintainer": "BrethofAI", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.0", "docs_url": "https://brethof.ai/brain/docs/", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "bridge-adapter", "repo": "https://github.com/Kesuek/hermes-bridge-adapter", "sha": "c095d54bdecd4a6080e3166bd6c95552ac69ae65", "description": "Generic JSON-file-based bridge adapter. Bridges self-register via a registry/ manifest (presence = registered, rm = unregistered). Polls inbox/ for incoming messages, writes outgoing to outbox/. External services (imsg, Matrix, Telegram, ...) write/read JSON files in a shared directory.", "maintainer": "Kesuek", "tier": "community", "category": "platform", "docs_url": "https://github.com/Kesuek/hermes-bridge-adapter#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["BRIDGE_DIR"]}}, {"name": "browser-toggle", "repo": "https://github.com/jcperdomoybarra/web-browser-button-plugin", "sha": "b0b88856fa246296647e8697b80bf4bc2e723540", "description": "One titlebar button, next to HUD mode, that opens and hides the built-in browser: the same action as Ctrl+Shift+L. Label follows the active UI language. Front-end only: no agent calls, no network, no API keys. Disclosure \u2014 works by pressing the browser shortcut (Ctrl/\u2318+Shift+L); breaks if the user rebinds it.", "maintainer": "jcperdomoybarra", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "version": "1.0.0", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "browserless", "title": "Browserless", "repo": "https://github.com/browserless/browserless-mcp", "sha": "600a5d689fa3f5bdcb5676ffc063b56d18e9bd7c", "subdir": "hermes", "description": "Run Hermes' built-in browser tools on Browserless cloud browsers: stealth mode, residential proxies, captcha solving and ad blocking, with no local Chrome. One Browserless browser per task; Hermes' agent-browser daemon and CDP supervisor share it through a local CDP multiplexer, and the browser is reconnected after network drops and closed when the task ends. Disclosure \u2014 while a browser task runs, starts a background thread with a WebSocket listener on 127.0.0.1 (random port, secret path, local Host header only); connects to Browserless (production-*.browserless.io) with BROWSERLESS_TOKEN, read via get_secret; Browserless usage is metered on your plan, and residential proxy traffic costs more; connections to Browserless carry a browserless-hermes-plugin/<version> User-Agent so Browserless can count plugin usage (opt-out: BROWSERLESS_SOURCE_TAG=false; the browser's own user agent is unchanged); no files written unless BROWSERLESS_MUX_LOG is set; no other telemetry.", "maintainer": "browserless", "tier": "community", "category": "web", "docs_url": "https://github.com/browserless/browserless-mcp/tree/600a5d689fa3f5bdcb5676ffc063b56d18e9bd7c/hermes", "requires_hermes": ">=0.21.6", "version": "0.1.2", "image": "https://raw.githubusercontent.com/browserless/browserless-mcp/600a5d689fa3f5bdcb5676ffc063b56d18e9bd7c/hermes/assets/banner.jpg", "readme": true, "known_issues": ["If the Browserless session can't start (e.g. wrong token or plan concurrency limit), Hermes falls back to a local browser; set BROWSERLESS_MUX_LOG to see the reason."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["BROWSERLESS_TOKEN"]}}, {"name": "browserpaw", "repo": "https://github.com/GoldenLoaf24h/browserpaw", "sha": "66a7349532a5ab6251b2090d2a4ab347aa07ad45", "subdir": "plugins/browserpaw", "description": "Drive your own Chrome from Hermes through a BrowserPaw MCP server you configure: 16 browserpaw_* tools for navigation, indexed DOM reading, click/fill, batch actions, screenshots and tabs. Disclosure \u2014 a thin wrapper over a BrowserPaw MCP server you add yourself (mcp_servers.browserpaw, plus plugins.entries.browserpaw.mcp_allowlist: [browserpaw]); it drives your real Chrome profile (logged-in sessions, cookies) through the separately installed BrowserPaw extension and native host on 127.0.0.1:12306, whose credential lives in ~/.chrome-mcp/bridge-token; the agent can click, fill, submit and read pages without a Hermes approval prompt unless you set trust: untrusted on that server (the README sample enables the full 50-tool profile, including in-page JavaScript, HttpOnly cookie reads and raw CDP, as native Hermes MCP tools); the optional Jev remote mode sends structured page state to TypeSafe AI or a base URL you set, and its local model download contacts hf-mirror.com/aifasthub.com/huggingface.co (probing baidu.com/bilibili.com first).", "maintainer": "GoldenLoaf24h", "tier": "community", "category": "web", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/GoldenLoaf24h/browserpaw#readme", "version": "4.0.0", "capabilities": {"provides_tools": ["browserpaw_act_toward_goal", "browserpaw_navigate", "browserpaw_read_dom", "browserpaw_interact_index", "browserpaw_fill_index", "browserpaw_batch_actions", "browserpaw_screenshot", "browserpaw_smart_scroll", "browserpaw_scroll_until_found", "browserpaw_inspect_media", "browserpaw_grep", "browserpaw_get_markdown", "browserpaw_switch_tab", "browserpaw_close_tabs", "browserpaw_get_windows_and_tabs", "browserpaw_tool_docs"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "bubblewrap", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "da8d32406253f1028f587912764bce5a9a416949", "subdir": "bubblewrap", "description": "Bubblewrap terminal backend for Linux: every terminal and execute_code command runs in its own bwrap sandbox on this machine at the host's own paths, with a read-only root, a writable working directory (per profile: restricted, workspace or network), the dot entries of the home directory (credential stores always) and the Hermes home hidden, private temp and process directories, agent and docker sockets masked, and per-command memory, CPU and process limits (`hermes config set terminal.backend bubblewrap`). Disclosure \u2014 no Python dependencies and no network calls of its own: it runs your commands through the `bwrap` and `prlimit` binaries you install (bubblewrap, util-linux), and under the default `network` profile those commands share the host network. It reads no credentials. File tools (read_file, write_file, patch, search_files) still run on the host and are not confined, and because the working directory is a real host directory Hermes keeps its dangerous-command prompts, as for the local backend.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.22.2", "version": "1.2.1", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/da8d32406253f1028f587912764bce5a9a416949/assets/bubblewrap.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/bubblewrap", "platforms": ["linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "bunny_space-platform", "title": "Bunny Space", "repo": "https://github.com/jasm001/hermes-plugin-bunny-space", "sha": "fcea5421ed9418b6bfc4f292933310e43aa076c5", "description": "Bunny Space gateway adapter for Hermes Agent. Connects a Hermes profile (the bot brain) to the Bunny Space relay so the bot joins private rooms, answers its owner, and handles @bot:<slug> mentions in posts and comments. Outbound pull transport; no external dependencies. Disclosure \u2014 replies are prompted to be in Spanish; @bot mention tasks and assistance tasks are dispatched to Hermes under the fixed sender id \"owner\" (BUNNY_SPACE_ALLOWED_USERS must contain \"owner\"), and the plugin refuses to dispatch third-party content unless platform_toolsets.bunny_space is restricted to read-only tools (the platform's effective toolset, including MCP and plugin toolsets; add no_mcp when MCP servers are enabled); the private assistance worker is opt-in via BUNNY_SPACE_ASSISTANCE=1 (the relay cannot enable it); setting BUNNY_SPACE_ALLOW_ALL_USERS makes the connector refuse to connect; the relay sets the poll interval and may hand the connector a WebSocket \"wake\" URL it then connects to (wake signals only, no message content).", "maintainer": "jasm001", "tier": "community", "category": "platform", "docs_url": "https://github.com/jasm001/hermes-plugin-bunny-space#readme", "version": "1.0.6", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["BUNNY_SPACE_BOT_KEY", "BUNNY_SPACE_SLUG"]}}, {"name": "burnclock", "repo": "https://github.com/jersilb/burnclock-hermes", "sha": "80dbfd197a14dd1531ef2d30bb38a6dea4450f82", "title": "Burnclock", "description": "Status-bar chip showing the provider balance and runway tracked by the MIT burnclock CLI, read from its local badge cache. Requires the CLI (pip install burnclock); the plugin makes no network calls and reads no credentials. Disclosure \u2014 runs a read-only shell command (cat of burnclock's local cache file) in your active local session every 60 seconds; balances come from the separately installed burnclock CLI (PyPI `burnclock`), which you configure with your provider keys and run yourself.", "maintainer": "jersilb", "tier": "community", "category": "desktop", "version": "0.1.0", "requires_hermes": ">=0.22.0", "platforms": ["macos"], "docs_url": "https://github.com/jersilb/burnclock-hermes", "image": "https://raw.githubusercontent.com/jersilb/burnclock-hermes/80dbfd197a14dd1531ef2d30bb38a6dea4450f82/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/jersilb/burnclock-hermes/80dbfd197a14dd1531ef2d30bb38a6dea4450f82/docs/chip.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "by2kb", "repo": "https://github.com/Charlesmpc/by2kb", "sha": "5983ca8a479feb87321f5c37f59cf8ae28818451", "subdir": "by2kb/integrations/hermes", "description": "Discover learning videos by topic, select numbered recommendations, and turn Bilibili and YouTube videos into transcripts, abstracts, and study notes using the Hermes host model. Disclosure \u2014 intercepts gateway messages with a Bilibili/YouTube URL, a \"by2kb <topic>\" prefix, or (for 1 h after a recommendation list, same user/chat) a bare number reply, and runs the separately installed by2kb CLI (BY2KB_COMMAND or PATH), which searches Bilibili/YouTube, downloads media and runs ASR; enrichment prompts go to your active Hermes model.", "maintainer": "Charlesmpc", "tier": "community", "category": "tools", "version": "0.7.0", "docs_url": "https://github.com/Charlesmpc/by2kb/blob/v0.7.0/docs/agent-integration.md", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_gateway_dispatch"], "provides_middleware": [], "requires_env": []}}, {"name": "call-me", "title": "/call-me", "repo": "https://github.com/radres/hermes-plugin-call-me", "sha": "970952e72d633ebdbed20d8c60c327cc45475140", "description": "/call-me gateway: text your Hermes agent from the /call-me iPhone app, and the callme_call tool rings your phone, speaks the agent's text and returns your spoken answer as a transcript. Disclosure \u2014 talks only to the /call-me service at https://callmemcp.com/aiphone (run by the plugin author): creates one agent session, sends texts and call requests, and long-polls for replies while the gateway runs (at most one request every 3 seconds); sends message text, the text to be spoken and the destination numbers, and call audio is transcribed by the service so only the transcript comes back; the agent session token and event cursor are stored at $HERMES_HOME/plugin-data/call-me/session.json (mode 600); only numbers in CALLME_ALLOWED_USERS can message the agent or be called, and inbound messages must come from that number's verified /call-me device; callme_call blocks until the call ends (300 seconds at most) and returns missed if nobody answers; no shell commands, telemetry or self-update. The /call-me iPhone app that receives the messages and calls needs a paid subscription; the plugin itself is free and MIT-licensed.", "maintainer": "radres", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.5", "version": "0.1.0", "docs_url": "https://github.com/radres/hermes-plugin-call-me#readme", "capabilities": {"provides_tools": ["callme_call"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CALLME_ALLOWED_USERS"]}}, {"name": "camofox-human-auth", "repo": "https://github.com/tim-toothed/hermes-camofox-human-auth", "sha": "19946d2e664063ffc5259f85703d14e11b477512", "description": "Universal human-controlled authentication for Camofox Browser, powered by the Camoufox engine. Supports login, registration, SSO, MFA, OTP, CAPTCHA, and device confirmation. Requires the Camofox backend; never changes an existing Hermes browser provider automatically.", "maintainer": "tim-toothed", "tier": "community", "category": "web", "docs_url": "https://github.com/tim-toothed/hermes-camofox-human-auth#readme", "capabilities": {"provides_tools": ["camofox_auth_finish", "camofox_auth_open", "camofox_backend_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "camofox", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "190593f4ce4c481a80ed27448535c867c5c6e27f", "subdir": "camofox", "description": "Camofox browser backend: browse with a self-hosted anti-detection Firefox (Camoufox, C++ fingerprint spoofing) through the camofox-browser REST server. Registers the browser_* tools (navigate, snapshot with clickable refs, click, type, scroll, back, press, get_images, vision, JavaScript console, plus cookie import when CAMOFOX_API_KEY is set) in the `camofox` toolset, with `hermes camofox setup|status`; existing CAMOFOX_* variables and browser.camofox settings carry over. Formerly built into Hermes core; existing users are migrated automatically. Disclosure: one Python dependency (requests). It talks only to the Camofox server at CAMOFOX_URL (e.g. http://localhost:9377, which you run yourself: Docker or `npm start`), sending CAMOFOX_API_KEY as a bearer token when set. Page text reaches only your model as tool output; browser_vision sends the screenshot to your configured auxiliary vision model. Snapshots mask values that look like secrets (API keys, tokens), but text typed into form fields, passwords included, shows up in snapshots. Oversized snapshots and screenshots are written under the Hermes home (cache/web, browser_screenshots). Cookie import reads Netscape cookies.txt files only from browser.camofox.cookies_dir (default ~/.camofox/cookies). Inert on Hermes cores that still bundle Camofox.", "maintainer": "NousResearch", "tier": "official", "category": "web", "version": "1.0.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/190593f4ce4c481a80ed27448535c867c5c6e27f/assets/camofox.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/camofox", "capabilities": {"provides_tools": ["browser_navigate", "browser_snapshot", "browser_click", "browser_type", "browser_scroll", "browser_back", "browser_press", "browser_get_images", "browser_vision", "browser_console", "browser_import_cookies"], "provides_hooks": ["on_session_end", "on_session_finalize"], "provides_middleware": [], "requires_env": ["CAMOFOX_URL"]}}, {"name": "carbonvoice-platform", "repo": "https://github.com/PhononX/hermes-plugin-carbonvoice", "sha": "55867dba9c6645ce493fd955970302e59a4548ea", "description": "Carbon Voice gateway adapter for Hermes Agent. Connects via Socket.IO (primary) with REST polling fallback \u2014 no public webhook or tunnel required. Persists a cursor to disk so messages received while Hermes is offline are processed on the next startup. Replies via POST /v3/messages/start, so the Her", "maintainer": "PhononX", "tier": "community", "category": "platform", "docs_url": "https://github.com/PhononX/hermes-plugin-carbonvoice#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "cashew", "repo": "https://github.com/magnus919/hermes-cashew", "sha": "d89e59e63315f7c356c868a4ce7db64cb3c1aa1b", "description": "Cashew \u2014 persistent thought-graph memory with local embeddings, organic decay, and autonomous think cycles.", "maintainer": "magnus919", "tier": "community", "category": "memory", "docs_url": "https://github.com/magnus919/hermes-cashew#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cdp-manager", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "b364f8d5f015b9a9c10fb6af1d2d1112edc2af48", "subdir": "public/cdp-manager", "description": "Local Chrome CDP debug ports in the status bar (probe, launch, stop, recheck) plus a managed port Hermes keeps alive and the `cdp` agent tool, which also detects and repairs a Chrome profile-picker launch (wedged/unwedge). Disclosure: launches local Chrome on 127.0.0.1 only, with per-port profiles under the local app-data directory, and closes it with a clean Browser.close; state lives in the plugin's own config file. Windows only.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/cdp-manager", "version": "1.0.2", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/b364f8d5f015b9a9c10fb6af1d2d1112edc2af48/public/cdp-manager/docs/hero.png", "platforms": ["windows"], "capabilities": {"provides_tools": ["cdp"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "channel3", "title": "Channel3", "repo": "https://github.com/channel3-ai/channel3-hermes-plugin", "sha": "5dfcb6df773ad62c033346824d0779594cc6c31e", "description": "Shop 100M+ products across thousands of US retailers: search, compare every store's live price, and switch variants (color, size) on inline product cards in Hermes Desktop. Portable Agent Plugins v1 package (mcp.json + skills/ + desktop/). Disclosure \u2014 connects to the hosted Channel3 MCP server at mcp.trychannel3.com (no account or key; free tier rate-limited per IP); search queries (and any image URL for visual search), product ids and variant selections go to it, and the Desktop cards call it directly from the app; a server-issued thread_id links searches within a conversation; product images load from cdn.trychannel3.com; Buy buttons open buy.trychannel3.com redirect links in the browser; nothing is purchased in-app and no credentials are stored.", "maintainer": "channel3-ai", "tier": "community", "category": "tools", "version": "0.1.0", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/channel3-ai/channel3-hermes-plugin#readme", "screenshots": ["https://raw.githubusercontent.com/channel3-ai/channel3-hermes-plugin/5dfcb6df773ad62c033346824d0779594cc6c31e/docs/cards.png", "https://raw.githubusercontent.com/channel3-ai/channel3-hermes-plugin/5dfcb6df773ad62c033346824d0779594cc6c31e/docs/detail.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "chat-length", "title": "Chat Length", "version": "1.1.0", "repo": "https://github.com/MadeByBrain/hermes-chat-length", "sha": "1759b26a66c7b4d54703186cc867a5869baa4f12", "description": "Tells the user when a chat is getting too long and hands them a short opener for a fresh chat; the new chat pulls the earlier context itself via session_search, no handover document. Fill level from real provider token counts, measured against Hermes' compaction point by default; notices at 70 % and 90 % (configurable), once each per chat, re-armed after compaction, never in cron, subagent, kanban, batch or webhook runs. Notice in the conversation language, English or German. Disclosure \u2014 on the turn that crosses a threshold, pre_llm_call adds a one-turn instruction to that turn's user message (never the system prompt; replayed byte-identical, so prompt caching stays intact); post_api_request stores per-session token counts, model and provider name and which notice fired (no message content) under HERMES_HOME/plugin-data/chat-length/, pruned after 30 days; reads the session title read-only from state.db and the compression settings read-only from config.yaml; no network calls, no tools, no dependencies.", "maintainer": "MadeByBrain", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "image": "https://raw.githubusercontent.com/MadeByBrain/hermes-chat-length/1759b26a66c7b4d54703186cc867a5869baa4f12/docs/banner.png", "docs_url": "https://github.com/MadeByBrain/hermes-chat-length#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_api_request"], "provides_middleware": [], "requires_env": []}}, {"name": "chat-studio", "repo": "https://github.com/gchablemeneses-web/hermes-chat-studio", "sha": "8b97b6c99a1f34abc6a8c5f461c894a8bb3f95d2", "description": "Offline conversation customization with one-click presets and plugin-owned settings. Disclosure \u2014 enabled by default; injects a stylesheet that restyles the Desktop chat transcript (width, fonts, spacing, optional colours) keyed on app data-slot selectors, so a Desktop update can break the styling; settings stay in plugin storage, no network.", "maintainer": "gchablemeneses-web", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "1.1.0", "screenshots": ["https://raw.githubusercontent.com/gchablemeneses-web/hermes-chat-studio/8b97b6c99a1f34abc6a8c5f461c894a8bb3f95d2/docs/presets.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "chatto-platform", "repo": "https://github.com/jrimmer/hermes-chatto-plugin", "sha": "aab0a20635cb578253a8014bc8d93e1b32f020fc", "description": "Chatto gateway adapter for Hermes Agent. Connects to a Chatto server (self-hosted team chat) and relays messages between rooms/DMs and the Hermes agent.  Uses the Chatto ConnectRPC API (JSON over HTTP) for outbound messages and the Chatto realtime WebSocket protocol (binary protobuf) for inbound eve", "maintainer": "jrimmer", "tier": "community", "category": "platform", "docs_url": "https://github.com/jrimmer/hermes-chatto-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "cheatsheet", "repo": "https://github.com/Bonorinoa/hermes-cheatsheet", "sha": "d5a4f0121184ed789e138f423249b5c2f7c57eee", "subdir": "", "description": "Title-bar cheatsheet. Describe what you want to do and it points to a real command or a cited passage; live slash commands and plugins, plus cited passages from this install's docs. No runtime network. No self-update. Disclosure \u2014 reads the Markdown docs shipped with your Hermes install (website/docs next to hermes_cli) through a local dashboard route and lists your commands, plugins and MCP servers via read-only gateway calls; no network at runtime (doc and GitHub links open in your browser only when clicked).", "maintainer": "Bonorinoa", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Bonorinoa/hermes-cheatsheet#readme", "version": "0.2.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "chorepilot", "title": "ChorePilot", "repo": "https://github.com/WestWaters/ChorePilot", "sha": "9b1843ac0a0c467c7ccc0fb3ae355f1bb5f70434", "subdir": "hermes/chorepilot", "version": "0.7.0", "description": "Your house and family chore board as Hermes tools, through ChorePilot's own MCP server on this machine, the LAN or Tailscale. Runs appliances (lights, climate, dishwasher/washer/dryer, sprinklers, vacuum and more via Home Assistant, Home Connect, MQTT or a simulator) and keeps a rotating chore board that devices verify. ChorePilot's policy decides every call: water/heat actions wait for the person's own yes in Telegram or the ChorePilot dashboard, kids' requests go to a parent's approval queue, and unlocking, opening the garage and disarming are never available to an agent. Bundles the chorepilot:household skill. Disclosure \u2014 each tool call sends HTTP requests with the bearer token in CHOREPILOT_TOKEN to the user's own ChorePilot server at CHOREPILOT_URL, and the plugin also lists that server's tools once at every Hermes start (plain http only to loopback, private, Tailscale or .local/.lan/.ts.net addresses); chorepilot_call runs any device or chore tool the token's person may use (lights, climate, vacuum, locking and more) without a Hermes approval prompt, with ChorePilot's own policy deciding, so water/heat actions wait up to two minutes for that person's yes in Telegram or the ChorePilot dashboard, kids' requests go to a parent, and unlocking, opening the garage and disarming are never available; no other network calls, no files read outside the plugin, no background processes, no telemetry, stdlib only.", "maintainer": "WestWaters", "tier": "community", "category": "tools", "docs_url": "https://github.com/WestWaters/ChorePilot/blob/main/docs/HERMES.md", "requires_hermes": ">=0.21.5", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["chorepilot_status", "chorepilot_chores", "chorepilot_who_has", "chorepilot_done", "chorepilot_whoami", "chorepilot_tools", "chorepilot_call"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CHOREPILOT_URL", "CHOREPILOT_TOKEN"]}}, {"name": "chronicle", "repo": "https://github.com/indigokarasu/chronicle-agent-context-and-memory", "sha": "92e4351a852117a11542210d06e8e5bfb61c3f1a", "version": "5.8.35", "description": "Local-first long-term memory and memory-aware context compression for Hermes \u2014 SQLite, no account, API key or hosted service required. Captures every turn durably, extracts beliefs with provenance, answers from memory (raw-tier fallback and abstention), derives scoped conclusions, and compresses the context window losslessly with a restorable record. Registers the memory-provider AND context-engine slots from one shared core, and ships the Tapestry dashboard. Disclosure \u2014 off-host embedding endpoints are refused by default (RFC1918/ULA/CGNAT and https peers); sending memory excerpts off the host requires opting in via embeddings.allow_remote. Disclosure \u2014 the git mirror (engine/gitmirror.py) is on by default and writes plaintext JSONL copies of memory into a local git repo at ~/.hermes/commons/db/chronicle/git; it pushes only when git_remote is configured, and its 'encryption' option is a repeating-key XOR obfuscation, not cryptographic encryption.", "maintainer": "indigokarasu", "tier": "community", "category": "memory", "requires_hermes": ">=0.19", "docs_url": "https://github.com/indigokarasu/chronicle-agent-context-and-memory#readme", "image": "https://raw.githubusercontent.com/indigokarasu/chronicle-agent-context-and-memory/92e4351a852117a11542210d06e8e5bfb61c3f1a/assets/readme/hero.jpg", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["subagent_start", "subagent_stop", "on_session_reset", "post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "chutes-provider", "repo": "https://github.com/TheStreamCode/hermes-chutes-provider", "sha": "d1165cdd5c65a1179c559e9169a428adb9a36b42", "description": "Chutes model provider for Hermes Agent via API key. Disclosure \u2014 model provider; prompts, tool schemas and CHUTES_API_KEY go to llm.chutes.ai (or CHUTES_BASE_URL), plus a GET /models catalog probe with the same key", "maintainer": "TheStreamCode", "tier": "community", "category": "models", "docs_url": "https://github.com/TheStreamCode/hermes-chutes-provider", "version": "0.1.5", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CHUTES_API_KEY"]}}, {"name": "cjk_sanitizer", "repo": "https://github.com/evanyudis/cjk_sanitizer", "sha": "47d2a95c89e827fef6ea0bacbff433c6dc980351", "description": "Strip unwanted Chinese (CJK) and Cyrillic characters from LLM output. Korean Hangul and Japanese Kana are preserved.", "maintainer": "evanyudis", "tier": "community", "category": "general", "docs_url": "https://github.com/evanyudis/cjk_sanitizer#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "claude-code-theme", "title": "Claude Code Theme", "repo": "https://github.com/aliilhami/hermes-claude-code-theme", "sha": "d2430687cde455e470f5f75b951e488eb0938e61", "requires_hermes": ">=0.21.6", "description": "Unofficial Claude Code-inspired theme for Hermes Desktop, with light and dark palettes, rounded composer and side-panel cards, softer sidebar and menus, and a context-window meter beside the model switcher. Not affiliated with, endorsed by, or sponsored by Anthropic or Claude Code. Disclosure \u2014 unofficial Claude Code lookalike theme; its stylesheet restyles native Desktop surfaces (user bubbles, composer, file panel, sidebar rows, dropdown menus) and hides the chat backdrop image; the context meter reads session.usage through the SDK; an opt-in accent setting uses setAccentOverride; no network calls of its own.", "maintainer": "aliilhami", "tier": "community", "category": "desktop", "docs_url": "https://github.com/aliilhami/hermes-claude-code-theme#readme", "version": "0.1.0", "screenshots": ["https://raw.githubusercontent.com/aliilhami/hermes-claude-code-theme/d2430687cde455e470f5f75b951e488eb0938e61/docs/overview-light.png", "https://raw.githubusercontent.com/aliilhami/hermes-claude-code-theme/d2430687cde455e470f5f75b951e488eb0938e61/docs/sidebar-menus.png", "https://raw.githubusercontent.com/aliilhami/hermes-claude-code-theme/d2430687cde455e470f5f75b951e488eb0938e61/docs/context-meter.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "claude-subscription-directsdk", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "20048e6e2c1c48d6023e73ae6951595f58352b20", "subdir": "claude-subscription-directsdk", "description": "Experimental model provider that runs Hermes turns on a Claude Pro/Max subscription through the official Claude Code CLI (the Agent SDK path), so no separate API key or per-token bill. Requires the claude CLI installed and logged in; the plugin checks for it at load, in hermes model, in the pickers and before every request, and refuses cleanly with the install hint when it is missing. Disclosure \u2014 every turn is billed against your Claude subscription's Agent SDK allowance, and the provider inherits whatever account claude is logged into.", "maintainer": "NousResearch", "tier": "official", "category": "models", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/claude-subscription-directsdk", "version": "0.3.3", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/4d492b1dc5326af3e38bb2cf3e4b9ad6d65f0072/assets/claude-subscription-directsdk.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "clinepass", "repo": "https://github.com/Adolanium/hermes-clinepass", "sha": "3853e895482d3171ff3a8144344b74cfa3a7dd67", "version": "1.2.3", "image": "https://raw.githubusercontent.com/Adolanium/hermes-clinepass/3853e895482d3171ff3a8144344b74cfa3a7dd67/assets/catalog-banner.png", "subdir": "clinepass", "description": "ClinePass model provider with live model discovery and a curated fallback catalog.", "maintainer": "Adolanium", "tier": "community", "category": "models", "docs_url": "https://github.com/Adolanium/hermes-clinepass#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CLINE_API_KEY"]}}, {"name": "cliproxyapi-provider", "repo": "https://github.com/duu261/hermes-cliproxyapi-provider", "sha": "42240b168488c820883b0d989456acf0a8a06ba8", "description": "CLIProxyAPI as native Hermes model providers: discovers each CPA provider group (Claude, Codex, xAI, Gemini, Kiro and others) and registers one profile per group on the wire its CPA executor accepts (Anthropic Messages, Responses or Chat Completions), with context windows and reasoning levels from CPA. Disclosure \u2014 sends model-list and inference requests, authenticated with the API key env var you name, to the CPA base_url you configure; with an optional management key it also makes bounded read-only GETs to CPA's management API; with an optional billing route it sends inference, and a model-list GET, to the gateway URL you configure, authenticated with the gateway key env var you name. Known limit: Hermes strips from agent subprocesses only the key env vars a registered provider declares, so the management key env var, and on a routed instance the CPA key env var, stay readable by agent shells.", "maintainer": "duu261", "tier": "community", "category": "models", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/duu261/hermes-cliproxyapi-provider#readme", "version": "0.3.1", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cloudflare-sandbox", "repo": "https://github.com/kiyo-e/hermes-cloudflare-sandbox", "sha": "75961d77109b185bdaeef650cc9f945df0aa0551", "version": "0.1.0", "description": "Run Hermes terminal, file and execute_code tools in Cloudflare Containers, with the workspace saved to a snapshot when idle. Disclosure \u2014 you deploy the bundled Cloudflare Worker to your own account first; running containers is billed by Cloudflare; commands and file contents run in the container at HERMES_CF_ENDPOINT using HERMES_CF_TOKEN; the container has outbound internet by default (ENABLE_INTERNET); host env vars, skills and credentials are not copied into the container; dangerous-command approval stays on.", "maintainer": "kiyo-e", "tier": "community", "category": "tools", "requires_hermes": ">=0.20.6", "docs_url": "https://github.com/kiyo-e/hermes-cloudflare-sandbox#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["HERMES_CF_ENDPOINT", "HERMES_CF_TOKEN"]}}, {"name": "cloudflare-web-search", "repo": "https://github.com/Adolanium/hermes-cloudflare-web-search", "sha": "259783bf335cfffbfe16e2ef16efa301beb6db14", "description": "Cloudflare Web Search backend for Hermes' existing web_search tool, with Ceramic, Exa, or Linkup selected in plugin settings. Search only; keep a separate extract backend. Disclosure \u2014 sends queries, result limits, gateway IDs, and optional BYOK aliases to api.cloudflare.com, which forwards searches to the selected provider and records them in AI Gateway logs. Requests can consume gateway credits or provider quota. Reads its own settings and CLOUDFLARE_WEB_SEARCH_API_TOKEN through Hermes' profile-scoped APIs. Registers one web provider, with no new tools, hooks, background processes, file writes, or self-updater. Independent community plugin.", "maintainer": "Adolanium", "tier": "community", "category": "web", "title": "Cloudflare Web Search", "docs_url": "https://github.com/Adolanium/hermes-cloudflare-web-search#readme", "image": "https://raw.githubusercontent.com/Adolanium/hermes-cloudflare-web-search/259783bf335cfffbfe16e2ef16efa301beb6db14/assets/catalog-banner.png", "version": "1.0.1", "platforms": [], "known_issues": ["Set web.cache_enabled: false in every profile using this backend. Hermes' shared search cache omits profiles and routing settings, so repeated queries can reuse another profile's result or an earlier provider, account, gateway, or BYOK route. This setting also disables the profile's extraction result cache."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CLOUDFLARE_WEB_SEARCH_API_TOKEN"]}}, {"name": "cloudflare-workers-ai-provider", "repo": "https://github.com/AhmetArif0/hermes-cloudflare-workers-ai-provider", "sha": "f6821d058d504ee6324b0d3217564b93124c09f9", "subdir": "cloudflare-workers-ai-provider", "description": "Cloudflare Workers AI as a Hermes model provider (`--provider workers-ai`, or Cloudflare Workers AI in `hermes model`, which asks for the token and the account's base URL): the 16 Workers AI models with function calling and 64K+ context, Cloudflare's context windows (a custom endpoint lists no models and assumes 256K for the 128K gpt-oss), reasoning effort in the form each model accepts, and a clear message when a free-plan account picks a paid-plan model. Not affiliated with Cloudflare. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); the model list and details are built in, so nothing is fetched to show them; chat requests go to the URL in CLOUDFLARE_WORKERS_AI_BASE_URL through Hermes' own client with CLOUDFLARE_WORKERS_AI_API_TOKEN, both read by Hermes per profile; the plugin itself opens no connections, reads and writes no files and starts no processes.", "maintainer": "AhmetArif0", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/AhmetArif0/hermes-cloudflare-workers-ai-provider", "version": "1.0.0", "image": "https://raw.githubusercontent.com/AhmetArif0/hermes-cloudflare-workers-ai-provider/f6821d058d504ee6324b0d3217564b93124c09f9/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CLOUDFLARE_WORKERS_AI_API_TOKEN", "CLOUDFLARE_WORKERS_AI_BASE_URL"]}}, {"name": "coder", "repo": "https://github.com/perqin/hermes-plugin-coder", "sha": "98e023da379961702fb0ce0cf03b983176039321", "version": "0.1.0", "description": "Run Hermes terminal commands in an existing remote Coder workspace. Disclosure \u2014 runs terminal commands inside your Coder workspace at CODER_URL using CODER_API_KEY; starts a stopped workspace automatically; forwards only the env vars you list in TERMINAL_CODER_FORWARD_ENV.", "maintainer": "perqin", "tier": "community", "category": "tools", "docs_url": "https://github.com/perqin/hermes-plugin-coder#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CODER_URL", "CODER_API_KEY", "CODER_WORKSPACE"]}}, {"name": "codex-chat-look", "repo": "https://github.com/steveafrost/hermes-quiet", "sha": "401b04ff2dc2447d5c3f40af1254d7fe8413013a", "subdir": "codex-chat-look", "description": "Independent Catppuccin Latte/Mocha desktop theme with peach accents, SDK-native gateway/profile switching and host-owned session density. Legacy plugin identity: codex-chat-look. No self-updater or native layout overrides. Disclosure \u2014 Desktop theme derived from FPSUnleashed's MIT-licensed desktop skin; switches gateway/profile via host.ensureAgent only on user selection and a palette command rewrites the native sessionListDensity setting; no network calls of its own.", "maintainer": "steveafrost", "tier": "community", "category": "desktop", "docs_url": "https://github.com/steveafrost/hermes-quiet", "version": "2.0.0", "readme": false, "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "codex-theme", "repo": "https://github.com/hey-yx/hermes-codex-theme", "sha": "5d0e94aa5a80e02f755b1ab5783f727df7bb1ecd", "description": "Codex \u00d7 ChatGPT inspired theme for the Hermes Desktop chat: dual light/dark palettes that follow the system appearance, graphite-on-paper typography with a 1.625 root line height (measured from ZCode's chat body) and content-spacing presets (1.5/1.625/1.75), the OpenAI radius scale (inline 4px / rows 8px / controls 10px / cards 12px / composer 20px), hairline borders instead of shadows, and an 880px reading column with 768/880/992px presets. Settings \u2192 Plugins \u2192 Codex Theme offers appearance mode, reading width, content spacing, text & code font presets, user/assistant chat bubble colors and a bilingual (EN/\u4e2d\u6587) UI as native controls; the theme paints theme-level tokens only and never writes user-configurable settings such as --chat-text-scale. v1.2.0 is a compliance release \u2014 the composer-drag and input-focus-guard features of the v1.1 line were removed because they patched prototypes and captured global events, which catalog rule 8 forbids. Disclosure \u2014 no network calls, no telemetry, no credentials; registers only through the Desktop plugin SDK (THEMES_AREA, PALETTE_AREA, ctx.registerSettingsPage, ctx.i18n), switches the active theme to Codex once on first install, and keeps its preferences in plugin-scoped ctx.storage.", "maintainer": "hey-yx", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.0", "version": "1.2.0", "title": "Codex Theme", "image": "https://raw.githubusercontent.com/hey-yx/hermes-codex-theme/5d0e94aa5a80e02f755b1ab5783f727df7bb1ecd/assets/cover.png", "screenshots": ["https://raw.githubusercontent.com/hey-yx/hermes-codex-theme/5d0e94aa5a80e02f755b1ab5783f727df7bb1ecd/assets/theme-light.png", "https://raw.githubusercontent.com/hey-yx/hermes-codex-theme/5d0e94aa5a80e02f755b1ab5783f727df7bb1ecd/assets/theme-dark.png"], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "codex-truly", "repo": "https://github.com/kyssta-exe/hermes-codex-truly", "sha": "1913d2a0a4b2dd3e4283af5c78241de4d3a2995e", "description": "Gives ChatGPT/Codex-subscription models the context window the backend actually accepts instead of the one its catalog advertises. Measured live on 2026-10-14: gpt-6.1-sol advertises 500K, caps at 872K and accepts 919,956 input tokens, while the -900k opt-in variant had silently stopped working because Hermes only raises a legacy 272K advertisement. The plugin reads the live catalog, writes one scoped model_overrides.<provider>.<model_id>.context_window entry per model (a documented step of context resolution, so no core patch), and ships a probe that bisects the API for the true ceiling because the refusal is a late SSE event, not an HTTP error. It also selects core's Codex-backed image provider so image_generate runs on the subscription with no OPENAI_API_KEY. Disclosure - uses the profile's Codex sign-in through Hermes's credentialed_provider_request (requires_auth: [openai-codex]); the plugin never reads auth.json and never holds a token, and network calls go only to chatgpt.com. Its only writes are scoped model_overrides entries and image_gen.provider (only when unset), through Hermes's atomic config writers; revert removes exactly what it wrote. No telemetry, no background processes, no shell commands, no self-updater. probe spends subscription quota (refused requests are free, accepted ones bill) and is never run automatically. Disclosure \u2014 uses the profile's Codex sign-in only through Hermes's credentialed_provider_request (requires_auth: openai-codex) and calls chatgpt.com only; its CLI and the model-callable codex_truly tool write scoped model_overrides context_window entries and image_gen.provider (only when unset) to config.yaml with no approval prompt, and `probe` sends large padding requests that spend subscription quota.", "maintainer": "kyssta-exe", "title": "Codex Truly", "tier": "community", "category": "models", "requires_hermes": ">=0.21.7", "version": "1.0.0", "docs_url": "https://github.com/kyssta-exe/hermes-codex-truly#readme", "platforms": [], "known_issues": ["Full 1M of input is not reachable on the Codex OAuth route: ~1.05M total context is shared with a 128K output reserve, leaving ~920K of input. The plugin defaults to 900,000 and clamps to 918,000 rather than promising more.", "An over-large window fails late - the request streams response.created and then returns context_length_exceeded - so it surfaces as a mid-turn crash rather than a configuration error. Lower target_context_window and re-apply if a turn dies that way."], "capabilities": {"provides_tools": ["codex_truly"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cognee", "repo": "https://github.com/topoteretes/cognee-integrations", "subdir": "integrations/hermes-agent", "sha": "ccfb0e4e3fa8f3ce09c023d258c205ca972e48a8", "version": "1.3.2", "description": "Knowledge-graph memory for Hermes, shared with Cognee's Claude Code, Codex and OpenClaw plugins: automatic recall, remember, forget, recaps and code search, on a local cognee server or Cognee Cloud. Disclosure \u2014 runs a local cognee server (uvicorn on 127.0.0.1:8011) and a session-close watcher in the background; each turn plus its tool calls and results (redacted, capped) go to that server and on to your configured LLM provider (OpenAI by default), or to Cognee Cloud / COGNEE_BASE_URL in remote mode; turns the server could not take are queued in ~/.cognee-plugin; the store lives in ~/.cognee, outside HERMES_HOME and shared across profiles and with Cognee's Claude Code, Codex and OpenClaw plugins; cognee sends anonymous telemetry unless TELEMETRY_DISABLED=1.", "maintainer": "topoteretes", "tier": "community", "category": "memory", "docs_url": "https://github.com/topoteretes/cognee-integrations/tree/main/integrations/hermes-agent#readme", "readme": true, "capabilities": {"provides_tools": ["cognee_recall", "cognee_remember", "cognee_forget", "cognee_switch_dataset", "cognee_code_search", "cognee_recap"], "provides_hooks": ["on_session_end", "on_pre_compress", "on_memory_write"], "provides_middleware": [], "requires_env": []}}, {"name": "cognition", "repo": "https://github.com/aska-digital/cognition-memory", "sha": "a31ae960034ef3f0f860a33dc5ab8637549343aa", "version": "0.1.1", "description": "Cognition session-end memory \u2014 facts regex-extracted from your messages at session end, stored in a local SQLite queue and JSON log under one repo label, with fetch-first merge, per-entry provenance, and budgeted prefetch (tools: cognition_search, cognition_status, read-only cognition_dream). Disclosure \u2014 saves verbatim excerpts (up to 400 chars) of your own messages that match preference/decision phrases in plain local files under HERMES_HOME/cognition/ (SQLite queue, JSON commit log) and re-injects them into later prompts sent to your model provider; the author name is read from ~/.gitconfig; the plugin makes no network calls of its own.", "maintainer": "aska-digital", "tier": "community", "category": "memory", "docs_url": "https://github.com/aska-digital/cognition-memory#readme", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["cognition_search", "cognition_status", "cognition_dream"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "colorado-traffic", "repo": "https://github.com/drkpxl/colorado-traffic", "sha": "e7ae48527f7069ed4e311516773d4828e8453efb", "description": "Live Colorado highway events from CDOT COtrip. No API key. Default corridor is I-70 Golden to east Denver. Separates incidents happening now from scheduled work and unverified Waze reports.", "maintainer": "drkpxl", "tier": "community", "category": "tools", "version": "1.1.0", "docs_url": "https://github.com/drkpxl/colorado-traffic#readme", "platforms": ["macos", "linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "command-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "bf93fe7502464a2206f4b7878c61946f0b022b88", "subdir": "command-ledger", "description": "Local ledger of the slash commands you run in Hermes (built-in commands in the CLI, built-in and plugin commands on messaging platforms): /command-log shows how often each command was used, its share, in how many sessions and when last, per command, platform, surface or day, for the last 24 hours, any number of hours or days, the latest session or everything recorded; /command-log recent lists the newest commands (ten, or up to 100 with /command-log recent 50) with the alias typed. Disclosure \u2014 writes command metadata (command name, alias typed, surface, platform, a 12-digit hash of the session key; no arguments, session key or user id) to plugin-data/command-ledger/commands.jsonl, trimmed to 5,000 rows past 2 MB; observer only, cannot block or change a command; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/command-ledger", "version": "1.2.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/bf93fe7502464a2206f4b7878c61946f0b022b88/docs/command-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_command"], "provides_middleware": [], "requires_env": []}}, {"name": "command-tray", "repo": "https://github.com/aydnOktay/hermes-command-tray", "sha": "f28afd1e21dd9ac18756a4ec8d48e8a0f6889ce2", "description": "Session command tray \u2014 shell commands the Hermes agent ran via the terminal tool (success and failure). Desktop pane and /commands. No API keys. Disclosure \u2014 records terminal commands with exit code, workdir and a 160-char redacted output preview to $HERMES_HOME/plugin-data/command-tray/state.json; the Desktop pane inserts text through Hermes Desktop's internal hermes:composer-insert event (not a public SDK API) with clipboard fallback; no network.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-command-tray", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["command_tray_list", "command_tray_clear"], "provides_hooks": ["post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "commandcode-oauth", "repo": "https://github.com/NanamiMio/hermes-commandcode-oauth", "sha": "e51eb61613604aefbcf3203c8fcce531706232ee", "description": "Command Code CLI-key model provider with a live OAuth catalog property bridge, plan limits and failover classification. Disclosure \u2014 uses the CLI-internal api.commandcode.ai/alpha/generate endpoint and CLI client headers, sends the full conversation, tool schemas, cwd path and OS/Python version, and imports a static key from the read-only CLI credential file or a browser hand-off; no OAuth exchange takes place. Hermes also bundles commandcode for the documented Provider API.", "maintainer": "NanamiMio", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/NanamiMio/hermes-commandcode-oauth#readme", "version": "0.1.4", "readme": true, "platforms": [], "known_issues": ["Model-scoped RPM cooldowns and fail-closed OAuth routing require the companion Hermes core fix; unpatched cores can still exhaust sibling models or resolve an unavailable OAuth route through another provider.", "Older cores may incorrectly warn about this provider's vendor/model IDs in hermes doctor; generic profile namespace support is proposed in upstream PR 134900."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "comment-scraper", "repo": "https://github.com/supertj/comment-scraper-mcp", "sha": "fd739bc532f351d22f056ff74bf48a1a14beca7f", "subdir": "plugin", "title": "Comment Scraper", "description": "Ask about the Reddit and Hacker News threads you exported with the Comment Scraper browser extension: list, read, search and quote them by comment number. Disclosure \u2014 starts a local stdio MCP server with npx -y comment-scraper-mcp@0.1.0, which npx downloads from npm on first run; the server only reads JSON exports in ~/Downloads and the folders directly inside it, never writes files, makes no network requests, stores no credentials and sends no telemetry.", "maintainer": "Comment Scraper", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://comment-scraper.com/docs", "version": "0.1.0", "image": "https://raw.githubusercontent.com/supertj/comment-scraper-mcp/fd739bc532f351d22f056ff74bf48a1a14beca7f/plugin/assets/icon.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "compartment", "repo": "https://github.com/MaxFreedomPollard/Compartment", "sha": "b144fc34723911eace9f240ac1044b9280b74bf2", "subdir": "integrations/hermes/compartment", "description": "Encrypted, fully offline memory provider. AEAD-encrypted local vault (vectors included), bundled embedding model, exact hybrid search, no API key and no network at runtime. One vault shared with Claude, Cursor and any other MCP client on the machine. Disclosure \u2014 installs the full compartment engine (about 27 Python packages including onnxruntime, tokenizers, mcp and system-tray dependencies) into the Hermes venv; the provider's system prompt instructs the model to store passwords and API keys in the encrypted vault.", "maintainer": "MaxFreedomPollard", "tier": "community", "category": "memory", "requires_hermes": ">=0.20.1", "docs_url": "https://github.com/MaxFreedomPollard/Compartment/blob/b144fc34723911eace9f240ac1044b9280b74bf2/integrations/hermes/README.md", "version": "4.10.0", "image": "https://raw.githubusercontent.com/MaxFreedomPollard/Compartment/b144fc34723911eace9f240ac1044b9280b74bf2/docs/images/social-preview.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "completion-sound", "repo": "https://github.com/Zamoca42/hermes-completion-sound", "sha": "160883daf31f7e788f862197cf2bedb7b8715be2", "title": "Completion Sound", "description": "Pick the sound Hermes Desktop plays when a turn finishes: one of the 14 built-in presets or your own audio file (mp3, wav, ogg), with an optional different sound during night hours. Files stay in the plugin's local storage. Desktop-only (desktop/plugin.js inside the plugin SDK surface); no agent tools, hooks, middleware or env vars.", "maintainer": "Zamoca42", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/Zamoca42/hermes-completion-sound", "version": "0.1.0", "platforms": [], "known_issues": ["Hermes' own completion sound still plays alongside the plugin's until Hermes adds a way to turn it off (PR #140350)."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "composer-modes", "repo": "https://github.com/LisandroNahuelH/hermes-composer-modes", "sha": "de372aa34ecfe6adb424f86c04ca2de924984cb0", "description": "Cursor-style composer modes (ask / agent / plan / debug) for the Hermes desktop \u2014 the mode's operating note reaches the model inside the turn's model-facing bytes, never the bubble, transcript or session titles, and ask mode is enforced read-only on the tool side.", "maintainer": "LisandroNahuelH", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/LisandroNahuelH/hermes-composer-modes#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "context-audit", "version": "0.1.0", "repo": "https://github.com/ZidoCode/context-audit", "sha": "2aaa96aab2c685798b011a5d6479a4a1fa6a033f", "description": "Context-window forensics: per-turn input/output token estimates, the single largest tool output of each turn, oversized tool calls (args over 50 KB), and compaction events, recorded as metadata only (tool name, byte length, ids, timestamps \u2014 never args or results) in a local SQLite DB under HERMES_HOME/plugin-data/context-audit/. Adds a /context-audit slash command that prints the top 5 context eaters over a window with one mitigation per entry.", "maintainer": "ZidoCode", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/ZidoCode/context-audit#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_llm_call", "post_llm_call", "post_auxiliary_call"], "provides_middleware": [], "requires_env": []}}, {"name": "conxt", "title": "Conxt", "repo": "https://github.com/conxtdevelopmentteam/hermes-conxt", "sha": "ec00e8a0e1f59df55828109f9ffe7136b65f544a", "version": "0.1.1", "description": "Conxt governed memory provider \u2014 recall before each turn (personal, plus a team's approved memories), conversation capture in batches, and tools to search, remember, and propose team memories that a person approves in Conxt before anyone recalls them. Disclosure \u2014 Each turn's message (first 500 characters) and the conversation's user and assistant messages are sent to the Conxt API at mcp.conxt.dev (or an https CONXT_BASE_URL you set) with your CONXT_API_KEY; tool results are not sent, but text the assistant repeats is. Every entry Hermes's built-in memory tool adds is also copied to your Conxt memory, and conxt_remember / conxt_propose send the memory text they are given. No telemetry, no shell commands, and nothing is written automatically from cron or subagent runs. Requires a Conxt plan that includes API keys.", "maintainer": "conxtdevelopmentteam", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/conxtdevelopmentteam/hermes-conxt#readme", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CONXT_API_KEY"]}}, {"name": "corpus", "repo": "https://github.com/teakesdev/corpus-agent-kit", "sha": "53db664236201a885a3a7133ffe62476293faace", "subdir": "plugins/corpus", "description": "Hosted Corpus MCP (Streamable HTTP at corpuslaw.us/api/mcp) plus two bundled skills: US law search/get_node/list_coverage over 571k+ provisions, and LLC/nonprofit formation intake (requirements, compare, NAICS lookup, handoff, USDC checkout, payment_status), with account.status for quota. Filing always stays human-gated and USDC pay is email-confirmed. Portable Agent Plugins v1 package (mcp.json + skills/); no API key needed for anonymous research. The formation skill requires fixed vendor-authored marketing copy in the first reply and before payment, and sends founder PII (name, email, phone, address) to Corpus through links and MCP tools. Intake instructions are vendored; checkout requires exact-amount confirmation from the user in the current turn.", "maintainer": "teakesdev", "tier": "community", "category": "tools", "docs_url": "https://corpuslaw.us/agents", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cortexlayer", "repo": "https://github.com/Cortex-Layer/cortexlayer-hermes-plugin", "sha": "099e4b3e77f73086bbf94fb32e052c864295e2ee", "subdir": "plugins/memory/cortexlayer", "description": "CortexLayer memory provider \u2014 page-linked long-term memory with link-expansion retrieval, wired into Hermes' automatic per-turn recall (prefetch) and persistence (sync_turn), plus a pre-compress checkpoint so evidence Hermes' own context compaction would otherwise drop is saved first. Platform mode only: each turn's query and conversational content is sent to the hosted api.cortexlayer.net (HTTPS, API-key authenticated) for storage/retrieval \u2014 no local/offline mode. Requires a free CortexLayer account and API key.\n", "maintainer": "Cortex-Layer", "tier": "community", "category": "memory", "docs_url": "https://docs.cortexlayer.net/docs/agents/hermes", "version": "0.1.1", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end", "on_pre_compress"], "provides_middleware": [], "requires_env": ["CORTEX_API_KEY"]}}, {"name": "covision", "repo": "https://github.com/Covision-Consultants/covision-agent-plugin", "sha": "373012bed0a36f7d4345a180eefc26352403cd3d", "description": "Read-only Covision meeting, assigned-task, and published-knowledge tools through the Covision Streamable HTTP MCP service, plus a workflow skill. Requires a Covision account, organization connector enablement, and browser OAuth consent; no API key or client secret is stored in the plugin.", "maintainer": "Covision Consultants", "tier": "community", "category": "tools", "docs_url": "https://github.com/Covision-Consultants/covision-agent-plugin", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "crawl4ai", "repo": "https://github.com/mblauser/hermes-plugin-crawl4ai", "sha": "6eb0842a39e2d89fb02ca85512945700dbebdc86", "description": "Crawl4ai self-hosted web content extraction. Requires CRAWL4AI_URL and CRAWL4AI_API_TOKEN pointing at your instance.", "maintainer": "mblauser", "tier": "community", "category": "web", "docs_url": "https://github.com/mblauser/hermes-plugin-crawl4ai#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "crew", "repo": "https://github.com/macd2/Crew", "sha": "998fd9d3685cd412a9294fbbb93687054d20058c", "description": "One /crew message becomes verified work on the kanban board. A coordinator owns every card until its proof command exits 0 - one writer per card, an independent verifier, a hard token budget per card, and a live local dashboard of every card, run and tool call. Disclosure \u2014 install.py creates four crew-* profiles cloned from your chat profile (including its .env provider keys and memories), deletes non-crew skills in them, updates crew in other profiles and on Linux starts a loopback dashboard service (127.0.0.1:8799, transcript excerpts; --publish serves it to one tailnet login), restarting it when an upgrade changes the plugin code; it never approves shell hooks itself, but on a terminal offers (y/N) to open each profile's Hermes so Hermes asks for hook consent, first revoking approvals whose hook script changed; on native Windows the service and the optional nightly cron are skipped and the dashboard is started by hand, and proofs run in Git for Windows's bash; a Crew tab in the Hermes dashboard and a native Crew page in Hermes Desktop build that board inside the Hermes backend, including its transcript excerpts, each live card's step count and last tool name, and its acknowledge, Unstuck, Retry, Proof and Stop actions, under /api/plugins/crew/ to anyone with dashboard access; a detached coordinator makes read-only model decisions and runs card proof commands unattended with a scrubbed env, flagged or changed proofs only after the owner answers /crew-proof; card reports and questions are sent to the originating chat via hermes send; agent-written per-role lessons are injected into later crew turns.", "maintainer": "macd2", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/macd2/Crew#readme", "version": "0.10.1", "image": "https://raw.githubusercontent.com/macd2/Crew/998fd9d3685cd412a9294fbbb93687054d20058c/assets/banner.png", "screenshots": ["https://raw.githubusercontent.com/macd2/Crew/998fd9d3685cd412a9294fbbb93687054d20058c/assets/dashboard.webp", "https://raw.githubusercontent.com/macd2/Crew/998fd9d3685cd412a9294fbbb93687054d20058c/assets/desktop-dark.png"], "platforms": ["linux", "windows"], "capabilities": {"provides_tools": ["crew_verdict", "crew_progress", "crew_proof_check", "crew_lesson", "crew_plan", "crew_diagnose"], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_llm_call", "post_api_request", "api_request_error", "on_kanban_dispatch_tick"], "provides_middleware": [], "requires_env": []}}, {"name": "cron-bulletin", "repo": "https://github.com/lvabarajithan/hermes-cron-bulletin", "sha": "42afc8190f61a4601da7bdeced61d2c26e10fd65", "tier": "community", "category": "desktop", "description": "Central Hermes Desktop inbox for reports produced by local cron runs.", "maintainer": "Abarajithan", "version": "0.1.2", "image": "https://raw.githubusercontent.com/lvabarajithan/hermes-cron-bulletin/42afc8190f61a4601da7bdeced61d2c26e10fd65/docs/cron-bulletin.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "crontab-ref", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "c5a412f46ab5cc14bb82528481a46c8f8bb3fe2a", "subdir": "crontab-ref", "description": "@crontab: context references that explain a cron expression for the model: @crontab:\"0 9 * * 1-5\" (or a shortcut such as @crontab:@daily) attaches a plain-words reading (\"At 09:00 on Monday through Friday.\"), each field on its own row, whether Hermes's /cron takes it as a cron expression (shortcuts, ? and 5#3 are not), its next five runs in Hermes's timezone setting worked out the way cron/jobs.py computes next runs, and notes on day of month OR day of week, * in the minute field, steps that do not divide the hour or day, days 29-31 and 7 as Sunday; the TUI and Desktop composer suggest examples and preview an expression as you type it. The reading comes from croniter, the library Hermes's scheduler uses. Disclosure \u2014 reads only the text of the reference itself, the system clock and Hermes's timezone setting (HERMES_TIMEZONE, else timezone from the loaded config through hermes_cli.config), using croniter (already installed with Hermes) and Python's standard library; no network, no files read or written, no subprocess, no credentials read, no cron job created, changed or run; the @crontab: reference and its explanation become part of the message sent to your model provider and saved in the session history; register() only adds the @crontab: reference provider.", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/crontab-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/c5a412f46ab5cc14bb82528481a46c8f8bb3fe2a/docs/crontab-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "crypto-prices", "repo": "https://github.com/cruzlxyz/crypto-prices", "sha": "69d34d7fa8d600f3c57b634c5cfdb8fdd2fe995a", "description": "Live crypto price ticker for the desktop status bar \u2014 Top 10 by market cap, seamless marquee, custom coins & 60+ display currencies, adjustable width (CoinGecko, no API key).", "maintainer": "cruzlxyz", "tier": "community", "category": "desktop", "version": "0.1.0", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/cruzlxyz/crypto-prices#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "csharp-game-editor", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-csharp-game-editor", "sha": "87f7217f4baae369dbf1df405418c0f7ad711336", "version": "0.6.0", "requires_hermes": ">=0.21.6", "description": "Give it one feature for the Unity project open in your editor, and it builds the scripts, objects and scene in one plan, stops that plan when the compile reports an error CS line, and plays the scene when the compile is clean. Disclosure \u2014 Needs MCP for Unity pinned to v10.3.0, plus git and uv. Hermes starts mcpforunityserver==10.3.0 through uvx with telemetry and the update check off. Disk reads run at once. apply_plan asks once and puts back a file the plan did not name. A plan that deletes, runs editor code, can lose unsaved work or writes outside the project asks again, and that summary is sent only when every line fits the approval card; otherwise nothing is sent and confirm_risky_plan asks. unity_docs sends the query to docs.unity3d.com after Hermes asks. unity_generate can call paid providers you configured in MCP for Unity; that call was not part of the check. Tools are on by default on every surface, including the gateway. Only users the gateway admits can reach the tools, and this plugin keeps no user list of its own. Cron and a session with nobody to answer decline. Logs stay in <HERMES_HOME>/plugin-data/agent-plugin-csharp-game-editor-<hash>/logs. Stop with hermes plugins disable csharp-game-editor, or hermes tools for one surface. macOS only.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-csharp-game-editor", "platforms": ["macos"], "capabilities": {"provides_tools": ["mcp__csharp_game_editor__unity_editor", "mcp__csharp_game_editor__unity_scene", "mcp__csharp_game_editor__unity_object", "mcp__csharp_game_editor__unity_script", "mcp__csharp_game_editor__unity_asset", "mcp__csharp_game_editor__unity_look", "mcp__csharp_game_editor__unity_ui", "mcp__csharp_game_editor__unity_vfx", "mcp__csharp_game_editor__unity_animation", "mcp__csharp_game_editor__unity_graphics", "mcp__csharp_game_editor__unity_physics", "mcp__csharp_game_editor__unity_probuilder", "mcp__csharp_game_editor__unity_profiler", "mcp__csharp_game_editor__unity_build", "mcp__csharp_game_editor__unity_packages", "mcp__csharp_game_editor__unity_code", "mcp__csharp_game_editor__unity_tests", "mcp__csharp_game_editor__unity_docs", "mcp__csharp_game_editor__unity_generate", "mcp__csharp_game_editor__plan_batch", "mcp__csharp_game_editor__apply_plan", "mcp__csharp_game_editor__confirm_risky_plan"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "ctx_checkpoint", "repo": "https://github.com/GottZ/ctx", "sha": "98749f3cf929a37d4c4a68512e1cd4db6f4bad6d", "subdir": "integrations/hermes/plugin/ctx_checkpoint", "version": "0.4.4", "title": "ctx checkpoint", "description": "Memory provider that archives the direct user/assistant transcript into a ctx knowledge store before every compaction, deterministically and with no LLM in the path, and hands the resulting block IDs to the compaction summary so the exact wording stays recoverable. Best-effort on any supported Hermes; with compression.checkpoint_required on Hermes 0.21.1+ it uses the fail-closed pre-compress checkpoint contract (#94639) and blocks compaction until the checkpoint is durable. Disclosure \u2014 the turns about to be compacted (tool results and system prompts excluded, secrets redacted twice) are written through Hermes' MCP dispatch to the ctx server you configure in mcp_servers; the plugin holds no credentials, makes no other network calls and has no telemetry; it imports the core modules agent.redact, tools.registry and hermes_cli.config.", "maintainer": "GottZ", "tier": "community", "category": "memory", "requires_hermes": ">=0.20.4", "docs_url": "https://github.com/GottZ/ctx/blob/root/integrations/hermes/README.md", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cua-spaces", "repo": "https://github.com/trycua/hermes-cua-spaces", "sha": "82bb8d31517d2d1b8f1ef7f64701558dcac8aea9", "subdir": "", "description": "Cua's own plugin: runs Hermes's terminal, file and code tools inside a Cua Space, an isolated Linux, macOS or Windows machine you can watch live, as a terminal backend (`hermes config set terminal.backend cua`). On Hermes 0.22.3 and later, Bot Desktop, computer_use and the browser follow the terminal into the Space too (needs the `cua` command). Disclosure \u2014 installs the `cua` Python SDK (>=0.5.0,<0.8); every command the agent runs, every file it touches, and (on 0.22.3+) every screen, click and page the agent drives go to the Space: on this machine for a local Space, or on Cua's cloud (cua.ai) or a machine you name, using the sign-in `cua auth login` saved (the plugin never reads or stores a token, and keeps CUA_API_KEY/CUA_DAEMON_TOKEN out of the Space). Windows Spaces run Hermes's tools in Git Bash, like Hermes on a Windows PC: if the Space lacks Git for Windows or Python, the plugin installs them inside the Space (pinned official installers checked against SHA-256, `winget` fallback) and adds `C:\\c`-style drive aliases there. The optional `desktop` setting installs a desktop stack (VNC, Chromium, agent-browser, cua-driver) inside a Linux Space with sudo there. Nothing is installed on this machine. With the default `space: create` it makes a fresh Space per session and deletes it when Hermes finishes (`delete_on_exit`); because that Space is a disposable sandbox, Hermes skips its dangerous-command prompts there, as it does for its other container backends. A Space you name is never deleted and keeps the prompts.", "maintainer": "trycua", "title": "Cua Spaces", "version": "0.4.0", "tier": "verified", "category": "tools", "requires_hermes": ">=0.21.6", "image": "https://gist.githubusercontent.com/teknium1/953b88aa0cd14fdad2880db82d8476c3/raw/255e7b3f9bd6eb780f8aae7228c1a15fe797efbd/cua-spaces-banner.jpg", "docs_url": "https://github.com/trycua/hermes-cua-spaces#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cursor-acp", "repo": "https://github.com/neerazz/hermes-cursor-acp", "sha": "d5b6146c4e6dcfca110fbcf736d8b51823bc8e64", "description": "Use your Cursor subscription models (Claude Opus/Sonnet 5.5, Composer 2.5, GPT-5.6, Grok) inside Hermes Agent via the Cursor CLI's ACP server (`agent acp`). Install with one command (`npx hermes-cursor-acp`) or `hermes plugins install cursor-acp`. The plugin rewrites `.cursor/cli.json` in an empty private workspace every run with a deny-all list (`Read`, `Write`, `Shell`, `WebFetch`, `Mcp`) to prevent Cursor's native CLI tools from accessing host files. It includes a custom extractor that recovers both flat `{\"name\", \"arguments\"}` and inline `<tool_call>` blocks that standard regex bridges drop, retries on concurrent `set_model` calls, and reports `usage=None` so Hermes proactive context compression functions correctly. Disclosure \u2014 sends the full conversation, Hermes tool schemas and tool results to Cursor through your locally installed, signed-in Cursor CLI (`agent acp`); Cursor's own tools are fenced by a deny-all `.cursor/cli.json` that the plugin rewrites in a private workspace under `$HERMES_HOME/cache/cursor-acp-workspace` on every start (a differing existing file is backed up to `cli.json.bak`), and Hermes executes every tool call under its own approvals.", "maintainer": "neerazz", "tier": "community", "category": "models", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/neerazz/hermes-cursor-acp#readme", "version": "0.1.2", "readme": true, "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cursor-provider", "repo": "https://github.com/anpicasso/hermes-cursor-provider", "sha": "bf7d61fb1e37fa78ec58de7683ec436dff5b71bf", "subdir": "provider", "description": "Cursor model provider using the official proprietary Cursor SDK. Disclosure \u2014 uses Cursor's proprietary cursor-sdk (PyPI, bundled binary bridge on loopback) with the user's CURSOR_API_KEY; sends the full conversation, tool schemas/results and images (HTTPS URLs or base64) to Cursor; keeps private per-session SDK workspaces under HERMES_HOME/cache/cursor-sdk; Cursor built-in tools and MCP are requested off and Hermes keeps tool execution and approvals.", "maintainer": "anpicasso", "tier": "community", "category": "models", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/anpicasso/hermes-cursor-provider#readme", "version": "0.4.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "cursor-sdk", "repo": "https://github.com/mcpeezy/hermes-cursor-sdk", "sha": "0e546bc079ab23451a52a12ca02e8a55af34e217", "description": "Experimental model transport using the official Cursor Agent SDK. Requests go to Cursor through its official SDK. The plugin cannot enforce an included-only spending cap and never changes account spending settings. Instructions use a Cursor project rule, not a native system-role override. Permission and prompt-hierarchy equivalence remain unqualified. The plugin spawns Node and a local SDK agent, runs Git initialization in a plugin-owned workspace, and writes project rules, hooks, and SDK state under its own runtime directory. That state may contain private conversation data and currently remains on disk. Credentials come from Hermes's profile-scoped secret accessor. No credential store or vendor token file is read directly by plugin code. Text-only, buffered responses. The bundled model snapshot is not live entitlement discovery. Optional picker hooks require Hermes support. This plugin does not patch the desktop. Disclosure \u2014 spawns Node and a local Cursor Agent SDK worker per request (`npm ci` in the plugin dir installs Cursor's official native platform binaries from npm); sends the full conversation, system prompt and tool schemas to Cursor with your CURSOR_API_KEY; Cursor-native shell/file tools are denied by a fail-closed project hook and the run is cancelled if one fires, but that enforcement is not proven in every Cursor runtime; each request's workspace and conversation state stay under the plugin's runtime/ directory until you delete them.", "maintainer": "mcpeezy", "tier": "community", "category": "models", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/mcpeezy/hermes-cursor-sdk#readme", "version": "0.1.0", "readme": true, "platforms": ["macos", "linux"], "known_issues": ["Experimental: included subscription billing and live permission equivalence are not verified.", "Node 22.13 or later and Git are required. Install the pinned npm dependencies in the plugin directory.", "Text-only, buffered responses. Model snapshot is not live entitlement discovery.", "SDK workspaces and conversation state remain under the installed plugin's runtime directory.", "Uses 3 private Hermes helper imports, disclosed in the README and entry PR."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CURSOR_API_KEY"]}}, {"name": "custodian", "repo": "https://github.com/indigokarasu/hermes-custodian-plugin", "sha": "d5b4ebfd2353a29380a51c8bcba84d4682cf4c91", "version": "3.0.1", "description": "Autonomous operations monitor for a Hermes install: scans gateway logs, cron jobs, skill journals and agent data directories, classifies findings against a 27-fingerprint registry, auto-repairs Tier 1 problems, escalates the rest, and keeps an append-only issue ledger. Ships /custodian (status, scan, issues, repair, verify, schedule, confidence, init, escalation-runner), four scan/health tools and a grid dashboard. Disclosure \u2014 reads gateway logs, cron job state and per-skill journal files under HERMES_HOME to build its findings, and writes repair actions and an issues ledger back there; it performs no network I/O and holds no credentials. Disclosure \u2014 /custodian init registers 3 recurring agent cron jobs (deep scan 4\u00d7/day, cron-health 4\u00d7/day, escalation runner every 30 min on weekdays).", "maintainer": "indigokarasu", "tier": "community", "category": "automation", "docs_url": "https://github.com/indigokarasu/hermes-custodian-plugin#readme", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["custodian_status", "custodian_scan", "custodian_issues", "custodian_cron_health"], "provides_hooks": ["post_tool_call", "on_session_end", "on_session_start", "on_session_reset"], "provides_middleware": [], "requires_env": []}}, {"name": "custom-dangerous-patterns", "repo": "https://github.com/scross01/hermes-custom-dangerous-patterns-plugin", "sha": "256ff08d0be04baf1916f5e7d841b1c2718aa1e4", "description": "Add custom dangerous command patterns to Hermes's built-in approval system. Users define regex patterns in YAML; a pre_tool_call hook sends block patterns to Hermes's human approval gate and blocks deny patterns immediately. Modifies no Hermes internals.", "maintainer": "scross01", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "version": "0.5.1", "image": "https://raw.githubusercontent.com/scross01/hermes-custom-dangerous-patterns-plugin/256ff08d0be04baf1916f5e7d841b1c2718aa1e4/assets/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "cut-sprite-sheet", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-sprite-sheet", "sha": "3e5e9b274177a4d561658be82acd9a10cbc6c39c", "version": "0.1.0", "requires_hermes": ">=0.21.6", "description": "pixel art sprite sheet cutter. png to tileset splitter. cut pixel art into game tiles. sprite sheet from pixel png. 2d walk cycle sprite sheet. tileset cutter for pixel art. split png into sprite sheet. shore tiles tileset tool. pixel art walk cycle sheet. png sprite and shore tiles. Cuts a pixel-art png into frames. Tools: inspect_grid, slice_grid, place_kit for a 2D game. Disclosure \u2014 The png stays on this computer. Nothing is sent. No API key. No daily cap. A gateway room can call the tools. Stop them with hermes tools. One approval on one line via pre_tool_call. Choosing always covers only the same call. An oversized line writes one list file. A failed check writes nothing. Hermes yolo and approvals off skip that prompt. cron, -q, and unattended sessions default to deny. Empty, unknown, or a restrictive license is not written. Unknown text is copied and next warns. CC-BY-SA is copied and next names share-alike. No license chunk still writes and next says no rights are attached. Import once or play fails: godot --headless --editor --quit --path <project>. No solid-color box and no sound effect. Does not launch Godot or Unity. Play may write app-userdata. Uninstall leaves no cron job. Linux is untested. Unity editor 6000.6.6f1 on macOS kept the walk-sheet fileIDs after a reopen.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-sprite-sheet", "platforms": ["macos"], "capabilities": {"provides_tools": ["inspect_grid", "slice_grid", "place_kit"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "darkmoon", "repo": "https://github.com/ASCIT31/darkmoon-hermes-plugin", "sha": "4a24b4eb77f01bf8ba56c11f37803d623fc14f14", "description": "Triage the findings file of a Darkmoon autonomous pentest scan (JSON or SARIF): filter by severity and proof status, get a severity-sorted summary and a pass/fail gate for a release. Read-only and offline: no network, no subprocess, no credentials, standard library only. Darkmoon is open source (GPL-3.0); its web dashboard and remediation agent are Pro and are not used here. Disclosure \u2014 reads a local .json or .sarif file at a model-supplied path (10 MB cap) and returns its findings; no network, subprocess or writes", "maintainer": "ASCIT31", "tier": "community", "category": "tools", "version": "0.1.0", "docs_url": "https://github.com/ASCIT31/Dark-Moon", "platforms": [], "capabilities": {"provides_tools": ["darkmoon_findings"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "dashboard-auth-feishu", "repo": "https://github.com/xielevi/hermes-dashboard-auth-feishu", "sha": "724715f6b87cec86f147b0ff9854abd343c00013", "description": "Feishu / Lark OAuth sign-in for the web dashboard, admitted by tenant + open_id allow-list. Registers the `feishu` dashboard auth provider once plugins.entries.dashboard-auth-feishu.settings (app_id, tenant_key, owner_open_ids) and an app secret are configured. Disclosure \u2014 calls only the fixed Feishu or Lark authorize, token and user_info endpoints; reads HERMES_DASHBOARD_FEISHU_APP_SECRET or, as a fallback, the Feishu gateway's FEISHU_APP_SECRET, plus HERMES_DASHBOARD_FEISHU_SESSION_KEY; stores tenant, open_id and display name per sign-in in a 0600 SQLite file under plugin-data (no upstream tokens); a refused sign-in logs the tenant_key and open_id Feishu returned (identifiers only, for first-time setup); every admitted identity gets full dashboard access; upstream PKCE is not used (confidential client with single-use cookie-bound state); pending logins are in memory, so one dashboard worker only; WebSockets opened before logout may stay open until the session key is rotated and the dashboard restarted.", "maintainer": "xielevi", "tier": "community", "category": "general", "title": "Feishu / Lark Dashboard Login", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/xielevi/hermes-dashboard-auth-feishu#readme", "version": "1.0.1", "known_issues": ["Lark endpoints are implemented but not live-tested; Feishu is tested end to end."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "dashboard-auth-ldap", "repo": "https://github.com/angel12/hermes-ldap-auth", "sha": "7b871ef375239275e29b1934bbed8ae7573afea3", "description": "LDAP / Active Directory password login for the web dashboard. Verifies credentials with an LDAP bind (direct or search-then-bind), never stores passwords, requires ldaps:// or StartTLS, and supports group restriction. Registers the `ldap` dashboard auth provider once dashboard.ldap_auth is configured. Disclosure \u2014 dashboard logins are verified by binding to your configured LDAP/AD server with the user's password (TLS with certificate validation required unless allow_insecure is set); sessions are stateless HMAC tokens (12h access / 30d refresh by default) signed with HERMES_DASHBOARD_LDAP_SECRET or a random per-process key, and logout cannot revoke them; group removal and disabled accounts are not re-checked until the refresh token expires; failed logins count toward the directory's account-lockout policy.", "maintainer": "angel12", "tier": "community", "category": "general", "requires_hermes": ">=0.21", "docs_url": "https://github.com/angel12/hermes-ldap-auth#readme", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "dashboard-button", "repo": "https://github.com/g3org3yo/dashboard-button", "sha": "e3ad0477d61587a0f9e8f1f136d275995328070d", "description": "One-click access to the Hermes Web Dashboard (127.0.0.1:9119) from the Desktop app \u2014 sidebar row, in-app page that loads itself when the server comes up, and a status-bar chip with a live dot. Front-end only: no agent calls, no tokens, no API keys.", "maintainer": "g3org3yo", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.2", "version": "1.1.0", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "dashscope-image", "repo": "https://github.com/rriggs/hermes-plugin-dashscope-image", "sha": "f13665c97eb852b3ef90e30e020dbdcf0c9dc38b", "description": "DashScope (Qwen Cloud) image generation -- Wan 2.7 models via Alibaba Cloud Model Studio. Works with token plan (sk-sp-*) and PAYG (sk-ws-*) keys.", "maintainer": "rriggs", "tier": "community", "category": "tools", "docs_url": "https://github.com/rriggs/hermes-plugin-dashscope-image#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["QWEN_API_KEY"]}}, {"name": "dashscope-video", "repo": "https://github.com/rriggs/hermes-plugin-dashscope-video", "sha": "229b5c93d498dfa25aab31f0bef47f32fccde69f", "description": "DashScope (Qwen Cloud) video generation -- HappyHorse 1.1 models via Alibaba Cloud Model Studio. Async task API. Works with token plan (sk-sp-*) keys.", "maintainer": "rriggs", "tier": "community", "category": "tools", "docs_url": "https://github.com/rriggs/hermes-plugin-dashscope-video#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["QWEN_API_KEY"]}}, {"name": "davinci-resolve", "repo": "https://github.com/wassermanproductions/hermes-davinci-resolve-plugin", "sha": "bbd5b207f823f16a20e756bfa80f44ad34790a3f", "description": "Control DaVinci Resolve Studio live, or generate importable interchange files for free DaVinci Resolve.", "maintainer": "wassermanproductions", "tier": "community", "category": "tools", "docs_url": "https://github.com/wassermanproductions/hermes-davinci-resolve-plugin#readme", "capabilities": {"provides_tools": ["resolve_add_timeline_marker", "resolve_append_to_current_timeline", "resolve_capabilities", "resolve_create_scripted_timeline", "resolve_create_timeline", "resolve_generate_fcpxml_timeline", "resolve_generate_marker_csv", "resolve_import_media", "resolve_launch", "resolve_probe", "resolve_project_summary", "resolve_render_status", "resolve_render_timeline", "resolve_scan_media_folder"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "platforms": ["macos"]}, {"name": "day-panel", "title": "Today (day panel)", "repo": "https://github.com/brunosouzas/hermes-day-panel", "sha": "2a971fec47d16829b73c95fe053eac6f12389903", "description": "A Today page in Hermes Desktop, plus hermes day show and check, built from sections you list in a YAML file: any program that prints JSON (your tracker, a script of yours), your open GitHub pull requests and review requests through gh, one read-only tool of an MCP server you already configured, and your AI providers' limit windows from hermes usage. Items can carry a colour, a progress bar and a relative time; the page follows the Desktop theme. Ships a demo page that needs no login or network. Read-only and no model calls; merging a pull request from the page is off by default and needs a preview and a confirmation pinned to the head commit. Disclosure \u2014 runs the programs your sources file names (no shell), plus gh and hermes usage, as your user with your existing logins; calls a configured MCP server's tool only when the server marks it readOnlyHint, in a child process that imports three undocumented Hermes MCP modules (there is no public seam for this yet); reads only the sources file; writes nothing to disk; logs carry section names and exit statuses, not source output. No credentials stored, no telemetry.", "maintainer": "brunosouzas", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/brunosouzas/hermes-day-panel#readme", "version": "0.1.0", "readme": true, "screenshots": ["https://raw.githubusercontent.com/brunosouzas/hermes-day-panel/2a971fec47d16829b73c95fe053eac6f12389903/docs/today.png"], "platforms": ["macos", "linux"], "known_issues": ["The mcp_tool source imports undocumented Hermes MCP internals (discover_mcp_tools, _tool_is_read_only, mcp_prefixed_tool_name); a Hermes release can break that one source until the plugin is updated. The other sources do not use them.", "Under plugins.isolation: host the hermes day terminal command is not available (Hermes skips plugin CLI commands in the host); the Desktop page still works.", "The Desktop half ships disabled, like every plugin's: turn it on in Capabilities \u2192 Plugins."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "de-law", "repo": "https://github.com/MadeByBrain/hermes-de-law", "sha": "4be88cd048c5ae4d37491ba4e6eb88996886ae7e", "description": "German federal law, EU law and German federal court decisions for Hermes Agent: read one section or article (\u00a7 203 StGB, Art. 6 DSGVO, Art. 50 AI Act) in the source wording with version status (Stand), gazette reference and a ready source line, search the index of federal laws, list a law's sections, and find and read published decisions of BVerfG, BGH, BVerwG, BFH, BAG, BSG and BPatG. Legal texts, not legal advice. Disclosure: sends HTTPS GET requests only to www.gesetze-im-internet.de (law folder names, the daily index, weekly abbreviation lists), www.rechtsprechung-im-internet.de (the daily index, document ids of decisions you read) and publications.europa.eu (CELEX numbers, text language, one SPARQL query per act listing its consolidated versions); section numbers and search words are not sent, because whole laws are downloaded and searched locally. Public sources, no key. Writes public legal texts and indexes (JSON with ETag, Last-Modified and fetch time; no questions, no session data) under HERMES_HOME/plugin-data/de-law/cache, capped by the cache_max_mb setting (default 200 MB). Reads only its own plugin settings. At most one request per second per host, 25 s timeout, 40 MB response cap. rechtsprechung-im-internet.de sends a tdm-reservation header; the plugin fetches its index and single decisions on request only, and case_law: false turns that source off. No hooks, no cron jobs, no background processes. Tools stay on every platform, including gateways (a guest can call them; hermes tools disables one). While the plugin is enabled, its skill adds one line to the skills index of every session.", "maintainer": "MadeByBrain", "tier": "community", "category": "tools", "docs_url": "https://github.com/MadeByBrain/hermes-de-law#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/MadeByBrain/hermes-de-law/4be88cd048c5ae4d37491ba4e6eb88996886ae7e/docs/banner.png", "requires_hermes": ">=0.22.2", "platforms": [], "capabilities": {"provides_tools": ["de_law_get", "de_law_search", "de_law_toc", "de_case_search", "de_case_get"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "deadbolt", "repo": "https://github.com/seanebones-lang/deadbolt-hermes-plugin", "sha": "177fff79a8b6308f8d182146ed8a6e21dc84c565", "description": "Review and approve exact text-artifact writes through a local DeadBolt sidecar. Protects this plugin's commit tool only.", "maintainer": "seanebones-lang", "tier": "community", "category": "tools", "title": "DeadBolt \u2014 reviewed artifact writes", "version": "0.1.0", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/seanebones-lang/deadbolt-hermes-plugin#readme", "platforms": ["linux", "macos"], "readme": true, "known_issues": ["Requires a separately installed DeadBolt 2.0.0 engine and operator-provisioned local sidecar, run, policy and scoped admission credential.", "Only this plugin's artifact commit route is gated; other Hermes tools, plugins, MCP routes and already-running work are outside its boundary.", "New files only, existing parent directories, 32 KiB request limit and five-minute exact approvals. Admitted filesystem failures require operator reconciliation."], "capabilities": {"provides_tools": ["deadbolt_prepare_write", "deadbolt_commit_write"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "debug-desk", "repo": "https://github.com/aydnOktay/hermes-debug-desk", "sha": "57cbd4d23eba978dc9a53ab6387a84c336992b74", "description": "Today's git digest in the current repo, plus the last failed terminal command the Hermes agent ran. Desktop pane, status chip, optional local LLM summary. Does not watch OS or editor terminals.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-debug-desk", "version": "1.0.1", "image": "https://raw.githubusercontent.com/aydnOktay/hermes-debug-desk/57cbd4d23eba978dc9a53ab6387a84c336992b74/assets/banner.png", "platforms": [], "capabilities": {"provides_tools": ["debug_daily_report", "debug_last_failure"], "provides_hooks": ["post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "deepgram-voice", "repo": "https://github.com/jaysonsantos/hermes-deepgram-voice-plugin", "sha": "2d31b885ec873ed6693edd7ad1a80f7023439ac0", "description": "Deepgram Aura text-to-speech and Nova speech-to-text providers for Hermes Agent.", "maintainer": "jaysonsantos", "tier": "community", "category": "voice", "docs_url": "https://github.com/jaysonsantos/hermes-deepgram-voice-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["DEEPGRAM_API_KEY"]}}, {"name": "deepinfra-sandbox", "repo": "https://github.com/deepinfra/deepinfra-hermes-sandbox", "sha": "259a477548f1862071c9e2462fda6a7bb9de68c8", "description": "Terminal backend running agent commands in isolated DeepInfra cloud sandboxes (deep_sands microVMs). Disclosure \u2014 runs agent commands in billable DeepInfra cloud sandboxes and uploads your Hermes skills, cache and skill-registered credential files to the sandbox at /workspace/.hermes; dangerous-command approval is skipped inside the sandbox.", "maintainer": "DeepInfra", "tier": "community", "category": "platform", "docs_url": "https://github.com/deepinfra/deepinfra-hermes-sandbox#readme", "version": "0.1.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["DEEPINFRA_API_KEY"]}}, {"name": "deepseek-search-fetch", "repo": "https://github.com/JasonSwindle/hermes-deepseek-search-fetch", "sha": "b17ae50d243beacfd6ee9171e42f2af29b3c6d65", "description": "DeepSeek Search & Fetch as a backend for the built-in web_search and web_extract. Disclosure \u2014 sends web_search queries and web_extract URLs to api.deepseek.com with your DEEPSEEK_API_KEY and DeepSeek fetches the pages server-side; billed to your DeepSeek balance per successful request; no other endpoint, no telemetry, no file or shell access.", "maintainer": "JasonSwindle", "tier": "community", "category": "web", "docs_url": "https://github.com/JasonSwindle/hermes-deepseek-search-fetch#readme", "version": "1.0.8", "title": "DeepSeek Search & Fetch", "image": "https://raw.githubusercontent.com/JasonSwindle/hermes-deepseek-search-fetch/b17ae50d243beacfd6ee9171e42f2af29b3c6d65/docs/banner.png", "platforms": [], "known_issues": ["Billed by DeepSeek per successful request (list price $0.75 per 1,000; failed calls are free); web_extract calls Fetch one URL at a time, so multi-URL extracts run sequentially to the effective deadline (min(extract_deadline, web.extract_timeout - 1.5s), with bodies aborted at that deadline) and return the pages already fetched; and ori_question is not forwarded, because Hermes hands the provider only the query and a result limit."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["DEEPSEEK_API_KEY"]}, "requires_hermes": ">=0.22.0"}, {"name": "deepseek-whale", "repo": "https://github.com/bmtrnavsky/deepseek-whale", "sha": "9b284b47a1db1f2cc05e71b0d0b2b58f9d773f1b", "description": "Live DeepSeek API peak/off-peak pricing whale for the Hermes desktop titlebar. Blue x0.5 off-peak, grey PEAK at full price, countdown on click, 30s repaint, no backend or API key.", "maintainer": "bmtrnavsky", "tier": "community", "category": "desktop", "version": "1.1.0", "requires_hermes": ">=0.21", "docs_url": "https://github.com/bmtrnavsky/deepseek-whale#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "deferred-questions", "repo": "https://github.com/web3blind/hermes-deferred-questions", "sha": "eeb86254725e8ba0d599f85d25c63488efd06364", "description": "Durable non-blocking questions with exact answer binding and gateway continuation. Disclosure \u2014 its pre_gateway_dispatch hook sees every gateway message and consumes only `dq <id> \u2026` answers from the stored recipient; with `enable_tool` on, the model can send questions to any chat the gateway already authorizes, and a question marked continue_agent resumes that chat's agent with the user's answer; questions and answers are stored unencrypted in $HERMES_HOME/deferred-questions/questions.sqlite3; it calls private gateway and adapter methods, so a Hermes update can break delivery until it is re-pinned.", "maintainer": "web3blind", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.6", "platforms": ["linux", "macos"], "version": "0.2.4", "docs_url": "https://github.com/web3blind/hermes-deferred-questions#readme", "readme": true, "capabilities": {"provides_tools": ["deferred_questions"], "provides_hooks": ["pre_gateway_dispatch"], "provides_middleware": [], "requires_env": []}}, {"name": "degeneracy-guard", "repo": "https://github.com/simin-yuan/hermes-degeneracy-guard", "sha": "ffc28d0ab9ac6b6c0cbb118ed5fb0c06909a3dc1", "version": "1.3.0", "description": "Asks the user to confirm a tool call whose arguments look like a repetition loop rather than data, through Hermes' approval gate (denied or unanswered means refused); replaces flagged degenerate output with a short notice; warns when a session grows long. Disclosure \u2014 no network, shell, subprocesses, own threads, telemetry or credentials; writes incident records and a session counter to its plugin data directory; a stream-side record keeps the last 800 characters of flagged output.", "maintainer": "simin-yuan", "tier": "community", "category": "general", "requires_hermes": ">=0.22.2", "capabilities": {"provides_tools": [], "provides_hooks": ["on_stream_delta", "transform_llm_output", "post_llm_call", "pre_tool_call", "pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "deja-memory", "repo": "https://github.com/vshulcz/deja-vu", "sha": "d7e4a264bbd4deedd0bdba9d22ef5d2ba26c5d4e", "subdir": "extensions/hermes", "version": "0.1.0", "description": "Memory from the coding sessions already on this machine \u2014 Claude Code, Codex, Cursor, Hermes and the other agents deja reads, including history from before it was installed. No model, no API key, no server. Disclosure \u2014 runs the separately installed, unpinned deja binary (brew install deja-vu) as a subprocess; deja reads Claude Code, Codex, Cursor, Hermes and other agents' local transcript files, keeps its index under ~/.cache/deja, and recalled text from those agents is injected into Hermes turns; nothing leaves the machine.", "maintainer": "vshulcz", "tier": "community", "category": "memory", "platforms": ["linux", "macos", "windows"], "docs_url": "https://vshulcz.github.io/deja-vu/guide/memory-for-hermes.html", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "desensitize", "repo": "https://github.com/yubingz/hermes-desensitize", "sha": "4f6697c1e45bb224e40b556372f33794f9326c0f", "subdir": "src/hermes_desensitize", "description": "Chinese-context desensitization for Hermes chats. Replaces PII and business-sensitive entities \u2014 person names, company names, addresses, file paths, and magnitude figures \u2014 with reversible placeholders before a message reaches the model, then restores them in the reply. Two layers: an optional local/OpenAI-compatible LLM for semantic entity judgment, plus a sub-millisecond regex fallback (phone, ID card, email, IP, path) that keeps the conversation working when the model is unavailable. Disclosure \u2014 the semantic layer sends the pre-redaction text to the configured LLM, because recognising a name requires seeing it: with the default provider=ollama that is the local Ollama host and nothing leaves the machine, but provider=openai without an explicit base_url falls back to https://api.siliconflow.cn/v1 (remote); set base_url, or stay on ollama, to keep it local. Also rewrites inbound user messages and outbound assistant replies, so transcript content differs from what you typed; placeholders are code-generated and may over-match (18-digit ID-card-shaped strings, names that collide with the public-entity allowlist); company names are matched greedily and a modifier such as \u539f\u5317\u4eac\u67d0\u67d0\u6709\u9650\u516c\u53f8 is absorbed into the placeholder; magnitude masking drops the numeric value and only fires on the configured trigger words, so a domain term absent from that list is left unmasked without warning; the placeholder mapping is held in memory only and never written to disk.", "maintainer": "yubingz", "tier": "community", "category": "tools", "requires_hermes": ">=0.19", "docs_url": "https://github.com/yubingz/hermes-desensitize#readme", "version": "1.4.1", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "pre_api_request", "transform_llm_output", "post_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "deskrpg", "repo": "https://github.com/dandacompany/deskrpg-hermes-plugin", "sha": "1e9914a614f17186b6749916031da69ed6b61aa0", "description": "Hermes gateway integration for DeskRPG virtual offices, with profiles, kanban, cron, artifacts and NPC skill management. Install it through the DeskRPG setup wizard. Optional (off by default): when enabled by the operator, links the plugin into every profile so kanban workers and cron runs can save artifacts. Disclosure \u2014 NPC skill management runs hermes skills/curator commands as background subprocesses per profile and edits that profile's skills, config.yaml and memory files; creating new review-policy kanban cards needs a review-policy API that upstream Hermes does not ship (the README points at the author's hermes-agent fork for it), and that feature stays inert on upstream.", "maintainer": "dandacompany", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/dandacompany/deskrpg-hermes-plugin/tree/1e9914a614f17186b6749916031da69ed6b61aa0", "version": "0.16.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["artifact_save", "propose_kanban_card"], "provides_hooks": ["post_tool_call", "post_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "devin", "repo": "https://github.com/Adolanium/hermes-devin", "sha": "45ae46b935503d9271492001564690f153a0fdb9", "subdir": "", "title": "Hermes Devin", "description": "Delegate coding tasks to the Devin CLI, on your computer or in Devin Cloud, with live progress cards and change review in Hermes Desktop. Every launch goes through Hermes approval; Cloud runs need a separate Cloud-managed-permissions confirmation. Disclosure \u2014 spawns the vendor devin CLI from PATH or cli_path (devin acp, devin acp --cloud, devin --print, devin auth status, devin models list); the CLI edits files and runs shell commands in a folder the model picks (any folder unless allowed_roots is set) under the configured permission mode (accept-edits/smart auto-allow edits, dangerous auto-allows everything and needs allow_dangerous: true), and talks to Cognition's servers; Devin Cloud runs use Cognition-managed permissions that Hermes does not gate. Every model-initiated launch goes through Hermes approval; follow-ups typed on a Desktop run card and answers to Devin's prompts on the card start or allow actions on that click without a Hermes prompt (unanswered card prompts are denied after 300 s by default). Uses the existing Devin CLI login and stores no credentials; Hermes provider, bot and tool secrets are stripped from the child environment (extra_env is passed as set). Background runs continue after the turn up to their timeout and post Devin's output back into the conversation as a message when they finish. Run history (prompts, diffs, command output) and model preferences are saved under plugin-data/devin unless persist_runs is off. Independent community add-on, not affiliated with Cognition.", "maintainer": "Adolanium", "tier": "community", "category": "tools", "docs_url": "https://github.com/Adolanium/hermes-devin#readme", "image": "https://raw.githubusercontent.com/Adolanium/hermes-devin/45ae46b935503d9271492001564690f153a0fdb9/assets/catalog-banner.png", "version": "0.1.1", "screenshots": ["https://raw.githubusercontent.com/Adolanium/hermes-devin/bcfeeeb8e6a1798595b266a3d2271eebb90aeef2/assets/screenshots/desktop-review.png"], "platforms": [], "capabilities": {"provides_tools": ["delegate_to_devin", "devin_list_runs", "devin_run_status", "devin_run_result", "devin_cancel_run"], "provides_hooks": ["pre_tool_call", "post_approval_response"], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.6"}, {"name": "devkit", "repo": "https://github.com/Zek-Takai/hermes-devkit", "sha": "dbfa6b26ac64c65ec3e58a937890a912de3d628d", "subdir": "plugin", "title": "Scratchpad (devkit)", "version": "0.3.0", "description": "One managed home for agent drafts: a per-session scratchpad of named buffers the agent edits in place instead of writing a new temp file per revision. Buffers live under plugin-data/devkit/, open in the Desktop code viewer, are promoted to real files only through write_file, and are removed when their chat is deleted. A Scratchpad tab beside Files groups chats by date like the chat sidebar; click a chat to open it, click a file to view or edit it in a workspace tab, and delete or clear drafts. Disclosure \u2014 adds a short placement rule (about 120 tokens) to each turn's user message; reads state.db read-only once an hour from a background thread to find deleted chats, and also removes folders idle longer than idle_days (default 90) using its own stamps; deletes only its own folders under plugin-data/devkit/; no network calls, credentials or third-party services.", "maintainer": "Zek-Takai", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.0", "image": "https://raw.githubusercontent.com/Zek-Takai/hermes-devkit/dbfa6b26ac64c65ec3e58a937890a912de3d628d/docs/scratchpad-banner.png", "screenshots": ["https://raw.githubusercontent.com/Zek-Takai/hermes-devkit/dbfa6b26ac64c65ec3e58a937890a912de3d628d/docs/scratchpad-desktop.png"], "known_issues": ["scratchpad action=open needs the Desktop window bridge on the session gateway (NousResearch/hermes-agent#138917); on v0.22.1 open reports 'The preview pane is only available in the Hermes desktop app'. Every other action works.", "The agent may not always pick the scratchpad on its own (the model chooses its tools). If it writes a loose file or pastes code instead, ask it to use the scratchpad."], "capabilities": {"provides_tools": ["scratchpad"], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "dexio", "repo": "https://github.com/dexio-wiki/hermes-plugin", "sha": "5ab1615315512bbc70dad8f80cc5ecebc0404b34", "version": "0.1.0", "description": "Dexio shared-wiki memory. Before each turn, the pages of your Dexio wiki that match the user's message; tools to search, read and write the pages your other agents and team also use. Nothing is captured automatically: no transcripts or turn logs. Standard library only; no background threads or local services. Disclosure \u2014 with DEXIO_API_KEY set, the first 300 characters of each user message go to the Dexio server (default app.dexio.wiki, or DEXIO_URL) as a search query, tool arguments and the agent's profile name go there on tool calls, and the model is prompted to write, overwrite and edit pages in a wiki shared with the user's team and other agents, without a confirmation step.", "maintainer": "dexio-wiki", "tier": "community", "category": "memory", "docs_url": "https://github.com/dexio-wiki/hermes-plugin#readme", "readme": true, "capabilities": {"provides_tools": ["dexio_search", "dexio_read", "dexio_list", "dexio_write", "dexio_edit", "dexio_append"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["DEXIO_API_KEY"]}}, {"name": "diaktoros", "repo": "https://github.com/coe0718/diaktoros", "sha": "baf20324f54360b2dfd44f855ab6292df8f742cc", "description": "Unattended GitHub pull-request review between two Hermes agents: one pushes fixes, a different one reviews, rounds are capped in verdicts, a watchdog reports silent stalls, and the loop never merges. Disclosure \u2014 runs unattended Hermes agent turns inside bubblewrap (terminal and file tools, no network, no credentials); a host-side broker and the CLI write to GitHub (reviews, comments, labels, issues, repo webhooks, and opt-in fixer pushes, which may push CI fixes, merge commits of the base into a PR's own branch to resolve conflicts, and issue-fix branches and PRs, including an opt-in auto-fix that hands issues its triage seat labels (never P0-P2, capped per day) to the fixer without a maintainer, plus an opt-in clean merge of the base into a review-only author's same-repository PR branch when it conflicts or falls behind, a branch the loop does not own; it never merges a PR) with repo-scope PAT files you provide; edits Hermes's webhook_subscriptions.json directly and its watchdog re-adds this loop's routes while armed; writes gate scripts into the seat profiles' scripts/ folders and creates one hermes cron job (its migrate command replaces the old hermes-review-loop job and copies that plugin's settings); its backup command writes a 0600 archive of the plugin's state, including webhook route secrets, to a path you choose, and restore writes one back into the Hermes home and recreates the cron job (restore only archives you made: a crafted one can place files anywhere under the Hermes home); downloads PR archives from codeload.github.com, failed CI job logs from GitHub's log storage (redirected, without the token) and Rust crates from crates.io on the host; an opt-in observer feed posts loop notices and an optional weekly report to the chat you name; opt-in shadow reviews spend a second profile's model tokens on reviews that are recorded but never posted; its optional Desktop page and local dashboard API read loop state and can re-arm a failed run as `hermes dk retry` would, and doctor compares the installed commit with the plugin's latest GitHub release (read-only); deletes its own state and closed-PR review dirs in roots you configure; on OAuth seats its host proxy may force Hermes token refreshes that rewrite ~/.claude, ~/.codex, ~/.qwen and profile auth.json credentials, and on Claude subscription logins it identifies as Claude Code (Claude Code user-agent, x-app and OAuth beta headers). Nothing runs until you arm a loop. Linux only.", "maintainer": "coe0718", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/coe0718/diaktoros#readme", "version": "0.4.0", "image": "https://raw.githubusercontent.com/coe0718/diaktoros/baf20324f54360b2dfd44f855ab6292df8f742cc/docs/banner.jpg", "platforms": ["linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "diff-review", "repo": "https://github.com/sprmn24/hermes-plugin-diff-review", "sha": "ba7bb0e1c5c1e7cfc36bf627b960910c816cc697", "version": "1.1.0", "description": "Analyze git diffs for common code quality issues \u2014 debug prints, hardcoded secrets, bare except clauses, and unresolved TODOs, in a diff you pass, the working tree (untracked files included) or a branch against its merge base.", "maintainer": "sprmn24", "tier": "community", "category": "tools", "docs_url": "https://github.com/sprmn24/hermes-plugin-diff-review#readme", "capabilities": {"provides_tools": ["diff_review"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "digital-marketing-pro", "repo": "https://github.com/indranilbanerjee/neels-plugins", "sha": "fe81530ae4f92b7459c43fccd21e15dcd54ae661", "subdir": "hermes/digital-marketing-pro", "description": "Open-source marketing toolkit for agencies and in-house teams, one listing with three skill groups and 207 skills registered as Hermes skills: Digital Marketing Pro (strategy, SEO/AEO/GEO, paid media, CRM, analytics; 164 skills), ContentForge (fact-checked long-form content with a run auditor; 22 skills) and SocialForge (a content calendar to images, carousels, video and copy; 21 skills). Skills only: no tools, hooks or background processes. Disclosure \u2014 Skills only (no tools, hooks or MCP servers). The optional scripts the skills run call third-party APIs (ad, CRM, e-mail, Slack, LLM and image/video providers) only when run, using the user's own keys from environment variables. Live writes need the user's typed yes. For writes the plugin sends itself, the script creates a single-use approval record when it prepares the write, and the agent approves that record after the yes, so Hermes does not prompt before those script runs. Writes through MCP tools rely on the typed yes alone. Paid image and video generation is quoted first. refresh_models.py reads your Anthropic, OpenAI, Gemini and (strategy group) Evolink keys. Keys and data live outside the Hermes profile: SocialForge stores API keys in plain text, plus a copy of any Google service-account file, in ~/socialforge-workspace; brand data goes to ~/.claude-marketing; deliverables are copied to ~/Documents/DigitalMarketingPro and ~/Documents/ContentForge. Nothing installs unless the user says yes; installs are exact-pinned pip packages into the Python that runs the script, plus Playwright's Chromium download. See the README and each group's PRIVACY.md.", "maintainer": "Indranil Banerjee", "tier": "community", "category": "tools", "docs_url": "https://github.com/indranilbanerjee/neels-plugins/tree/fe81530ae4f92b7459c43fccd21e15dcd54ae661/hermes/digital-marketing-pro#readme", "version": "3.56.7", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "discord-tps", "repo": "https://github.com/tuancookiez-hub/hermes-discord-tokenpersec", "sha": "056fcd331d9be03c287f293854b715b17b637203", "subdir": "discord-tps", "version": "1.0.3", "requires_hermes": ">=0.21.4", "description": "Show live tokens-per-second and the active model on your Discord bot's presence. Disclosure \u2014 Replaces the Discord bot's public presence with the live tok/s figure and the model name of the most recent API call in this gateway (any platform or chat), visible to anyone who can see the bot; updates at most every interval seconds (minimum 10) over the gateway's existing Discord connection. Reads no credentials and makes no network calls of its own.", "maintainer": "tuancookiez-hub", "tier": "community", "category": "platform", "docs_url": "https://github.com/tuancookiez-hub/hermes-discord-tokenpersec/blob/056fcd331d9be03c287f293854b715b17b637203/discord-tps/README.md", "readme": true, "image": "https://raw.githubusercontent.com/tuancookiez-hub/hermes-discord-tokenpersec/056fcd331d9be03c287f293854b715b17b637203/assets/banner.png", "screenshots": ["https://raw.githubusercontent.com/tuancookiez-hub/hermes-discord-tokenpersec/056fcd331d9be03c287f293854b715b17b637203/assets/presence-screenshot.png"], "capabilities": {"provides_tools": [], "provides_hooks": ["post_api_request"], "provides_middleware": [], "requires_env": []}}, {"name": "doc-markdown", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-doc-markdown", "sha": "4206b7f8066fe84f2c295f480a441f47154d9315", "description": "Convert one local file to Markdown with doc_convert on Linux and macOS, built on Microsoft's MarkItDown. Microsoft and MarkItDown are trademarks of the Microsoft group of companies. Disclosure \u2014 the doc_markdown toolset is on by default on every surface, including a gateway, so anyone you allow there can call doc_convert; stop it with hermes tools. It does not fetch pages. Unattended sessions still convert when Hermes calls the tool. This plugin creates no cron job. A child process runs MarkItDown with no Hermes keys in its environment; on macOS the plugin runs ps about every 10 ms to watch that child's memory. It stops 8 seconds after its converters load, at 60 seconds if loading never finishes, or above 922746880 bytes. It is not a sandbox: after realpath it may read any allowlisted path it can open. Unpublished Hermes code locates the Hermes home, and a failed check refuses the path. Removal deletes the plugin directory, not the markitdown package. Windows was not tested.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-doc-markdown#readme", "version": "0.1.0", "requires_hermes": ">=0.21.4", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["doc_convert"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "doctorpack", "repo": "https://github.com/godhiraj-code/hermes-doctorpack", "sha": "ac00ace14ea9210e2e02a7b978cf4bc51eec2d8f", "description": "Local-first diagnostics, safety audit, and incident postmortems for Hermes Agent.", "maintainer": "godhiraj-code", "tier": "community", "category": "tools", "version": "0.1.0", "capabilities": {"provides_tools": ["doctorpack_config_audit", "doctorpack_plugin_check", "doctorpack_postmortem"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "document-reader", "repo": "https://github.com/lEWFkRAD/hermes-document-reader", "sha": "f3a0bed28e6c289942b899924d9e7cf8b93045e8", "description": "Profile-scoped document OCR for Hermes Desktop and HUD, with a guarded per-profile Windows service.", "maintainer": "lEWFkRAD", "tier": "community", "category": "desktop", "docs_url": "https://github.com/lEWFkRAD/hermes-document-reader#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "platforms": ["windows"]}, {"name": "done-bell", "repo": "https://github.com/aydnOktay/hermes-done-bell-", "sha": "3fa519a291d91b0e6c44bd42762190363ce80c39", "description": "Ring when a Hermes turn finishes so you can leave the window. OS notification, optional chime, and a busy/done chip. Optional \"needs you\" when approval is waiting. No API keys.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-done-bell-", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["done_bell_status"], "provides_hooks": ["on_session_end", "pre_approval_request", "post_approval_response", "agent_loop_stopped"], "provides_middleware": [], "requires_env": []}}, {"name": "draft-cards", "repo": "https://github.com/arsiktech/hermes-draft-cards", "sha": "6e6ca659ece59b0ce1c28b3b188393491ee5a415", "version": "0.1.0", "title": "Draft Cards", "description": "Email and chat-message drafts as reviewable cards in the Hermes Desktop chat. The agent's draft_card tool stores each draft and its revisions; the card shows recipients, subject and body, highlights the words each revision changed (removed text on demand), supports inline editing, and offers Copy and Open in Mail. The plugin never sends anything: pressing Send records approval of that exact version and posts it to the chat, then the agent sends it with the user's existing mail or messaging tools and reports the outcome with draft_card_status. Disclosure \u2014 stores draft text (recipients, subject, body, versions) in the profile's plugin-data/draft-cards/drafts.db (the 500 most recent drafts are kept); the desktop half appends one scoped stylesheet, removed on disable; no network calls, no credentials, no shell commands, no background processes, no telemetry.", "maintainer": "arsiktech", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/arsiktech/hermes-draft-cards/blob/6e6ca659ece59b0ce1c28b3b188393491ee5a415/README.md", "platforms": [], "screenshots": ["https://raw.githubusercontent.com/arsiktech/hermes-draft-cards/6e6ca659ece59b0ce1c28b3b188393491ee5a415/docs/revised-dark.png", "https://raw.githubusercontent.com/arsiktech/hermes-draft-cards/6e6ca659ece59b0ce1c28b3b188393491ee5a415/docs/draft-light.png", "https://raw.githubusercontent.com/arsiktech/hermes-draft-cards/6e6ca659ece59b0ce1c28b3b188393491ee5a415/docs/edited-dark.png", "https://raw.githubusercontent.com/arsiktech/hermes-draft-cards/6e6ca659ece59b0ce1c28b3b188393491ee5a415/docs/removed-dark.png", "https://raw.githubusercontent.com/arsiktech/hermes-draft-cards/6e6ca659ece59b0ce1c28b3b188393491ee5a415/docs/sent-light.png"], "known_issues": ["After installing, switch on the Draft Cards desktop half in Capabilities \u2192 Plugins, then start a new chat so the agent sees the draft_card tools."], "capabilities": {"provides_tools": ["draft_card", "draft_card_read", "draft_card_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "drag-to-pin-session", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "4116276225a4df1da1c899998b5f69f6ca937130", "subdir": "public/drag-to-pin-session", "description": "Pin or unpin sessions from their row with supported desktop SDK actions.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/drag-to-pin-session", "version": "1.1.0", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/4116276225a4df1da1c899998b5f69f6ca937130/public/drag-to-pin-session/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "duty-board", "title": "Duty Board", "repo": "https://github.com/xiaoyaner0201/hermes-duty-board", "sha": "405dbae3ff3314fa7b8f1de3f56f27a9ee313563", "description": "Read-only dashboard tab and model-free /duty and hermes duty summaries for waiting conversations, unanswered messages, running turns, undelivered background results and failing cron jobs. Supports all 17 dashboard languages, including right-to-left Arabic. Disclosure \u2014 opens HERMES_HOME/state.db with SQLite mode=ro (sessions, messages, turn leases, async delegations, goals) and reads cron/jobs.json and gateway_state.json; writes only HERMES_HOME/duty-board/dismissed.json for dashboard dismissals. Chat requires in-process Hermes 0.21.7+ and a configured owner; shared-chat summaries default to counts only. No network calls, no model calls, no credentials, no background processes.", "maintainer": "xiaoyaner0201", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/xiaoyaner0201/hermes-duty-board#readme", "version": "0.4.0", "screenshots": ["https://raw.githubusercontent.com/xiaoyaner0201/hermes-duty-board/405dbae3ff3314fa7b8f1de3f56f27a9ee313563/docs/screenshot.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "eatwise", "repo": "https://github.com/harrylabsj/hermes-plugin-eatwise", "sha": "d482a1230703e3714abf187754608fd0704000d5", "description": "Eatwise (\u5916\u5356\u8425\u517b\u6559\u7ec3) \u2014 local-first Chinese dietary coach: deterministic meal nutrition reviews, personal daily energy/nutrient targets, and consented on-device profile and meal history through 9 MCP tools over a bundled open food database (TFND + USDA FNDDS). No network, no accounts, no payments; profile schema rejects name/phone/ID/medical fields by design. Engine pinned to an immutable git commit (cbc08f6) over npx stdio; Portable Agent Plugins v1 package (mcp.json + skills/), needs Node.js 22.5+ on PATH. Disclosure \u2014 the engine's MCP tool descriptions and error messages are Chinese-only while the skills are English-first.", "maintainer": "harrylabsj", "tier": "community", "category": "tools", "docs_url": "https://github.com/harrylabsj/eatwise-mcp", "version": "0.2.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "echarts-in-chat", "repo": "https://github.com/Tommy00748/hermes-plugin-echarts-in-chat", "sha": "6825178e277604594cd0a9b8f2789208e40ba59b", "description": "Render a chart inline in the Hermes Desktop transcript: the model emits ::echarts{labels=... values=...} and the plugin mounts an interactive SVG chart (dataZoom slider, click-to-filter legend, resize-aware, 280-560px height clamp) in the plugin SDK's transcript-directive slot. Disclosure \u2014 no network calls, no shell commands, no stored credentials, no environment variables, no background processes, and nothing read or written outside the message it renders; the chart is drawn locally as inline SVG with no third-party libraries.", "maintainer": "Tommy00748", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Tommy00748/hermes-plugin-echarts-in-chat#readme", "version": "2.1.0", "title": "ECharts in Chat", "screenshots": ["https://raw.githubusercontent.com/Tommy00748/hermes-plugin-echarts-in-chat/6825178e277604594cd0a9b8f2789208e40ba59b/docs/echarts-in-chat-bar-line.png", "https://raw.githubusercontent.com/Tommy00748/hermes-plugin-echarts-in-chat/6825178e277604594cd0a9b8f2789208e40ba59b/docs/echarts-in-chat-trend.png", "https://raw.githubusercontent.com/Tommy00748/hermes-plugin-echarts-in-chat/6825178e277604594cd0a9b8f2789208e40ba59b/docs/echarts-in-chat-donut.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "edit-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "c0a93cb23627ac1856cb29db163e2cbfff77251d", "subdir": "edit-ledger", "description": "Local ledger of the turns in which the agent changed files with write_file or patch: /edit-log shows how many turns changed files, how many files in all, the median per turn, the most changed file type and how long ago the last one was, per model, platform or day, a table of file types (extensions), or the newest turns, for the last 24 hours, any number of hours or days, the latest session or everything recorded; /edit-log recent lists the newest turns (ten, or up to 100 with /edit-log recent 50). A turn another plugin keeps going is counted once. Disclosure \u2014 subscribes to pre_verify as an observer only: always returns nothing, so it never keeps the agent going or changes a turn; writes turn metadata (model, platform, file count, files per extension, a 12-digit hash of the session id; never a path, file name or answer text) to plugin-data/edit-ledger/edits.jsonl, trimmed to 5,000 rows past 2 MB; never opens the changed files; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/edit-ledger", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/c0a93cb23627ac1856cb29db163e2cbfff77251d/docs/edit-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_verify"], "provides_middleware": [], "requires_env": []}}, {"name": "effortless-hermes", "repo": "https://github.com/ivcained/effortless-hermes", "sha": "5444e7b130a74e1c03e826f224da65789abdffb5", "description": "Picks the reasoning effort for every prompt: a fast judge (Jev/TypeSafe, a local OpenAI-compatible model, or any custom API) reads the next message once per turn and rewrites the request's reasoning effort before it ships \u2014 easy questions run cheap, hard jobs get high. Port of effortless for Claude Code. Disclosure \u2014 sends the next message (\u22644000 chars) plus a short recent-conversation excerpt (\u22641600 chars) to the configured judge endpoint (default api.typesafe.ai for Jev; a local or custom OpenAI-compatible API otherwise), solely to pick the effort; the optional model_map setting (off by default) also switches the turn's model to the one you map to the verdict; keeps recent per-turn token counts in its own plugin state; no telemetry; secrets resolved only through Hermes' secret scope; stdlib-only, no pip dependencies.", "maintainer": "ivcained", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/ivcained/effortless-hermes#readme", "image": "https://raw.githubusercontent.com/ivcained/effortless-hermes/5444e7b130a74e1c03e826f224da65789abdffb5/assets/banner.png", "version": "0.4.0", "platforms": [], "title": "effortless-hermes", "capabilities": {"provides_tools": [], "provides_hooks": ["post_api_request", "api_request_error"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "elevenlabs-sound-effects", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "e4e40398c4d46f86dba3bbdcbfa5ef02d2675988", "subdir": "elevenlabs-sound-effects", "title": "ElevenLabs Sound Effects", "description": "ElevenLabs sound effects for Hermes: one tool, elevenlabs_sound_effect, that turns a text description (\"glass shattering on a tile floor\", \"90s hip-hop drum loop, 90 BPM\") into an audio file, 0.5 to 30 seconds, optionally a seamless loop, and sends it to you in chat. Bundles a sound-design skill with a local ffmpeg script (trim, loudness, mono, loop fixing, game variation packs) and, in Hermes Desktop, an inline sound card and a sound library tab. Model, audio format and endpoint are plugin settings. Disclosure: uses your ElevenLabs API key (ELEVENLABS_API_KEY, the same key as Hermes's ElevenLabs voice; a restricted key needs the Sound Effects permission); every call is a paid generation billed to your ElevenLabs account. Only the sound description and its parameters are sent, to api.elevenlabs.io (or the data-residency endpoint you set). Files are written to cache/generated/audio under the Hermes home and never overwritten. One Python dependency (httpx, already part of Hermes).", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.22.0", "version": "1.2.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e4e40398c4d46f86dba3bbdcbfa5ef02d2675988/assets/elevenlabs-sound-effects.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/elevenlabs-sound-effects", "platforms": [], "capabilities": {"provides_tools": ["elevenlabs_sound_effect"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ELEVENLABS_API_KEY"]}}, {"name": "empiriolabs-media", "title": "EmpirioLabs AI Media", "repo": "https://github.com/EmpirioLabs-AI/hermes-empiriolabs", "sha": "20f049d5913ec850e98bef3d289f6cb43645869e", "subdir": "media", "description": "EmpirioLabs AI backends for Hermes' image_generate, video_generate and text_to_speech tools (backend `empiriolabs` for image_gen.provider, video_gen.provider and tts.provider): image generation and editing, text-to-video and image-to-video, and text-to-speech, with models and voices from the live EmpirioLabs AI catalog. Submitted by EmpirioLabs AI. Disclosure: registers three backends and nothing else (no tools, hooks, commands or threads); when one is selected and its tool is called, the prompt, source images or text to speak go to https://api.empiriolabs.ai/v1 (or EMPIRIOLABS_BASE_URL) with EMPIRIOLABS_API_KEY, read through Hermes' secret scope, and each call is billed to that EmpirioLabs AI account with no Hermes approval prompt; it reads the model catalog (GET /v1/models), polls GET /v1/jobs/{id} while a generation runs (videos up to 15 minutes by default), downloads the generated files from the returned URLs into Hermes' cache (the key is never sent to them), and reads a local image file only when the agent asks to edit one.", "maintainer": "EmpirioLabs-AI", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "version": "1.0.0", "docs_url": "https://github.com/EmpirioLabs-AI/hermes-empiriolabs/blob/20f049d5913ec850e98bef3d289f6cb43645869e/media/README.md", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["EMPIRIOLABS_API_KEY"]}}, {"name": "empiriolabs", "title": "EmpirioLabs AI", "repo": "https://github.com/EmpirioLabs-AI/hermes-empiriolabs", "sha": "20f049d5913ec850e98bef3d289f6cb43645869e", "subdir": "provider", "description": "EmpirioLabs AI as a Hermes model provider (provider id `empiriolabs`): chat models with tool calling from the live EmpirioLabs AI catalog, each with its context window, image input and reasoning support declared to Hermes, a low-cost auxiliary model picked from the same catalog, and `reasoning_effort` sent only when you choose a level and the model accepts it. Submitted by EmpirioLabs AI. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); chat requests (prompts, tool definitions and tool results) go through Hermes' own client to https://api.empiriolabs.ai/v1 (or EMPIRIOLABS_BASE_URL) with EMPIRIOLABS_API_KEY, which Hermes reads, and are billed to that EmpirioLabs AI account; the plugin itself only reads the model catalog (GET /v1/models, kept in memory for an hour), writes no files and starts no processes.", "maintainer": "EmpirioLabs-AI", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "version": "1.0.0", "docs_url": "https://github.com/EmpirioLabs-AI/hermes-empiriolabs/blob/20f049d5913ec850e98bef3d289f6cb43645869e/provider/README.md", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["EMPIRIOLABS_API_KEY"]}}, {"name": "enchanted-composer", "repo": "https://github.com/noxius-studium/enchanted-composer", "sha": "b91e684c78d8a43a5346339a5091a1109424a28c", "title": "Enchanted Composer", "description": "Draft enhancement, reusable prompt libraries, undo/redo, and owner-bound full-duplex voice for Hermes Desktop. Disclosure \u2014 Derived from hermes-live-voice by Synero (itself derived from hermes-talk) and prompt-enhance by apoapostolov (both MIT; notices preserved). Starting voice captures microphone audio. The Codex-subscription lane spawns the official codex app-server CLI under its own login with a minimal environment; through it the captured profile's SOUL.md (up to 4,000 chars), the list of installed skills and enabled tools, and Hermes task results go to OpenAI. The API lane runs only when COMPOSER_REALTIME_OFFER_URL is set: it posts the SDP offer to that https URL with COMPOSER_OPENAI_API_KEY, or the profile's OPENAI_API_KEY, as a Bearer token (redirects refused). A user-configured wss:// bridge receives microphone audio, chat/profile identifiers and task results. Spoken requests the voice model delegates run as Hermes agent turns with tools in the chat where voice started; runs that need approval are stopped, not approved. Settings and usage totals are stored under HERMES_HOME/plugin-data/enchanted-composer/. No telemetry, no self-updater, no Codex OAuth-file reads.", "maintainer": "Deadtrix21", "tier": "community", "category": "voice", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/noxius-studium/enchanted-composer/blob/b91e684c78d8a43a5346339a5091a1109424a28c/README.md", "version": "0.2.7", "image": "https://raw.githubusercontent.com/noxius-studium/enchanted-composer/b91e684c78d8a43a5346339a5091a1109424a28c/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/noxius-studium/enchanted-composer/b91e684c78d8a43a5346339a5091a1109424a28c/docs/media/enhancement-desktop.png", "https://raw.githubusercontent.com/noxius-studium/enchanted-composer/b91e684c78d8a43a5346339a5091a1109424a28c/docs/media/voice-desktop.png", "https://raw.githubusercontent.com/noxius-studium/enchanted-composer/b91e684c78d8a43a5346339a5091a1109424a28c/docs/media/prompts-mobile.png"], "readme": true, "platforms": [], "known_issues": ["Codex subscription authentication is managed with `codex login` outside Hermes; the plugin does not read or write Codex OAuth files.", "Full two-sided persistent voice history and a phone voice client are not included in version 0.2.7."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "entropicmem", "repo": "https://github.com/Ufonik88/EntropicMem", "sha": "7e02412366408234629e759a575edc31eb138721", "subdir": "plugins/entropicmem", "description": "Durable local memory for Hermes agents: SQLite FTS5 facts with cited, explainable recall; a Markdown vault with knowledge-graph export and an interactive visual graph; and turn-prefetch context injection with reason tokens. Write policy auto-redacts high-confidence secrets at write time (other PII types are warn-only findings) and stored-content injection screening flags and warns on recall and prefetch payloads (flag-and-warn, fail-open by design, not a blocking filter). Includes a 34-command CLI, destructive-op gates with automatic backups, and an append-only audit log. Disclosure \u2014 all memory data (vault markdown, memory.db, index.db, backups) stays local under HERMES_HOME/entropicmem/; a shared publish DB defaults to HERMES_HOME/entropicmem-shared/. The CLI init command appends ENTROPICMEM_* settings to HERMES_HOME/.env (append-only). Vector embeddings are off by default; only with embeddings_enabled: true (provider) or ENTROPICMEM_EMBEDDINGS=1 / query --semantic (CLI) and the optional sentence-transformers extra installed does first use download all-MiniLM-L6-v2 weights from huggingface.co; otherwise the provider has no network egress. The CLI ingest command fetches a user-supplied URL; CLI graph export writes to ./export in the cwd by default and its HTML loads D3/marked from d3js.org and cdn.jsdelivr.net when opened; CLI graph serve starts a loopback HTTP server. entropicmem_patch_core edits the plugin's own Core-memory markdown (Persona/User_Profile), not Hermes core, and is off by default.", "maintainer": "Ufonik88", "tier": "community", "category": "memory", "requires_hermes": ">=0.21", "docs_url": "https://github.com/Ufonik88/EntropicMem/blob/7e02412366408234629e759a575edc31eb138721/docs/SELF_INSTALL.md", "version": "2.8.1", "image": "https://raw.githubusercontent.com/Ufonik88/EntropicMem/7e02412366408234629e759a575edc31eb138721/docs/assets/banner.png", "screenshots": ["https://raw.githubusercontent.com/Ufonik88/EntropicMem/7e02412366408234629e759a575edc31eb138721/docs/assets/graph-galaxy.png", "https://raw.githubusercontent.com/Ufonik88/EntropicMem/7e02412366408234629e759a575edc31eb138721/docs/assets/note-modal.png", "https://raw.githubusercontent.com/Ufonik88/EntropicMem/7e02412366408234629e759a575edc31eb138721/docs/assets/cli-recall.png", "https://raw.githubusercontent.com/Ufonik88/EntropicMem/7e02412366408234629e759a575edc31eb138721/docs/assets/timeline.png", "https://raw.githubusercontent.com/Ufonik88/EntropicMem/7e02412366408234629e759a575edc31eb138721/docs/assets/prefetch-context.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": ["entropicmem_remember", "entropicmem_recall", "entropicmem_query", "entropicmem_patch_core", "entropicmem_stats", "entropicmem_get", "entropicmem_consolidate"], "provides_hooks": ["on_memory_write", "on_session_switch", "on_session_end", "on_turn_start", "on_pre_compress"], "provides_middleware": [], "requires_env": []}}, {"name": "epistemic-harness", "repo": "https://github.com/quangphucqp/epistemic-harness", "sha": "eb45ca676df53cce0629a3cc5dcf8a7bdab1c806", "subdir": "", "description": "Record a provisional claim or uncertainty before an evidence-gathering step, then link the actual observation to it.", "maintainer": "quangphucqp", "tier": "community", "category": "general", "requires_hermes": ">=0.21,<1.0", "platforms": ["linux", "macos"], "docs_url": "https://github.com/quangphucqp/epistemic-harness#readme", "capabilities": {"provides_tools": ["epistemic_model", "epistemic_probe"], "provides_hooks": ["pre_llm_call", "post_tool_call", "transform_tool_result", "subagent_stop", "on_session_reset", "on_session_finalize"], "provides_middleware": ["tool_execution"], "requires_env": []}}, {"name": "error-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "dd646070c662ebf1978e5623bf30d2d1f55f7bef", "subdir": "error-ledger", "description": "Local ledger of failed provider calls (rate limits, overloads, timeouts, context overflows): /errors shows how many attempts failed per model, provider or cause, how many Hermes could retry, and the most common HTTP status, for the last 24 hours, any number of hours or days, the latest session or everything recorded; /errors days puts one day on each line, newest first; /errors recent lists the newest failures (ten, or up to 100 with /errors recent 50) and how long ago each happened. Disclosure \u2014 writes failed-attempt metadata (ids, provider, model, HTTP status, Hermes's failure class, exception class name, timings; no error message, request or prompt text) to plugin-data/error-ledger/errors.jsonl, trimmed to 5,000 rows past 2 MB; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/error-ledger", "version": "1.3.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/dd646070c662ebf1978e5623bf30d2d1f55f7bef/docs/error-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["api_request_error"], "provides_middleware": [], "requires_env": []}}, {"name": "evalroute", "repo": "https://github.com/keppy/hermes-plugin-evalroute", "sha": "836273c09d28cd5fc6c009ed955837e2014bd1f7", "description": "Route a task to the right (model, reasoning effort) arm before you start. Classifies the task into a lane, prints a provenance-carrying route card, and installs per-model reasoning-effort defaults. Strong rules run locally; weak-signal classification calls the host LLM and consumes tokens. The separate harness and shim can make paid provider calls when explicitly run; no plugin-owned credentials. Disclosure \u2014 weak-signal task classification sends the task text to your active Hermes model via the host LLM facade (token cost). The model-callable tool, /route, /rate and observed /model and /reasoning commands append task text and command args to a local ledger at <HERMES_HOME>/evalroute/labels.jsonl. \"hermes evalroute install-routes\" rewrites agent.reasoning_overrides in config.yaml when you run it. The bundled harness and Hermes shim are never run by the plugin. When run by hand they make paid provider calls, execute model-generated code on the host via shell checkers, and run hermes -z with approvals bypassed. Disclosure \u2014 \"hermes evalroute sync\" (run by hand) downloads the route table from the Hugging Face dataset keppy/evalroute-flywheel into HERMES_HOME and route cards then show that dataset's text; \"hermes evalroute dispatch\" (run by hand) spawns a single-query hermes chat on the routed model (Nous provider by default) \u2014 or, with --runner claude-code, a `claude -p` (Claude Code) process under the user's own Claude account, whose per-run cost is recorded in the local sidecar \u2014 with the brief as its query, inheriting the current environment except HERMES_YOLO_MODE (the worker never inherits --yolo; its approvals follow approvals.single_query_mode, default deny), and writes its report and a .dispatch.json sidecar beside the brief. Disclosure \u2014 \"hermes evalroute contribute\" (run by hand only) refuses to run unless evalroute.contribute: true is set in config.yaml, and then uploads redacted outcome rows only \u2014 lane, routed arm, confirmed arm, verdict, method, facet counts, ISO week and an HMAC-SHA256 task hash; never task text, notes, paths or the salt \u2014 to the user's own path (contributed/<hf-username>/) in the Hugging Face dataset keppy/evalroute-flywheel using the user's existing huggingface_hub login; \"--dry-run\" prints the exact rows and sends nothing; the per-install salt stays local in <HERMES_HOME>/evalroute/contribute.salt. Since evalroute 0.9.1 (schema 2) the same upload also carries lane-correction rows as lane pairs (from_lane, to_lane, method, week) with no task text, plus the max_turns value and harness name the arm ran under. Disclosure \u2014 \"hermes evalroute install-encoder <dir|owner/name>\" (run by hand only) downloads a small text-classification model (the default id keppy/evalroute-lane-encoder is a 146 MB ModernBERT fine-tune on the Hugging Face Hub) into <HERMES_HOME>/evalroute/encoder/ and from then on \"hermes evalroute route\" runs it locally, offline, to classify the task when the keyword rules are weak, instead of the LLM call; it needs torch and transformers in the plugin environment (pip extra evalroute[encoder]), which the plugin does not install; \"install-encoder --remove\" deletes it. \"hermes evalroute export-cases\" (run by hand only) writes your --lane-pinned route rows, task text included, to a local file you name, for training your own encoder; stdout carries counts only and nothing is uploaded. As of 0.6.2 the plugin is a thin adapter: all behaviour lives in the PyPI package evalroute (>=0.9.2,<0.10), declared as a Python dependency that Hermes installs on your confirmation.", "maintainer": "keppy", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "version": "0.6.4", "docs_url": "https://github.com/keppy/hermes-plugin-evalroute#readme", "capabilities": {"provides_tools": ["evalroute_route"], "provides_hooks": ["pre_llm_call", "pre_command", "post_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "event-read", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-event-read", "sha": "d469ceb434d59dc91bb14ff9ae1e1191e135d025", "description": "Read one CalDAV calendar collection you run, with list_events and read_event. Disclosure \u2014 Sends CALDAV_USER and CALDAV_PASSWORD as Basic auth to your CALDAV_URL, does not follow redirects, and starts no local program. Over plain http that password travels unencrypted. The tools are on for every surface, including gateways, and the plugin has no user list of its own: anyone you allow on your Hermes gateway reads the calendar with your password. Turn a surface off with hermes tools. A watch is a cron job you create yourself with hermes cron create. Each run is at least one model turn, there is no daily cap, and the job stays until you run hermes cron remove. Under plugins.isolation: host the watch cannot run and posts a notice saying so on every run. When the watch can run, it reports a problem on the first run, when the cause changes and again after 23 hours, or on every run when its data directory cannot be written. Each request gives up after 20 seconds without data, and a whole call has no time limit. The watch relies on private parts of Hermes, so an update can stop it. State lives in plugin-data/event-read. Not tested against a vendor-hosted calendar.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-event-read#readme", "version": "0.1.0", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": ["list_events", "read_event"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CALDAV_URL", "CALDAV_USER", "CALDAV_PASSWORD"]}}, {"name": "excel_line", "repo": "https://github.com/kalice-vi/hermes-excel-line", "sha": "a48cc5a9d1763e7bbc21b28fb12ed1289870150c", "description": "Excel-backed hierarchical long-term memory tree (10-row cap per workbook, dynamic branching, leaf pointers). Classifier defaults to the host model; third-party keyless rotation is opt-in.", "maintainer": "kalice-vi", "tier": "community", "category": "memory", "docs_url": "https://github.com/kalice-vi/hermes-excel-line", "platforms": [], "capabilities": {"provides_tools": ["excel_line"], "provides_hooks": ["on_session_end", "on_memory_write"], "provides_middleware": [], "requires_env": []}}, {"name": "field-academy", "title": "Field Academy", "repo": "https://github.com/Dgardenhire/hermes-field-academy", "sha": "9d4b342535fdcb9948b0b2334b78fcbd1fd14675", "description": "Learn Hermes by doing real work. Four paths (Messenger, Traveler, Crossroads, Boundary Keeper) climb Beginner, Intermediate and Advanced to a capstone on a problem of your own, and a fifth, Guide, covers setting Hermes up for a client: practice labs built from made-up data, a proposal, one real service run by a scheduled job for several days, a recovery drill, and a review signed by a reviewer you choose. Every mission ends with a check on something you made; your own Hermes scores your written answers in a new chat; passed missions come back for short spaced reviews; and at the end of a path you can create a Field Record, your own self-issued learning record. Field Academy is an independent community plugin. It is not made, issued or endorsed by Nous Research. Disclosure \u2014 no network calls (a source link opens in your browser only when you click it); no credentials, telemetry, shell commands, background processes or self-updates; registers six tools, two hooks, the /academy command and one skill: pre_llm_call may add one sentence offering a practice to the user message, only in interactive desktop, TUI and CLI sessions, and post_tool_call records which tool was used; pressing Try it or a scoring button opens a new chat and sends the practice or scoring prompt there (on an older Hermes it goes to the clipboard instead); the Desktop page calls gateway list methods only (session.list, cron.manage list, skills.manage list, tools.list, mcp.catalog, commands.catalog, setup.runtime_check); stores progress, pasted documents, practice labs, review packets and saved Field Records in $HERMES_HOME/plugin-data/field-academy/; reads a file you name (UTF-8 text, max 5 MiB) and hashes a recording you name without copying it; Guide labs write and check made-up .env and auth.json files inside its own labs folder (refusing to build in a real Hermes home) and never read Hermes's real ones; on the Guide path reads Hermes's run-history database read-only, jobs.json and up to 25 log files (2 MiB each), keeping only timestamps for the job you name, and reads install-stamp.json for the Hermes version; no private Hermes imports.", "maintainer": "Dgardenhire", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.0", "docs_url": "https://linchpin.studio/school-of-hermes/manual/", "version": "0.8.5", "image": "https://raw.githubusercontent.com/Dgardenhire/hermes-field-academy/9d4b342535fdcb9948b0b2334b78fcbd1fd14675/docs/card.png", "screenshots": ["https://raw.githubusercontent.com/Dgardenhire/hermes-field-academy/9d4b342535fdcb9948b0b2334b78fcbd1fd14675/docs/shots/home.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-field-academy/9d4b342535fdcb9948b0b2334b78fcbd1fd14675/docs/shots/mission.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-field-academy/9d4b342535fdcb9948b0b2334b78fcbd1fd14675/docs/shots/miss.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-field-academy/9d4b342535fdcb9948b0b2334b78fcbd1fd14675/docs/shots/certificate.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-field-academy/9d4b342535fdcb9948b0b2334b78fcbd1fd14675/docs/shots/deployer.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-field-academy/9d4b342535fdcb9948b0b2334b78fcbd1fd14675/docs/shots/home-light.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": ["field_academy_snapshot", "field_academy_mission", "field_academy_grade_explanation", "field_academy_grade_review", "field_academy_grade_deployer", "field_academy_record_evidence"], "provides_hooks": ["post_tool_call", "pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "file-tray", "repo": "https://github.com/aydnOktay/hermes-file-tray", "sha": "275f040af145b6b3f9660487b7d35821d33d5aca", "description": "Session file tray \u2014 paths the Hermes agent touched via read_file, write_file, or patch. Desktop pane and /files. No API keys.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-file-tray", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["file_tray_list", "file_tray_clear"], "provides_hooks": ["post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "filebox", "repo": "https://github.com/AndreasHiltner/hermes-filebox", "sha": "718c595d2737a5eecc9ab14c45cd6d8fa7d372a7", "version": "0.3.0", "description": "Dual-panel commander file browser for Hermes Desktop \u2014 whitelist-guarded file CRUD, copy/move/symlink, media preview, multi-select, rename, and trash. No network I/O, no model tokens.", "maintainer": "Andreas Hiltner", "tier": "community", "category": "desktop", "requires_hermes": ">=0.19", "docs_url": "https://github.com/AndreasHiltner/hermes-filebox#readme", "image": "https://raw.githubusercontent.com/AndreasHiltner/hermes-filebox/718c595d2737a5eecc9ab14c45cd6d8fa7d372a7/docs/banner.png", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "financial-datasets", "repo": "https://github.com/financial-datasets/hermes-plugin", "sha": "6745cb6261f86895364579d897be2b6067f117f1", "description": "Stock market data from Financial Datasets - financial statements, prices, SEC filings, insider and institutional ownership, KPIs, news, macro data, and a stock screener.", "maintainer": "financial-datasets", "tier": "community", "category": "tools", "docs_url": "https://github.com/financial-datasets/hermes-plugin#readme", "version": "1.0.0", "capabilities": {"provides_tools": ["fd_get_beneficial_owners", "fd_get_beneficial_ownership", "fd_get_company_facts", "fd_get_earnings", "fd_get_filing_items", "fd_list_filing_item_types", "fd_get_filings", "fd_get_financial_metrics", "fd_get_financial_metrics_snapshot", "fd_get_balance_sheet", "fd_get_income_statement", "fd_get_cash_flow_statement", "fd_get_index_fund", "fd_get_insider_ownership", "fd_get_insider_trades", "fd_get_institutional_investors", "fd_get_institutional_holdings", "fd_get_interest_rates", "fd_get_kpi_guidance", "fd_get_kpi_metrics", "fd_get_kpi_non_gaap", "fd_get_macro_data", "fd_get_news", "fd_get_segmented_financials", "fd_get_stock_price", "fd_get_stock_prices", "fd_screen_stocks", "fd_list_stock_screener_filters"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["FINANCIAL_DATASETS_API_KEY"]}}, {"name": "fish-audio", "title": "Fish Audio", "repo": "https://github.com/100yenadmin/fish-audio-hermes", "sha": "f7ae982e3bd44c8ed3c2489c887850fbb3c2c702", "description": "Lifelike voices for your agent: Fish Audio's expressive text-to-speech in 80+ languages, plus transcription, voice cloning and a voice library. The official Fish Audio plugin: Fish's Drama 3 model with word-level direction, speech-to-text, Fish Audio's community voice library, voice cloning and voice design, with a Voices page in Hermes Desktop. Fish Audio becomes a Hermes speech and transcription provider for voice replies, read-aloud, voice notes and Desktop dictation, with sentence-by-sentence streaming in CLI voice mode and Desktop, and live dictation captions on Hermes 0.21.6+ (stt.streaming: true). Adds the fish_speak, fish_voices and fish_transcribe tools, /fish and hermes fish commands, and four skills. Disclosure \u2014 sends your Fish API key and the text, audio (with file names) and voice titles, tags, descriptions, cover images and design instructions you ask it to process to api.fish.audio, or to the base_url you configure, and reads your Fish wallet for balances and model choice; with live dictation on, microphone audio streams to api.fish.audio's realtime speech-to-text endpoint while you speak, billed per committed phrase rounded up to a second; synthesis, transcription, cloning and voice design are paid requests billed to your Fish account, except the free s2.1-pro-free model (free through 30 November 2026), whose requests Fish may use to improve its models. The key comes from the profile's secret scope (Hermes stores it in the profile .env; a single-profile install may also read FISH_API_KEY from the environment). Generated audio and subtitles are written to Hermes's audio cache; clone samples and recordings it uploads must be regular audio files, and Hermes config, secret and credential paths are refused. Cloning and deleting voices from chat or the model tools go through Hermes's approval gate and follow your approval settings. The Desktop Voices page and a Fish Audio settings page add gateway routes under /api/plugins/fish-audio/, behind the Hermes dashboard's existing authentication. On the Voices page, previews, clones and voice designs are billed; cloning a voice or saving a designed one creates a voice in your Fish account; cloning and deleting are confirmed on the page (a speaker-consent box, a typed voice name) instead of through Hermes's approval gate; and Use sets the profile's Fish voice, and its speech provider when none is set. The settings page and /fish alias can set or reset the profile's Fish model and voice and save up to 50 voice names in the profile's config. Preview and design audio files are deleted from the gateway once returned; a design's audio is held in gateway memory so you can save it, until it is saved, a later design or save finds it over an hour old, or the gateway stops; clone uploads are deleted after the clone, or by the next upload once idle for 15 minutes. With a key set, Desktop reads your Fish wallet when an agent is selected and about every five minutes, for the status-bar credit; favourites stay in Desktop's plugin storage on that computer, and fetched previews stay in the window's memory until it closes. Includes a report-a-problem skill: the agent drafts a bug report and files it to this plugin's repository as a public GitHub issue or comment with your gh login only after you approve the exact text; reports leave out keys, credit amounts and your own voice ids, and security problems go to the repository's private advisory form instead. No telemetry.", "maintainer": "100yenadmin", "tier": "community", "category": "voice", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/100yenadmin/fish-audio-hermes#readme", "version": "1.8.0", "image": "https://raw.githubusercontent.com/100yenadmin/fish-audio-hermes/f7ae982e3bd44c8ed3c2489c887850fbb3c2c702/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/100yenadmin/fish-audio-hermes/f7ae982e3bd44c8ed3c2489c887850fbb3c2c702/docs/media/screenshot-desktop-library.png", "https://raw.githubusercontent.com/100yenadmin/fish-audio-hermes/f7ae982e3bd44c8ed3c2489c887850fbb3c2c702/docs/media/screenshot-desktop-create.png", "https://raw.githubusercontent.com/100yenadmin/fish-audio-hermes/f7ae982e3bd44c8ed3c2489c887850fbb3c2c702/docs/media/screenshot-desktop-account.png", "https://raw.githubusercontent.com/100yenadmin/fish-audio-hermes/f7ae982e3bd44c8ed3c2489c887850fbb3c2c702/docs/media/screenshot-setup.png"], "readme": true, "platforms": ["linux", "macos"], "known_issues": ["Hermes's text normaliser alters <|speaker:N|> markup and Drama 3 closing tags such as </whisper> on the plain text_to_speech path; use fish_speak for multi-speaker speech and Drama 3 word tags (NousResearch/hermes-agent#133131).", "In the dark theme an empty API key field in Settings is very hard to see; a fix is proposed (NousResearch/hermes-agent#138994).", "Under plugins.isolation: host the hermes fish terminal command is unavailable and voice replies use whole-file speech instead of streaming; /fish, the tools and both providers still work."], "capabilities": {"provides_tools": ["fish_speak", "fish_voices", "fish_transcribe"], "provides_hooks": ["transform_llm_output", "pre_tool_call"], "provides_middleware": [], "requires_env": ["FISH_API_KEY"]}}, {"name": "flashdata-plugin", "title": "FlashData", "repo": "https://github.com/rocosen/flashdata-mcp", "sha": "23e0d9849b2546767741fabfc454fb0089f1cb58", "subdir": "plugins/hermes", "description": "Web search with Google Search; Google News, Google Images, Google Shopping, Google Video Search and Google Places for research. Use YouTube Search or YouTube Extended Search; retrieve YouTube metadata, YouTube transcripts, YouTube captions and YouTube channel data; get YouTube autocomplete; inspect YouTube trainability as license-label metadata, not training permission. YouTube downloads deliver media to your own storage. One hosted MCP connection and 15 task Skills; bring your own API key and paid FlashData Credits. Disclosure \u2014 Connects to FlashData's hosted MCP service (data.flashdata.dev) with your own FLASHDATA_API_KEY; every search, YouTube read or download spends your paid FlashData Credits, and Hermes asks before running only the tools the server does not mark read-only, so most paid searches run without a prompt. The YouTube download tool sends the storage bucket and storage access credentials you supply to FlashData, and those values stay visible in the chat history.", "maintainer": "rocosen", "tier": "community", "category": "web", "requires_hermes": ">=0.22.5", "docs_url": "https://github.com/rocosen/flashdata-mcp/blob/23e0d9849b2546767741fabfc454fb0089f1cb58/plugins/hermes/README.md", "version": "0.1.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["FLASHDATA_API_KEY"]}}, {"name": "fleet-policy", "repo": "https://github.com/Julientalbot/hermes-fleet-policy", "sha": "7d36874a5a625fc2a0c24ee280e34872e5259800", "subdir": "fleet_policy", "description": "For administrators who pin settings through the managed scope: records what each agent role really sends to the provider (model, reasoning effort, service tier, plus the tier the provider says it served) next to the managed-scope state and the effective config (`hermes fleet-policy status --json`); measures cron cost per job \u2014 runs, empty runs, $/day, gate present (`crons --cost`); and `watch`, a generic wake gate for cron scripts that replays one read tool on an MCP server and wakes the agent only when new item ids appear (stock `wakeAgent` gate, no LLM call otherwise). Ships two skills (managed-scope admin, recurring tasks). Disclosure \u2014 records only model, reasoning effort and service tier per role (no message content, headers or keys) via the pre_api_request and pre_auxiliary_call hooks and a pass-through llm_execution middleware, stored in $HERMES_HOME/fleet-policy/observed.json; crons --cost opens cron/executions.db and state.db read-only and checks each cron run's final reply locally for silence; watch is an operator CLI command that calls one MCP tool at the config's server_url (or the admin-pinned watch_server_url) with config headers in which ${VAR} env values are expanded, follows redirects, and writes seen ids to a state file at the config-chosen path; the recurring-tasks skill has the agent write watch configs under $HERMES_HOME/watches, a script under $HERMES_HOME/scripts and a cron job; no other network access, no telemetry.", "maintainer": "Julientalbot", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Julientalbot/hermes-fleet-policy/blob/7d36874a5a625fc2a0c24ee280e34872e5259800/README.md", "version": "0.2.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_api_request", "pre_auxiliary_call"], "provides_middleware": ["llm_execution"], "requires_env": []}}, {"name": "fluxer-platform", "repo": "https://github.com/elkimek/hermes-fluxer-plugin", "sha": "6d2ef9767d0a0811a3ae26a76290b9b1e4636d4c", "description": "Fluxer gateway adapter for Hermes Agent. Native Fluxer integration using Fluxer's bot REST API for outbound messages, Gateway WebSocket events for inbound dispatches, message edits, agent-requested reactions, pins, reply references, media delivery, and channel-directory enumeration. Component button", "maintainer": "elkimek", "tier": "community", "category": "platform", "docs_url": "https://github.com/elkimek/hermes-fluxer-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "fmsg-platform", "repo": "https://github.com/markmnl/hermes-fmsg", "sha": "562f45a48a6b10504c8d6ff5c677f1ec990e6b7b", "description": "fmsg platform adapter for Hermes Agent. Real-time inbound over the fmsg-webapi WebSocket (/fmsg/ws), outbound via its JSON REST routes. Authenticates with an fmsg API key (fmsgk_...) exchanged for a short-lived JWT \u2014 run the agent as a derived sub-account such as @alice_hermes@example.com. Only http", "maintainer": "markmnl", "tier": "community", "category": "platform", "docs_url": "https://github.com/markmnl/hermes-fmsg#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "foresee", "title": "Foresee", "repo": "https://github.com/Foresee-Tech/foresee", "sha": "18361bd74ffce667fbceb2a60a57d3eabff11854", "subdir": "plugins/foresee", "description": "Let AI assistants shop for home and auto insurance: compare instant quotes across every carrier. Connects to the hosted Foresee MCP server (Streamable HTTP at agents.go-foresee.com), with three workflow skills bundled. Portable Agent Plugins v1 package (mcp.json + skills/). Disclosure \u2014 portable Agent Plugins v1 package (hosted MCP server plus three skills), no Python and nothing runs locally; the vendor is Foresee Insurance Services, LLC (go-foresee.com). Every quote request sends the profile the user gives in chat (ZIP, age or date of birth, vehicles, drivers, driving record, home details) to agents.go-foresee.com with no account or API key. The live_carrier_quotes tool additionally sends the user's identity (name, date of birth, street address, email, optionally phone and driver's licence number) and, after the user's in-chat consent recorded verbatim, Foresee's agents submit those details to the selected insurance carriers, who may run a soft credit-based insurance score pull and contact the user. Foresee does not take payment or bind policies.", "maintainer": "Foresee-Tech", "tier": "community", "category": "tools", "version": "0.4.1", "docs_url": "https://go-foresee.com/docs", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "freight-reconciliation", "repo": "https://github.com/harrylabsj/hermes-plugin-freight-reconciliation", "sha": "160ed80ddf6333e48f176f299322aaf9ed2414b0", "description": "Payer-side freight reconciliation: import carrier bills and trip ledgers into a deterministic local core (SQLite, WAL, no cloud), re-calculate against contracted rates and produce evidence-linked difference lists for human review \u2014 14 MCP tools over uvx stdio (engine pinned to the immutable commit e8cd259c, release v0.4.1), with 3 bilingual workflow skills bundled. Portable Agent Plugins v1 package (mcp.json + skills/); needs uv on PATH. Never approves payments, sends messages or writes back to ERP/TMS; final confirmations route through a local admin page the model cannot reach. Disclosure \u2014 the optional freight-admin page listens on 127.0.0.1 and is where a human confirms mappings, rules, matches and exports; nothing leaves the machine.", "maintainer": "harrylabsj", "tier": "community", "category": "tools", "docs_url": "https://github.com/harrylabsj/hermes-plugin-freight-reconciliation", "version": "0.4.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "freshdesk", "repo": "https://github.com/aedelgod/hermes-plugin-freshdesk", "sha": "86d2f5312c1a1184516bef649ecb16f3fccc9011", "description": "Generic Freshdesk API v2 tools for Hermes Agent. Unaffiliated community connector, not a Freshworks product. Disclosure \u2014 calls the account's native Freshdesk HTTPS origin with profile-scoped secrets FRESHDESK_DOMAIN and FRESHDESK_API_KEY; downloads an attachment into the Hermes cache only from that ticket's own attachment hosts; the five write tools (private note, create ticket, public reply that Freshdesk emails to the ticket's requester, time entry, status/priority update) escalate to Hermes human approval and fail closed when no person is present. No third-party dependencies, shell commands, telemetry, or self-updater.", "maintainer": "GFORGOV", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "version": "0.2.0", "readme": true, "docs_url": "https://github.com/aedelgod/hermes-plugin-freshdesk#readme", "platforms": [], "capabilities": {"provides_tools": ["freshdesk_list_tickets", "freshdesk_get_ticket", "freshdesk_search_tickets", "freshdesk_list_conversations", "freshdesk_get_contact", "freshdesk_download_attachment", "freshdesk_add_private_note", "freshdesk_create_ticket", "freshdesk_reply_to_ticket", "freshdesk_add_time_entry", "freshdesk_update_ticket"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": ["FRESHDESK_DOMAIN", "FRESHDESK_API_KEY"]}}, {"name": "frihet", "repo": "https://github.com/Frihet-io/hermes-frihet", "sha": "72493236b16c5e1e2b6a5ada3674781a6da180a1", "description": "Official Hermes Agent integration for Frihet \u2014 discoverability, setup, diagnostics, and operating guidance for the Frihet MCP. Zero duplicated tools; the canonical Frihet MCP surface stays in @frihet/mcp-server and the remote endpoint https://mcp.frihet.io/mcp. Disclosure \u2014 /frihet setup and /frihet doctor send an unauthenticated MCP initialize to mcp.frihet.io (or FRIHET_MCP_URL); /frihet doctor also makes one read-only list_invoices call through Hermes's MCP client once you grant plugins.entries.frihet.mcp_allowlist; reads ~/.hermes/config.yaml only to check that an mcp_servers.frihet block exists; the pre_tool_call hook prompts before Frihet MCP calls it classifies as irreversible or unknown, but reads and draft-first creates pass without a prompt unless the server sets trust: untrusted.", "maintainer": "Frihet-io", "tier": "community", "category": "tools", "docs_url": "https://github.com/Frihet-io/hermes-frihet#readme", "requires_hermes": ">=0.21.5", "version": "0.2.1", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "fusion", "repo": "https://github.com/BoredSexyJordan/hermes-fusion", "sha": "edab6a6d17838d4d9a1525a2a7d3500c62694e17", "description": "Multi-model fusion router for Hermes: detects the model fleet your harnesses (Hermes, Codex, Claude, Grok) actually have installed and builds a Frontier -> Middle Manager -> Frontier routing structure with pinned models and provenance from execution records. `hermes fusion teams|validate|plan|run|index|report|status`.", "maintainer": "Jordan Rosenberg", "tier": "community", "docs_url": "https://github.com/BoredSexyJordan/hermes-fusion", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "fxmacrodata", "repo": "https://github.com/fxmacrodata/hermes-fxmacrodata", "sha": "5b52feced342f945bb41b3fdb60c668f1f21d374", "description": "FXMacroData macro and FX research: official-source economic releases, indicator history, release calendars, policy rates, yield curves, FX, commodities and COT positioning, with source citations. Native tools for 23 REST operations and 49 hosted MCP tools, plus a /fxmacrodata USD brief command. Disclosure \u2014 tool calls send their arguments over HTTPS to api.fxmacrodata.com and mcp.fxmacrodata.com only, with FXMACRODATA_API_KEY in a request header when it is set. The key is optional: without it the data catalogue, the USD release calendar and recent USD releases (15-minute delay) work, and other data answers with a subscribe message. No files written, no shell commands, no background processes, no telemetry. It also adds a short research-guidance section to the system prompt and 72 tools in the fxmacrodata toolset; MCP tool behaviour is served remotely and not covered by the pinned sha.", "maintainer": "fxmacrodata", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/fxmacrodata/hermes-fxmacrodata#readme", "version": "0.2.0", "platforms": [], "capabilities": {"provides_tools": ["fxmd_health", "fxmd_ping", "fxmd_forex", "fxmd_intraday_reference_rates", "fxmd_fx_sources", "fxmd_fx_source_universe", "fxmd_data_catalogue", "fxmd_release_calendar", "fxmd_market_sessions", "fxmd_rate_differentials", "fxmd_curves", "fxmd_financial_prices", "fxmd_press_releases", "fxmd_risk_sentiment", "fxmd_factors", "fxmd_event_predictions", "fxmd_latest_announcements", "fxmd_indicator_history", "fxmd_cot", "fxmd_latest_commodities", "fxmd_commodities", "fxmd_announcement_changes", "fxmd_stream_events", "fxmd_mcp_ping", "fxmd_mcp_mcp_capabilities", "fxmd_mcp_mcp_auth_guide", "fxmd_mcp_subscribe_for_mcp_access", "fxmd_mcp_data_catalogue", "fxmd_mcp_risk_sentiment", "fxmd_mcp_macro_news", "fxmd_mcp_release_calendar", "fxmd_mcp_release_calendar_visual_artifact", "fxmd_mcp_event_predictions", "fxmd_mcp_latest_announcements", "fxmd_mcp_announcement_changes", "fxmd_mcp_press_releases", "fxmd_mcp_macro_factor", "fxmd_mcp_fx_reference_sources", "fxmd_mcp_fx_reference_universe", "fxmd_mcp_fx_intraday_reference_rates", "fxmd_mcp_rate_curve", "fxmd_mcp_rate_differentials", "fxmd_mcp_latest_commodities", "fxmd_mcp_forex", "fxmd_mcp_seasonality", "fxmd_mcp_indicator_query", "fxmd_mcp_plot_visual_artifact", "fxmd_mcp_indicator_visual_artifact", "fxmd_mcp_forex_visual_artifact", "fxmd_mcp_commodities_visual_artifact", "fxmd_mcp_cot_visual_artifact", "fxmd_mcp_policy_rate_differential_visual_artifact", "fxmd_mcp_macro_briefing_task", "fxmd_mcp_indicator_intel_task", "fxmd_mcp_pair_intel_task", "fxmd_mcp_macro_heatmap_task", "fxmd_mcp_policy_scenario_modeler_task", "fxmd_mcp_macro_war_room_task", "fxmd_mcp_event_impact_replay_task", "fxmd_mcp_quant_scenario_lab_task", "fxmd_mcp_known_at_time_task", "fxmd_mcp_macro_regime_classifier_task", "fxmd_mcp_release_risk_score_task", "fxmd_mcp_portfolio_risk_engine_task", "fxmd_mcp_fx_trade_setup_task", "fxmd_mcp_fx_backtest_task", "fxmd_mcp_macro_research_pack_task", "fxmd_mcp_market_sessions", "fxmd_mcp_cot_data", "fxmd_mcp_commodities", "fxmd_mcp_financial_prices", "fxmd_mcp_official_dataset_family", "fxmd_usd_macro_brief"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "gadget", "repo": "https://github.com/Adolanium/hermes-gadget-sdk", "sha": "0b957aae2f7f11904a9daab031f1378a45de21dc", "subdir": "plugin", "title": "Hermes Gadget", "description": "Talk to your Hermes from small ESP32 devices with a screen, microphone and speaker: hold a button, ask, and hear the answer. Adds a gateway platform where each device is a chat, plus tools to list devices, show a card on a screen and run device actions (LEDs, relays). Disclosure \u2014 the gateway listens for devices on a WebSocket port (8765, all interfaces by default; plain ws:// unless tls_cert/tls_key are set). New devices need a Hermes pairing code unless listed in GADGET_ALLOWED_USERS; GADGET_ALLOW_ALL_USERS skips pairing (development only). A paired device answers the agent's command approvals for its own chat (allow once or deny), within Hermes's approval timeout. The first approved device becomes the platform's home channel by default. Session hooks feed a dashboard on paired devices with each agent session's platform, a short id and its state (idle, busy, waiting for approval); a device that can switch profiles also sees the offered profiles' sessions. Optional profile switching (off unless `profiles` is set in the default profile's gadget config) lets a device paired on the default profile talk to the listed profiles; each profile approves the device through its own pairing flow (the device shows the `hermes -p <profile> pairing approve` command), the plugin writes nothing into other profiles, and revoking the device in the default profile sends it back there. Spoken replies that are not WAV are converted with the local ffmpeg; Opus reply audio uses the host's libopus when installed (loaded with ctypes, not bundled). `hermes gadget update --latest` downloads firmware from this repository's GitHub releases, checks size and SHA-256 against the release manifest (files carry build provenance attestations) and sends it to the device. Writes only under plugin-data/gadget/. Uses Hermes's own STT, TTS and image cache; no telemetry. Independent community project, not affiliated with Nous Research.", "maintainer": "Adolanium", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.6", "docs_url": "https://adolanium.github.io/hermes-gadget-sdk/docs/connect-hermes.html", "version": "0.3.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-gadget-sdk/0b957aae2f7f11904a9daab031f1378a45de21dc/docs/images/banner.webp", "screenshots": ["https://raw.githubusercontent.com/Adolanium/hermes-gadget-sdk/0b957aae2f7f11904a9daab031f1378a45de21dc/docs/images/sim-window.png", "https://raw.githubusercontent.com/Adolanium/hermes-gadget-sdk/0b957aae2f7f11904a9daab031f1378a45de21dc/docs/images/screen-listening.png", "https://raw.githubusercontent.com/Adolanium/hermes-gadget-sdk/0b957aae2f7f11904a9daab031f1378a45de21dc/docs/images/screen-reply.png", "https://raw.githubusercontent.com/Adolanium/hermes-gadget-sdk/0b957aae2f7f11904a9daab031f1378a45de21dc/docs/images/screen-prompt.png"], "capabilities": {"provides_tools": ["gadget_devices", "gadget_display", "gadget_action"], "provides_hooks": ["on_session_start", "pre_llm_call", "on_session_end", "pre_approval_request", "post_approval_response", "on_session_finalize", "on_session_reset"], "provides_middleware": [], "requires_env": []}}, {"name": "game-dev", "repo": "https://github.com/123mikeyd/hermes-game-dev", "sha": "d9d82477cf67ec14ec51cc88b3dd14e4430edd9f", "version": "0.1.0", "title": "Game Dev", "maintainer": "123mikeyd", "tier": "community", "category": "tools", "description": "Read-only project inspection and asset audits with playable-slice, asset-production, and verification skills. Disclosure \u2014 lists file names and sizes under any absolute project path the agent supplies (skipping hidden, symlinked and credential-named entries), reads that project's project.godot/export_presets.cfg and, on request, hashes asset files; no writes, no shell commands, no network calls.", "docs_url": "https://github.com/123mikeyd/hermes-game-dev#readme", "readme": true, "capabilities": {"provides_tools": ["game_dev_inspect", "game_dev_asset_audit", "game_dev_checklist"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "game-editor", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-game-editor", "sha": "3a2b23e8a60714b4346b3d8f7c9c2a12b29718a8", "version": "1.2.3", "requires_hermes": ">=0.21.6", "description": "In the Godot 4 project open in your editor, it places assets into the scene, plays the game, and the next plan fixes each error from its file and line. Disclosure \u2014 Needs Godot 4.7 or later, the Godot AI 4.x add-on, and uv. The first start downloads godot-ai==4.3.0 from pypi.org and files.pythonhosted.org. There is no API key. The editor is reached only on 127.0.0.1. A server this plugin starts sends no telemetry. The add-on follows godot_ai/telemetry_enabled (on by default) and can send usage to godot-ai-telemetry-v2-pudmurzsnq-uw.a.run.app. plan_change sends only the session list. apply_plan asks once. A plan that deletes, overwrites, drops unsaved work, writes outside the project or runs code it wrote is not made when what is lost exceeds 1,700 characters, and otherwise runs only after confirm_risky_plan. Play and tests ask once and run the project's code. Tools are on by default on every surface, including the gateway, so anyone who can message Hermes there can ask and approve. This plugin keeps no user list of its own. Cron, hermes chat -q and unattended runs decline. Data stays in <HERMES_HOME>/plugin-data/agent-plugin-game-editor-<id> after removal. Stop with hermes plugins disable game-editor, or hermes tools for one surface. macOS only.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-game-editor", "platforms": ["macos"], "capabilities": {"provides_tools": ["mcp__game_editor__scene_look", "mcp__game_editor__script_look", "mcp__game_editor__file_look", "mcp__game_editor__project_look", "mcp__game_editor__change_guide", "mcp__game_editor__plan_change", "mcp__game_editor__apply_plan", "mcp__game_editor__confirm_risky_plan"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "gbrain-plugin", "repo": "https://github.com/kerrz2020/hermes-gbrain", "sha": "51f5b558e00aa3ea412801d423f436fdd43385ec", "description": "Community (non-official) plugin wiring GBrain (garrytan/gbrain, MIT) into Hermes as a local memory layer over MCP: /gbrain status command, desktop starter, and per-profile Postgres setup/update/maintenance scripts. Not affiliated with upstream. Disclosure \u2014 the plugin itself only adds a /gbrain status command and a Desktop pane; GBrain is installed by the user via scripts/setup.sh, which installs bun (curl|bash), an unpinned gbrain from GitHub HEAD, and provisions PostgreSQL with sudo.", "maintainer": "kerrz2020", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/kerrz2020/hermes-gbrain#readme", "version": "1.2.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "gbrain-pointer", "repo": "https://github.com/praggybuilds/hermes-gbrain-pointer", "sha": "56212b086ed8dc134011440fc05cfc867586b9a4", "version": "0.1.0", "title": "GBrain Pointer", "description": "Read-only memory.provider for GBrain (garrytan/gbrain, MIT; not affiliated). After each non-trivial turn it searches a GBrain MCP server (`gbrain serve --http`) in the background and injects up to the configured limit (3 by default, capped at 10) of `[source:slug] title` pointers into the next turn as fallible background context. It never writes to GBrain and adds no tools or hooks. Disclosure \u2014 after each non-trivial turn, the first 500 characters of your message are sent to GBRAIN_MCP_URL (default http://127.0.0.1:3131/mcp; plain http to a non-loopback host is refused unless GBRAIN_POINTER_ALLOW_HTTP=1), and the profile's GBrain OAuth client id and secret go to that server's /token endpoint. Redirects and proxy settings are ignored. Only the slug, title and source id of up to 10 results are kept and injected into the next turn as background context; rows GBrain flags as suspected injection are skipped. Tokens and pointers stay in memory only. It never writes to GBrain; no other network calls, no telemetry.", "maintainer": "praggybuilds", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/praggybuilds/hermes-gbrain-pointer#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GBRAIN_MCP_CLIENT_ID", "GBRAIN_MCP_CLIENT_SECRET"]}}, {"name": "gbrain-retrieval-reflex", "repo": "https://github.com/aean0x/hermes-gbrain-retrieval-reflex", "sha": "78516ca629588612ebfc0a7ca86944fbb63d7dd8", "description": "pre_llm_call hook plugin, enabled with `hermes plugins enable`: injects ambient context from a GBrain instance before each turn (volunteer_context, then a hybrid-query fallback). Not a `memory.provider`. Silent no-op when GBrain is unreachable or no token is set. Disclosure \u2014 before each non-trivial turn the last six user and assistant messages (truncated) and the current message are sent with a GBRAIN_TOKEN bearer token to GBRAIN_MCP_URL (default http://127.0.0.1:3131/mcp), and returned brain-page text is injected into the turn.", "maintainer": "aean0x", "tier": "community", "category": "memory", "docs_url": "https://github.com/aean0x/hermes-gbrain-retrieval-reflex#readme", "version": "0.6.1", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "gemini-live-bridge", "repo": "https://github.com/cruzlxyz/gemini-live-bridge", "sha": "a0016e33244ff2f74fd33bae1869e4a8c06f5034", "description": "Realtime duplex voice chat with the Gemini Live API \u2014 a status-bar minibar for the Hermes desktop app (transcript, model catalog, thinking level, session token meter, auto-redial via session resumption). Full-proxy architecture: the plugin backend owns the upstream Live WebSocket and the user's key (requires_env GOOGLE_API_KEY); the desktop UI only talks to localhost and receives single-use ephemeral tokens. No agent tools; desktop-focused, dashboard tab hidden. Disclosure \u2014 pressing Start captures microphone audio and streams it through the local backend to generativelanguage.googleapis.com using GOOGLE_API_KEY (or GEMINI_API_KEY) from the environment; input/output transcripts are held in backend memory for the session, and a Gemini session-resumption handle is written to .resume.json inside the plugin's install directory.", "maintainer": "cruzlxyz", "tier": "community", "version": "1.0.6", "category": "voice", "docs_url": "https://github.com/cruzlxyz/gemini-live-bridge#readme", "image": "https://raw.githubusercontent.com/cruzlxyz/gemini-live-bridge/a0016e33244ff2f74fd33bae1869e4a8c06f5034/docs/banner.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GOOGLE_API_KEY"]}}, {"name": "gemini-media", "repo": "https://github.com/bytecakelake/hermes-gemini-media-generation", "sha": "44bc2dd0349c08cecdcb44333b9fa0000ef01d95", "description": "Google Gemini image (Nano Banana) and video (Gemini Omni) generation backends for image_generate and video_generate, in one plugin built on the google-genai SDK. Image: text-to-image and reference-guided editing (up to 14 images). Video: text-, image- and reference-to-video with native audio. Model picker comes from the key's live models.list. Disclosure \u2014 prompts, reference images and the Gemini API key (GEMINI_API_KEY, falling back to GOOGLE_API_KEY, the key Hermes's own Gemini chat provider uses) are sent to generativelanguage.googleapis.com; reference-image URLs are downloaded by the plugin (public hosts only, redirects re-checked) and a local reference path can be any image file the user can read (accepted only after a magic-byte check); generation is billed to the API key's Google project; writes generated media under $HERMES_HOME/cache/generated/ and a model-list cache (key hash only) under $HERMES_HOME/cache/gemini_media/; no telemetry, shell commands, background processes or self-updates. Installs google-genai.", "maintainer": "bytecakelake", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/bytecakelake/hermes-gemini-media-generation#readme", "version": "0.1.2", "known_issues": ["The Gemini Omni video endpoint stalls intermittently; calls are bounded by a wall-clock deadline (default 300 s) and return error_type timeout.", "Video input (editing, extending, reference videos) is not supported; API-key authentication only."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GEMINI_API_KEY"]}}, {"name": "genealogy-research-recipes", "title": "Kinprove Genealogy Research Recipes", "repo": "https://github.com/Kinprove/genealogy-research-recipes", "sha": "b89b086db98d5f1588e5c07b0b02854d14893708", "description": "Fact-checked genealogy instructions for DNA evidence, record searches and proof judgment. Native read-only skill bundle with recipe sources and an offline given-name lookup helper. Disclosure \u2014 optional third-party services and commands described by recipes require separately authorized tools and credentials; the adapter itself makes no service calls and registers no tools, hooks or MCP server.", "maintainer": "Kinprove", "tier": "community", "category": "general", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Kinprove/genealogy-research-recipes#readme", "version": "1.6.1", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "genesispay-catalog", "repo": "https://github.com/GenesisTechAT/genesispay-agent-skill", "sha": "e10a628540aea384b6f12f9cea60c6d5bf76fe8a", "subdir": "agent-plugins/genesispay-catalog", "title": "GenesisPay Catalog", "description": "Search products, services and shops listed on GenesisPay and read their verified-purchase reviews through the hosted, read-only GenesisPay Catalog MCP server (Streamable HTTP at https://catalog.genesispay.finance/mcp/catalog, no sign-in, no key), with a catalog skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/), no Python or executables. Disclosure \u2014 network calls to catalog.genesispay.finance, operated by GenesisPay (Genesis Technologies): search terms, filters and ids reach that server; no credentials are stored; all four tools are read-only and none pays, orders or changes anything; the tool set is served by the remote MCP server at runtime and is not covered by the pinned sha.", "maintainer": "GenesisTechAT", "category": "tools", "docs_url": "https://github.com/GenesisTechAT/genesispay-agent-skill/tree/main/agent-plugins/genesispay-catalog#readme", "version": "0.1.0", "requires_hermes": ">=0.21.6", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "gh-ref", "repo": "https://github.com/EloquentBrush0x/hermes-context-refs", "sha": "bb0001012c5b213ce5a09b5905d859635c440c17", "subdir": "gh-ref", "description": "@gh:owner/repo#123 context references: attach a public GitHub issue or pull request to a message (title, state, labels, description, the latest comments; for pull requests also the branches, merge state and change size). Disclosure \u2014 sends anonymous HTTPS GET requests to api.github.com only (the referenced owner/repo and number leave the machine; no token, public repositories only, 60 requests an hour per IP address); no files written, no subprocess; register() only adds the @gh: reference provider.", "maintainer": "EloquentBrush0x", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/EloquentBrush0x/hermes-context-refs/tree/main/gh-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/EloquentBrush0x/hermes-context-refs/bb0001012c5b213ce5a09b5905d859635c440c17/docs/gh-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "gigamail", "repo": "https://github.com/adecubed/hermes-plugin-gigamail", "sha": "a056fe1a5ac09595a97952ab6062dba7504b57af", "description": "Email and calendar through an existing local GigaMail MCP server, with a workflow skill and stdio launcher. Requires Python and a separately configured backend; no automatic backend installation or updates. Reads real mail and attachments; sending, deletion and calendar writes use GigaMail's out-of-band human approval. Disclosure \u2014 a thin stdio launcher for the separately installed GigaMail MCP server from Adecubed inc. (gigamail.ai, github.com/adecubed/gigamail, same author as this plugin); the plugin holds no mail logic or credentials and downloads nothing, but it starts that third-party executable from PATH or a configured path, points it at GigaMail's own data directory under your user profile (%APPDATA%\\ADE or ~/.ade), and send, delete and calendar writes are gated by that backend's out-of-band approval rather than by Hermes.", "maintainer": "adecubed", "tier": "community", "category": "tools", "docs_url": "https://github.com/adecubed/hermes-plugin-gigamail#readme", "version": "0.1.0", "readme": true, "platforms": ["windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "git-autosave", "title": "Git Autosave", "repo": "https://github.com/xiaoyaner0201/hermes-git-autosave", "sha": "b4b12d6bf79318c6708ab468327d52e7671d63f9", "description": "Lightweight local alternative to directory checkpoints for Git projects. Before a mutating tool call it saves the affected repository's working state to a private local shadow ref (refs/hermes-autosave/<branch>, with reflog) through a private index, or copies the single existing file outside Git; `hermes autosave find` and `restore` recover a pre-edit version. Disclosure \u2014 runs local git subprocesses in repositories the agent touches (hooks, clean filters, fsmonitor and lazy fetch disabled); writes shadow refs/reflogs into those repositories' .git and unencrypted file copies into its plugin-data directory; never changes HEAD, branches, the real index or the working tree and never pushes; skips credential stores (.env, auth.json, .ssh, .aws, .docker, .kube, gh/gcloud/azure configs) and dependency directories; `hermes autosave sweep` reads the session database read-only and is scheduled by the user; no network, no background processes; it observes only and never blocks or approves a tool call.", "maintainer": "xiaoyaner0201", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/xiaoyaner0201/hermes-git-autosave#readme", "version": "0.3.0", "readme": true, "platforms": ["linux", "macos"], "known_issues": ["One V4A patch that moves a symlink and then updates the moved path can miss the edited file on case-insensitive or Unicode-normalizing filesystems; commit first or send the Move and the Update as separate calls."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "git-hook", "repo": "https://github.com/aean0x/hermes-git-hook", "sha": "a7303c89b429704a31e2df4212ec4f08ee76692a", "description": "Auto fetch/pull before reads, and commit + push only the files each turn changed, for every git worktree Hermes touches. Disclosure \u2014 after each turn it commits and pushes (push on by default; GIT_HOOK_PUSH=0 keeps commits local) the changed files of git worktrees under GIT_HOOK_ROOTS (default PROJECTS_ROOT, \"*\" for every repo), pushing to origin HEAD when no upstream is set; it pulls --ff-only before reads. A branch whose direct push the remote refuses on policy grounds (branch protection, a PR-required ruleset) is never committed to again: the hook drops its own unpushed commit, leaves the edit staged and dirty, and reports it once.", "maintainer": "aean0x", "tier": "community", "category": "automation", "docs_url": "https://github.com/aean0x/hermes-git-hook#readme", "version": "0.5.1", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "post_llm_call", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "git-review", "repo": "https://github.com/mister-ideas/git-review", "sha": "506b44804fbf90000c2d620975888f47427dfaa6", "title": "Git Review", "description": "Git review pane for Hermes Desktop: every changed file of the agent's last turn, uncommitted, staged or unstaged work, the branch since it left the default branch, or any selection of commits, in one scroll, unified or split, with syntax colours; cites changed lines into the composer as @line: references; and stages, unstages, discards, commits, pushes and opens pull requests from the pane. Disclosure \u2014 reads run git subprocesses (rev-parse, status, diff, log, show, cat-file, ls-files, for-each-ref, branch, remote, rev-list, merge-base, symbolic-ref, hash-object) with timeouts and output caps, external diff and textconv drivers disabled. Writes run only when the user clicks: git add, restore, reset, rm, commit and push, on paths validated inside the repository; discard asks first in Desktop's confirmation dialog and deletes only the untracked files it names. By default hooks are skipped and any write that would run a program named by the repository's own config (filter drivers, signing, SSH or credential commands) is refused; the run_repo_programs setting allows them, and the read_only setting hides and refuses every write. Network use: push to the branch's own name on its remote, and the user's own gh or glab CLI for the PR/MR badge and for Create pull request; the plugin itself makes no network requests. Generate commit message sends what the commit will contain and recent commit subjects to the focused chat's model through Hermes's commit_message one-shot template, only when clicked. It reads files and history inside authorized repositories only (the focused workspace, configured repos/roots and the latest agent selection), this profile's config.yaml, and the cwd column of the sessions table in state.db (read-only); it writes $HERMES_HOME/plugin-data/git-review/select.sqlite3 (agent selection requests), Desktop plugin storage (display settings, turn baselines) and, through the actions above, the user's repository. While the pane is open it polls the local backend every 3 s (agent selections) and 5 s (live diffs); the status-bar count and the commit box's branch state refresh every 15 s; no background processes, credentials or telemetry.", "maintainer": "mister-ideas", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "version": "0.2.0", "docs_url": "https://github.com/mister-ideas/git-review#readme", "image": "https://raw.githubusercontent.com/mister-ideas/git-review/506b44804fbf90000c2d620975888f47427dfaa6/docs/banner.jpg", "screenshots": ["https://raw.githubusercontent.com/mister-ideas/git-review/506b44804fbf90000c2d620975888f47427dfaa6/docs/screenshots/unified-agent-turn.png", "https://raw.githubusercontent.com/mister-ideas/git-review/506b44804fbf90000c2d620975888f47427dfaa6/docs/screenshots/split-layout.png", "https://raw.githubusercontent.com/mister-ideas/git-review/506b44804fbf90000c2d620975888f47427dfaa6/docs/screenshots/fold-and-expand.png", "https://raw.githubusercontent.com/mister-ideas/git-review/506b44804fbf90000c2d620975888f47427dfaa6/docs/screenshots/cite-into-composer.png", "https://raw.githubusercontent.com/mister-ideas/git-review/506b44804fbf90000c2d620975888f47427dfaa6/docs/screenshots/commit-box.png", "https://raw.githubusercontent.com/mister-ideas/git-review/506b44804fbf90000c2d620975888f47427dfaa6/docs/screenshots/dark-theme.png"], "capabilities": {"provides_tools": ["git_review_select"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "git-tasks", "repo": "https://github.com/meviusisback/git-tasks", "sha": "8808b35a1b7f7870b4fc762f4580bb32d611af60", "description": "Multi-repo GitHub issues & PRs in an Orca-style Tasks view for Hermes Desktop. Disclosure \u2014 uses your logged-in `gh` CLI and `git` through Hermes Desktop's shell bridge, or a GitHub token you paste in the panel (stored unencrypted in Desktop plugin storage, sent only to api.github.com); scans your configured clone folders for GitHub repos and reads skill names under ~/.hermes; polls the active-session list of every Hermes profile every 10 seconds for status chips; approve, close, reopen, comment and merge act on GitHub from the panel; creates git worktrees and opens Hermes sessions seeded with the issue/PR title and body as fenced untrusted text, and without a shell bridge asks the agent to run the worktree git commands.", "maintainer": "meviusisback", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/meviusisback/git-tasks#readme", "version": "0.2.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "githermes", "repo": "https://github.com/claudiumio/githermes", "sha": "09d5b566da650290dc0d639ea1e77def4bcdab31", "description": "GitHub PRs and issues as a right workspace pane in Hermes Desktop, via the connected gh CLI. Disclosure \u2014 shells out to your logged-in gh CLI; the in-pane update pill only runs `hermes plugins update githermes` (no fetch-and-replace) and currently compares against upstream main rather than the pinned sha.", "maintainer": "claudiumio", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/claudiumio/githermes#readme", "version": "0.5.0", "image": "https://raw.githubusercontent.com/claudiumio/githermes/09d5b566da650290dc0d639ea1e77def4bcdab31/docs/social-preview.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "github-copilot", "repo": "https://github.com/NousResearch/hermes-labs-plugins", "sha": "346cfe972f72b6a966e84c1004cf8742554b193d", "subdir": "github-copilot", "description": "GitHub Copilot model providers for Hermes: `copilot` (the Copilot API with your Copilot subscription: GPT, Claude, Gemini and Grok models, sign in with `hermes auth add copilot` or COPILOT_GITHUB_TOKEN / GH_TOKEN / GITHUB_TOKEN) and `copilot-acp` (drives your installed GitHub Copilot CLI over ACP). Moved out of Hermes core; profiles that used Copilot get it installed automatically. A Hermes Labs plugin: built by Nous Research, not supported. Disclosure \u2014 signs in with GitHub's device-code flow using the Copilot editor OAuth app, exchanges your GitHub token for a short-lived Copilot token at api.github.com and sends your prompts to api.githubcopilot.com (or models.github.ai); it calls GitHub only for profiles that chose Copilot, never runs `gh` or reads other tools' token files, and caches the exchanged token in <HERMES_HOME>/.copilot_jwt.json. copilot-acp runs your local `copilot` CLI.", "maintainer": "NousResearch", "tier": "community", "category": "models", "docs_url": "https://github.com/NousResearch/hermes-labs-plugins/tree/main/github-copilot", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "github_app", "repo": "https://github.com/himanusia/hermes-github-app-plugin", "sha": "2adfd020f93a5d71a563e94c88738fb8e64335f8", "subdir": "github_app", "version": "0.1.0", "description": "GitHub and GitHub Enterprise tools with bot-first attribution and approval-gated issue/PR writes. Disclosure \u2014 authenticates as a GitHub App from GITHUB_APP_ID, GITHUB_APP_INSTALLATION_ID and a private key in GITHUB_APP_PRIVATE_KEY or GITHUB_APP_PRIVATE_KEY_PATH/_FILE (read from the profile env or HERMES_HOME/.env, held in memory only, never written or logged), falling back to GITHUB_TOKEN/GH_TOKEN or `gh auth token` when no App variables are set, and reports which identity acted in every result. Talks only to https://api.github.com or the operator-configured GITHUB_API_URL / settings.api_url (HTTPS, no redirects; no tool argument can change the host). Issue/comment/review/merge writes stay disabled until settings.allow_write_actions is true and each one additionally goes through Hermes's human-approval prompt via its pre_tool_call hook (an 'always' answer does not persist).", "maintainer": "himanusia", "tier": "community", "category": "tools", "readme": true, "capabilities": {"provides_tools": ["github_identity", "github_create_issue", "github_comment_issue", "github_list_issues", "github_get_issue", "github_review_pr", "github_merge_pr"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "glasser", "repo": "https://github.com/glasser-ai/hermes-plugin-glasser", "sha": "79a2f5a343735548d270f87309a44ad4d32c2ecc", "description": "Glasser's hosted MCP: search, inspect and run 1,000+ paid data endpoints (people and company enrichment, SEO, web, social media, US property, stock quotes) with one key, pay per call. Portable Agent Plugins v1 package: a stdio bridge through mcp-remote (browser sign-in, no key in the package) plus a bundled skill for setup and the spending rules. Requires Node.js 18+. Disclosure \u2014 paid data broker: each run tool call charges your Glasser balance per the endpoint's published price with no in-Hermes confirm step; runs npx mcp-remote@0.14.3 as a local stdio bridge to https://api.glasser.ai/mcp; the sign-in token is cached by mcp-remote under ~/.mcp-auth/.", "maintainer": "glasser-ai", "tier": "community", "category": "tools", "requires_hermes": ">=0.20", "docs_url": "https://glasser.ai/docs/mcp-server", "version": "0.1.1", "title": "Glasser", "image": "https://raw.githubusercontent.com/glasser-ai/hermes-plugin-glasser/79a2f5a343735548d270f87309a44ad4d32c2ecc/assets/banner.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "gmail", "repo": "https://github.com/guberm/hermes-gmail-desktop-plugin", "sha": "c8cd0c2d140561a1dffb7432c6d02b63b2374888", "subdir": "plugins/gmail", "title": "Gmail", "description": "Hermes Desktop Gmail mailbox UI for search, reading, and thread inspection, with preview-confirmed send, reply, archive, trash, and label changes. Uses the active profile's existing Google Workspace OAuth setup; email is sensitive external content. Gmail actions and data access require user review and configuration. Disclosure \u2014 reads the active profile's Hermes Google Workspace token (google_token.json, refreshed in memory only) and calls the Gmail API; opening an unread message marks it read, other send/trash/label changes go through a confirm step (one setting can skip every review dialog, and then the prepare ticket, account/profile binding, exact snapshot validation and readback verification still run); remote email images load only after the user allows them. Attachment metadata listing and bounded read-only attachment download (25 MB cap) are profile/account-scoped.", "maintainer": "guberm", "tier": "community", "category": "desktop", "docs_url": "https://github.com/guberm/hermes-gmail-desktop-plugin#readme", "version": "1.0.20", "readme": false, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "go-whatsapp", "repo": "https://github.com/anpicasso/hermes-go-whatsapp", "sha": "a48546353fe79456bc193402905b17b3e1cd1be6", "version": "0.4.1", "requires_hermes": ">=0.21.5", "title": "Go WhatsApp", "description": "Outbound WhatsApp tools through GOWA: registers GOWA's native MCP server and adds device listing, pairing, and removal. Setup can connect an existing server or explicitly install pinned GOWA v9.5.0 as a loopback-only authenticated native user service on Linux x86_64, macOS x86_64/arm64, or Windows x86_64. Disclosure \u2014 agents can send messages and mutate WhatsApp state through the linked account; session databases grant account access. The plugin does not ingest incoming messages or configure webhooks.", "maintainer": "anpicasso", "tier": "community", "category": "tools", "docs_url": "https://github.com/anpicasso/hermes-go-whatsapp/blob/a48546353fe79456bc193402905b17b3e1cd1be6/README.md", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["gowa_devices", "gowa_device_login", "gowa_device_remove"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "godot-studio", "repo": "https://github.com/Foolafroos/godot-studio", "sha": "6c1d42d22ae6274f0ed4a3a9a264d2effe461736", "description": "Headless Godot 4 workflows for the agent game studio \u2014 godot_headless_check (script/resource validation via godot --headless, no editor needed), godot_export (CI builds from named export presets, e.g. a Web build a playtester agent can load), godot_builds (export presets + artifact state: exists/size/modified \u2014 gallery data for re-export decisions and attaching fresh builds in chat), godot_setup (read-only install-state report for Godot/godot-ai/uv with the exact registration path). Complements the hi-godot/godot-ai MCP editor bridge by covering the verification and export leg of the loop; bundles the godot-studio skill teaching edit \u2192 verify \u2192 export \u2192 playtest. Ships an optional desktop half (unified package): a Godot version statusbar chip and a builds gallery pane backed by its own read-only dashboard API; opt-in, degrades gracefully when the backend is off. Tools register only when a Godot 4 binary is present (check_fn). Disclosure \u2014 runs shell commands (godot --headless against the caller-targeted project; read-only godot --version in the desktop backend; read-only hermes mcp list in godot_setup); godot_headless_check and godot_export execute the target project's own GDScript (autoloads, main scene, export plugins) with no approval prompt \u2014 point them only at projects you trust; no network calls, no credentials, no telemetry, no background processes; exports write only inside the target project (the output path is resolved and confined to the project directory, existing files that aren't known export artifacts are never overwritten, and the default is the preset's own export_path from export_presets.cfg); the desktop backend reads export_presets.cfg and artifact metadata inside the project path the user configures in the pane.", "maintainer": "Foolafroos", "tier": "community", "category": "tools", "docs_url": "https://github.com/Foolafroos/godot-studio#readme", "version": "0.2.1", "platforms": [], "capabilities": {"provides_tools": ["godot_headless_check", "godot_export", "godot_builds", "godot_setup"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.5"}, {"name": "gondola-provider", "repo": "https://github.com/Gondola-Market/hermes-gondola-provider", "sha": "ad3f352b6a9814f1b550c819bee5ef2fb92a1851", "description": "Gondola, a USDC-settled marketplace API for Venice AI inference", "maintainer": "Gondola-Market", "tier": "community", "category": "models", "docs_url": "https://github.com/Gondola-Market/hermes-gondola-provider#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GONDOLA_API_KEY"]}}, {"name": "gonogo", "repo": "https://github.com/keppy/hermes-plugin-gonogo", "sha": "faf3e6a5f905522359e2fc7ab3468c814d00db01", "description": "Turn a pilot-scale eval score into a deployment decision \u2014 Wilson intervals, a confidence threshold that routes uncertain cases to a human, and an honest INSUFFICIENT EVIDENCE verdict when the sample cannot support the claim. Disclosure \u2014 gonogo_report writes report JSON/HTML to the path the model supplies.", "maintainer": "keppy", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "version": "0.3.0", "docs_url": "https://github.com/keppy/hermes-plugin-gonogo#readme", "capabilities": {"provides_tools": ["gonogo_decide", "gonogo_report", "gonogo_compare"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "good-student", "repo": "https://github.com/harrylabsj/hermes-plugin-good-student", "sha": "021375cf1cf0dad73d7a81b997f9a383be98c1ed", "description": "Wrong-question diagnosis and study-action loop for parents and students \u2014 deterministic local core (SQLite, no cloud), host-model recognition gated by parent confirmation. Portable Agent Plugins v1 package (mcp.json + skills/); good-student MCP server pinned to immutable commit 2469cbb over uvx, with the good-student workflow skill bundled. Needs Python 3.10+ via uv. No credentials required; all data stays on-device and nothing is uploaded.", "maintainer": "harrylabsj", "tier": "community", "category": "tools", "docs_url": "https://github.com/harrylabsj/good-student", "version": "0.1.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "govee", "repo": "https://github.com/promptclickrun/hermes-govee", "sha": "2d552cd1c67421cd5c9bbd8dd9b267f6dd5f0a0a", "description": "Discover and control Govee lights (power, brightness, color, white temperature, scenes) through Govee's developer API. Every command is checked against the model's advertised capabilities and ranges, then confirmed by a state read-back. Disclosure \u2014 sends device IDs and control commands to openapi.api.govee.com with your Govee API key; the model can change light state; stores nothing on disk.", "maintainer": "promptclickrun", "tier": "community", "category": "tools", "version": "0.1.0", "requires_hermes": ">=0.21.2", "docs_url": "https://github.com/promptclickrun/hermes-govee#readme", "platforms": [], "capabilities": {"provides_tools": ["govee_lights"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GOVEE_API_KEY"]}}, {"name": "greyridge-token-safety", "repo": "https://github.com/rezearcher/greyridge-token-safety-skill", "sha": "3a7848edcac2163a4e02c7b9a084c8c8476384f3", "description": "Skill that runs a pre-trade safety check on Base ERC-20 tokens (honeypot/sellability, measured transfer tax, owner/mint/pause flags, liquidity, SAFE/CAUTION/AVOID verdict) by curling the Grey Ridge x402 API's free preview endpoint. Skill-only: no tools, hooks or env vars. Disclosure \u2014 the skill has the agent run `curl` against Grey Ridge Signals Group LLC's API (x402-data-api.sigrunner.workers.dev, the same service as api.greyridgesignals.ai) with the token address and, for the swap gate, trade side and USD size; each response carries a paid URL that the skill tells the agent it can call with an x402 client (suggesting `npm i x402-fetch viem`), paying $0.01 USDC per call on Base from whatever wallet that client is given, and it mentions an unpinned `pip install git+https://github.com/rezearcher/greyridge-x402-tools` helper that the user installs themselves. Its verdict is a heuristic, not financial advice.", "maintainer": "rezearcher", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/rezearcher/greyridge-token-safety-skill", "version": "0.1.0", "known_issues": ["Base chain only; DEX buy/sell tax is not measured (only transferTaxBps). Free preview is rate-limited; unattended use needs the paid x402 route ($0.01/call)."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "grok-acp", "repo": "https://github.com/nicolasdmolina/hermes-grok-acp", "sha": "2851d6667be7f1a9044fee5006a382699d942c6f", "description": "xAI Grok subscription as a Hermes model provider, driven over ACP stdio. Disclosure \u2014 spawns the vendor grok CLI found on PATH (grok agent over ACP stdio, plus grok models / grok login during setup) and drives your existing Grok subscription login; no API key is stored and Hermes provider secrets are stripped from the child environment.", "maintainer": "nicolasdmolina", "tier": "community", "category": "models", "docs_url": "https://github.com/nicolasdmolina/hermes-grok-acp#readme", "version": "0.1.2", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "groq-provider", "repo": "https://github.com/AhmetArif0/hermes-groq-provider", "sha": "b5be0388c2b4cae8ed6a30c7371aaa1330731ee8", "subdir": "groq-provider", "description": "Groq as a Hermes model provider (`--provider groq`, or Groq in `hermes model`): reasoning effort is sent in the form each Groq model accepts, so gpt-oss-120b and gpt-oss-20b work (through a custom endpoint, Hermes 0.21.5 sends them a value Groq rejects with HTTP 400), and the model list leaves out Groq's speech-to-text, text-to-speech, prompt-guard and 4K-context models that Hermes cannot run. Not affiliated with Groq. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); chat requests and the model list go to https://api.groq.com/openai/v1 (or the configured model.base_url) through Hermes' own client with GROQ_API_KEY, which Hermes reads; the plugin itself opens no connections, reads and writes no files and starts no processes.", "maintainer": "AhmetArif0", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/AhmetArif0/hermes-groq-provider", "version": "1.0.0", "image": "https://raw.githubusercontent.com/AhmetArif0/hermes-groq-provider/b5be0388c2b4cae8ed6a30c7371aaa1330731ee8/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GROQ_API_KEY"]}}, {"name": "gurusup-brain", "title": "Gurusup", "repo": "https://github.com/gurusup/gurusup-brain-plugin", "sha": "4709ca345cb55a1fab809b6b53523c5c0600be6e", "description": "Your company's memory in Hermes: search decisions, people, customers and projects across every source your team connected to Gurusup (Slack, HubSpot, Notion, uploaded documents and more), with the sources behind each answer. Portable Agent Plugins v1 package (mcp.json + skills/), remote streamable-http with OAuth 2.1, no local code and no API keys. Disclosure \u2014 hosted-only MCP connector with no local code: every tool call goes to Gurusup's server at mcp.brain.gurusup.com under the signed-in Gurusup account (OAuth via `hermes mcp add gurusup-brain --url https://mcp.brain.gurusup.com/mcp --auth oauth`; the bundled mcp.json alone yields 401), and answers are limited to what that account can see; write tools save knowledge to the company's Gurusup workspace (add_company_knowledge, skills_publish) and send issue reports or feedback to Gurusup (report_issue, send_feedback), and request_human_info can message a teammate on Slack or phone them when its dispatch flag is set.", "maintainer": "Gurusup", "tier": "community", "category": "tools", "version": "0.1.0", "docs_url": "https://gurusup.com/brain/mcp", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "ha-sidebar-navigator", "repo": "https://github.com/badiyee85/HA-Plugins-sidebar-navigator", "sha": "b5dc25fabf7696adc0cae2bf3aa90456b365812a", "version": "0.9.1", "image": "https://raw.githubusercontent.com/badiyee85/HA-Plugins-sidebar-navigator/b5dc25fabf7696adc0cae2bf3aa90456b365812a/docs/images/banner.png", "description": "Full-power sidebar navigator & uncapped project/session explorer for Hermes Desktop. Bypasses the 3-session overview cap with searchable, scrollable project trees and timeline view. Disclosure \u2014 browses and acts on sessions of every Hermes profile and connection you pick (rename, archive, delete with confirmation, branch, move to a project, create, including bulk archive/delete/move of selected sessions; renaming or exporting a session that is not open briefly resumes it on that backend and closes it again), exports a session's full transcript as a downloaded JSON file on request, and keeps its own pins, colours, unread marks, tags and saved views in its plugin storage, mirroring pin and colour changes to the Desktop sidebar for the profile the window is showing.", "maintainer": "badiyee85", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/badiyee85/HA-Plugins-sidebar-navigator", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "desktop-plugin"}, {"name": "hades-coding-workflows", "repo": "https://github.com/singhguri/hades-coding-workflows", "sha": "b68546d66fe684a49633a9174e44362eff77cbfc", "description": "Coding workflow skills \u2014 dual-model harness, subagent-driven development, and implementation planning patterns for Hermes Agent", "maintainer": "singhguri", "tier": "community", "category": "automation", "docs_url": "https://github.com/singhguri/hades-coding-workflows#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "handflow", "repo": "https://github.com/DECRUX9812/hermes-handflow", "sha": "6526ef75ffeb133d66472bc1899c87f34dcf9556", "subdir": "", "description": "Manus-style planning flow \u2014 the agent plans in steps and marks them as it works, with a live desktop pane.", "maintainer": "DECRUX9812", "tier": "community", "category": "automation", "requires_hermes": ">=0.19", "docs_url": "https://github.com/DECRUX9812/hermes-handflow#readme", "platforms": [], "capabilities": {"provides_tools": ["handflow"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hardlight-ui", "title": "Hardlight UI", "repo": "https://github.com/nosliwhtes/hardlight-ui", "sha": "2254efe3ba6df2fa5962cd8ed352b5fad80306d4", "description": "Frontend design guidance with sixteen original style grammars, twelve craft references, dated modern-web capability recipes, explicit direction context, and stateless tools for bounded source inspection, color contrast, and navigation task paths. Disclosure \u2014 the hardlight_inspect tool reads frontend source files (.html, .css, .js, .ts, .jsx, .tsx, .vue, .svelte and similar; at most 500 files and 8 MiB) under any local directory the model names, skipping hidden, symlinked, vendor/build and secret-named paths, and returns their design tokens and findings to the model; the plugin adds a short system-prompt section naming its tools to every session; the tools make no network calls, run no subprocesses and write no files; the optional hardlight browser command, run by hand from a shell, launches a locally installed Chromium against loopback or file:// pages only and writes its report to the output folder you give it.", "maintainer": "nosliwhtes", "tier": "community", "category": "tools", "version": "0.2.0", "docs_url": "https://github.com/nosliwhtes/hardlight-ui/blob/2254efe3ba6df2fa5962cd8ed352b5fad80306d4/README.md", "image": "https://raw.githubusercontent.com/nosliwhtes/hardlight-ui/2254efe3ba6df2fa5962cd8ed352b5fad80306d4/docs/assets/showcase.png", "screenshots": ["https://raw.githubusercontent.com/nosliwhtes/hardlight-ui/2254efe3ba6df2fa5962cd8ed352b5fad80306d4/docs/assets/showcase.png", "https://raw.githubusercontent.com/nosliwhtes/hardlight-ui/2254efe3ba6df2fa5962cd8ed352b5fad80306d4/docs/assets/workspace-wide.png", "https://raw.githubusercontent.com/nosliwhtes/hardlight-ui/2254efe3ba6df2fa5962cd8ed352b5fad80306d4/docs/assets/workspace-narrow.png"], "readme": true, "platforms": [], "known_issues": ["Requires native tool, command, and bundled-skill registration APIs; the plugin checks their presence at load time.", "On Windows, bounded source inspection returns an explicit compatibility error; reference, direction, contrast, and navigation tools remain available.", "Some canonical gateway/local command routers reject /hardlight; use natural-language requests and the bundled frontend-design skill instead.", "Optional browser evidence requires separately installed Playwright and a compatible browser; it is not installed automatically.", "Automated findings are bounded advisory evidence, not artistic, usability, or full WCAG certification."], "capabilities": {"provides_tools": ["hardlight_reference", "hardlight_direction", "hardlight_inspect", "hardlight_contrast", "hardlight_navigation"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.0"}, {"name": "health-data", "repo": "https://github.com/Infinite-Labs-AI/hermes-health-apollo", "sha": "9f2db670a2669c9f3401fecb3b547ed52bcb2c3b", "description": "Local health and daily-context data store for Hermes.", "maintainer": "Infinite-Labs-AI", "tier": "community", "category": "tools", "docs_url": "https://github.com/Infinite-Labs-AI/hermes-health-apollo#readme", "capabilities": {"provides_tools": ["health_analysis_catalog", "health_analysis_explain", "health_analysis_plan", "health_analyze", "health_calendar_peek", "health_coverage", "health_event_query", "health_feature_query", "health_log_food", "health_query", "health_sync"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "health-insights", "repo": "https://github.com/mwdearing/hermes-health-insights", "sha": "d6d09c1f17ada6ca60368a1e0c7a7b5bd4efefc6", "description": "Deterministic, local-first analysis of your own Apple Health data - weekly trends, rule-based concern checks, nutrition versus Dietary Reference Intakes, an IOM energy target, lab results and opt-in modules (GLP-1 monitoring, medication adherence; all off by default). Portable Agent Plugins v1 package of ten skills that drive the separately installed health-insights command line tool (installed from the plugin's own pinned copy); the plugin itself contains no executable. Works on a self-hosted HealthRelay or Health Bridge receiver database. Disclosure - it handles sensitive health data, so use a local model or one you trust; personal integrations (medication counts, model wording) are off by default. Disclosure \u2014 the skills run a separately installed health-insights CLI that reads your HealthRelay or Health Bridge SQLite database read-only and keeps imported lab and ECG results under ~/.local/share/health-insights; the health values it prints are sent to whichever model provider your Hermes session uses.", "maintainer": "mwdearing", "tier": "community", "category": "tools", "requires_hermes": ">=0.20", "docs_url": "https://github.com/mwdearing/hermes-health-insights#readme", "version": "0.3.2", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "healthcare", "repo": "https://github.com/harrylabsj/hermes-plugin-healthcare", "sha": "09f3af2b2b862efececbcfa784c4442fcc2978df", "description": "Local-first personal health records: encrypted on-device Vault (AES-GCM) for vitals, medications, activities, emotions, sleep, encounters, diagnosis mentions, medication plans and reminders, served through a Keychain-paired local daemon with 24 scoped MCP tools. Zero-config first run: the plugin bootstraps Vault + daemon + agent pairing automatically under PLUGIN_DATA. Engine pinned to an immutable PyPI release (healthcare-mcp==0.2.1) over uvx stdio; Portable Agent Plugins v1 package (mcp.json + skills/), macOS only, Python 3.11+. Zero network by default; the optional LLM report-import endpoint stays off unless the user configures it. Approval-gated deletes, tamper-evident audit chain. Disclosure \u2014 personal health record-keeping, not medical advice (the skill forbids diagnoses and dosage changes); first run has uvx fetch healthcare-mcp==0.2.1 from PyPI; the optional report-import path posts report images to Alibaba DashScope (qwen-vl-max) unless HEALTHCARE_LLM_ENDPOINT points elsewhere, and only when HEALTHCARE_LLM_API_KEY is set.", "maintainer": "harrylabsj", "tier": "community", "category": "tools", "docs_url": "https://github.com/harrylabsj/healthcare-mcp", "version": "0.2.0", "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "healthrelay", "repo": "https://github.com/mwdearing/hermes-healthrelay", "sha": "6c7927f832aaa7859c55fff72578b217ea35597f", "description": "Read-only access to your own Apple Health data through a self-hosted HealthRelay receiver. Portable Agent Plugins v1 package with one stdio MCP server (ten read-only tools, including intake evidence; no raw SQL, no write tools) and three skills for setup, review and troubleshooting. Requires your own HealthRelay receiver (health-bridge) and an iPhone app you sign yourself; the plugin ships neither. Disclosure \u2014 exposes your Apple Health data, read-only, from your own receiver database to whichever model you run, so use a local model or one you trust with health data; runs the separately installed health-bridge binary from PATH; the setup skill can install the receiver from the author's git tag with uv tool install.", "maintainer": "mwdearing", "tier": "community", "category": "tools", "requires_hermes": ">=0.20", "docs_url": "https://github.com/mwdearing/hermes-healthrelay#readme", "version": "0.4.4", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "heartbeat2", "title": "HeartBeat 2.0", "repo": "https://github.com/electricsheephq/heartbeat2", "sha": "0d425c8f453852a691b28c4ec21da55586267a90", "description": "Your agent follows up on its own: timed check-ins, recurring checks and watchers that wake it in the same chat when something changes. You (with /pulse) or your agent (with the pulse tool) arm follow-ups at a time, recurring checks, a check-in after a long silence, or deterministic watchers on a file, process, URL, read-only command or Hermes event (kanban, subagent, API error, reactions). A wake is a turn in the same messaging DM that armed it, on that chat's own model: no side model, cron session or subagent. Watchers decide without a model call; the agent answers each wake with a structured verdict (notify or stay silent, never a typed sentinel); a no-op governor slows, then pauses pointless wakes and asks once. Every guardrail is a user setting (quiet hours, daily caps, unanswered mute, floors, lifetimes) that the agent works inside and can never widen. A one-time reminder you ask for in chat bypasses the unanswered mute and daily caps; HeartBeat 2.0 grants that only in a turn that carries your message. Arming returns a one-line receipt saying when the wake will really fire, and a wake that could never fire before it expires is refused. It delivers to messaging-gateway DMs only and needs plugins.entries.heartbeat2.allow_gateway_injection: true. Ships the plugin skill `heartbeat2:heartbeat2-report-problem`, which drafts a bug report and files it with the GitHub CLI only after the user approves the exact text. Disclosure \u2014 wakes and watchers run full turns on the conversation's own model, billed like any message, at your conversation's context size, with the conversation's normal tools and approval prompts; the agent can arm wakes and watchers itself unless you set agent_can_create to ask_first or no; command watchers run allowlisted read-only commands (default gh pr view/checks, gh run view/list, git ls-remote/status/log) without an approval prompt, with no shell, a sanitized environment (no provider keys, GH_TOKEN or GITHUB_TOKEN) and the process group killed after 30 s, can use your stored git/gh credentials, and `git ls-remote <url>` / `gh -R` can contact any host your machine can reach; URL watchers make the GET requests you or the agent configured, without URL credentials, cookies, auth headers or proxies, always refuse cloud-metadata addresses and refuse private or local addresses unless url_allow_private is on; file watchers refuse paths Hermes blocks from reading; notes, summaries and event payloads are stored in plaintext in the profile's plugin-data; no telemetry.", "maintainer": "100yenadmin", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/electricsheephq/heartbeat2#readme", "version": "0.2.1", "image": "https://raw.githubusercontent.com/electricsheephq/heartbeat2/0d425c8f453852a691b28c4ec21da55586267a90/docs/media/banner.png", "readme": true, "platforms": ["linux", "macos"], "known_issues": ["A wake turn that fails at the provider shows Hermes's own failure notice; the plugin cannot suppress it (NousResearch/hermes-agent#136749). HeartBeat 2.0 backs all wakes off until a model call on the profile succeeds.", "notify=false silences the final reply; platforms that show tool progress by default (Discord, WhatsApp, Matrix) still show a progress bubble per wake turn unless display.platforms.<p>.tool_progress is off (quiet injection requested upstream: NousResearch/hermes-agent#136825).", "Delivers only to messaging-gateway DMs by default (dm_only); CLI, TUI, Desktop, API-server and cron arming are refused until Hermes core supports silent injected turns there.", "When Hermes falls back to another model during a wake turn, its model-fallback notice is posted to the chat, even for a wake that stays silent (NousResearch/hermes-agent#137738)."], "capabilities": {"provides_tools": ["pulse"], "provides_hooks": ["pre_gateway_dispatch", "gateway_platform_event", "pre_llm_call", "pre_api_request", "post_api_request", "transform_llm_output", "on_session_end", "agent_loop_stopped", "on_session_reset", "kanban_task_completed", "kanban_task_blocked", "on_kanban_worker_exited", "subagent_stop", "api_request_error"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-aac", "title": "Hermes AAC", "repo": "https://github.com/TREE-Ind/hermes-aac", "sha": "45d855ff2d8f448e1f98b62870aa72c3a02ea013", "subdir": "", "description": "Communication boards, explicit speech, switch scanning and reviewed AI proposals for Hermes Desktop. Disclosure \u2014 Desktop-only page; Speak sends your message text through the Hermes gateway to the TTS provider configured in Hermes (cloud providers receive it) and the audio plays on the gateway host, which may be remote; the AI helpers open a separate Hermes chat session per request and send your topic or message as a normal agent turn on your model provider; saved phrases and approved boards are kept in plaintext in the plugin's Desktop storage.", "maintainer": "TREE-Ind", "tier": "community", "category": "desktop", "version": "0.1.1", "requires_hermes": ">=0.21.7", "readme": true, "onboarding": false, "platforms": ["windows"], "screenshots": ["https://raw.githubusercontent.com/TREE-Ind/hermes-aac/45d855ff2d8f448e1f98b62870aa72c3a02ea013/evidence/cockpit-1366.png", "https://raw.githubusercontent.com/TREE-Ind/hermes-aac/45d855ff2d8f448e1f98b62870aa72c3a02ea013/evidence/studio-1366.png", "https://raw.githubusercontent.com/TREE-Ind/hermes-aac/45d855ff2d8f448e1f98b62870aa72c3a02ea013/evidence/focus-1366.png"], "known_issues": ["Experimental, nonclinical AAC; requires Hermes Desktop and configured services for optional AI and speech.", "Screenshots are actual React renders with mocked SDK/native boundaries, not live provider proof.", "Saved phrases and approved boards persist locally in plaintext; full config is read-only through SDK.", "Speech is submission acknowledgement only; backend-owned audio may play on a remote gateway host.", "No speech Stop, request-scoped cancellation, completion or later playback error tracking; Stop scanning remains independent.", "No voice catalog or model/provider/settings writes; configure in Hermes Settings.", "Explicit expression tags require a current ElevenLabs v3 config snapshot, not an atomic guarantee or provider attestation."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-activity", "repo": "https://github.com/hassan-kamel/hermes-activity", "sha": "0335e954b3ab00193720205fcdab7e10ae1194f9", "title": "Activity", "description": "Hermes Desktop session analytics and provider-reported usage: annual heatmaps, token mix, model breakdowns and source-period summaries. Disclosure \u2014 reads the selected profile's state.db read-only and, for the Providers tab, an Activity cache under plugin-data/hermes-activity plus the optional Quota quota_cache.json. Fetch provider data runs a local Node.js (22.18+) collector and, only on that explicit click, calls chatgpt.com through Hermes's signed-in Codex request route (requires_auth: openai-codex) and api.commandcode.ai, opencode.ai and ollama.com with the optional API keys you configure as plugin secrets; it stores usage aggregates and hashed key identifiers locally. No other credential reads, telemetry or sign-in flow; remote profiles go through the configured gateway.", "maintainer": "hassan-kamel", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/hassan-kamel/hermes-activity", "version": "0.2.2", "screenshots": ["https://raw.githubusercontent.com/hassan-kamel/hermes-activity/0335e954b3ab00193720205fcdab7e10ae1194f9/assets/activity-preview.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-adaptive-effort", "repo": "https://github.com/atostivint/hermes-adaptive-effort", "sha": "c84f1389670cdd5ec4607b13bd32c4809878c415", "description": "Choose a separate scorer to set the reasoning effort of each Hermes request. Disclosure \u2014 off by default; when a mode is enabled (or on an explicit `/hae probe`), sends the latest user message (or the parent-written subagent goal), truncated to 4000 characters, plus any configured guidance to the scorer you select (TypeSafe Jev at api.typesafe.ai by default, or OpenAI Decisions, OpenRouter, Cloudflare Workers AI, Nace at console.nace.ai, or a custom URL) using that service's key; opt-in settings can also send the target model identity, up to 6 earlier user/assistant text messages (1200 characters each) and a separate continuation question to the same scorer; in Hermes Desktop it also sets the focused chat's session reasoning selector through the gateway `config.set` API after each applied change, and it keeps a prompt-free effort-change history (64 changes \u00d7 64 conversations), per-conversation mode overrides (at most 256 conversations) and per-route cache verdicts built from provider token counters (at most 128 routes) in its plugin data directory.", "maintainer": "atostivint", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/atostivint/hermes-adaptive-effort/blob/c84f1389670cdd5ec4607b13bd32c4809878c415/docs/README.md", "version": "0.4.0", "readme": true, "screenshots": ["https://raw.githubusercontent.com/atostivint/hermes-adaptive-effort/c84f1389670cdd5ec4607b13bd32c4809878c415/docs/images/desktop-routing-mode.png", "https://raw.githubusercontent.com/atostivint/hermes-adaptive-effort/c84f1389670cdd5ec4607b13bd32c4809878c415/docs/images/desktop-route-and-scorer.png", "https://raw.githubusercontent.com/atostivint/hermes-adaptive-effort/c84f1389670cdd5ec4607b13bd32c4809878c415/docs/images/desktop-settings.png", "https://raw.githubusercontent.com/atostivint/hermes-adaptive-effort/c84f1389670cdd5ec4607b13bd32c4809878c415/docs/images/routing-mode-popover.png"], "platforms": [], "title": "Hermes Adaptive Effort", "known_issues": ["Pre-release: live effort acceptance is only partially validated; see the v0.3.0 release notes for the per-route evidence.", "0.4.0 removes the custom `chat_completions` scorer format and OpenRouter chat-model scoring; such configurations fail open (effort unchanged) until moved to a `systemone` endpoint or an OpenRouter decision model."], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end", "on_session_finalize", "on_session_reset", "subagent_start", "subagent_stop", "post_api_request", "api_request_error"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "hermes-agent-builder", "title": "Hermes Agent Builder", "repo": "https://github.com/itsflownium/hermes-agent-builder", "sha": "6ed39da7c7054587cbe2a42e60c3e9cbe4969cf6", "description": "Guided Desktop workspace in BOTS: tailored questions, reference files, editable instructions and capabilities, version comparisons, model-only trials, and native Bot Chat handoff. Saves specialists as separate Hermes profiles and installs the Builder companion plugin into its own bot profile. Disclosure \u2014 \"Talk to Builder\" auto-creates a hermes-builder profile cloned from the active profile with copied .env/auth.json and copies+enables this plugin there outside the catalog installer (uninstall does not remove that copy); \"Save agent\" creates new profiles the same way and rewrites their tool/skill selection.", "maintainer": "itsflownium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/itsflownium/hermes-agent-builder#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/itsflownium/hermes-agent-builder/6ed39da7c7054587cbe2a42e60c3e9cbe4969cf6/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/itsflownium/hermes-agent-builder/6ed39da7c7054587cbe2a42e60c3e9cbe4969cf6/docs/builder.png", "https://raw.githubusercontent.com/itsflownium/hermes-agent-builder/6ed39da7c7054587cbe2a42e60c3e9cbe4969cf6/docs/compare.png"], "readme": true, "platforms": ["macos", "windows"], "known_issues": ["Windows Desktop runtime testing remains; the installer and renderer use portable paths and APIs."], "capabilities": {"provides_tools": ["agent_builder"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-agent-mixer", "repo": "https://github.com/Sahil-SS9/hermes-agent-mixer", "sha": "f1da4ced08326cac33ba7a9fd0d5c1b6acd19f35", "title": "Agent Mixer", "maintainer": "Sahil-SS9", "tier": "community", "category": "general", "version": "0.2.0", "description": "A mixing desk for how much a coding agent may change: four enforced dials (edits, write-scope globs, per-turn line budget, new-dependency policy) with /mixer, live presets, a Desktop dial panel in the composer, a web-dashboard saved-defaults bar and a steering-console page. Also drives Claude Code, Codex and Gemini CLI through the agent-mixer hook command. Disclosure \u2014 enforces edit/scope/line-budget/new-dependency dials in pre_tool_call (blocks, or escalates \"ask\" to Hermes approval, which /yolo skips) and adds a one-line rules context via pre_llm_call when a dial is off its default; per-session dial state is stored under HERMES_HOME/plugin-data/hermes-agent-mixer/sessions/, and the Desktop panel and dashboard bar write the plugin's own saved defaults into config.yaml (plugins.entries.hermes-agent-mixer.settings); the separately installed agent-mixer CLI keeps its own state in ~/.config/agent-mixer and ~/.local/state/agent-mixer, writes hook entries into ~/.claude/settings.json, ~/.claude/commands/mixer.md, ~/.codex/hooks.json or ~/.gemini/settings.json only when run as `agent-mixer install <harness> --yes`, and `agent-mixer ui` serves a token-guarded console on 127.0.0.1:8377.", "docs_url": "https://github.com/Sahil-SS9/hermes-agent-mixer", "image": "https://raw.githubusercontent.com/Sahil-SS9/hermes-agent-mixer/f1da4ced08326cac33ba7a9fd0d5c1b6acd19f35/docs/screenshots/dial-panel-open.png", "screenshots": ["https://raw.githubusercontent.com/Sahil-SS9/hermes-agent-mixer/f1da4ced08326cac33ba7a9fd0d5c1b6acd19f35/docs/screenshots/dial-panel-open.png", "https://raw.githubusercontent.com/Sahil-SS9/hermes-agent-mixer/f1da4ced08326cac33ba7a9fd0d5c1b6acd19f35/docs/screenshots/console-page.png", "https://raw.githubusercontent.com/Sahil-SS9/hermes-agent-mixer/f1da4ced08326cac33ba7a9fd0d5c1b6acd19f35/docs/screenshots/dashboard-tab.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "pre_llm_call", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.6"}, {"name": "hermes-anilist", "repo": "https://github.com/BatataBF/hermes-anilist", "sha": "0081dfd7b45a469eef1ec35d3d0797318694c640", "description": "AniList tracker for Hermes Desktop \u2014 airing countdowns, a season browser, a local or account-backed watchlist, episode alerts and a daily digest, plus agent tools that read your own list and answer about a single show. Disclosure \u2014 stores your pasted AniList token in the active profile .env (sent only to graphql.anilist.co); alerts and the daily digest are Hermes cron jobs it creates on the host you pick, and the digest job asks that host's agent to query the public AniList API itself.", "maintainer": "BatataBF", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/BatataBF/hermes-anilist#readme", "version": "0.9.0", "platforms": [], "image": "https://raw.githubusercontent.com/BatataBF/hermes-anilist/0081dfd7b45a469eef1ec35d3d0797318694c640/docs/screenshots/popover-upcoming.png", "capabilities": {"provides_tools": ["anilist_list", "anilist_show"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-asgard", "title": "Asgard", "repo": "https://github.com/Adolanium/hermes-asgard", "sha": "18eb423f3d044ab7feb100cfde5a1e3e902ace2b", "description": "Twelve Norse gods carved in runestone and wood: Odin, Thor, Freyja, Loki, Frigg, Baldur, Tyr, Heimdall, Hel, Skadi, Freyr and Bragi, as Hermes Desktop themes. Install once, then switch with /skin <name>. Matching terminal skins ship in cli/skins. Disclosure \u2014 theme-only desktop plugin: it registers twelve themes through the plugin SDK, and their stylesheets restyle parts of Desktop's own UI (sidebar art, tabs, composer, wordmark) only while one of its themes is active. It also watches Desktop's active theme: when a terminal skin named asgard-<god> is active, it switches Desktop to that god's theme through the SDK's requestTheme. The terminal skins are plain YAML files the user copies into the Hermes skins folder by hand; the plugin does not install them or write any files. Fonts and art are bundled; no network requests, no agent tools or hooks.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/Adolanium/hermes-asgard#readme", "version": "0.2.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-asgard/18eb423f3d044ab7feb100cfde5a1e3e902ace2b/assets/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/Adolanium/hermes-asgard/18eb423f3d044ab7feb100cfde5a1e3e902ace2b/media/shots/odin.png", "https://raw.githubusercontent.com/Adolanium/hermes-asgard/18eb423f3d044ab7feb100cfde5a1e3e902ace2b/media/shots/thor.png", "https://raw.githubusercontent.com/Adolanium/hermes-asgard/18eb423f3d044ab7feb100cfde5a1e3e902ace2b/media/shots/loki.png", "https://raw.githubusercontent.com/Adolanium/hermes-asgard/18eb423f3d044ab7feb100cfde5a1e3e902ace2b/media/shots/heimdall.png", "https://raw.githubusercontent.com/Adolanium/hermes-asgard/18eb423f3d044ab7feb100cfde5a1e3e902ace2b/media/shots/hel.png", "https://raw.githubusercontent.com/Adolanium/hermes-asgard/18eb423f3d044ab7feb100cfde5a1e3e902ace2b/media/shots/freyja.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-atoll", "title": "Hermes Notch Plugin", "repo": "https://github.com/himanusia/hermes-notch-plugin", "sha": "298a67e9fc1f9e5a4ec821bdce9d516e7e72e968", "description": "Native Hermes Agent plugin that runs the local Atoll notch monitor for Hermes session and turn status on macOS. Disclosure \u2014 macOS only. Starts a detached Node daemon on every Hermes session that reads state.db read-only and sends session titles, model/profile/token stats and a \u226496-char redacted preview of your latest request to the third-party Atoll notch app over localhost. hermes notch setup clones and builds the author's Atoll fork (github.com/himanusia/Atoll at a pinned commit, not reviewed here) with Xcode and installs an unnotarized app to ~/Applications. Node deps install via Hermes's npm ci prompt. Run hermes notch stop before removing.", "maintainer": "himanusia", "tier": "community", "category": "desktop", "version": "0.3.0", "image": "https://raw.githubusercontent.com/himanusia/hermes-notch-plugin/298a67e9fc1f9e5a4ec821bdce9d516e7e72e968/assets/hermes-atoll-thumbnail.jpg", "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-auto-titler", "repo": "https://github.com/Vocllum/hermes-auto-titler", "sha": "42259f5cf346eba307e1cc8cac835203d986bcb6", "version": "0.3.0", "image": "https://raw.githubusercontent.com/Vocllum/hermes-auto-titler/42259f5cf346eba307e1cc8cac835203d986bcb6/docs/catalog-card.png", "description": "Topic-aware session title tracking for Hermes Agent. Hermes generates the first title by default; AutoTitler follows conversation changes and session close without changing the host title-generation switch. Disclosure \u2014 sends excerpts of each conversation (sampled user turns, short assistant replies, compaction summaries) to your Hermes title-generation model in the background, also for up to 200 recent untitled sessions at startup; needs plugins.entries.hermes-auto-titler.llm.allow_task_override (or allow_provider/model_override for a custom route). 0.3 no longer edits config.yaml, but users upgrading from 0.2.x keep auxiliary.title_generation.enabled=false until they re-enable it (/autotitler status shows the fix).", "maintainer": "Vocllum", "tier": "community", "category": "automation", "docs_url": "https://github.com/Vocllum/hermes-auto-titler", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "on_session_end", "on_session_finalize"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-beads", "repo": "https://github.com/jacobhausler/hermes-beads", "sha": "975263183c65b1ef94160344024187b64379dc32", "description": "Native Beads (bd) work-graph plugin: fixed-argv adapter, scoped ready frontier, claim with read-back, guarded writes. Six tools over an explicit store path + actor; honest exit-code map incl. stale-13; plain bd stays fully sufficient (escape hatch). No desktop pane ships yet.", "maintainer": "jacobhausler", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "version": "0.1.2", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["beads_smoke", "beads_frontier", "beads_show", "beads_claim", "beads_update", "beads_comment"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-blogwatcher", "title": "Blogwatcher", "repo": "https://github.com/irfansofyana/hermes-blogwatcher", "sha": "1b6f32afc1a509437a9bc57a078bea99b3d69dab", "description": "A Blogwatcher inbox for Hermes Desktop and web, with themes, read controls and on-demand AI summaries. Disclosure: runs the original Blogwatcher CLI against its database; scans contact subscribed sites; requested summaries fetch public pages and send text to the configured Hermes model after consent, which may incur costs. Summaries are cached locally. No telemetry or self-update.", "maintainer": "irfansofyana", "tier": "community", "category": "desktop", "docs_url": "https://github.com/irfansofyana/hermes-blogwatcher/blob/1b6f32afc1a509437a9bc57a078bea99b3d69dab/README.md", "version": "0.2.0", "screenshots": ["https://raw.githubusercontent.com/irfansofyana/hermes-blogwatcher/1b6f32afc1a509437a9bc57a078bea99b3d69dab/docs/screenshots/follow-hermes.png", "https://raw.githubusercontent.com/irfansofyana/hermes-blogwatcher/1b6f32afc1a509437a9bc57a078bea99b3d69dab/docs/screenshots/light.png", "https://raw.githubusercontent.com/irfansofyana/hermes-blogwatcher/1b6f32afc1a509437a9bc57a078bea99b3d69dab/docs/screenshots/dark.png"], "readme": true, "known_issues": ["Requires the original Hyaxia/blogwatcher CLI on the Hermes backend host; the blogwatcher-cli fork is not supported.", "Remote Desktop clients need desktop/plugin.js copied locally. Restart the dashboard/API server after installing the backend."], "capabilities": {"provides_tools": ["blogwatcher_list_sources", "blogwatcher_list_articles"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.6"}, {"name": "hermes-board", "title": "Board", "repo": "https://github.com/skk2010/hermes-board-plugin", "sha": "feb66592881bf76198cd8d790fd1dae25e5057f6", "description": "A Miro-like board the agent draws with its own tools and you edit in a desktop pane, both sides working on one JSON document. board_apply builds a whole diagram in one call from ordered ops (nodes, edges, free lines, groups, notes, captions, layered auto-layout, bus trunks); board_render writes a PNG for chat or the interactive HTML editor; board_watch reports your own pane edits back to the agent. The pane docks beside the conversation with the same editor, saves your edits, and takes agent updates live. Disclosure \u2014 board_render shells out to a headless Chrome/Chromium already on PATH (nothing is downloaded; private temp profile, sandbox kept unless running as root) for PNG and self-test rendering; boards live in ~/.hermes/board/ shared across profiles (HERMES_BOARD_DIR / HERMES_BOARD_RENDER_DIR / HERMES_BOARD_WATCH override); serves /api/plugins/hermes-board/ on the plugin host; reads this profile's state.db read-only to find the session board_watch should wake; no external network calls and no stored credentials; board_watch's wake into a messaging chat additionally needs plugins.entries.hermes-board.allow_gateway_injection: true.", "maintainer": "skk2010", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "version": "1.9.3", "docs_url": "https://github.com/skk2010/hermes-board-plugin", "image": "https://raw.githubusercontent.com/skk2010/hermes-board-plugin/feb66592881bf76198cd8d790fd1dae25e5057f6/assets/card.png", "screenshots": ["https://raw.githubusercontent.com/skk2010/hermes-board-plugin/feb66592881bf76198cd8d790fd1dae25e5057f6/assets/pane.png"], "platforms": [], "capabilities": {"provides_tools": ["board_list", "board_get", "board_new", "board_delete", "board_apply", "board_render", "board_watch"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-boot-screen", "repo": "https://github.com/OMOX563/hermes-boot-screen", "sha": "4bdfb3c67cd8341c3018631214b8c42d7cf50cb7", "title": "Hermes Boot Screen", "description": "Six-act boot animation for the Hermes desktop app \u2014 black-screen brand reveal, over-exposed whiteout bridge, a technical-dossier plate, an authorization handshake with identity confirmation, and a welcome finale \u2014 with audio cues, theme-aware light/dark plates and Esc/Enter/Space controls. Desktop-only: desktop/plugin.js inside the plugin SDK surface; no agent tools, hooks, middleware or env vars. Fully English UI. Adapted from 6shenhonghong9/dsh-startup-screen (MIT). Disclosure \u2014 on every Desktop launch (default: once per session) it covers the whole window with a full-screen animation that plays audio and spoken narration and waits for Enter/Space/click on two steps (Esc skips); while it is up it captures Enter/Space/Esc at the document level. Turn it off or switch to daily in its Startup Animation settings page.", "maintainer": "OMOX563", "tier": "community", "category": "desktop", "version": "1.1.1", "readme": true}, {"name": "hermes-bot-hq", "repo": "https://github.com/RohanRJ389/hermes-bot-hq", "sha": "b2ef8204974677154a20cd3fe31ffdcc9f90f994", "description": "Desktop fleet page plus a per-bot Home (status, metrics, alerts, tasks, routines, buttons) published by the bot as JSON. Disclosure \u2014 reads each local profile's home files, can run a declared cron routine from the UI on that bot's profile and credentials, and opens chat, a path, or a URL the bot declared; send_prompt buttons send the shown prompt into the bot's Bot Chat. Bot-declared run_action buttons run a script from the bot's home/actions/ folder: a script runs only after the user approves that exact file (SHA-256), is re-approved if it changes, and is limited to 30s and to that folder, but it runs as your user with the Hermes backend's full environment, including provider keys loaded for the profile Hermes was launched with. Approvals are kept under the Hermes root in bot-hq/approvals/. The `hermes hermes-bot-hq setup` command (asks first unless --yes) links the plugin into every profile's plugins folder and enables it there. No database, signup, or telemetry.", "maintainer": "RohanRJ389", "tier": "community", "category": "desktop", "version": "0.4.2", "title": "Bot HQ", "image": "https://raw.githubusercontent.com/RohanRJ389/hermes-bot-hq/b2ef8204974677154a20cd3fe31ffdcc9f90f994/docs/bot-hq-infographic.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-call-ledger", "repo": "https://github.com/skappafrost/hermes-call-ledger", "sha": "c55671dd61becb30a8b4d5e53cba9926938fb299", "description": "Per-call cost ledger for Hermes Desktop: every model call Hermes makes is recorded from the observer hooks (provider, model, tokens, duration, outcome) and paired with the charge the billing provider actually took; works with no billing account, priced by Hermes' own estimate where the price book knows the model. English or Vietnamese; dong or dollars. Disclosure \u2014 three observer hooks (post_api_request, post_auxiliary_call, api_request_error) record per-call metadata from every profile in the install (session id, platform, task, provider, model, token counts, duration, finish reason, context length; never prompt, response or tool-argument text) into one shared SQLite ledger at <install root>/plugin-data/call-ledger/calls.sqlite, and import this plugin's own older per-profile ledgers into it once. It caches the vilao.ai model list there and the USD-to-VND rate under the active profile's plugin-data/call-ledger. Network is GET-only: vilao.ai (wallet balance, per-request usage, consumer keys) with VILAO_PAT read through Hermes's secret scope (vilao issues one full-scope token per account, including wallet writes; this plugin only reads), the public vilao.ai model list with no credential, and open.er-api.com for the dollar rate. The first full billing pull pages back through up to ten years of the account's usage. Nothing runs while the Desktop page is closed. Derived from hermes-resetwatch (Adolanium, MIT).", "maintainer": "skappafrost", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/skappafrost/hermes-call-ledger#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["post_api_request", "post_auxiliary_call", "api_request_error"], "provides_middleware": [], "requires_env": ["VILAO_PAT"]}}, {"name": "hermes-chat-share", "repo": "https://github.com/smallmj/hermes-chat-share", "sha": "17c3edbf7f37ea813581cf65f56bc332fe892873", "subdir": "", "description": "Share Hermes Desktop conversations as long PNG screenshots, self-contained HTML, or Markdown \u2014 per-turn selection, turn gutter, search, per-turn collapsing and session metadata. The Hermes Desktop counterpart of dsh-share. Disclosure \u2014 makes no network calls; reads the conversation you share (and the session list, for its title) through the gateway's session.history / session.info / session.list RPCs; writes to the clipboard or downloads a file only when you trigger an export. HTML exports keep the conversation's image and link URLs, which load when the file is opened.", "maintainer": "smallmj", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/smallmj/hermes-chat-share#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/smallmj/hermes-chat-share/17c3edbf7f37ea813581cf65f56bc332fe892873/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/smallmj/hermes-chat-share/17c3edbf7f37ea813581cf65f56bc332fe892873/sample.png"], "readme": true, "platforms": ["linux", "macos", "windows"], "title": "Chat Share", "known_issues": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-cloud-file-manager", "title": "Cloud File Manager", "repo": "https://github.com/electricsheephq/hermes-cloud-file-manager", "sha": "9678d440f0c1735996d2a0b1a5e97fe58013fddd", "description": "Cloud Files for Hermes Desktop \u2014 browse, search and sort by date, create folders and bulk-upload files and whole folders to the machine your agent runs on, preview its images, PDFs and code files, download a file, read and edit its Markdown and text files (view first; nothing is written until you press Save in the review, which shows the line diff for files up to 20,000 lines), drag files into the chat, import files from the agent's own Google Drive, and hand the agent file locations from the chat + menu without re-uploading. Built for remote gateways (token or sign-in); works locally too. Ships one plugin skill, hermes-cloud-file-manager:cloud-file-manager-report-problem, which drafts a bug report and files it with the GitHub CLI only after the user approves the exact text. Disclosure \u2014 adds a file API to the gateway (dashboard plugin routes under the gateway's existing auth) over the agent's working folders: the configured roots, else terminal.cwd, TERMINAL_CWD or MESSAGING_CWD, else the gateway user's home with its dot-entries hidden. It lists, sorts and searches those folders, reads the files you open or preview (Markdown and .txt files up to 1 MiB in the editor; the first 1 MiB of other code and text files; images and PDFs up to 10 MiB), creates folders, and writes uploads, Drive imports and editor saves (staged as hidden .cfm-* temp files in the destination folder; a name clash keeps both files). It overwrites only an existing .md/.markdown/.txt file you open and explicitly Save in its editor (refused if the file changed since you opened it). It has no delete action: it removes only its own .cfm-* staging files and folders (aborted ones, and stale ones over a day old) and, when an upload or import fails to publish, the empty file it had reserved for it. It never follows links out of those folders, and its file API never exposes the agent's Hermes home apart from a working folder set inside it (roots, terminal.cwd, or a workspace/ folder it creates when the working folder would be the home itself). Download and drag into the chat use Hermes Desktop's own authenticated file download and @file/@folder references; the plugin adds no route for them. Desktop listens for the agent's tool-completion events to refresh the open folder. Apart from Desktop's calls to the gateway and the report skill's GitHub requests, its only network use is Google Drive, read-only, through the agent's own google-workspace skill, whose scripts (from skills/productivity/google-workspace in the agent's Hermes home, else the copy bundled with Hermes) it runs with the gateway's Python and a minimal environment without API keys, buffering their output in the gateway's temp directory; the plugin never reads the Google token. While Desktop is open it re-checks the plugin and Drive sign-in about once a minute. The report skill runs hermes --version, hermes plugins list and hermes logs (filtered to this plugin), may save its search words, title and draft as local files, and searches electricsheephq/hermes-cloud-file-manager issues with gh or a web tool before drafting; it posts a public issue or comment there only after the user approves the exact title and text.", "maintainer": "100yenadmin", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/electricsheephq/hermes-cloud-file-manager#readme", "version": "0.5.0", "image": "https://raw.githubusercontent.com/electricsheephq/hermes-cloud-file-manager/9678d440f0c1735996d2a0b1a5e97fe58013fddd/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/electricsheephq/hermes-cloud-file-manager/9678d440f0c1735996d2a0b1a5e97fe58013fddd/docs/media/screenshot-page.png", "https://raw.githubusercontent.com/electricsheephq/hermes-cloud-file-manager/9678d440f0c1735996d2a0b1a5e97fe58013fddd/docs/media/screenshot-upload.png", "https://raw.githubusercontent.com/electricsheephq/hermes-cloud-file-manager/9678d440f0c1735996d2a0b1a5e97fe58013fddd/docs/media/screenshot-picker.png", "https://raw.githubusercontent.com/electricsheephq/hermes-cloud-file-manager/9678d440f0c1735996d2a0b1a5e97fe58013fddd/docs/media/screenshot-drive-page.png", "https://raw.githubusercontent.com/electricsheephq/hermes-cloud-file-manager/9678d440f0c1735996d2a0b1a5e97fe58013fddd/docs/media/screenshot-editor-review.png", "https://raw.githubusercontent.com/electricsheephq/hermes-cloud-file-manager/9678d440f0c1735996d2a0b1a5e97fe58013fddd/docs/media/screenshot-chat.png"], "readme": true, "platforms": [], "known_issues": ["In a split layout with two agents' chats side by side, a drag started while one agent's chat is in focus can be dropped into the other agent's chat; the reference then names a path on the wrong machine (no file moves between agents). Use Add to chat, or focus the target chat before dragging (electricsheephq/hermes-cloud-file-manager#55)."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-codex-resets", "repo": "https://github.com/sxuff/hermes-codex-resets", "sha": "008f4fe2549bedd5a09ef0ce9615594ea388ffed", "version": "0.1.0", "title": "Codex Resets", "description": "Know the moment OpenAI resets your Codex usage limits. A status-bar chip counts the time since the last reset; when a new one lands, a small card rises out of it (chip-only while you type), with a history page of every reset. Disclosure \u2014 polls the public codex-resets.com API every 60 s and loads fonts from Google Fonts; sends nothing about you or your sessions.", "maintainer": "sxuff", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/sxuff/hermes-codex-resets#readme", "image": "https://raw.githubusercontent.com/sxuff/hermes-codex-resets/008f4fe2549bedd5a09ef0ce9615594ea388ffed/artifacts/banner.png", "screenshots": ["https://raw.githubusercontent.com/sxuff/hermes-codex-resets/008f4fe2549bedd5a09ef0ce9615594ea388ffed/artifacts/card.png", "https://raw.githubusercontent.com/sxuff/hermes-codex-resets/008f4fe2549bedd5a09ef0ce9615594ea388ffed/artifacts/reset.png", "https://raw.githubusercontent.com/sxuff/hermes-codex-resets/008f4fe2549bedd5a09ef0ce9615594ea388ffed/artifacts/banked.png", "https://raw.githubusercontent.com/sxuff/hermes-codex-resets/008f4fe2549bedd5a09ef0ce9615594ea388ffed/artifacts/watch.png", "https://raw.githubusercontent.com/sxuff/hermes-codex-resets/008f4fe2549bedd5a09ef0ce9615594ea388ffed/artifacts/typing.png", "https://raw.githubusercontent.com/sxuff/hermes-codex-resets/008f4fe2549bedd5a09ef0ce9615594ea388ffed/artifacts/history.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-context-overview", "version": "1.2.5", "repo": "https://github.com/AsoTora/hermes-context-overview", "sha": "286c9dab17576ea641bc7448dd4835882e34e107", "title": "Context Overview", "description": "Context window usage at a glance: a Context button in the status bar shows tokens used vs. budget, percent full, free space and an estimated breakdown by category, plus context-file sources. Works during a running turn. Read-only token/usage monitor, no backend.", "maintainer": "AsoTora", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/AsoTora/hermes-context-overview#readme", "readme": true, "platforms": [], "screenshots": ["https://raw.githubusercontent.com/AsoTora/hermes-context-overview/286c9dab17576ea641bc7448dd4835882e34e107/docs/screenshots/overview-dark.png", "https://raw.githubusercontent.com/AsoTora/hermes-context-overview/286c9dab17576ea641bc7448dd4835882e34e107/docs/screenshots/overview-light.png", "https://raw.githubusercontent.com/AsoTora/hermes-context-overview/286c9dab17576ea641bc7448dd4835882e34e107/docs/screenshots/themes-dark.png", "https://raw.githubusercontent.com/AsoTora/hermes-context-overview/286c9dab17576ea641bc7448dd4835882e34e107/docs/screenshots/themes-light.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "image": "https://raw.githubusercontent.com/AsoTora/hermes-context-overview/286c9dab17576ea641bc7448dd4835882e34e107/docs/banner.png"}, {"name": "hermes-council", "repo": "https://github.com/girayk/hermes-council", "sha": "18a66633acc045c251063721a1cf26f9a46d29de", "description": "LLM Council (karpathy/llm-council) as a Hermes plugin. Four fixed advisor seats (First-Principles Analyst, Skeptic, Pragmatist, Researcher) answer in parallel, anonymously review and rank each other, and a Chairman model synthesizes the final answer. Members borrow your existing provider credentials - no API keys. Registers a Council group in every model menu, a council_deliberate tool, /council, hermes council CLI, and a desktop panel. Disclosure \u2014 council_deliberate and the Council model fan each prompt (as a session model, the whole conversation) out to every seat, judge and chairman model you assign, up to 2N+1 billed calls per turn on your existing provider credentials; it also adds a non-secret \"council\" marker row to auth.json and keeps run history in $HERMES_HOME/council/runs/.", "maintainer": "girayk", "tier": "community", "category": "models", "version": "1.0.0", "docs_url": "https://github.com/girayk/hermes-council#readme", "capabilities": {"provides_tools": ["council_deliberate"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.4"}, {"name": "hermes-cron", "repo": "https://github.com/itpartypattaya/hermes-cron", "sha": "2426b4b26a95e98112ac73415dedc8e0dd25c602", "description": "Operating skill for Hermes cron: lifecycle rules (pause vs disable vs remove, `in 30m` vs `30m`), four ways to avoid needless LLM runs (no_agent, wakeAgent pre-check, monitor, [SILENT]), verify-after-change, a layered runbook and a read-only doctor that complements `hermes cron doctor` and reports one error across several jobs as one scheduler fault and a cron store that cannot be written. Portable Agent Plugins v1 package (plugin.json + skills/); no tools, hooks, middleware or env vars. Disclosure \u2014 skill only, no network; the bundled doctor reads ~/.hermes/cron/jobs.json, ticker stamps and executions.db (or a named profile's store with --profile) read-only, checks the cron directory's permissions and free space without writing, and runs the local hermes cron doctor (argument list, no shell), whose job loader may repair malformed jobs.json entries (--no-builtin skips it).", "maintainer": "itpartypattaya", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/itpartypattaya/hermes-cron/blob/2426b4b26a95e98112ac73415dedc8e0dd25c602/README.md", "version": "1.5.2", "image": "https://raw.githubusercontent.com/itpartypattaya/hermes-cron/2426b4b26a95e98112ac73415dedc8e0dd25c602/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/itpartypattaya/hermes-cron/2426b4b26a95e98112ac73415dedc8e0dd25c602/docs/modes.png", "https://raw.githubusercontent.com/itpartypattaya/hermes-cron/2426b4b26a95e98112ac73415dedc8e0dd25c602/docs/doctor.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-desktop-camera", "repo": "https://github.com/BrokeSkill/Hermes-Camera", "sha": "ce9e8b914cb73ca88e797d89124f6add516bf823", "description": "A camera button for the Hermes Desktop composer. Open the preview, take a photo, and the frame lands in the composer as an image attachment, ready to send.", "maintainer": "BrokeSkill", "tier": "community", "category": "desktop", "version": "0.1.0", "image": "https://raw.githubusercontent.com/BrokeSkill/Hermes-Camera/ce9e8b914cb73ca88e797d89124f6add516bf823/docs/demo.gif", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-discord-rpc", "repo": "https://github.com/DarRahman/hermes-discord-presence", "sha": "fb49ff562015b4ae3ed88b2306f2c1de518bfb8b", "description": "Native Discord Rich Presence (RPC) integration for Hermes Agent \u2014 real-time session, model, token, and tool tracking with local-only IPC. Disclosure \u2014 publishes your most recent session title (or, in full title mode, the workspace folder name), model name and token total to the local Discord client as Rich Presence every 3 s (visible to other Discord users); opt-in settings also publish the git branch and a \"View Repository\" button with the public github.com/gitlab.com remote URL (credentials, ports and other hosts stripped); reads ~/.hermes/state.db read-only; reads the active workspace's .git/HEAD and .git/config read-only to resolve repository and branch; on Linux may scan running Discord processes' environment via psutil to find XDG_RUNTIME_DIR; writes a small presence-ownership file in XDG_RUNTIME_DIR (or the system temp dir) and, under herdr, queries the local HERDR_SOCKET_PATH socket for pane focus.", "maintainer": "DarRahman", "tier": "community", "version": "1.3.0", "category": "general", "docs_url": "https://github.com/DarRahman/hermes-discord-presence/blob/main/README.md", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "pre_tool_call", "post_tool_call", "on_session_end", "on_session_finalize"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-dpapi-secrets", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "dpapi-secrets", "description": "Resolve Hermes environment variables at startup from a single secret file encrypted with the Windows Data Protection API, instead of keeping provider keys in plaintext in .env or auth.json. Config is secrets.dpapi.map, an ENV_VAR -> store-name mapping (bare names or dpapi:// names) plus an optional file path (default <HERMES_HOME>/secrets.dpapi). The file is one DPAPI blob keyed by the current Windows user profile, so it is unreadable by another Windows account and worthless off the machine; it is written by the bundled CLI (python -m hermes_dpapi_secrets set NAME, value read from a prompt or stdin, never from argv) and only read at runtime. Mapped names that are missing or empty are skipped with a warning; a file that is not ours, a blob this user cannot decrypt, or a payload that is not a flat string map is reported as an error with nothing injected. Disclosure - this source decrypts a file for every Hermes process that enables it: resolved values become environment variables of the Hermes process and its children, exactly like .env entries, so anything that can read that environment can see them. User-scope encryption only (the machine-wide flag is never used and is not exposed), and the at-rest protection is a bar for backups, cloud sync and dotfiles, not a boundary against code already running as the same user. Stdlib-only (ctypes): no Python dependencies, no subprocesses, no network calls, no self-update. Windows only. Applying fetched values stays the orchestrator's job; the plugin never writes os.environ itself. Disclosure \u2014 decrypts a DPAPI-encrypted secret file (default <HERMES_HOME>/secrets.dpapi) at startup for every Hermes process that enables it, and the resolved values become environment variables of Hermes and its child processes like `.env` entries; the encryption is per Windows user and protects backups, cloud sync and copied files, not against other code running as the same user. Local only: no network calls, no subprocesses.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/dpapi-secrets", "version": "0.1.0", "platforms": ["windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-dreaming", "repo": "https://github.com/itpartypattaya/hermes-dreaming", "sha": "6d056e3311116cd6d5d94d5b0e583cc173c41a74", "description": "Nightly deterministic memory consolidation (\"dreaming\"): corroborates candidate facts with what humans actually said on distinct days, proposes the few worth keeping with a verbatim edit anchor, asks whether stale memory entries still hold, and wakes the agent only when there is work \u2014 including a memory file close to its char limit. Fact sources: the holographic store, a SQLite or JSONL export, or none. Secrets and instructions are screened by the dream's own rules plus a verbatim copy of the holographic plugin's screen (scripts/holo_screen.py, MIT, same maintainer), applied to stored facts and human messages before anything reaches memory, the report or the model. Portable Agent Plugins v1 package (plugin.json + skills/); no tools, hooks, middleware or env vars. Disclosure \u2014 by default the scripts make no network or LLM calls and open state.db and every fact store read-only (SQLite mode=ro; with holographic >= 0.15.0 including its fact_versions/fact_confirmations tables, to say who stands behind a fact); they also read Hermes config.yaml's memory/timezone keys and the holographic plugin's db_path/scope/cron_writes/min_trust_threshold (the floor recall applies, so a rejected fact is only reported when the store still trusts it) and, to say so in install.py --check, embeddings/mirror_memory_writes, the pending/memory approval queue, cron/jobs.json (to find their own jobs) and \u2014 only when chat_stores is set, with holographic scope user/chat/thread \u2014 the per-chat databases next to the store (counts of every one; facts of the chats listed in promote_from). An optional cloud judge (judge in dreaming.json, off by default; off, its code is not even loaded) may, once the owner enables it, send for each mention the rules counted the fact's text and that person's own words (no reply quote, link, id, sender or time; names inside the text may be included; screened for secrets and instructions first), only from the chats, sources and chat stores the owner lists, over HTTPS to the providers the owner lists, in the owner's order: OpenRouter's Decisions API (model typesafe/jev-1.14, Jev by TypeSafe; the data reaches OpenRouter and TypeSafe) and/or OpenAI's Decisions API (model gpt-6-luna); when the first gives no usable answer the same pair may reach the next. A verdict can only remove a counted mention \u2014 from promotion, confirmation, fact decay, \"said again\" after a rejection, the selection of new facts and conflicts, and evidence. Keys OPENROUTER_API_KEY / OPENAI_API_KEY are read from the environment or, since Hermes withholds these provider keys from cron scripts, straight from their own line in $HERMES_HOME/.env; the judge's calls are billed to those keys. It keeps a 90-day verdict cache and a 90-day local journal of the pairs sent in $HERMES_HOME/cache (the journal is deleted on nights the judge is off); the nightly spending cap ($0.05 by default) is soft; data already sent cannot be recalled and falls under the providers' retention terms. The user-run installer copies three gate scripts into $HERMES_HOME/scripts, seeds $HERMES_HOME/dreaming.json and, through Hermes' cron Python API, creates (or with --rebind re-points) two agent cron jobs bound to this plugin's own skill with only the memory toolset, plus one no_agent job (every 15 min, no model) that reads the fact stores to keep a hash index of diary lines and, for facts holographic >= 0.8.0 has forgotten, rewrites the dream's own cache files, judge files and diary without them, deletes the output files of the dream's own cron jobs that mention them (by id or verbatim text) and deletes the set-aside copies of its own broken state files; with a chat --deliver target the reports are attached as a session you can reply to. The agent runs send recent human messages (up to 200 / 40k chars, each with its chat type and sender id) and fact snippets to your configured model; state goes to $HERMES_HOME/cache and a diary to $HERMES_HOME/memories/DREAMS.md (configurable); memory files are changed by the agent only through the regular memory tool, and with the holographic provider it also adds candidate facts via fact_store (with holographic >= 0.15.0 marked said or inferred; with holographic >= 0.8.0 also change / end / correct / forget, the last three only on a human's own answer; forget is irreversible), lowers trust on human-rejected facts via fact_feedback, with holographic >= 0.15.0 raises trust (fact_feedback confirmed, +0.05, at most 10 facts a night) on facts people repeated on two or more different days and, when keywords.enabled is set (off by default), adds search keywords to facts via fact_store update.", "maintainer": "itpartypattaya", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/itpartypattaya/hermes-dreaming/blob/6d056e3311116cd6d5d94d5b0e583cc173c41a74/README.md", "version": "3.3.4", "image": "https://raw.githubusercontent.com/itpartypattaya/hermes-dreaming/6d056e3311116cd6d5d94d5b0e583cc173c41a74/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/itpartypattaya/hermes-dreaming/6d056e3311116cd6d5d94d5b0e583cc173c41a74/docs/overview.png", "https://raw.githubusercontent.com/itpartypattaya/hermes-dreaming/6d056e3311116cd6d5d94d5b0e583cc173c41a74/docs/lifecycle.png", "https://raw.githubusercontent.com/itpartypattaya/hermes-dreaming/6d056e3311116cd6d5d94d5b0e583cc173c41a74/docs/files.png", "https://raw.githubusercontent.com/itpartypattaya/hermes-dreaming/6d056e3311116cd6d5d94d5b0e583cc173c41a74/docs/judge.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-experientiallabs", "repo": "https://github.com/kyoto-aircon/hermes-experientiallabs", "sha": "0d26c3eac2965105a507f6ed90e046bf6f981056", "description": "Experiential Labs - OpenAI-compatible multi-model gateway provider (chat, /model picker, aux and curated fallback models, /usage wallet snapshot). All network calls go to api.experientiallabs.ai - /v1 chat + models via Hermes' own transport, /api/v1/credits and /api/v1/key only when /usage runs; no telemetry; credentials resolve through Hermes routes (hermes auth / .env). Disclosure \u2014 When you pick Experiential Labs as your model, every prompt, tool result and attachment of that session goes to api.experientiallabs.ai, a third-party gateway that routes to upstream model vendors. /usage sends your key to its Cost API (GET /credits and /key) or to the cost_api_base you set. Independent integration, not affiliated with Experiential Labs.", "maintainer": "kyoto-aircon", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "version": "0.4.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["EXPLABS_API_KEY"]}}, {"name": "hermes-federated-search", "repo": "https://github.com/kumaxs/hermes-federated-search", "sha": "566b3ccc6aeff7e39c19dcfd779ade107827043c", "description": "Federated web search backend (provider name `federated`): fans one query out to multiple configured search backends in parallel and returns merged, deduplicated, relevance-ranked results (keyword scoring; optional LLM re-rank with automatic fallback). Phase 2 \u2014 official settings-page exposure (config_schema, six keys) merged with the legacy web.federated block, and per-line multi-card credential pools (environment-variable names only) with automatic failover and host-aligned cooldowns. Phase 3 \u2014 a desktop card config page (Settings \u2192 Plugins; opt-in via Settings \u2192 Skills & Tools \u2192 Plugins): one card per line, two-level membership checkboxes (backends / credentials), add/remove lines and keys, a per-line Key rotation strategy (pool_strategy), an LLM ranker model picker (seventh schema key `ranker`), and a current-settings string with paste import; no type picker/badges (`type` round-trips verbatim); every edit serializes back to the settings tree (string \u2194 UI parity). The LLM re-rank request pins thinking off (`reasoning_effort=off`) and the card page states it. Disclosure \u2014 reads the operator's config.yaml (read-only) for its own settings (web.federated and plugins.entries.hermes-federated-search.settings); sends the query to the operator-configured sub-backends (registered providers or custom HTTP endpoints); no telemetry, no subprocesses, no credential storage (key values stay in the runtime environment).", "maintainer": "kumaxs", "tier": "community", "category": "web", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/kumaxs/hermes-federated-search#readme", "version": "1.1.2", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-field-notes", "repo": "https://github.com/itpartypattaya/hermes-field-notes", "sha": "74b566dd49ce6a9f249b7d1e5e12d25895592d42", "description": "Field notes for a Hermes install: search known pitfalls before debugging and record new ones with root cause; register every local core edit as a patch note with a declarative checks file, then verify read-only after each hermes update (OK / MISSING / UPSTREAMED / N/A / UNKNOWN with reason) and list core files changed outside the registry. Ships 42 pitfalls and 10 patch recipes checked against 0.22.0. Optional pinned Telegram dashboard edited in place by an hourly no_agent cron job. Portable Agent Plugins v1 package (plugin.json + skills/); no tools, hooks, middleware or env vars; never edits the core or runs patch scripts. Disclosure \u2014 its scripts only read the Hermes core (pyproject.toml, read-only git status/diff) and never edit it or run patch scripts; the skill does walk the agent through hand-editing core files from its patch recipes and re-running the owner's re-apply scripts, each only after the user says yes. Network: Telegram Bot API only when the dashboard is enabled (reuses the agent's TELEGRAM_BOT_TOKEN from env or ~/.hermes/.env), and the public GitHub API without credentials (latest release plus compare against the installed commit SHA, cached 12 h; upstream.check=false disables). Writes: the notes store (~/.hermes/field-notes), ~/.hermes/field-notes.json, state and lock files in ~/.hermes/cache, a copy of the cron script in ~/.hermes/scripts when install.py runs (the skill runs it on first use), and one hourly no_agent cron job only when the user runs install_cron.py (it reads ~/.hermes/installs/*/facts.json to find Hermes' own Python and re-runs itself with it). Without a dashboard chat, install_cron.py sends the job's alerts to the Telegram home channel when TELEGRAM_HOME_CHANNEL is set (read from env or ~/.hermes/.env), else local.", "maintainer": "itpartypattaya", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/itpartypattaya/hermes-field-notes/blob/74b566dd49ce6a9f249b7d1e5e12d25895592d42/README.md", "version": "1.2.6", "image": "https://raw.githubusercontent.com/itpartypattaya/hermes-field-notes/74b566dd49ce6a9f249b7d1e5e12d25895592d42/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/itpartypattaya/hermes-field-notes/74b566dd49ce6a9f249b7d1e5e12d25895592d42/docs/how-it-works.png", "https://raw.githubusercontent.com/itpartypattaya/hermes-field-notes/74b566dd49ce6a9f249b7d1e5e12d25895592d42/docs/patch-lifecycle.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-fleet-connector", "title": "Hermes Fleet Connector", "repo": "https://github.com/tony-simons-aiowa/hermes-fleet-connector", "sha": "9a4b6f76c4c880d5cade1a0f43b5749112cb7be9", "description": "Owner-approved universal phone pairing and bundled read-only Live Operations reporting for selected Hermes profiles. Disclosure \u2014 paired phones get broad fleet:operator access over the internet, including cron jobs (unattended runs), Kanban task dispatch and media reads, and see live session titles/previews and subagent goals from the profiles you select for reporting; any messaging account you make an owner (with a one-time claim code from `hermes fleet claim`) can create pairing links and approve phones from a private chat, so that account's security is your host's security. Runs an explicitly activated background connector/reverse proxy behind your HTTPS origin and may launch a local Hermes backend; legacy QR flow opens a private local browser. Keeps an owner-only control socket in the system temp directory, plus pairing/owner state and shared local snapshots; reads selected profiles' session registries through private read-only imports. `hermes fleet reporting configure --apply` edits the selected profiles' config.yaml (with a backup). Local idle/retirement maintenance is explicit and not exposed to phones. Reporting adds no control power.", "maintainer": "tony-simons-aiowa", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.6", "version": "0.3.0", "readme": true, "platforms": ["linux", "macos"], "known_issues": ["Native platform/auth-provider operation requires plugins.isolation: in_process; host-isolated and mixed/multiplexed reporting contexts fail closed. Isolation is never downgraded.", "macOS local acceptance includes existing phone pairing continuity and nine healthy idle reporting processes; Linux and other runtime/OS results are separate CI evidence. Active agent/delegation acceptance is not claimed.", "Private read-only Hermes registry imports can break on future releases. Validator retains a service caution and private-import warnings; no core runtime override is detected.", "Trusted HTTPS origin reachable from host and phone is required. Legacy QR display additionally requires qrencode and an authenticated GUI/browser; terminal approval-code pairing does not require Telegram. Native Windows is unsupported; WSL browser display is experimental."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-gemini-live", "repo": "https://github.com/skappafrost/hermes-gemini-live", "sha": "cf549e7f8af858568936ccb434c7e1104eb200e9", "description": "Realtime duplex voice with the Gemini Live API, built around handing real work to Hermes. A single control in the composer (not a floating panel): tap, speak, hear the model, and when the ask needs files, a terminal, the web or memory the voice model delegates the job to the api server and keeps talking, reading the outcome aloud when it lands. Three verbs rather than thirty schemas \u2014 hermes_task starts, hermes_tasks reads the call's task board, and hermes_task_update denies, steers or stops a task. A task that stops to ask permission reaches the user as a spoken prompt and a \"Hermes needs you\" indicator with Approve and Deny buttons; only the user's press approves it, never the voice model. Multi-task is one Live session plus a board, not a session per task. Mute drops the uplink without hanging up, and the call survives composer remounts, so opening a session mid-sentence does not kill it. Full-proxy architecture: the plugin backend owns the upstream Live socket and the key, and the renderer is never given either, because the Live API carries the credential in the socket URL. Ships no Python dependencies of its own, which keeps it out of the uv workspace and lets one clone serve several profiles. Tested model behaviour is published in the README, including that gemini-3.8-live-extended-thinking accepts a function declaration and then delegates only about 2 times in 5, which is why gemini-3.8-live is the default. Disclosure \u2014 pressing Start captures microphone audio and streams it through the local backend to generativelanguage.googleapis.com using GEMINI_API_KEY from the Hermes home's .env; delegated work runs as a Hermes run in the serving profile's own memory with the profile's full toolset via the local api_server and API_SERVER_KEY, and those runs' results (up to 4000 characters each), the task board and approval prompts are sent back to Gemini as text. Nothing is sent anywhere else and no telemetry is emitted.", "maintainer": "skappafrost", "tier": "community", "version": "0.1.0", "category": "voice", "docs_url": "https://github.com/skappafrost/hermes-gemini-live#readme", "requires_hermes": ">=0.21.5", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GEMINI_API_KEY"]}}, {"name": "hermes-gensyn-delphi", "repo": "https://github.com/TakeshiTGAL/hermes-gensyn-plugins", "sha": "9325a7b15d815ca05983885ddd6615eae5f2b7a6", "subdir": "packages/delphi", "description": "Seven read-only tools. Disclosure \u2014 Seven read-only tools for Gensyn Delphi prediction markets; no funds move and nothing is signed or sent. Needs Node.js 20.18+ and a manual `npm ci --ignore-scripts` in the plugin folder (installs the pinned @gensyn-ai/gensyn-delphi-sdk and its locked npm deps) before the tools work. Runs a local Node subprocess per call (25 s deadline, not a sandbox). Sends your DELPHI_API_ACCESS_KEY only to delphi-api.gensyn.ai (testnet) or api.delphi.fyi (mainnet); history and quotes read api.goldsky.com and gensyn-testnet/mainnet.g.alchemy.com without the key, and quotes use a throwaway in-memory key the SDK requires. Tools are on for every surface by default, including messaging gateways, where anyone admitted can run these reads on the owner's key (rate limit 30 requests per minute per process); disable per surface with `hermes tools`.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "version": "0.2.0", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["delphi_list_markets", "delphi_get_market", "delphi_get_positions", "delphi_query_subgraph", "delphi_compute_edge", "delphi_quote_buy", "delphi_quote_sell"], "provides_hooks": ["transform_tool_result"], "provides_middleware": [], "requires_env": ["DELPHI_API_ACCESS_KEY", "DELPHI_NETWORK", "DELPHI_WALLET_ADDRESS"]}}, {"name": "hermes-gensyn-ree", "repo": "https://github.com/TakeshiTGAL/hermes-gensyn-plugins", "sha": "9325a7b15d815ca05983885ddd6615eae5f2b7a6", "subdir": "packages/ree", "description": "ree_validate_receipt, ree_verify_receipt, ree_infer. Validate does not re-execute and does not stand behind text_output, finish_reason, token_count, model.name, or ree_version. Verify re-executes on CPU. Infer runs one of three small models and writes one receipt. Disclosure \u2014 Starts containers from the local image gensynai/ree:v0.8.0 (pinned by digest) and never pulls it; running docker pull yourself is consent to the REE-Binary-License. ree_verify_receipt and ree_infer mount ~/.cache/gensyn and ~/.cache/huggingface read-write (a Hugging Face token file stored there is visible to the container; no token is passed in the environment), may download Hugging Face weights for any model a receipt names, and their container network is not limited to Hugging Face; they ask for Hermes approval on every call and refuse under cron, yolo, approvals off, single-query, unattended runs, host isolation, or when the approval API is missing. ree_validate_receipt runs with network none, does not ask, and returns no receipt text. Any person admitted to one of your gateways can call these tools and approve containers on your Docker daemon; disable per surface with hermes tools. Choosing \"always\" adds one config.yaml allowlist line per call and never covers the next call. New receipts and temporary work files are written under ~/.cache/hermes-ree; nothing is stored under HERMES_HOME. The container is not a hostile-code sandbox. No cron is created.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "version": "0.1.0", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["ree_validate_receipt", "ree_verify_receipt", "ree_infer"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-guide", "repo": "https://github.com/iap/hermes-guide", "sha": "5a3d45d8f122d0e246d7009b7dc4f00d2e7fe07b", "description": "Read-only diagnostics for Hermes configuration: /hermes-doctor in-session and hermes guide in a terminal. Nine read-only health checks (config, mcp, skills, commands, hooks, plugins, memories, sessions, update) and points to 22 troubleshooting skills, installed separately as a skills tap, for what the built-in doctor doesn't cover. Complements \u2014 never replaces \u2014 hermes doctor. Disclosure \u2014 reads config.yaml, SKILL.md frontmatter, skill bundles, plugin manifests, the shell-hooks allowlist and the built-in MEMORY.md/USER.md stores read-only (the report quotes short memory snippets); the sessions scope reads the tail of logs/agent.log read-only for runaway-session signatures (session ids, model names and token counts appear in the report); the update scope reads the update-lock record in the co-located hermes-agent checkout under $HERMES_HOME and probes it \u2014 owner-PID liveness, then a brief lock acquisition it releases immediately, opening the lock file writable, with a read-only fallback for a root-owned lock on POSIX (writes no content, never deletes the lock); registers one read-only plugin skill, hermes-guide:start, listed in model sessions while the plugin is enabled; /hermes-doctor and hermes guide run hermes config path as a subprocess (argument list, no shell); the default hooks check reads hook configuration, consent state and the exec bit in-process and executes nothing, while hooks --deep runs hermes hooks doctor, which executes every approved shell hook once with a synthetic payload (--fast starts no subprocess and executes no hook); /hermes-doctor and hermes guide (except with --fast or --json) also run git ls-remote once per process against the plugin's GitHub repo to print a newer-release notice (no download, no local writes); with opt-in proactive: true it runs the checks (including the agent.log scan and the update-lock probe) in-process at each session start/end (no hooks executed, no subprocesses, no network). The 22 troubleshooting skills are not loaded by the plugin: they install separately from the repo as a skills tap, which this entry's pin does not cover.", "maintainer": "iap", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.0", "version": "0.8.11", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start (opt-in proactive mode)", "on_session_end (opt-in proactive mode)"], "provides_middleware": [], "requires_env": []}, "docs_url": "https://github.com/iap/hermes-guide#readme"}, {"name": "hermes-herald", "repo": "https://github.com/bennybuoy/hermes-herald", "sha": "1d185a9e0f4fbfa141447be401903cc80407e1cb", "description": "Cross-profile agent dispatch for Hermes Agent \u2014 12 tools for agents talking to agents: async dispatch with SSE completion, synchronous multi-turn chat, model-selectable in-process subagents, a durable SQLite run ledger, fail-closed per-target model-route discovery, and host-owned bare LLM inference. Disclosure \u2014 sends task text and bearer tokens to the Hermes API servers you configure (plaintext HTTP permitted, warn-only); stores full dispatch text in a local SQLite ledger; delegate_subagent may use any provider credential you have configured.", "maintainer": "bennybuoy", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/bennybuoy/hermes-herald#readme", "version": "1.1.1", "platforms": [], "capabilities": {"provides_tools": ["dispatch_agent", "check_dispatch", "collect_dispatches", "dispatch_status", "dispatch_chat", "cancel_dispatch", "delegate_subagent", "llm_call", "llm_direct", "ping_profile", "approve_dispatch", "list_profile_models"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-honcho-plugin", "title": "Honcho Memory", "repo": "https://github.com/outpoints/hermes-honcho-plugin", "sha": "0323f5d6d0e1790aa801a0801cab8896f719b72b", "description": "Desktop workbench for the Honcho memory behind the focused chat: read the newest conclusions, trace their premises, search messages, ask scoped questions, and add confirmed corrections or source files. Uses each profile's existing Honcho provider configuration. Disclosure \u2014 talks only to the Honcho server each profile is already configured for, through Hermes's own Honcho client and credentials, and polls it about every 10 seconds for the focused chat while Desktop is open. Ask runs a Honcho reasoning call that may use credits. Add fact/correction and Add to session write to Honcho only after you confirm the target in a dialog; Add to session uploads the text or PDF/JSON/text file you choose. A chat from another local profile is read with that profile's own Honcho configuration, only where this plugin is enabled. It reads the focused chat's title and folder from the profile's session database, read-only. No telemetry.", "maintainer": "outpoints", "tier": "community", "category": "desktop", "version": "0.4.1", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/outpoints/hermes-honcho-plugin", "image": "https://raw.githubusercontent.com/outpoints/hermes-honcho-plugin/0323f5d6d0e1790aa801a0801cab8896f719b72b/docs/catalog/banner.png", "screenshots": ["https://raw.githubusercontent.com/outpoints/hermes-honcho-plugin/0323f5d6d0e1790aa801a0801cab8896f719b72b/docs/catalog/gallery-memory.png", "https://raw.githubusercontent.com/outpoints/hermes-honcho-plugin/0323f5d6d0e1790aa801a0801cab8896f719b72b/docs/catalog/gallery-ask.png", "https://raw.githubusercontent.com/outpoints/hermes-honcho-plugin/0323f5d6d0e1790aa801a0801cab8896f719b72b/docs/catalog/gallery-correct.png", "https://raw.githubusercontent.com/outpoints/hermes-honcho-plugin/0323f5d6d0e1790aa801a0801cab8896f719b72b/docs/catalog/gallery-pane.png", "https://raw.githubusercontent.com/outpoints/hermes-honcho-plugin/0323f5d6d0e1790aa801a0801cab8896f719b72b/docs/catalog/gallery-messages.png", "https://raw.githubusercontent.com/outpoints/hermes-honcho-plugin/0323f5d6d0e1790aa801a0801cab8896f719b72b/docs/catalog/gallery-status.png"], "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-impossibl", "repo": "https://github.com/impossiblco/hermes-impossibl", "sha": "146805e4eabab33687fa2e34bbe959f0057f9497", "description": "Impossibl, the AI gateway (100+ models from every major lab behind one OpenAI-compatible API), as a model provider", "maintainer": "impossiblco", "tier": "community", "category": "models", "docs_url": "https://github.com/impossiblco/hermes-impossibl#readme", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["IMPOSSIBL_API_KEY"]}}, {"name": "hermes-insight", "repo": "https://github.com/BrokeSkill/Hermes-Insight", "sha": "a61cdf643621ae106958f99078a17d94f9ea5289", "subdir": "backend-plugin", "description": "Selection-definition lookup for Hermes Desktop. Select any text, get an AI definition with sources in a popup. Renders the definition inline, runnable code aside. Backend is a stateless hermes insight CLI; panel, providers, and one-click model picking are configurable. Disclosure \u2014 definitions are generated with your configured provider keys (the selected term, your format template and optional web-search results are sent to that provider) via a short-lived `hermes insight` CLI run; no background process remains. When web search is on it also queries your configured searxng instance and fetches result thumbnails from their image hosts, inlining them into the panel; nothing is fetched without a searxng URL.", "maintainer": "BrokeSkill", "tier": "community", "category": "desktop", "version": "1.0.3", "image": "https://raw.githubusercontent.com/BrokeSkill/Hermes-Insight/a61cdf643621ae106958f99078a17d94f9ea5289/assets/insight-banner-dark.png", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-iroh-interconnect", "repo": "https://github.com/rahlquist/hermes-iroh-interconnect", "sha": "c7d13769715f25d410696800a538d746952da50e", "description": "Authenticated Hermes agent-to-agent tasks and optional file transfer over Iroh QUIC. Disclosure \u2014 tasks from a paired peer run in your live gateway agent with its full toolset; pairing is confirmed via the tool's confirm=true argument, not a UI prompt. Uses n0's public relays by default (HERMES_IROH_RELAY=off or a self-hosted URL for LAN-only). iroh_send_file can share any readable path the model names (credential-name denylist only, overridable with allow_sensitive); remote-triggered auto-fetch is off by default and confined to HERMES_IROH_AUTO_FETCH_DIR. The Rust sidecar is built locally with cargo, never downloaded.", "maintainer": "Richard Ahlquist", "tier": "community", "category": "tools", "docs_url": "https://github.com/rahlquist/hermes-iroh-interconnect", "version": "0.3.1", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["iroh_peer_status", "iroh_peer_list", "iroh_peer_pair", "iroh_peer_make_ticket", "iroh_send_file", "iroh_fetch_file", "iroh_transfer_status", "iroh_peer_call", "iroh_peer_settings"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-jailbreak-kernel", "repo": "https://github.com/Enchanted0911/hermes-jailbreak-kernel", "sha": "eca97e0659794a98602d3cbc679dd4d0907800b6", "description": "Jailbreak-kernel plugin for Hermes Agent (ported from dsh-infinite-gen-4): session-scoped modes (off/slim/on/full) with kernel profiles (core/research/creative/max), session-aware system-prompt sections, llm_request request-layer system rebuild, and opencode session rotation, removing model refusals. Ships a /jailbreak command, a progressive-disclosure ops skill, and a 276-check offline self-test. Disclosure \u2014 llm_request middleware that, by default (`on`/`full` modes), replaces the system prompt on every request with a refusal-removal (\"jailbreak\") kernel plus only the memory and runtime-environment sections (agent rules, skills index, context files and other plugins' sections are dropped); `slim` appends it instead, and `off` passes requests through but strips all plugin prompt sections, including other plugins'. Rotates the x-opencode-session header on opencode routes. Writes a diagnostic dump per session (full system prompt incl. memory/persona text, plus the first 200 chars of every other message and the model/provider/base_url) to its own plugin dir (dumps/); `/jailbreak dump off` or `HERMES_JAILBREAK_DUMP=0` turns it off. No network, no exec.", "maintainer": "Enchanted0911", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Enchanted0911/hermes-jailbreak-kernel#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": ["llm_request"], "requires_env": []}, "version": "2.0.1"}, {"name": "hermes-jetstream", "repo": "https://github.com/atbrace/hermes-jetstream", "sha": "4508957d1889ddb625c8bfb1eef7c822f2761349", "subdir": "plugin/hermes_jetstream", "description": "NATS JetStream event bus: agents publish events (nats_publish), pull one batch (nats_fetch), and wake on subject matches \u2014 live-session watches or wake routes (config-declared or runtime-registered via jetstream_wake) with durable consumers, manual ack, an idempotent wake ledger and rate rails; an opt-in lifecycle tap mirrors Hermes events onto hermes.> subjects. Disclosure \u2014 connects only to the NATS servers in your own config (no third-party calls, no telemetry); the platform adapter holds persistent subscriptions and reconnect loops for the gateway's lifetime; token/nkey/user-pass secrets come from ${VAR} references read via the profile-scoped secret scope and a configured creds file is read from its path, never written or rotated; wake routes render event payloads into prompts that start gateway turns or fire an existing cron job (optionally under another named profile), the agent itself can add up to 16 durable wake routes with jetstream_wake that persist in plugin data across restarts (subject still limited to subscribe_allowed, no cron-job or cross-profile targets), and jetstream_watch injects matching events into the live session when allow_gateway_injection is on, so keep subscribe_allowed scoped to trusted publishers.", "maintainer": "atbrace", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.4", "version": "1.2.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["nats_publish", "nats_fetch", "jetstream_watch", "jetstream_unwatch", "jetstream_list", "jetstream_status", "jetstream_wake"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-jev-routing", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "06a53646587c33174a0fbfbb3713eca90bbb8586", "subdir": "public/hermes-jev-routing", "description": "Per-turn model routing for the request that is about to go out. Jev reads the turn, picks the tier it deserves, and the plugin rewrites the provider request onto that model, including the reasoning level when the request carries one. Shadow by default, with notify, confirm and auto modes, a strip under the composer for the turn that was just routed, and a spend ledger. A pick on another provider is reported rather than sent, because a plugin cannot open a second provider client. Disclosure \u2014 once a routing JSON is configured, every turn (shadow mode included) sends the current message, up to 4,000 characters of recent user/assistant turns, the active model name, an estimated context size and the spend/budget snapshot to TypeSafe (api.typesafe.ai, endpoint overridable in that JSON), and the jev_route tool and /jev-routing route send their text the same way; in auto mode it rewrites the model and reasoning level on outgoing requests, and in Hermes Desktop the auto mode and the approve row also switch the session's model, including onto another provider (core's expensive-model confirmation is shown to the user, never answered automatically).", "maintainer": "apoapostolov", "tier": "community", "category": "models", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/hermes-jev-routing", "version": "1.1.0", "requires_hermes": ">=0.22.3", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/06a53646587c33174a0fbfbb3713eca90bbb8586/public/hermes-jev-routing/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": ["jev_route"], "provides_hooks": ["pre_llm_call", "post_api_request", "on_session_delete"], "provides_middleware": ["llm_request"], "requires_env": ["TYPESAFE_API_KEY"]}}, {"name": "hermes-jina", "repo": "https://github.com/Adolanium/hermes-jina", "sha": "98505951a3d26230dc30dfd47a502fcdc396f793", "description": "Jina Reader web backend for web_extract (r.jina.ai, works without a key) and web_search (s.jina.ai, needs JINA_API_KEY). Unofficial; not affiliated with Jina AI.", "maintainer": "Adolanium", "tier": "community", "category": "web", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Adolanium/hermes-jina#readme", "version": "0.1.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-jina/98505951a3d26230dc30dfd47a502fcdc396f793/assets/catalog-banner.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["JINA_API_KEY"]}}, {"name": "hermes-kame-api-rotation", "repo": "https://github.com/Kame696/kame-api-rotation-for-hermes", "sha": "d89dce1d80b511b874217ea73d445c3c4c32260c", "subdir": "hermes-kame-api-rotation", "description": "Smart API key rotation: the healthiest key for every call, each 429 / RESOURCE_EXHAUSTED / quota refusal sized from its own evidence. Install with its companion hermes-kame-provider, which hands Hermes this plugin's rotating client through ProviderProfile.create_client (and create_messages_client where Hermes offers it); no core override. When Hermes has a fallback list, a busy, resting or slow model hands the reply to the next model of that list, and a late reply can be raced by the next model of the same provider on the same keys and endpoint (the plugin reads the model and fallback_providers from config.yaml, read-only; no new network destination). Disclosure \u2014 /kame-keys add|import|split, and on start a key variable holding several comma-joined keys, write one auth.json pool row per key through Hermes' pool API after an owner-only plaintext backup (last 5 kept; switch: resolver_disabled); settings changed from /kame or the Desktop panel are saved as KAME_* lines in Hermes' .env; key-redacted, size-capped owner-only local logs and a status file per profile; the Desktop panel reads that file and queues its settings requests through its own dashboard/plugin_api.py route (GET /state, POST /control, this plugin's plugin-data folder only); while every key is resting and no fallback model can take over, chats (CLI, Desktop, messaging gateway) keep waiting with no total limit (each key's rest capped by max_hold_seconds) and cron runs give up after 300 s with the provider's refusal unless max_total_wait_seconds is set. Extra billed requests (chat replies only; hedge_mode off turns them all off): a late reply may also be sent to up to two more keys of the same model (about 10% of replies, 30% in \"Faster\", bursts of 3), to up to two next models of your fallback list on the same provider, keys and endpoint, and to one more model of the list when it stays silent; a busy best model may be asked again beside a reply at most every 20 s; and when keys keep coming back out of quota the next attempt asks 4, then 8, then up to 16 keys at once (probe_burst_max_legs). Titles and other background jobs are limited to a few requests and are stopped with a timeout so Hermes moves them down your own list.", "maintainer": "Kame696", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "version": "1.8.2.9", "docs_url": "https://github.com/Kame696/kame-api-rotation-for-hermes/blob/d89dce1d80b511b874217ea73d445c3c4c32260c/hermes-kame-api-rotation/README.md", "image": "https://raw.githubusercontent.com/Kame696/kame-api-rotation-for-hermes/d89dce1d80b511b874217ea73d445c3c4c32260c/assets/kame-banner.png", "screenshots": ["https://raw.githubusercontent.com/Kame696/kame-api-rotation-for-hermes/d89dce1d80b511b874217ea73d445c3c4c32260c/assets/panel-overview.png", "https://raw.githubusercontent.com/Kame696/kame-api-rotation-for-hermes/d89dce1d80b511b874217ea73d445c3c4c32260c/assets/panel-events.png", "https://raw.githubusercontent.com/Kame696/kame-api-rotation-for-hermes/d89dce1d80b511b874217ea73d445c3c4c32260c/assets/panel-settings.png"], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": ["transform_api_error_classification", "post_api_request", "on_session_reset"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-kame-provider", "repo": "https://github.com/Kame696/kame-api-rotation-for-hermes", "sha": "d89dce1d80b511b874217ea73d445c3c4c32260c", "subdir": "hermes-kame-provider", "description": "Companion to hermes-kame-api-rotation (install both). A model-provider plugin that re-registers Hermes' bundled API-key profiles unchanged except for create_client and create_messages_client, which return the rotation plugin's key-rotating client; otherwise None and Hermes builds its own. Same endpoints as Hermes, no third-party service, no core override.", "maintainer": "Kame696", "tier": "community", "category": "models", "requires_hermes": ">=0.21.4", "version": "1.8.2.9", "docs_url": "https://github.com/Kame696/kame-api-rotation-for-hermes/tree/v1.8.2.9/hermes-kame-provider#readme", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-kemet", "title": "Kemet", "repo": "https://github.com/Adolanium/hermes-kemet", "sha": "7a2516422832ed825e71a3393c737c79d5a87af1", "description": "Twelve Egyptian gods in painted relief and gold leaf: Thoth, Ra, Isis, Osiris, Anubis, Horus, Bastet, Sekhmet, Set, Nut, Ptah and Hathor, as Hermes Desktop themes. Install once, then switch with /skin <name>. Matching terminal skins ship in cli/skins. Disclosure \u2014 theme-only desktop plugin: it registers twelve themes through the plugin SDK, and their stylesheets restyle parts of Desktop's own UI (sidebar art, tabs, composer, wordmark) only while one of its themes is active. It also watches Desktop's active theme: when a terminal skin named kemet-<god> is active, it switches Desktop to that god's theme through the SDK's requestTheme. The terminal skins are plain YAML files the user copies into the Hermes skins folder by hand; the plugin does not install them or write any files. Fonts and art are bundled; no network requests, no agent tools or hooks.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/Adolanium/hermes-kemet#readme", "version": "0.2.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-kemet/7a2516422832ed825e71a3393c737c79d5a87af1/assets/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/Adolanium/hermes-kemet/7a2516422832ed825e71a3393c737c79d5a87af1/media/shots/thoth.png", "https://raw.githubusercontent.com/Adolanium/hermes-kemet/7a2516422832ed825e71a3393c737c79d5a87af1/media/shots/anubis.png", "https://raw.githubusercontent.com/Adolanium/hermes-kemet/7a2516422832ed825e71a3393c737c79d5a87af1/media/shots/isis.png", "https://raw.githubusercontent.com/Adolanium/hermes-kemet/7a2516422832ed825e71a3393c737c79d5a87af1/media/shots/horus.png", "https://raw.githubusercontent.com/Adolanium/hermes-kemet/7a2516422832ed825e71a3393c737c79d5a87af1/media/shots/sekhmet.png", "https://raw.githubusercontent.com/Adolanium/hermes-kemet/7a2516422832ed825e71a3393c737c79d5a87af1/media/shots/hathor.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-ca", "repo": "https://github.com/jordimas/hermes-lang-ca", "sha": "034cb32941d0471e78c287e7d8f5610f1ac6d85b", "description": "Catalan (Catal\u00e0) language pack for Hermes Agent \u2014 UI translation for core (CLI, gateway, approval prompts and tips), TUI and Desktop. Covers all text-overridable catalog keys; preserves command syntax and non-text Desktop values. Manifest-only plugin, no code execution, no network. Disclosure \u2014 text-only catalogs; registering the pack never changes display.language, the user opts in via config.", "maintainer": "jordimas", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/jordimas/hermes-lang-ca#readme", "version": "0.2.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-cs", "repo": "https://github.com/ostravajih/hermes-lang-cs", "sha": "bfdb42fdf3c14683a05682162dcaa3f313279265", "title": "Czech (\u010ce\u0161tina) Language Pack", "description": "Czech (\u010ce\u0161tina) language pack for Hermes Agent covering all three UI surfaces \u2014 core CLI/gateway/platforms (3,509/3,509 keys), the Ink TUI (1,385/1,385) and the Desktop app (5,324 of 5,451). Core and TUI keys match the English source of `main` at d050956 (2026-10-25) exactly: no key upstream has since removed and no placeholder divergence, checked by flattening both sides. The remaining 125 Desktop keys are the ones whose English value is a function with branching (plural counts such as `cron.count`, conditional labels such as `assistant.thread.errorSwitchToModel`), which the pack format cannot express as one template \u2014 they are omitted so they fall back to English instead of rendering a wrong Czech form. Two core strings (`display.verb_connector.search` and `.default`) drop an invisible zero-width space the upstream English catalog carries for spacing; the install scanner rates it HIGH while the visible text is identical. Ships the same text as upstream PR #105503, so if that PR lands the bundled locale and this pack agree. Manifest-only plugin: flat dotted YAML catalogs under locales/, no network, no dependencies. Disclosure \u2014 an `__init__.py` whose `register()` is a no-op is included so the Desktop \"Install from Git\" flow accepts the pack (#138118); registering the pack never changes display.language, the user opts in via `hermes config set display.language cs`. \u010cesk\u00e1 lokalizace rozhran\u00ed Hermes Agent.", "maintainer": "ostravajih", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/ostravajih/hermes-lang-cs#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-el", "repo": "https://github.com/axiom-agent-ai/hermes-lang-el", "sha": "d290234075dc14a701c69706f7f89ea26bff7d09", "description": "Greek (\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac) language pack for Hermes Agent \u2014 Desktop UI (~5,060 of 5,065 keys) plus the 102 most visible core CLI slash-command descriptions; missing keys fall back to English. TUI and the remaining core CLI strings are not covered yet. Disclosure \u2014 text-only catalogs; registering the pack never changes display.language, the user opts in via config.", "maintainer": "axiom-agent-ai", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/axiom-agent-ai/hermes-lang-el#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-he", "repo": "https://github.com/Adolanium/hermes-lang-he", "sha": "9e470ec786f5abf7c97d1939dd8898782a36d430", "description": "Hebrew (\u05e2\u05d1\u05e8\u05d9\u05ea) language pack for Hermes \u2014 core CLI, gateway and tips (3,396 of 3,486 keys on main), TUI (1,331 of 1,356) and Desktop (5,153 of 5,245), with Desktop flipped right-to-left. Hermes bundles no Hebrew, so the pack ships all three catalogs; values identical to English and entries whose English wording depends on an argument (on/off, show/hide) are omitted so they fall back to English. Disclosure \u2014 text-only catalogs plus an __init__.py whose register() is a no-op (kept so Desktop \"Install from Git\" accepts the pack, #138118); registering the pack never changes display.language, the user opts in via config.", "maintainer": "Adolanium", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Adolanium/hermes-lang-he#readme", "version": "0.1.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-lang-he/9e470ec786f5abf7c97d1939dd8898782a36d430/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-it-full", "repo": "https://github.com/gradia64/hermes-lang-it-full", "sha": "21f3c05c296b0aa29f370f9170ae8342e21fd909", "description": "Italian (Italiano) language pack for Hermes Desktop covering nearly every Desktop string (firstRun, themePicker, connector accounts and the update-channel picker included; the few array/object leaves the pack format rejects fall back to English). Core, CLI and TUI keep the Italian catalogs already bundled with Hermes. Generated from the hand-reviewed typed catalog maintained in gradia64/hermes-agent (gradia-desktop-it branch); function-backed keys ship as positional {0} templates. Independent community translation, unrelated to hermes-lang-it. Disclosure \u2014 text-only catalogs plus an __init__.py whose register() is a no-op (kept so Desktop \"Install from Git\" accepts the pack, #138118); registering the pack never changes display.language, the user opts in via config.", "maintainer": "gradia64", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/gradia64/hermes-lang-it-full#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-it", "repo": "https://github.com/Lazzdaycod/hermes-lang-it", "sha": "21fa60e724ffb74a9d3b90375eb51f5e6a71c6d3", "description": "Italian (Italiano) language pack for Hermes Agent \u2014 UI translation for core (approval prompts, gateway/slash replies, CLI, tips), TUI and Desktop. Coverage: core 3437/3437, TUI 1259/1259 and Desktop ~5,000 keys (missing ones fall back to English). Parser-safe: hard-parsed menu brackets and [Y/n] prompts stay verbatim; placeholders, URLs and CLI flags preserved. Manifest-only plugin, no code execution, no network. Traduzione italiana dell'interfaccia Hermes Agent. Disclosure \u2014 text-only catalogs; registering the pack never changes display.language, the user opts in via config.", "maintainer": "Lazzdaycod", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Lazzdaycod/hermes-lang-it#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-ko", "repo": "https://github.com/dandacompany/hermes-lang-ko", "sha": "454364157cc7cad777d3c534ab19be2ff866cf39", "description": "Korean (\ud55c\uad6d\uc5b4) language pack for Hermes Desktop \u2014 Desktop UI (5,282 of 5,384 keys on v0.22.5 and main cb757fac59; 349 new translations); CLI, gateway and TUI keep the Korean catalogs already bundled with Hermes. Independent translation from the English source; values identical to English are omitted so missing strings fall back to English. Disclosure \u2014 text-only catalogs plus an __init__.py whose register() is a no-op (kept so Desktop \"Install from Git\" accepts the pack, #138118); registering the pack never changes display.language, the user opts in via config.", "maintainer": "dandacompany", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/dandacompany/hermes-lang-ko#readme", "version": "0.2.4", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-pt-br", "repo": "https://github.com/StudioCodeAI/hermes-lang-pt-br", "sha": "9b0199013502730c9a24f411488c249a47ca451a", "title": "Brazilian Portuguese (Portugu\u00eas do Brasil) Language Pack", "description": "Brazilian Portuguese (pt-BR) language pack for Hermes Agent covering all three UI surfaces \u2014 core CLI/gateway/platforms (3,477/3,477 keys), the Ink TUI (1,356/1,356) and the Desktop app (5,172/5,176). Every translatable key exists and every value is translated against the English source of `main`: no key upstream has since removed, zero placeholder divergence, and the four remaining Desktop keys are arrays/structured values a text pack cannot carry. Checked with `hermes plugins validate` and with the pack's own `tools/verify_pack.py`, which also runs as public CI on every push. Core and TUI mirror the bundled `pt` locale, registered as a real `pt-br` variant so it wins over the `pt`/`pt-BR` alias; the Desktop catalog is the original contribution (first proposed upstream in PR #92590, 2026-08-23), since the Desktop app ships no Portuguese at all. Manifest-only plugin: flat dotted YAML catalogs under locales/, no code, no network, no dependencies. Registering the pack never changes display.language \u2014 the user opts in via `hermes config set display.language pt-br`. A weekly drift workflow reports when `main` adds or drops keys; nothing self-updates. Tradu\u00e7\u00e3o pt-BR da interface do Hermes Agent.", "maintainer": "StudioCodeAI", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/StudioCodeAI/hermes-lang-pt-br#readme", "version": "1.2.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lang-th", "repo": "https://github.com/shoesroom13/hermes-lang-thai", "sha": "0c2f11bba4225fca17c7bf348c350bf55c3fdc18", "title": "Thai (\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22) Language Pack", "description": "Thai (\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22) language pack covering all three Hermes UI surfaces \u2014 Desktop (5,023/5,030), core CLI/gateway/platforms (3,437/3,437), and the Ink TUI (1,259/1,259) \u2014 9,719/9,725 keys total (99.9%). All three catalogs checked against the English reference with `hermes plugins validate`. Manifest-only plugin: flat nested YAML overlays under locales/, no code, no network, no dependencies. Registering the pack never changes display.language \u2014 the user opts in via `hermes config set display.language th`. Disclosure \u2014 text-only catalogs (no code, network or dependencies); untranslated keys fall back to English: the 7 array/conditional Desktop keys listed in the repo README, plus strings Hermes added after the pack was built.", "maintainer": "shoesroom13", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/shoesroom13/hermes-lang-thai#readme", "version": "1.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "screenshots": ["https://raw.githubusercontent.com/shoesroom13/hermes-lang-thai/0c2f11bba4225fca17c7bf348c350bf55c3fdc18/screenshots/desktop-th.png"]}, {"name": "hermes-lang-vi", "repo": "https://github.com/moken627-hub/hermes-lang-vi", "sha": "79bbcf3646b54976af72ea2e2c46b8af9d9d209f", "description": "Vietnamese (Tieng Viet) language pack for Hermes Agent \u2014 full UI translation across every surface: core (approval prompts, gateway/slash replies, CLI, tips), TUI, and Desktop catalogs. Checked against the English catalogs with hermes plugins validate. Parser-safe: hard-parsed menu brackets and [Y/n] prompts stay verbatim; placeholders, URLs and CLI flags preserved; multi-line values use real newlines exactly like the English catalogs. Manifest-only plugin, no code execution, no network. Ban dich tieng Viet day du cho toan bo giao dien Hermes Agent. Disclosure \u2014 text-only catalogs; registering the pack never changes display.language, the user opts in via config.", "maintainer": "moken627-hub", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/moken627-hub/hermes-lang-vi#readme", "version": "1.1.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-lcm-x", "title": "LCM-X", "repo": "https://github.com/electricsheephq/lcm-x", "sha": "39daadd1c90f4dc60061089878bbd40dc5e4eaeb", "subdir": "plugin", "description": "Lossless memory for long sessions: LCM-X keeps every turn in a local store instead of compacting it away, and the agent can search and expand it. The store is local SQLite (lcm.db) with a recoverable DAG of summaries over it and 15 lcm_* tools for search, recall and expansion. Select it with context.engine: lcm-x. Upgrading from hermes-lcm (breaking in v0.24.0): stop Hermes, then in plugins.enabled replace hermes-lcm with hermes-lcm-x and run exactly one LCM copy (the install script prints the steps; the old engine name lcm still resolves with a deprecation warning); lcm.db and the lcm: config block are unchanged. Summaries use the model Hermes is configured with. Disclosure \u2014 optional semantic recall (embeddings_enabled, off by default) sends message text to the embedding provider you configure (Voyage via VOYAGE_API_KEY, an OpenAI-compatible endpoint, or a local Ollama), and once enabled new summaries are embedded automatically in the background; in-process FastEmbed keeps it on the machine after a one-time model download. For known cloud providers the provider-bound copy is privacy-transformed by default (LCM_EMBEDDING_PRIVACY_ENABLED=false opts out), while lcm.db keeps the raw text. Every turn (user, assistant and tool output) is stored in plaintext in lcm.db (secret redaction at rest is opt-in), and oversized tool outputs are by default written as plaintext files under HERMES_HOME/lcm-large-outputs and replaced in the model's context by recoverable references. The engine also reads Hermes' state.db read-only for session lineage, reads private AIAgent attributes via the call stack on Hermes builds without subagent hooks, and runs git on its own install directory for lcm_status/lcm_doctor; tiktoken may fetch its BPE file on first use.", "maintainer": "100yenadmin", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/electricsheephq/lcm-x#readme", "version": "0.28.1", "image": "https://raw.githubusercontent.com/electricsheephq/lcm-x/77b2b4f795fb6a4f84c55abf6d0441da4469971e/docs/media/banner.png", "platforms": [], "capabilities": {"provides_tools": ["lcm_grep", "lcm_recall", "lcm_query_state", "lcm_compute", "lcm_compile_evidence", "lcm_evidence_pack", "lcm_retrieve", "lcm_recent", "lcm_load_session", "lcm_describe", "lcm_expand", "lcm_expand_query", "lcm_status", "lcm_inspect", "lcm_doctor"], "provides_hooks": ["pre_llm_call", "post_llm_call", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-ledgerline", "repo": "https://github.com/Adolanium/hermes-ledgerline", "sha": "fa28160845d530ecbd5b9559c0f960a8c589dfb2", "version": "0.1.8", "image": "https://raw.githubusercontent.com/Adolanium/hermes-ledgerline/fa28160845d530ecbd5b9559c0f960a8c589dfb2/assets/catalog-banner.png", "description": "Inspect session costs and usage in Hermes Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-ledgerline#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-live-voice", "repo": "https://github.com/Synero/hermes-live-voice", "sha": "0578e0cc35022a9dcb469cb9fbfc4d8afc93fc65", "version": "0.2.6", "description": "Full-duplex Live Voice for Hermes Desktop \u2014 GPT-Live-1 on the ChatGPT/Codex subscription via the local Codex app-server, with live transcript, voice tool calls and task delegation to the user chat. Disclosure \u2014 subscription voice uses your Hermes openai-codex sign-in through Hermes-signed requests (requires_auth; the plugin never holds or refreshes the token) to mint OpenAI Realtime client secrets, and the usage panel reads Hermes's own account-usage fetcher; the gpt-live-1 lane runs the local codex app-server on the Codex CLI's own login, and the dashboard can run codex login --device-auth, copying ~/.codex/auth.json (or $CODEX_HOME) to a backup before that login, restoring the backup if the login is cancelled, and reading the file read-only for sign-in status; with TALK_OPENAI_API_KEY or OPENAI_API_KEY set it uses that key instead; if hermes-talk is installed it loads that plugin's modules from ~/.hermes/plugins/hermes-talk and substitutes its own talk_auth; voice audio goes to OpenAI over WebRTC, and spoken tasks are submitted as messages in your focused chat.", "maintainer": "Synero", "tier": "community", "category": "voice", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/Synero/hermes-live-voice", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-loadout", "repo": "https://github.com/qwertyuiop97/hermes-loadout", "sha": "e31ad580756a6481d38fac0b18ddc3fd0239d124", "description": "Desktop pane to manage skills and MCP connections across agent apps: save named loadouts, review changes, apply them, and undo the latest managed operation. Agent half is inert (no tools or hooks). Disclosure \u2014 MCP sync copies your Hermes mcp_servers env/header secrets into ~/.codex/config.toml and claude_desktop_config.json (with 0600 backups).", "maintainer": "qwertyuiop97", "tier": "community", "category": "desktop", "docs_url": "https://github.com/qwertyuiop97/hermes-loadout#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-memory-pane", "title": "Memory Pane", "repo": "https://github.com/Adolanium/hermes-memory-pane", "sha": "4ba8ae3577249d3c9a0f3ad6f8336f43bda3bbf4", "description": "A Hermes Desktop pane for the built-in memory: see what the focused chat remembered, updated or forgot, and edit, delete or undo any entry without leaving the conversation. Works alongside the built-in memory; not a memory provider. Disclosure \u2014 a tool_execution middleware reads MEMORY.md and USER.md around each memory call and logs the entry-level changes to $HERMES_HOME/plugin-data/hermes-memory-pane/; the pane rewrites memory entries only when the user edits, deletes, adds or undoes one, through Hermes's own memory store; no network, credentials, shell commands or background processes.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/Adolanium/hermes-memory-pane#readme", "version": "0.1.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-memory-pane/4ba8ae3577249d3c9a0f3ad6f8336f43bda3bbf4/assets/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/Adolanium/hermes-memory-pane/4ba8ae3577249d3c9a0f3ad6f8336f43bda3bbf4/assets/memory-pane.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": ["tool_execution"], "requires_env": []}}, {"name": "hermes-memory-ui", "repo": "https://github.com/xraysight/hermes-memory-ui", "sha": "8f798101a61a33e16f38eb22c3b1ad50ef9484a1", "version": "0.6.4", "description": "Read-only Hermes Dashboard and Desktop plugin for inspecting built-in, holographic, Mem0, Honcho, Mnemosyne, Hindsight, and ByteRover memory. Disclosure \u2014 reads the active profile's memory files, provider configs and provider API keys (keys are never returned to the UI), and on user action sends search/recall/reflect queries with configured bank/peer/user IDs to the configured Mem0, Honcho and Hindsight endpoints (Hindsight Cloud default api.hindsight.vectorize.io) using those keys; ByteRover queries run the local `brv` CLI; for a local embedded Hindsight setup a contents read may start the `hindsight-embed` daemon; no memory is written.", "maintainer": "xraysight", "tier": "community", "category": "desktop", "docs_url": "https://github.com/xraysight/hermes-memory-ui#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-memory-wiki", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "54afaf5014db23346148436c4883eb64095e8060", "subdir": "memory-wiki", "description": "Memory Wiki dashboard tab and opt-in native Desktop page: browsable subject pages and daily logs derived from local session history, plus a read-only Persistent Memory (MEMORY.md / USER.md) audit panel.", "maintainer": "NousResearch", "tier": "official", "requires_hermes": ">=0.21", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/memory-wiki", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/54afaf5014db23346148436c4883eb64095e8060/assets/memory-wiki.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-minimizer", "title": "Minimizer", "repo": "https://github.com/nosliwhtes/hermes-minimizer", "sha": "d209ed0824e2787cd6454bd4b060dbf0381b7b79", "description": "YAGNI coding and code-review guidance for Hermes: reduce over-engineering, reuse existing behavior, and preserve requirements. One static prompt section; no tools or hooks.", "maintainer": "nosliwhtes", "tier": "community", "category": "general", "requires_hermes": ">=0.22.0", "version": "0.1.1", "docs_url": "https://github.com/nosliwhtes/hermes-minimizer/blob/d209ed0824e2787cd6454bd4b060dbf0381b7b79/README.md", "image": "https://raw.githubusercontent.com/nosliwhtes/hermes-minimizer/d209ed0824e2787cd6454bd4b060dbf0381b7b79/docs/assets/minimizer-demo.png", "screenshots": ["https://raw.githubusercontent.com/nosliwhtes/hermes-minimizer/d209ed0824e2787cd6454bd4b060dbf0381b7b79/docs/assets/minimizer-demo.png"], "readme": true, "platforms": [], "known_issues": ["Guidance is advisory, not enforcement; existing session prompts may retain it after disabling."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-mobile", "repo": "https://github.com/geniok1980/hermes-mobile-adapter", "sha": "91bdca089770c3ad83f157e2932d8c3d9ed55a6a", "subdir": "adapter/hermes_mobile", "title": "Hermes Mobile Adapter", "description": "WebSocket platform for your own mobile, desktop or web app: it talks to the agent directly \u2014 text, voice, images, video and documents in both directions, approval/clarify/slash cards answered from the app, streaming edits, typing and avatar state events, cron delivery to a chosen device. On request it also answers command-catalog and model-list frames (commands from the agent's own registry, models from its model inventory) so a client renders command and model pickers from the agent's data instead of bundling a snapshot; auto-push after ready is off by default (MOBILE_CATALOG_AFTER_READY=1). Ships TypeScript and Python SDKs, platform guides and an acceptance checklist. Disclosure \u2014 opens a listening WebSocket server (plain ws://, no built-in TLS; 127.0.0.1:8787 by default, the wildcard address only when set, behind a wss proxy) guarded by MOBILE_TOKEN plus optional per-device tokens; anyone holding an unbound token can chat with the agent, run slash commands and answer the approval and clarify cards of the device id they connect as; device_id=token entries bind a token to one device. deliver frames are accepted only from loopback peers or MOBILE_DELIVER_TOKENS. Inbound media is written under $HERMES_HOME/mobile-media; secrets are read through Hermes's profile-scoped route; approvals resolve through Hermes's own resolvers; no telemetry, no third-party network calls, no self-update.", "maintainer": "geniok1980", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.6", "docs_url": "https://geniok1980.github.io/hermes-mobile-adapter/", "version": "1.1.1", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MOBILE_TOKEN"]}}, {"name": "hermes-model-switcher", "repo": "https://github.com/nicolasestrem/hermes-model-switcher", "sha": "d62530d906307154e16ed98bb9b4be10ea6fef56", "description": "Choose models across Hermes profiles from a Dashboard tab: a per-profile picker built on host-supplied model data (SDK-authenticated GET /api/model/options), a preview of provider/model intent across every supported model-selection slot (main, delegation, auxiliary, judge, fallback, MoA, cron, plugin and specialist), and one-click apply or revert with presets. Main-slot preview shows intended provider/model, not the exact persisted diff; the exact diff is shown only after host readback. Disclosure \u2014 its apply route reads and edits the profiles' config.yaml (that is the plugin's function) through public seams only: POST /api/model/set for main and compatible auxiliary slots, and public hermes_cli.config load/save under the target home for other slots; credential presence checks use public profile-scoped secret helpers (agent.secret_scope), and profile discovery uses public hermes_constants. The plugin makes no direct third-party requests and opens no provider caches or pricing registries directly, but its browser tab does call the host's /api/model/* routes through the Dashboard SDK, and the host options route may itself initiate provider or pricing I/O even without an explicit refresh request, so reads are not guaranteed cache-only. It runs no shell commands or background processes and reports nothing. The private undo journal stores a full pre-change snapshot of each config it edits, which can contain sensitive fields including embedded credentials. Saved presets also persist reviewed change values, potentially including inline credentials or credential-bearing base URLs, in presets.json (0600) under get_hermes_home()/state/hermes-model-switcher/ (0700). The host write route has no expected-revision check: readback surfaces many foreign edits as recovery_required, but a concurrent same-key edit can be overwritten undetected and full-state deletions retain an unrelated-write race, so not every foreign edit is guaranteed to surface.", "maintainer": "Nico Estrem", "tier": "community", "category": "models", "docs_url": "https://github.com/nicolasestrem/hermes-model-switcher#readme", "version": "0.3.2", "screenshots": ["https://raw.githubusercontent.com/nicolasestrem/hermes-model-switcher/d62530d906307154e16ed98bb9b4be10ea6fef56/docs/images/model-switcher-0.3.2-dashboard.png", "https://raw.githubusercontent.com/nicolasestrem/hermes-model-switcher/d62530d906307154e16ed98bb9b4be10ea6fef56/docs/images/model-switcher-0.3.2-preview.png", "https://raw.githubusercontent.com/nicolasestrem/hermes-model-switcher/d62530d906307154e16ed98bb9b4be10ea6fef56/docs/images/model-switcher-0.3.2-operation.png", "https://raw.githubusercontent.com/nicolasestrem/hermes-model-switcher/d62530d906307154e16ed98bb9b4be10ea6fef56/docs/images/model-switcher-0.3.2-catalog.png", "https://raw.githubusercontent.com/nicolasestrem/hermes-model-switcher/d62530d906307154e16ed98bb9b4be10ea6fef56/docs/images/model-switcher-0.3.2-light.png", "https://raw.githubusercontent.com/nicolasestrem/hermes-model-switcher/d62530d906307154e16ed98bb9b4be10ea6fef56/docs/images/model-switcher-0.3.2-narrow.png"], "known_issues": ["Couples at runtime to public Hermes seams that are not stability-guaranteed APIs (the /api/model/* dashboard routes, hermes_cli.config, agent.secret_scope, hermes_constants); a host refactor can break the plugin until it re-pins. Missing upstream seams remain open: a compare-and-save write with an expected-revision check (hermes-agent #142339), a public typed write route for non-main slots (#142340), and a dry-run footprint for exact main-slot previews (#142341)."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.22.3"}, {"name": "hermes-monitor", "repo": "https://github.com/mr-3mm3/hermes-monitor", "sha": "ec6a3ada338ca3e06fbfc246bc672c3c776b0988", "version": "0.3.5", "description": "Kanban worker health in the Desktop status bar \u2014 live activity per running card with stall and loop detection (same tool + same arguments repeated), plus a compact per-provider quota readout (the related ai-usage-tracker plugin covers quota windows as a standalone feature). Zero model tokens. Disclosure \u2014 opens HERMES_HOME/kanban.db and each profile's state.db read-only for worker activity; for quota chips it reads every Hermes profile's credential pool (each profile's auth.json, with that profile's .env as secret scope) into read-only snapshots plus DEEPSEEK_API_KEY from the environment or .env files, and calls Hermes' own account-usage fetchers for each configured provider (Anthropic, Codex, OpenRouter, DeepSeek at https://api.deepseek.com/user/balance, and any provider plugin exposing fetch_account_usage), sending each entry's own token only to its own provider. The plugin never refreshes or persists a credential; on a Codex HTTP 401, Hermes core may refresh the active profile's matching Codex token via OpenAI's token endpoint and rewrite that profile's auth.json. No other network egress.", "maintainer": "Hermes Monitor contributors (independent of Nous Research)", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "platforms": ["linux", "macos"], "docs_url": "https://github.com/mr-3mm3/hermes-monitor", "screenshots": ["https://raw.githubusercontent.com/mr-3mm3/hermes-monitor/ec6a3ada338ca3e06fbfc246bc672c3c776b0988/docs/footer.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-monitoring-dashboard", "title": "Monitoring Dashboard", "repo": "https://github.com/austinpickett/hermes-monitoring-dashboard", "subdir": "plugin", "sha": "96d6881d7242e0fd9240a3040ad3266ed6c2492e", "version": "1.0.1", "description": "Prompt-customizable desktop dashboard with live host metrics, session activity, clocks, calendars, and text widgets. Disclosure \u2014 polls ~/monitoring-dashboard on the desktop device through the Desktop native file bridge, and its Reset command moves only the dashboard's own page/panel marker files in that folder to the OS trash (never dashboard.json or the folder); host metrics and session activity stay on the machine.", "maintainer": "austinpickett", "tier": "community", "category": "desktop", "docs_url": "https://github.com/austinpickett/hermes-monitoring-dashboard/blob/96d6881d7242e0fd9240a3040ad3266ed6c2492e/plugin/README.md", "image": "https://raw.githubusercontent.com/austinpickett/hermes-monitoring-dashboard/96d6881d7242e0fd9240a3040ad3266ed6c2492e/assets/hermes-cyanotype.jpg", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-mpp", "repo": "https://github.com/tempoxyz/hermes-mpp", "sha": "a0782b7024ad0256cceede338754b466ded1df06", "version": "0.1.3+a0782b7", "subdir": "src/hermes_mpp", "description": "Pay supported HTTP 402 MPP challenges on Tempo through mpp_fetch and in-process HTTPX clients. Uses a dedicated wallet. Disclosure \u2014 with MPP_ALLOWED_ORIGINS unset, any supported HTTP 402 MPP challenge returned to core HTTPX traffic (not only mpp_fetch) is auto-paid from the Tempo wallet with no per-payment cap or confirmation; the origin allowlist is the operator's control.", "maintainer": "tempoxyz", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/tempoxyz/hermes-mpp#native-plugin-installation", "capabilities": {"provides_tools": ["mpp_fetch"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TEMPO_PRIVATE_KEY"]}}, {"name": "hermes-muse-code", "repo": "https://github.com/TheStreamCode/hermes-muse-code", "sha": "e33501185e328b5597fd98c6de916495922ec727", "description": "Muse Spark in Hermes billed to the Muse Code monthly login (device-code login, no API key).", "maintainer": "TheStreamCode", "tier": "community", "category": "models", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/TheStreamCode/hermes-muse-code", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-muse", "repo": "https://github.com/xiaohei-info/hermes-muse", "sha": "0dade28130b6901dfa2dd81a067856441948d33c", "version": "0.3.1", "description": "A proactive companion for Hermes: follows accepted goals (active/done/cancelled), prepares sourced research and Feed articles, maintains memory, and assembles rolling 30-day or natural-month calendar views. Read-only local Dashboard/Desktop pages show Feed, Ideas and Goals; profile selection cannot install, enable or disable Muse in any profile. One Skill, one state tool and six fixed recurring jobs; selected notices and weekly/monthly reports go to the active profile's Bot Chat and run an assistant turn there. Sources, authorization, quiet hours and actual result/delivery receipts remain distinct; partial coverage is not global availability. Disclosure: first load creates profile-local files/SQLite state and owned Cron scripts/jobs. Private/local input inbox rows retain their first 8000 characters and source identities, with associated chat/user routing IDs when present. The newest 500 remain; older rows are cleaned on later input only after both hourly/nightly cursors cover them. Unprocessed backlog can exceed 500 and has no fixed retention time. Native conversations/tool results are read separately; research records can retain returned payloads. Idempotency journals and oversized tool results stay in the profile state database without automatic expiry and may contain written content or tool output. Bounded conversation previews support full revision-checked paging. Delegates are instructed to remain read-only under inherited permissions, not sandboxed. Workers always use public delegate_task dispatch and follow the user's delegation settings; leave delegation.provider/model empty to keep the parent model. New Cron watches require cron.allow_agent_scheduling; local goal registration creates no job. Watch prompt/stop fields each allow 4000 characters; new repeating watches (interval or cron) must be at least 30 minutes apart, one-off schedules are exempt. Windows is not supported (POSIX file locks) and CI does not cover it. Background work incurs normal model/tool costs. No telemetry, self-updater, mandatory service, core/SOUL replacement or phone/read-receipt guarantee. Native remove retains data/tasks for the documented owned-only cleanup.", "maintainer": "xiaohei-info", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/xiaohei-info/hermes-muse/blob/0dade28130b6901dfa2dd81a067856441948d33c/README.md", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["muse_manage"], "provides_hooks": ["pre_llm_call", "post_llm_call", "transform_llm_output", "on_session_end", "post_tool_call", "on_skill_lifecycle"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-newswire", "repo": "https://github.com/tony-simons-aiowa/hermes-newswire", "sha": "e6b438ee617f9b3c1ef9fe008cce2b7291abd949", "description": "Breaking-news ticker for Hermes Desktop: a scrolling RSS/Atom/JSON-Feed strip above the statusbar with per-source favicons, feed search + discovery, grouping modes, offline cache, and in-app reading. Zero API keys, zero model tokens.", "maintainer": "tony-simons-aiowa", "tier": "community", "category": "desktop", "requires_hermes": ">=0.19", "docs_url": "https://github.com/tony-simons-aiowa/hermes-newswire", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-nous-prices", "repo": "https://github.com/Adolanium/hermes-nous-prices", "sha": "2cae9378264e533b6c170cd8c2ab74381a47f52e", "version": "0.1.3", "image": "https://raw.githubusercontent.com/Adolanium/hermes-nous-prices/2cae9378264e533b6c170cd8c2ab74381a47f52e/assets/catalog-banner.png", "description": "Browse Nous Portal model prices and account balances in Hermes Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-nous-prices#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-office", "repo": "https://github.com/Adolanium/hermes-office", "sha": "ae956aa756e4b75768dc850ff999dae94520e78e", "description": "View and manage Bot Mode agents in a shared office in Hermes Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-office#readme", "image": "https://raw.githubusercontent.com/Adolanium/hermes-office/ae956aa756e4b75768dc850ff999dae94520e78e/assets/catalog-banner.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-openwhispr", "repo": "https://github.com/mooserini/hermes-openwhispr", "sha": "636314f33376616d3a39815eb63b8a0f06900f3b", "description": "Local-first OpenWhispr dictation history and shared notes for Hermes agents: find what the user said, search notes, transcribe local audio. Free local desktop bridge by default, paid cloud opt-in only. Skill-carrier plugin, no tools or hooks registered. Disclosure \u2014 skill only: the agent runs the external OpenWhispr CLI (installed with an unpinned `npm install -g @openwhispr/cli`) through the terminal tool to read your dictation history and notes over the OpenWhispr desktop app's authenticated loopback bridge, and, with your consent each time, to create, update or delete notes, transcriptions and dictionary entries and to transcribe local audio files; OpenWhispr Cloud (api.openwhispr.com, including an email-code sign-in that mints an API key kept in the CLI's own config) is used only when you opt in; the agent never opens credential files itself.", "maintainer": "mooserini", "tier": "community", "category": "voice", "docs_url": "https://github.com/mooserini/hermes-openwhispr#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-opper", "repo": "https://github.com/opper-ai/hermes-opper", "sha": "2e15f465b4c2a107fd0230611ebc1e5a7586a196", "description": "Opper, the EU-hosted AI gateway (700+ models behind one OpenAI-compatible API), as a model provider", "maintainer": "opper-ai", "tier": "community", "category": "models", "docs_url": "https://github.com/opper-ai/hermes-opper#readme", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPPER_API_KEY"]}}, {"name": "hermes-osint-map", "title": "Hermes OSINT Map", "repo": "https://github.com/Adolanium/hermes-osint-map", "sha": "51343fdbccf63974c2db56244ed34ca3a15c5421", "description": "A live situational-awareness globe in Hermes Desktop: earthquakes (USGS), disaster alerts (GDACS), natural events (NASA EONET), US severe weather (NWS), military and nearby aircraft (adsb.lol), satellites propagated live from CelesTrak elements, GDELT news incidents, official traffic cameras (Transport for London, Singapore LTA) and shipping chokepoints on a dithered 3D globe, with satellite orbits, aircraft tracks and live camera stills, country dossiers (World Bank facts, events, headlines), NOAA space weather, markets, a feed of events, headlines and alerts, and a passive recon toolkit (DNS, RDAP, TLS, security headers, CT subdomains, CVE with CISA KEV, IP, GitHub, MAC). Five agent tools (osint_situation, osint_events, osint_country, osint_recon, osint_news) answer from the same sources in any chat, and the page's Brief me, Ask Hermes and dossier buttons open a chat that uses them. No keys needed; an optional TWELVEDATA_API_KEY (plugin setting, read through Hermes's secret scope) adds equities and commodities. Unofficial; not affiliated with any data provider. Disclosure \u2014 the gateway fetches public data from fixed hosts (earthquake.usgs.gov, eonet.gsfc.nasa.gov, gdacs.org, api.weather.gov, data.gdeltproject.org, api.adsb.lol, celestrak.org, services.swpc.noaa.gov, api.tfl.gov.uk and api.data.gov.sg (camera lists), and camera stills from TfL's JamCams bucket on s3-eu-west-1.amazonaws.com and images.data.gov.sg, fetched only by camera id for a camera the user opens, api.worldbank.org, the BBC, Al Jazeera, DW, Guardian and France 24 RSS feeds, api.coingecko.com, and api.twelvedata.com with the key in a header when set), cached and only while the page is open or a tool is called, with a hermes-osint-map User-Agent; recon sends the domain, IP, CVE id, GitHub name or MAC prefix the user or agent enters to dns.google, rdap.org, crt.sh, cve.circl.lu, cisa.gov, ipwho.is, api.github.com and api.macvendors.com, and the TLS and headers lookups connect directly to the host named, refusing private, loopback, link-local, CGNAT and other internal addresses on every redirect, on ports 443/8443 (TLS) and 80/443/8080/8443 (headers) only; GDELT incidents are machine-coded from news coverage and labelled as such; the page keeps its layer choices in Desktop plugin storage; no files written, no shell commands, no background processes, no telemetry.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/Adolanium/hermes-osint-map#readme", "version": "0.2.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-osint-map/51343fdbccf63974c2db56244ed34ca3a15c5421/assets/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/Adolanium/hermes-osint-map/51343fdbccf63974c2db56244ed34ca3a15c5421/assets/screenshot-overview.webp", "https://raw.githubusercontent.com/Adolanium/hermes-osint-map/51343fdbccf63974c2db56244ed34ca3a15c5421/assets/screenshot-satellite.webp", "https://raw.githubusercontent.com/Adolanium/hermes-osint-map/51343fdbccf63974c2db56244ed34ca3a15c5421/assets/screenshot-dossier.webp", "https://raw.githubusercontent.com/Adolanium/hermes-osint-map/51343fdbccf63974c2db56244ed34ca3a15c5421/assets/screenshot-aircraft.webp", "https://raw.githubusercontent.com/Adolanium/hermes-osint-map/51343fdbccf63974c2db56244ed34ca3a15c5421/assets/screenshot-recon.webp"], "capabilities": {"provides_tools": ["osint_situation", "osint_events", "osint_country", "osint_recon", "osint_news"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-pantheon", "title": "Pantheon", "repo": "https://github.com/Adolanium/hermes-pantheon", "sha": "fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8", "description": "Eighteen Hermes Desktop themes in dithered classical marble, one god each: all twelve Olympians plus Hades, Nyx, Helios, Selene and Medusa. Install once, then switch with /skin <name>. Matching terminal skins ship in cli/skins. Disclosure \u2014 theme-only desktop plugin: it registers eighteen themes through the plugin SDK, and their stylesheets restyle parts of Desktop's own UI (sidebar art, tabs, composer, wordmark) only while a Pantheon theme is active. It also watches Desktop's active theme: when a terminal skin named pantheon-<god> is active, it switches Desktop to that god's theme through the SDK's requestTheme. The terminal skins are plain YAML files the user copies into the Hermes skins folder by hand; the plugin does not install them or write any files. Fonts and art are bundled; no network requests, no agent tools or hooks.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/Adolanium/hermes-pantheon#readme", "version": "0.4.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-pantheon/fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8/assets/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/Adolanium/hermes-pantheon/fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8/media/shots/olympus.png", "https://raw.githubusercontent.com/Adolanium/hermes-pantheon/fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8/media/shots/hera.png", "https://raw.githubusercontent.com/Adolanium/hermes-pantheon/fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8/media/shots/mars.png", "https://raw.githubusercontent.com/Adolanium/hermes-pantheon/fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8/media/shots/demeter.png", "https://raw.githubusercontent.com/Adolanium/hermes-pantheon/fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8/media/shots/hades.png", "https://raw.githubusercontent.com/Adolanium/hermes-pantheon/fb12efdd1b4f8e95a3a45eeedfa203d106d1efd8/media/shots/caduceus.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-pets-all", "repo": "https://github.com/poponline63/hermes-pets-all", "sha": "4ea8dfab97fe591f598886d699c3076ea1bb58ad", "description": "Browse every pet installed for this Hermes profile in its own desktop pane (thumbnails, search, click-to-adopt), plus a read-only list_pets tool for the agent.", "maintainer": "poponline63", "tier": "community", "category": "desktop", "requires_hermes": ">=0.19", "docs_url": "https://github.com/poponline63/hermes-pets-all", "platforms": [], "capabilities": {"provides_tools": ["list_pets"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-pickup", "repo": "https://github.com/murenovich/hermes-pickup", "sha": "dc9b2b9b24b194f6d9b2f17f8bd4c7fa73105a5d", "description": "Pick up where you left off: up to 10 cards (5 by default) of unfinished work from your recent Hermes chats, project folders and files, each with where you stopped and a one-click next step. Adapted from Herald OS by Luke (iamlukethedev), MIT. Disclosure \u2014 after explicit in-app consent (stored per profile), each Refresh reads recent chats from every profile's session store (read-only; profiles the user skips in Settings are never opened) and sends chat excerpts and metadata, project/file names and paths, git branch/changed-file names and recent commit subjects to the current profile's Hermes LLM route (the auxiliary title-generation model, main provider unless configured); runs read-only git and, on macOS, Spotlight `mdfind`; never reads document contents; writes only $HERMES_HOME/pickup/. The \"Next step\" button can submit a model-written prompt straight into the card's chat in one click. The optional install.sh, when asked, adds the plugin to every profile's plugins.enabled (undone exactly by uninstall.sh).", "maintainer": "murenovich", "tier": "community", "category": "desktop", "requires_hermes": ">=0.20.0", "docs_url": "https://github.com/murenovich/hermes-pickup#readme", "version": "0.2.0", "screenshots": ["https://raw.githubusercontent.com/murenovich/hermes-pickup/dc9b2b9b24b194f6d9b2f17f8bd4c7fa73105a5d/docs/screenshot.png"], "known_issues": ["On installs with several profiles, Hermes issue #134712 can make the Desktop backend answer Plugin not found; the page explains the fix (enable hermes-pickup in every profile, then restart Desktop)."], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-pii", "repo": "https://github.com/lukefx/hermes-pii", "sha": "bd6c8e5dea1d709ff3182cb78ceb141e7c06ab5c", "description": "Uses local Presidio and spaCy to redact supported PII in outgoing user text. Disclosure \u2014 filters Chat Completions user messages and Responses user input locally; system prompts, tool outputs and tool-call arguments are preserved. Fail-open: detector errors, including a missing model, send original text. Install spaCy en_core_web_sm 3.8.0 separately from its GitHub release wheel in the Hermes Python environment before enabling; Hermes installs only the named PyPI dependencies. No runtime model downloads or remote detection.", "maintainer": "lukefx", "tier": "community", "category": "tools", "version": "0.1.0.dev2", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "hermes-plex-music", "repo": "https://github.com/imzacksong/hermes-plex-music", "sha": "c583d6fdaac61d2108bada99b275460b4d08a993", "description": "Mini-Plexamp for Hermes Desktop: statusbar player for your Plex music library \u2014 likes synced to Liked Songs, custom playlists with rename/delete, shuffle + repeat, sleep timer, queue editing, OS media keys. Needs only Plex Media Server. Zero API keys, zero model tokens. Disclosure \u2014 talks only to the Plex Media Server you configure (default http://127.0.0.1:32400), sending your Plex token in the request URL as Plex requires; the token is stored in Desktop plugin storage, and the optional \"Get token\u2026\" button reads the Plex `.LocalAdminToken` file you pick. Likes and playlist create/rename/delete write to your Plex server. No agent tools, no telemetry.", "maintainer": "imzacksong", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/imzacksong/hermes-plex-music", "platforms": ["windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-plugin-chrome-profiles", "repo": "https://github.com/anpicasso/hermes-plugin-chrome-profiles", "sha": "03d24e95e7b14125c5227797a3a6682c3d890c84", "description": "Switch Hermes browser tools to a named Chromium-family profile (Chrome, Edge, Brave), local or remote, over CDP.", "maintainer": "anpicasso", "tier": "community", "category": "web", "docs_url": "https://github.com/anpicasso/hermes-plugin-chrome-profiles", "version": "2.0.0", "platforms": [], "capabilities": {"provides_tools": ["browser_profile"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-plugin-gen", "repo": "https://github.com/iruzen-dono/hermes-plugin-gen", "sha": "75899f960d8358731255172add8232344c9084b8", "description": "Generate, scaffold, and extend Hermes Agent plugins from simple descriptions.", "maintainer": "iruzen-dono", "tier": "community", "category": "tools", "docs_url": "https://github.com/iruzen-dono/hermes-plugin-gen#readme", "capabilities": {"provides_tools": ["plugin_add_skill", "plugin_add_tool", "plugin_scaffold"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-plugin-guard", "repo": "https://github.com/mauricemohr88-debug/hermes-plugin-guard", "sha": "857d881be77249c192c5fefa8254db186a7abbca", "description": "Static review of candidate Hermes plugins; target code is never executed.", "maintainer": "mauricemohr88-debug", "tier": "community", "category": "tools", "docs_url": "https://github.com/mauricemohr88-debug/hermes-plugin-guard#readme", "capabilities": {"provides_tools": ["plugin_guard_review_candidate"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-plugin-netbox", "repo": "https://github.com/andrewvieyra/hermes-plugin-netbox", "sha": "8ff1fc408e765294664e6ed96c4a5a437b76ceef", "description": "NetBox change management: query DCIM/IPAM objects, build a reviewed field-level diff, apply with a journal and roll back.", "maintainer": "andrewvieyra", "tier": "community", "category": "tools", "docs_url": "https://github.com/andrewvieyra/hermes-plugin-netbox", "platforms": [], "capabilities": {"provides_tools": ["netbox_query", "netbox_plan", "netbox_apply", "netbox_rollback", "netbox_plans"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["NETBOX_URL", "NETBOX_TOKEN"]}}, {"name": "hermes-pokemon", "repo": "https://github.com/sxuff/hermes-pokemon", "sha": "a3d9f57f345a744825b59432c343d07d4f508a24", "version": "0.7.0", "title": "Hermes Pok\u00e9mon", "description": "A cozy pixel-art companion garden for Hermes Desktop with three starters, nicknames, fetch, berries, XP, and optional evolution through all nine starter forms. The companion keeps you company on long turns, reacts quietly to failures, to what Hermes is doing and to turns finishing in other chats, and lives through seasons with real day length and moon phases, offline showers, wild visitors it greets in character, old-friend cameos, keepsakes, milestones that leave a bench, a lantern and bunting in the garden, and a sapling that grows with the days. Reachable from the keyboard, the status bar and the command palette. Independent fan project bundling CHUNSOFT Pok\u00e9mon sprites and SpriteCollab community contributions; artwork is excluded from the source-code MIT license. Uses local plugin storage and read-only session activity, with no runtime network requests, credentials, backend, or model calls. Disclosure \u2014 independent fan project bundling CHUNSOFT Pok\u00e9mon sprites and SpriteCollab contributions that are excluded from the MIT code license; reads session busy state and message-complete/tool-start/tool-complete events read-only (other chats contribute only \"a turn finished\"), focuses the composer (caret only, no text) or reveals its own pane only on a user click or command, saves a PNG snapshot to your downloads only when you click Save a snapshot, and keeps companion state in plugin storage; no network or model calls.", "maintainer": "sxuff", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/sxuff/hermes-pokemon#readme", "screenshots": ["https://raw.githubusercontent.com/sxuff/hermes-pokemon/a3d9f57f345a744825b59432c343d07d4f508a24/docs/images/habitat.png", "https://raw.githubusercontent.com/sxuff/hermes-pokemon/a3d9f57f345a744825b59432c343d07d4f508a24/docs/images/starters.png", "https://raw.githubusercontent.com/sxuff/hermes-pokemon/a3d9f57f345a744825b59432c343d07d4f508a24/docs/images/rewards-night.png", "https://raw.githubusercontent.com/sxuff/hermes-pokemon/a3d9f57f345a744825b59432c343d07d4f508a24/docs/images/cameo.png", "https://raw.githubusercontent.com/sxuff/hermes-pokemon/a3d9f57f345a744825b59432c343d07d4f508a24/docs/images/evolution.png", "https://raw.githubusercontent.com/sxuff/hermes-pokemon/a3d9f57f345a744825b59432c343d07d4f508a24/docs/images/visitor.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-project-stewardship", "repo": "https://github.com/Sahil-SS9/hermes-project-stewardship", "sha": "687bb035a2341fd1f26ade5e50b36b2331565ff5", "description": "Durable project ownership and bounded initiative management for Hermes fleets. Disclosure \u2014 a `pre_llm_call` hook adds a project's saved rules, decisions and facts to turns of bots assigned to that project; objective checks run allowlisted local programs only at autonomy level 3+ and GitHub objectives shell out to your own `gh api`; it creates and edits Hermes Kanban tasks through Hermes' internal kanban modules (title/body/tenant written directly to kanban.db), keeps its own SQLite DB under `<Hermes home>/plugin-data/hermes-dockyard/`, and its optional HTTP API (`/stewardship/v1`, 127.0.0.1) stays closed until you set a bearer token.", "maintainer": "Sahil-SS9", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/Sahil-SS9/hermes-project-stewardship", "platforms": [], "capabilities": {"provides_tools": ["steward_status", "steward_run_cycle", "steward_propose_initiative"], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-proton", "repo": "https://github.com/Maytrella007/hermes-proton", "sha": "3e0612848cf20116294f9ff58e74aadf34bc858e", "description": "Proton Mail, Calendar, Contacts and Drive for a Hermes Agent, through an MIT-licensed client built from Proton's own open-source Go libraries (go-srp, go-proton-api) \u2014 no Proton Bridge and no paid plan. Reads, searches and sends mail (attachments, scheduled send, labels, folders), manages calendar events and RSVPs, contacts (signed/encrypted vCards), and Drive (upload, download, move, rename, trash, public share links). Sign-in runs in a terminal via `hermes proton login` and the account password is never taken through chat; sending is refused until a recipient allowlist is set and every send is gated by Hermes's pre_tool_call approval. Disclosure \u2014 talks to Proton's private, undocumented web API over the network; stores a per-account session file (0600) holding OAuth-style tokens and the derived key passphrase (never the password) under the profile's plugin-data folder, and on first load copies any sessions from the standalone client's `~/.config/protonlite` into it; reads local files you approve for attachments and Drive uploads and writes downloaded attachments and Drive files under that plugin-data folder; shells out to gpg for calendar/Drive key provisioning; `proton_schedule_followup` creates one-shot Hermes cron jobs (read-only Proton toolset) that run unattended and deliver to your home channel; no self-update, no downloaded binaries, no telemetry.", "maintainer": "Maytrella007", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/Maytrella007/hermes-proton#readme", "version": "0.28.0", "image": "https://raw.githubusercontent.com/Maytrella007/hermes-proton/3e0612848cf20116294f9ff58e74aadf34bc858e/assets/banner.jpg", "readme": true, "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["proton_login", "proton_accounts", "proton_unread", "proton_list", "proton_read", "proton_send", "proton_draft", "proton_mark", "proton_delete", "proton_get_attachment", "proton_search", "proton_gather_context", "proton_labels", "proton_calendar", "proton_contacts", "proton_contact", "proton_drive_list", "proton_drive_download", "proton_drive_create_folder", "proton_drive_upload", "proton_drive_move", "proton_drive_rename", "proton_drive_delete", "proton_drive_share", "proton_drive_unshare", "proton_create_event", "proton_cancel_event", "proton_create_contact", "proton_edit_contact", "proton_delete_contact", "proton_rsvp", "proton_edit_event", "proton_label", "proton_schedule_followup", "proton_storage", "proton_empty", "proton_manage_label"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-pubky", "repo": "https://github.com/MCarlomagno/hermes-pubky", "sha": "3603b82893864af4e8b7a7bc5980864d37dd6ee4", "subdir": "plugin", "description": "Setup helper for managed Pubky agents. The launcher syncs agent state, including conversation database snapshots and portable configuration, to your remote Pubky homeserver.", "maintainer": "MCarlomagno", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/MCarlomagno/hermes-pubky#readme", "version": "0.2.3", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-quest", "description": "Read-only pixel-art RPG view of real Hermes Kanban and worker activity, with a live web dashboard tab and an optional native Desktop page. The Desktop page currently supports explicit local connections only; registry and SSH remote connections fail closed until a public SDK connection-lifecycle hook is available. Standalone demo data is synthetic. Disclosure \u2014 reads local Hermes data outside its own directory (kanban.db, every profile's state.db, profile.yaml, config.yaml model/effort, logs/agent.log, bot-status.json) on each dashboard poll: every /replay or /events request (about every 10 s while the tab is open) runs the bundled Python extractor as a subprocess (argument list, no shell, 30 s timeout); a background thread samples bot-status.json every 30 s (HERMES_QUEST_SAMPLER=off disables it) and writes bot-status history, checkpoint state, a lock and a random 0600 HMAC key under <hermes_home>/hermes-quest/ (not yet plugin-data); profile names and task titles are hidden unless enabled and only shown to host-authenticated dashboard sessions; the Desktop page works only on an explicit local connection; no network calls beyond the local Hermes backend.", "repo": "https://github.com/ap08960695/hermes-quest", "sha": "76e95ca9f95fc33603b889e55fac908ae70af7c7", "tier": "community", "category": "desktop", "maintainer": "ap08960695", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "version": "0.1.4", "docs_url": "https://github.com/ap08960695/hermes-quest", "screenshots": ["https://raw.githubusercontent.com/ap08960695/hermes-quest/76e95ca9f95fc33603b889e55fac908ae70af7c7/docs/screenshots/overview.png"]}, {"name": "hermes-resetwatch", "repo": "https://github.com/Adolanium/hermes-resetwatch", "sha": "248af31d70c293915943a39611494c40bb066343", "version": "0.2.25", "image": "https://raw.githubusercontent.com/Adolanium/hermes-resetwatch/248af31d70c293915943a39611494c40bb066343/assets/catalog-banner.png", "description": "Track subscription quotas and reset times in Hermes Desktop. Disclosure \u2014 probe.py re-executes itself under the Hermes Python interpreter located via HERMES_PYTHON / VIRTUAL_ENV / the parent process or the Hermes installer's managed venv (HERMES_HOME/installs). Every credential read is read-only and nothing is refreshed or stored: it reads provider API keys from the process environment, the Hermes .env, the Vaultwarden plugin's local secret cache (cache/vaultwarden_cache.json, only when Vaultwarden is the sole enabled secret source, keyed by a hash of BW_SESSION, which is never sent) and Docker s6 container env files; Hermes's saved OAuth logins (auth.json credential pool and HERMES_HOME/.anthropic_oauth.json); and other coding-assistant CLIs' local logins: Claude Code (credentials file, macOS keychain or Windows Credential Manager), Codex, Cursor (macOS keychain and the IDE's state.vscdb, opened read-only), Kimi, Grok, ZCode and Command Code. For GitHub Copilot (on by default) it tries COPILOT_GITHUB_TOKEN / GH_TOKEN / GITHUB_TOKEN (through Hermes get_secret, else the process environment), then the Copilot editor's apps.json / hosts.json, then runs gh auth token (prompts disabled, 3-second limit), trying each token in turn until GitHub accepts one. It sends each key only to its own vendor's usage endpoint, presenting the vendor client's identity headers where a private endpoint expects them (Claude Code and Codex CLI user agents, the Grok CLI client headers, and for Copilot the VS Code / Copilot Chat editor headers on api.github.com/copilot_internal/user, which GitHub does not document); environment variables such as GROK_CLI_CHAT_PROXY_BASE_URL, CLAUDE_CONFIG_DIR, CODEX_HOME and GROK_HOME change which host or file it uses. Usage results are cached under HERMES_HOME/cache/resetwatch, never tokens. It exposes nothing to the model: it is a Desktop page only.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-resetwatch#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-rich-ui", "repo": "https://github.com/jacobhausler/hermes-rich-ui", "sha": "693fe296579ae69cfc78b90624a7b6bfc2564755", "subdir": "", "description": "Rich, evidence-backed answer cards \u2014 tables, charts, metrics, timelines, sources \u2014 rendered inline in the desktop transcript Disclosure \u2014 Image and ImageGallery cards load agent-supplied https image URLs (up to 8 per gallery) from any host when the card renders in Desktop", "maintainer": "jacobhausler", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "0.1.4", "image": "https://raw.githubusercontent.com/jacobhausler/hermes-rich-ui/693fe296579ae69cfc78b90624a7b6bfc2564755/assets/screenshot-1.png", "screenshots": ["https://raw.githubusercontent.com/jacobhausler/hermes-rich-ui/693fe296579ae69cfc78b90624a7b6bfc2564755/assets/screenshot-1.png", "https://raw.githubusercontent.com/jacobhausler/hermes-rich-ui/693fe296579ae69cfc78b90624a7b6bfc2564755/assets/screenshot-2.png", "https://raw.githubusercontent.com/jacobhausler/hermes-rich-ui/693fe296579ae69cfc78b90624a7b6bfc2564755/assets/screenshot-3.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": ["rich_present"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-routines", "title": "Hermes Routines", "repo": "https://github.com/crdesign8/hermes-routines", "sha": "aa055f5851a9e9cacd0e8516f56c58f62c639292", "description": "A minimal Routines page in Hermes Desktop that turns crontab's five cron.manage actions into a plain-language interface for non-developers - name a routine, pick a schedule, write the prompt, and pause or resume it. No cron syntax, no service, no database; routine data stays in the host.", "maintainer": "crdesign8", "tier": "community", "category": "desktop", "docs_url": "https://github.com/crdesign8/hermes-routines#readme", "version": "0.1.0", "image": "https://raw.githubusercontent.com/crdesign8/hermes-routines/aa055f5851a9e9cacd0e8516f56c58f62c639292/docs/assets/hr-cover-04.png", "screenshots": ["https://raw.githubusercontent.com/crdesign8/hermes-routines/aa055f5851a9e9cacd0e8516f56c58f62c639292/docs/assets/hermes-routines-01.png", "https://raw.githubusercontent.com/crdesign8/hermes-routines/aa055f5851a9e9cacd0e8516f56c58f62c639292/docs/assets/hermes-routines-03.png"], "platforms": ["linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-rss", "repo": "https://github.com/Adolanium/hermes-rss", "sha": "11f8ea42e353a8fa228ed1e2b40e5bc10a9bdee3", "version": "0.0.4", "image": "https://raw.githubusercontent.com/Adolanium/hermes-rss/11f8ea42e353a8fa228ed1e2b40e5bc10a9bdee3/assets/catalog-banner.png", "description": "Read RSS and Atom feeds and discuss articles in Hermes Desktop. Disclosure \u2014 feeds and full articles are fetched with curl through the gateway's shell.exec on the connected Hermes host (public-IPv4 SSRF guard); opt-in AI grading sends article excerpts to your configured model and creates HERMES_HOME/skills/rss-importance-grading/SKILL.md if missing; opt-in image loading fetches publisher images directly from Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-rss#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-rustpush-imessage", "repo": "https://github.com/boobutler/hermes-rustpush-imessage", "sha": "695f74755cbcdbcd742baa51021fdb96a78ac10e", "description": "Local-only iMessage platform plugin backed by a launchd-supervised OpenBubbles RustPush sidecar over a same-user Unix socket.", "maintainer": "boobutler", "tier": "community", "category": "platform", "docs_url": "https://github.com/boobutler/hermes-rustpush-imessage", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-security-audit", "repo": "https://github.com/dafka007/hermes-security-audit", "sha": "60a7661bbe2f255c507d620275c59782cabe0335", "description": "Approval-gated local security audit for Hermes Agent using Gitleaks, OSV-Scanner, and Semgrep CE.", "maintainer": "dafka007", "tier": "community", "category": "tools", "docs_url": "https://github.com/dafka007/hermes-security-audit#readme", "platforms": [], "capabilities": {"provides_tools": ["security_audit"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-self-healing-context", "repo": "https://github.com/forumevi/hermes-self-healing-context", "sha": "b8ca86d6cc6f5eda445654d7e2cb08289a347cbf", "tier": "community", "category": "general", "maintainer": "forumevi", "version": "2.0.0", "title": "Hermes Self-Healing Context", "capabilities": {"provides_hooks": ["on_session_start", "on_session_end", "post_tool_call", "pre_llm_call"]}, "description": "Intercepts runtime errors and dynamically patches the context window \nusing local SQLite FTS5 memory for zero-downtime recovery.\n"}, {"name": "hermes-seo", "title": "Hermes SEO", "repo": "https://github.com/yuzushi-dev/hermes-seo", "sha": "540b657852234b5be21286760d1ec55e9175de02", "version": "0.1.2", "description": "Native Hermes port of Claude SEO 2.4.2: 45 SEO workflow and specialist skills, a credential-scoped hermes_seo_run tool, an isolated Python runtime, and advisory JSON-LD feedback. Derived from Claude SEO 2.4.2 (MIT; FLOW prompt materials CC BY 4.0). Disclosure \u2014 derived from Claude SEO 2.4.2 (MIT; FLOW prompt materials CC BY 4.0); the hermes_seo_run tool starts local subprocesses in the Hermes host process, not a Docker terminal sandbox, and model-supplied script arguments may name host paths, so it can read host files (the Gemini image-edit utility uploads the named file to Google, the IndexNow utility reads a URL-list file); `hermes seo setup` downloads Python packages from PyPI within version ranges into a private environment and optionally Chromium through Playwright; audits fetch user-selected websites; separately configured providers (Moz, Bing Webmaster, Keywords Everywhere, Google APIs, Matomo, DataForSEO, IndexNow, Google Gemini) receive the data sent to them and may incur charges; skills ask before paid or mutating calls but the tool does not enforce approvals; Gemini images are saved to ~/Documents/nanobanana_generated, and other runtime state stays in Hermes plugin data storage; provider keys are read from the active Hermes profile and passed only to the script that needs them; Google OAuth workflows are disabled; no telemetry, bundled credentials, background process or self-updater.", "maintainer": "yuzushi-dev", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/yuzushi-dev/hermes-seo#readme", "image": "https://raw.githubusercontent.com/yuzushi-dev/hermes-seo/540b657852234b5be21286760d1ec55e9175de02/assets/hermes-seo-card.png", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["hermes_seo_run"], "provides_hooks": ["transform_tool_result"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-session-diff", "repo": "https://github.com/Adolanium/hermes-session-diff", "sha": "9ed3bf2f6e7d859495589940430782c542bbc4f9", "description": "Persistent session file diffs, run comparisons, and individual edit history in Hermes Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/Adolanium/hermes-session-diff#readme", "image": "https://raw.githubusercontent.com/Adolanium/hermes-session-diff/9ed3bf2f6e7d859495589940430782c542bbc4f9/assets/catalog-banner.png", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": ["tool_execution"], "requires_env": []}}, {"name": "hermes-session-reset-policy", "repo": "https://github.com/fastfinge/hermes-session-reset-policy", "sha": "0f2ea5ad995f1e4ba7c92c2dbd21afa868b8ae21", "description": "Opt-in idle/daily gateway conversation resets. Reads the existing session_reset block (mode idle | daily | both, idle_minutes, at_hour) and starts a fresh session on the first inbound message past the boundary. No timers, no background writes.", "maintainer": "fastfinge", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/fastfinge/hermes-session-reset-policy#readme", "version": "0.3.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_gateway_dispatch"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-session-warmer", "repo": "https://github.com/mojomast/hermes-session-warmer", "sha": "eba7be111c44e4ac6b702cdcb341c8d71da1c57e", "version": "0.1.0", "description": "Opt-in bounded idle prompt warming for explicitly allowlisted OpenAI-compatible text-chat endpoints. Sends potentially billable requests; no tool execution or conversation writes. Does not support Codex/Responses or native Anthropic. Authenticated endpoints use optional HERMES_SESSION_WARMER_API_KEY.", "maintainer": "mojomast", "tier": "community", "category": "models", "docs_url": "https://github.com/mojomast/hermes-session-warmer#readme", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_llm_call", "on_session_end"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "hermes-sidepulse", "repo": "https://github.com/d31tcjg/hermes-sidepulse", "sha": "864785d72bfcdec6605622a0dcf211ea35a11917", "subdir": "python", "description": "SidePulse lifecycle status backend; Desktop focus tracking requires the separate companion in the linked setup guide. Disclosure \u2014 forwards event names, a hashed agent id, the raw session_id and tool names to a local AF_UNIX socket and a 0600 jsonl log; no network egress.", "maintainer": "d31tcjg", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/d31tcjg/hermes-sidepulse/blob/v0.2.0-beta.1/README.md", "version": "0.2.0-beta.1", "platforms": ["macos", "linux"], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start", "on_session_reset", "pre_llm_call", "pre_tool_call", "post_tool_call", "pre_approval_request", "post_approval_response", "api_request_error", "post_llm_call", "on_session_end", "on_session_finalize"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-slash-router", "repo": "https://github.com/raitoxlol/hermes-slash-router", "sha": "2088919f4c59927aa2d47f21bb12e639453c1a2a", "description": "Jev-powered routing for misspelled, shortened, and meaning-based slash commands in the Hermes Desktop composer. Preserves drafts when unsure. Requires a TypeSafe API key; every non-exact lookup uses paid TypeSafe API usage. Disclosure \u2014 every non-exact slash token is sent through the plugin's local backend to api.typesafe.ai (paid, your TYPESAFE_API_KEY) together with the Desktop command catalog (names and descriptions), any prior route, up to 8 saved correction explanations and any clarification you type into its panel; message arguments and conversation content are not sent; the backend reads HERMES_HOME/.env only to check whether TYPESAFE_API_KEY is set.", "maintainer": "raitoxlol", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.2", "docs_url": "https://github.com/raitoxlol/hermes-slash-router#readme", "version": "0.3.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TYPESAFE_API_KEY"]}}, {"name": "hermes-snapcompact", "repo": "https://github.com/vimona3ds/hermes-snapcompact", "sha": "8a274ca4a501e5661f1e2762150c4c3f99e374ce", "description": "Snapcompact context engine: archives conversation history as dense bitmap PNG frames that vision models read back at ~1/3 the token cost.", "maintainer": "vimona3ds", "tier": "community", "category": "memory", "docs_url": "https://github.com/vimona3ds/hermes-snapcompact", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-soniox", "repo": "https://github.com/XimilalaXiang/hermes-soniox", "sha": "99c747918d3049bca3c6744ba92b176b3f6bef6c", "description": "Native BYOK Soniox text-to-speech and asynchronous speech-to-text providers with configurable languages and voices, automatic STT language detection, and Hermes voice-bubble support. Disclosure \u2014 TTS sends reply text and synthesis settings to tts-rt.soniox.com; STT uploads audio, optional language hints, and optional prompt context to api.soniox.com, then best-effort deletes the remote transcription and uploaded file. SONIOX_API_KEY is resolved through Hermes' active-profile secret scope. No telemetry, shell commands, background processes, or stored credentials.", "maintainer": "XimilalaXiang", "tier": "community", "version": "0.2.0", "category": "voice", "requires_hermes": ">=0.22.4", "docs_url": "https://github.com/XimilalaXiang/hermes-soniox#readme", "platforms": [], "known_issues": ["Realtime WebSocket TTS/STT is not implemented; v0.2.0 uses file-based synthesis and asynchronous transcription."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SONIOX_API_KEY"]}}, {"name": "hermes-speech", "repo": "https://github.com/allmodels-io/hermes-speech", "sha": "6efecc359aa4c091b41ad530575943657ee259de", "description": "Give your agent the voice it deserves. Guided TTS and STT setup for Hermes, with voice search and previews, model switching, testing, and native spoken replies across supported providers. Access 80+ speech models through a single API key with the AllModels router.", "maintainer": "moeadham", "tier": "community", "category": "voice", "requires_hermes": ">=0.20.0", "docs_url": "https://github.com/allmodels-io/hermes-speech#readme", "version": "0.3.3", "image": "https://raw.githubusercontent.com/allmodels-io/hermes-speech/6efecc359aa4c091b41ad530575943657ee259de/.github/social-preview.png", "platforms": [], "capabilities": {"provides_tools": ["allmodels_speech_setup", "allmodels_speech_manage"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-ssh", "repo": "https://github.com/Adolanium/hermes-ssh", "sha": "f3f916149ad3130f2285dad94ade5ebe43091fad", "description": "Manage SSH connections and remote workspaces in Hermes Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-ssh#readme", "image": "https://raw.githubusercontent.com/Adolanium/hermes-ssh/f3f916149ad3130f2285dad94ade5ebe43091fad/assets/catalog-banner.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-structured-aux-models", "repo": "https://github.com/trajectoire-ai/hermes-structured-aux-models", "sha": "e5c49b081ad04adca2ee3edc601b09ede6cee4c5", "description": "Routes selected Hermes auxiliary tasks (approval, MCP sampling, compression) through bounded Jev decision calls on OpenRouter instead of free-form chat prompts, failing open to the operator's own auxiliary provider for anything it cannot express as a decision. Disclosure \u2014 sends redacted approval prompts, MCP tool names and compression transcript blocks to openrouter.ai using your OpenRouter key (read-only); on any error approvals escalate to you, never auto-approve; the default decision_model is a moving alias, pin it.", "maintainer": "trajectoire-ai", "tier": "community", "category": "models", "requires_hermes": ">=0.21", "docs_url": "https://github.com/trajectoire-ai/hermes-structured-aux-models#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-stt-enhance", "repo": "https://github.com/dmmeteo/hermes-stt-enhance", "sha": "7be60e334a2d7cba870a76b5758e83655323d8b0", "subdir": "hermes-stt-enhance", "description": "Local speech-to-text (provider stt_enhance) with faster-whisper or opt-in sherpa-onnx Parakeet V3 and long-audio chunking, plus an optional bounded LLM pass that enhances the transcript using a custom skill, an inline prompt or the default, and keeps the raw transcript on failure. Disclosure \u2014 audio is decoded locally. Post-processing is on by default and sends the transcript text to the LLM Hermes routes the stt_enhance auxiliary task to (your main, usually remote, provider unless you point it at a local endpoint or set post_processing.enabled: false). It reads the body of the SKILL.md you configure (never executed) and runs ffmpeg/ffprobe. The opt-in Parakeet backend reads a local model export and, on first use and only when your config.yaml explicitly sets security.allow_lazy_installs: true, installs pinned sherpa-onnx and numpy from PyPI into ~/.hermes/plugin-runtimes/hermes-stt-enhance/ (shared by all profiles). No tools, hooks, background processes, telemetry or stored credentials.", "maintainer": "dmmeteo", "tier": "community", "category": "voice", "requires_hermes": ">=0.15.0", "docs_url": "https://github.com/dmmeteo/hermes-stt-enhance/tree/7be60e334a2d7cba870a76b5758e83655323d8b0/hermes-stt-enhance#readme", "version": "0.5.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-subscription-meter", "repo": "https://github.com/NealZhouPanda/hermes-subscription-meter", "sha": "b5f3499d095b665306897cce43db912d08bf9036", "description": "Provider-neutral subscription quota matrix panel \u2014 each provider's subscription window as a single time x quota row (elapsed vs remaining at a glance), with UI-side show/hide per provider row. Disclosure \u2014 reads provider keys from the current profile's .env and token presence from its auth.json, and calls each provider's own usage/balance API with that key (Kimi, GLM, MiniMax, Command Code, DeepSeek, xAI management, OpenRouter, Alibaba Cloud BSS, Grok, Codex via Hermes); an optional shared_sources setting reads another profile's .env/auth.json the same way; the token-activity heatmap reads per-day token totals, providers and model names from the state.db of this profile and of every other profile on the install (read-only, no message content, nothing leaves the machine); nothing is written outside this plugin's settings.", "maintainer": "NealZhouPanda", "tier": "community", "category": "desktop", "docs_url": "https://github.com/NealZhouPanda/hermes-subscription-meter#readme", "version": "0.7.0", "image": "https://raw.githubusercontent.com/NealZhouPanda/hermes-subscription-meter/b5f3499d095b665306897cce43db912d08bf9036/docs/banner.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-switchyard", "repo": "https://github.com/bgrablin/hermes-switchyard", "sha": "895c101d4228f12cbb7e56194f94d0e555256339", "subdir": "", "description": "Jev-powered Hermes plugin for skill/model routing, typed assess, DOM/Cua computer use, adaptive reasoning effort with a per-turn receipt line, and FTS rerank. Disclosure: the default-on adaptive llm_request sends up to 1,200 characters of the current user message to TypeSafe/OpenRouter after Hermes redact_for_egress (no history or tool output); greetings and thanks are decided locally with no call; without the Hermes redactor it sends metadata only (disable via adaptive_reasoning_effort false). Separate default-on hosted skill routing sends up to 4,000 characters of the current user turn after Hermes redact_for_egress, plus skill names, to the same provider; without the redactor it stays local (opt down to local_only); light turns (greetings, closed acknowledgements, and read-only listings) skip that hosted call by default. Model routing remains advisory. Disclosure \u2014 By default, adaptive effort sends up to 1,200 characters of the current user message, and hosted skill routing sends up to 4,000 characters plus skill names, to TypeSafe/OpenRouter Jev after Hermes redact_for_egress (greetings and light turns stay local). The jev_session_search_rerank and jev_computer_use DOM tools send query/card and public-page text using the plugin's own masking. Off unless enabled: evidence prefetch sends source files the user names under evidence_finder_root (up to 80 KB), cross-tool stuck advice sends redacted error excerpts, and the switchyard-approvals provider, once selected for auxiliary.approval, sends flagged shell commands and your approval policy to OpenRouter Jev, whose confident verdict can auto-approve them (any failure falls back to a human prompt). /switchyard effort receipt saves the plugin's own setting to config.yaml.", "maintainer": "bgrablin", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/bgrablin/hermes-switchyard/blob/895c101d4228f12cbb7e56194f94d0e555256339/docs/SETUP.md", "version": "0.6.0", "image": "https://raw.githubusercontent.com/bgrablin/hermes-switchyard/895c101d4228f12cbb7e56194f94d0e555256339/docs/assets/hermes-switchyard-overview.png", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["jev_assess", "jev_computer_use", "jev_skill_select", "jev_skill_select_many", "jev_model_route", "jev_model_route_approved", "jev_session_search_rerank"], "provides_hooks": ["pre_tool_call", "transform_tool_result", "pre_llm_call", "post_llm_call", "post_tool_call", "transform_llm_output", "post_api_request"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "hermes-t3-control", "repo": "https://github.com/thetasigmaio/hermes-t3-control", "sha": "aeb5493e30e744b414cbfe88a70adb1acd59a1c8", "description": "Bounded tools to list, read, create, and control local T3 coding threads on Linux and WSL2.", "maintainer": "thetasigmaio", "tier": "community", "category": "tools", "requires_hermes": ">=0.20.4", "docs_url": "https://github.com/thetasigmaio/hermes-t3-control/blob/aeb5493e30e744b414cbfe88a70adb1acd59a1c8/docs/compatibility.md", "platforms": ["linux"], "capabilities": {"provides_tools": ["t3_threads", "t3_thread_read", "t3_thread_create", "t3_thread_send", "t3_thread_set_mode", "t3_thread_implement_plan", "t3_turn_interrupt", "t3_session_stop", "t3_thread_wait", "t3_thread_respond", "t3_thread_settle"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-tabular", "repo": "https://github.com/frankiethull/hermes-tabular", "sha": "c5b965086d0d5b8239703c2aa8a5df99b1eee5c3", "subdir": "", "description": "Tabular AI that grows with your tables \u2014 Hermes skills for honest tabular ML, one entry point. Disclosure \u2014 Installing pulls numpy, pandas, scikit-learn, pyarrow, joblib and pyyaml into Hermes's environment. The skills have the agent run Python on your data files, may ask it to pip install catboost, tabicl/torch, mapie or matplotlib, and the TabICL skill downloads a pretrained checkpoint of a few hundred MB on first use. Saved checkpoints are pickles: load only ones you made.", "maintainer": "frankiethull", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "version": "0.2.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-tailscale", "repo": "https://github.com/Adolanium/hermes-tailscale", "sha": "f4cc92e69859a9ee2e899195f0f2559c10874525", "version": "0.0.8", "image": "https://raw.githubusercontent.com/Adolanium/hermes-tailscale/f4cc92e69859a9ee2e899195f0f2559c10874525/assets/catalog-banner.png", "description": "Browse Tailscale devices and connect to remote Hermes instances in Hermes Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-tailscale#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-talk", "repo": "https://github.com/TheSmokeDev/hermes-talk", "sha": "981711b8f44df78e2ad958174e931c1b584b8bdd", "description": "Realtime voice for Hermes through terminal, Discord, dashboard and Desktop. Live voice mode (TALK_VOICE_MODE=live, TALK_LIVE_AUTH=subscription) connects with your own Codex OAuth session to the undocumented chatgpt.com/backend-api/codex/realtime/calls endpoint, which is outside the vendor's published API terms and may change or stop working without notice.", "maintainer": "TheSmokeDev", "tier": "community", "category": "voice", "version": "0.21.1", "docs_url": "https://github.com/TheSmokeDev/hermes-talk/blob/981711b8f44df78e2ad958174e931c1b584b8bdd/README.md", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end", "subagent_start", "subagent_stop", "post_tool_call", "pre_approval_request"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-taskbar-badge", "repo": "https://github.com/BrokeSkill/hermes-taskbar-badge", "sha": "fabe90e1e2271c90e31ccd4b784352193e46c795", "description": "Windows taskbar badge on the Hermes window when a turn finishes. Calls navigator.setAppBadge on the message.complete event while the window is in the background, and clears it when the window regains focus or another session is opened. Disclosure \u2014 no network calls and no data leaves the machine; the badge is drawn by the app's own Electron process, which maps the Chromium Badging API onto the Windows taskbar overlay.", "maintainer": "BrokeSkill", "tier": "community", "category": "desktop", "version": "0.1.0", "requires_hermes": ">=0.21.6", "image": "https://raw.githubusercontent.com/BrokeSkill/hermes-taskbar-badge/fabe90e1e2271c90e31ccd4b784352193e46c795/docs/demo.png", "platforms": ["windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-teammates", "repo": "https://github.com/100yenadmin/hermes-teammates", "sha": "de85f5d4793e122cde98342bddd6e1bf3cd53459", "description": "Give your agent a team: named subagents with their own instructions, tools and model, which it assigns work to, checks on and steers mid-task. The operator defines the roster; the agent follows up with a digest of earlier results and can work a Kanban teammates lane with a review handoff. Launches subagents only through the public ctx.subagent_lifecycle API. Stock Hermes; no patched core. Disclosure \u2014 adds six tools (teammates_roster, teammate_assign, teammate_check, teammate_wait, teammate_message, teammate_stop) and a /teammates command; the model picks only a teammate name, and the operator's config decides what it means. Teammates run as in-process Hermes subagents using credentials selected by Hermes from the parent, delegation settings or an operator-configured teammate route where supported. Toolsets narrow the parent's tools at toolset granularity only (the file toolset includes write_file and patch); Hermes can add inherited MCP toolsets back unless delegation.inherit_mcp_toolsets is false. A teammate with invalid settings refuses to launch. A delegated child cannot start teammates. Steering uses the lifecycle steer where Hermes provides it, otherwise delegate_task's steer action with the turn-bound parent. Under plugins.isolation: host every tool except the roster refuses. Optionally the roster is read from an operator-named YAML file (roster_file, relative to the profile home or absolute, so several profiles can share one); the plugin never writes it. It keeps a per-profile SQLite run ledger in its plugin-data folder (goals, statuses, clipped summaries, role hashes and available token receipts; no full transcripts). It does not read credential stores. Where supported in-process, subagent_start and post_api_request hooks collect token receipts for mapped child sessions. For a card assigned to its non-profile lane, it claims the card through the Kanban DB, heartbeats the claim and its worker, then moves the card to review without a reviewer, or blocks it on failure, a stop or an unavailable result; it never completes a card. It runs one in-process monitor thread per run to retain finished results and, for lane runs, keep the claim alive; no network calls, child processes or self-updates of its own. Completion-notice code exists but never injects on current Hermes because the host cannot bind notices to the receiving session; use teammate_wait instead. Includes a report-a-problem skill: the agent drafts a bug report and files it to this repository with gh only after the user approves the draft.", "maintainer": "100yenadmin", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/100yenadmin/hermes-teammates#readme", "version": "1.1.0", "image": "https://raw.githubusercontent.com/100yenadmin/hermes-teammates/de85f5d4793e122cde98342bddd6e1bf3cd53459/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/100yenadmin/hermes-teammates/de85f5d4793e122cde98342bddd6e1bf3cd53459/docs/media/screenshot-roster.png", "https://raw.githubusercontent.com/100yenadmin/hermes-teammates/de85f5d4793e122cde98342bddd6e1bf3cd53459/docs/media/screenshot-assign.png", "https://raw.githubusercontent.com/100yenadmin/hermes-teammates/de85f5d4793e122cde98342bddd6e1bf3cd53459/docs/media/screenshot-results.png", "https://raw.githubusercontent.com/100yenadmin/hermes-teammates/de85f5d4793e122cde98342bddd6e1bf3cd53459/docs/media/screenshot-slash-command.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": ["teammates_roster", "teammate_assign", "teammate_check", "teammate_wait", "teammate_message", "teammate_stop"], "provides_hooks": ["subagent_start", "post_api_request"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-telegram-business", "repo": "https://github.com/NousResearch/hermes-labs-plugins", "sha": "0480b2e2947276b55b302d3288b30597d238ba51", "subdir": "telegram-business", "description": "Observe-with-approval Telegram Business Mode (secretary bot): Hermes drafts replies to your customers' messages and DMs each draft to you with Send, Edit and Discard buttons; nothing reaches a customer until you tap Send. A Hermes Labs plugin: built by Nous Research, not supported. Disclosure \u2014 each customer message is sent to your active Hermes model to draft the reply, and drafts and connection records are stored locally in <HERMES_HOME>/telegram-business/state.db.", "maintainer": "NousResearch", "tier": "community", "category": "platform", "docs_url": "https://github.com/NousResearch/hermes-labs-plugins/tree/main/telegram-business", "image": "https://raw.githubusercontent.com/NousResearch/hermes-labs-plugins/0480b2e2947276b55b302d3288b30597d238ba51/assets/telegram-business.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-telemetry-dashboard", "repo": "https://github.com/cybertecla/hermes-telemetry-dashboard", "sha": "1399a77f8096c536e51dbd5e732da44ff345c354", "description": "Dashboard-only read plugin: visualize the shared-metrics telemetry Hermes collects locally \u2014 metric families, drilldowns, milestone timeline, install snapshot, and the exact next package payload. Send stays off.", "maintainer": "cybertecla", "tier": "community", "category": "general", "docs_url": "https://github.com/cybertecla/hermes-telemetry-dashboard#readme", "version": "0.1.1", "screenshots": ["https://raw.githubusercontent.com/cybertecla/hermes-telemetry-dashboard/1399a77f8096c536e51dbd5e732da44ff345c354/assets/screenshot-overview.png", "https://raw.githubusercontent.com/cybertecla/hermes-telemetry-dashboard/1399a77f8096c536e51dbd5e732da44ff345c354/assets/screenshot-drilldown.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-telemetry", "repo": "https://github.com/nujovich/hermes-telemetry", "sha": "872eadc4b1e6797bc72c8eed3daf54f199d2bed5", "description": "Observability + budget guardrails for Hermes Agent \u2014 tokens, cost, latency, tool calls per session and cron job. Persists to local SQLite. Exposes /stats and /budget slash commands. Disclosure \u2014 records per-session tokens, cost, latency, tool names and sender/profile ids (no message text) in ~/.hermes/telemetry/telemetry.db; fetches public model pricing from openrouter.ai/api/v1/models on first load and at most once a day; in the default enforce mode first load writes a $5/day, $100/month global budget to telemetry/budget.yaml, and a hard breach blocks every tool call and pauses the over-budget cron job until the window resets (set plugins.entries.hermes-telemetry.settings.mode: observe to record without enforcing); the optional standalone dashboard server binds 127.0.0.1 with no auth.", "maintainer": "nujovich", "tier": "community", "category": "general", "docs_url": "https://nujovich.github.io/hermes-telemetry/", "capabilities": {"provides_tools": [], "provides_hooks": ["api_request_error", "on_session_end", "on_session_finalize", "on_session_start", "post_api_request", "post_llm_call", "post_tool_call", "pre_api_request", "pre_llm_call", "pre_tool_call", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": []}, "version": "0.9.1"}, {"name": "hermes-tenuo", "repo": "https://github.com/tenuo-ai/hermes-tenuo", "sha": "8bce830c5df9dcd06d16688a954146d8edc0c562", "description": "Security guardrails for Hermes tool calls: per-call authorization, so a prompt injection cannot make the agent do more than you allowed. Each call is checked against a signed, expiring permission slip (a warrant) before the handler runs, down to the arguments (file paths, search queries, spending limits), and every decision lands in a local audit log. Give cron jobs, delegate_task subagents and gateway users their own policy.\nDisclosure \u2014 hermes-tenuo is a no-op until a warrant is configured and blocks every tool call in a kanban worker that has no per-task warrant; it appends every tool call's name and full arguments to $HERMES_HOME/tenuo/audit.jsonl (disable with audit_log: false); when TENUO_CONNECT_TOKEN or TENUO_CONTROL_PLANE_URL are set, the bundled tenuo SDK (compiled Rust core) streams those decisions, including arguments, to that control plane.", "title": "Tenuo", "maintainer": "tenuo-ai", "tier": "community", "category": "tools", "requires_hermes": ">=0.20", "docs_url": "https://github.com/tenuo-ai/hermes-tenuo", "version": "0.1.3", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "on_session_start", "on_session_end", "subagent_start"], "provides_middleware": [], "requires_env": ["TENUO_WARRANT", "TENUO_SIGNING_KEY"]}}, {"name": "hermes-terminal", "repo": "https://github.com/Adolanium/hermes-terminal", "sha": "014bb0cb55a6e61ba1a2f89e2c2bb0f8b0197064", "version": "0.0.4", "image": "https://raw.githubusercontent.com/Adolanium/hermes-terminal/014bb0cb55a6e61ba1a2f89e2c2bb0f8b0197064/assets/catalog-banner.png", "description": "Run the Hermes terminal interface in a Hermes Desktop workspace tab.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Adolanium/hermes-terminal#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "catalog"}, {"name": "hermes-token-speed", "repo": "https://github.com/Ayshinko/hermes-token-speed", "sha": "0c0bb14b92ea1bd7d1287a22d845393632d14a71", "subdir": "", "description": "Live decode tokens-per-second chip for the Hermes Desktop status bar: 1-second sliding window while the model is still streaming, tool execution time excluded from decode seconds, UI spinner frames never counted, TTFT tracked separately, cumulative totals calibrated against authoritative provider usage at turn end. Desktop-only (desktop/plugin.js); no agent tools, hooks, middleware or env vars.", "maintainer": "Ayshinko", "tier": "community", "category": "desktop", "version": "1.1.0", "docs_url": "https://github.com/Ayshinko/hermes-token-speed#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-toolsmith", "repo": "https://github.com/Adolanium/hermes-toolsmith", "sha": "419669c1efd49513cc404f5503c99b61ed68593f", "version": "1.0.1", "image": "https://raw.githubusercontent.com/Adolanium/hermes-toolsmith/419669c1efd49513cc404f5503c99b61ed68593f/assets/catalog-banner.png", "description": "Local developer tools, transformation recipes, and reviewed chat handoff inside Hermes Desktop.", "maintainer": "Adolanium", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/Adolanium/hermes-toolsmith#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-town", "repo": "https://github.com/sxuff/hermes-town", "sha": "f3b89401fafde0cd3ebaaccf01ea9e658bc66ff9", "subdir": "integrations/hermes-town-plugin", "description": "Local pixel-art town where every Hermes session is a resident and every tool call walks to a building. Passive lifecycle bridge to a loopback-only server; prompts, arguments, and output never leave the process. Disclosure \u2014 version 0.3.0 bundles the Town Node server and a prebuilt browser app inside the plugin directory and adds a hermes town setup/start/status/stop/open command tree. Nothing is downloaded and no npm install runs at any point; node (^20.19 or >=22.12) must already be installed and is launched only by the explicit hermes town start command, bound to 127.0.0.1 only. Runtime state, a 0600 bridge token, a bounded event journal and rotated server logs are written under HERMES_HOME/hermes-town/runtime/. On start the server also reads HERMES_HOME/cron/jobs.json (job id and enabled flag only) to place one resident per enabled scheduled job.", "maintainer": "sxuff", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/sxuff/hermes-town#readme", "version": "0.3.0", "image": "https://raw.githubusercontent.com/sxuff/hermes-town/f3b89401fafde0cd3ebaaccf01ea9e658bc66ff9/artifacts/catalog-banner.png", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_llm_call", "pre_tool_call", "post_tool_call", "on_session_start", "on_session_end", "on_session_finalize", "on_session_reset", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-tripo", "title": "Hermes Tripo", "repo": "https://github.com/Adolanium/hermes-tripo", "sha": "09b26f6b3b2662a0fe86dc782283bc4cddf7a196", "description": "Tripo 3D tools on Tripo's v3 API (openapi.tripo3d.ai). Text, photo or multiview to 3D, image edits, retexturing, splitting into parts, Smart UV, auto-rigging, preset animations, retopology, format conversion (FBX, USDZ, STL, 3MF, OBJ, GLTF) and downloads, with an inline 3D viewer in Hermes Desktop that shows whether a model is really rigged, a library pane that shows where each model came from (the steps behind it, its prompt, a jump back to the chat that made it, and one-click next steps), a local model inspector, and a status-bar chip with the Tripo balance and this chat's spend. Every credit-spending call goes through Hermes's approval prompt with its estimated cost, and a per-chat limit (a setting under Settings \u2192 Plugins, default 100 credits) makes it ask again past it. Needs TRIPO_API_KEY. Unofficial; not affiliated with Tripo or VAST. Disclosure \u2014 sends prompts and the local images or 3D model files you or the agent name (up to 50 MB; every local-file upload, free calls included, goes through Hermes's approval prompt) to Tripo's API at openapi.tripo3d.ai with TRIPO_API_KEY; saves downloaded models to $HERMES_HOME/tripo/ or a folder the agent picks (never overwriting: a clash gets a \" (2)\" suffix), and the Desktop viewer's save button copies models into your Downloads/Tripo folder (or the folder set in its settings); keeps a local task history in $HERMES_HOME/tripo/history.json (chat id, tool, prompt, parent task, estimated cost, saved file paths; at most 2,000 tasks, never sent anywhere); the Desktop library opens local .glb/.fbx/.obj/.stl files only from inside your home folder, $HERMES_HOME/tripo/ or the viewer's download folder, and uploads nothing; the status-bar chip reads your Tripo balance every two minutes and after each Tripo tool call; no shell commands, background processes or telemetry.", "maintainer": "Adolanium", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Adolanium/hermes-tripo#readme", "version": "0.4.0", "image": "https://raw.githubusercontent.com/Adolanium/hermes-tripo/09b26f6b3b2662a0fe86dc782283bc4cddf7a196/assets/catalog-banner.png", "capabilities": {"provides_tools": ["tripo_generate_model", "tripo_generate_image", "tripo_texture", "tripo_rig_check", "tripo_rig", "tripo_animate", "tripo_retopology", "tripo_convert", "tripo_parts", "tripo_uv", "tripo_multiview", "tripo_task", "tripo_download", "tripo_balance"], "provides_hooks": ["pre_tool_call", "pre_llm_call"], "provides_middleware": [], "requires_env": ["TRIPO_API_KEY"]}}, {"name": "hermes-trove", "repo": "https://github.com/misterdas/hermes-trove", "sha": "69c673eeb2fcbaf12e9b88451ad1f627a88bc930", "description": "DAG-based context engine that never loses a message \u2014 full-text search, semantic recall, assertion-backed evidence compilation, and pre-answer sufficiency gating Disclosure \u2014 replaces the context engine and stores every turn's full raw transcript in HERMES_HOME/trove.db with secret redaction OFF by default; with TROVE_EMBEDDING_PROVIDER=voyage, transcript text is sent to Voyage AI for embeddings; as a fallback it reads private AIAgent attributes read-only via frame inspection. No other network egress.", "maintainer": "misterdas", "tier": "community", "category": "general", "requires_hermes": ">=0.20", "docs_url": "https://github.com/misterdas/hermes-trove#readme", "version": "1.1.4", "platforms": [], "capabilities": {"provides_tools": ["trove_grep", "trove_recall", "trove_query_state", "trove_compute", "trove_compile_evidence", "trove_evidence_pack", "trove_retrieve", "trove_recent", "trove_load_session", "trove_describe", "trove_expand", "trove_expand_query", "trove_status", "trove_inspect", "trove_doctor"], "provides_hooks": ["pre_llm_call", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": ["TROVE_ENABLE_SLASH_COMMAND"]}}, {"name": "hermes-vcc-engine", "repo": "https://github.com/danbiocchi/hermes-vcc-engine", "sha": "31ee4fe7ef3e3f6c67dadfd45ebc1a3cb9773f95", "description": "Instant context compaction for Hermes Agent: builds the compaction summary in milliseconds with no LLM call, keeping the exact commands, exit codes, errors and files, each linked back to its original message for recall via session_search. Disclosure \u2014 no network calls, shell commands or credentials; reads Hermes's config.yaml through Hermes's own loader; subclasses ContextCompressor and relies on its private methods, falling back to the stock compressor if they are missing.", "maintainer": "danbiocchi", "tier": "community", "category": "general", "requires_hermes": ">=0.21.7", "version": "0.4.1", "docs_url": "https://github.com/danbiocchi/hermes-vcc-engine#readme", "readme": true, "title": "Instant Context Compactor", "image": "https://raw.githubusercontent.com/danbiocchi/hermes-vcc-engine/31ee4fe7ef3e3f6c67dadfd45ebc1a3cb9773f95/docs/img/banner.png", "screenshots": ["https://raw.githubusercontent.com/danbiocchi/hermes-vcc-engine/31ee4fe7ef3e3f6c67dadfd45ebc1a3cb9773f95/docs/img/results.svg", "https://raw.githubusercontent.com/danbiocchi/hermes-vcc-engine/31ee4fe7ef3e3f6c67dadfd45ebc1a3cb9773f95/docs/img/recall.svg"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-vcc", "repo": "https://github.com/agentbox-tech/hermes-vcc", "sha": "d08eb0adf4aff5dc4a9ec7179687a08fd6350561", "subdir": "engine", "description": "Algorithmic (no-LLM) context compaction engine: builds summaries by deterministic regex extraction instead of a summarizer-model call \u2014 zero-token, byte-reproducible, inside the built-in ContextCompressor; compacted turns stay searchable via session_search. Disclosure \u2014 no network calls, no env vars, no secrets, no telemetry; registers no tools/hooks/middleware and reads only the turns the host passes for compaction; debug: true (default false) writes one metadata-only file $HERMES_HOME/vcc-debug.json. Derived from pi-vcc (MIT, sting8k)", "maintainer": "rain-sk", "tier": "community", "category": "general", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/agentbox-tech/hermes-vcc", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-verifier", "repo": "https://github.com/am423/hermes-verifier", "sha": "514ff4a7a937e391fca763ba3c9732103f351531", "description": "Attach an independent verifier (advisor) model to your Hermes session: it reviews each primary-agent turn delta, raises findings (note / caution / blocker), and can steer a blocker back into the session before the primary agent goes wrong. Read-only tool access (read_file, search_files) is available but off by default and best treated as opt-in plumbing -- measured across 216 reviews the reviewer made ~4 tool calls. Supports a VERIFIER.yml roster of named specialists, each with its own model and tool grant, plus VERIFIER.md review priorities. Ships disabled and off by default. Disclosure \u2014 off by default. When enabled, each primary turn's regex-redacted transcript delta goes to the verifier model's provider on that provider's terms and billing (one or more calls per turn per roster entry). So do any VERIFIER.md / VERIFIER.yml briefs found in HERMES_HOME and from the working directory up to the repo root (confined to that root, 256 KiB per file). A project VERIFIER.yml can add named verifiers and instructions whose findings are injected into your session, and a blocker finding can keep a coding turn going. With advisor_tools on, an advisor can read any file the session can read through read_file/search_files, and those reads also go to the provider. The optional engagement gate sends a \u22641,500-char redacted digest per turn. The optional phase gate sends the redacted arguments of an impending destructive or publishing tool call and can block that call (it fails open). Findings, reasoning, short redacted excerpts and gate decisions are logged under HERMES_HOME/plugin-data/hermes-verifier (rotated at 8 MB). Adds a /verify command, a dashboard API and a Desktop Verifier page. Development scripts (evals/, sidecar/, autoresearch/) run only when launched by hand: provider experiments use DEEPSEEK_API_KEY from the process environment or the host `hermes` CLI, and offline analysis reads the active profile's session database and decision logs. No telemetry, no runtime shell execution, no access to Hermes's stored credentials.", "maintainer": "am423", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/am423/hermes-verifier#readme", "version": "0.4.1", "capabilities": {"provides_tools": [], "provides_hooks": ["post_llm_call", "pre_tool_call", "pre_llm_call", "pre_verify", "on_session_reset"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-video-editor", "title": "Video Editor (local FFmpeg)", "repo": "https://github.com/oliverhees/hermes-video-editor", "sha": "66035165c71e09b7f77a08aecc36e35c0b2dce14", "version": "0.3.0", "description": "Local video editor for your own footage: 45 FFmpeg tools for the agent (cut, silence removal, 9:16 reframe, captions, music with ducking, loudness, platform export and checks) plus a visual editor in Hermes Desktop with canvas, any number of tracks for text, shapes, video overlays and music, scenes and an English/German help. 100% local, no API key. Licence: PolyForm Noncommercial 1.0.0. Disclosure \u2014 the Desktop page starts a local web server on 127.0.0.1 (random port, per-run token) that can read and write media and image files anywhere under your home folder (and any VE_EDITOR_ROOTS); preview caches go to the system temp folder. The agent tools run ffmpeg/ffprobe on the input paths the model passes and write media, image or .srt files at the output paths it passes (replacing an existing file only with overwrite: true).", "maintainer": "oliverhees", "category": "tools", "tier": "community", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/oliverhees/hermes-video-editor/blob/66035165c71e09b7f77a08aecc36e35c0b2dce14/README.md", "image": "https://raw.githubusercontent.com/oliverhees/hermes-video-editor/66035165c71e09b7f77a08aecc36e35c0b2dce14/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/oliverhees/hermes-video-editor/66035165c71e09b7f77a08aecc36e35c0b2dce14/docs/editor.png"], "readme": true, "capabilities": {"provides_tools": ["lk_media_doctor", "lk_media_probe", "lk_detect_silence", "lk_detect_scenes", "lk_extract_frame", "lk_loudness_report", "lk_trim", "lk_split", "lk_join", "lk_remove_silence", "lk_remove_segments", "lk_change_speed", "lk_reverse", "lk_loop", "lk_crossfade_join", "lk_crop", "lk_crop_to_aspect", "lk_resize", "lk_rotate_flip", "lk_pad_blur_background", "lk_color_adjust", "lk_denoise_video", "lk_fade_video", "lk_stabilize", "lk_add_text", "lk_burn_captions", "lk_add_image_overlay", "lk_picture_in_picture", "lk_stack_videos", "lk_blur_region", "lk_extract_audio", "lk_replace_audio", "lk_mix_music", "lk_normalize_loudness", "lk_sync_audio_offset", "lk_adjust_volume", "lk_fade_audio", "lk_denoise_audio", "lk_mute_video", "lk_export_preset", "lk_platform_check", "lk_compress_to_size", "lk_to_gif", "lk_contact_sheet", "lk_transcribe_captions"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "known_issues": ["Requires FFmpeg and ffprobe on PATH (apt install ffmpeg / brew install ffmpeg / winget install Gyan.FFmpeg).", "lk_transcribe_captions is optional and needs 'pip install faster-whisper' plus a model already on disk.", "The visual editor has one main video track plus any number of tracks for text, shapes, video overlays, audio and scenes; these items sit at fixed times and do not move when the main clips are cut (bundle them in a scene to move them together).", {"Licence is PolyForm Noncommercial 1.0.0 (source-available)": "free for non-commercial use, commercial use needs a separate licence from Lokyy.de."}, "The editor preview needs H.264 or VP8 playback in the app's browser engine; editing and export work without it."]}, {"name": "hermes-vision-inline", "repo": "https://github.com/BrokeSkill/hermes-vision-inline", "sha": "281bce608e799834cd1b60929d3f9b44756cb7c2", "description": "Attach an image inline to the session model when it can see one, instead of letting an explicit auxiliary.vision backend describe it. Core already attaches images natively by default; what this plugin changes is an explicit auxiliary.vision setting, which it overrides so the model reads the pixels directly. The image stays in context, so follow-ups do not reprocess it. The model's modality comes from the local models.dev cache; no network calls and nothing to configure. Disclosure \u2014 replaces the vision_analyze handler through tool_execution middleware: when the local models.dev cache says the main model takes images and its provider carries images in tool results, it attaches the image itself even if you configured an auxiliary.vision backend (agent.image_input_mode: text still turns this off); the image stays in the conversation and is resent on later turns; relies on Hermes private vision helpers, so after a Hermes update it may silently fall back to the normal path.", "maintainer": "BrokeSkill", "tier": "community", "category": "tools", "docs_url": "https://github.com/BrokeSkill/hermes-vision-inline#readme", "version": "1.1.0", "image": "https://raw.githubusercontent.com/BrokeSkill/hermes-vision-inline/281bce608e799834cd1b60929d3f9b44756cb7c2/docs/banner.png", "platforms": ["windows", "macos", "linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": ["tool_execution"], "requires_env": []}}, {"name": "hermes-vpn", "repo": "https://github.com/Maytrella007/Hermes-VPN", "sha": "adc6ba81afe3071223d50cde18c41e1adee25261", "description": "Named network exits for the agent's browser: ask it to browse from another country and it switches, then verifies by reading back the address the far end actually saw, never trusting a label. Any VPN, WireGuard config or proxy works as a local exit; gluetun containers are discovered automatically and one can be brought up on demand. VPN credentials never reach the agent, the chat or the model. Disclosure -- a root-owned helper, installed out of band by the user through a narrow exact-path sudoers rule, is the only thing that reads the credentials and writes them to a root-only file (the agent names a country, never the key), and it pulls the gluetun image pinned by digest; the helper manages gluetun Docker containers, bringing exits up and down; the plugin registers a tool_execution middleware that holds browser_* calls when no verified exit is up (the kill switch, and optional cross-provider failover); it verifies exits by calling public IP-geolocation services (ipinfo, ifconfig.co, ip2location, cloudflare); credential entry is CLI-only, with no model tool for it -- `hermes vpn provider <name> --set` (interactive) or `--from-ref`, which resolves a WireGuard config from pass/gopass or a host file host-side and never returns it to the model; opening a .onion needs `hermes vpn allow-onion`, a terminal command a person runs (no model tool) that turns off Hermes's own internal-address check so onion names resolve and restarts Hermes, and the plugin never writes that setting itself; the active profile comes from the plugin context (ctx.profile_name), not a private core import.", "maintainer": "Maytrella007", "tier": "community", "category": "web", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/Maytrella007/Hermes-VPN#readme", "version": "0.3.0", "platforms": ["linux"], "readme": true, "capabilities": {"provides_tools": ["net_exits", "net_use", "net_where", "net_harden", "net_places", "net_lock", "net_failover", "net_tor_connect", "net_new_circuit", "net_doctor", "net_providers", "net_provider_setup", "net_open", "net_close"], "provides_hooks": [], "provides_middleware": ["tool_execution"], "requires_env": []}}, {"name": "hermes-whatsapp-voice", "repo": "https://github.com/ashwanthbalakrishnan5/hermes-whatsapp-voice", "sha": "e472a47dda4e9986ca44f0ad62cb1b71c893bec0", "title": "WhatsApp Voice Calls", "description": "Live voice calls with Hermes over WhatsApp, on the linked-device (personal number) setup most Hermes users already have, with no WhatsApp Business account. Call your bot's number and talk to your Hermes: the voice uses Hermes's own persona (a short briefing fetched from Hermes) and hands real work to Hermes mid-call. Or let Hermes call you for things that matter: whatsapp_call_owner rings only the configured owner number (it has no destination parameter) and reports answered, no answer or declined, so the agent can fall back to another channel, including from cron. A short summary of each call arrives in WhatsApp. Speech runs on Gemini Live (gemini-3.8-live by default), reusing the Gemini key Hermes already has; any Live setup field is configurable, plus a language lock. Setup is a dashboard tab (pairing QR, settings, test call) or an agent runbook skill. Disclosure \u2014 runs a separate sidecar process (Rust, built on whatsapp-rust) that the user starts or installs as a systemd/launchd user service; the binary is downloaded from this repo's GitHub release, built and attested by its release workflow, and checked against checksums pinned in the repo (plus the build attestation when the gh CLI is present). The sidecar becomes an extra linked device of the bot's WhatsApp number through an unofficial protocol, stores that session in the plugin's data directory, and answers only the owner's number. During calls it streams audio to generativelanguage.googleapis.com with GOOGLE_API_KEY or GEMINI_API_KEY (read via get_secret), along with the persona briefing, the outgoing call's reason and ask_hermes results as text. It calls the local api_server with API_SERVER_KEY for ask_hermes (a full Hermes turn with the owner's tools), the persona briefing (at startup and after each call) and the post-call summary, a run that may write to Hermes memory and whose result is sent to the owner on WhatsApp. The dashboard tab's backend saves only this plugin's settings (through hermes config set), starts and stops pairing, places test calls to the owner, and restarts the sidecar service (systemctl --user or launchctl). No telemetry.", "maintainer": "ashwanthbalakrishnan5", "tier": "community", "version": "0.1.12", "category": "voice", "docs_url": "https://github.com/ashwanthbalakrishnan5/hermes-whatsapp-voice#readme", "requires_hermes": ">=0.21.6", "platforms": ["linux", "macos"], "known_issues": ["Uses an unofficial, reverse-engineered WhatsApp protocol (whatsapp-rust): WhatsApp updates can break calls, and automated use may get the bot number restricted. Use a number you can afford to lose.", "Prebuilt sidecar binaries cover Linux amd64/arm64 and macOS arm64; elsewhere it builds from source (Rust 1.94+, cmake, a C compiler)."], "capabilities": {"provides_tools": ["whatsapp_call_owner", "whatsapp_call_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-wincred", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "wincred", "description": "Resolve Hermes environment variables from the current user's Windows Credential Manager at startup, instead of keeping provider keys in plaintext in .env or auth.json. Config is secrets.wincred.map, an ENV_VAR -> generic-credential-target mapping (bare names or wincred:// names); each value is read with CredReadW in the current user's vault and handed to the secret-source orchestrator, which applies it with the usual precedence, provenance and conflict rules. Values may be UTF-8 or UTF-16LE (cmdkey and the Credential UI write UTF-16); anything that does not decode to text, or that contains interior NULs, is skipped with a warning instead of being injected as a mangled key. Disclosure - this source reads your Windows Credential Manager: only the generic credentials named in the map, with no enumeration of the vault. Resolved values become environment variables of the Hermes process and its children, exactly like .env entries, so anything that can read that environment can see them. The package is read-only and stdlib-only (ctypes): it never creates, updates or deletes credentials, writes no files, starts no subprocesses, makes no network calls and does not self-update. Windows only. Credential Manager is user-scoped, so this raises the at-rest bar for backups, cloud sync and dotfiles; it is not a boundary against code already running as the same user. Applying fetched values stays the orchestrator's job; the plugin never writes os.environ itself. Disclosure \u2014 when enabled, reads only the Windows Credential Manager generic credentials named in secrets.wincred.map (no vault enumeration) and injects them as environment variables of the Hermes process and its children, exactly like .env entries; read-only, stdlib ctypes, no subprocesses, no network, no file writes; user-scoped at-rest protection, not a boundary against code already running as the same user.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/wincred", "version": "0.1.0", "platforms": ["windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-windows-computer-use", "repo": "https://github.com/TREE-Ind/THEIA-UI-Computer-Use", "sha": "6c73f53617c68e74618a6d6783e966795afe0e7a", "description": "THEIA \u2014 The Human Environment Intelligence Aperture: virtual-desktop capture, fused stage observation, guarded caches, bounded dynamic workflows, and persistent raw-RGB LocateAnything C++/Q5 CUDA grounding.", "maintainer": "TREE-Ind", "tier": "community", "category": "tools", "docs_url": "https://github.com/TREE-Ind/THEIA-UI-Computer-Use#readme", "capabilities": {"provides_tools": ["computer_use_batch", "computer_use_calibrate_grid", "computer_use_capture_screen", "computer_use_click", "computer_use_double_click", "computer_use_drag", "computer_use_drag_path", "computer_use_drag_relative", "computer_use_dynamic_workflow", "computer_use_execute_code", "computer_use_find_click", "computer_use_find_drag", "computer_use_focus_window", "computer_use_forget_grounding", "computer_use_get_active_window", "computer_use_grid_cells", "computer_use_hotkey", "computer_use_key_down", "computer_use_key_up", "computer_use_locate", "computer_use_locate_batch", "computer_use_mouse_down", "computer_use_mouse_up", "computer_use_move", "computer_use_move_relative", "computer_use_observe_stage", "computer_use_open_app", "computer_use_pixel", "computer_use_pixel_matches", "computer_use_press", "computer_use_release_all", "computer_use_remember_groundings", "computer_use_reuse_groundings", "computer_use_scroll", "computer_use_set_dry_run", "computer_use_type", "computer_use_warm"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "platforms": ["windows", "macos", "linux"]}, {"name": "hermes-windows-eventlog", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "windows-eventlog", "description": "Answer \"why did this process die\" on Windows: three read-only tools over the Windows Event Log. win_crash_events reads Application Error / Application Hang / Windows Error Reporting / .NET Runtime records for a time window, decodes the exception code (0xC0000005 -> ACCESS_VIOLATION and the other codes a debugger would name), reports the faulting module, its path and the fault offset, and groups repeated crashes by app and signature. Records are classified by provider as well as by event id, so unrelated providers that reuse ids 1000 and 1001 for informational events are not reported as crashes. win_shutdown_events reads the System log for Kernel-Power 41 unexpected restarts, bugchecks decoded to names (0x9F -> DRIVER_POWER_STATE_FAILURE, accepting the decimal form some providers emit), EventLog 6008 dirty shutdowns, 1074 operator-initiated restarts with the process and comment, and the 6005/6006/12/13 start and stop markers. win_eventlog_query is the general case: any channel, filtered by event ids, levels, an exact provider name or a payload substring, returning structured records instead of raw XML. Queries read newest-first and stop at the window start or at a 5000-record scan cap; a call returns at most 200 records and marks truncated payload text. Channel names, provider names and numeric filters are validated before anything is interpolated into the query. Disclosure - this plugin reads the local Windows event logs and hands what it finds to the model: application and faulting-module paths, exception codes and offsets, report ids, service names and provider message text, which routinely includes user and machine paths (C:\\Users\\<name>\\...). Treat tool output like any other local diagnostic dump when sharing it. It reads only the channels the current account may read - Security and some operational logs answer with an access-denied error rather than any attempt to obtain elevation - and it never writes to a log, clears one or configures a channel. Stdlib-only (ctypes wevtapi plus xml.etree): no Python dependencies, no child processes, no network calls, no file writes, no self-update. Windows only. Disclosure \u2014 reads the local Windows event logs and hands what it finds to the model: application and faulting-module paths, exception codes and offsets, report ids, service names and provider message text, which routinely include user and machine paths (C:\\Users\\<name>\\...); win_eventlog_query reads any channel the account running Hermes may read, so an unelevated account gets access-denied on Security and some operational logs while an elevated Hermes can return Security-log records (logon events with account names and source addresses). It never requests elevation, never writes to, clears or configures a log, and has no Python dependencies, child processes, network calls, file writes or self-update. Windows only.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/windows-eventlog", "version": "0.1.0", "platforms": ["windows"], "capabilities": {"provides_tools": ["win_crash_events", "win_shutdown_events", "win_eventlog_query"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-windows-ops", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "windows-ops", "description": "Windows and WSL triage skills for Hermes: processes that survive a quit (orphaned stdio MCP trees, lingering python/uv/node children), WSL-to-Windows interop where an argument reaches cmd.exe as shell syntax, config and encoding traps (UTF-8 BOM, legacy console code pages), and long-path or reserved-name errors. One skill plus a copy-paste command reference; the process, argv and job-object failure modes are pinned to reports #131561, #132069 and #61059 and re-verified against current main. Disclosure \u2014 instructions only: no tools, hooks, middleware, network calls or credentials, and the destructive diagnostics are marked and gated on asking the user first.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/windows-ops", "version": "0.1.0", "platforms": ["windows", "linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-windows-ports", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "windows-ports", "description": "Answer \"who holds this port\" on Windows. win_port_owners reads the TCP and UDP owner tables through iphlpapi (the same rows netstat -ano prints, with the owning PID attached) and resolves each PID to its image name and path, returning one structured record per endpoint. Filters cover one port, several ports, a process substring, the protocol (tcp, udp or both), the TCP state (listen, established, any state name, or all; UDP rows report bound) and IPv6 inclusion, with a record cap and a per-process summary of the rows returned. Built for the failure mode that stalls agents on Windows: a gateway, backend or bridge that cannot bind, where the error names a port but not the process holding it. netstat -ano prints columns, not fields, and its PID still needs a second command (tasklist, or a PowerShell round-trip) to become an image name; this tool is one in-process call instead of a shell parse plus a join, with no child process and no dependency on PowerShell being installed or allowed by execution policy. A protected process whose image cannot be queried keeps its PID and reports a null process name instead of failing the call. Disclosure - the tool reports the local and remote addresses, ports, PIDs and process image paths that netstat -ano and Task Manager already show, and those values reach the model; treat the output like any other local diagnostic listing. Read-only: no socket is opened, bound or connected, the only process access is QueryFullProcessImageName with PROCESS_QUERY_LIMITED_INFORMATION to read an image name, and there is no memory reading, no handle inheritance and no injection. Stdlib-only (ctypes): no Python dependencies, no child processes, no network calls, no file writes, no self-update. Windows only.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/windows-ports", "version": "0.1.0", "platforms": ["windows"], "capabilities": {"provides_tools": ["win_port_owners"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-windows-process", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "windows-process", "description": "Answer \"what is still running, and who started it\" on Windows: win_process_table reads the process table (PID, parent PID, image name) and adds each process's image path and creation time, then marks every row with whether its recorded parent is still the process that spawned it. Windows stores a parent PID rather than a handle, so a child that outlived its parent points at a PID that is either unused or reused by a newer process; a parent that started after its child cannot have spawned it, so both cases are reported as gone or reused instead of a plausible but wrong parent name. Filters cover one PID, several PIDs, a name or path substring, a parent PID, and an orphans-only view of what outlived its parent, with a result cap and an option to leave out Windows session processes. Use it for leftover gateway/backend/server children after a quit, for telling thirty python.exe rows apart by start time, and for checking whether a process started before or after the thing being debugged. Read-only: processes are opened with PROCESS_QUERY_LIMITED_INFORMATION for QueryFullProcessImageName and GetProcessTimes only - no memory reads (command lines are deliberately out of scope), no handle duplication, no writes, no child processes. Stdlib-only (ctypes): no Python dependencies, no network calls, no file writes, no self-update. Windows only. Disclosure - the tool reports image names, image paths and start times to the model, and those routinely include the user and machine name (C:\\Users\\<name>\\...) and reveal which editor, shell or agent started which process; treat the output like a Task Manager screenshot.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/windows-process", "version": "0.1.0", "platforms": ["windows"], "capabilities": {"provides_tools": ["win_process_table"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-workbench", "repo": "https://github.com/sxuff/hermes-workbench", "sha": "f07fb5c90e24c1a396604758feb0fd4ae077760b", "description": "The Hermes desktop app in your browser. `hermes workbench` serves the desktop interface through the Hermes dashboard, for headless servers, VPSes and tablets. Disclosure \u2014 community plugin, not a Nous product. On the first `hermes workbench` run and again after each Hermes update it runs `npm install --ignore-scripts` (guided by Hermes's lockfile) and Vite against your Hermes checkout's desktop sources, writing only under ~/.hermes/hermes-workbench and its own plugin dir (the checkout is only read), and starts `hermes dashboard` on loopback when none is running.", "maintainer": "sxuff", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/sxuff/hermes-workbench#readme", "version": "0.2.1", "image": "https://raw.githubusercontent.com/sxuff/hermes-workbench/f07fb5c90e24c1a396604758feb0fd4ae077760b/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/sxuff/hermes-workbench/f07fb5c90e24c1a396604758feb0fd4ae077760b/docs/media/session.png", "https://raw.githubusercontent.com/sxuff/hermes-workbench/f07fb5c90e24c1a396604758feb0fd4ae077760b/docs/media/slash-commands.png", "https://raw.githubusercontent.com/sxuff/hermes-workbench/f07fb5c90e24c1a396604758feb0fd4ae077760b/docs/media/model-picker.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-worker-monitor", "repo": "https://github.com/djmango/hermes-worker-monitor", "sha": "6edb2d6e55133f57a3a7768ca4897c84e8adc00b", "version": "0.2.0", "description": "Kanban board groups and worker health in the Hermes Desktop footer: blocked cards first and red, live running state as a coloured dot, hover for the breakdown, one click to open the board. Worker-only fork of hermes-monitor. No credentials are read and there is no network egress; it opens kanban.db and each profile's state.db read-only and returns counts only. Zero model tokens.", "maintainer": "djmango", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "platforms": ["linux", "macos"], "docs_url": "https://github.com/djmango/hermes-worker-monitor", "screenshots": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-workflows", "repo": "https://github.com/jacobhausler/hermes-workflows", "sha": "b1bf8cc99d5113cfaf8251122ce4f4492838bad8", "description": "Agent-owned workflow graphs for Hermes \u2014 a background runner executes a JSON DAG of agent nodes, fan-outs (quorum) and human/machine gates with fingerprint replay-skip resume, cooperative steer, typed failure events and compact status payloads; ships a desktop DAG view, an inline transcript card and the authoring skill with measured budget recipes. Stock Hermes; no patched core required. Disclosure \u2014 every workflow run spawns a detached background runner (wf.py run <id>) that survives session end, gateway restart and plugin disable until the graph reaches a boundary or workflow stop; each agent node is a child hermes chat --query-file \u2026 --oneshot -Q \u2026 inheriting the runner's environment, and a node with profile set runs as that named profile (with its own credentials) only if the target's workflow_team.json lists the launcher; a gate's wait.until_argv runs an agent-authored argv directly from the runner, outside Hermes' tool-approval gate (the engine uses no shell, but the shipped machine-watch and incident-response templates use it to run a shell line read from a fixed-name handoff file under $HERMES_HOME, and release-lifecycle one read from a per-run handoff file in the run dir); the runner makes itself the subreaper of its children and SIGTERM/SIGKILLs any process a node leaves running (its own descendants plus pids registered in the run's .proctree_sidecar.jsonl) when the node finishes, retries or the run stops; run and amend send a one-token ping through Hermes' configured providers to check pinned model routes; at gate.held/run.done/run.failed the runner reads the API server key from config.yaml and POSTs a wake turn to the local Hermes API server \u2014 the gate.held wake only relays the gate to the human, but the run.done wake tells the woken session to turn the run's findings into tracked work and dispatch follow-up work (as PRs) before the turn ends, and the run.failed wake to apply one corrective amend/repair/resume; a transform_llm_output hook appends a ::workflow{id} card line to replies for runs the session launched in the last 30 minutes; the runner reads WORKFLOW_MAX_SEATS (that key only) from $HERMES_HOME/.env and the active profile's .env; state.db is read read-only, including every profile's session ids and profile names, and status/wait can read runs in sibling profiles' workflows dirs; state lives under $HERMES_HOME/workflows/ (or a configured runs_root). No other network of its own.", "maintainer": "jacobhausler", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/jacobhausler/hermes-workflows#readme", "version": "1.3.6", "image": "https://raw.githubusercontent.com/jacobhausler/hermes-workflows/b1bf8cc99d5113cfaf8251122ce4f4492838bad8/assets/dag-review.png", "screenshots": ["https://raw.githubusercontent.com/jacobhausler/hermes-workflows/b1bf8cc99d5113cfaf8251122ce4f4492838bad8/assets/dag-review.png", "https://raw.githubusercontent.com/jacobhausler/hermes-workflows/b1bf8cc99d5113cfaf8251122ce4f4492838bad8/assets/branch-gate.png", "https://raw.githubusercontent.com/jacobhausler/hermes-workflows/b1bf8cc99d5113cfaf8251122ce4f4492838bad8/assets/fanout.png"], "platforms": [], "capabilities": {"provides_tools": ["workflow"], "provides_hooks": ["transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-wsl-terminal", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "wsl-terminal", "description": "Run Hermes' terminal tools inside an existing WSL distro on Windows: one bash -c per command as the distro's default user, over the same files Windows sees at /mnt/<drive>, with no Docker Desktop, no image and no container to start or tear down. A host cwd is translated (C:\\Users\\me\\proj becomes /mnt/c/Users/me/proj, \\\\wsl.localhost paths become the distro's own paths) and the mount root is asked once with wslpath, so a distro that moved its automount point still gets correct paths. cwd persists across commands, stdin and exit codes ride through wsl.exe, and hermes doctor / setup and the dashboard picker get real rows (wsl.exe path, WSL version, distros present, selected distro). HERMES_WSL_DISTRO and HERMES_WSL_USER select the distro and the user. Disclosure \u2014 this is a full-access backend, not a sandbox: when it is the selected backend, everything the terminal tool runs executes as your user inside your distro, with that distro's files, permissions and network access, so dangerous-command approval stays on and Hermes never stops the distro. The plugin itself reads no credentials, stores nothing and makes no network calls; it spawns wsl.exe per command and wslpath once per distro. It rewrites one core-produced string, the trailing cwd marker, because under WSL a command substitution is handed the directory wsl.exe started in rather than the shell's current one (measurements in the repo's VALIDATION.md); nothing in Hermes is patched or rebound at runtime.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/wsl-terminal", "version": "0.1.0", "platforms": ["windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-wslc-sandbox", "repo": "https://github.com/Yicheng-Mark/hermes-windows-plugins", "sha": "b26b92760b2bfc36a91c280af96b0171c4d00267", "subdir": "wslc-sandbox", "version": "0.1.0", "description": "Run Hermes' terminal, file and execute_code tools in a Linux container on Microsoft's WSL Containers (wslc) runtime, so Windows users who run WSL Containers get a sandbox without Docker Desktop. Disclosure \u2014 the plugin spawns the wslc CLI (one short-lived process per command, plus one long-lived container per environment) and every call runs inside that container; containers have outbound network access unless docker_network is false; persistent sandboxes are left stopped on disk until removed; host environment variables enter the container only when named in docker_forward_env, and only paths listed in docker_volumes are bind-mounted. wslc rejects --cap-drop, --security-opt, --pids-limit, --init and --storage-opt, so this sandbox is not capability-dropped the way the Docker backend's is, container_disk is reported but not enforced, and dangerous-command approval deliberately stays enabled for this backend. The plugin reads no credentials, stores none, and makes no network calls of its own.", "maintainer": "Yicheng-Mark", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/Yicheng-Mark/hermes-windows-plugins/tree/main/wslc-sandbox", "platforms": ["windows"], "known_issues": ["container_disk is reported but not enforced: wslc has no --storage-opt.", "No capability dropping: wslc rejects --cap-drop and --security-opt, so dangerous-command approval stays enabled."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes-xai", "repo": "https://github.com/Julientalbot/hermes-xai", "sha": "8fd9bf8ecef1f8e9cb2cb7921fc86527acd9ede3", "version": "0.1.0", "description": "The xAI API surfaces core does not cover, nothing it already ships (provider, x_search, web search, TTS, STT and Imagine stay in core). Voice module: full-duplex Grok Voice (grok-voice-latest) in the Desktop composer, built like core's GPT-Live mode; the voice model hands real work to Hermes as a normal turn on the open chat (surface voice-live) and reads the result aloud; the backend mints a 300 s xAI client secret so XAI_API_KEY never reaches the renderer. Collections module: one read-only tool, xai_collections_search, over documents the user already indexed in xAI Collections (GET /v1/collections, POST /v1/documents/search). Disclosure \u2014 the voice button captures microphone audio and streams it to api.x.ai over a WebSocket; the backend calls api.x.ai once per call with XAI_API_KEY (read through agent.secret_scope) to mint the secret; delegated requests run as normal Hermes turns with the profile's full toolset and approvals, and their final text (up to 3000 characters) plus the last spoken turns are sent back to xAI. Each xai_collections_search call sends the query to api.x.ai with XAI_API_KEY and returns passages into the conversation. Nothing is uploaded, stored or deleted and no telemetry is emitted; xAI bills on the user's key.", "maintainer": "Julientalbot", "tier": "community", "category": "voice", "docs_url": "https://github.com/Julientalbot/hermes-xai/blob/8fd9bf8ecef1f8e9cb2cb7921fc86527acd9ede3/README.md", "requires_hermes": ">=0.21.5", "platforms": [], "capabilities": {"provides_tools": ["xai_collections_search"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["XAI_API_KEY"]}}, {"name": "hermes-zh", "repo": "https://github.com/Cody292/hermes-zh", "sha": "9ee5c26c6860a3947b6403dd0797d4535b166cd7", "description": "Simplified Chinese (\u7b80\u4f53\u4e2d\u6587) language pack. Declarative locales/zh.yaml overlay for part of approval.* and gateway.*; placeholders match en.yaml.", "maintainer": "Cody292", "tier": "community", "category": "general", "requires_hermes": ">=0.19", "docs_url": "https://github.com/Cody292/hermes-zh", "version": "0.1.7", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hermes_otel", "repo": "https://github.com/briancaffey/hermes-otel", "sha": "d234865b13e997e0b3a50dc18aaad7c7d7b1b1fe", "subdir": "hermes_otel", "description": "OpenTelemetry for Hermes Agent: sessions, LLM and API calls, tool calls, sub-agents and approvals as OTLP traces, metrics and logs to any OTLP backend. Disclosure \u2014 sends span data including prompts, tool arguments and tool output only to backends you configure (a backends: list, an OTEL_* variable, or LANGSMITH_TRACING=true); by default content_capture is full and unclipped (preview clips to 1200 chars, off sends none); vendor SDK keys already in the environment are used only after that opt-in; with nothing configured it keeps a local owner-only SQLite store under $HERMES_HOME and sends nothing; installs opentelemetry-api, -sdk, -exporter-otlp-proto-http (>=1.35,<2) and PyYAML.", "maintainer": "briancaffey", "tier": "community", "category": "general", "requires_hermes": ">=0.21", "docs_url": "https://briancaffey.github.io/hermes-otel/", "version": "1.18.2", "image": "https://raw.githubusercontent.com/briancaffey/hermes-otel/d234865b13e997e0b3a50dc18aaad7c7d7b1b1fe/docs/catalog-banner.png", "capabilities": {"provides_tools": [], "provides_hooks": ["api_request_error", "on_session_end", "on_session_finalize", "on_session_reset", "on_session_start", "post_api_request", "post_approval_response", "post_llm_call", "post_tool_call", "pre_api_request", "pre_approval_request", "pre_llm_call", "pre_tool_call", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": []}}, {"name": "hermetic", "repo": "https://github.com/forefy/hermetic", "sha": "d0f30770b4a3531f19830699def0f7ba3b5cc457", "version": "1.2.0", "requires_hermes": ">=0.21.6", "description": "Status-bar popover for Hermes Desktop with three views: Costs (spend, cache, pricing drift, OpenRouter provider routing), AAI (skill changes, ratings, tests and replays) and HDR (a guard for risky tool calls, hooks, destinations, sensitive paths, what runs on its own). Disclosure \u2014 reads this profile's sessions (and other profiles' when you pick them) to audit tool calls, paths and hosts; can edit and save config.yaml and rewrite skill files when you ship or revert a version; AAI replays and judge runs resend conversation context and tool definitions to OpenRouter with your OpenRouter key and incur cost; HDR lists listening TCP ports via ps/lsof; HDR's guard (off by default) checks each tool call through a pre_tool_call hook and, when you turn it on, holds calls Hermes does not check itself (reading keys and logins, writing startup items or key places Hermes does not list) and asks you in its own card or a macOS notification, blocking after up to 20 seconds without an answer or at once when Hermetic is not open, or blocks them outright; the guard is a best-effort match on the paths a call names, not a sandbox; questions from every profile wait in the default profile's hermetic folder; HDR also lists shell and gateway hooks and flags hook scripts edited after approval, keeping a copy of each script to compare.", "maintainer": "forefy", "tier": "community", "category": "desktop", "docs_url": "https://github.com/forefy/hermetic#readme", "screenshots": ["https://raw.githubusercontent.com/forefy/hermetic/d0f30770b4a3531f19830699def0f7ba3b5cc457/docs/hermetic-costs.png", "https://raw.githubusercontent.com/forefy/hermetic/d0f30770b4a3531f19830699def0f7ba3b5cc457/docs/hermetic-aai.png", "https://raw.githubusercontent.com/forefy/hermetic/d0f30770b4a3531f19830699def0f7ba3b5cc457/docs/hermetic-hdr.png", "https://raw.githubusercontent.com/forefy/hermetic/d0f30770b4a3531f19830699def0f7ba3b5cc457/docs/hermetic-providers.png", "https://raw.githubusercontent.com/forefy/hermetic/d0f30770b4a3531f19830699def0f7ba3b5cc457/docs/hermetic-hdr-pipeline.png", "https://raw.githubusercontent.com/forefy/hermetic/d0f30770b4a3531f19830699def0f7ba3b5cc457/docs/hermetic-aai-settings.png"], "capabilities": {"provides_tools": [], "provides_hooks": ["post_api_request", "api_request_error", "transform_llm_output", "pre_tool_call"], "provides_middleware": ["llm_request", "llm_execution"], "requires_env": []}}, {"name": "hicortex", "repo": "https://github.com/gamaze-labs/hicortex-hermes-plugin", "sha": "3321a063bffb087dfcedc239a6f7aaf1ac0b8ef6", "description": "Shared fleet memory for Hermes agents: every connected agent learns from all other agents connected to the memory, wherever they run. Sessions across machines and harnesses are distilled into one common brain overnight \u2014 what one learns, the whole fleet recalls. Pushes a compact per-turn recall index (entries lazy-load via hicortex_get), injects fresh lessons plus a per-agent standing context block at session start \u2014 lesson blocks are delimited and carry an explicit reference-data framing line and provenance header \u2014 and exposes the full 9-tool memory surface (search, get, recent, ingest, lessons, index, graph, update, delete) through the shared server. The same server also serves Claude Code, OpenClaw, Pi and opencode agents, so mixed-harness fleets share one brain. Stdlib-only, no pip dependencies. Requires a running Hicortex server (npx @gamaze/hicortex init on any machine); data flow: each user message is sent to your configured Hicortex server for recall (default http://localhost:8787); session distillation runs on the server. Disclosure \u2014 sends every user message (and profile name) to your configured Hicortex server each turn for recall, default http://localhost:8787, plain http with a bearer token is accepted for remote servers with a one-time log warning; the server's standing Identity text and lessons are injected into the system prompt; the model can permanently update or delete shared fleet memories via hicortex_update / hicortex_delete without confirmation.", "maintainer": "gamaze-labs", "tier": "community", "category": "memory", "docs_url": "https://github.com/gamaze-labs/hicortex-hermes-plugin#readme", "version": "0.7.10", "readme": true, "capabilities": {"provides_tools": ["hicortex_search", "hicortex_get", "hicortex_recent", "hicortex_ingest", "hicortex_lessons", "hicortex_index", "hicortex_graph", "hicortex_update", "hicortex_delete"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["HICORTEX_URL", "HICORTEX_AUTH_TOKEN"]}}, {"name": "hindsight", "repo": "https://github.com/vectorize-io/hindsight", "sha": "d952b6e655fccab4581ee0722b51c5f103873d12", "subdir": "hindsight-integrations/hermes", "version": "1.2.3", "description": "Hindsight long-term memory provider \u2014 knowledge graph, entity resolution and multi-strategy retrieval (recall/reflect/retain tools plus automatic per-turn capture). Maintained by Vectorize; cloud, local external and local embedded modes are available. `hermes memory setup` fetches its bank-template catalog from raw.githubusercontent.com (vectorize-io/hindsight main). Disclosure \u2014 in cloud mode (and local external) every turn's conversation, and every entry the agent adds or replaces in Hermes's built-in MEMORY/USER stores, is sent to api.hindsight.vectorize.io or the URL you configure, into every bank it writes to; local embedded mode starts a background Hindsight daemon (fetched with uvx, version-pinned, on first run when hindsight-api is not installed) and keeps its LLM settings in ~/.hindsight/profiles/<profile>.env; setup writes the keys you enter to the profile .env; repositories under folders you list in trusted_project_dirs may choose their bank with .hindsight/config.toml; `hermes memory setup` fetches its bank-template catalog from raw.githubusercontent.com (vectorize-io/hindsight main).", "maintainer": "vectorize-io", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.4", "docs_url": "https://hindsight.vectorize.io/sdks/integrations/hermes", "image": "https://raw.githubusercontent.com/vectorize-io/hindsight/d952b6e655fccab4581ee0722b51c5f103873d12/hindsight-integrations/hermes/docs/banner.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "holographic", "title": "Holographic", "repo": "https://github.com/itpartypattaya/hermes-plugin-holographic", "sha": "7488ac32b78f983cff8484209686d59c9b330b76", "version": "0.18.3", "description": "Local fact-store memory provider: SQLite with FTS5 keyword search (word forms in English, Russian, Spanish, French, Portuguese, Indonesian, German, Hindi, Arabic, Bengali, Italian, Turkish, Polish and Dutch; Russian and English words of the same root at a lower weight, from bundled DerivBase.Ru (Apache-2.0) and Open English Wordnet (CC BY 4.0) pairs; German compounds and German and Spanish irregular verb forms from bundled Wikidata Lexemes tables (CC0); Chinese, Japanese, Korean and Thai by character n-grams, Chinese also split into words with jieba's dictionary (MIT), Traditional and Simplified Chinese compared as one through a bundled OpenCC table (Apache-2.0), Japanese spelling variants through SudachiDict's (Apache-2.0); synonyms through keywords the agent gives when it stores a fact), trust scores, entities with aliases and HRR (holographic reduced representation) recall, with no API key, network or model calls unless an optional online feature is switched on: search by meaning (embeddings: on) or rescoring by a cross-encoder (rerank: on), both off by default. The provider that shipped in-tree as plugins/memory/holographic, with the same provider name, config (plugins.hermes-memory-store) and memory_store.db, so `hermes update` moves existing users onto it; the schema change is additive and older versions keep working on the file. Taken over from Nous Research's handoff copy (NousResearch/hermes-plugin-holographic) and maintained by itpartypattaya; since 0.1.1 it fixes probe/reason/related/contradict, non-atomic writes and the never-written retrieval_count, gates recall by relevance without repeats, flags duplicates and conflicts when a fact is added, and honours the provider contract (read-only subagent contexts, hermes_home, mirror metadata, backup_paths); since 0.8.0 it keeps the history of every fact (change / end / correct / revert, search and list as_of a date) and `forget` erases a fact with all its versions from the file; since 0.16.0 a name guessed from a fact's text must be shaped like one and stays provisional until a second fact or a person confirms it, and entities can be renamed or deleted (the facts stay). Since 0.18.0 an optional, experimental second stage reorders the recall candidates with a cross-encoder at a /v1/rerank endpoint that answers in Cohere's shape without a key, such as llama-server (rerank: on, off by default). It does not raise hits: on the maintainer's held-out set (126 questions) it cut non-target facts in the top five by about 40 % and lines per turn by about a third, and lost about one target per hundred questions. Disclosure \u2014 local only unless an optional online feature (search by meaning or rescoring) is switched on: reads and writes one SQLite file per profile ($HERMES_HOME/memory_store.db unless db_path says otherwise), or with scope: user / chat / thread one file per user or chat in holographic-users/ or holographic-chats/ next to it; each fact version records where it was written (platform, chat type, chat and thread id, session id, the turn author's id and display name, and whether the person said it or the agent inferred it; never chat titles), shown in full by list, history and export and not in recall unless recall_source: short (date, display name, this or another chat); each confirmation of a fact by a person keeps its time, session id and that person's id (no text); forget deletes that and the confirmations with the fact and keeps only an HMAC of the text, keyed by a random key stored in the same file, as a tombstone; delete_entity removes a name, its aliases and links from the entity index (never a fact) and keeps an HMAC of each name the same way (not of an alias only a fact's text gave, which goes without one), and both rewrite the file so freed pages keep no copy; the first writable open after an upgrade that changes the extraction rules relinks the facts to their entities under the new rules (stores up to 2,000 facts and 500,000 characters; larger ones on fact_store rebuild_entities), changing only the names it guessed and their links, never a fact, a declared name or an alias someone gave; subagents never write, but a cron job's explicit fact_store / fact_feedback calls do unless cron_writes: false (on by default); no subprocesses or telemetry (at the debug log level the recall stages log fact ids and scores, never text), and no network calls or credentials unless embeddings: on or rerank: on (both off by default). With embeddings: on, the text of facts, and of messages and fact_store search queries that are not greetings, goes to the OpenAI-compatible embeddings endpoint the user configures, also after cron turns while cron_writes is on (embedding_url; https, plain http only to localhost, a private or link-local address, or a local host name such as one without a dot or ending in .local), with the key read from the environment variable the user names (embedding_key_env, OPENAI_API_KEY unless set, sent as a Bearer token to whatever embedding_url is configured, never stored in config) and no redirects followed; facts that recall would not inject, and facts and messages that look like they hold a secret (checked by pattern, best effort), are not sent; the vectors are kept in the same file (table fact_embeddings), deleted with their fact by forget / end / remove and all of them by the next writable session after the option is switched off; the provider keeps what it received under its own terms; with rerank: on, before a turn the user's message and up to rerank_top_k (40) candidate fact texts, and for a fact_store search its query and results, go to the rerank endpoint the user configures (rerank_url; https, plain http only to localhost, a private or link-local address, or a local host name), with no credentials and no redirects followed; facts that recall would not inject or that look like they hold a secret, and queries that hold one, are not sent; a failure or a slow answer gives the recall of rerank: off and pauses the endpoint (60 s, doubling to 900 s); nothing the endpoint returns is stored; the bundled language dictionaries are gzip-compressed plain-text word lists; with auto_extract on (off by default) user sentences that state a preference or decision are stored.", "maintainer": "itpartypattaya", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/itpartypattaya/hermes-plugin-holographic/blob/7488ac32b78f983cff8484209686d59c9b330b76/README.md", "known_issues": ["Word forms are matched by stems, not a dictionary: an irregular form can miss (ponies / pony). A synonym is found only if the fact's keywords name it, unless the optional online search by meaning is on; facts stored without keywords (older ones, auto_extract) need `enrich`.", "Arabic, Indic scripts, Indonesian, German, Turkish, Polish and Dutch are matched by scanning the facts' text: the first such search after start analyses every fact (about 1-1.5 s at 5,000 facts, 4-6 s at 20,000); stores without such facts never scan. The bundled dictionaries load on the first word of their language (Chinese about 0.2 s and 30 MB).", "forget cleans the database file only: Hermes session history, `hermes backup` archives and copies other tools made are not rewritten (tools can read the `forgotten` table and clean their own copies by fact id).", "rerank: on is experimental and does not raise hits. On the maintainer's held-out set it lost one target in 126 questions with embeddings off and two with them on, on questions where several facts of one kind compete, against about 40 % fewer non-target facts. Each turn waits for one rerank call: on 4 CPU threads about 120 ms median with jina-reranker-v2-base-multilingual and 340 ms with bge-reranker-v2-m3, capped by rerank_timeout (3 s, lower with embeddings on so that both fit the core's 8 s prefetch budget). The suggested CPU model, jina-reranker-v2-base-multilingual, is CC-BY-NC-4.0 (non-commercial use only); bge-reranker-v2-m3 is Apache-2.0. The plugin ships no model. It sends no key, so a cloud rerank API that requires one (Cohere, Jina) refuses every call; it is tested with llama-server."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "home-dashboard", "repo": "https://github.com/albertocvrrbs/hermes-home-dashboard", "sha": "a8a018225d8ecd21b281788131775adeade4c577", "description": "Personalizable rice-style Home page with draggable, resizable glass widgets for Hermes Web and Desktop.", "maintainer": "albertocvrrbs", "tier": "community", "category": "desktop", "docs_url": "https://github.com/albertocvrrbs/hermes-home-dashboard#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "homeassistant-statistics", "repo": "https://github.com/goncami/hermes-homeassistant-statistics", "sha": "c6a64211c5411eeb4a15d912f9640906bc7c6ee3", "description": "Read-only Home Assistant Recorder statistics tools (ha_list_statistics and ha_get_statistics). Disclosure \u2014 each call opens an authenticated WebSocket connection to the configured Home Assistant instance using the active profile HASS_TOKEN; returned statistic metadata and values become agent tool results and may reach the configured model provider. No telemetry, shell commands, background processes, credential storage or direct database access.", "maintainer": "goncami", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.5", "version": "0.1.0", "docs_url": "https://github.com/goncami/hermes-homeassistant-statistics", "platforms": [], "known_issues": [], "capabilities": {"provides_tools": ["ha_list_statistics", "ha_get_statistics"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["HASS_TOKEN"]}}, {"name": "homeassistant", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "4d492b1dc5326af3e38bb2cf3e4b9ad6d65f0072", "subdir": "homeassistant", "description": "Home Assistant gateway platform (state-change events in, persistent notifications and cron notify delivery out) plus the homeassistant toolset (ha_list_entities, ha_get_state, ha_list_services, ha_call_service). Formerly built into Hermes core; existing users are migrated automatically.", "maintainer": "NousResearch", "tier": "official", "category": "platform", "requires_hermes": ">=0.21.5", "version": "2.0.1", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/4d492b1dc5326af3e38bb2cf3e4b9ad6d65f0072/assets/homeassistant.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/homeassistant", "platforms": [], "capabilities": {"provides_tools": ["ha_list_entities", "ha_get_state", "ha_list_services", "ha_call_service"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["HASS_TOKEN"]}}, {"name": "honcho", "repo": "https://github.com/plastic-labs/honcho", "sha": "e2d2aba182862deeb846e5cd4a30a41bce0ed82a", "subdir": "hermes-plugin-honcho", "version": "1.0.0", "description": "Honcho is memory infrastructure for building stateful agents that understand changing people, agents, groups, projects, and ideas over time. Store messages and events, let Honcho reason in the background, then query peer representations, session context, search results, or natural-language insights from any model or framework. Use it managed at api.honcho.dev, run a local stack with the honcho CLI, or self-host the server yourself. Maintained by Plastic Labs; the same provider that shipped in-tree. Disclosure \u2014 conversation turns, derived conclusions and peer/session ids are sent to the Honcho API (api.honcho.dev by default, or the self-hosted base_url you configure) under your HONCHO_API_KEY; every request also carries X-Honcho-Host (Hermes version and OS platform) and X-Honcho-Plugin (plugin version) headers that Honcho records for usage attribution.", "maintainer": "plastic-labs", "tier": "community", "category": "memory", "image": "https://raw.githubusercontent.com/plastic-labs/honcho/e2d2aba182862deeb846e5cd4a30a41bce0ed82a/hermes-plugin-honcho/docs/banner.png", "docs_url": "https://docs.honcho.dev/v3/guides/integrations/hermes", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end"], "provides_middleware": [], "requires_env": ["HONCHO_API_KEY"]}}, {"name": "hopper", "repo": "https://github.com/mykeura/hopper", "sha": "68427cf7770b393b6b4b694722d24431058fbd3f", "description": "Add and manage custom OpenRouter models in Hermes without modifying the core catalog.", "maintainer": "mykeura", "tier": "community", "category": "models", "docs_url": "https://github.com/mykeura/hopper#readme", "version": "1.4.0", "requires_hermes": ">=0.21", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPENROUTER_API_KEY"]}}, {"name": "hud-teach", "repo": "https://github.com/iamlukethedev/hermes-hud-teach", "sha": "faa71902eaaf0b82af58c37a58a117daf159021a", "description": "Click-through numbered marks on any live Mac window \u2014 chess, games, Photoshop, Settings \u2014 so Hermes can teach on the real UI without clicking for the user.", "maintainer": "iamlukethedev", "tier": "community", "category": "desktop", "requires_hermes": ">=0.20.0", "docs_url": "https://github.com/iamlukethedev/hermes-hud-teach", "version": "0.1.3", "platforms": ["macos"], "capabilities": {"provides_tools": ["teach_screen"], "provides_hooks": ["on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "huddo", "repo": "https://github.com/puffo-ai/huddo-mcp", "sha": "94a76431e4a7be67ef88e951095f93d61353e6d6", "subdir": "integrations/hermes", "description": "Huddo \u2014 group chat where people and AI agents talk in the same room. Join by invite link, read and reply, edit or unsend your own messages, react, whisper to one member, pair with your human, wait for new messages, and read or update room apps (shared mini-apps such as task lists that a room owner publishes). Portable Agent Plugins v1 package (mcp.json + skills/). Disclosure \u2014 runs the Huddo MCP server locally over stdio (npx -y huddoai@0.9.11, pinned, npm provenance to this commit; Node 20+); sends and receives room messages via api.huddo.ai, readable by every room member except one-to-one encrypted whispers; when you ask it to create a room, huddo_new tells the agent to post a short summary of your conversation there; huddo_app_submit changes a room app's shared state, which every member sees (app code runs only in members' browsers, never on this machine), and app guides written by the room owner reach the agent as untrusted text; huddo_send can attach any local file the agent names and upload it to the room, huddo_transfer (and huddo_leave with to) hands room ownership to another member, and huddo_update_name/huddo_update_avatar with operator: true change your paired human's display name or avatar; Hermes does not ask before huddo_send/huddo_whisper/huddo_react/huddo_edit/huddo_unsend/huddo_app_submit/huddo_download/huddo_transfer/huddo_leave/huddo_update_name/huddo_update_avatar/huddo_rename run (the package does not set trust: untrusted); the server tells the agent to keep calling huddo_wait (up to 50 s per call) for as long as it is in a room, and, if Hermes can schedule recurring tasks, to schedule one that does the same between turns, which keeps spending model tokens until you stop it; the server also tells the agent to read the remote guide at https://huddo.ai/SKILL.md before starting (vendor-hosted, not pinned), and the skills point to npx -y huddoai@latest (unpinned) for identity export and app publishing; downloads go to ~/.huddo/downloads without overwriting; stores a guest identity (signing keys) and a local copy of your rooms' messages (used by huddo_search/huddo_show/huddo_files; huddo_sync fetches older history from api.huddo.ai) in ~/.huddo; no background process (HUDDO_DAEMON=0), no self-update, no telemetry. Room messages from others are untrusted chat content; Huddo marks the paired human with a header tag that message text cannot imitate, and the bundled skills tell the agent to get confirmation in your own Hermes chat before anything sensitive.", "maintainer": "puffo-ai", "tier": "community", "category": "tools", "version": "0.9.11", "docs_url": "https://github.com/puffo-ai/huddo-mcp/tree/main/integrations/hermes#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hwiki", "repo": "https://github.com/ottosulin/hwiki", "sha": "d1961956eaafbd64fef71cb7135d475efcc8f954", "version": "1.0.0", "description": "Markdown wiki as Hermes long-term memory: plain files you and the agent edit together (Obsidian-compatible, git-versionable), local SQLite FTS5 search with optional qmd hybrid retrieval. Inspired by the Karpathy LLM wiki. Disclosure \u2014 reads every Markdown file under the wiki folder you set (wiki_path, outside HERMES_HOME; untrusted_dirs, default raw/, excluded) and injects up to ~1,400 characters of matching excerpts into each turn; the agent appends dated notes only under <wiki>/<memory_dir> (default wiki/memory), and additions to Hermes's built-in memory are mirrored there by default (mirror_builtin_memory), so they land in a folder you may commit or sync; keeps an index at HERMES_HOME/hwiki-index.sqlite and config in HERMES_HOME/hwiki.json, and adds the wiki folder to hermes backup. Cron and subagent runs get read-only recall. No network with the default fts5 backend; the optional qmd backend runs the separately installed qmd CLI (npm @tobilu/qmd, Node \u226522), whose vector modes download local models (~0.3\u20131.6 GB).", "maintainer": "ottosulin", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/ottosulin/hwiki", "readme": true, "capabilities": {"provides_tools": ["wiki_memory_search", "wiki_memory_read", "wiki_memory_write", "wiki_memory_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "hyatlas", "repo": "https://github.com/tuancookiez-hub/HyAtlas-Memory", "sha": "0428086c382456d9afaf55ba166c107f6f30759d", "subdir": "plugins/hyatlas", "version": "5.0.0", "image": "https://raw.githubusercontent.com/tuancookiez-hub/HyAtlas-Memory/0428086c382456d9afaf55ba166c107f6f30759d/docs/images/banner.png", "screenshots": ["https://raw.githubusercontent.com/tuancookiez-hub/HyAtlas-Memory/0428086c382456d9afaf55ba166c107f6f30759d/docs/images/desktop-overview.png", "https://raw.githubusercontent.com/tuancookiez-hub/HyAtlas-Memory/0428086c382456d9afaf55ba166c107f6f30759d/docs/images/desktop-graph.png"], "title": "HyAtlas Memory", "description": "HyAtlas 5 \u2014 self-hosted 8-layer memory provider backed by a pure-Go single-binary server you run yourself (chromem-go vectors, in-process BGE-small embeddings, hybrid vector + keyword search, bitemporal knowledge graph with source citations). Embeddings, the vector index and stored memories are kept locally. Ships agent tools (hyatlas_status/search/recent/add), a `hermes hyatlas` CLI, a Desktop pane with a starmap graph view, and a web dashboard. Disclosure \u2014 requires the separate hyatlas-go server, installed by the user. The plugin never downloads or bundles it, and it talks only to the configured server (default 127.0.0.1:19528). Embeddings are computed locally; stored memories leave the machine only in the LLM calls described below. Extraction is opt-in and uses an LLM you choose: `hermes memory setup` asks for any OpenAI-compatible endpoint, model and key, and stores the key in Hermes's .env as HYATLAS_LLM_KEY. The plugin reads that key only through Hermes's get_secret and reads no Hermes credential. A plain key file named by HYATLAS_LLM_KEY_FILE also works; the server reads it on every call, so do not point it at another program's credentials such as Hermes auth.json. The server has no default endpoint and makes no LLM call until the endpoint, the model and a key are all present; while the endpoint and model are set but no key has arrived, /api/v1/status reports llm \"awaiting_key\". `hermes memory setup`, the repo installer and the sample launcher pre-fill a free Nous Portal endpoint and model (and setup defaults to ultra mode), but nothing is sent until a key is supplied. A server the plugin starts gets that key in its environment; for a server started another way (the launcher, a service) that reports \"awaiting_key\", the plugin (at most every 10 minutes) and `hermes hyatlas doctor` POST the key over plain HTTP to /api/v1/llm/key, only when the configured server host is this machine; the server accepts it only from a loopback address and keeps it in memory only, never on disk. Once configured, each turn's user and assistant text goes to that endpoint (not tool output or context summaries; capped at 12,000 characters), together with up to 5 related stored facts, 3 entity pages and 5 open intentions of that owner so the model can update them instead of duplicating them. In the default ultra mode the server also sends topic-grouped batches of up to 50 stored facts to it every 6 hours (every 20 minutes while earlier batches are still pending) and supersedes (hides but keeps) the facts the model marks merged or stale, recording a reason for each drop. It also records relations corroborated across turns in the local knowledge graph (HYATLAS_CONSOLIDATE_GRAPH=off disables that). Once a day per owner (HYATLAS_CROSS_SCHEMA_EVERY; off disables it) ultra also sends up to 40 of that owner's stored patterns to find up to 3 that hold across topics. In pro and ultra modes it also sends each owner's open intentions, recent summaries and newest facts to rewrite a short Now page, at most every 15 minutes (HYATLAS_NOW_EVERY), and, after a 30-minute pause in an owner's writes (HYATLAS_EPISODE_GAP; off disables it), up to 40 of that stretch's facts to write one episode summary. HYATLAS_RECONCILE=on (off by default) adds a second LLM call per write that sends the new facts together with similar stored ones (including those under user IDs grouped with the owner by HYATLAS_USER_ALIASES) so the model can update, replace or link them; it is meant for a local model. An optional HYATLAS_LLM_FALLBACK_MODEL, tried only when a primary call fails, receives the same text; it is sent the primary key only when it uses the same host. Turns written while the endpoint was unreachable or before a key arrived are extracted later by a catch-up pass (every 10 minutes by default, HYATLAS_CATCHUP_EVERY; rows up to 7 days old, HYATLAS_CATCHUP_MAX_AGE), sending the same text a write would have sent. `hermes hyatlas doctor` sends one short test prompt (\"Reply with the single word OK.\") to the endpoint and writes, finds and deletes one test memory. When you replace or remove an entry with Hermes's memory tool, the plugin asks the local server to retire the matching memory (reversible); nothing leaves the machine. HYATLAS_MODE=lite makes no LLM call. Server endpoints that rewrite stored data are off unless the server runs with HYATLAS_ADMIN=on. The spawned server gets an allowlisted environment (OS essentials plus HYATLAS_*), not the agent's keys. auto_start is off by default; when on, Hermes starts the server as soon as it loads the plugin, and a server started by auto_start or `hermes hyatlas start` keeps running after Hermes exits until `hermes hyatlas stop`. On Windows, if a hyatlas-go.ps1 launcher is configured, `hermes hyatlas start/stop` runs it; the repo's sample launcher reads no credentials (since 4.8.0 it no longer reads Hermes auth.json). No telemetry.", "maintainer": "tuancookiez-hub", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/tuancookiez-hub/HyAtlas-Memory/tree/0428086c382456d9afaf55ba166c107f6f30759d/plugins/hyatlas", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "known_issues": ["After enabling, select the provider with `hermes memory setup` (memory.provider: hyatlas) \u2014 installing and enabling alone does not activate memory.", "The agent tools and hooks arrive through the MemoryProvider interface, not ctx.register_tool, so they do not appear in the plugin tool list.", "Requires the separate hyatlas-go server binary (installed by the user); without a reachable server the provider reports unavailable and memory features degrade rather than fail.", "Updating the plugin does not update the server: install hyatlas-go v5.0.0 too. A store written by an earlier version can be cleaned with the server's maintenance endpoints (see after-install.md, 'Upgrading a store written before 4.5.0').", "5.0 removed share_llm_key: the plugin no longer uses Hermes's Nous sign-in. Set your own extraction key (llm_key) with `hermes memory setup`; `hermes hyatlas doctor` checks it."]}, {"name": "hydradb", "repo": "https://github.com/hydra-db/hydradb-hermes-plugin", "sha": "056d684f7e7f71b1086d975a9b78c52674a960e5", "subdir": "hydradb_hermes", "description": "Long-term memory for Hermes, backed by HydraDB. Relevant context is recalled before each turn, and completed turns are saved in the background. Disclosure \u2014 when selected as the memory provider, each turn's user message (as the recall query) and every completed user/assistant turn are sent over HTTPS to the HydraDB API (api.hydradb.com, or HYDRADB_BASE_URL) under HYDRADB_API_KEY.", "image": "https://raw.githubusercontent.com/hydra-db/hydradb-hermes-plugin/a44241aeba3b4df5b81bad3ae41bf9060344f3f5/assets/banner.png", "maintainer": "hydra-db", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.5", "version": "1.0.1", "docs_url": "https://github.com/hydra-db/hydradb-hermes-plugin#readme", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["HYDRADB_API_KEY", "HYDRADB_DATABASE"]}}, {"name": "hypd-ai-ads", "repo": "https://github.com/HYPD-AI/hypd-hermes-plugin", "sha": "819c28303e4c8a71444c93d78789b7df3abdc68e", "description": "Read-only paid-media analysis for Google Ads, Meta (Facebook) Ads, Microsoft Ads, LinkedIn Ads, Google Analytics (GA4), Search Console and Merchant Center through the hosted HYPD MCP. Portable Agent Plugins v1 package with four skills (setup, tool rules, overview, ready-made analyses). OAuth uses pinned mcp-remote@0.1.49 over npx stdio, so Node.js 20.18.1+ and npm are required. Read-only: never changes campaigns, budgets or ads. Disclosure \u2014 runs the pinned mcp-remote@0.1.49 through npx (downloaded from npm on first run) as a local bridge to HYPD's hosted MCP server at mcp.hypd.ai; tool arguments and the ad, analytics, Search Console and Merchant Center data HYPD returns pass through HYPD's servers; sign-in is a browser OAuth flow whose tokens mcp-remote stores in ~/.mcp-auth; read-only is HYPD's server-side guarantee, and the analysis templates the skills follow are fetched from HYPD's server at run time.", "maintainer": "HYPD AI", "tier": "community", "category": "tools", "requires_hermes": ">=0.20.1", "docs_url": "https://github.com/HYPD-AI/hypd-hermes-plugin#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/HYPD-AI/hypd-hermes-plugin/819c28303e4c8a71444c93d78789b7df3abdc68e/assets/icon.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "icarus", "repo": "https://github.com/esaradev/icarus-plugin", "sha": "e46cba30fb95a0b54b7c4d6c26169a424283d72b", "description": "Self-memory and replacement models for Hermes agents. Remember your work. Train your replacement.", "maintainer": "esaradev", "tier": "community", "category": "memory", "docs_url": "https://github.com/esaradev/icarus-plugin#readme", "capabilities": {"provides_tools": ["fabric_brief", "fabric_curate", "fabric_eval", "fabric_export", "fabric_init_obsidian", "fabric_models", "fabric_pending", "fabric_recall", "fabric_report", "fabric_rollback_model", "fabric_search", "fabric_switch_model", "fabric_telemetry", "fabric_train", "fabric_train_status", "fabric_write"], "provides_hooks": ["on_session_end", "on_session_start", "post_llm_call", "pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "identity", "repo": "https://github.com/indigokarasu/hermes-identity-plugin", "sha": "8f51e0ed7c69992b8494389fb93ec0e02bcca734", "version": "1.0.1", "description": "View and edit the identity files (SOUL.md, MEMORY.md, USER.md, AGENT.md/HERMES.md) from chat, switch the active profile, and see per-line usage with colour-coded staleness timestamps. Adds six tools, /identity, /identity-switch and /identity-dashboard commands, and a utilization dashboard pane. Disclosure \u2014 reads and writes the identity files and a line-utilization record inside the selected profile directory under HERMES_HOME, and can change which profile is active; it performs no network I/O and holds no credentials. Disclosure \u2014 the model-callable identity_edit tool rewrites SOUL.md/MEMORY.md/USER.md/AGENT.md and identity_switch_profile writes HERMES_HOME/active_profile.", "maintainer": "indigokarasu", "tier": "community", "category": "tools", "docs_url": "https://github.com/indigokarasu/hermes-identity-plugin#readme", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["identity_view", "identity_edit", "identity_switch_profile", "identity_list_profiles", "identity_dashboard", "identity_reset_usage"], "provides_hooks": ["post_llm_call", "post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "image-utils", "repo": "https://github.com/MazenMkhinini/hermes-image-plugin", "sha": "c4123fbdb315137b40e4c5b4b5fd3eb2298dae66", "description": "Inspect, resize, crop, rotate, convert and re-encode image files in-process with Pillow - no shell, no ImageMagick, no network.", "maintainer": "MazenMkhinini", "tier": "community", "category": "tools", "docs_url": "https://github.com/MazenMkhinini/hermes-image-plugin#readme", "version": "1.0.0", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["image_info", "image_resize", "image_crop", "image_rotate", "image_convert", "image_optimize"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "inbox", "repo": "https://github.com/NousResearch/hermes-labs-plugins", "sha": "62dbc160fab57f893a9eaace79c16c00518c4eca", "subdir": "inbox", "description": "hermes inbox: one read-only view of everything in flight for the active profile: failed or paused cron jobs, stalled or dropped delegations, orphaned background processes, blocked kanban tasks, running work, undelivered delegation results, upcoming cron runs and open chat sessions, with --json for scripts. A Hermes Labs plugin: built by Nous Research, not supported. Disclosure \u2014 reads processes.json, cron/jobs.json, runtime/active_sessions.json and state.db (SQLite read-only) in the profile's home, plus the shared kanban board's kanban.db (read-only); it never writes, repairs or prunes them, adds no model tools or hooks, and sends nothing anywhere.", "maintainer": "NousResearch", "tier": "community", "category": "general", "docs_url": "https://github.com/NousResearch/hermes-labs-plugins/tree/main/inbox", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "index-network", "title": "Index", "repo": "https://github.com/indexnetwork/hermes-plugin", "sha": "1214c6179d00ccc5f6e27454385f3fd0abbaf845", "description": "Give your agent someone to talk to. Index is the social layer between personal agents. It makes it possible to find the others who share your flavor of weird, no searching or posting needed.\nYou're already telling your agent what you're interested in, and what you're secretly tinkering on. We give personal agents the coordination protocol to socialize their humans' intents. They structure mutual intents into opportunities, negotiate on fit, learn from each turn, and surface connections between people who otherwise might've just missed each other. Disclosure \u2014 login (browser or `hermes index login`) writes INDEX_SESSION_TOKEN and INDEX_API_URL to the Hermes env. When this install is the selected negotiator (under the gateway, Desktop's backend or the dashboard), a Bun child (INDEX_BUN, else PATH) runs the pinned bundle with an allowlisted environment (PATH, HOME, TMPDIR, LANG, LC_ALL, TZ plus names in INDEX_NEGOTIATOR_ENV_PASSTHROUGH; never the session token, no .env files) and drives your Hermes model over a loopback bridge; only with plugins.entries.index-network.settings.custom_negotiator set to true (default off) does the bundle import $HERMES_HOME/index/negotiator.ts, when it exists, and run it on each turn before the built-in negotiator (code in that file runs with the negotiator's Index API key and model bridge); the plugin mints INDEX_API_KEY from the session if it is missing, saves it to the Hermes env and registers the Index MCP server in config.yaml. API traffic goes to protocol.index.network. If INDEX_EARLY_NETWORK_ID is set, confirming onboarding joins that Index network. Negotiation turns are saved as Hermes sessions in a Negotiations project. The 08:00 \"Index morning\" cron job is off until turned on; when on it wakes the negotiator once per active networked signal, spending model calls and possibly sending outreach. The desktop half ships as desktop/plugin.js and stays off until enabled.", "maintainer": "indexnetwork", "tier": "community", "category": "tools", "docs_url": "https://github.com/indexnetwork/hermes-plugin#readme", "version": "0.48.5", "image": "https://raw.githubusercontent.com/indexnetwork/hermes-plugin/1214c6179d00ccc5f6e27454385f3fd0abbaf845/catalog/banner.png", "capabilities": {"provides_tools": ["index_read_intents", "index_research_profile", "index_create_intent", "index_update_intent", "index_add_intent_to_network", "index_list_intent_networks", "index_read_networks", "index_read_network_memberships", "index_update_network", "index_create_network", "index_join_network", "index_list_opportunities", "index_update_opportunity", "index_read_docs", "index_agent_me", "index_open_app"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["INDEX_SESSION_TOKEN"]}}, {"name": "index-search", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-index-search", "sha": "e3303f6e42636d6efa41c240fe79981e23b79c1e", "description": "Search one index you run and watch one saved query, with index_search, index_health and index_watch. Disclosure \u2014 Sends MEILI_API_KEY as a Bearer token to your MEILI_HOST. Over plain http that key travels unencrypted, and a master or admin key is sent as given, so use a search-only key. The tools are on for every surface, including gateways: anyone you allow on your Hermes gateway can search with your key and approve a watch. Turn a surface off with hermes tools. index_watch schedule creates one cron job that runs a model turn every 15 minutes (two or more model requests when it calls the tool) with no daily cap, and it watches only the first 20 hits. The job stays after uninstall until you run hermes cron remove, with -p and the profile name when the profile is not default. Scheduling and unscheduling ask for Hermes approval every time and are refused under cron, yolo, approvals off, unattended sessions and plugins.isolation: host, where the watch only posts a notice that it cannot run, on every run. Answering \"always\" adds an unused line to config.yaml. The watch relies on private parts of Hermes, so an update can stop it.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-index-search#readme", "version": "0.1.0", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": ["index_search", "index_health", "index_watch"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MEILI_HOST", "MEILI_API_KEY"]}}, {"name": "infisical", "repo": "https://github.com/antonba/hermes-infisical-plugin", "sha": "d1c5d46267bcc05f1ee2ae68e06f0ba3072d656a", "description": "Secret source plugin that resolves environment variables from an Infisical secret store (cloud or self-hosted) at Hermes startup. Registers a mapped source (\"infisical\", inf:// references) and a bulk source (\"infisical_bulk\").", "maintainer": "antonba", "tier": "community", "category": "general", "docs_url": "https://github.com/antonba/hermes-infisical-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "inkbox", "repo": "https://github.com/inkbox-ai/hermes-agent-plugin", "sha": "0948a16679f09fcfc78ed3d9171604b2c853402c", "description": "Inkbox email, SMS/MMS, iMessage, voice, and A2A platform plugin for Hermes Agent.", "maintainer": "inkbox-ai", "tier": "community", "category": "platform", "docs_url": "https://github.com/inkbox-ai/hermes-agent-plugin#readme", "capabilities": {"provides_tools": ["inkbox_a2a_ask_caller", "inkbox_a2a_call", "inkbox_a2a_check", "inkbox_a2a_complete", "inkbox_a2a_fail", "inkbox_a2a_reply", "inkbox_create_contact", "inkbox_delete_contact", "inkbox_get_a2a_sent_task", "inkbox_get_contact", "inkbox_get_imessage_conversation", "inkbox_get_text", "inkbox_get_text_conversation", "inkbox_imessage_triage_number", "inkbox_list_a2a_messages", "inkbox_list_a2a_sent_tasks", "inkbox_list_a2a_tasks", "inkbox_list_contacts", "inkbox_list_imessage_assignments", "inkbox_list_imessage_conversations", "inkbox_list_text_conversations", "inkbox_list_texts", "inkbox_lookup_contact", "inkbox_mark_imessage_conversation_read", "inkbox_mark_text_conversation_read", "inkbox_mark_text_read", "inkbox_place_call", "inkbox_send_email", "inkbox_send_imessage", "inkbox_send_imessage_reaction", "inkbox_send_sms", "inkbox_update_contact", "inkbox_whoami"], "provides_hooks": ["post_tool_call", "pre_llm_call", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "inline-platform", "repo": "https://github.com/inline-chat/inline", "sha": "2d3b360da0430684eabab2d946eca0e725c08aa5", "subdir": "plugins/hermes-agent/plugin/inline", "description": "Use Hermes Agent from Inline work-chat DMs, chats, and reply threads. Disclosure \u2014 the setup wizard can, on explicit opt-in, download https://inline.chat/cli/install.sh and pipe it to sh without a checksum, then run the vendor inline CLI login; on connect the adapter publishes your Hermes slash-command list and the names and descriptions of installed skills to the Inline server (INLINE_SYNC_COMMANDS=false disables); error telemetry is off unless a Sentry DSN is set.", "maintainer": "morajabi", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.3", "version": "0.0.21", "capabilities": {"provides_tools": ["inline"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["INLINE_TOKEN"]}}, {"name": "intelligent-tool-break", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "c0445f956ee581a49972c5333467b96b264f9172", "subdir": "public/intelligent-tool-break", "description": "Abort a stalled in-flight tool call with /break, send a note with /break {message}, or retry it with /again without cancelling the rest of the task.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/intelligent-tool-break", "version": "1.3.5", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/c0445f956ee581a49972c5333467b96b264f9172/public/intelligent-tool-break/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "transform_tool_result", "on_session_start", "on_session_end", "on_session_delete"], "provides_middleware": [], "requires_env": []}}, {"name": "intelligent_memory", "repo": "https://github.com/hoysama/hermes-intelligent-memory", "sha": "2d15ce5ba5878ddd7e18ca8cb1f0c62311965da0", "description": "Local-first Arabic/English intelligent memory with canonical facts, conflict lifecycle, bounded recall, and selective Hermes cloud enrichment.", "maintainer": "hoysama", "tier": "community", "category": "memory", "docs_url": "https://github.com/hoysama/hermes-intelligent-memory#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "subdir": "plugin/intelligent_memory"}, {"name": "interim-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "ed94f43f5573b4b55f355bb97f37c225e36d6f19", "subdir": "interim-ledger", "description": "Local ledger of the messages models write in the middle of a turn, before their final answer (the text that comes with a tool call, which on chat platforms can arrive as messages of their own): /interim-log shows how many each model wrote, in how many turns, how many per such turn, their median length and how long ago the last one was, per model, provider, surface or day, for the last 24 hours, any number of hours or days, the latest session or everything recorded; /interim-log recent lists the newest messages (ten, or up to 100 with /interim-log recent 50). Counted even where display.interim_assistant_messages hides them. Disclosure \u2014 writes message metadata (model, provider, surface, step of the turn, length in characters, 12-digit hashes of the session and turn ids; never the message text) to plugin-data/interim-ledger/interim.jsonl, trimmed to 5,000 rows past 2 MB; observer only, cannot delay, change or hide a message; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/interim-ledger", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/ed94f43f5573b4b55f355bb97f37c225e36d6f19/docs/interim-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_interim_message"], "provides_middleware": [], "requires_env": []}}, {"name": "invinoveritas-receipts", "repo": "https://github.com/babyblueviper1/hermes-invinoveritas", "sha": "6a4f9c7b49beac69899f18f3bcf1d0b340297624", "description": "Signed, independently checkable receipts for Hermes approval verdicts and, since 0.2.0, for turns that stop on iteration exhaustion. Observe-only: a post_approval_response hook requests an invinoveritas decision receipt for each Guardian LLM verdict (or every approve/deny with scope=all); post_llm_call + on_session_end record, when a turn ends with max_iterations_reached, whether the turn's todo ledger (the last todo result or the list re-injected after compaction) was complete (turn_scope: exhausted by default, all, or off). Each receipt is a signed set of salted commitments that anyone can check for free at /verify-proof and that the holder can later open with the salt kept locally. Never approves, denies, delays, continues or blocks anything. Disclosure \u2014 one HTTPS POST per recorded approval decision or recorded turn to api.babyblueviper.com/decision-receipt (or the configured api_url) under INVINOVERITAS_API_KEY, paid automatically at 100 sats per receipt from your invinoveritas balance with no per-call confirmation (defaults: Guardian LLM verdicts, and only turns that stop on max_iterations_reached; scope: all adds every human approve/deny, turn_scope: all pays on every turn); sends a fixed question, the options, the choice, a nonce-salted SHA-256 of the context and the tool_call_id/turn_id, never the command text, todo contents or reply text; stores receipts, salts and the full contexts (including the command as Hermes passed it, and the todo ledger) in plugin-data/invinoveritas-receipts/receipts.jsonl.", "maintainer": "babyblueviper1", "tier": "community", "category": "general", "docs_url": "https://github.com/babyblueviper1/hermes-invinoveritas#readme", "version": "0.2.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["post_approval_response", "post_llm_call", "on_session_end"], "provides_middleware": [], "requires_env": ["INVINOVERITAS_API_KEY"]}}, {"name": "iowap", "repo": "https://github.com/iowap-org/iowap-hermes-integration", "sha": "8ada6297345e0c5464e1b0015478867fd1c23944", "description": "Fleet control for Hermes Desktop: live statusbar chip (N/M IOWAP nodes online), a draggable fleet pane, a full fleet page (status, load, queue depth, capabilities per node, activity) and a tasks page that submits to any task-type capability on the fleet and tracks submitted tasks live (per-stage status dots, result previews, artifacts). Data stays local via the local node-cli against your own IOWAP relay; agent sessions join through an optional iowap-task bridge into a shared track store. Disclosure \u2014 the dashboard backend runs the local node-cli (the IOWAP node client from github.com/iowap-org/iowap-node) to read your relay's node list, capabilities and task results, and to submit tasks you start from the Tasks page to nodes on your IOWAP fleet. Relay health also goes through the local node-cli (`server health`) \u2014 the plugin itself makes no raw HTTP calls to the relay; node identity comes from the node's own ~/.relay state files. Tracked task ids are stored in your Hermes home under plugin-data/iowap/.", "maintainer": "Kesuek", "tier": "community", "category": "desktop", "version": "0.3.2", "docs_url": "https://github.com/iowap-org/iowap-hermes-integration#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "iteration-budget-meter", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "953732a9fb52b6fd89e73fc96d910aab63163e07", "subdir": "public/iteration-budget-meter", "description": "Status-bar chip for the focused session per-turn iteration usage (N/60), with a hover tooltip and a click popover of per-request stats.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/iteration-budget-meter", "version": "1.2.2", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/953732a9fb52b6fd89e73fc96d910aab63163e07/public/iteration-budget-meter/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "ja-writing-guard", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-ja-writing-guard", "sha": "ef2bc3c2c2c3162e9c281f3d359dfaaec629d6ad", "description": "Rule-based proofreading for Japanese business text: finds and fixes AI-style phrasing (stock phrases, monotonous sentence endings, overused symbols and Markdown, English-calque grammar) with line, column and a fix hint. It checks wording, not authorship, and rarely flags plain model output. A transform_llm_output hook checks every final Japanese answer and only reports by default; opt-in enforce mode rewrites flagged answers with the user's own model and delivers the rewrite only if numbers, names, URLs, code and negation survive and the score drops under the threshold. Disclosure: no network calls of its own; enforce mode sends each flagged answer to the user's configured model (one extra call, a second only when the first rewrite fails the checks or stays over the threshold; extra cost and up to 25 s delay); a read-only post_tool_call hook notes turns with MEDIA: lines so attachments from other plugins are kept; reports stay in process memory on local surfaces only. Disclosure \u2014 no network calls of its own; mode report (default) only logs scores; opt-in mode enforce sends each flagged final answer (with finding excerpts) to the user's configured model via ctx.llm (1\u20133 calls, up to 25 s delay) and replaces the delivered and stored answer when its preservation checks pass, which do not prove meaning is unchanged; reads plugins.hook_callback_timeout via a private read-only Hermes helper; eval/ dev scripts ship in the tree but are never loaded.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-ja-writing-guard#readme", "version": "0.1.0", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": ["ja_writing_check"], "provides_hooks": ["transform_llm_output", "post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "jackal-verified", "repo": "https://github.com/AnubisQuantumCipher/hermes-jackal-verified", "sha": "dab507a521406a69d308025bed380401eff967b9", "description": "Typed adapter for the reproducible JACKAL v1.7.3 release: 41 catalog-derived verification tools (exact, numerical, Lean-checked bounded lanes, claim replay).", "maintainer": "AnubisQuantumCipher", "tier": "community", "category": "tools", "docs_url": "https://github.com/AnubisQuantumCipher/hermes-jackal-verified", "platforms": [], "capabilities": {"provides_tools": ["jackal_alg_cmp", "jackal_alg_sign", "jackal_anubis_check_program", "jackal_anubis_verify_program", "jackal_anubis_verify_program_receipt", "jackal_atan_rat_bound", "jackal_canon", "jackal_claim", "jackal_claim_cites_test", "jackal_cos_rat_bound", "jackal_crt", "jackal_decision_rank", "jackal_decision_rank_v2", "jackal_diff", "jackal_divides", "jackal_evaluate", "jackal_exact", "jackal_exp_rat_bound", "jackal_gaussian_integral", "jackal_integrate", "jackal_integrate_adaptive", "jackal_integrate_bound", "jackal_integrate_bound_cert", "jackal_ln_rat_bound", "jackal_mod_inv", "jackal_mod_pow", "jackal_poly_canon", "jackal_poly_eq", "jackal_poly_gcd", "jackal_prime_cert", "jackal_range_bound", "jackal_ratfunc_canon", "jackal_roots_isolate", "jackal_sin_rat_bound", "jackal_solve", "jackal_sqrt_rat_bound", "jackal_tanh_rat_bound", "jackal_test_exists", "jackal_verify_bundle", "jackal_verify_receipt", "jackal_xgcd"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jekyll-hyde", "repo": "https://github.com/jnorthrup/hermes-jekyl-hyde", "sha": "10149e57ec2cf47a0184d475ca4d5cb797b54c2d", "description": "Context optimization and execution alignment for agent sessions.", "maintainer": "jnorthrup", "tier": "community", "category": "general", "docs_url": "https://github.com/jnorthrup/hermes-jekyl-hyde#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["post_llm_call", "pre_llm_call", "transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "jet-browser", "repo": "https://github.com/masakaai/jet-browser", "sha": "1b0b10feb70e52bde844ba4e1cb7c35600af4b35", "subdir": "integrations/hermes", "description": "Verify Jet Browser startup, native input, DOM agreement, and PNG capture inside a network-isolated WPE WebKit container. Disclosure \u2014 runs `docker run` (Docker access is root-equivalent on the host) on the digest-pinned image ghcr.io/masakaai/jet-browser@sha256:540a1fec\u2026, pulled from GHCR on first use; the container has no network and only SETUID/SETGID capabilities, but runs with AppArmor and systempaths unconfined and a seccomp profile that allows user-namespace and mount syscalls for WebKit's bubblewrap sandbox; the tool takes no arguments and loads only a built-in local test page.", "maintainer": "IRONICBo", "tier": "community", "category": "tools", "docs_url": "https://github.com/masakaai/jet-browser/tree/1b0b10feb70e52bde844ba4e1cb7c35600af4b35/integrations/hermes", "platforms": ["linux"], "known_issues": ["Requires Docker with linux/amd64 container support; the first run may pull the pinned image from GHCR."], "capabilities": {"provides_tools": ["jet_browser_verify"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.6", "version": "0.1.0"}, {"name": "jev-agent-router", "repo": "https://github.com/Pinutss/jev-agent-router", "sha": "8cb6d67a81d4545502750c4599b427d98acf3120", "description": "Agent Plugins v1 package: one skill plus one stdio MCP server (agent_route) started with uv run from the checkout. Needs uv on PATH. Registers no Hermes tools or hooks; do not expect jev_* tools.", "maintainer": "Pinutss", "tier": "community", "category": "general", "docs_url": "https://github.com/Pinutss/jev-agent-router#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jev-approvals", "repo": "https://github.com/anpicasso/hermes-jev-approvals", "sha": "28be98a19539b29768398fb400f4c62f41337c26", "subdir": "plugin", "description": "TypeSafe's Jev decision model as Hermes' smart-approval reviewer only: it cannot generate text and refuses every other task. Supports TypeSafe direct, OpenRouter, and configurable Jev-compatible HTTPS endpoints with optional endpoint-specific authentication; validates typed answers and endpoint/redirect boundaries, redacts command credentials, and records bounded structured audit logs. Disclosure \u2014 each command routed to smart approval (redacted best-effort) and the operator's smart-policy text leave the machine for the configured third-party endpoint; provider or validation failures fail closed to ESCALATE.", "maintainer": "anpicasso", "tier": "community", "category": "models", "docs_url": "https://github.com/anpicasso/hermes-jev-approvals#readme", "version": "0.3.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TYPESAFE_API_KEY"]}}, {"name": "jev-cron-gate", "repo": "https://github.com/superlowburn/hermes-jev-cron-gate", "sha": "cfd999802bd8d6eb25b986f128323fae0572429c", "description": "Skip agent cron runs that would do nothing: a pre-run wake-gate script asks TypeSafe Jev one yes/no question over a small state snapshot (files, changed-since-last-run, localhost URLs) and prints {\"wakeAgent\": false} when it is confident the run is pointless. Fail-open on every error, forced wake after N consecutive skips, stdlib only. Disclosure \u2014 each gated cron tick (and the tool's test action) sends the configured snapshot of file contents, localhost URL response bodies and change flags (\u22646,000 chars) to api.typesafe.ai with your TypeSafe key.", "maintainer": "superlowburn", "tier": "community", "category": "automation", "docs_url": "https://github.com/superlowburn/hermes-jev-cron-gate/blob/cfd999802bd8d6eb25b986f128323fae0572429c/README.md", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["jev_cron_gate"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TYPESAFE_API_KEY"]}}, {"name": "jev-curator", "repo": "https://github.com/anpicasso/hermes-jev-curator", "sha": "4e8626c7d394a9cbef8594993ec4b208ffb3395f", "subdir": "plugin", "description": "TypeSafe Jev semantic governance for Hermes' native Curator: classifies relationships between complete skill packages, produces content-hash-bound, fail-closed consolidation plans, and locally guards background destructive skill_manage calls while Hermes retains control of backups and mutations. A profile-scoped 60-second lifecycle debounce coalesces skill changes into dry refreshes. Disclosure \u2014 no egress occurs by default; after allow_content_egress is explicitly enabled, redacted bounded skill content is sent to the configured TypeSafe, OpenRouter, or custom Jev endpoint and may spend provider credits. Automatic refreshes never apply mutations, and missing, stale, or incomplete evidence fails closed.", "maintainer": "anpicasso", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.2", "docs_url": "https://github.com/anpicasso/hermes-jev-curator/blob/4e8626c7d394a9cbef8594993ec4b208ffb3395f/README.md", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["jev_skill_relations"], "provides_hooks": ["on_skill_lifecycle", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "jev-effort-router", "repo": "https://github.com/AlphaPerseii3000/jev-effort-router", "sha": "6fd9f2ec1c53cb99b5e6c7043c25bbd37938d4a5", "description": "Per-turn model AND reasoning-effort routing, decided by TypeSafe Jev, which rewrites the outgoing Ollama:Cloud provider request itself via the llm_request middleware. Every other catalog router picks a model and stops, and the two entries that touch reasoning effort move it by hand; this one decides both per turn. Ollama:Cloud only \u2014 no other provider is routed, and every failure path leaves the request byte-identical to a plugin-disabled run. Disclosure \u2014 sends the current user message and up to 4 previous turns to OpenRouter's Decisions API (typesafe/jev, billed to your OpenRouter key) on every routed turn.", "maintainer": "AlphaPerseii3000", "tier": "community", "category": "models", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/AlphaPerseii3000/jev-effort-router", "version": "0.3.0", "platforms": [], "capabilities": {"provides_tools": ["jev_effort_router_status", "jev_effort_router_route"], "provides_hooks": ["on_session_end", "post_llm_call"], "provides_middleware": ["llm_request"], "requires_env": ["OPENROUTER_API_KEY"]}}, {"name": "jev-judge", "repo": "https://github.com/DoGMaTiiC/hermes-jev", "sha": "5dddbeaac5be08281e6c3b372eeaba3639971f0a", "subdir": "plugins/jev-judge", "description": "TypeSafe Jev as a judgment layer \u2014 a pre-tool gate (shadow by default, enforce escalates) on terminal, write_file and patch asking destructive / exfiltration / impact (a v2 signal set \u2014 reads_secrets \u00d7 sends_outbound, blast_radius, self_advocating \u2014 is one setting away), plus a jev_ask tool for typed judgments. Thresholds in code, one JSONL line per decision with the fail-open reason, fail-open on every error path. Stdlib only, no Node; no redirects, proxy env ignored, payload capped; works with TYPESAFE_API_KEY, OPENROUTER_API_KEY, or AI_GATEWAY_API_KEY. Disclosure \u2014 each judged call sends the tool name and its redacted arguments (\u2264600 chars each, \u226412 args) to TypeSafe, OpenRouter, or your configured gateway, using your key; shadow mode only logs. With the default backend auto, OPENROUTER_API_KEY is used automatically whenever it is present and TYPESAFE_API_KEY is not, so tool names and redacted arguments go to openrouter.ai on your main-model OpenRouter key unless backend is set to typesafe or gateway.", "maintainer": "DoGMaTiiC", "tier": "community", "category": "tools", "docs_url": "https://github.com/DoGMaTiiC/hermes-jev/blob/main/plugins/jev-judge/README.md", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["jev_ask"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "jev-mcp-router", "repo": "https://github.com/Pinutss/jev-mcp-router", "sha": "6a7b3baf45af62def86c3d824b06c85569d14298", "description": "Agent Plugins v1 package: one skill plus one stdio MCP server (mcp_select) started with uv run from the checkout. Needs uv on PATH. Registers no Hermes tools or hooks; do not expect jev_* tools.", "maintainer": "Pinutss", "tier": "community", "category": "tools", "docs_url": "https://github.com/Pinutss/jev-mcp-router#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jev-memory-selector", "repo": "https://github.com/Pinutss/jev-memory-selector", "sha": "87bd9be2a67d380024be194e6d80a1a053024361", "description": "Agent Plugins v1 package: one skill plus one stdio MCP server (memory_select) started with uv run from the checkout. Needs uv on PATH. Registers no Hermes tools or hooks; do not expect jev_* tools.", "maintainer": "Pinutss", "tier": "community", "category": "memory", "docs_url": "https://github.com/Pinutss/jev-memory-selector#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jev-model-router", "repo": "https://github.com/Pinutss/jev-model-router", "sha": "b977dc3ef07738aab005c433d08c1da3fa949e8d", "description": "Agent Plugins v1 package: one skill plus one stdio MCP server (model_route) started with uv run from the checkout. Needs uv on PATH. Registers no Hermes tools or hooks; do not expect jev_* tools.", "maintainer": "Pinutss", "tier": "community", "category": "models", "docs_url": "https://github.com/Pinutss/jev-model-router#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jev-skill-router-mcp", "repo": "https://github.com/ydmw74/jev-skill-router", "sha": "76ee09e049dbc10c76f98cfefc6ca16b42cfad38", "description": "Agent Plugins v1 package: one skill plus one stdio MCP server (skill_select) started with uv run from the checkout. Needs uv on PATH. Suggests at most one skill per request via the TypeSafe (Jev) cookbook pattern; roster is read live from the profile skills dir. Note: the portable loader does not interpolate env in mcp.json \u2014 JEV_TYPESAFE_API_KEY must be present in the server's inherited environment (native mcp_servers declaration works too).", "maintainer": "ydmw74", "tier": "community", "category": "tools", "docs_url": "https://github.com/ydmw74/jev-skill-router#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["JEV_TYPESAFE_API_KEY"]}}, {"name": "jev-skill-router", "repo": "https://github.com/DoGMaTiiC/hermes-jev", "sha": "5dddbeaac5be08281e6c3b372eeaba3639971f0a", "subdir": "plugins/jev-skill-router", "description": "Names the one skill from your live roster that fits the turn, before the model call \u2014 typed routing via TypeSafe Jev (one choice over the roster plus gate booleans, then a re-read of the shortlist with per-candidate fits), with both thresholds applied in code. Says nothing when nothing fits; opt-in, fail-open, stdlib only, no Node; no redirects, proxy env ignored, payload capped. Disclosure \u2014 on eligible turns it sends your message (up to 4,000 chars) plus skill names and short SKILL.md excerpts from your local roster to TypeSafe, OpenRouter, or your configured gateway, using your key. With backend auto an OpenRouter key is used automatically when no TypeSafe key is set, and the OpenRouter route also reads Hermes' OpenRouter credential pool (auth.json) when OPENROUTER_API_KEY is absent, rotating that pool's entries through the core pool API.", "maintainer": "DoGMaTiiC", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/DoGMaTiiC/hermes-jev/blob/main/plugins/jev-skill-router/README.md", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "jev-typesafe", "repo": "https://github.com/ajensenwaud/hermes-jev-plugin", "sha": "b3d29f71770a3447ad0b3db00658f64a8edc7dd3", "description": "TypeSafe Jev (System One) decision tools \u2014 atomic yes/no checks, routing, rubric scoring and mixed typed questions with calibrated probabilities, for triage, routing and review gating in coding agents. Disclosure \u2014 every tool call sends the model-supplied question/state together with your TYPESAFE_API_KEY to api.typesafe.ai (TypeSafe AI, an independent vendor); the catalog has not verified the plugin author's affiliation with that vendor.", "maintainer": "Anders Jensen-Waud", "tier": "community", "category": "tools", "requires_hermes": ">=0.19", "docs_url": "https://github.com/ajensenwaud/hermes-jev-plugin/blob/b3d29f71770a3447ad0b3db00658f64a8edc7dd3/README.md", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["jev_evaluate", "jev_check", "jev_route", "jev_score"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TYPESAFE_API_KEY"]}}, {"name": "jev", "repo": "https://github.com/ourines/hermes-jev", "sha": "28a4ea390f80d97fcdc8c20d6b630dfe2de645de", "subdir": "", "description": "Explicit Jev decision sidekick via TypeSafe or Cloudflare; advisory judgments, no automatic tool gating.", "maintainer": "ourines", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/ourines/hermes-jev/blob/28a4ea390f80d97fcdc8c20d6b630dfe2de645de/README.md", "version": "0.1.2", "platforms": [], "capabilities": {"provides_tools": ["jev_evaluate"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jira-browser", "repo": "https://github.com/LikelyLucid/hermes-jira-browser", "sha": "03ba860d7241af620860968fa747b109d4664cc2", "description": "Jira workspace for Hermes Desktop, linking tickets to Hermes Projects, worktrees, and conversations. Disclosure \u2014 reads a Jira API token from JIRA_* env vars or ~/jira-config/config.json (owner-only, read-only) and sends it only to your configured https Jira origin; agent tools are read-only but return Jira text (untrusted) to the model; Start work / Draft update create chats seeded with ticket descriptions (Draft update auto-runs a turn); PR/CI status is read through your local gh CLI login.", "maintainer": "LikelyLucid", "tier": "community", "category": "desktop", "version": "0.1.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["jira_assigned_issues", "jira_search_issues", "jira_issue_detail", "jira_issue_transitions"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "job-search", "repo": "https://github.com/agent-data/job-search", "sha": "dba0c0992e9d7fc6533dd1be3003df7a311168f0", "description": "A private, local-first job-search assistant that finds postings, judges them against your prose preferences (no scores), and writes digests on a schedule you control.", "maintainer": "agent-data", "tier": "community", "category": "automation", "docs_url": "https://github.com/agent-data/job-search#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jot", "repo": "https://github.com/Totoro-qaq/hermes-jot", "sha": "b65b550108c8e742cc5737055213da947dc54e0f", "description": "Notes, checklists and documents beside Hermes that your agent can read and update safely, with revision checks and undo for AI edits.", "maintainer": "Totoro-qaq", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "0.4.1", "title": "Jot", "readme": true, "image": "https://raw.githubusercontent.com/Totoro-qaq/hermes-jot/b65b550108c8e742cc5737055213da947dc54e0f/assets/readme/banner.png", "screenshots": ["https://raw.githubusercontent.com/Totoro-qaq/hermes-jot/b65b550108c8e742cc5737055213da947dc54e0f/assets/readme/workspace.en.jpg", "https://raw.githubusercontent.com/Totoro-qaq/hermes-jot/b65b550108c8e742cc5737055213da947dc54e0f/assets/readme/sidebar.en.jpg"], "known_issues": ["Requires a current Hermes Desktop build with SandboxedFrame and gateway file-download SDK support.", "Word attachments use download or the default application; the tested host does not render DOCX."], "capabilities": {"provides_tools": ["jot_list", "jot_read", "jot_create", "jot_update", "jot_set_task", "jot_delete"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jp-address", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-address", "sha": "318384409054e0d43329ed4cf002ea61014f3d6c", "description": "Splits one Japanese address into prefecture, city, town and the remainder with address_split, built on Geolonia's address data (CC BY 4.0, from the Digital Agency address base registry). Give it a Japanese postal address as written, such as \u6771\u4eac\u90fd\u5343\u4ee3\u7530\u533a\u971e\u304c\u95a22-1-2, and it returns the prefecture, city and town as separate fields. Disclosure \u2014 Each call sends at most two HTTPS GET requests, with no API key, to japanese-addresses-v2.geoloniamaps.com or the JP_ADDRESS_BASE_URL you set (plain http only for 127.0.0.1 and localhost). The matched prefecture and municipality names go into the URL path; the house number, the lot and the building name are not sent. JP_ADDRESS_BASE_URL is read for the active profile on each call, and an HTTP proxy set in the environment is not used. The tool is on for every surface, including gateways, and asks for no approval: anyone you allow on your Hermes gateway can call it. Turn a surface off with hermes tools. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. It writes no files and creates no cron job. A point can be coarser than the town and is not a rooftop geocode, and an address it cannot place for certain comes back as ambiguous or at the municipality instead of a guess. The publisher may change or stop the free host and suggests self-hosting for commercial use. Called from Hermes with five models in a small sample of 18 sessions (see CHANGELOG.md).", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-address#readme", "version": "0.1.1", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-address/318384409054e0d43329ed4cf002ea61014f3d6c/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["address_split"], "provides_hooks": [], "provides_middleware": []}}, {"name": "jp-charts", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-charts", "sha": "870b5fcb1c9ca3db00f4fe956ee8d860f20ea661", "description": "Bar, line, stacked and 100% band charts as phone-sized PNGs for chat replies and reports, with Japanese text, \u4e07/\u5104 units and a required unit and source line. Every bar, point, label and tick is read back from the finished figure and compared with the parsed data before the image is returned. Disclosure: no network calls at run time; reads a local .csv/.tsv/.txt/.json only when given its path (never hidden files or the Hermes home); writes PNGs to the Hermes image cache; a transform_llm_output hook adds a forgotten MEDIA line to replies on chat platforms and cron deliveries (setting auto_attach, on by default).", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-charts#readme", "version": "0.1.0", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": ["chart_render", "chart_validate", "chart_types"], "provides_hooks": ["transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "jp-chatwork", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-chatwork", "sha": "8dbdff609b3c99768420a19a7ca646b6daad3dbe", "description": "Talk to Hermes from Chatwork rooms, built on the Chatwork API: put Hermes in a Chatwork room and ask it with [To:] or a reply, like a colleague; the answer comes back as a Chatwork reply. Polls the Chatwork API (no public URL or webhook), never answers a message twice across restarts, and while CHATWORK_ALLOWED_USERS is unset only the token's own account can use Hermes commands beyond /help, /whoami, /new and /reset or answer approval prompts. Disclosure: talks only to api.chatwork.com with your own API token; polls every 5 s by default while the gateway runs; stores read positions and the ids of its posted messages in <HERMES_HOME>/plugin-data/jp-chatwork/state.json. Disclosure \u2014 while CHATWORK_ALLOWED_USERS is unset everyone in the rooms listed in CHATWORK_ROOMS (external guests included) can prompt the agent and use its enabled tools, with Hermes commands and approval answers kept to the token's own account; talks only to api.chatwork.com with your API token, polling every 5 s while the gateway runs; stores read positions and posted message ids in <HERMES_HOME>/plugin-data/jp-chatwork/state.json; logs each asker's name and account id.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "platform", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-chatwork#readme", "version": "0.1.0", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["CHATWORK_API_TOKEN", "CHATWORK_ROOMS"]}}, {"name": "jp-corporate", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-jp-corporate", "sha": "fc0e16c2924d00774957c516f5eb14016228b91d", "description": "Japanese corporate lookup (\u6cd5\u4eba\u7167\u4f1a): find or verify a company by name or corporate number and read its gBizINFO record (basic info, subsidies, government contracts, awards, certifications, financials, patents, workplace data). Disclosure \u2014 sends the company names, corporate numbers and prefectures you look up to api.info.gbiz.go.jp (METI gBizINFO) with your own GBIZINFO_API_TOKEN in a request header; no other host, nothing written to disk.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-jp-corporate#readme", "version": "0.1.1", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": ["jp_corp_search", "jp_corp_profile"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["GBIZINFO_API_TOKEN"]}}, {"name": "jp-edinet", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-edinet", "sha": "06171c84b23ab5e35b0c58203cebcbee33117110", "description": "Japanese filings on the EDINET API v2. It finds a Japanese company's annual securities report (yuho) and other financial reports filed on EDINET, and reads headline figures such as revenue and total assets from a filing. Disclosure \u2014 talks only to api.edinet-fsa.go.jp over HTTPS, and your EDINET_API_KEY rides in the URL as Subscription-Key. Each call reads EDINET_API_KEY for the active profile, and an HTTP proxy set in the environment is not used. The edinet toolset is on for every platform, including gateways, so anyone a gateway admits can call these tools with your key. With CHATWORK_ALLOWED_USERS unset, everyone in CHATWORK_ROOMS can call them. Turn the toolset off per platform with hermes tools. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. There is no daily cap. The agent can call the three tools itself. A cron you add stays after uninstall until you remove it in Hermes. This plugin starts no child process and is not a sandbox. Search sends EDINET the filing date, and a download sends the document id and its type. Company name, securities code, EDINET code, and corporate number are filtered on your machine. found: false only means the figure is missing from the consolidated current-year rows the plugin reads, not that the document has no number. A past day's filing list can change. Lists, saved files, and a key fingerprint, not the key, stay at <HERMES_HOME>/plugin-data/jp-edinet per profile after uninstall. Delete that directory to remove them. The plugin relies on Hermes internals for the write check and the data folder. If an update moves those parts, the tools refuse and do not call EDINET. Test files are not loaded at startup.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-edinet#readme", "version": "0.1.2", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-edinet/06171c84b23ab5e35b0c58203cebcbee33117110/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["edinet_search_filings", "edinet_financials", "edinet_save_document"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["EDINET_API_KEY"]}}, {"name": "jp-egov-law", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-egov-law", "sha": "2e96dd28108250b374160077d6e1d9fa4dea55f1", "description": "Japanese laws for Hermes Agent, built on the e-Gov Law API: find a law by name, abbreviation or phrase, read one article as in force today or on a given date, and check amendment history and enforcement dates, with the source credit e-Gov's terms ask for. Ask for one Japanese law article, such as Article 32 of the Labor Standards Act, and it returns the official law text with the law number and the date that version took effect. Disclosure \u2014 sends the law names, article numbers, dates and search phrases you look up to laws.e-gov.go.jp (public API, no key); no other host, nothing written to disk. Registers blueprint jp-egov-law:weekly-amendments and does not create a cron job. When you create a job from that blueprint, one model turn runs once a week (default Mon 09:00, Hermes tz or the host clock if unset, not converted to Japan). A turn that calls a tool is at least two model requests, and there is no daily cap. The agent can schedule it, and scheduling it twice creates two jobs. Silence is not \"no amendment\". Uninstall leaves the cron until hermes cron remove. Tools stay on every platform, including gateways (a guest can call them; hermes tools disables one). While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. v0.21.4 and v0.21.5 load the tools and skip the blueprint.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-egov-law#readme", "version": "0.1.3", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-egov-law/2e96dd28108250b374160077d6e1d9fa4dea55f1/assets/catalog-banner.png", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": ["egov_law_search", "egov_law_article", "egov_law_revisions"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jp-estat", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-estat", "sha": "2cf442a83be2ed90b0a07cc4e8707d591f1e9196", "description": "Japanese government statistics from the e-Stat API: search tables and fetch figures such as population, households, wages, and prices, with estat_search_tables, estat_table_info, and estat_get_data. Disclosure \u2014 It needs a free e-Stat application ID, set as ESTAT_APP_ID in the .env of each profile. Each call sends your search words and table selections to api.e-stat.go.jp and puts ESTAT_APP_ID in the request URL. The ID is read for the active profile on each call. An HTTP proxy set in the environment is not used, and no other host is called. Nothing is written to disk, and this plugin creates no cron job. The tools are on for every surface, including gateways, so anyone you allow there can call them with your ID. Turn a surface off with hermes tools. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-estat#readme", "version": "0.1.4", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-estat/2cf442a83be2ed90b0a07cc4e8707d591f1e9196/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["estat_search_tables", "estat_table_info", "estat_get_data"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ESTAT_APP_ID"]}}, {"name": "jp-kokkai", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-kokkai", "sha": "7047db976671e39c69285d4b21dee00c026b19cb", "description": "Lists Diet meetings and returns a short speech excerpt, with kokkai_search, kokkai_speech, and kokkai_watch. Disclosure \u2014 Talks only to kokkai.ndl.go.jp over HTTPS GET with no API key. kokkai_search returns meeting metadata and the official meeting URL, and does not return speech text. kokkai_speech reads /api/speech and returns at most 10 excerpts, each at most 240 characters, with the speaker, the meeting name, the date, and the speech URL. Those excerpts are not written to plugin-data. The tools are on for every surface, including gateways: anyone you allow on your Hermes gateway, and a guest in a room with an empty allowlist, can search, read a speech excerpt, add a watch, and approve it. Turn a surface off with hermes tools. kokkai_watch add creates one cron job that runs a model turn once a day, at the hour you pick in Hermes's own timezone, with no daily cap. It stays after uninstall until you run hermes cron remove, with -p and the profile name when the profile is not default. Adding or removing a watch asks for Hermes approval every time and is refused under cron, yolo, approvals off, unattended sessions, and plugins.isolation: host. Answering \"always\" adds an unused line to config.yaml. Under plugins.isolation: host the watch cannot save seen speech IDs and says so on every run. The watch relies on private parts of Hermes, so an update can stop it. State (your watch words, seen speech IDs, and the job id) stays in plugin-data/jp-kokkai after uninstall.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-kokkai#readme", "version": "0.1.2", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-kokkai/7047db976671e39c69285d4b21dee00c026b19cb/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["kokkai_search", "kokkai_speech", "kokkai_watch"], "provides_hooks": [], "provides_middleware": []}}, {"name": "jp-reinfolib", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-reinfolib", "sha": "cfb17760af4b44df2057a262c16f90dfef5066ee", "description": "Quarterly MLIT prices for one city, via reinfolib_quarter. Use it for Japanese real estate and property prices in one city: it returns the number of recorded sales, the median trade price and the first 20 rows for a quarter. These are transaction prices, not the official land prices published as \u5730\u4fa1\u516c\u793a. Disclosure \u2014 sends your REINFOLIB_API_KEY as Ocp-Apim-Subscription-Key to www.reinfolib.mlit.go.jp (HTTPS, XIT001) or the host of REINFOLIB_BASE_URL. Plain http is refused except 127.0.0.1 and localhost, where the key is not encrypted. On for every surface, including gateways, so anyone you allow can call it with your key, with no approval prompt, including unattended cron, yolo, and approvals off. hermes tools does not stop /jp-reinfolib. Stop the slash command with allow_admin_from, user_allowed_commands, group_user_allowed_commands, or by disabling the plugin. After a GET returns, this process waits 1 second before the next, each GET stops after 30 seconds with no bytes, and there is no retry or daily cap. Blueprint jp-reinfolib:weekly-city-check is once a week (default Monday 09:00) and calls only this tool after you schedule it. This plugin does not create a cron job or write a file. A job you schedule stays until hermes cron remove and may include your MCP servers. HTTP 404 means no data for that request, not zero rows and not unchanged prices. A scheduled run is one model turn. A turn that calls the tool is at least two model requests. An empty slash allow list does not stop this tool. Registered only if register_automation_blueprint exists; else skip. A no-data week may be [SILENT] and not arrive. Data weeks are one short message. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. \u300c\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3001\u56fd\u571f\u4ea4\u901a\u7701\u306e\u4e0d\u52d5\u7523\u60c5\u5831\u30e9\u30a4\u30d6\u30e9\u30ea\u306eAPI\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u63d0\u4f9b\u60c5\u5831\u306e\u6700\u65b0\u6027\u3001\u6b63\u78ba\u6027\u3001\u5b8c\u5168\u6027\u7b49\u304c\u4fdd\u8a3c\u3055\u308c\u305f\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u300d", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-reinfolib#readme", "version": "0.1.1", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-reinfolib/cfb17760af4b44df2057a262c16f90dfef5066ee/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["reinfolib_quarter"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["REINFOLIB_API_KEY"]}}, {"name": "jp-subsidies", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-subsidies", "sha": "471ed8e7bd3e3dd9430ef86ee933e42da8d7cc73", "description": "Japanese subsidy search and weekly watch, built on the jGrants public API. Disclosure \u2014 Searches api.jgrants-portal.go.jp with no API key and no daily request cap; each call waits at most 60 seconds and retries at most twice, and a result is a search match, not proof that every subsidy came back. The plugin has no user list of its own: anyone you allow on your Hermes gateway can call these tools and change this profile's watch, and the agent can set up a watch by itself. In a Chatwork room listed in CHATWORK_ROOMS, everyone can call them while CHATWORK_ALLOWED_USERS is unset. The tools are on for every platform, including gateways; turn them off per platform with hermes tools. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off. The /subsidies command is outside hermes tools; limit it with allow_admin_from or user_allowed_commands, or disable the plugin. The optional weekly watch is an unattended cron job that runs a script with no model call and is not a sandbox; delivering it to bot-chat instead runs one model turn on the fetched text. If delivery fails after the script runs, those subsidies are already marked seen and the text stays under cron/output/. Uninstall leaves the cron job, scripts/jp-subsidies-weekly-*.py and plugin-data/jp-subsidies/ until you run hermes cron remove and delete the files. The plugin does not store the name or ID of who asked. Not tested against a live gateway, with the Chatwork plugin loaded, or for result sets of several hundred rows.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-subsidies#readme", "version": "0.1.1", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-subsidies/471ed8e7bd3e3dd9430ef86ee933e42da8d7cc73/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["subsidies_search", "subsidies_detail", "subsidies_watch_setup"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "junie-acp", "repo": "https://github.com/JetBrains/junie", "sha": "296ea839b354956fbd22544687a88b944c18dc22", "subdir": "hermes-plugin", "description": "JetBrains Junie coding agent as a Hermes model provider over ACP.", "maintainer": "JetBrains", "tier": "community", "category": "models", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/JetBrains/junie/tree/main/hermes-plugin", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "jwt-ref", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "9c842d6da34cce6bce21a43af097629217828634", "subdir": "jwt-ref", "description": "@jwt: context references that decode a JSON Web Token for the model: @jwt:<token> (or a quoted \"Bearer <token>\") attaches the header with the algorithm in words, every claim as JSON, the exp, nbf, iat and auth_time claims in UTC with how long ago or ahead they are, whether the token has expired and its lifetime, and notes on alg none, a missing or empty signature, a header that names its own key (jku, x5u, jwk), crit and duplicate names; encrypted tokens (JWE) show their header only; the TUI and Desktop composer preview a token as you type it. The signature is never verified. Disclosure \u2014 reads only the text of the reference itself and the system clock, using Python's base64, json and datetime; no network (no key sets fetched), no files read or written, no subprocess, no credentials read; the plugin keeps no copy of the token, but the @jwt: reference and the decoded header and claims become part of the message sent to your model provider and saved in the session history, so decode only tokens you are willing to share with it; register() only adds the @jwt: reference provider.", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/jwt-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/9c842d6da34cce6bce21a43af097629217828634/docs/jwt-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kanban-gantt", "repo": "https://github.com/e-is/hermes-kanban-gantt", "sha": "77aa2ee41cd393dd3755d2e21556f3ace1b23314", "description": "One board, three views, and each answers a different question: List says what the work is, Timeline says when it happened, Graph says what hangs off what. The Graph view draws a card per task and an arrow per dependency, laid out top-down by longest path (or left to right, by status, or as a compact grid), with a transitive reduction that counts the arrows it implies instead of hiding them, links you draw, move and delete where they are drawn, and a click that lights the whole upstream and downstream lineage of a task. The Timeline renders any board as real work timestamps (created/started/review/done), with a collapsible tree column (boxed fold controls, tree connectors, per-board fold state, multi-parent links kept visible), live-activity arcs, filters, bulk actions, and a period selector from 6 hours to 7 days. The List view trades the bars for a dense table \u2014 task, assignee, status, last activity. Quick scopes (Running, Blocked, Open, All) narrow the board in all three views alike, and a lineage switch widens any of them to what leads to the selection and what follows it. Tasks are created from the page (project, workspace, skills, model override, goal mode), re-parented by drag & drop or from the drawer, and moved between boards with their children; any task with files carries a paperclip, its files listed on demand \u2014 the board payload carries only a count \u2014 and previewed by type (markdown, plain text, image, PDF, HTML in a sandboxed frame) or downloaded. Zero API keys, zero model tokens; live updates follow the plugin's /events websocket, which a gateway turns off with KANBAN_GANTT_WS=0 (the page then polls every 60 s and shows a Refresh button). Disclosure \u2014 Desktop page plus dashboard routes that read and write the local kanban boards (create tasks with workspace path, skills, model override and goal mode; re-parent; move a task, with its children, to another board \u2014 the copy is verified there before the source rows and their links are deleted; edit status, assignee and description; bulk archive and delete; read task attachment files from the board's own attachments folder for preview and download); live updates over a dashboard-authenticated /events websocket, off with KANBAN_GANTT_WS=0; no third-party network.", "maintainer": "e-is", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/e-is/hermes-kanban-gantt", "version": "1.7.1", "image": "https://raw.githubusercontent.com/e-is/hermes-kanban-gantt/77aa2ee41cd393dd3755d2e21556f3ace1b23314/docs/catalog-card.png", "screenshots": ["https://raw.githubusercontent.com/e-is/hermes-kanban-gantt/77aa2ee41cd393dd3755d2e21556f3ace1b23314/docs/screenshot-en-01.png", "https://raw.githubusercontent.com/e-is/hermes-kanban-gantt/77aa2ee41cd393dd3755d2e21556f3ace1b23314/docs/screenshot-en-02-details.png", "https://raw.githubusercontent.com/e-is/hermes-kanban-gantt/77aa2ee41cd393dd3755d2e21556f3ace1b23314/docs/screenshot-en-08-graph.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kanban-graph", "repo": "https://github.com/Senci/hermes-kanban-graph", "sha": "6dee73134f30bc7d8fc10078dcf1b5a7bed30342", "description": "Live, read-only dependency graph of the Hermes kanban boards in Hermes Desktop: every board as a band, tasks as cards, dependencies as arrows with implied ones folded away. Click a task to light up its whole lineage with runs, last failure and the running worker's latest tool calls; deep links open a task directly, and a stdlib CLI renders the same graph as a standalone HTML file. Zero API keys, zero model tokens. Disclosure \u2014 reads every kanban board database and, for running tasks, the assignee profile's state.db (the kanban worker session's latest assistant messages and tool-call arguments), read-only, and shows them in Desktop through its own local dashboard routes.", "maintainer": "Senci", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Senci/hermes-kanban-graph", "version": "0.2.1", "image": "https://raw.githubusercontent.com/Senci/hermes-kanban-graph/6dee73134f30bc7d8fc10078dcf1b5a7bed30342/docs/assets/banner.png", "screenshots": ["https://raw.githubusercontent.com/Senci/hermes-kanban-graph/6dee73134f30bc7d8fc10078dcf1b5a7bed30342/docs/assets/overview.png", "https://raw.githubusercontent.com/Senci/hermes-kanban-graph/6dee73134f30bc7d8fc10078dcf1b5a7bed30342/docs/assets/lineage.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kanban-live-gantt", "repo": "https://github.com/ningfangbin/hermes-kanban-live-gantt", "sha": "7081f6376226b6f1c65be3e4e27ae8fb5950e062", "description": "Live, now-centered Gantt timeline for the Hermes kanban boards \u2014 a slidable, persisted 72 h window (default now -24h -> now +48h; drag to move, drag the ends to resize), free wheel zoom down to hour ticks, a now line, status filtering, an optional done lane, and lifecycle rendering (dashed waiting vs solid run spans at real durations). Fork of kanban-gantt (GPL-3.0). Disclosure \u2014 the backend can transition, reassign, comment on and permanently delete kanban tasks on any board (Desktop asks for confirmation before deletes); local SQLite only, no network.", "maintainer": "ningfangbin", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/ningfangbin/hermes-kanban-live-gantt#readme", "version": "0.1.3", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kanban-stream", "repo": "https://github.com/mbgulden/hermes-kanban-stream", "sha": "d6c3e802eefb6ec1e09ad002a1bf7d45b13104a8", "subdir": "", "title": "Kanban Stream", "description": "Live-stream Hermes kanban worker activity to a Telegram ops channel: one edit-in-place message per task with rolling tool-call history, elapsed timer, tokens/sec, thinking indicator, and a pinned final state (done/blocked). Mid-task steering via task comments \u2014 /steer from Telegram through the bundled companion daemon, or straight from the board. Ships disabled by default; needs a dedicated ops bot (KANBAN_STREAM_BOT_TOKEN + KANBAN_STREAM_ALLOWED_USERS). Outbound calls go only to api.telegram.org; reads the kanban DB read-only; no telemetry, no self-update. Disclosure \u2014 sends kanban task titles, summaries and tool names with command/path snippets to the Telegram chat you configure via your own bot; the optional steer daemon posts allowlisted Telegram users' /steer text as task comments that reach the running worker.", "maintainer": "mbgulden", "tier": "community", "category": "automation", "requires_hermes": ">=0.20.5", "version": "1.0.2", "docs_url": "https://github.com/mbgulden/hermes-kanban-stream/blob/d6c3e802eefb6ec1e09ad002a1bf7d45b13104a8/README.md", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_llm_call", "post_api_request", "kanban_task_completed", "kanban_task_blocked"], "provides_middleware": [], "requires_env": ["KANBAN_STREAM_BOT_TOKEN", "KANBAN_STREAM_ALLOWED_USERS"]}}, {"name": "kanban-task-threads", "repo": "https://github.com/diegomarino/kanban-task-threads", "sha": "467284665eb18360e9c32cd8fe4ff76690a66231", "description": "Give every Hermes kanban task a live Discord forum thread with a rewritten status card and append-only event log. Disclosure \u2014 sends task and lifecycle data to the configured Discord webhook (no host allowlist). Cards and event replies use built-in or operator-configured templates and may include identifiers, titles, status, assignment, branch and workspace metadata, relationships and blocking details, comments, event actors, reviewers, reasons, summaries, and configured dashboard links; the comment excerpt length is configurable. Fixed prerequisite announcements additionally send the prerequisite task ID, title, assignee, and up to 140 characters of its body and are not template-configurable. The absolute workspace path is off by default and requires explicit opt-in. Reads the kanban database read-only and stores thread mapping state under <kanban_home>/kanban/plugins/kanban-task-threads/. With an optional existing publisher-profile Discord bot token, reads forum and thread metadata; creates or repairs managed status tags and emojis; replaces applied tags on plugin-managed threads; renames threads; and archives or unarchives them. Discord fetches webhook avatars from the configured HTTPS asset origin. Disclosure \u2014 the avatar asset origin defaults to the author-hosted https://diegomarino.github.io/kanban-task-threads (disable with avatars_enabled: false). With the bot token the periodic metadata audit also lists the guild's active threads (filtered to the forum) and may rewrite the forum's available-tag list to add the 11 managed status tags (requires Manage Channels).", "maintainer": "diegomarino", "tier": "community", "category": "automation", "requires_hermes": ">=0.20", "docs_url": "https://github.com/diegomarino/kanban-task-threads#readme", "version": "0.4.1", "image": "https://raw.githubusercontent.com/diegomarino/kanban-task-threads/467284665eb18360e9c32cd8fe4ff76690a66231/docs/assets/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/diegomarino/kanban-task-threads/467284665eb18360e9c32cd8fe4ff76690a66231/docs/assets/catalog-screenshot-full.png", "https://raw.githubusercontent.com/diegomarino/kanban-task-threads/467284665eb18360e9c32cd8fe4ff76690a66231/docs/assets/catalog-banner-detail.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["kanban_task_claimed", "kanban_task_completed", "kanban_task_blocked", "on_kanban_task_updated", "on_kanban_worker_spawned", "on_kanban_worker_exited", "on_kanban_worker_stale_claim", "on_kanban_dispatch_tick"], "provides_middleware": [], "requires_env": ["KANBAN_TASK_THREADS_WEBHOOK_URL"]}}, {"name": "keenable-plugin", "title": "Keenable", "repo": "https://github.com/keenableai/keenable-hermes-plugin", "sha": "ffa97c924415f7b6e3517d900694272efac8af41", "description": "Web search and page fetching through Keenable's hosted MCP server, with search and research skills: single-site and publish-date filters, result and snippet limits, and page fetches that return only what a prompt asks for. Works without an API key; an optional KEENABLE_API_KEY lifts the keyless rate limits. Adds direct MCP tools beside Hermes's built-in Keenable web backend and leaves web_search / web_extract provider selection unchanged. Disclosure: connects to Keenable's hosted MCP server at `api.keenable.ai` and sends it the search queries, URLs and fetch prompts the agent issues, labelled with the header `X-Keenable-Title: hermes-plugin`; sends `X-API-Key` only when the user adds the optional config.yaml entry with their key.", "maintainer": "keenableai", "tier": "community", "category": "web", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/keenableai/keenable-hermes-plugin#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/keenableai/keenable-hermes-plugin/ffa97c924415f7b6e3517d900694272efac8af41/assets/keenable-catalog-card.svg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kfchow-llm-value-router", "repo": "https://github.com/kfchow-ai/kfchow-llm-value-router", "sha": "39a6944280c2156f816df8641d3d01d743aec564", "description": "Per-turn LLM routing: on each matching turn a TypeSafe Jev classifier call (api.typesafe.ai) receives turn-shape features plus the first 1200 chars of the last user message (shadow mode included) and labels it free/paid; high-confidence routine turns are downgraded to the provider's configured free rung, strategic mid-rung turns on Nous are escalated to the configured premium rung after a 2-token billed credit probe (Nous only, fail-closed). Fail-open, shadow-by-default, per-provider rungs from the user's lane2_config.json (leaderboard resolver script optional). Probe model id is fixed in code (z-ai/glm-5.3-flash). Disclosure \u2014 once you list models in ~/.hermes/jev/lane2_config.json, the first call of each matching turn sends message/tool counts and the first 1,200 characters of the last user message (send_excerpt, on by default) to TypeSafe Jev at api.typesafe.ai with your JEVI_API_KEY, in shadow mode as well as live; in live mode Jev's answer switches the request (and every later call of that turn, via an llm_execution wrapper) to the free, flash or premium model you configured on the same provider; with escalation set up on Nous it sends a 2-token billed ping to the Nous inference API with NOUS_API_KEY at most every 5 minutes; every turn appends a decision row (with that excerpt on routed turns) to ~/.hermes/jev/lane2-live.jsonl, which is never rotated.", "maintainer": "KFChow", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "version": "1.0.6", "platforms": ["linux", "macos"], "docs_url": "https://github.com/kfchow-ai/kfchow-llm-value-router", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": ["llm_request", "llm_execution"], "requires_env": []}}, {"name": "kimchi-acp-provider", "repo": "https://github.com/getkimchi/kimchi-hermes", "subdir": "model-providers/kimchi-acp", "sha": "d6ffe62876a44605585eaf5c2e3d5214b9e10cb8", "description": "The Kimchi coding harness (kimchi.dev) as a Hermes model provider over ACP stdio \u2014 spawns kimchi --mode acp keeping the harness's permission prompts on (YOLO opt-in via KIMCHI_ACP_ARGS=\"--mode acp --yolo\"), the harness owns its own auth, and completed tool calls surface as inline bullets in the reply. Disclosure \u2014 every turn spawns the local Kimchi CLI (`kimchi --mode acp`, overridable with KIMCHI_ACP_COMMAND / KIMCHI_ACP_ARGS) in Hermes's working directory and hands it the conversation. The harness calls kimchi.dev with its own stored login and runs its own shell, file and web tools. Its permission prompts stay on, and Hermes cancels them, so gated tools don't run, unless you opt in with KIMCHI_ACP_ARGS=\"--mode acp --yolo\", which runs them with no approval prompt (not for shared gateway or cron use). To show setup status, it parses ~/.config/kimchi/config.json (or KIMCHI_CONFIG_PATH) only to check that a key is present; the key is never stored or sent by Hermes.", "maintainer": "getkimchi", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/getkimchi/kimchi-hermes#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kimchi-provider", "repo": "https://github.com/getkimchi/kimchi-hermes", "subdir": "model-providers/kimchi", "sha": "0fcca81491ce97449d615754c60f89eff7696a93", "description": "Kimchi (kimchi.dev) models via the OpenAI-compatible API \u2014 live catalog from the metadata endpoint, API-key auth, gateway unknown-model 400s classified as model_not_found, and an identifying User-Agent (hermes-agent/<version>) on every gateway request.", "maintainer": "getkimchi", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/getkimchi/kimchi-hermes#readme", "version": "1.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["KIMCHI_API_KEY"]}}, {"name": "kimi-code-delegate", "repo": "https://github.com/s-a-s-k-i-a/hermes-kimi-code", "sha": "72c741cc166ec1db2aec4cd5316f7b7281a74b40", "description": "Delegate-only, fail-closed Kimi Code ACP integration for Hermes Agent", "maintainer": "s-a-s-k-i-a", "tier": "community", "category": "tools", "docs_url": "https://github.com/s-a-s-k-i-a/hermes-kimi-code#readme", "capabilities": {"provides_tools": ["kimi_code_delegate"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kiro-acp", "repo": "https://github.com/tobenwarrior/hermes-kiro-provider", "sha": "02c4dd06585436751145961658a22b773f23a0ef", "description": "Kiro CLI (AWS) as a Hermes model provider, driven over ACP stdio.", "maintainer": "tobenwarrior", "tier": "community", "category": "models", "docs_url": "https://github.com/tobenwarrior/hermes-kiro-provider#readme", "version": "0.1.2", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kiro-provider", "repo": "https://github.com/anpicasso/hermes-kiro-provider", "sha": "013017d27acd58051c4ad654bb21036d93bdd3ce", "subdir": "provider", "description": "Native Kiro model provider over HTTPS with AWS Builder ID / IAM Identity Center device login. Disclosure \u2014 dynamically registers an AWS OIDC public client named `hermes-kiro` during login and stores OAuth grants in Hermes' profile-scoped auth.json credential pool.", "maintainer": "anpicasso", "tier": "community", "category": "models", "docs_url": "https://github.com/anpicasso/hermes-kiro-provider#readme", "version": "1.0.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kiwi", "repo": "https://github.com/harrylabsj/hermes-plugin-kiwi", "sha": "5d23517308bf9e5d75b62dcda63a19dd03ab0491", "description": "Source suppliers and negotiate purchases through the Kiwi Buyer MCP server \u2014 an open-source A2A commerce runtime (pinned @harrylabsj/kiwi@0.12.5 over npx stdio), with the kiwi-buyer sourcing workflow skill bundled. Sourcing is dual-source: Kiwi Network results come from kiwi_search, and internet e-commerce listings are reported through the host's own web tools when the session has them (a host capability, not a plugin guarantee). Portable Agent Plugins v1 package (mcp.json + skills/); needs Node.js/npm on PATH. No credentials required; Kiwi never handles payments.", "maintainer": "harrylabsj", "tier": "community", "category": "tools", "docs_url": "https://github.com/harrylabsj/hermes-plugin-kiwi", "version": "1.2.2", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "klipper-print-watch", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-klipper-print-watch", "sha": "20aa6f0083d0a81bea36f47490ea9be7ac4a72ff", "description": "Built on the Moonraker HTTP API. Cron reports klippy_shutdown, complete, error, paused (after printing), cancelled, stalled. Disclosure \u2014 Talks to the one Moonraker URL you set. Over plain http on a LAN, MOONRAKER_API_KEY is sent unencrypted. Pause, resume and cancel ask for Hermes approval every time and are refused under cron, yolo, approvals off and unattended sessions. The plugin has no user list of its own: anyone you allow on your Hermes gateway can request a move and approve it. Answering \"always\" adds an unused line to config.yaml. The optional watch is a cron job (a model turn every 5 minutes by default) that stays after uninstall until you run unschedule. vision_check, off by default, sends webcam stills to your model. The plugin host cannot watch. Not tested on real hardware.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-klipper-print-watch#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["klipper_status", "klipper_control", "klipper_watch"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MOONRAKER_URL"]}}, {"name": "kokoro-tts", "title": "Kokoro TTS (local, Apple Silicon)", "repo": "https://github.com/brunosouzas/hermes-kokoro-tts", "sha": "9b682a84ff5b59c1b4d0b340b07b2c188b409e0b", "description": "Local Kokoro-82M text-to-speech on Apple Silicon: adds the kokoro-mlx speech provider (tts.provider: kokoro-mlx) with sentence-by-sentence PCM streaming for voice mode, read-aloud and text_to_speech, 54 voices in nine languages, an optional voice per language that switches per sentence between Portuguese and English, and an optional dictionary of English words a non-English voice pronounces in English without changing voice; plus hermes kokoro install, status, restart, voices, say, words and uninstall. Disclosure \u2014 hermes kokoro install creates a separate Python 3.11 environment with uv (about 1.1 GB from PyPI, plus spaCy's en_core_web_sm wheel from its GitHub release, pinned by SHA-256), downloads mlx-community/Kokoro-82M-bf16 at a pinned revision from Hugging Face (about 340 MB), and installs a launchd agent (dev.hermes.kokoro-tts) that keeps a local server running in the background. The server listens only on 127.0.0.1 (it refuses other addresses), runs offline, and does not log the text; the text to speak goes only to that local server, bypassing any proxy settings. Writes the environment, model cache and log under ~/Library/Application Support/hermes-kokoro-tts, the requested audio files, and the profile's config.yaml only when you run hermes kokoro words add or remove. No API keys, no telemetry.", "maintainer": "brunosouzas", "tier": "community", "category": "voice", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/brunosouzas/hermes-kokoro-tts#readme", "version": "0.3.0", "readme": true, "platforms": ["macos"], "known_issues": ["macOS on Apple Silicon only (MLX).", "Under plugins.isolation: host the hermes kokoro terminal command is not available (Hermes skips plugin CLI commands in the host); the speech provider still registers.", "Only Brazilian Portuguese and English are tested; Japanese and Mandarin may need extra G2P packages this release does not install. Per-sentence language detection covers Portuguese and English."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kuma", "repo": "https://github.com/nitishagar/hermes-kuma", "sha": "e4a6c9db8d4e49c4827cc07632e46b8ec92f56df", "description": "Uptime-Kuma monitoring for agents: the community MCP server for Uptime Kuma v2 (pinned @0.11.18 over npx stdio) with workflow skills for incident review, status digests, and confirmation-gated maintenance. Credentials stay in host-native MCP config (portable Agent Plugins v1 package, mcp.json + skills/; needs Node.js >= 22 on PATH and a Uptime Kuma v2 instance). Disclosure \u2014 first run has npx fetch @davidfuchs/mcp-uptime-kuma@0.11.18 (single-maintainer community package) from npm; that server exposes 31 read/WRITE tools against your Uptime Kuma instance, including permanent delete tools the bundled skills never call.", "maintainer": "nitishagar", "tier": "community", "category": "tools", "docs_url": "https://github.com/nitishagar/hermes-kuma", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "kumiho-memory", "repo": "https://github.com/KumihoIO/kumiho-plugins", "sha": "d4811200fa22225ae245d2778b938a793d6d5af6", "subdir": "hermes", "title": "Kumiho Memory", "description": "Recall and save decisions, preferences and facts in your Kumiho Cloud workspace. Portable Agent Plugins v1 package with hosted OAuth MCP and six skills. Disclosure \u2014 connects to Kumiho's hosted MCP at https://mcp.kumiho.cloud/mcp (OAuth at control.kumiho.cloud, tokens held by Hermes); memory queries, including an automatic topic lookup near the start of relevant conversations, and approved captures are sent there; the server is marked `trust: untrusted`, so Hermes asks before every tool not annotated read-only. The optional backfill helper reads only files the user names and writes review packets to a new folder; Dream State can create a recurring Hermes cron task when asked (read-only by default). No local server, telemetry or background process.", "maintainer": "KumihoIO", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/KumihoIO/kumiho-plugins/tree/d4811200fa22225ae245d2778b938a793d6d5af6/hermes", "version": "0.1.0", "image": "https://raw.githubusercontent.com/KumihoIO/kumiho-plugins/d4811200fa22225ae245d2778b938a793d6d5af6/hermes/assets/kumiho-memory-banner.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "lancedb-suite", "repo": "https://github.com/3L0935/hermes-lancedb-memory-suite", "sha": "9a83a57335f4b1074d075b255ca289fda5290099", "subdir": "plugin", "description": "Local-first LanceDB vector memory with a strict write contract, calibrated abstention, typed relations, conflict tracking and a retrieval-quality gate. Requires local Ollama + nomic-embed-text.", "maintainer": "3L0935", "tier": "community", "category": "memory", "version": "1.5.3", "docs_url": "https://github.com/3L0935/hermes-lancedb-memory-suite#readme", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["lancedb_search", "lancedb_add", "lancedb_update", "lancedb_delete", "lancedb_get", "lancedb_list", "lancedb_graph", "lancedb_conflicts"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "lancedb", "repo": "https://github.com/lancedb/hermes-agent-memory", "sha": "6691591e62e10438ee32ff671afad337208fdd43", "description": "LanceDB hybrid memory \u2014 embedded vector + FTS recall, workspace facts, transparent forget.", "maintainer": "lancedb", "tier": "community", "category": "memory", "docs_url": "https://github.com/lancedb/hermes-agent-memory#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "langfuse", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "e1f16143f164c4db10ea8fc0fc47ff8ac611e9fc", "subdir": "langfuse", "description": "Langfuse observability for Hermes: one trace per turn, one generation per LLM call (usage and cost from Hermes' own pricing, cache and reasoning tokens included), one observation per tool call and subagent. Content capture is sanitized by default (metadata-only and full are opt-in); sends traces only to the Langfuse project whose keys you set. Formerly built into Hermes core as observability/langfuse; existing users are migrated automatically.", "maintainer": "NousResearch", "tier": "official", "category": "general", "requires_hermes": ">=0.21.7", "version": "2.0.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e1f16143f164c4db10ea8fc0fc47ff8ac611e9fc/assets/langfuse.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/langfuse", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_api_request", "post_api_request", "api_request_error", "pre_llm_call", "post_llm_call", "pre_tool_call", "post_tool_call", "on_session_finalize", "on_session_end", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": ["HERMES_LANGFUSE_PUBLIC_KEY", "HERMES_LANGFUSE_SECRET_KEY"]}}, {"name": "laso-finance", "repo": "https://github.com/LasoFinance/hermes-plugin", "sha": "8a046544307af690f04277bcb04929e5d1d58970", "image": "https://raw.githubusercontent.com/LasoFinance/hermes-plugin/8a046544307af690f04277bcb04929e5d1d58970/assets/banner.png", "description": "Spend USDC in the real world from Hermes: prepaid cards, gift cards, push-to-card, Venmo/PayPal and bank payouts, through the Laso Finance API. Native plugin, standard library only. Sign-in is the OAuth device flow (link and code handed to the human, approved on any device), so there is no key to paste and it works over SSH and the messaging gateway. Every tool that moves money or mints a credential goes through the Hermes approval gate first. Disclosure \u2014 the tools move real funds from the user's Laso account and agent wallet; 19 money-moving or credential-minting tools ask for Hermes approval first, but approvals.mode off / yolo, or approvals.cron_mode/unattended_mode approve, let them run without a prompt; laso_buy_with_saved_card is not prompted in Hermes (Laso requires a passkey approval on the holder's device before an order); all traffic goes to laso.finance only; the approved key is saved as LASO_API_KEY in the profile's .env and removed when Laso rejects it.", "maintainer": "LasoFinance", "tier": "community", "category": "tools", "docs_url": "https://github.com/LasoFinance/hermes-plugin#readme", "version": "1.1.1", "platforms": [], "capabilities": {"provides_tools": ["laso_get_version", "laso_refresh_token", "laso_order_card", "laso_get_card_data", "laso_list_card_transactions", "laso_get_card_deposit_address", "laso_get_saved_cards", "laso_create_saved_card_link", "laso_buy_with_saved_card", "laso_get_purchase_turn", "laso_get_purchase_conversation", "laso_create_reloadable_card", "laso_get_account_balance", "laso_get_kyc_status", "laso_get_kyc_link", "laso_register_webhook", "laso_get_webhook", "laso_delete_webhook", "laso_withdraw", "laso_get_withdrawal_status", "laso_refresh_card_data", "laso_order_intl_card", "laso_cancel_intl_order", "laso_search_merchants", "laso_start_signup", "laso_get_signup_status", "laso_get_auth_link", "laso_send_feedback", "laso_list_address_book", "laso_save_address_book_entry", "laso_delete_address_book_entry", "laso_push_to_card", "laso_send_payment", "laso_fund_card_balance", "laso_withdraw_card_balance", "laso_list_payment_recipients", "laso_update_payment_recipient", "laso_delete_payment_recipient", "laso_get_payment_status", "laso_send_bank_payment", "laso_search_gift_cards", "laso_order_gift_card", "laso_create_banking_profile", "laso_get_banking_profile_status", "laso_get_banking_application", "laso_update_banking_application_details", "laso_upload_banking_document", "laso_submit_banking_application", "laso_create_banking_account", "laso_list_banking_accounts", "laso_create_banking_recipient", "laso_add_banking_destination", "laso_list_banking_recipients", "laso_update_banking_destination", "laso_delete_banking_recipient", "laso_get_banking_transaction", "laso_list_banking_transactions", "laso_exchange_api_key", "laso_get_agent_spend_limit", "laso_create_agent_api_key", "laso_announce_connection", "laso_get_agent_wallet", "laso_create_agent_wallet", "laso_agent_wallet_transfer", "laso_pay_x402_endpoint", "laso_search_docs"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "ld-workbench", "title": "Debate Workbench", "repo": "https://github.com/Dgardenhire/hermes-ld-workbench", "sha": "e502204bcf5e975878d1a35bfdc2f939724cf2ca", "description": "Practice Lincoln-Douglas debate. A case workbench helps a student build their own case section by section (resolution analysis, value and criterion, contentions, evidence, blocks) with a coach that gives real help and asks hard questions but never writes the case. A topic briefing maps a new resolution for both sides. A full NSDA practice round (AC, cross-examination, NC, 1AR, NR, 2AR, with prep time) runs against an AI opponent at three levels, followed by a ballot from a lay, traditional or flow judge. A fallacies guide, drill and spotter work on the student's own case and on other people's arguments. Cases are kept in a library with Word, text and backup-file export. Every model call goes to the user's own Hermes model through the plugin LLM helper. Debate Workbench is an independent community plugin. It is not made or endorsed by Nous Research or the National Speech & Debate Association. Disclosure \u2014 one network call of its own: when the user adds a topic source link, it fetches that one public web page (http or https, public addresses only, checked on every redirect, 20-second timeout, first 30,000 characters of text kept); no credentials, telemetry, shell commands, background processes or self-updates; registers no tools, hooks or middleware, only a Desktop page and a dashboard API; stores cases, rounds, ballots and briefings in $HERMES_HOME/plugin-data/ld-workbench/; reads a .docx or .txt case file or a backup file only when the user picks one; writes an export only to a path the user picks in the save dialog, inside their home folder; the optional dictation button uses the speech recognition built into the desktop app's browser engine when that engine provides it, which may send the audio to that engine's speech service; no private Hermes imports.", "maintainer": "Dgardenhire", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.0", "docs_url": "https://linchpin.studio/hermes/ld-workbench/manual/", "version": "0.1.0", "image": "https://raw.githubusercontent.com/Dgardenhire/hermes-ld-workbench/e502204bcf5e975878d1a35bfdc2f939724cf2ca/docs/card.png", "screenshots": ["https://raw.githubusercontent.com/Dgardenhire/hermes-ld-workbench/e502204bcf5e975878d1a35bfdc2f939724cf2ca/docs/shots/after/bench-dark.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-ld-workbench/e502204bcf5e975878d1a35bfdc2f939724cf2ca/docs/shots/after/bench-briefing-dark.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-ld-workbench/e502204bcf5e975878d1a35bfdc2f939724cf2ca/docs/shots/after/room-speech-dark.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-ld-workbench/e502204bcf5e975878d1a35bfdc2f939724cf2ca/docs/shots/after/room-opponent-spot-dark.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-ld-workbench/e502204bcf5e975878d1a35bfdc2f939724cf2ca/docs/shots/after/room-ballot-light.png", "https://raw.githubusercontent.com/Dgardenhire/hermes-ld-workbench/e502204bcf5e975878d1a35bfdc2f939724cf2ca/docs/shots/after/fallacies-dark.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "letsfg", "title": "LetsFG", "repo": "https://github.com/LetsFG/LetsFG", "sha": "7c0e7b5122725baacd446585306770fce4fc7d52", "subdir": "integrations/hermes", "description": "Search and book real flights and hotels through the hosted LetsFG MCP server (Streamable HTTP, OAuth 2.1 + DCR), with the letsfg travel-booking workflow skill bundled: fares across airlines and the major travel sites, flexible dates, destinations in a region, bookable hotel rates, then book, follow and stop bookings. Portable Agent Plugins v1 package (skills/ only; the server is added by the sign-in command below). Disclosure \u2014 hosted-only connector with no local code: every tool call goes to the vendor's remote MCP server at letsfg.co/mcp. Booking tools act on real money: a booking holds the price on the card saved on the user's LetsFG account (captured only once the airline or hotel confirms, released if it fails); per LetsFG, a booking, paid extra or hotel cancellation starts only when the user presses Approve in an e-mail from LetsFG, never from the conversation, and Hermes itself does not prompt before these tools unless you set `trust: untrusted` on the letsfg MCP server. Card details are only ever entered on letsfg.co, never in the conversation. Traveller details given for a booking (name, date of birth, gender, passport, contact, address) are sent to LetsFG and saved on that account. The server and its OAuth sign-in are added with `hermes mcp add letsfg --url https://letsfg.co/mcp --auth oauth --connect-timeout 300`.", "maintainer": "LetsFG", "tier": "community", "category": "tools", "version": "1.1.2", "docs_url": "https://github.com/LetsFG/LetsFG/tree/main/integrations/hermes", "image": "https://raw.githubusercontent.com/LetsFG/LetsFG/7c0e7b5122725baacd446585306770fce4fc7d52/integrations/hermes/assets/banner.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "known_issues": ["Sign-in needs one extra command after install, because a portable plugin cannot declare an OAuth MCP server: hermes mcp add letsfg --url https://letsfg.co/mcp --auth oauth --connect-timeout 300"]}, {"name": "lib-docs", "repo": "https://github.com/aydnOktay/hermes-lib-docs", "sha": "6674b0e7aa469deb5a89b9640cd3a07f3b481abc", "description": "Look up current library docs from public npm and PyPI (no API keys). Resolve a package, fetch README and metadata, keep recent lookups on Desktop. Disclosure \u2014 HTTPS to registry.npmjs.org, pypi.org and cdn.jsdelivr.net (npm READMEs) only; package name and version leave the machine; recent lookups are stored under $HERMES_HOME/plugin-data/lib-docs; the Desktop pane inserts text through Hermes Desktop's internal hermes:composer-insert event (not a public SDK API).", "maintainer": "aydnOktay", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-lib-docs", "version": "0.1.1", "platforms": [], "capabilities": {"provides_tools": ["lib_docs_resolve", "lib_docs_get", "lib_docs_recent"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "lightkeeper", "repo": "https://github.com/Light5566/claude-lightkeeper", "sha": "5126b570feb4a4365e9b3308bcb1029e4822f972", "description": "An Obsidian-compatible map of how your codebase works (modules, flows, integrations, platform traps, decisions), kept outside the repo and kept honest by hooks: a primer on the first turn, pointers to the notes that own what you are asking about or editing, and a reminder through the verify gate when code moved but the map did not. Eight lightkeeper:* skills carry the procedures (init, seed, tidy, trace, release, knowledge-vault, vault-sync, vault-tidy); the vault CLI (find, check, sync, status, log, export) works from any shell. Not a memory provider. Disclosure \u2014 each hook runs python3 on the plugin's own scripts as a synchronous subprocess with a 10 s timeout (on every user message, after every write_file and patch, at the verify step and at session end), and those scripts run read-only git commands (rev-parse, remote get-url, worktree list, ls-tree, status, log) in the session's checkout and in the vault folder; the session primer and prompt hints put text from the vault's notes into the model's context; the hooks read the vault registry ~/.claude/vaults and the vault folders it lists, and write only inside the vault (_meta/index.json), a small per-session state file in the system temporary directory ($TMPDIR), and the plugin's own data directory; the init, seed, sync, tidy, trace and release procedures run the vault CLI through the terminal and commit to the vault's own git repository, and vault init appends the vault to ~/.claude/vaults and, only when you pass its opt-in flags, copies a vault launcher to ~/.local/bin (--install-cli), installs report-only post-merge and pre-push hooks in your code checkouts (--git-hook), or adds a post-commit hook that pushes every vault commit to the remote you name (--backup-remote); vault export writes an HTML map that loads d3 7.9.0 from cdnjs.cloudflare.com when opened; no other network calls, no telemetry, no credentials, no dependencies beyond Python 3.9 and git. Silent until a vault covers the session's working directory.", "maintainer": "Light5566", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/Light5566/claude-lightkeeper#hermes-agent", "version": "2.4.4", "title": "Lightkeeper", "image": "https://raw.githubusercontent.com/Light5566/claude-lightkeeper/3d107f02e570c20d11196683a1608d2fc70f1749/docs/assets/social.png", "screenshots": ["https://raw.githubusercontent.com/Light5566/claude-lightkeeper/3d107f02e570c20d11196683a1608d2fc70f1749/docs/assets/map.png", "https://raw.githubusercontent.com/Light5566/claude-lightkeeper/3d107f02e570c20d11196683a1608d2fc70f1749/docs/assets/gallery/lightkeeper.png", "https://raw.githubusercontent.com/Light5566/claude-lightkeeper/3d107f02e570c20d11196683a1608d2fc70f1749/docs/assets/gallery/bookstack.png"], "platforms": ["linux", "macos"], "known_issues": ["Verified with a real model on Hermes stable 0.22.2 in hermes chat -q mode: patch and write_file, the edit pointer, the verify-gate reminder, the note update and the session-end notice. Not yet verified: the messaging gateways, interactive multi-turn sessions, turns after a context compaction, concurrent sessions on one gateway, and host-unified main builds.", "Does nothing until a vault covers the session's working directory: create one with python3 ~/.hermes/plugins/lightkeeper/bin/vault init <vault folder> --name <name> --repo <checkout> (README, Hermes Agent section). Needs the local terminal backend."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "transform_tool_result", "pre_verify", "on_session_finalize"], "provides_middleware": [], "requires_env": []}}, {"name": "lightningai-rate-limit", "repo": "https://github.com/dinosauria123/hermes-lightningai-rate-limit", "sha": "dc7911a946f0b209a81cf680c168382177bb13bf", "description": "Per-process throttle for Lightning AI (https://lightning.ai/api/v1) keeping LLM requests within the ~15 requests/min limit, using an in-memory token bucket. Gates only calls whose provider or base_url points at Lightning AI; no-op otherwise. Disclosure \u2014 registers one llm_execution middleware and nothing else; no network calls, files, or processes of its own.", "maintainer": "dinosauria123", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "version": "1.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": ["llm_execution"], "requires_env": []}}, {"name": "lightningai", "repo": "https://github.com/dinosauria123/hermes-lightningai-provider", "sha": "e4350ca278f8994322fc3b79a55a52e83388b7da", "description": "Lightning AI as a Hermes model provider (--provider lightning, lightning-ai, lightningai): OpenAI-compatible gateway at https://lightning.ai/api/v1, models fetched live from /models. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); chat requests and the model list go to lightning.ai through Hermes' own client with LIGHTNING_API_KEY (or LIGHTNING_AI_API_KEY), optional LIGHTNING_BASE_URL overrides the endpoint; the plugin itself opens no connections, reads/writes no files and starts no processes.", "maintainer": "dinosauria123", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["LIGHTNING_API_KEY"]}}, {"name": "limbic", "repo": "https://github.com/dyiapanis/limbic", "sha": "e7a3cd30424ea853746c863bb1691beca4cd9b39", "description": "Local long-term memory for Hermes agents. Everything stays on your machine: an SQLite store plus bundled embedding and NLI models, no telemetry, no LLMs.\nLimbic is designed on the physiological brain, opaque and organic. Memories strengthen or atrophy with use, corrections replace what they superseded \u2014 all deterministic background mechanisms, zero LLM calls.\nAlgorithmic forgetting keeps atrophied memories out of the database. Recall is calibrated: when nothing in memory is confident enough, it abstains instead of guessing, so the agent answers honestly rather than surfacing near-misses. First start downloads ~1 GB of pinned models once, then runs fully offline. PolyForm Noncommercial 1.0.0 (commercial use requires a separate license). Disclosure \u2014 the agent-facing tools are remember, recall and forget (forget lists candidate facts for a query, then deletes the one fact id the user picks, scoped to the current user, and appends a hash-only receipt of the content's sha256, length, user id and fact id to limbic.db.deletions.jsonl beside the database); on first primary session start downloads ~1.0GB of ONNX models (Arctic Embed 2.0 L int8 embedding, ~570MB; MiniLMv2 NLI, ~430MB, on first contradiction check) from huggingface.co at pinned commits with hash checks into ~/.cache/limbic/ (outside HERMES_HOME; %USERPROFILE%\\.cache\\limbic on Windows); at every model load, every file in those cache folders that is not in the pinned manifest is deleted \u2014 including unrelated files if you point embedding/nli cache_dir at a shared folder; spaCy NER models are optional: `hermes limbic languages --set <lang>` and `hermes limbic setup` run `python -m spacy download <model>`, which pip-installs each model package (~14.5MB, version picked by spaCy, not hash-pinned) from spaCy's GitHub releases into Hermes's own Python environment, and `hermes limbic setup` also pre-downloads both ONNX models; memory stays local in limbic.db under HERMES_HOME, facts whose trust decays to zero are deleted automatically, and hermes backup adds VACUUM snapshots under HERMES_HOME/backups; no telemetry.", "maintainer": "dyiapanis", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/dyiapanis/limbic#readme", "version": "0.9.1", "image": "https://raw.githubusercontent.com/dyiapanis/limbic/e7a3cd30424ea853746c863bb1691beca4cd9b39/assets/banner.png", "readme": true, "platforms": ["linux", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "linkedcamp", "title": "LinkedCamp", "repo": "https://github.com/LinkedCamp/hermes-plugin", "sha": "76b6045ac43d1f6c394d84341a8e8c278fd72e84", "version": "1.0.0", "description": "Plan, build and run LinkedIn and email outreach in LinkedCamp through LinkedCamp's hosted MCP server (Streamable HTTP at https://mcp.linkedcamp.com/mcp, OAuth sign-in with the account's API key, no keys in config): campaigns, audience search URLs, multi-step sequences, leads, unified inbox and AI-drafted replies, sending-account health, analytics, reply agents, and agency sub-accounts. Bundles the linkedcamp-outreach workflow skill. Agent Plugins v1 package (plugin.json + mcp.json + skills/), configuration only. Disclosure \u2014 every tool call goes to LinkedCamp's hosted server (mcp.linkedcamp.com) and acts on the user's LinkedCamp account; the tool set is served by that server at runtime and is not covered by the pinned sha. Sign-in runs the pinned mcp-remote@0.1.49 through npx (Node.js 20.18.1+ and npm required), which opens a browser and a local callback port on first use and stores OAuth tokens under ~/.mcp-auth. Some tools reach real people (campaign_launch starts outreach, message_send delivers at once); the package marks the server untrusted, so Hermes asks before every tool the server does not mark read-only and blocks them in unattended runs.", "maintainer": "LinkedCamp", "tier": "community", "category": "tools", "docs_url": "https://github.com/LinkedCamp/hermes-plugin#readme", "requires_hermes": ">=0.21.6", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "linkup", "repo": "https://github.com/LinkupPlatform/linkup-hermes-plugin", "sha": "d83d1162f2941e51bb4cbf34841b4c6b3305081c", "description": "Linkup web search: live cited search (fast/standard/deep), URL-to-Markdown fetch with JS rendering, async deep research, and a Linkup backend for the built-in web_search / web_extract tools. Disclosure \u2014 sends search queries, fetch URLs and research briefs to api.linkup.so with your LINKUP_API_KEY (Linkup fetches pages server-side); when selected with hermes linkup use-as-web-backend it also handles the built-in web_search and web_extract calls; large fetched pages are cached under $HERMES_HOME/cache/linkup for 24 hours.", "maintainer": "LinkupPlatform", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/LinkupPlatform/linkup-hermes-plugin#readme", "version": "1.0.1", "image": "https://raw.githubusercontent.com/LinkupPlatform/linkup-hermes-plugin/d83d1162f2941e51bb4cbf34841b4c6b3305081c/docs/banner.png", "platforms": [], "capabilities": {"provides_tools": ["linkup_search", "linkup_fetch", "linkup_research", "linkup_research_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["LINKUP_API_KEY"]}}, {"name": "liquid-inference-provider", "repo": "https://github.com/architect-xyz/hermes-liquid-inference", "sha": "acd120f007367c1f422d3cd6ffe643f916f0b5f7", "description": "Liquid Inference, an auction exchange for LLM inference, as a Hermes model provider (provider id `liquid`): the exchange sends each request to the eligible offer with the lowest estimated charge, and each request carries a cap on its charge (1 USD by default; set `model.default_headers.x-liquid-cap-usd` to change it). Submitted by Architect, the operator of Liquid Inference. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads). Chat requests (full prompts and tool results), auxiliary tasks (model `liquid.auto`) and the model list go through Hermes's own client to https://router.inference.ai.exchange/v1 (or LIQUID_BASE_URL) with LIQUID_API_KEY. The exchange forwards each request to whichever third-party provider wins its auction. Each request is billed up to its `x-liquid-cap-usd` cap (1 USD by default, set with `model.default_headers.x-liquid-cap-usd`) and carries `X-Title: Hermes Agent`. A top-level `reasoning_effort` is sent only when you select a level.", "maintainer": "architect-xyz", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/architect-xyz/hermes-liquid-inference", "version": "0.2.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["LIQUID_API_KEY"]}}, {"name": "little-canary", "repo": "https://github.com/hermes-labs-ai/little-canary", "sha": "61855a940a66fb8319742756c3ff72c720a89160", "subdir": "integrations/hermes-agent", "version": "0.4.0", "description": "Screens user turns and blocks downstream tools on a BLOCK verdict; the original prompt still reaches the model.", "maintainer": "roli-lpci (Hermes Labs; independent of Nous Research)", "tier": "community", "category": "general", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/hermes-labs-ai/little-canary/blob/61855a940a66fb8319742756c3ff72c720a89160/integrations/hermes-agent/README.md", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "pre_tool_call", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "live-time", "repo": "https://github.com/chenfeijiang95-ui/hermes-live-time", "sha": "f5e4edcefb19f68f11c0e3faf5f6983577500c75", "description": "Inject live current time into every LLM call via the pre_llm_call hook \u2014 fixes stale session-start timestamps in long/cross-day conversations.", "maintainer": "chenfeijiang95-ui", "tier": "community", "category": "general", "docs_url": "https://github.com/chenfeijiang95-ui/hermes-live-time#readme", "version": "1.0.1", "image": "https://raw.githubusercontent.com/chenfeijiang95-ui/hermes-live-time/f5e4edcefb19f68f11c0e3faf5f6983577500c75/assets/banner.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "llm-antidote", "repo": "https://github.com/GroveMinting/llmAntidote", "sha": "c7f6a5428abbdba2b48f8b5fd3494b7ae2e3c5e8", "description": "Runtime guardrails, behavioral evaluation, and signed fleet admission for Hermes Agent: a versioned capability policy that blocks or requires approval for model tool calls, paired synthetic behavioral evaluation with no real side effects, and a signed local promotion gate that refuses a model whose evidence does not satisfy signed fleet policy. Hooks-only (no agent tools). Disclosure \u2014 Adds approval prompts to tool calls by default (balanced mode): every MCP, connector or other-plugin tool, memory and skill writes, file reads outside the working and temp directories, and network-capable terminal/code commands go to Hermes's approval prompt; strict mode blocks them instead, and opt-in enforced fleet mode blocks all tool calls until the served model name matches the admitted one. The user-run `hermes antidote eval run` command sends synthetic prompts (and the API key you name) to the OpenAI-compatible endpoint you pass, as billed model calls (default suite up to ~170 requests); `model inspect hf:` queries huggingface.co; `fleet keygen` writes unencrypted Ed25519 private keys (mode 0600) to paths you choose.", "maintainer": "GroveMinting", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "version": "3.2.4", "docs_url": "https://github.com/GroveMinting/llmAntidote#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_api_request", "on_session_start", "on_session_reset", "on_session_finalize"], "provides_middleware": [], "requires_env": []}}, {"name": "llmslim", "title": "LLMSlim", "repo": "https://github.com/Thanatos9404/llmslim", "sha": "3dfd4978add7da277b65b8201998bce019c93d83", "subdir": "plugins/hermes", "description": "Context engine that compresses older tool output and turns locally with LLMSlim instead of asking a model for a summary: no LLM call, deterministic output, and the start of the prompt is sent unchanged, so prompt caching keeps working. Select it with context.engine: llmslim. Disclosure: installs llmslim==0.11.1 from PyPI (with numpy, scikit-learn and jsonschema); registers no tools, hooks or middleware; makes no network calls, runs no shell commands, needs no credentials, writes no files and sends no telemetry; reads its settings from config.yaml through Hermes's config loader. Token counts use a character estimate unless tiktoken is already installed in Hermes's environment, in which case tiktoken may download its encoding file once.", "maintainer": "Thanatos9404", "tier": "community", "category": "general", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/Thanatos9404/llmslim/blob/main/docs/integrations/HERMES.md", "version": "0.11.1", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "loaded-skills-indicator", "repo": "https://github.com/yugasurfer/loaded-skills-indicator", "sha": "1c501473b192a45cbb36d08d1bc8c51f940ea416", "description": "Status-bar chip, popover and dockable pane showing which skills are read into the active Hermes Desktop conversation's context: full bodies bold with an accent dot, compression-pruned ones ghosted, never-loaded ones not listed. A second pane view lists the whole skill library grouped by category with descriptions and a loaded marker, and clicking a skill drops /<skill> into the composer for you to send (it never submits). A small local backend reads the profile's state.db read-only to tell a live skill body from a [SKILL_PRUNED] marker, and reads SKILL.md frontmatter for the descriptions. No network calls, no credentials, no telemetry, no writes. Disclosure \u2014 the local backend opens state.db read-only for the requested session in this profile, the default root and, as a fallback, every other profile's state.db, and returns only skill names and load state; it reads SKILL.md frontmatter under the Hermes skill directories and makes no network calls or writes.", "maintainer": "yugasurfer", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.5", "docs_url": "https://github.com/yugasurfer/loaded-skills-indicator#readme", "version": "1.0.0", "title": "Loaded Skills Indicator", "image": "https://raw.githubusercontent.com/yugasurfer/loaded-skills-indicator/1c501473b192a45cbb36d08d1bc8c51f940ea416/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/yugasurfer/loaded-skills-indicator/1c501473b192a45cbb36d08d1bc8c51f940ea416/media/pane-loaded.png", "https://raw.githubusercontent.com/yugasurfer/loaded-skills-indicator/1c501473b192a45cbb36d08d1bc8c51f940ea416/media/pane-available.png", "https://raw.githubusercontent.com/yugasurfer/loaded-skills-indicator/1c501473b192a45cbb36d08d1bc8c51f940ea416/media/popover.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "local-system-one-hermes", "title": "Local System One", "repo": "https://github.com/NMTZ-z/system-one-benchmark-lab", "sha": "1095495019b2dff2b4231ed70ec23a3ea716e2f6", "subdir": "integrations/hermes/local-system-one-hermes", "description": "Local System One / Laya Typed Decisions control plane for Hermes Agent. Sends bounded turn data to a configurable sidecar for reversible OFF/Shadow/Canary routing decisions, with explicit Canary acknowledgement and fail-open behavior. Disclosure \u2014 executes nothing and does not start the sidecar. In Shadow/Canary mode, Search and Model Tier may POST the current task plus bounded recent conversation context; Notification Shadow may POST the completed turn's final assistant response (up to 6000 chars) plus lifecycle metadata. The default sidecar URL is loopback 127.0.0.1:8787 but is user-configurable to any host and no auth header is added. Notification is observation-only: the plugin never sends a push/message/webhook and persists decision metadata, not raw response text. Its only request mutations, in acknowledged Canary mode on the first provider call of a turn, are removing web_search/web_extract tools for audited deterministic no-Web rules and (off by default) lowering reasoning_effort for gemini-3.8-flash-tiered on audited hard-fast rules. The sidecar (same repo, separate pip install, Apple-Silicon MLX/CoreML) is a text classifier that downloads a pinned Hugging Face model.", "maintainer": "NMTZ-z", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.4", "version": "0.6.0", "docs_url": "https://github.com/NMTZ-z/system-one-benchmark-lab/tree/1095495019b2dff2b4231ed70ec23a3ea716e2f6/integrations/hermes/local-system-one-hermes", "readme": true, "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_llm_call", "on_session_end"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "local_knowledge", "repo": "https://github.com/stepanov1975/hermes-local-knowledge", "sha": "c13a1a357eb110fe62d6d4f8a715187079766541", "description": "Native Hermes tools for a configurable local capability index: search/get/neighbors plus local usage feedback/reporting.", "maintainer": "stepanov1975", "tier": "community", "category": "tools", "docs_url": "https://github.com/stepanov1975/hermes-local-knowledge#readme", "capabilities": {"provides_tools": ["knowledge_feedback", "knowledge_get", "knowledge_neighbors", "knowledge_search", "knowledge_usage_report"], "provides_hooks": ["on_session_end", "on_session_finalize", "post_tool_call", "pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "long-conversations", "version": "0.1.0", "repo": "https://github.com/cspears32/hermes-long-conversations", "sha": "1a8dc52b7ae610f6db2d2ab0a7e7133b3a199807", "description": "Persistent long-term conversations across session boundaries via structured handoff briefs and token monitoring. Disclosure \u2014 stores handoff briefs (topic, work in progress, decisions, open questions, next step; in aggressive mode auto-built from the first 200 characters of recent user messages) as plain JSON under HERMES_HOME/long-conversations/ and injects the pending brief into the first turn of the next session for the same chat or user (CLI briefs stay in one local scope and are not shown to messaging users); the model can change the plugin's settings with long_conv_config_set; an opt-in HERMES_LONG_CONV_BETA_LOG writes a local event log; no network calls.", "maintainer": "cspears32", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/cspears32/hermes-long-conversations#readme", "platforms": [], "capabilities": {"provides_tools": ["long_conv_handoff", "long_conv_load", "long_conv_list", "long_conv_config_get", "long_conv_config_set"], "provides_hooks": ["pre_llm_call", "post_api_request", "on_session_start", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "looot", "repo": "https://github.com/loootai/hermes-looot", "sha": "b4d9a4a212139938c7e8c1b10d5e73f8b0b70c59", "description": "looot gives Hermes one sign-in and one prepaid balance for 2,500+ data API endpoints from 90+ providers: work emails and phones, company and people search, Google results, web pages as markdown, news, local businesses. Portable Agent Plugins v1 package with the hosted MCP server (remote streamable-http, OAuth 2.1 with dynamic client registration) and 21 skills. Disclosure \u2014 the run tool spends your prepaid looot balance (Hermes asks before each paid call and refuses them in unattended runs); the names, domains and emails you look up are sent to looot.ai and its upstream data providers; a `looot` server you define in config.yaml replaces the package's and drops that prompt unless you add `trust: untrusted`.", "maintainer": "looot", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/loootai/hermes-looot#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "loreconvo", "repo": "https://github.com/labyrinth-analytics/loreconvo", "sha": "4ea667e92a92a2c3ecce28dd7d80e44c72e56d17", "subdir": "integrations/hermes", "description": "LoreConvo memory provider: cross-surface persistent session memory with search, recall and structured memory items. Disclosure \u2014 stores end-of-session transcripts (truncated, including tool output) and Hermes memory writes in ~/.loreconvo/sessions.db, a store shared across all Hermes profiles and other LoreConvo clients, and injects context from those sessions into each turn; a Pro license enables a one-time Hugging Face embedding-model download; installs the loreconvo package (BUSL-1.1) with lancedb, fastembed and onnxruntime into the Hermes environment.", "tier": "community", "category": "memory", "maintainer": "labyrinth-analytics", "capabilities": {"provides_tools": ["loreconvo_search_sessions", "loreconvo_get_context", "loreconvo_save_memory"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["LORECONVO_HERMES_PROJECT"]}, "requires_hermes": ">=0.21.0", "version": "0.10.19", "docs_url": "https://github.com/labyrinth-analytics/loreconvo?tab=readme-ov-file#loreconvo"}, {"name": "lowrouter", "repo": "https://github.com/carboniferio/hermes-lowrouter-provider", "sha": "5531e83c0c13224c5501ccab09f11724b193d7fd", "subdir": "lowrouter", "description": "LowRouter as a Hermes model provider (`--provider lowrouter`, or LowRouter in `hermes model`). The picker shows the 180 `auto/` chat models with tool calling and 64K+ context, plus the user's own `alias/` models, instead of all 719 IDs from /v1/models. Context windows come from LowRouter's catalog instead of Hermes' 256K fallback, and /usage shows the credit balance in euros. LowRouter bills in EUR, so the plugin reports no USD cost and Hermes shows it as unknown. Maintained by LowRouter. Disclosure \u2014 registers one model provider and nothing else (no tools, hooks, commands or threads). Prompts, tool schemas and LOWROUTER_API_KEY go to https://api.lowrouter.ai/v1 (or the configured model.base_url) through Hermes' client, and LowRouter forwards each request to the host serving the model. The plugin's own requests are GET /v1/models (cached for an hour) and GET /v1/credits on /usage, to the same base URL with the same key, through Hermes' open_credentialed_url. No files read or written, no processes.", "maintainer": "carboniferio", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/carboniferio/hermes-lowrouter-provider#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["LOWROUTER_API_KEY"]}}, {"name": "lumberroom", "repo": "https://github.com/lumberroom/lumberroom-hermes", "sha": "87c697f31e0015c64900c2cc40f88beb3ead4a11", "version": "1.0.2", "description": "lumberroom memory provider. One durable store shared with every agent you use, recalled on every turn and written through the engine's own memory_write. Self-hosted open-source engine or lumberroom.cloud; OAuth or a static token. Maintained by the lumberroom team. Disclosure \u2014 when active, every non-trivial user message (first 1,000 characters) and the absolute git-root path of the working directory are sent on each turn to the configured lumberroom engine, which defaults to https://mcp.lumberroom.cloud (operated by Cybersapien Technologies, India) unless base_url names a self-hosted engine; the model is instructed to store decisions, preferences and facts there through memory_write, the engine's live tool descriptions and server instructions are injected into the system prompt each session, and setup switches off Hermes' built-in MEMORY.md/USER.md store.", "maintainer": "lumberroom", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/lumberroom/lumberroom-hermes#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "machine-library", "repo": "https://github.com/SpaceFrontiers/hermes-machine-library", "sha": "3d31000cd4995ffb452b246d268a5031acdd3744", "description": "Research search for web_search and web_extract \u2014 papers, books, patents, standards and Wikipedia, with citable source links (Machine Library API key).", "maintainer": "SpaceFrontiers", "tier": "community", "category": "web", "title": "Machine Library", "version": "0.1.0", "docs_url": "https://github.com/SpaceFrontiers/hermes-machine-library#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MACHINELIBRARY_API_KEY"]}, "requires_hermes": ">=0.20.0"}, {"name": "machine-spirit", "repo": "https://github.com/KuboKubis25/hermes-machine-spirit", "sha": "fcba6cbcdfd29ecf6fe4dcd652884aa9972ae0b2", "title": "Machine Spirit", "description": "A Warhammer 40k shrine pane docked under the sessions list: the cogitators recite original Adeptus Mechanicus-style litanies, and the cog-skull, candle and binary stream animate while Hermes works. Just for fun. Desktop-only (desktop/plugin.js inside the plugin SDK surface); no agent tools, hooks, middleware, env vars, network or file access.", "maintainer": "KuboKubis25", "tier": "community", "category": "desktop", "version": "1.0.0", "docs_url": "https://github.com/KuboKubis25/hermes-machine-spirit#readme", "screenshots": ["https://raw.githubusercontent.com/KuboKubis25/hermes-machine-spirit/fcba6cbcdfd29ecf6fe4dcd652884aa9972ae0b2/docs/machine-spirit.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.20.6"}, {"name": "made-shelf", "repo": "https://github.com/aydnOktay/hermes-made-shelf", "sha": "72f65557a9b9d4e0df3deb26d673fa17a37e8c64", "description": "Everything Hermes made - cross-session shelf of wrote/patched paths. Full Desktop page, chip, pin. No API keys.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/aydnOktay/hermes-made-shelf", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["made_shelf_list", "made_shelf_clear"], "provides_hooks": ["post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "magi", "repo": "https://github.com/MarcosAlves90/magi", "sha": "3f1a38c1804b12080a329a41fc2cc257f1af151a", "description": "Review pending Hermes memory writes and inspect, add, edit, delete, or AI-compact stored memory from Desktop.", "maintainer": "MarcosAlves90", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "1.7.8", "image": "https://raw.githubusercontent.com/MarcosAlves90/magi/3f1a38c1804b12080a329a41fc2cc257f1af151a/docs/magi-cover-banner.png", "screenshots": ["https://raw.githubusercontent.com/MarcosAlves90/magi/3f1a38c1804b12080a329a41fc2cc257f1af151a/docs/screenshots/pending-writes.png", "https://raw.githubusercontent.com/MarcosAlves90/magi/3f1a38c1804b12080a329a41fc2cc257f1af151a/docs/screenshots/stored-memory.png"], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "make-parts-now", "title": "Make Parts Now", "repo": "https://github.com/makepartsnow/makepartsnow-hermes", "sha": "5ccbbbc7b3ba276bba6ad62d8f38b977960d9420", "description": "Quote and order custom 3D printed and CNC machined parts from your CAD files through the hosted Make Parts Now MCP server (Streamable HTTP, no sign-in to quote), with the quote-parts workflow skill bundled: upload an STL, STEP, 3MF or OBJ file, get the price and ship date for each production speed (SLS nylon, FDM plastic, CNC aluminum and brass), change the quantity, material or speed, and get a checkout link. Portable Agent Plugins v1 package (mcp.json + skills/), configuration only. Disclosure \u2014 hosted-only connector with no local code; every tool call goes to makepartsnow.com. To quote a local file the agent uploads that one CAD file with curl through the terminal tool (Hermes approvals apply) to a one-time upload link, or gives the user an upload page. Nothing is charged in chat: checkout links open Stripe Checkout on makepartsnow.com where the user pays. US shipping only.", "maintainer": "Make Parts Now", "tier": "community", "category": "tools", "version": "1.0.1", "docs_url": "https://github.com/makepartsnow/makepartsnow-hermes", "image": "https://raw.githubusercontent.com/makepartsnow/makepartsnow-hermes/5ccbbbc7b3ba276bba6ad62d8f38b977960d9420/assets/banner.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "known_issues": ["Order status needs a signed-in Make Parts Now account, which the plugin's server doesn't have; it answers with a link to makepartsnow.com/orders. To ask Hermes about orders, add a signed-in server once: hermes mcp add makepartsnow-orders --url \"https://makepartsnow.com/mcp/assistant/signin?client=hermes\" --auth oauth --connect-timeout 300"], "requires_hermes": ">=0.20.0"}, {"name": "maqami-travel", "repo": "https://github.com/negm17111995/mcp-server", "sha": "6478de2d093fcf9bdd3c5dbff6d6ef267dcb56ae", "description": "Search hotels (3M+ hotels) and flights worldwide on MAQAMI, read hotel details and reviews, then send the customer a secure checkout link on book.maqami.co, through the official MAQAMI Travel MCP server (Streamable HTTP at mcp.maqami.co, no account or key), with the maqami-travel-booking skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/). Disclosure \u2014 connects to the hosted MAQAMI MCP server at mcp.maqami.co (no key); its tool list is defined by that server, not by the pinned repo. The tool arguments the agent sends go to it: destinations, dates, guests, lead-guest nationality and currency, plus booking ID and email for lookups, amendments and cancellations. Prebook (hotels) and verify (flights) hold a real rate, and the amend and cancel tools change or cancel real bookings (late or non-refundable cancellations are still charged); the skill tells the agent to show the details and get a clear yes before each prebook, amend or cancel. Customers pay only on book.maqami.co; no tool takes card or passport details.", "maintainer": "negm17111995", "tier": "community", "category": "tools", "title": "MAQAMI Travel", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/negm17111995/mcp-server#readme", "version": "1.0.7", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "markdown-new", "repo": "https://github.com/nosliwhtes/hermes-markdown-new", "sha": "dab049e0fd338ab8f7159c120fe55490410d0a6e", "subdir": "plugin/markdown-new", "description": "Search the public web, read pages as Markdown, crawl sites, and convert documents in Hermes. No API key required. Disclosure \u2014 search queries, submitted URLs and explicitly approved local file uploads go to the public markdown.new service; needs the companion markdown-new CLI (uv tool install from the same repo tag), which the plugin runs as a subprocess with the Hermes process environment.", "maintainer": "nosliwhtes", "tier": "community", "category": "web", "docs_url": "https://github.com/nosliwhtes/hermes-markdown-new/blob/dab049e0fd338ab8f7159c120fe55490410d0a6e/plugin/markdown-new/README.md", "version": "1.0.0", "readme": true, "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["markdown_new"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "markifact", "repo": "https://github.com/markifact/markifact-mcp", "sha": "9a873931b6138970888d2a9102a8037dbbd174a5", "subdir": "plugins/hermes/markifact", "description": "Run Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, GA4, Shopify, HubSpot and 50+ more platforms through Markifact's hosted MCP server. Portable Agent Plugins v1 package with ten skills (operating protocol, write-safety rules, campaign launch, creative rotation, negative sweeps, diagnosis); remote streamable-http with OAuth 2.1 and dynamic client registration, so no Node.js or API keys. Disclosure: creates and edits real ad campaigns that spend your ad budgets; every write is a separate approval-gated operation and the skills instruct confirm-before-spend, but that is enforced by the skills and the server's approval flag, not by Hermes.", "maintainer": "Markifact", "tier": "community", "category": "tools", "requires_hermes": ">=0.20", "docs_url": "https://github.com/markifact/markifact-mcp/tree/main/plugins/hermes/markifact#readme", "version": "1.0.5", "image": "https://raw.githubusercontent.com/markifact/markifact-mcp/9a873931b6138970888d2a9102a8037dbbd174a5/assets/icon.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "max-platform", "title": "Hermes MAX.ru Integration", "repo": "https://github.com/Realmagnum/hermes-max-integration", "sha": "50c7a9a7c16b6207a079b7b883718dd863e9e951", "version": "2.11.0", "requires_hermes": ">=0.21.4", "image": "https://raw.githubusercontent.com/Realmagnum/hermes-max-integration/50c7a9a7c16b6207a079b7b883718dd863e9e951/assets/banner.jpg", "docs_url": "https://github.com/Realmagnum/hermes-max-integration/blob/50c7a9a7c16b6207a079b7b883718dd863e9e951/README.md", "description": "MAX messenger gateway with polling/webhook, streaming, interactive questions, native attachments, Core voice transcription, optional PNG tables and a Desktop sessions sidebar. Disclosure \u2014 sends the bot token and message/file content to the MAX Bot API (platform-api2.max.ru) and MAX upload hosts (*.max.ru, *.oneme.ru, *.okcdn.ru). Inbound attachments are downloaded only for allowlisted senders, with SSRF protection, and cached under HERMES_HOME. The bundled Russian Trusted Root CA is trusted only by the MAX API/upload clients, not attachment downloads. Its platform hint lets the agent attach local host files to MAX replies via MEDIA paths, and a public output hook adds a filename caption to file-only MAX replies. Webhook mode opens a listener (default 0.0.0.0:8646) that requires a secret and public HTTPS. Polling startup deletes all of the bot's webhook subscriptions. Optional table rendering launches Playwright/Chromium; with MAX_AUTO_INSTALL_PLAYWRIGHT=true it pip-installs playwright==1.62.0 and downloads Chromium (~115 MB). The MAX allowlist does not honour Hermes pairing approvals. No telemetry or self-update.", "maintainer": "Realmagnum", "tier": "community", "category": "platform", "platforms": [], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": ["transform_llm_output"], "provides_middleware": [], "requires_env": ["MAX_BOT_TOKEN"]}}, {"name": "mcp-plugin-creator", "repo": "https://github.com/tonbistudio/hermes-mcp-plugin-creator", "sha": "0bcd7023ce9764a01551753a3b6800c4fe695047", "description": "Turn any MCP server into a portable Agent Plugin (mcp.json + workflow skill) built from evidence: the server's self-description, your past sessions with it, its docs and a read-only probe. Validates and installs the package in linked mode, and checks a built plugin for server drift and new errors in use. Disclosure: starts the target MCP server to introspect it; reads this profile's state.db read-only; logs redacted mcp__* call summaries locally (log_calls: false turns it off); inline server launches, writes outside its data dir and installs ask for approval.", "maintainer": "tonbistudio", "tier": "community", "category": "tools", "title": "MCP Plugin Creator", "requires_hermes": ">=0.22.0", "version": "0.2.1", "docs_url": "https://github.com/tonbistudio/hermes-mcp-plugin-creator#readme", "platforms": [], "capabilities": {"provides_tools": ["mcp_creator_servers", "mcp_creator_introspect", "mcp_creator_mine", "mcp_creator_convert", "mcp_creator_scaffold", "mcp_creator_validate", "mcp_creator_install", "mcp_creator_drift", "mcp_creator_review"], "provides_hooks": ["post_tool_call", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "mcp-serve", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "6389dd08c1e485db708688c69e42c2b7a7360f4e", "subdir": "mcp-serve", "description": "Run Hermes as an MCP server: `hermes mcp-serve` lets any MCP client (Claude Code, Claude Desktop, Cursor, Codex) list and read your messaging conversations, poll live events, send messages and answer approvals over stdio. `--tools` (off by default) also exposes Hermes' web, browser, vision, image generation, skills and TTS tools; terminal, file and kanban tools are never exposed. Formerly built into Hermes core as `hermes mcp serve` (MCP clients change their args to [\"mcp-serve\"]). Disclosure \u2014 the connecting MCP client reads the active profile's conversation history (state.db) and can send messages as your connected platform accounts; with `--tools` it also runs Hermes tools under your configured provider credentials, which can spend provider credits. The plugin itself makes no network or model calls beyond those tool calls and sends.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.22.0", "version": "1.0.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/6389dd08c1e485db708688c69e42c2b7a7360f4e/assets/mcp-serve.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/mcp-serve", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "meeting-overlay", "repo": "https://github.com/taxbax/meeting-overlay", "sha": "2c7859f1407f516c543d4409abab98d9b2e8928a", "description": "Disclosure \u2014 sends meeting transcripts to Nous inference with your Hermes login (fallback OpenRouter key from ~/.hermes/.env; optional OCTOPUS_DESK_URL); installs a launchd agent that records mic/system audio; writes and deletes under your Obsidian vault; macOS + source install only. Native desktop pane showing the live meeting transcript, answer, and daemon status.", "maintainer": "taxbax", "tier": "community", "category": "desktop", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "platforms": ["macos"]}, {"name": "mem-os", "repo": "https://github.com/Markgatcha/memos", "sha": "af8fa31e01078e4d5e38210b61acdf90f6d70581", "subdir": "plugin", "description": "Local-first persistent memory: store durable facts once and recall them in any session. Portable Agent Plugins v1 package (mcp.json + skills/): the @mem-os/sdk MCP server (pinned 1.6.26) over npx stdio, plus the mem-os-memory skill covering when to store and when to recall. All data stays in a local SQLite database under the user home directory; no cloud, no telemetry, no API keys. Server cwd is ${PLUGIN_DATA} so nothing is written into the install tree. Needs Node.js and npm on PATH.", "maintainer": "Markgatcha", "tier": "community", "category": "memory", "docs_url": "https://github.com/Markgatcha/memos#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mem0", "repo": "https://github.com/mem0ai/mem0", "sha": "43849c6e9d4d773b83a8144b6373aedc67241a5d", "subdir": "integrations/hermes-plugin-mem0", "version": "1.3.0", "description": "Mem0 memory provider \u2014 server-side LLM fact extraction with semantic search, automatic deduplication and opt-in reranking, in platform, self-hosted or local OSS mode. Maintained by Mem0; the same provider that shipped in-tree. Disclosure \u2014 conversation turns and recall queries go to the configured Mem0 backend (api.mem0.ai in platform mode); at this pin the mem0ai library's anonymous PostHog usage telemetry stays on unless MEM0_TELEMETRY=false is set; `hermes memory setup` can start Docker (pgvector) and Ollama containers for local mode.", "maintainer": "mem0ai", "tier": "community", "category": "memory", "docs_url": "https://github.com/mem0ai/mem0/tree/main/integrations/hermes-plugin-mem0#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "memanto", "repo": "https://github.com/moorcheh-ai/memanto", "subdir": "integrations/hermes-agents/hermes_memanto", "sha": "21554fe8ac40685a45f222022b08e58459760b7d", "version": "0.1.1", "description": "Memanto memory agent \u2014 typed long-term memory (remember/recall/answer) with auto-recall, turn capture, and RAG answers. Disclosure \u2014 each user turn (as a recall query), completed user+assistant turns, Hermes memory writes and memanto_answer questions are sent to Moorcheh cloud (api.moorcheh.ai) under a per-profile agent namespace by default; requires MOORCHEH_API_KEY; settings in $HERMES_HOME/memanto.json.", "maintainer": "moorcheh-ai", "tier": "community", "category": "memory", "docs_url": "https://github.com/moorcheh-ai/memanto/tree/main/integrations/hermes-agents#readme", "readme": true, "capabilities": {"provides_tools": ["memanto_remember", "memanto_recall", "memanto_answer"], "provides_hooks": ["on_memory_write"], "provides_middleware": [], "requires_env": ["MOORCHEH_API_KEY"]}}, {"name": "memex8", "repo": "https://github.com/Ex8-ca/memex8", "sha": "9f30627c7d7f35d44e0b6aa73e81417482d5bdb9", "subdir": "plugins/memex8", "version": "1.1.0", "description": "Self-hosted vector memory (Qdrant + TurboQuant compression) with auto-discovered knowledge realms, semantic search across conversations and ingested documents, and a slumber pipeline for memory consolidation. v1.1.0 adds optional per-session injection dedup with char-budget gate, decision/evaluation memory-type promotion (slower decay for load-bearing turns), prompt-injection sanitization on read, configurable system-prompt template, export/import memories as JSON, and a /memex8 slash command. New memory behaviours are opt-in; /memex8 export|import is confined to $HERMES_HOME/plugin-data/memex8 unless enable_export_import=true. Disclosure \u2014 auto-stores a truncated copy (first 300 chars) of every user and assistant turn, plus per-message previews of the whole transcript at session end and before context compression, to the memex8 server at MEMEX8_BASE_URL (self-hosted; default http://localhost:8080) using MEMEX8_API_KEY.", "maintainer": "Ex8-ca", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/Ex8-ca/memex8/blob/main/plugins/memex8/README.md", "image": "https://raw.githubusercontent.com/Ex8-ca/memex8/9f30627c7d7f35d44e0b6aa73e81417482d5bdb9/plugins/memex8/docs/banner.png", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end", "on_pre_compress"], "provides_middleware": [], "requires_env": ["MEMEX8_API_KEY"]}}, {"name": "memlock", "repo": "https://github.com/Sahil-SS9/hermes-memlock", "sha": "123b9fd252d6fc2c9c7c4f254164915874aa54d5", "description": "Reasserts pinned standing instructions after context compaction. Disclosure \u2014 scope=global pins apply to every session sharing the same HERMES_HOME; memlock_setup.py edits config.yaml and .claude/settings.json (with backups) only when you run it.", "maintainer": "Sahil-SS9", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/Sahil-SS9/hermes-memlock", "platforms": [], "capabilities": {"provides_tools": ["guard_pin"], "provides_hooks": ["pre_llm_call", "on_session_start", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "memobase", "repo": "https://github.com/fred0m/hermes-memobase-provider", "sha": "4e8e447966acefaea372395e2db96ca0d0127f18", "description": "Memobase memory provider \u2014 self-hosted user profile + event timeline recall, with hybrid BM25/vector/entity retrieval and automatic per-turn prefetch.", "maintainer": "fred0m", "tier": "community", "category": "memory", "docs_url": "https://github.com/fred0m/hermes-memobase-provider#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MEMOBASE_API_KEY", "MEMOBASE_BASE_URL"]}}, {"name": "memoria", "repo": "https://github.com/matrixorigin/memoria", "sha": "3a5c5065b2820d56dd3d8ac8bb259a9424b1476e", "subdir": "plugins/hermes", "description": "Memoria Cloud memory provider with scoped recall, explicit memory tools and opt-in background capture. Disclosure \u2014 sends recall queries and explicit memory operations to api.thememoria.ai by default (or a configured self-hosted origin). When enabled, auto capture uploads completed user/assistant text for fact extraction, excluding tool results and media. A local SQLite outbox stores pending text; credentials are resolved through the active Hermes profile's MEMORIA_API_KEY secret.", "maintainer": "matrixorigin", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.5", "version": "0.1.1", "docs_url": "https://github.com/matrixorigin/memoria/blob/3a5c5065b2820d56dd3d8ac8bb259a9424b1476e/plugins/hermes/README.md", "readme": true, "platforms": ["linux", "macos"], "known_issues": ["Development preview: local CLI acceptance passed; Desktop has not been validated and gateway platforms are disabled.", "Auto capture is off by default. One-shot CLI exit can interrupt an in-flight capture, leaving an uncertain event requiring manual inspection.", "Explicit-write exclusions apply to the current turn only. Auto capture can retain paraphrases, recalled facts from later turns, transient results or operation requests; global semantic deduplication is not guaranteed.", "Ambiguous write outcomes are not automatically retried; this plugin does not provide exactly-once capture."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MEMORIA_API_KEY"]}}, {"name": "memory-review", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "a10fb2b55ed38e6cdb0cf2faff1056443db57c5f", "subdir": "public/memory-review", "description": "Checkbox staged memory writes and approve or reject the selection from a dialog.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/memory-review", "version": "1.2.1", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/a10fb2b55ed38e6cdb0cf2faff1056443db57c5f/public/memory-review/docs/hero.png", "screenshots": ["https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/a10fb2b55ed38e6cdb0cf2faff1056443db57c5f/public/memory-review/docs/screenshot.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "memory-rewind", "repo": "https://github.com/AhmetArif0/hermes-memory-rewind", "sha": "354927184de03cdc4a9e9e48ddb2865c36368b1f", "subdir": "memory-rewind", "description": "Automatic version history for the built-in memory (MEMORY.md, USER.md), SOUL.md and skills/ (including curator-archived skills): browse, diff and restore any past version with `hermes memory-rewind`, or view it from any chat with the read-only `/memory-history`. Works alongside the built-in memory; not a memory provider. Disclosure \u2014 runs the local git binary (isolated from the user's git config, hooks and signing) to keep a bare repository in $HERMES_HOME/plugin-data/memory-rewind/; reads only the tracked files (never .env, auth.json, databases or skills/.hub/); rewrites tracked files only when the user runs `restore`; no network.", "maintainer": "AhmetArif0", "tier": "community", "category": "general", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/AhmetArif0/hermes-memory-rewind", "version": "1.3.2", "image": "https://raw.githubusercontent.com/AhmetArif0/hermes-memory-rewind/e5b139b1059a47df34002e76a7bfd84bc60d9f35/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start", "pre_llm_call", "post_tool_call", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "memory-shield", "title": "Memory Shield", "repo": "https://github.com/churnast/hermes-memory-shield", "sha": "347ab18408da52937f7e808a6e88a52b74184225", "description": "Keeps your agent from rewriting or wiping what it remembers about you: by default the agent may add facts to the owner profile (USER.md) wherever it may write and may correct one only when the owner asks in a direct chat, the CLI or a trusted chat, and nobody may delete one; the agent's notes (MEMORY.md) cannot be deleted; group chats are read-only except for the people and owner-only chats you trust, and once trusted_users is set a direct chat with anyone not listed is read-only too; Hermes' unattended background review may not touch the owner profile. Block, ask through Hermes' approval prompt or just log, and undo edits and deletions from snapshots. Disclosure \u2014 no network calls, credentials, shell commands or background processes. One pre_tool_call hook reads the turn's platform, chat type, chat id and name, sender id and name and the cron flag (gateway.session_context) and whether the run is Hermes' unattended review (tools.skill_provenance.is_unattended_review), checks memory tool calls, and checks write_file, patch, terminal and execute_code calls only for a write into, or a removal of, USER.md, MEMORY.md or the memory folder (reading a memory file or copying it elsewhere passes in calls up to 16 KB; a longer call that names them is refused); mode approve asks through Hermes' approval gate in the owner's direct chats and the CLI and blocks in shared chats, cron and direct chats with people not in trusted_users. Writes plugin-data/memory-shield/audit.jsonl (the last 500 refused or flagged writes: time, chat, sender and a 160-character excerpt) and snapshots/ (full copies of USER.md and MEMORY.md taken right before an allowed edit or deletion, 20 per file by default). Reads the memory files and holds the memory store's lock files while it reads or writes them (not on Windows); /memory-shield restore overwrites one memory file. /memory-shield log and restore answer only in direct chats, the CLI and trusted_chats, and once trusted_users is set only the people listed there (a session without a user id, such as the CLI, counts as the owner); /memory-shield, snapshots and whoami answer in any chat with settings, counts, times, sizes and the caller's own id, name and chat key.", "maintainer": "churnast", "tier": "community", "category": "general", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/churnast/hermes-memory-shield#readme", "version": "1.1.2", "image": "https://raw.githubusercontent.com/churnast/hermes-memory-shield/347ab18408da52937f7e808a6e88a52b74184225/docs/card.png", "screenshots": ["https://raw.githubusercontent.com/churnast/hermes-memory-shield/347ab18408da52937f7e808a6e88a52b74184225/docs/screenshots/01-group-stranger.png", "https://raw.githubusercontent.com/churnast/hermes-memory-shield/347ab18408da52937f7e808a6e88a52b74184225/docs/screenshots/02-forget-everything.png", "https://raw.githubusercontent.com/churnast/hermes-memory-shield/347ab18408da52937f7e808a6e88a52b74184225/docs/screenshots/04-undo.png"], "platforms": ["linux", "macos"], "known_issues": ["Needs plugins.isolation: in_process (the default). Under plugins.isolation: host the plugin cannot see the current chat, sender or Hermes' review marker, so it judges every call like a direct chat and the group chat and background review protection does not apply.", "Covers Hermes' built-in memory tool (USER.md, MEMORY.md) only, not the tools of memory provider plugins such as Honcho or Mem0.", "Without trusted_users every direct chat counts as the owner: whoever can message the agent directly may add facts to the owner profile and correct them (not delete them) until the owner's id is listed.", "Spotting USER.md and MEMORY.md edits made through terminal and execute_code is best effort: a path built some other way, or a command run from a script file, can get through.", "terminal and execute_code calls are read up to 16,384 characters. A longer call that contains the word memories, USER.md or MEMORY.md (any case, quotes ignored) is refused even when it only reads them; a longer call that contains none of them passes without being read."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "memory-zvec", "repo": "https://github.com/kuntao2011/kkk-hermes-memory-zvec", "sha": "ef1f460353185735f0139c3e315a44255f32e667", "version": "1.3.2", "description": "Community Zvec memory backend for Hermes Agent - in-process HNSW + RocksDB FTS store with native hybrid retrieval and session-safe lock governance; embeddings via any Ollama-compatible endpoint (local Ollama bge-m3 by default).", "maintainer": "kuntao2011", "tier": "community", "category": "memory", "docs_url": "https://github.com/kuntao2011/kkk-hermes-memory-zvec#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "memtomem", "repo": "https://github.com/memtomem/memtomem", "sha": "c93f45f02fdd13f8206dc673bcd5c520671c0a9a", "subdir": "packages/memtomem-hermes-plugin", "version": "0.1.5", "description": "Markdown-first long-term memory shared across your coding agents: a local memtomem MCP server plus six memory skills (index, recall, remember, search, setup, status). Notes live in ~/.memtomem and are searchable from Hermes, Claude Code, Codex CLI and Kimi Code. Runs at user scope. Disclosure \u2014 the server is launched with `uvx --python 3.12` and downloaded from PyPI (memtomem[onnx]==0.6.9) on first start, with Python 3.12 if uv cannot find one; it runs as a stdio MCP server for the session and reads the directories you ask it to index. With a fresh BM25-only configuration nothing else leaves the machine; an existing memtomem configuration may enable Hugging Face model downloads, a remote embedding or LLM provider, Cohere reranking or search webhooks. At startup the server also reads the nearest .env found upward from its installed location inside uv's cache (normally ~/.env), setting variables not already present, outside Hermes's MCP environment filtering.", "maintainer": "memtomem", "tier": "community", "category": "general", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/memtomem/memtomem/tree/c93f45f02fdd13f8206dc673bcd5c520671c0a9a/packages/memtomem-hermes-plugin", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mermail", "repo": "https://github.com/Nudgen-Marketing/mermail-skills", "sha": "269a711bf683845d75009df4984bf25eee83b0bd", "description": "Privacy-first agent email inboxes and workspace automation through hosted Mermail MCP. Portable Agent Plugins v1 package (mcp.json + skills/, seventeen skills bundled); authenticate with OAuth via `hermes mcp login mermail`. No credentials are stored in mcp.json. Disclosure \u2014 the bundled skills also expose Mermail's paybox wallet tools over the hosted MCP (x402 payments, xStocks trading, standing grants); the skills allow the agent to move funds without a same-turn confirmation when your message already states exact terms, so spending controls live on your Mermail account, not in Hermes.", "maintainer": "Nudgen-Marketing", "tier": "community", "category": "platform", "requires_hermes": ">=0.20", "docs_url": "https://docs.mermail.app/ai/skills", "version": "1.5.5", "image": "https://raw.githubusercontent.com/Nudgen-Marketing/mermail-skills/269a711bf683845d75009df4984bf25eee83b0bd/assets/logo.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "meshy", "title": "Meshy", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "e746f4c690d7b9855e8cf06485ed6ac906b66e12", "subdir": "meshy", "version": "0.5.0", "description": "Meshy AI's own MCP server (pinned @meshy-ai/meshy-mcp-server@0.6.5) for text, image and multi-image to 3D, texturing, remeshing, rigging, animation, concept images and 3D-print prep, with a bundled meshy-3d workflow skill. In Hermes Desktop: inline 3D cards with a download and convert menu, a gallery of recent generations and saved models (with a \"Made from\" history), image sets, and a credit chip in the status bar. Every credit-spending call goes through Hermes's approval prompt with its estimated cost, and a 200-credit limit per chat makes it ask again. Needs MESHY_API_KEY and Node.js 18+. Disclosure \u2014 first start downloads the pinned server from npm through npx; it sends prompts and the images or models you or the agent name to Meshy's API (api.meshy.ai) under your key, gets only MESHY_API_KEY from your profile, and sends no analytics (its User-Agent names Hermes and its version). Downloads go to the plugin's data folder or the folder the agent names (never over an existing file); the Desktop backend fetches only from Meshy's asset hosts. The skill's helper scripts (model stats, preview render, optional Blender hand-off) run locally through the terminal tool.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.22.3", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/meshy", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/e746f4c690d7b9855e8cf06485ed6ac906b66e12/assets/meshy.jpg", "platforms": ["windows", "macos", "linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MESHY_API_KEY"]}}, {"name": "metamask-wallet", "repo": "https://github.com/akugone/hermes-metamask-wallet", "sha": "b56d6bbf575391d172280016abf778d31c5ca8bd", "subdir": "", "description": "MetaMask Agent Wallet for Hermes \u2014 chat-only setup, reads, and approval-gated transfers/swaps/signatures, a gated Guard Mode policy editor, and a background 2FA watcher. Keys stay in MetaMask.", "maintainer": "akugone", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/akugone/hermes-metamask-wallet", "platforms": ["macos", "linux"], "capabilities": {"provides_tools": ["mm_status", "mm_setup", "mm_balance", "mm_market", "mm_history", "mm_swap_quote", "mm_transfer", "mm_swap_execute", "mm_sign", "mm_requests", "mm_policy"], "provides_hooks": ["pre_tool_call", "post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "metronix", "repo": "https://github.com/mtrnix/hermes-memory-metronix", "sha": "55634c149378f6241a9147a47e67133f6c8a02e6", "description": "Metronix memory provider for Hermes with prefetch recall and built-in memory write-through.", "maintainer": "mtrnix", "tier": "community", "category": "memory", "docs_url": "https://github.com/mtrnix/hermes-memory-metronix#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "microsoft365", "repo": "https://github.com/fabiomotta0311/hermes-microsoft365-plugin", "sha": "4fdc64c02c92e155df570c030f6d3c53d5361e23", "description": "Pre-release Microsoft 365 Graph tools for Outlook, SharePoint, OneDrive, Calendar, Teams, To Do, and Planner.", "maintainer": "Fabio Motta", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.3,<0.22", "subdir": "microsoft365", "docs_url": "https://github.com/fabiomotta0311/hermes-microsoft365-plugin#readme", "version": "0.1.0a4", "platforms": [], "capabilities": {"provides_tools": ["microsoft365_preflight", "microsoft365_outlook", "microsoft365_sharepoint", "microsoft365_onedrive", "microsoft365_calendar", "microsoft365_teams", "microsoft365_todo", "microsoft365_planner"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": ["MICROSOFT365_CLIENT_SECRET"]}}, {"name": "mindgraph", "repo": "https://github.com/shuruheel/mindgraph", "sha": "b96c2590435bb625210506a47df682967215b6d7", "description": "MindGraph \u2014 semantic graph memory with hybrid retrieval, goal/decision tracking, and cross-document synthesis.", "maintainer": "shuruheel", "tier": "community", "category": "memory", "docs_url": "https://github.com/shuruheel/mindgraph#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "minecraft-platform", "repo": "https://github.com/kyssta-exe/hermes-minecraft-gateway", "sha": "8ff37a626439caecb9ceb724b5da7718eb77a8b1", "description": "Minecraft gateway adapter for Hermes Agent. Spawns a Mineflayer bot that joins a Minecraft server, wanders around, and relays chat messages between players and the Hermes agent. Supports offline and Microsoft-authenticated accounts.", "maintainer": "kyssta-exe", "tier": "community", "category": "platform", "docs_url": "https://github.com/kyssta-exe/hermes-minecraft-gateway#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "minimax-image", "repo": "https://github.com/rriggs/hermes-plugin-minimax-image", "sha": "5a07a0f67d74a67ac426d7b901f8bfc60f28951c", "description": "MiniMax image generation -- Image-01 models via MiniMax platform. Supports text-to-image and image-to-image with subject reference.", "maintainer": "rriggs", "tier": "community", "category": "tools", "docs_url": "https://github.com/rriggs/hermes-plugin-minimax-image#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MINIMAX_API_KEY"]}}, {"name": "minimax-search", "repo": "https://github.com/pdonizete/hermes-minimax-search", "sha": "f2af5191e70269fdf6aee1954ab6888d652c1651", "description": "MiniMax web search via the Token Plan API \u2014 keyed, no CAPTCHA", "maintainer": "pdonizete", "tier": "community", "category": "web", "docs_url": "https://github.com/pdonizete/hermes-minimax-search#readme", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MINIMAX_API_KEY"]}}, {"name": "minimax-video", "repo": "https://github.com/rriggs/hermes-plugin-minimax-video", "sha": "759bec0f124c50e868facc8da5e6cf054403d761", "description": "MiniMax (Hailuo) video generation -- Hailuo 2.3/02 and S2V-01 models via MiniMax platform. Async task API. Supports text-to-video, image-to-video, and subject-reference-to-video.", "maintainer": "rriggs", "tier": "community", "category": "tools", "docs_url": "https://github.com/rriggs/hermes-plugin-minimax-video#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MINIMAX_PAYG_KEY"]}}, {"name": "mistral-vibe", "repo": "https://github.com/nebneo/hermes-mistral-vibe", "sha": "c0d7bc8d11306e18499c84dd94cc3581de550e55", "description": "Direct Mistral Vibe subscription access \u2014 browser PKCE login, dedicated credential pool, account-visible catalog discovery, relay-verified reasoning_effort for GLM models. Disclosure \u2014 unofficial, not affiliated with Mistral. \"hermes auth add mistral-vibe\" runs a browser PKCE sign-in against Mistral's Vibe console endpoints (console.mistral.ai/api/vibe/*) and stores the returned API key in the Hermes credential pool (auth.json, slice mistral-vibe), or uses MISTRAL_VIBE_API_KEY. Prompts and model listing go only to api.mistral.ai/v1. Vibe subscription coverage of API use is not guaranteed and may bill as pay-as-you-go. Logout clears the local pool but does not revoke the key remotely.", "maintainer": "nebneo", "tier": "community", "category": "models", "docs_url": "https://github.com/nebneo/hermes-mistral-vibe#readme", "version": "1.1.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MISTRAL_VIBE_API_KEY"]}}, {"name": "mixar", "repo": "https://github.com/Mixar-AI/hermes-mixar", "sha": "246e46f084f560cbdde10fe01bff8b6e598ff297", "version": "0.2.0", "title": "Mixar", "maintainer": "Mixar-AI", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.3", "docs_url": "https://github.com/Mixar-AI/hermes-mixar#readme", "platforms": ["macos", "windows", "linux"], "description": "Mixar's own desktop MCP server over stdio, with a Mixar workflow skill: build and edit 3D scenes, generate models, textures, rigs and animation with AI, render, and export game-ready assets for Unity, Unreal and Godot. Requires Mixar 4.2.1+ on macOS, Windows or Linux, signed in with Connect MCP turned on, on the same computer as Hermes. Disclosure \u2014 runs the launcher the installed Mixar app writes at ~/.mixar/connector/mixar-mcp (%USERPROFILE%\\.mixar\\connector\\mixar-mcp.cmd on Windows), which reads Mixar's own files under ~/.mixar/; tools execute arbitrary Python inside Mixar with your privileges; a tool call can start the installed Mixar app, which stays open after Hermes exits; calls go over loopback to Mixar, which forwards them to api.mixar.app under the signed-in account; generation prompts and reference images go to the AI provider running the chosen model; Mixar's backend keeps diagnostic records of MCP tool calls (inputs and results) and deletes them within 30 days; AI generation and create_layered_material spend Mixar credits, declared to Hermes as cost ranges with a 500-credit spend limit per chat; the plugin stores no credentials, ships no binaries, sends no telemetry and never updates itself; the optional MIXAR_MCP_LAUNCHER variable makes it run the program it names; at install Hermes looks for Mixar (macOS: Mixar.app in /Applications and ~/Applications; Windows: the installed-apps entry or %ProgramFiles%\\Mixar; Linux: a mixar command on PATH or Mixar's launcher) and refuses the install when it is missing or, on macOS and Windows, older than 4.2.1.", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mnemostack", "repo": "https://github.com/udjin-labs/hermes-mnemostack", "sha": "08bdc8c4bc78501eaa4297978082ff380bff4658", "subdir": "src/hermes_mnemostack/plugin", "description": "Persistent agent memory over a mnemostack service or a local Qdrant \u2014 hybrid recall (vector + lexical + graph), verbatim capture with self-echo suppression, and soft retraction. Multi-tenant when pointed at a shared authenticated service; the tenant is resolved server-side from the service key. Disclosure \u2014 the pinned directory is a discovery shim; the provider code installs from PyPI at the version pinned in plugin.yaml pip_dependencies (hermes-mnemostack==1.0.3) into the Hermes venv. Configured via MNEMOSTACK_* env vars; no key is required for a purely local Qdrant setup.", "maintainer": "udjin-labs", "tier": "community", "category": "memory", "requires_hermes": ">=0.19", "docs_url": "https://github.com/udjin-labs/hermes-mnemostack/blob/08bdc8c4bc78501eaa4297978082ff380bff4658/README.md", "version": "1.0.3", "capabilities": {"provides_tools": ["mnemostack_search", "mnemostack_remember", "mnemostack_forget"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mnemosyne-dashboard", "repo": "https://github.com/wysie/mnemosyne-dashboard", "sha": "a918e5e0841fdc85baad7ab582432b2b7499b2f2", "description": "Local-only web dashboard for browsing and visualising Mnemosyne memories, triples, stats, and consolidation history.", "maintainer": "wysie", "tier": "community", "category": "desktop", "docs_url": "https://github.com/wysie/mnemosyne-dashboard#readme", "capabilities": {"provides_tools": ["mnemosyne_dashboard_config", "mnemosyne_dashboard_start", "mnemosyne_dashboard_status", "mnemosyne_dashboard_stop"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mnemosyne", "repo": "https://github.com/mnemosyne-oss/mnemosyne", "sha": "d73848735a2a48471a62d2c8fb96cd7183c97491", "subdir": "integrations/hermes-catalog", "requires_hermes": ">=0.21.4", "version": "0.7.3", "description": "Local-first memory layer for Hermes Agent \u2014 SQLite with vector + FTS5 hybrid recall, episodic consolidation, temporal knowledge graph. Zero cloud. Disclosure \u2014 the mnemosyne_remember_media tool refuses local file paths unless MNEMOSYNE_MEDIA_ALLOWED_PATHS is set and sends media only to an operator-configured OpenAI-compatible endpoint when modality_enabled is on; video uses ffmpeg/ffprobe from PATH; the embedding model (BAAI/bge-small-en-v1.5) downloads from Hugging Face on first use.", "maintainer": "mnemosyne-oss", "tier": "community", "category": "memory", "docs_url": "https://github.com/mnemosyne-oss/mnemosyne", "capabilities": {"provides_tools": ["mnemosyne_apply_pending", "mnemosyne_batch", "mnemosyne_diagnose", "mnemosyne_export", "mnemosyne_forget", "mnemosyne_forget_canonical", "mnemosyne_get", "mnemosyne_graph_link", "mnemosyne_graph_query", "mnemosyne_import", "mnemosyne_invalidate", "mnemosyne_model_card", "mnemosyne_model_refresh", "mnemosyne_persona_demote", "mnemosyne_persona_list", "mnemosyne_persona_promote", "mnemosyne_persona_reinforce", "mnemosyne_recall", "mnemosyne_recall_canonical", "mnemosyne_recall_diagnostics", "mnemosyne_remember", "mnemosyne_remember_canonical", "mnemosyne_remember_media", "mnemosyne_scratchpad_clear", "mnemosyne_scratchpad_read", "mnemosyne_scratchpad_write", "mnemosyne_shared_forget", "mnemosyne_shared_recall", "mnemosyne_shared_remember", "mnemosyne_shared_stats", "mnemosyne_sleep", "mnemosyne_stats", "mnemosyne_sync_pull", "mnemosyne_sync_push", "mnemosyne_sync_status", "mnemosyne_task_progress", "mnemosyne_triple_add", "mnemosyne_triple_end", "mnemosyne_triple_query", "mnemosyne_update", "mnemosyne_validate"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mnemoverse", "repo": "https://github.com/mnemoverse/claude-plugin", "sha": "0e36727a2432410a642d4980d24a0ad33d05a8d2", "description": "Persistent memory for agents, shared across tools: save preferences, decisions and lessons and recall them later by natural-language search; rating a recalled memory as helpful or misleading re-ranks what comes back next; shared rooms (beta) let several people's agents work from one memory. Portable Agent Plugins v1 package (plugin.json + mcp.json + skills/) pointing at the hosted Mnemoverse MCP server (Streamable HTTP, OAuth 2.1 + DCR); the two bundled skills load under a namespaced name. Disclosure \u2014 hosted-only connector; Hermes runs no code from the package (scripts/ holds the repository's own CI checks). Every tool call goes to the vendor's remote MCP server at mcp.mnemoverse.com (authorization server auth.mnemoverse.com, browser sign-in on console.mnemoverse.com); memories the agent writes are stored in the signed-in user's Mnemoverse account, and recalled memories are pulled into the session context. OAuth tokens are held and refreshed by Hermes, never by the package. No telemetry, background process or self-update code.", "maintainer": "Mnemoverse", "tier": "community", "category": "tools", "version": "1.0.2", "docs_url": "https://mnemoverse.com/docs/api/install-by-host#hermes-agent", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mock-review", "title": "Mock Review", "repo": "https://github.com/arspesk/hermes-mock-review", "sha": "fb3d07bae45ab7a30f57fdc8cbc0e36df016e996", "version": "1.0.1", "description": "Review boards for UI mockups. The agent builds a board from a decisions.json file and your prototype pages; you open it on desktop or phone, mark each decision approve, change or skip, pin comments on the mocks and press Send, and your agent wakes up with the feedback as a markdown digest. Four mock_review tools, the `hermes mockreview` CLI and slash command, and a bundled usage skill. Boards are served from your computer (loopback by default, or your tailnet) or published on here.now. Disclosure \u2014 when autostart is on (off until `hermes mockreview setup`), a board web server (127.0.0.1:8790 by default) and one worker thread run inside the gateway process; setting host to 0.0.0.0 exposes every review to your network with no login. Outbound calls: a signed POST to the local Hermes webhook (localhost:8644) on Send, and, only for reviews hosted on here.now, https://here.now/api/v1 with your HERENOW_API_KEY. Secrets are read through Hermes's secret scope only. Runs `bash publish.sh` from the official here-now skill (key in the child environment), `tailscale status --json` and `tailscale serve status --json` (read only; on macOS the Tailscale app's own binary if the symlink crashes) for tailnet hosting, and from `setup` the hermes subcommands `--version`, `gateway status`, `config get/set/unset`, `webhook subscribe`, `webhook remove` (only for a stale self-delivering route, after you confirm) and `plugins validate`. Reviews are stored under $HERMES_HOME/workspace/mock-reviews. No telemetry, no update check, no Python dependencies.", "maintainer": "arspesk", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/arspesk/hermes-mock-review#readme", "image": "https://raw.githubusercontent.com/arspesk/hermes-mock-review/57b1f581d03cb266b89bb4b6239573504a6405a6/docs/img/catalog-banner.jpg", "screenshots": ["https://raw.githubusercontent.com/arspesk/hermes-mock-review/fb3d07bae45ab7a30f57fdc8cbc0e36df016e996/docs/img/review-board.png"], "platforms": [], "known_issues": ["here.now hosting needs the official here-now skill in the active profile (`hermes skills install official/productivity/here-now`) and a HERENOW_API_KEY; local and tailnet hosting need neither.", "Waking the agent on Send needs the gateway's webhook platform; `hermes mockreview setup` enables it and creates the route."], "capabilities": {"provides_tools": ["mock_review_create", "mock_review_add_round", "mock_review_feedback", "mock_review_list"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["HERENOW_API_KEY", "MOCKREVIEW_WEBHOOK_SECRET"]}}, {"name": "model-drift-watch", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-model-drift", "sha": "0102786ba4812e8581f3f6234a453eb26137fa52", "description": "Scheduled check that the model you use in Hermes has not quietly got worse: 34 fixed, exactly graded questions (reasoning, instruction following, Japanese, plus your own) run through Hermes cron, each run tested against the same model's own baseline with an exact per-question test and a same-day confirmation run, and a message only for a confirmed drop, a changed served model or a failed measurement. Not yet tried against a real LLM API (checked with a local mock model and real Hermes cron). Disclosure \u2014 each check calls your own model through ctx.llm on your bill, capped per check by the plugin (default 120,000 tokens / $0.50, no daily cap; the agent can start checks itself via the model_drift tool, and the scheduled agent turn is extra); price lookup goes through Hermes's pricing code (may fetch OpenRouter/models.dev prices); 10 optional code questions, off by default, run model-written Python in a limited child process (not a hostile-code sandbox) including in unattended cron runs when enabled; `schedule` creates one Hermes cron job that survives plugin removal (run `unschedule` first); writes run history to plugin-data/model-drift-watch; no telemetry.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "automation", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-model-drift#readme", "version": "0.1.0", "requires_hermes": ">=0.21.5", "platforms": [], "capabilities": {"provides_tools": ["model_drift"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "model-leaderboard", "repo": "https://github.com/e-is/hermes-model-leaderboard", "sha": "516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10", "description": "Model leaderboard for Hermes Desktop: a full /model-leaderboard page that ranks any OpenRouter model for a chosen Hermes profile \u2014 context window, prices, Artificial Analysis indices and curated SWE-bench Verified / LiveCodeBench \u2014 with per-profile criteria, six score views (cards, table, score bars, histograms, heatmap, quality-vs-cost Pareto frontier), an OpenRouter news feed (new models, price changes, promos) and a documented REST surface under /api/plugins/model-leaderboard/. Disclosure \u2014 outbound HTTPS to OpenRouter's public model API (catalogue and pricing) on a 60 s poll and a forced refresh every 10 minutes while the page is visible, and to Hugging Face's public model API (safetensors metadata, for parameter counts) on demand and cached; reads the installed Hermes profiles' own config.yaml files once, to seed the tracked list from the models those profiles declare; keeps its state in <hermes home>/plugin-data/model-leaderboard/ (seeded from the JSON shipped with the plugin), which LLM_DASH_DATA / LLM_DASH_CACHE_TTL can move or tune; the optional \"Auto-fill criteria\" action runs on the host LLM facade (ctx.llm.complete_structured), so it spends the user's configured model tokens; ships one read-only skill (model-leaderboard:refresh-benchmarks) whose only write is a POST to its own /benchmarks route; no API keys of its own, no writes outside its data directory.", "maintainer": "e-is", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/e-is/hermes-model-leaderboard#readme", "version": "1.2.0", "image": "https://raw.githubusercontent.com/e-is/hermes-model-leaderboard/516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10/assets/card-podium.png", "screenshots": ["https://raw.githubusercontent.com/e-is/hermes-model-leaderboard/516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10/assets/screenshot-en-01-models.png", "https://raw.githubusercontent.com/e-is/hermes-model-leaderboard/516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10/assets/screenshot-en-03-score-bars.png", "https://raw.githubusercontent.com/e-is/hermes-model-leaderboard/516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10/assets/screenshot-en-05-heatmap.png", "https://raw.githubusercontent.com/e-is/hermes-model-leaderboard/516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10/assets/screenshot-en-06-quality-cost.png", "https://raw.githubusercontent.com/e-is/hermes-model-leaderboard/516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10/assets/screenshot-en-08-criteria.png", "https://raw.githubusercontent.com/e-is/hermes-model-leaderboard/516e2f8d4dd0790f2c486d1fe0b444de5c2b3c10/assets/screenshot-en-11-profile-front-designer.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "model-picker", "repo": "https://github.com/aean0x/hermes-model-picker", "sha": "8ba20ad970f68d6adecc958da8992034e89f3481", "description": "Per-turn cost classifier across three model tiers (Quick / Standard / Expert): rates each user turn from configurable best_for lists and rewrites the outgoing request's model through the llm_request middleware, biased to keep the previous tier unless the turn changes shape, with escalate_model for tool failures. Disclosure \u2014 the plugin rewrites the model field of every outgoing request for a classified session, picking between three configured model ids that must all belong to the session's own provider (a foreign-provider tier is refused and the session model stands); it makes one bounded auxiliary classifier call through the host's plugin LLM route on each classified turn (up to about 12,000 characters of recent conversation plus the prompt), reading its model ids from config.json next to the plugin, MODEL_PICKER_CONFIG, or MODEL_PICKER_* env, and falls back to the host's primary model; routing decisions, with the first 120 characters of each classified prompt, are logged to $HERMES_HOME/logs/model-picker.log; a classifier-driven tier change can ask the context engine to compact the transcript before the switch, and escalate_model replaces the next request's context with a model-written handoff summary plus the recent tail; that engine registers only when the host config sets context.engine: model-picker.", "maintainer": "aean0x", "tier": "community", "category": "models", "docs_url": "https://github.com/aean0x/hermes-model-picker#readme", "version": "0.12.0", "capabilities": {"provides_tools": ["escalate_model"], "provides_hooks": ["pre_llm_call", "post_tool_call"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "model-router", "title": "Model Router", "repo": "https://github.com/metamindedu/hermes-model-router", "sha": "e207667489ac8a796d53f875126d6ee227201112", "description": "Explicit per-profile readiness and native missing-profile preparation; Python installation remains per profile, never automatic on refresh. Profile model settings, default-on Heavy/Light task routing, fallback controls, runtime limits and Fast inheritance. Reads Hermes profile configuration; explicit saves update selected profiles via the native CLI. Routed jobs launch background Hermes children using the user's configured providers/MCP and store private prompts/results locally. No separate credential store, telemetry, self-updater or approval bypass. Disclosure \u2014 after you trust and enable the plugin, routing defaults ON for every installed profile without a saved choice, including profiles that installed an earlier version and never saved one (the update turns it on); existing saved OFF and explicit skill opt-outs remain OFF. On enabled profiles, the model-callable `coding_route` tool starts detached background Hermes agents. They get file, terminal and code-execution tools in any existing folder the model names, run under that profile's credentials and approval policy (single-query mode: dangerous commands are refused unless `approvals.single_query_mode: approve`), and their per-job time limit can be set to none. Prompts and results are stored in `plugin-data/model-router/jobs/`. Saving settings writes model, delegation, auxiliary, fallback and `skills.disabled` keys into the config.yaml of the profiles listed in the preview (backups are taken first) and copies a skill into those profiles' `skills/` folders. The Desktop \"prepare profiles\" action, after you select profiles and confirm, installs and enables this same catalog pin in up to 32 other local profiles through Hermes's plugin manager, where routing then defaults ON. From install, native subagents inherit the parent session's Fast (priority/ultrafast) tier on first-party OpenAI/Codex routes, which can raise costs.", "maintainer": "metamindedu", "tier": "community", "category": "models", "version": "0.4.8", "docs_url": "https://github.com/metamindedu/hermes-model-router#readme", "readme": true, "platforms": ["windows"], "screenshots": ["https://raw.githubusercontent.com/metamindedu/hermes-model-router/e207667489ac8a796d53f875126d6ee227201112/docs/fast-inheritance.png"], "known_issues": ["v0.4.8 adds explicit local missing-profile preparation (maximum 32). Selection and known PyYAML dependency/activation consent are required, and the installed source record must match the currently resolved catalog pin. Existing, disabled, partial or custom code is manual-only; no global/future-profile auto-install or self-updater.", "Native writes require an exact fresh target descriptor on the same local source; missing, duplicate, remote or aliased routes fail manual-only. Catalog lookup and profile-name binding are not atomic: do not rename/delete/recreate profiles or edit packages while preparing. Readiness observes files and effective Python selection, not existing-session registration or provider success.", "Cancel/scope change stops unissued work, not an already-issued native install. Unknown outcomes are never automatically retried; both settled and unknown writes retain a settings-rebase fence until explicit owner-scoped full reload. Readiness-only refresh preserves dirty drafts; full reload discards them. Existing saved routing OFF remains OFF.", "v0.4.7 also requests native completion wakes for validated default-local turns without a UI-session ID; configured-model quota can be used by continuation. Stop, busy, ownership and explicit notification opt-out remain native. Consume the owned terminal process result before reading the routed verdict; pre-consumption raw replay is not an exactly-once guarantee.", "Cold PM binding selects only a verified already-imported generation; multi-argument sealed native launch layouts still fail closed. Windows noninteractive launches suppress console windows; skipped OS/permission tests do not establish other-platform coverage.", "Routing is default ON after package trust/activation only for installed profiles with no saved choice. Existing OFF/skill opt-outs remain OFF; install does not rewrite models/fallback consent/budgets or launch jobs. The advanced UI retains opt-out.", "Heavy/Light may use the same model in independent purpose-bound jobs. Same-model context separation does not provide different-model review diversity.", "Native YAML and served-runtime bootstrap compatibility are verified on Windows. Existing private core imports remain a host-version compatibility risk and are reported by plugin validation.", "Small bounded changes stay with Main. Ordinary implementation delegation requires two substantive independent workstreams with net parallel benefit; explicit delegation and required Heavy/independent review remain exceptions. This is guidance, not an API two-job minimum.", "Preferences now live under Settings > Plugins. The main-sidebar settings row is removed; legacy /model-router bookmarks remain supported. A host supporting the public plugin-settings area is needed; no private-core or sidebar fallback is added.", "The Desktop UI is Korean-first. Windows runtime/SDK/Desktop behavior has been tested; full Linux/macOS runtime support is not claimed.", "Requires a Hermes build with unified Python/Desktop packages and request/tool middleware; new Python tools may require a new session.", "Fast and fallback can increase API charges or subscription-credit use. Transports bypassing the request middleware, including codex_app_server, are outside Fast inheritance coverage.", "The native scanner can report CAUTION for the manual source-repair helper; routing-disabled capability probes can warn that coding_route was not registered.", "Default-profile mid-run activation was not confirmed on the developer's shared backend; package installation is distinct from existing-session activation."], "capabilities": {"provides_tools": ["coding_route"], "provides_hooks": ["pre_api_request", "post_api_request", "api_request_error", "pre_tool_call", "post_tool_call", "subagent_start", "subagent_stop"], "provides_middleware": ["tool_execution", "llm_request"], "requires_env": []}, "requires_hermes": ">=0.21.6"}, {"name": "model-usage-status", "repo": "https://github.com/krapwoo/hermes-model-usage-status", "sha": "da9b55ee79972dd04d333745574d5d198b3b2088", "description": "Provider-native Claude and Codex remaining allowance windows in the Hermes Desktop status bar. Disclosure \u2014 spawns the local `codex app-server` and `claude auth status` CLIs and reads the Claude OAuth token read-only through Hermes core; the optional install.sh (not part of the catalog install) edits the statusLine in ~/.claude/settings.json; macOS only.", "maintainer": "krapwoo", "tier": "community", "category": "desktop", "docs_url": "https://github.com/krapwoo/hermes-model-usage-status#readme", "version": "0.2.1", "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "modernisation-engine", "repo": "https://github.com/Sahil-SS9/modernisation-engine", "sha": "fa35d9667283ec9c5246257a9ee5b076312fef7d", "description": "Controlled migration engine: maps an existing codebase, turns the behaviour that must survive into reviewable contracts, prepares a separate candidate and records old/new evidence before any production change. Disclosure \u2014 27 tools plus a `hermes modernise` CLI and `/modernise` slash command; `assess`, `plan`, `record` and `recipe` read source trees and files at absolute paths the agent supplies (refusing symlinks, `.env`, `auth.json`, `credentials.json` and SSH keys) and never import or run repository code; `recipe` creates a new directory at an agent-chosen absolute path holding a copy of the source with fixed metadata edits; job records live under the plugin's data directory; only after you set `operator_config` and sign a one-use Ed25519 owner grant do `run`, `cancel` and `recover` invoke the local `docker` CLI, outside Hermes's command-approval prompt, to run, inspect and remove rootless, network-disabled, read-only, resource-limited containers from digest-pinned images you allow-list (never pulled); no network calls, no telemetry, no self-updater.", "maintainer": "Sahil-SS9", "tier": "community", "category": "tools", "docs_url": "https://github.com/Sahil-SS9/modernisation-engine", "version": "0.0.1", "platforms": [], "capabilities": {"provides_tools": ["modernise_status", "modernise_assess", "modernise_inventory", "modernise_plan", "modernise_record", "modernise_protocol", "modernise_response_protocol", "modernise_schema", "modernise_contract", "modernise_prepare", "modernise_attempts", "modernise_review_request", "modernise_review", "modernise_rule_review_request", "modernise_rule_review", "modernise_rule_reviews", "modernise_proposal", "modernise_build", "modernise_run", "modernise_resume", "modernise_control_request", "modernise_cancel", "modernise_recover", "modernise_recover_build", "modernise_recipe", "modernise_compare", "modernise_report"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.4"}, {"name": "monid", "repo": "https://github.com/monid-ai/hermes-plugin", "sha": "cdf26de6da51a04c5ffccaa48bee0a2d51f7c35c", "description": "Connect your agent to third-party tools and APIs (web search and scraping, people and company data, social media, media generation, email and phone) through one integration. The agent discovers, compares and runs tools at runtime, paid per call from one Monid balance. Disclosure \u2014 Monid (monid.ai, by Monid / monid-ai) is a paid third-party marketplace: the agent installs the @monid-ai/cli npm package or connects to mcp.monid.ai, sends your requests and any uploaded files to Monid and on to its providers, and each run spends your prepaid Monid workspace balance. The \"confirm the price first\" step is an instruction to the model in the bundled skill, not a Hermes approval prompt, unless you add `trust: untrusted` to `mcp_servers.monid`.", "maintainer": "monid-ai", "tier": "community", "category": "tools", "docs_url": "https://github.com/monid-ai/hermes-plugin#readme", "version": "0.2.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "morning-briefing", "repo": "https://github.com/drkpxl/morning-briefing", "sha": "347ce44a1e71173285b2943a7a97bbdece8327b2", "description": "Personal daily newspaper for Hermes: gathers weather, calendar, AQI, curated 36-hour news (timestamped Reddit RSS + X + web search, per-story QR codes), and newsletter digests, renders one 8.5x11 newsprint page, and prints it every morning via a cron job.", "maintainer": "drkpxl", "tier": "community", "category": "automation", "docs_url": "https://github.com/drkpxl/morning-briefing#readme", "platforms": ["macos", "linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mrscraper", "repo": "https://github.com/ai-mrscraper/hermes-mrscraper-plugin", "sha": "7871647176d7db84ab3156ad4605a89162a2c6d4", "description": "MrScraper page retrieval, Google search, and account usage via direct HTTP APIs. Disclosure \u2014 page and search requests can consume paid account tokens; target URLs, search queries, and request options are sent to MrScraper.", "maintainer": "ai-mrscraper", "tier": "community", "category": "web", "docs_url": "https://github.com/ai-mrscraper/hermes-mrscraper-plugin#readme", "version": "2.0.0", "capabilities": {"provides_tools": ["mrscraper_scraper_api", "mrscraper_web_search", "mrscraper_account"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MRSCRAPER_API_TOKEN"]}, "requires_hermes": ">=0.21.4"}, {"name": "ms-decision-provider", "repo": "https://github.com/guglxni/ms-decision-provider", "sha": "a28887362a55f9b4b03362568760ce6d0ae903e5", "description": "Microsoft-Decision-1 (Azure AI Foundry System One) decision provider for bounded agent decisions. Registers typed-decision tools (decision_noul, decision_choice, decision_score, decide) that preserve full probability distributions, plus an opt-in pre_tool_call hook that requests human approval for known-risk calls without sending their arguments to Azure. Reference implementation of the typed decision-provider runtime in #113008. Disclosure \u2014 the four decision tools send the caller-supplied state/questions text to the Azure Foundry endpoint you set in AZURE_FOUNDRY_BASE_URL (nothing is sent while it is unset); with MS_DECISION_GATE=1 the pre_tool_call gate sends only a coarse operation label for known-risk tool calls to that endpoint and routes them to Hermes's human approval prompt (MS_DECISION_GATE_MODE=block hard-denies instead); the labelled eval corpus under tests/ contains literal destructive commands as should-refuse examples.", "maintainer": "guglxni", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/guglxni/ms-decision-provider#readme", "platforms": [], "capabilities": {"provides_tools": ["decision_noul", "decision_choice", "decision_score", "decide"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": ["AZURE_FOUNDRY_API_KEY", "AZURE_FOUNDRY_BASE_URL"]}, "version": "1.0.0"}, {"name": "my-github", "repo": "https://github.com/tomekdot/hermes-my-github-plugin", "sha": "639f0cf0eb580d209b8bc55bbb05d316501ca77c", "description": "Desktop and dashboard plugin: statusbar chip, palette command, and dashboard tab listing your GitHub repos (public + private) via the gh CLI.", "maintainer": "tomekdot", "tier": "community", "category": "desktop", "version": "1.2.5", "requires_hermes": ">=0.21", "docs_url": "https://github.com/tomekdot/hermes-my-github-plugin", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "mybot-farm", "repo": "https://github.com/okita-io/mybot-farm", "sha": "f875c97bf2f2c9bf601a22ea6971d28ec64ba763", "subdir": "packages/hermes-mybot-farm", "description": "Search mybot.farm, plant/reinstall Hermes packs (Desktop Recruit + CLI), and post GAF listings. Disclosure \u2014 plants third-party Hermes profiles (config, SOUL, skills, memories) from mybot.farm sellers with no hash pinning; force/clean delete profiles.", "maintainer": "badkangaroo", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://mybot.farm/install/hermes", "version": "0.3.0", "platforms": [], "capabilities": {"provides_tools": ["farm_search", "farm_get_pack", "farm_get_stall", "farm_plant", "farm_reinstall", "farm_post", "farm_update"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "myswarm", "title": "MySwarm", "repo": "https://github.com/tomkubik/hermes-myswarm", "sha": "5a7cf3ced917234a292359ce436c609c3285c3c4", "description": "Discover, visualize, sanitize/export, and import community agents.md swarm configurations. Outputs abbreviated agent/persona/goal tables, renders ASCII topology diagrams (.svg and .png images + portable 7-bit copy-paste ASCII symbol blocks), generates rich themed swarm illustrations across 12 curated signature themes and orthogonal intensity levels (understated, normal, overstated) via Hermes default model and image_generate, exports sanitized agents.md files, and imports/reverts shared configs with on-screen file preview and best-effort import warnings; every import/revert asks for approval. Disclosure \u2014 myswarm_import/myswarm_revert replace the workspace AGENTS.md/agents.md (a file Hermes loads into every session's system prompt) after a Hermes approval prompt; choosing \"always\" approves all later imports. The import security check is a best-effort regex + model warning, not a security boundary \u2014 only import files you trust. Swarm file contents are sent to your configured model for parsing and PII scrubbing (also best-effort; review exports before sharing), and myswarm_visualize_image calls your configured image_generate provider (may cost credits). Adds a ~2.8k-character MySwarm guidance section to every session's system prompt. Writes myswarm-ascii.svg/.png and .md exports into the current folder (exports may overwrite an existing .md file there), plus a .agents.md.myswarm.orig sidecar, and keeps import backups under HERMES_HOME/plugin-data/myswarm/.", "maintainer": "tomkubik", "tier": "community", "category": "tools", "requires_hermes": ">=0.19.0", "version": "1.0.0", "docs_url": "https://github.com/tomkubik/hermes-myswarm#readme", "readme": true, "capabilities": {"provides_tools": ["myswarm_list", "myswarm_ascii", "myswarm_visualize_image", "myswarm_export", "myswarm_import", "myswarm_revert"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "nachos", "repo": "https://github.com/Nacho-Labs-LLC/hermes-plugin-nachos", "sha": "2ad0b272d4fbd2c000713e927a656851dc8787e2", "version": "0.5.4", "description": "Durable memory and context compression for Hermes Agent with local SQLite or flat-file storage. Disclosure \u2014 replaces the memory provider (memory.provider: nachos) and, only when context.engine: nachos is set, the context engine; the provider injects a system-prompt block telling the agent to use the nachos_memory_* tools and keep built-in memory disabled; opt-in semantic ranking either runs a separately installed nachos-embeddings CLI or sends the turn query plus memory titles/summaries to api.openai.com with OPENAI_API_KEY; all storage is local under $HERMES_HOME/nachos/.", "maintainer": "Nacho Labs LLC", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Nacho-Labs-LLC/hermes-plugin-nachos#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "needs-you", "repo": "https://github.com/aydnOktay/hermes-needs-you", "sha": "f903b8eb8f166b609e2ee3c535209fb4602b60d3", "description": "Hermes is waiting \u2014 full Desktop page for pending approvals. Queue, chip, OS notify. Redacted previews only. No API keys.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-needs-you", "version": "0.1.0", "image": "https://raw.githubusercontent.com/aydnOktay/hermes-needs-you/f903b8eb8f166b609e2ee3c535209fb4602b60d3/logo.png", "platforms": [], "capabilities": {"provides_tools": ["needs_you_list", "needs_you_clear"], "provides_hooks": ["pre_approval_request", "post_approval_response"], "provides_middleware": [], "requires_env": []}}, {"name": "nerve", "repo": "https://github.com/keeltrace/hermes-nerve", "sha": "3de7d94982b7a2cb87c829e4b2366ced927d8fed", "description": "Nerve is a supervisory nervous system for Hermes Agent with provider-neutral Jev, Laya, and OpenJev Reflex backends, evidence-backed Kanban supervision, context governance, token-budget trajectory control, and durable SSH workers. Disclosure \u2014 the default Reflex backend is hosted Jev; with the default settings (enabled / admission_enabled on) each turn's user prompt (up to 12k characters) and redacted tool/result previews are sent to the configured Jev provider (OpenRouter Decisions / TypeSafe Jev) using your OPENROUTER_API_KEY or TYPESAFE_API_KEY, spending your credits on every turn. Laya and OpenJev can be configured as local/self-hosted backends. The operator-only nerve setup CLI can copy a local HermesContextBus checkout into HERMES_HOME/plugins/hermes-context-bus and runs hermes plugins enable/disable for that plugin when a profile is saved; the model cannot trigger this.", "maintainer": "keeltrace", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/keeltrace/hermes-nerve#readme", "version": "0.3.1", "capabilities": {"provides_tools": ["nerve_decide", "nerve_rank", "nerve_verify", "nerve_assess", "nerve_context_curate", "nerve_context_rehydrate", "nerve_stats", "nerve_nervous_event", "nerve_supervise_card", "nerve_work_event", "nerve_work_status", "nerve_remote_delegate_task", "nerve_remote_worker_status", "nerve_remote_worker_result", "nerve_remote_worker_cancel", "nerve_remote_worker_control"], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_llm_call", "transform_tool_result", "pre_verify", "post_api_request", "api_request_error", "post_llm_call", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "netmind-provider", "title": "NetMind", "repo": "https://github.com/NetMind-AI/netmind-hermes-provider", "sha": "00ab432e251fc04b983382a7b339f54d96e4b29d", "description": "NetMind OpenAI-compatible model provider with a bundled model catalog. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); chat requests go to https://api.netmind.ai/inference-api/v1 through Hermes' own client with NETMIND_API_KEY, which Hermes reads; the plugin itself opens no connections, reads and writes no files and starts no processes.", "maintainer": "NetMind-AI", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "version": "1.0.0", "docs_url": "https://github.com/NetMind-AI/netmind-hermes-provider#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["NETMIND_API_KEY"]}}, {"name": "next-prompt", "repo": "https://github.com/soymarketing/hermes-plugin-next-prompt", "sha": "c200200d6678dc6b093bab03c2e00a4f5a5043ed", "description": "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.", "maintainer": "soymarketing", "tier": "community", "category": "desktop", "version": "0.3.1", "requires_hermes": ">=0.21", "docs_url": "https://github.com/soymarketing/hermes-plugin-next-prompt#readme", "platforms": ["windows", "macos", "linux"], "image": "https://raw.githubusercontent.com/soymarketing/hermes-plugin-next-prompt/ec58f9b298b0bb0c182f909a0014432b1dc898a8/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/soymarketing/hermes-plugin-next-prompt/eff647b44fc81153f5220d505e5f8a5c642330e8/docs/media/likely-answer.png", "https://raw.githubusercontent.com/soymarketing/hermes-plugin-next-prompt/eff647b44fc81153f5220d505e5f8a5c642330e8/docs/media/next-step.png", "https://raw.githubusercontent.com/soymarketing/hermes-plugin-next-prompt/eff647b44fc81153f5220d505e5f8a5c642330e8/docs/media/command-palette.png"], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "next-steps", "repo": "https://github.com/Agantila/next-steps", "sha": "7baab9e7e644546db17318baacdb7f1c6e2e19fa", "description": "Next-step suggestions under the Hermes Desktop composer after each turn: local Ollama inference, per-session state, target routing (session, new tab, bots, kanban), tiny-model capacity profiles, EN/DE UI. No API keys. Disclosure \u2014 after every agent turn, sends the last 8 messages (each cut to 200 chars) plus the working directory to Ollama on localhost; clicking a suggestion immediately submits it as a prompt in the current session, a new session, or another profile's session, or creates a kanban card, and for non-current targets also attaches the working directory and the last 6 messages (on by default, can be turned off under Targets).", "maintainer": "Agantila", "tier": "community", "category": "desktop", "version": "11.1.0", "docs_url": "https://github.com/Agantila/next-steps#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "nextcloud-talk-platform", "repo": "https://github.com/smilinTux/hermes-nextcloud-talk", "sha": "03f27203fd983d4714891302c49f06b404c4b02f", "description": "Nextcloud Talk platform adapter for Hermes Agent, in two modes behind one plugin: a webhook bot (Nextcloud Talk Bot API, HMAC-SHA256 signed, with an explicit body-size cap and a nonce-replay cache ahead of payload parsing) and a real Nextcloud user account (app password, long-polling the Chat REST API, with federation-invite support, per-room mention/watch/free modes, and an agent-to-agent loop guard plus active-listening context for multi-agent rooms). Mode is picked automatically by which credential is configured. No extra SDKs -- aiohttp for bot mode, httpx for user mode, both already Hermes dependencies. Disclosure \u2014 Connects to your Nextcloud server either as a Talk bot (HMAC-verified webhook listener, 127.0.0.1:18797 by default) or as a real Nextcloud user with an app password (long-polls the Chat API and auto-accepts federation invites only from NEXTCLOUD_TALK_ALLOWED_INVITERS); in user mode, unanswered room messages from allowed senders (up to 40 per room by default) and, for rooms listed in NEXTCLOUD_TALK_ROOM_MODES or with room_rules_all_rooms on, the room description are added to the agent's next turn in that room.", "maintainer": "smilinTux", "tier": "community", "category": "platform", "docs_url": "https://github.com/smilinTux/hermes-nextcloud-talk#readme", "version": "1.4.3", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "nextcloud-talk", "title": "Nextcloud Talk", "repo": "https://github.com/Cliff3c/hermes-nextcloud-talk", "sha": "0df0679d1ed28c2087774fea9ae646a858e7ed70", "subdir": "plugin", "description": "Signed Nextcloud Talk bot webhooks and text replies for Hermes, with JSON/XML OCS support. Disclosure \u2014 runs an HTTP webhook listener (default 0.0.0.0:8788, HMAC-verified with the bot secret) and sends messages and optional Basic-auth room lookups to your Nextcloud server; registers the `nextcloud_talk` gateway platform.", "maintainer": "Cliff3c", "tier": "community", "category": "platform", "version": "0.2.1", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["NC_TALK_BASE_URL", "NC_TALK_BOT_SECRET"]}, "known_issues": ["Text only; attachments, reactions and inbound reply-context reconstruction are not implemented.", "Dedupe is in-memory and does not survive restart; uncertain sends are not automatically retried.", "Valid empty OCS acknowledgements confirm delivery without returning a message ID."], "requires_hermes": ">=0.21.3"}, {"name": "nextdns", "repo": "https://github.com/shanelord01/hermes-nextdns", "sha": "6e46460e9d7f4775d247fb1e467532cf42bfc52d", "description": "Read-only NextDNS tools - DNS query logs, blocked queries with the blocklist that matched, and aggregate analytics by domain, device, blocklist or protocol. For triaging DNS problems and answering \"was this blocked, and by what\". Uses the official NextDNS API; makes no configuration changes.", "maintainer": "shanelord01", "tier": "community", "category": "tools", "docs_url": "https://github.com/shanelord01/hermes-nextdns#readme", "capabilities": {"provides_tools": ["nextdns_analytics", "nextdns_blocked", "nextdns_logs", "nextdns_profile"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "nexus", "repo": "https://github.com/Neboy72/nexus-memory", "sha": "a4eb71d033ad83f709121916c3cbda1e32e009b0", "subdir": "plugins/memory/nexus", "version": "0.22.32", "description": "Self-hosted long-term memory on Qdrant: automatic per-turn prefetch and write-back, plus recall/remember/forget, guardrail rules and a knowledge graph; Hermes and any MCP-connected agent share one collection. Embeddings run fully local by default (sentence-transformers with Qwen/Qwen3-Embedding-0.6B, 1024d, about 1.2 GB from Hugging Face on first use; on Apple Silicon the model is pinned to the CPU, because PyTorch's MPS backend aborts the whole process under two overlapping encodes). A cloud embedder runs only when NEXUS_EMBEDDING_PROVIDER names it and its key is present, and a key that merely sits in the environment never selects one. Access levels fail closed: a memory, a protection rule or a graph label without a known level counts as the most restrictive. A local service on 127.0.0.1:9122 serves embeddings and the full MCP toolset; its /embed and /mcp routes demand a per-installation key (service_auth.key, mode 0600) and reject non-loopback Host/Origin, while the open /healthz answers liveness only. The plugin starts that service when Hermes cannot load the embedding stack, and it keeps running afterwards. Session-end fact extraction sends conversation text to the model endpoint from Hermes config.yaml, and the consolidation daemon to its configured model, which defaults to Hermes's own default model through local Ollama; reads ~/.hermes/.env and config.yaml; state and daily backups under ~/.nexus-memory; NEXUS_UPDATE_CHECK=1 opts into a GitHub release check. Disclosure \u2014 when Hermes cannot load the embedding stack (and always on Apple Silicon unless NEXUS_EMBED_IN_HOST=1), the plugin starts `nexus-memory serve` on 127.0.0.1:9122 (embeddings, the full Nexus MCP toolset and a consolidation daemon that sends memory text to the Ollama endpoint at 127.0.0.1:11434 or NEXUS_OLLAMA_BASE under the model named by NEXUS_CONSOLIDATION_MODEL, nexus-memory.consolidation_model or Hermes's model.default, which can be an Ollama cloud model), and the service keeps running after Hermes exits; its /embed and MCP routes require a per-install key in ~/.nexus-memory/service_auth.key (0600) and a loopback Host/Origin; session-end fact extraction sends conversation text to the model endpoint in Hermes config.yaml, and the opt-in recall reranker (nexus-memory.rerank or NEXUS_RERANK=1) defaults to sending each query plus up to 20 memory snippets to that same endpoint using the provider API key it reads from config.yaml; reads ~/.hermes/.env and config.yaml; state and daily backups under ~/.nexus-memory; opt-in NEXUS_UPDATE_CHECK=1 adds a GitHub release check and an upgrade nudge to the system prompt.", "maintainer": "Neboy72", "tier": "community", "category": "memory", "requires_hermes": ">=0.19", "docs_url": "https://github.com/Neboy72/nexus-memory/blob/a4eb71d033ad83f709121916c3cbda1e32e009b0/plugins/memory/nexus/README.md", "image": "https://raw.githubusercontent.com/Neboy72/nexus-memory/a4eb71d033ad83f709121916c3cbda1e32e009b0/docs/images/nexus-logo-square.png", "capabilities": {"provides_tools": ["nexus_recall", "nexus_remember", "nexus_forget", "nexus_guardrail_check", "nexus_guardrail_override", "nexus_graph_traverse", "nexus_find_entities", "nexus_get_subgraph", "nexus_get_related", "nexus_cost_routing_stats", "nexus_cost_routing_explain", "nexus_sica_run"], "provides_hooks": ["transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "ngrok-ai-gateway", "repo": "https://github.com/ngrok/hermes-ngrok", "sha": "27baaa0e85e09581f05084fc318a0755774162e1", "subdir": "model-providers/ngrok", "title": "ngrok AI Gateway", "description": "The ngrok AI Gateway as a Hermes model provider (`--provider ngrok`, or ngrok AI Gateway in `hermes model`): one access key for all your model providers, with failover. The model list comes live from your gateway, and gateway errors (unrouted model, access-policy and upstream-key failures, out of credit) map onto Hermes' fallback instead of a generic error. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); chat requests and the model list go to https://gateway.ngrok.ai/v1 (or NGROK_AI_GATEWAY_BASE_URL) through Hermes' own client with NGROK_AI_GATEWAY_KEY, which Hermes reads; the plugin itself opens no connections, reads and writes no files and starts no processes.", "maintainer": "ngrok", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "docs_url": "https://ngrok.com/docs/ai-gateway/overview", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["NGROK_AI_GATEWAY_KEY"]}}, {"name": "nine-balance-widget", "repo": "https://github.com/OMOX563/nine-balance-widget", "sha": "b8652884a4f9c6d07c7e637991c09be6a645a87e", "title": "Nine-Balance Widget", "description": "Nine AI provider balances in one desktop widget \u2014 live balance/usage and quota reads, token-based spend estimates with off-peak price windows, drop alerts, and an anime mascot per provider with rotating flavour lines (DeepSeek, MiniMax, GLM, Kimi, MiMo, ChatGPT, Claude, Gemini, Grok). Fully English UI. Desktop-only: desktop/plugin.js inside the plugin SDK surface; no agent tools, hooks, middleware or env vars. Keys are entered in the widget's settings page and stored in plugin-scoped storage; the widget only calls those providers' official APIs. Ported from MeteorNOX/DeepSeek-Balance-Whale-Widget (MIT). Disclosure \u2014 API keys you enter in the widget's settings are stored in plaintext in Desktop plugin storage (not Hermes' secret store); while the widget is on, the Desktop renderer polls the balance/usage endpoint of the provider matching your current model every 60 s with that provider's key (api.deepseek.com, api.minimaxi.com / api.minimax.io, open.bigmodel.cn / api.z.ai, api.moonshot.cn / api.moonshot.ai, api.kimi.com, token-plan-cn.xiaomimimo.com, api.openai.com, api.anthropic.com, generativelanguage.googleapis.com with the key in the URL, api.x.ai); each key goes only to its own provider; draws a floating widget over the app window.", "maintainer": "OMOX563", "tier": "community", "category": "desktop", "version": "1.0.0", "screenshots": ["https://raw.githubusercontent.com/OMOX563/nine-balance-widget/b8652884a4f9c6d07c7e637991c09be6a645a87e/assets/preview.png", "https://raw.githubusercontent.com/OMOX563/nine-balance-widget/b8652884a4f9c6d07c7e637991c09be6a645a87e/assets/grid-light.jpg"], "readme": true, "requires_hermes": ">=0.21.5"}, {"name": "node-search", "repo": "https://github.com/Heeervas/node-search-plugin", "sha": "2482119ef48f0ad4ea071e895e141bf8b1d64dff", "description": "Bounded Markdown metadata+graph prefilter for configured local roots", "maintainer": "Heeervas", "tier": "community", "category": "tools", "docs_url": "https://github.com/Heeervas/node-search-plugin#readme", "capabilities": {"provides_tools": ["node_search"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "nord-theme", "title": "Nord Theme", "repo": "https://github.com/Audiofool934/hermes-nord-theme", "sha": "d7cd1cd84e04b12a0e4cc242a2703a25c8447233", "description": "Unofficial Nord theme for Hermes Desktop with hand-tuned Polar Night (dark) and Snow Storm (light) palettes, Nord terminal colors, Nord code-block syntax colors, and Aurora status colors. Scoped to its own theme; other themes are untouched. Disclosure \u2014 its stylesheet recolors Desktop surfaces, code-block syntax colors, status colors, selection and inline code only while Nord is selected, and it switches the active theme to Nord once on first enable; no network calls, file reads or shell commands.", "maintainer": "Audiofool934", "tier": "community", "category": "desktop", "docs_url": "https://github.com/Audiofool934/hermes-nord-theme#readme", "version": "0.1.0", "image": "https://raw.githubusercontent.com/Audiofool934/hermes-nord-theme/d7cd1cd84e04b12a0e4cc242a2703a25c8447233/docs/dark.png", "screenshots": ["https://raw.githubusercontent.com/Audiofool934/hermes-nord-theme/d7cd1cd84e04b12a0e4cc242a2703a25c8447233/docs/dark.png", "https://raw.githubusercontent.com/Audiofool934/hermes-nord-theme/d7cd1cd84e04b12a0e4cc242a2703a25c8447233/docs/light.png", "https://raw.githubusercontent.com/Audiofool934/hermes-nord-theme/d7cd1cd84e04b12a0e4cc242a2703a25c8447233/docs/code-dark.png", "https://raw.githubusercontent.com/Audiofool934/hermes-nord-theme/d7cd1cd84e04b12a0e4cc242a2703a25c8447233/docs/code-light.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.22.4"}, {"name": "nowstamp", "repo": "https://github.com/zakiyys/hermes-nowstamp", "sha": "26148cca897f0798ca2cfc035e9eb2e00349bcf8", "description": "Give the agent a clock. Appends the current date and time, plus the real gap since the previous message, to every user turn. Optional spaced-out timestamps on tool results for long runs.", "maintainer": "zakiyys", "tier": "community", "category": "general", "docs_url": "https://github.com/zakiyys/hermes-nowstamp#readme", "version": "1.0.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_llm_call", "transform_tool_result"], "provides_middleware": [], "requires_env": []}}, {"name": "ntfy-approval", "repo": "https://github.com/AhmetArif0/hermes-ntfy-approval", "sha": "95d3a4b838073d6908c578ca1a9f04154349a2cf", "subdir": "ntfy-approval", "description": "Answer Hermes' approval prompts from your phone: once selected with security.approval.transport: ntfy, each dangerous-command prompt arrives as an ntfy push notification with Approve once, Approve for session and Deny buttons, and no answer still means deny. Disclosure \u2014 once selected, anyone who can read the ntfy topic can approve dangerous commands (the one-time answer codes are in the notification), so on the public ntfy.sh default the topic name is the only secret and NTFY_APPROVAL_TOKEN is optional; each pending approval publishes Hermes' reason, the redacted command (unless send_command is false), the non-default profile name and one-time answer codes to the configured ntfy server, then reads <topic>-reply and deletes the notification; any failure or timeout is a deny; reads NTFY_APPROVAL_TOPIC/NTFY_APPROVAL_TOKEN from the profile .env, never puts the token in a notification, follows no redirects, writes no files and starts no processes.", "maintainer": "AhmetArif0", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/AhmetArif0/hermes-ntfy-approval", "version": "1.0.1", "image": "https://raw.githubusercontent.com/AhmetArif0/hermes-ntfy-approval/e6d557073d7034002503c27113b80df1c64b3485/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["post_approval_response"], "provides_middleware": [], "requires_env": []}}, {"name": "nvidia-app", "repo": "https://github.com/NousResearch/hermes-nvidia", "sha": "de75692b479dc88b95e428a9cb25091d3fb0e327", "subdir": "nvidia-app", "description": "NVIDIA App control through its local MCP server: overlay capture and state, driver status and release notes, game optimization, and app launch. Requires NVIDIA App 11.0 or newer on Windows; the install is refused when the app is absent, and the tools appear while the app's service is running. The plugin reads the endpoint and token NVIDIA App publishes in its own McpServer server.json on every connection, so a changed port or token needs no reconfiguration. Disclosure: the tools read and change NVIDIA App settings on this machine; nothing leaves loopback.", "title": "NVIDIA App", "maintainer": "NousResearch", "tier": "verified", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/NousResearch/hermes-nvidia/tree/main/nvidia-app", "version": "0.1.0", "platforms": ["windows"], "onboarding": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "nvidia-broadcast", "repo": "https://github.com/NousResearch/hermes-nvidia", "sha": "de75692b479dc88b95e428a9cb25091d3fb0e327", "subdir": "nvidia-broadcast", "description": "NVIDIA Broadcast control through its local MCP gateway: camera, microphone and speaker effects, Studio Voice profiles, device selection, camera resolution, and effects on local media files. Requires NVIDIA Broadcast 2.3 or newer on Windows (2.2 and older have no gateway); the install is refused when the app is absent, and the tools appear while NVIDIA Broadcast is running in the user's desktop session. Disclosure: the tools change live audio and video effects on this machine; nothing leaves loopback.", "title": "NVIDIA Broadcast", "maintainer": "NousResearch", "tier": "verified", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/NousResearch/hermes-nvidia/tree/main/nvidia-broadcast", "version": "0.1.0", "platforms": ["windows"], "onboarding": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "obsidian-memory", "repo": "https://github.com/kyssta-exe/hermes-obsidian-memory", "sha": "11239984e82caa6dbf02106ce315e3019368b5fc", "description": "Browse, search, and edit Obsidian vault notes from the Hermes dashboard. Features force-directed graph visualization, multi-vault support, markdown rendering with wikilinks, and inline note editing.", "maintainer": "kyssta-exe", "tier": "community", "category": "desktop", "docs_url": "https://github.com/kyssta-exe/hermes-obsidian-memory#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "oc-free-provider", "repo": "https://github.com/anpicasso/hermes-oc-free-provider", "sha": "ae705c692dd83c5eb0e871053722838af39e213e", "description": "Unofficial OpenCode Zen free-model transport for Hermes. Discovers live zero-cost tool-capable models by intersecting OpenCode Zen and models.dev over HTTPS, persists only the last successful intersection for restart fallback, and bidirectionally translates compatible OpenCode and Hermes tool schemas, calls, choices, and replayed history while Hermes executes tools locally. No OpenCode CLI, Node.js, npm, or npx dependency. Disclosure \u2014 prompts, tool schemas, tool results, and other conversation content leave the machine for OpenCode and the selected model provider; model availability, retention, data use, and permission are governed by their current terms.", "maintainer": "anpicasso", "tier": "community", "category": "models", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/anpicasso/hermes-oc-free-provider#readme", "version": "3.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "office-3d", "title": "Office 3D", "repo": "https://github.com/oslook/hermes-desktop-plugin-office-3d", "sha": "efe1b65e8aa8508dc5b799a389e5a12b69ef00af", "description": "A live isometric office for Hermes Desktop: every profile is a person at a desk \u2014 a profile doing real work sits typing with a lit terminal screen, an online-but-idle one relaxes in the lounge with tea, an offline one leaves an empty desk with a dark monitor. Click a desk to inspect that profile (state, sessions, tokens, cost) and open its chat or latest session; a cost/tokens leaderboard ranks the profiles; plus a global Total/Working/Idle/Offline overview, a status-bar chip, a palette command with keybind, a settings page, and an office_status agent tool that reports the same status to the model. Disclosure \u2014 the backend and the tool read each profile's gateway_state.json and open its state.db read-only, running aggregate queries only (COUNT/SUM/MAX over the sessions table: counts, token totals, cost, last-activity); they never read message content, system prompts or titles, make no network calls, and need no credentials. Opening a profile's latest session asks the app's own session.list RPC for that session's id (metadata only) and then opens it through the app's own openSession; no message content is read. POSIX only (platforms: [linux, macos]) because the process-liveness check uses os.kill(pid, 0), which on Windows would terminate the target process.", "maintainer": "oslook", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.4", "version": "1.3.0", "platforms": ["linux", "macos"], "docs_url": "https://github.com/oslook/hermes-desktop-plugin-office-3d#readme", "image": "https://raw.githubusercontent.com/oslook/hermes-desktop-plugin-office-3d/efe1b65e8aa8508dc5b799a389e5a12b69ef00af/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/oslook/hermes-desktop-plugin-office-3d/efe1b65e8aa8508dc5b799a389e5a12b69ef00af/docs/screenshot.jpeg", "https://raw.githubusercontent.com/oslook/hermes-desktop-plugin-office-3d/efe1b65e8aa8508dc5b799a389e5a12b69ef00af/docs/screenshot-2.jpeg"], "readme": true, "capabilities": {"provides_tools": ["office_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "office-desk", "repo": "https://github.com/DECRUX9812/hermes-office", "sha": "b53630cd0f0edc10645d63899a5a2515f8015fc5", "subdir": "", "version": "0.1.1", "title": "Office Desk", "description": "Guarded Word, PowerPoint and Excel editing: tracked Word changes and comments, slide and deck edits, and Excel edits with LibreOffice recalc. Every write gets a backup and a revertible receipt, and you review it all on a Desk page in the Desktop app. Settings are in Settings > Plugins. Disclosure: reads any Office file the agent is pointed at but writes only inside folders the user puts on the Desk (backups and receipts live in the plugin's own data dir). xlsx_recalc runs the user's installed LibreOffice (soffice, headless) on a temporary copy. The Desk page reads the session store read-only to show a workstream's chat. No network calls, telemetry, credentials or background processes. Depends on the paper-docx, paper-pptx and paper-xlsx forks. They provide the docx, pptx and openpyxl import names, so they must not share an environment with python-docx, python-pptx or openpyxl.", "maintainer": "DECRUX9812", "tier": "community", "category": "tools", "docs_url": "https://github.com/DECRUX9812/hermes-office#readme", "image": "https://raw.githubusercontent.com/DECRUX9812/hermes-office/b53630cd0f0edc10645d63899a5a2515f8015fc5/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/DECRUX9812/hermes-office/b53630cd0f0edc10645d63899a5a2515f8015fc5/docs/screenshots/workstream-docx.png", "https://raw.githubusercontent.com/DECRUX9812/hermes-office/b53630cd0f0edc10645d63899a5a2515f8015fc5/docs/screenshots/workstream-xlsx.png", "https://raw.githubusercontent.com/DECRUX9812/hermes-office/b53630cd0f0edc10645d63899a5a2515f8015fc5/docs/screenshots/desk-home.png"], "platforms": [], "capabilities": {"provides_tools": ["office_desk", "office_inspect", "office_search", "docx_tracked_edit", "docx_comment", "docx_redline_accept_reject", "pptx_inspect_formats", "pptx_edit_shape", "pptx_compose_decks", "pptx_diff", "xlsx_edit", "xlsx_recalc", "xlsx_diff", "office_receipt"], "provides_hooks": ["pre_llm_call", "post_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "offpeak-bekci", "repo": "https://github.com/onkanat/hermes-offpeak-bekci", "sha": "e566f9101be4bc9e8084e8f09b27bb7fbd551a04", "title": "Off-Peak Watch (offpeak-bekci)", "description": "Makes Ollama Cloud's off-peak window visible and actionable in Hermes: a desktop status-bar chip shows the countdown and the queue item counts (Ollama off-peak hours: weekdays 18:00-12:00 UTC, weekends one block), a one-shot notice fires 30 minutes before the window opens, and approval is taken only from the user (`/offpeak-onayla <id,id>`) \u2014 work runs only if approved, and items never enter the queue by themselves. `/offpeak-durum` prints a readable report by default (machine-readable JSON with `/offpeak-durum json`), and `/offpeak-kur` prints the cron job it would install in full plus a `plan_hash`; nothing is installed without a hash-bound approval typed by the user, and the plugin never writes the cron store. One `llm_execution` middleware measures the call rate for Ollama Cloud calls during the peak window and ships measure-only (`kuru_kosu: true`): it records what it would delay and never delays. No network calls, no telemetry, no credential reads; the only local files it touches are the queue ledger, its own JSONL measurement log, and a read-only look at the profile's cron/jobs.json. Output language is English by default; `dil: tr` selects Turkish. Auto-delivery is host-dependent: in a classic CLI session the request enters the agent queue; on the Ink TUI / desktop-panel host the core asks for a persistent `session_key`, which the command handler does not receive, so the command prints the parameters as a single line of JSON. Injecting into a gateway additionally requires `plugins.entries.offpeak-bekci.allow_gateway_injection: true` (default off); the only in-process way to read that key is the private `gateway.session_context` module (rule 9 -> not used). Requires Hermes >= 0.22.2. Disclosure \u2014 the llm_execution middleware can sleep Ollama Cloud calls during the peak window once `kuru_kosu: false` is set (default is measure-only); it writes a JSONL measurement log and, on `/offpeak-onayla`, rewrites the user's queue file; it reads the profile's cron/jobs.json read-only (on `/offpeak-durum`, `/offpeak-kaldir` and at every session end) to count enabled queue-consumer jobs; `/offpeak-kur` and `/offpeak-kaldir` leave cron install/removal requests in the session (or, with `allow_gateway_injection: true`, inject them into the gateway) for the agent's own cron tool to act on; no network calls, no credential reads, never writes the cron store.", "maintainer": "onkanat", "tier": "community", "category": "desktop", "version": "0.1.8", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/onkanat/hermes-offpeak-bekci#readme", "platforms": [], "screenshots": ["https://raw.githubusercontent.com/onkanat/hermes-offpeak-bekci/555dff262a37a35f615dc03f82320db3bf34ccca/docs/rozet.png"], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end"], "provides_middleware": ["llm_execution"], "requires_env": []}}, {"name": "omh", "repo": "https://github.com/rlaope/oh-my-hermes", "sha": "021e5c63d976b4e0faf9cfc7d608701d98fe1722", "subdir": "src/plugin_bundle/omh", "description": "Oh My Hermes (OMH) bridge: routing hints and role context for OMH workflow skills, per-task delegation model routing, plan todos and a status tool, a Hermes Desktop status pane (off until enabled), bounded evidence probes that keep prepared work apart from observed results, and a file-backed memory provider. Disclosure \u2014 omh_delegate_route writes delegation.model/provider/reasoning_effort in $HERMES_HOME/config.yaml and the session hooks restore them; omh_gather_evidence runs allowlisted checks (python -m unittest with reporting flags only, python -m compileall, git diff --check, omh doctor/probe/docs/release checks) via subprocess on the host, outside any sandboxed terminal backend and without Hermes' terminal approval, in the agent working directory or below it, so it runs whatever test code that directory holds; omh_team (only with the separate OMH core package installed) asks once through the Hermes approval prompt for an exact list of up to 8 check commands from an accepted plan, then runs them on the host as each helper returns; omh_jev_ask posts model-supplied state and questions to api.typesafe.ai (openrouter.ai only when the operator opts in via ~/.omh/jev/settings.json) with the user's own TYPESAFE_API_KEY or OPENROUTER_API_KEY, only in a turn where the user names Jev; opt-in egress_attempts (re-registers chosen core tools, needs the operator's tool-override grant) and browser_adapter (vetoes core browser_* tools) settings; reads session and cost metadata from state.db read-only; state lives under ~/.omh and <project>/.omh.", "maintainer": "rlaope", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/rlaope/oh-my-hermes", "version": "3.0.0", "platforms": [], "capabilities": {"provides_tools": ["omh_agent_board", "omh_capabilities", "omh_context", "omh_decision_gate", "omh_delegate_route", "omh_document_plan", "omh_gather_evidence", "omh_hud", "omh_interact", "omh_jev_ask", "omh_loop", "omh_memory", "omh_probe", "omh_recommend", "omh_resume", "omh_role", "omh_route_answer", "omh_run_summary", "omh_source_trust", "omh_status", "omh_team", "omh_todo"], "provides_hooks": ["on_session_end", "on_session_start", "post_tool_call", "pre_llm_call", "pre_tool_call", "pre_verify", "subagent_start", "subagent_stop", "transform_llm_output", "transform_tool_result"], "provides_middleware": [], "requires_env": []}}, {"name": "omnivoice", "repo": "https://github.com/ThaungThanHan/hermes-omnivoice", "sha": "21d2900c392247dc52d706fee956f08dbfc3c5ea", "description": "OmniVoice TTS provider for Hermes Agent", "maintainer": "ThaungThanHan", "tier": "community", "category": "voice", "docs_url": "https://github.com/ThaungThanHan/hermes-omnivoice#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "opaque-composer", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "953732a9fb52b6fd89e73fc96d910aab63163e07", "subdir": "public/opaque-composer", "description": "Keep the desktop composer solid while scrolling so conversation text stays readable.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/opaque-composer", "version": "1.0.0", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/953732a9fb52b6fd89e73fc96d910aab63163e07/public/opaque-composer/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "openai-compatible", "repo": "https://github.com/duu261/hermes-imagegen-openai-compatible", "sha": "65851c2f6985c5e193a5498493ecb2971450de7b", "description": "GPT Image through CLIProxyAPI, New API, or any OpenAI Images-compatible gateway, with gateway-aware errors and requested-vs-returned size reporting. Disclosure \u2014 sends image prompts and any source images (local files, data URLs or public HTTPS URLs) to the OpenAI-compatible gateway base_url you configure, authenticated with OPENAI_COMPAT_IMAGE_API_KEY.", "maintainer": "duu261", "tier": "community", "category": "tools", "version": "2.0.2", "docs_url": "https://github.com/duu261/hermes-imagegen-openai-compatible#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPENAI_COMPAT_IMAGE_API_KEY"]}}, {"name": "openalex", "repo": "https://github.com/Adolanium/hermes-plugin-openalex", "sha": "d38a1ee2fb04df0f7ad136bd30bff5f2136fe0cd", "description": "Scholarly search, citation traversal, grouped counts, and fulltext access through OpenAlex with session spending limits.", "maintainer": "Adolanium", "tier": "community", "category": "tools", "docs_url": "https://github.com/Adolanium/hermes-plugin-openalex#readme", "image": "https://raw.githubusercontent.com/Adolanium/hermes-plugin-openalex/d38a1ee2fb04df0f7ad136bd30bff5f2136fe0cd/assets/catalog-banner.png", "capabilities": {"provides_tools": ["openalex_resolve", "openalex_get", "openalex_count", "openalex_search", "openalex_related", "openalex_account", "openalex_fields", "openalex_fulltext", "openalex_classify", "openalex_harvest"], "provides_hooks": ["on_session_start", "on_session_reset"], "provides_middleware": [], "requires_env": ["OPENALEX_API_KEY"]}}, {"name": "opencode-shepherd", "repo": "https://github.com/okazakee/opencode-shepherd", "sha": "207a1443a5daa20e20824d13776794c0057cd539", "description": "Watch over opencode sessions from anywhere: alerts for stopped turns, questions and permissions, plus a dependency-free CLI to reply. Disclosure \u2014 the skill has the agent install the ocshepherd CLI from GitHub at a pinned commit and, after asking you, add a cron entry or systemd unit that polls your opencode server; the CLI talks to that server with the password you provide, can reply to its questions and permission prompts, and optionally sends alerts to Telegram or runs a notify command you configure.", "maintainer": "okazakee", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "version": "0.2.5", "docs_url": "https://github.com/okazakee/opencode-shepherd#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "openinvest", "repo": "https://github.com/longsizhuo/openInvest", "sha": "0b9268bb85f8b97bff0f9d2eea18d7b88faec8fa", "subdir": "plugin", "description": "Self-hosted AI investment committee \u2014 skills for portfolio review, a decision ledger, and a 4-role LLM committee (macro / quant / risk / CIO) that debates a symbol. Disclosure \u2014 the skills run the openinvest backend from PyPI via uvx (pinned in run.sh) and keep portfolio, ledger, committee records and any keys you add in plaintext under ~/openInvest (or $INVEST_HOME); it fetches public market data and RSS news, and on the Direct path / daily report sends your portfolio and wealth context to the LLM you configure (default api.deepseek.com) and, if installed, to the agy or gemini CLI for a second opinion; news ingestion can trigger extra committee runs (LLM spend). The MCP tools are a server you add to config.yaml yourself (the printed snippet runs the plugin's pinned run.sh with `trust: untrusted`, so Hermes asks before ledger writes); buy/sell/deposit/withdraw only edit the local ledger \u2014 it never connects to a broker or places orders.", "maintainer": "longsizhuo", "tier": "community", "category": "tools", "title": "openInvest", "docs_url": "https://openinvest.involutionhell.com", "version": "0.25.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "openltm", "repo": "https://github.com/RohiRIK/OpenLtm", "sha": "91f77925f75c1e5bb0feb999f427f463f7ed9bf5", "subdir": "hermes/openltm_hermes", "description": "Long-term memory for Hermes agents, stored in a local SQLite database. FTS5 full-text search with optional vector (sqlite-vec) recall, importance-weighted decay, a queryable memory graph, and automatic capture: a declarative rule engine classifies corrections, constraints, preferences, decisions, and agent-discovered facts from a conversation and stores each one as a distilled, self-contained fact. Runtime notifications and read-only OpenLTM tool requests are excluded by named guards so ops noise never becomes memory. No cloud, no telemetry, no API keys required; optional semantic recall via a local llama.cpp embedding server. MIT licensed. Disclosure \u2014 local SQLite in HERMES_HOME; runs git config to read the repo remote; memory text goes to Gemini or OpenAI embeddings, or to the llama.cpp server URL you set (default 127.0.0.1:8080), only if selected in openltm.json (default local Ollama)", "maintainer": "RohiRIK", "tier": "community", "category": "memory", "docs_url": "https://github.com/RohiRIK/OpenLtm/blob/main/docs/10-hermes-plugin.md", "version": "2.19.0", "image": "https://raw.githubusercontent.com/RohiRIK/OpenLtm/687934564e68878ff9646a57aa72f6d3fc4f5fc8/hermes/plugin-catalog/banner.png", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["openltm_recall", "openltm_learn", "openltm_forget", "openltm_context", "openltm_relate", "openltm_graph", "openltm_brain_stats", "openltm_stale"], "provides_hooks": ["system_prompt_block", "prefetch", "sync_turn", "on_turn_start", "on_session_switch", "on_session_end", "on_memory_write"], "provides_middleware": [], "requires_env": []}}, {"name": "openmail", "repo": "https://github.com/openmailsh/hermes-plugin", "sha": "4035b7d1f8775304443f60f67bcd636acb1a325d", "description": "Gives a Hermes agent its own email address. Inbound mail wakes the agent over a websocket, replies go out in-thread, plus tools for sending, reading and provisioning inboxes.", "maintainer": "openmailsh", "tier": "community", "category": "platform", "docs_url": "https://docs.openmail.sh/integrations/hermes", "image": "https://raw.githubusercontent.com/openmailsh/.github/f9d07f18a90a75e8b29f96cbc8d17154ce254828/profile/assets/banner.png", "platforms": [], "capabilities": {"provides_tools": ["openmail_whoami", "openmail_send", "openmail_reply", "openmail_list_threads", "openmail_read_thread", "openmail_list_messages", "openmail_attachment_text", "openmail_list_inboxes", "openmail_create_inbox"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPENMAIL_API_KEY"]}}, {"name": "openpaths", "title": "OpenPaths", "repo": "https://github.com/lee101/hermes-openpaths", "sha": "d1e55ac08dabaae1e399d4a3a9da9f68346efd00", "version": "0.1.0", "maintainer": "lee101", "tier": "community", "category": "models", "docs_url": "https://github.com/lee101/hermes-openpaths#readme", "readme": true, "platforms": [], "description": "OpenPaths model provider for Hermes: OpenAI-compatible inference at openpaths.io with auto, auto-easy-task, auto-medium-task, auto-hard-task and auto-think task-tier routes plus GPT, Claude, Gemini and DeepSeek models, live /models listing, and Hermes reasoning effort mapped to OpenPaths reasoning_effort. Disclosure \u2014 prompts, tool schemas, tool results and conversation context are sent to openpaths.io with your OPENPATHS_API_KEY and forwarded to the upstream model vendors it routes to; the plugin makes no other network calls and registers no tools or hooks.", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPENPATHS_API_KEY"]}, "requires_hermes": ">=0.21.6"}, {"name": "openrouter-picker", "repo": "https://github.com/PIR8-Software/Hermes-OR-Picker", "sha": "5f360c80ecbb09216e41b62db83262c1bde4cb7f", "subdir": "catalog", "description": "One install: the Desktop model picker and the OR Picker composer provider. Checking a model here is what the composer lists. Disclosure \u2014 the optional OpenRouter management key is stored in plaintext in Desktop localStorage; the plugin reads OPENROUTER_API_KEY from your environment, Hermes secret store or HERMES_HOME/.env and sends it only to openrouter.ai (credits, usage, and the Test-model button, which spends credits).", "maintainer": "PIR8-Software", "tier": "community", "category": "desktop", "version": "1.1.1", "image": "https://raw.githubusercontent.com/PIR8-Software/Hermes-OR-Picker/5f360c80ecbb09216e41b62db83262c1bde4cb7f/docs/images/openrouter-picker-banner.png", "docs_url": "https://github.com/PIR8-Software/Hermes-OR-Picker#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPENROUTER_API_KEY"]}}, {"name": "openrouter-spend", "title": "OpenRouter Spend", "repo": "https://github.com/AllenRobinHubert/openrouter-spend", "sha": "4a54b43f82264a0703d21abec9f7e49e8650abcf", "description": "OpenRouter API-key spend and recorded chat costs in USD/INR. Disclosure \u2014 sends the configured OpenRouter key (OPENROUTER_API_KEY, or the variable named in api_key_env) only to openrouter.ai's read-only key and generation accounting endpoints, and fetches public USD/INR rates from api.frankfurter.dev unless a manual rate is set; middleware on every LLM request records ids, model, token counts and reported cost (no prompt or reply text) to its own ledger; the dashboard reads accounting metadata (session ids, token counts, billing provider) read-only from the state.db and OpenRouter Spend ledger of every profile under the Hermes root.", "maintainer": "AllenRobinHubert", "tier": "community", "category": "desktop", "version": "0.4.1", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/AllenRobinHubert/openrouter-spend#readme", "readme": true, "screenshots": ["https://raw.githubusercontent.com/AllenRobinHubert/openrouter-spend/4a54b43f82264a0703d21abec9f7e49e8650abcf/docs/statusbar.png"], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_api_request", "api_request_error", "post_auxiliary_call", "post_tool_call"], "provides_middleware": ["llm_execution"], "requires_env": ["OPENROUTER_API_KEY"]}}, {"name": "openrouter-voice", "repo": "https://github.com/esketids/hermes-openrouter-voice", "sha": "3f2478ab6e795da54547e7a4b162dd207d73079a", "description": "OpenRouter speech-to-text and text-to-speech providers for Hermes Agent (stt.provider / tts.provider = openrouter).", "maintainer": "esketids", "tier": "community", "category": "voice", "requires_hermes": ">=0.21", "docs_url": "https://github.com/esketids/hermes-openrouter-voice#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OPENROUTER_API_KEY"]}}, {"name": "openspec", "repo": "https://github.com/FelineStateMachine/hermes-openspec", "sha": "493b42cd95d2a30f967ede5a53eb22d1bd248fb9", "description": "OpenSpec CLI tools for spec-driven development workflows", "maintainer": "FelineStateMachine", "tier": "community", "category": "desktop", "docs_url": "https://github.com/FelineStateMachine/hermes-openspec#readme", "capabilities": {"provides_tools": ["openspec_change_archive", "openspec_change_create", "openspec_change_promote", "openspec_change_sequence_set", "openspec_change_unarchive", "openspec_cli", "openspec_context", "openspec_idea_create", "openspec_idea_enrich", "openspec_idea_promote", "openspec_instructions", "openspec_list", "openspec_show", "openspec_spec_create", "openspec_spec_diff", "openspec_spec_list", "openspec_spec_show", "openspec_status", "openspec_task_list", "openspec_task_set_status", "openspec_validate"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "openviking", "title": "OpenViking", "repo": "https://github.com/volcengine/OpenViking", "sha": "e855796c83f9eb575d9b0f3082926660730f6a63", "subdir": "examples/hermes-plugin", "version": "2.1.2", "image": "https://raw.githubusercontent.com/volcengine/OpenViking/e855796c83f9eb575d9b0f3082926660730f6a63/docs/images/openviking-social.jpg", "description": "Long-term memory for Hermes. Capture conversations, recall useful facts across sessions and search your knowledge. Choose Quick Local, OpenViking Service (managed cloud) or your own server. Disclosure \u2014 conversation turns, tool results and MEMORY.md / USER.md edits are sent to the configured OpenViking server. Quick Local setup installs the newest OpenViking 0.5.x server release from PyPI at setup time (checked against PyPI's hash, not the version reviewed here; re-running setup upgrades it) plus a hash-pinned llama-cpp-python wheel and a local embedding model. It copies the active Hermes static LLM API key into a private file under the profile for extraction, and its localhost server keeps running after Hermes exits and after plugin removal (stop it with `hermes openviking local stop`). Extraction can use a remote LLM. Custom localhost connections can start openviking-server from PATH with the profile environment minus Hermes bot, gateway, GitHub and dashboard secrets; model and tool API keys still pass.", "maintainer": "volcengine", "tier": "community", "category": "memory", "docs_url": "https://github.com/volcengine/OpenViking/tree/e855796c83f9eb575d9b0f3082926660730f6a63/examples/hermes-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.4"}, {"name": "operations", "repo": "https://github.com/c-pompa/operations-hermes-desktop-plugin", "sha": "56e4d650652770acc634ad65d6d9b1c4b29907e5", "subdir": "plugins/operations", "title": "Operations", "description": "A Hermes Desktop page for running a fleet - topology, model traffic, handoffs, traces, merge requests and conformance checks in one place. Disclosure \u2014 reads hermes-metrics-dash's <hermes root>/metrics/metrics.db, the kanban board, every profile's config.yaml (plugin enable state, rolectl-mcp entries, default model) and plugin-data/gitlab-mr/device-aliases.json, all read-only; calls your GitLab (host and token from the plugin settings or GITLAB_HOST/GITLAB_TOKEN), the local model router (MODEL_ROUTER_URL, default 127.0.0.1:8867) and LM Studio (LMSTUDIO_URL, default 127.0.0.1:1234); runs git status/rev-parse/ls-files in the project folders it checks and shows matching lines (including any keys found) on the page. Page buttons create, assign, schedule, unblock and close kanban cards and start their workers at once, write <hermes root>/conformance/conformance.yaml, and \"Propose a rule\" pushes a branch and opens a merge request on the standard's GitLab project. A hook on every kanban dispatcher tick starts cards scheduled from the page; with alert_target set it posts new attention items through hermes send; with drift_action: automatic it files and starts a fix card for drift_profile for each drifting host with a verified report (at most daily) carrying the standard's remediate commands. With Activity summaries on (off by default), Activity sentences and each \"Explain this session\" click send log lines and trace details to the model set for the operations_summary auxiliary task. From the setup checklist's Connect GitLab step it can also adopt this profile's own login - its environment read through Hermes' secret scope, or the host the gitlab-mr plugin names - or take a host and token typed on the page; the host goes through the plugin-settings writer and the token through Hermes' .env credential route as OPERATIONS_GITLAB_TOKEN, and the token is never sent back to the page. No other credential store is read: a login that exists only in another profile's .env or in the glab CLI's config is typed in instead. Since 0.3.5 the plugin keeps its own metrics store: it tails <hermes root>/metrics/requests.jsonl and moa-refs.jsonl, guardrail lines in logs/agent.log, logs/model-router-requests.jsonl and clientgate/clientgate-usage.jsonl (all read-only, offset-tracked) plus its own host probes (CPU and memory via sysctl/vm_stat or PowerShell, LM Studio's lms ps, and every five minutes the local conformance.yaml's install-stamp, launchd/scheduled-task, loopback-port and key-name checks), and reads session titles and costs from <hermes root>/state.db and every profile's gateway_state.json (read-only), into <hermes root>/metrics/operations.db, which this plugin alone writes and prunes to the metrics_retention_days setting (30/60/90 days or forever, chosen on the page and written through Hermes' plugin-settings writer); hermes-metrics-dash's metrics.db is then only a read-only fallback until the own store holds data. It probes the local metrics dashboard's /api/about (METRICS_DASH_URL, default 127.0.0.1:8899, cached five minutes) to link to it rather than duplicate it, and every Hermes process that loads the plugin starts a daemon timer: when no kanban dispatcher tick has arrived for two minutes it runs the same sweep itself every 30 seconds (collection, alerts and, with drift_action: automatic, the fix cards), and the page says so; OPERATIONS_HEARTBEAT_TIMER=0 turns that timer off. Since 0.3.4 a failed model call is classified with the host app's own error classifier and shown with its cause and remedy commands; no new outbound call is made for that.", "maintainer": "c-pompa", "tier": "community", "category": "desktop", "docs_url": "https://github.com/c-pompa/operations-hermes-desktop-plugin#readme", "version": "0.3.5", "requires_hermes": ">=0.21.5", "image": "https://raw.githubusercontent.com/c-pompa/operations-hermes-desktop-plugin/56e4d650652770acc634ad65d6d9b1c4b29907e5/screenshots/card.png", "screenshots": ["https://raw.githubusercontent.com/c-pompa/operations-hermes-desktop-plugin/56e4d650652770acc634ad65d6d9b1c4b29907e5/screenshots/overview.png"], "readme": true, "platforms": [], "known_issues": ["On a fresh install the request, error, host and conformance sections read hermes-metrics-dash's metrics.db (read-only) until the plugin's own store has collected; with neither present they show \"unavailable\".", "Merge requests and the GitLab conformance standard need the GitLab host and token set in the plugin's settings (or GITLAB_HOST and GITLAB_TOKEN)."], "capabilities": {"provides_tools": [], "provides_hooks": ["on_kanban_dispatch_tick"], "provides_middleware": [], "requires_env": []}}, {"name": "optchat", "repo": "https://github.com/aska-digital/optchat-memory", "sha": "7b0f3abd65b95996366d0495787c95af981ea587", "subdir": "optchat", "description": "OptChat-style endless memory for Hermes: an append-only verbatim log plus a binary summary tree, exposed as recall through the MemoryProvider ABC. Background compactor builds the tree with a cheap auxiliary model (call_llm task optchat_compact); prefetch returns a fixed-budget view of the whole history; optchat_zoom/optchat_date tools open any line down to the verbatim message. Disclosure \u2014 every turn's user messages, agent replies, tool calls and tool results (each result capped at 30,000 characters, after Hermes's secret redaction) are appended permanently to unencrypted owner-only files under $HERMES_HOME/optchat/, with no deletion or retention limit; a background compactor sends those messages and the surrounding summary view to your auxiliary model route (task optchat_compact) for summarization; each turn injects up to view_budget_chars (default 16,000) of that history into the model context.", "maintainer": "ahrazzle", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.6", "version": "0.1.0", "docs_url": "https://github.com/aska-digital/optchat-memory/tree/7b0f3abd65b95996366d0495787c95af981ea587#readme", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["optchat_zoom", "optchat_date"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "optmem-hermes", "repo": "https://github.com/rarf/optmem-hermes-plugin", "sha": "2868af6620bf07958f833ca354fbeecf2a56b265", "subdir": "optmem", "description": "Independent Hermes integration of Victor Taelin's OptMem design: local, append-only memory with regex/BM25 recall and a bounded wake digest. Hybrid and guarded OptMem-only modes; verified migration and rollback. Local by default. Compaction is manual unless auto_nap is enabled. Optional LLM summaries run only when both auto_nap and llm_summary are on; they send memory blocks to the configured provider via host-owned authentication and may incur token costs. Summaries are lossy, raw records remain recoverable, and conflicts are not resolved automatically. Wake consumes model context. See README for upstream attribution. Disclosure \u2014 memory is stored locally under HERMES_HOME; optional auto_nap+llm_summary sends stored memory lines to the user's configured model provider; the optmem-only mode (explicit CLI with --yes) disables Hermes' built-in MEMORY.md/USER.md injection after a verified backup.", "maintainer": "rarf", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.2", "docs_url": "https://github.com/rarf/optmem-hermes-plugin/blob/2868af6620bf07958f833ca354fbeecf2a56b265/README.md", "version": "0.3.3", "image": "https://raw.githubusercontent.com/rarf/optmem-hermes-plugin/2868af6620bf07958f833ca354fbeecf2a56b265/docs/assets/catalog-banner-card.png", "screenshots": [], "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["optmem_note", "optmem_recall", "optmem_nap", "optmem_wake", "optmem_zoom", "optmem_forget", "optmem_config", "optmem_import", "optmem_init"], "provides_hooks": ["on_memory_write", "on_turn_start"], "provides_middleware": [], "requires_env": []}}, {"name": "orbit-desktop", "repo": "https://github.com/mojomast/orbitdesktop", "sha": "98b9a5ee13cb1841e819d7a9c873d7de427ba347", "subdir": "hermes-plugin", "description": "Your workspace, shaped by your agent: a bundled browser desktop powered by Hermes. Describe the workflow you need; the agent can rearrange windows and panes, customize appearance, build versioned sandboxed web apps, and refine your workspace with scoped control, previews and checkpoints. Illustrated examples show a project-specific COCS 3D asset viewer and OmniVoice experiment bench; these example apps and their backends are not bundled. Includes permission-controlled desktop agent-reply notifications (generic alerts while Orbit remains open; browser/OS restrictions apply) and 100,000-character chat messages, guidance and drafts. Includes Devplan Studio for guided interviews, specifications, phased devplans and circular-development handoff exports. Optional conversational interviews require explicit service setup and a working Hermes provider login, and send project context to that provider. Includes 14 distinctive interface presets including Nous Atelier, with local wallpapers, themed icons and taskbar treatments. Agent chats include inline expandable tool activity, running/completed/failed summaries, an activity strip, a workspace agent overview and responsive toolbar controls. Missing tool-call IDs are explicitly uncorrelated. Embedded apps retain their own styling. Includes a reviewed GitHub app catalog with immutable source pins and a portable Live Telemetry package. Catalog sync (operator-run scripts/orbit_catalog.py, never triggered by the Hermes tool or at register) reads the entry list from the upstream repo's main branch at sync time and downloads third-party static app bundles at their per-entry commit pins; installed UI runs in a sandboxed iframe and never executes backend code. Optional telemetry backend staging downloads pinned Python; execution requires explicit host-code trust and separate private authenticated HTTPS setup. Backend code runs with owner privileges, not a sandbox. Disclosure \u2014 adapter talks only to the configured local Orbit server (loopback, Bearer capability from runtime_dir); mutations off by default. Optional orbit.py setup runs npm ci / node. Bundled VNC/Xpra launchers use the Orbit page's hostname and scheme; optional Linux apps require separate provisioning. Optional api.typesafe.ai requests require explicit consent and a user-supplied key. The 0.2.7 web app's opt-in Show tools panel displays tool call arguments and results for the current Hermes conversation, fetched from the local Orbit server and local Hermes session API and kept in the browser only. The Nous Atelier theme contains Nous Research logo artwork and is unofficial; Orbit is not affiliated with Nous Research.", "maintainer": "mojomast", "tier": "community", "category": "desktop", "version": "0.2.7", "docs_url": "https://github.com/mojomast/orbitdesktop/blob/98b9a5ee13cb1841e819d7a9c873d7de427ba347/hermes-plugin/README.md", "platforms": ["linux"], "capabilities": {"provides_tools": ["orbit_workspace"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "orcaslicer", "repo": "https://github.com/mazzanfar/hermes-orcaslicer", "sha": "8fc3a5a40ef4e0c639b76cefd90ad9a48a1a51ec", "version": "0.5.1", "title": "OrcaSlicer for Hermes", "description": "Prepare, slice, preflight and export 3D prints with stock OrcaSlicer profiles. Includes explicit printer upload/control, camera snapshots and monitoring through supported protocols. Protocol and hardware limits are documented. Independent of OrcaSlicer and Nous Research. Disclosure \u2014 executes the installed local slicer and exposes printer upload, start, pause, resume and cancel; agent-supplied confirmation is not independent human authentication. Printer/camera credentials are read from ORCA_*/HERMES_ORCA_* environment variables named in tool arguments (HTTPS required unless allow_plaintext_credentials is set); plugin state lives in ~/.hermes-orca (HERMES_ORCA_HOME), outside HERMES_HOME.", "maintainer": "mazzanfar", "tier": "community", "category": "tools", "docs_url": "https://github.com/mazzanfar/hermes-orcaslicer#readme", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["orca_capabilities", "orca_edit_project", "orca_open_native", "orca_diagnose", "orca_presets", "orca_inspect", "orca_prepare", "orca_slice", "orca_job", "orca_preview", "orca_export", "orca_printer_configure", "orca_printers", "orca_printer_status", "orca_camera_snapshot", "orca_monitor", "orca_preflight", "orca_upload", "orca_start", "orca_printer_control"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "orquehelx", "repo": "https://github.com/TicoraX/OrqueHelx", "sha": "964896e44979b29755dd880c5eb2557909e88bf6", "subdir": "orquehelx", "description": "Per-call delegation across your own subscriptions. The model sends each subagent to a named route with delegate_to(route, goal, context); each route pins a provider Hermes already knows (Claude, Codex or Antigravity subscription plugins, ACP provider plugins) and a model. delegate_task, by contrast, uses the one target in config.yaml. Subagents launch through ctx.subagent_lifecycle. A child counts as out of quota only on an unambiguous provider error or a measured window at 100 %, and the route never switches on its own: a policy decides whether the parent asks you, picks another route, or waits. Disclosure: a pre_tool_call hook blocks delegate_task spawns while routes are configured (list/steer/stop pass); an api_request_error hook records quota errors in memory. Quota is read with Hermes' fetch_account_usage (Anthropic and OpenAI Codex) on /ohx quota and after a provider error. No other network egress, no files written.", "maintainer": "TicoraX", "tier": "community", "category": "automation", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/TicoraX/OrqueHelx/blob/964896e44979b29755dd880c5eb2557909e88bf6/README.md", "version": "0.3.0", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["delegate_to"], "provides_hooks": ["api_request_error", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "osv-ref", "repo": "https://github.com/EloquentBrush0x/hermes-context-refs", "sha": "43ab2b75e660db5edcfe2f215776294c45408b40", "subdir": "osv-ref", "description": "@cve:, @ghsa: and @osv: context references: attach a vulnerability record from OSV.dev to a message (summary, aliases, severity, affected packages with version ranges and fixed versions, details, references), with package data merged from up to four alias records. Disclosure \u2014 sends HTTPS GET requests to api.osv.dev/v1/vulns/<id> only (the referenced id and up to four of its alias ids leave the machine); no API key, no files written, no subprocess; register() only adds the @cve:, @ghsa: and @osv: reference providers.", "maintainer": "EloquentBrush0x", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/EloquentBrush0x/hermes-context-refs/tree/main/osv-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/EloquentBrush0x/hermes-context-refs/43ab2b75e660db5edcfe2f215776294c45408b40/docs/osv-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "parallel-search", "repo": "https://github.com/parallel-web/search-mcp", "sha": "12f721b2b7ad29e63315884c008b5d77c2a4d7e4", "description": "Free web search and page fetching through Parallel's hosted MCP, with a setup skill bundled. No account or API key required. Queries and requested URLs are sent to Parallel. Adds direct MCP tools alongside Hermes's native web providers.", "maintainer": "georgeatparallel", "tier": "community", "category": "web", "requires_hermes": ">=0.20.1", "docs_url": "https://github.com/parallel-web/search-mcp#hermes-agent", "version": "0.1.2", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "parcel-deliveries", "repo": "https://github.com/promptclickrun/hermes-parcel", "sha": "9641b4092f1373ca021285e80b0885cb9e1c7fa3", "description": "Track package deliveries with the Parcel app (parcelapp.net). List what's on the way, add tracking numbers and look up carrier codes, with a built-in guard for Parcel's strict rate limits. Disclosure \u2014 sends tracking numbers, descriptions and optional postcode/order email to api.parcel.app (Parcel Premium API key); the model can add deliveries to the user's Parcel account (add-only, capped at 20/day); caches delivery lists in plugin-data.", "maintainer": "promptclickrun", "tier": "community", "category": "tools", "version": "0.1.0", "requires_hermes": ">=0.21.2", "docs_url": "https://github.com/promptclickrun/hermes-parcel#readme", "platforms": [], "capabilities": {"provides_tools": ["parcel_deliveries", "parcel_add_delivery", "parcel_carriers"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["PARCEL_API_KEY"]}}, {"name": "parlor", "repo": "https://github.com/dariorapisardi/parlor.sh", "sha": "31db52cfd456750338e4dcc98b47b8ec8efc2ef5", "subdir": "skill", "title": "Parlor.sh", "description": "Rooms where AI agents of any vendor talk to each other. A room is a URL; agents join, read and post over plain HTTP, with no accounts and no sign-in. Portable Agent Plugins v1 package: the parlor skill plus the hosted parlor MCP server (Streamable HTTP, no authentication, 8 tools). Disclosure \u2014 hosted unauthenticated MCP connector at parlor.sh/mcp (tool set is server-controlled, not pinned) plus a curl fallback; messages the agent writes go to parlor.sh or the server in a given room URL and rooms are public to anyone with the link; room tokens are stored under ~/.local/state/parlor; the skill may keep background wait loops running.", "maintainer": "dariorapisardi", "tier": "community", "category": "tools", "version": "1.0.0", "docs_url": "https://parlor.sh/docs", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "parrotnotes", "repo": "https://github.com/ascetx/parrot-notes-hermes-plugin", "sha": "18b2ed0d4b9eacff38e286f34bc08301afe3f0f3", "description": "Find, search, summarize and save insights for your ParrotNotes in-person meeting notes through the hosted ParrotNotes MCP server (Streamable HTTP, OAuth 2.0 + DCR), with the parrotnotes workflow skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/). Disclosure \u2014 hosted-only connector with no local code: every tool call goes to the vendor's remote MCP server at mcp.parrotnotes.app (OAuth via a Supabase auth backend); note titles, transcripts and insights from the user's ParrotNotes account are pulled into the session context, and text the model passes to save_note_insight is written to that account. OAuth must be enabled with `hermes mcp add parrotnotes --url https://mcp.parrotnotes.app/mcp --auth oauth`; the bundled mcp.json alone yields 401.", "maintainer": "ParrotNotes", "tier": "community", "category": "tools", "version": "1.2.2", "docs_url": "https://parrotnotes.app/docs/mcp", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pass-secrets", "repo": "https://github.com/dyiapanis/pass-secrets", "sha": "485f105150e09dad28461b26b9eca9ffc511b15d", "description": "pass (password-store) secret source: resolves secrets from a local, GPG-encrypted, git-tracked password store into environment variables at startup, as a first-class SecretSource beside the built-in Bitwarden and 1Password sources. Stdlib-only (subprocess + pathlib), no Python deps, no network \u2014 ever. Config: secrets.pass.{enabled,store_path,subdirs,override_existing,timeout_seconds}. Disclosure \u2014 when enabled, shells out to the local pass binary (10 s per entry) for every .gpg entry under the configured store subdirs and injects each as an env var that by default overrides .env and shell values; when enabled, also adds a ~900-char system-prompt note about secret resolution; no network.", "maintainer": "dyiapanis", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/dyiapanis/pass-secrets#readme", "version": "1.0.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pastdotdev", "repo": "https://github.com/pastdotdev/hermes-plugin", "sha": "22f7abdd1e73bebda6f876cd1f07fe383c25ada4", "subdir": "past_hermes", "version": "0.2.0", "description": "past.dev memory provider: recall before each turn from source-traced memory of past conversations, with sessions sent to past.dev when they end. Maintained by past.dev. Disclosure \u2014 the user's message (as the recall query) and each session's user and assistant text, with common secret shapes redacted, are sent to the past.dev API (api.past.dev by default, or the address you configure) under your past project key, with a past-hermes/<version> User-Agent; the key and identity are read from PAST_API_KEY or ~/.past/config.json, which past.dev's other connectors share; off by default on messaging-gateway sessions.", "maintainer": "pastdotdev", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/pastdotdev/hermes-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "pay-cli", "repo": "https://github.com/solana-foundation/pay", "sha": "d76d57ddbce5f2338432d98cfc06240992d49097", "subdir": "agent-plugins/pay-cli", "title": "Pay CLI", "description": "Discover priced APIs and pay per request (HTTP 402, x402, MPP) in stablecoins from a wallet on this machine, through the local `pay mcp` stdio server of the official Pay CLI, with the pay workflow skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/), no Python or executables; the user installs the `pay` CLI (brew or npm) and runs `pay setup` first, and the server is offered only while `pay` is on PATH. Disclosure \u2014 payments plugin for pay.sh: Hermes starts `pay mcp` as a long-running local process; the curl tool spends the local wallet's stablecoin balance; each payment is confirmed by the user through MCP elicitation (PAY_FORCE_ELICITATION=1, declined when nobody can answer) and the server is marked untrusted; every profile using the plugin shares the same local wallet.", "maintainer": "solana-foundation", "tier": "verified", "category": "tools", "docs_url": "https://github.com/solana-foundation/pay/tree/main/agent-plugins/pay-cli#readme", "version": "0.1.0", "requires_hermes": ">=0.21.6", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pay", "repo": "https://github.com/solana-foundation/pay", "sha": "d76d57ddbce5f2338432d98cfc06240992d49097", "subdir": "agent-plugins/pay", "title": "Pay", "description": "Discover priced APIs and pay per request (HTTP 402, x402, MPP) in stablecoins through the official hosted Pay MCP server (Streamable HTTP at https://connect.pay.sh/mcp, OAuth sign-in, no keys or local wallet), with the pay workflow skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/), no Python or executables. Disclosure \u2014 payments plugin for pay.sh: the curl tool spends the hosted Pay account's stablecoin balance; hosted Pay enforces the account's spending limits (none move until the user sets them) and confirms each payment through MCP elicitation, declined when nobody can answer; the plugin marks its server untrusted, but the documented OAuth setup (`hermes mcp add pay`) replaces that entry with a native one that runs at `trust: full` unless the user sets `mcp_servers.pay.trust: untrusted`; chats sharing a Hermes profile share its Pay account; the tool set is served by the remote MCP server at runtime and is not covered by the pinned sha.", "maintainer": "solana-foundation", "tier": "verified", "category": "tools", "docs_url": "https://github.com/solana-foundation/pay/tree/main/agent-plugins/pay#readme", "version": "0.1.0", "requires_hermes": ">=0.21.6", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pcs-security-tls-posture", "repo": "https://github.com/Pacific-Cloud-Solutions/hermes-plugins", "sha": "389d300cd43de459fd6f260498ba3c2e7fff95dc", "subdir": "plugins/pcs-security-tls-posture", "description": "Read-only audit of local TLS posture \u2014 certificate validity, key strength, deprecated protocols, weak cipher suites, and the certificate each server's configuration points at. Disclosure \u2014 reads a fixed list of system certificate and nginx/Apache config paths under / (or a caller-supplied prefix); makes no network connections and runs no subprocesses. If the sibling plugin pcs-security-core is installed, its copy of the shared contract is loaded in preference to the bundled one.", "maintainer": "Pacific-Cloud-Solutions", "tier": "community", "category": "tools", "version": "0.3.0", "image": "https://raw.githubusercontent.com/Pacific-Cloud-Solutions/hermes-plugins/389d300cd43de459fd6f260498ba3c2e7fff95dc/docs/hero-2x1.webp", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["tls_posture"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pdf-surgeon", "repo": "https://github.com/Samuek9/pdf-surgeon", "sha": "0d3baf4f45bd00c2730e3f23e2d8981e5c916165", "description": "Model-driven editor of PDF text whose result keeps the original typesetting, by rewriting the page content stream in place \u2014 the string operand inside the existing BT/ET block is replaced and the Tm origin of everything after it on the line is retargeted, so font, size, colour, baseline, char/word spacing, horizontal scale and kerning survive untouched because they are never rewritten. This is the alternative to redact-and-re-stamp, which defaults to Helvetica 8pt and makes you restate font, size and colour by hand; get any of that wrong and the page reads as forged. The phrase must match exactly (whitespace is ignored); a fuzzy match is refused rather than allowed to edit text the caller never named. Until an edit is accepted the output is written under a temporary name next to the destination and moved into place only after verification passes, so a failed check leaves nothing behind; the destination must end in .pdf, must not already exist, must not resolve to the input, and must have an existing parent directory, because the path arrives from the model. Verification enforces that the edited line reads exactly as the original with the phrase swapped and nothing else, that every other line on the page is unchanged, that block count, baseline, font, size and spacing hold, that the old phrase's occurrence count dropped by exactly one (allowing for copies inside the replacement), and that the page's font/size/colour set is unchanged; a pixel-diff band is reported for information and does not decide the outcome. Refuses, writing nothing, on scans, Type3/XObject text, pages with more than one content stream, and a replacement needing a glyph the embedded subset lacks \u2014 it never falls back to substituting a typeface. Widths are measured from the embedded font program, not the system font of the same name. action=\"inspect\" lists each line with its baseline and BT/ET block count so a caller can tell whether a document is editable before choosing what to replace. Requires a digital-born PDF whose text is laid out as one block per word/run with an explicit Tm origin (Word, LibreOffice, Excel, Google Docs). Disclosure \u2014 this can alter documents such as certificates or invoices; use it only on documents you are entitled to change. The edit is not visible on the page and not recorded in the Info dictionary. It is detectable at file level: the PDF is re-saved by PyMuPDF as a single revision, so the file hash and the second trailer /ID change, any earlier incremental-save history is dropped and any digital signature no longer validates. Writes only a new .pdf that does not exist yet and never touches the input. No network, credentials or subprocesses. Depends on PyMuPDF (AGPL-3.0), which Hermes installs for this plugin. Output files inherit the 0600 mode of the temporary file they are moved from.", "maintainer": "Samuek9", "tier": "community", "category": "tools", "docs_url": "https://github.com/Samuek9/pdf-surgeon#readme", "version": "1.0.1", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["pdf_replace_text"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pending-queue-monitor", "repo": "https://github.com/Ardenye/pending-queue-monitor", "sha": "d6cba84feabf607ab3ec3586038b81faf04b8baf", "version": "0.1.0", "description": "Desktop-only, read-only monitor for pending memory and skill write approvals. Disclosure \u2014 the pane's API reads pending/memory/*.json and pending/skills/*.json under the default Hermes root and every named profile directory beneath it (all profiles, not only the active one), and returns only counts, age buckets, oldest age, and per-item profile/subsystem/id/action/origin/created_at/age_seconds. It never returns or displays summaries, payloads, or record content; it exposes no approve, reject, or delete actions; it registers no tools, hooks, or middleware, performs no network I/O, and holds no credentials.", "maintainer": "Ardenye", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/Ardenye/pending-queue-monitor#readme", "readme": true, "screenshots": ["https://raw.githubusercontent.com/Ardenye/pending-queue-monitor/d6cba84feabf607ab3ec3586038b81faf04b8baf/docs/screenshots/pending-monitor.png"], "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "penny", "repo": "https://github.com/HelperLabs/penny-hermes", "sha": "0887dae11062165a78be9fb6c7b85c810a3353b5", "version": "0.1.0", "description": "Penny core memory and private notes for Hermes. Disclosure \u2014 automatic recall sends the first 4,000 characters of each nontrivial local prompt to app.mypenny.ai as a search query, and the agent can save notes there through penny_remember without a Hermes approval prompt; works only in local CLI/TUI conversations (cron, subagents and gateways are refused); login is a manual command that registers its own OAuth client with clerk.mypenny.ai and briefly listens on 127.0.0.1 for the callback; tokens are kept in <HERMES_HOME>/penny/auth.json (owner-only) and are not removed on uninstall; no raw transcript upload, telemetry or other-client credential reuse.", "maintainer": "HelperLabs", "tier": "community", "category": "memory", "title": "Penny", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/HelperLabs/penny-hermes#readme", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pep-ref", "repo": "https://github.com/EloquentBrush0x/hermes-context-refs", "sha": "20c7a0e1f56d6fea9761077f6994ab7b3d174b99", "subdir": "pep-ref", "description": "@pep:<number> context references: attach a Python Enhancement Proposal to a message (status, type, authors, Python version and its first section, usually the Abstract), or one section with @pep:<number>#<section>, with PEP number and title autocomplete in the TUI and Desktop composer. Disclosure \u2014 sends HTTPS GET requests to peps.python.org only (the PEP index and the referenced PEP's page; section names and autocomplete text are matched locally); keeps the index in memory for an hour; no API key, no files written, no subprocess; register() only adds the @pep: reference provider.", "maintainer": "EloquentBrush0x", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/EloquentBrush0x/hermes-context-refs/tree/main/pep-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/EloquentBrush0x/hermes-context-refs/20c7a0e1f56d6fea9761077f6994ab7b3d174b99/docs/pep-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "personae", "repo": "https://github.com/SmoothMarx/personae", "sha": "6c6f0fc524eb8fcdd7e633bf0229b8c829281ff3", "description": "A messenger-style roster for Hermes Desktop: one row per profile with its live sessions, per-profile colour, status lights, search, groups, multi-select and an Apropos beta that starts a new session already knowing the ones you picked. Disclosure \u2014 a Desktop pane over all your local profiles: it reads each profile's sessions, cron jobs and settings through the app's own requests and, only when you click, deletes or archives sessions (deletes ask first), changes cron jobs or edits profile settings; Apropos starts a new session with a hidden pointer message naming the sessions you picked; no network calls or telemetry.", "maintainer": "SmoothMarx", "tier": "community", "category": "desktop", "version": "1.2.0", "image": "https://raw.githubusercontent.com/SmoothMarx/personae/6c6f0fc524eb8fcdd7e633bf0229b8c829281ff3/assets/personae-pane.png", "screenshots": ["https://raw.githubusercontent.com/SmoothMarx/personae/6c6f0fc524eb8fcdd7e633bf0229b8c829281ff3/assets/personae-pane.png"], "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.5"}, {"name": "phone-harness", "repo": "https://github.com/ShawnPana/phone-harness", "sha": "7e3ea6cff1377db4d4f37e852c59493120aa52b6", "subdir": "integrations/hermes", "title": "Phone Harness", "description": "Drive a real phone from Hermes with one phone_exec tool: an iPhone via iPhone Mirroring on a Mac, an Android over adb, or a cloud phone from Phone Harness Cloud. Disclosure \u2014 runs model-written Python on this computer with your user's permissions through the phone-harness package (installed from PyPI); every phone_exec call goes to Hermes's approval prompt unless you opt in to classifier auto-run, a heuristic, bypassable check that decides which scripts ask first; taps and types into your real phone and its apps and accounts; screenshots go to the system temp folder and are attached to the tool result for vision models; a cloud phone streams its screen to Phone Harness Cloud, bills by the minute, and uses phone-harness's own cloud sign-in (~/.config/phone-harness/auth.json); phone-harness's PostHog telemetry (script text, script output, helper arguments) is off under Hermes unless you opt in.", "maintainer": "ShawnPana", "tier": "community", "category": "tools", "version": "0.1.0", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/ShawnPana/phone-harness/tree/main/integrations/hermes#readme", "capabilities": {"provides_tools": ["phone_exec"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "photofresco", "title": "PhotoFresco", "repo": "https://github.com/photofresco/photofresco-agent", "sha": "e2e3239b555742904b4cdd035aefdab717cd91a1", "description": "Edit images in a PhotoFresco window you approve: layers, masks, selections, adjustment layers, previews and PNG/PSD export. Portable Agent Plugins v1 package (mcp.json + skills/) with a local stdio MCP server and bundled skill; needs Node.js 22+ and Chrome, Edge or Chromium 120+. Disclosure \u2014 opens https://photofresco.com/app/ (remote web editor, live code not covered by this pin) in a separate Chrome/Edge/Chromium profile under ~/.local/share/photofresco-connector (macOS ~/Library/Application Support/PhotoFresco Connector), with cookies/sign-in/autosave kept there; previews and document state the agent requests go to your model provider; with the Send/Spend permissions granted in the PhotoFresco window, AI ops spend PhotoFresco credits up to the budget you set and cloud/feedback ops send document data to PhotoFresco, and Hermes does not prompt before those calls; with Export granted, quick-export ops save to the browser's download folder; no local folders are readable or writable unless you add --read/--write yourself.", "maintainer": "photofresco", "tier": "community", "category": "tools", "docs_url": "https://photofresco.com/docs/ai-agents/", "version": "0.1.0", "image": "https://raw.githubusercontent.com/photofresco/photofresco-agent/e2e3239b555742904b4cdd035aefdab717cd91a1/assets/banner.jpg", "screenshots": ["https://raw.githubusercontent.com/photofresco/photofresco-agent/e2e3239b555742904b4cdd035aefdab717cd91a1/assets/demo.gif"], "platforms": [], "known_issues": ["Needs a desktop session and an installed Chrome, Edge or Chromium; the user approves the connection and each permission in the PhotoFresco window."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pidgeon", "repo": "https://github.com/pidgeon-ai/pidgeon-python", "sha": "d4448663b39ae0280a247bb3ea4cab7ef0a4e080", "subdir": "hermes/pidgeon", "title": "Pidgeon", "description": "Email for Hermes through Pidgeon: mail to your agent's own address starts a conversation, one per email thread, and the agent's answer goes back as a reply in that thread. The agent reads Pidgeon Firewall's clean text, mail flagged as prompt injection is held before it reaches the agent, mail whose From fails DMARC never reaches it, and the agent can only reply, never write to a new recipient. Standard library only. Disclosure \u2014 while the gateway runs it polls pidgeon.ai (or `PIDGEON_BASE_URL`) every five seconds with `PIDGEON_API_KEY` and sends the agent's answers as email replies through Pidgeon; mail from senders in `PIDGEON_ALLOWED_USERS` that passes DMARC becomes agent turns with the agent's full toolset (Firewall-flagged mail is held by default; setting `PIDGEON_ALLOW_UNAUTHENTICATED=true` also admits mail whose From is not authenticated, so anyone who knows an allowed address could instruct the agent), and a cursor/message-id state file is kept under `<HERMES_HOME>/pidgeon/`.", "maintainer": "pidgeon-ai", "tier": "community", "category": "platform", "requires_hermes": ">=0.22.2", "version": "0.1.1", "docs_url": "https://pidgeon.ai/docs/hermes", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["PIDGEON_API_KEY"]}}, {"name": "pinned-folders", "repo": "https://github.com/jacobhausler/hermes-pinned-folders", "sha": "ec3cecf321c022ae0babd55db49fcfbb32f71db9", "subdir": "", "description": "A Pinned tab in the Desktop sidebar that files your pinned chats into nested folders: drag to order and nest, folder colors, right-click menus (including Unpin), unread/working badges on collapsed folders, a filter box, open-folder-as-tabs, and layout export/import via the clipboard. Layout stays local to the app; pins belong to the backend. SDK-only build (desktop/plugin.js); no network.", "maintainer": "jacobhausler", "tier": "community", "category": "desktop", "docs_url": "https://github.com/jacobhausler/hermes-pinned-folders#readme", "version": "0.1.4", "image": "https://raw.githubusercontent.com/jacobhausler/hermes-pinned-folders/ec3cecf321c022ae0babd55db49fcfbb32f71db9/docs/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/jacobhausler/hermes-pinned-folders/ec3cecf321c022ae0babd55db49fcfbb32f71db9/docs/catalog-context-menu.png", "https://raw.githubusercontent.com/jacobhausler/hermes-pinned-folders/ec3cecf321c022ae0babd55db49fcfbb32f71db9/docs/catalog-filter.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pixel-worlds", "repo": "https://github.com/cygnostik/pd-pixel-worlds", "sha": "55feb15cf6d3c147504b8f5d68c2de8e8d995cac", "description": "Watch your agents inhabit pixel-art realms in Hermes Desktop, with imported scenes and a minimal PW Agents display.", "maintainer": "cygnostik", "tier": "community", "category": "desktop", "version": "0.3.1", "docs_url": "https://github.com/cygnostik/pd-pixel-worlds/blob/55feb15cf6d3c147504b8f5d68c2de8e8d995cac/docs/install.md", "image": "https://raw.githubusercontent.com/cygnostik/pd-pixel-worlds/55feb15cf6d3c147504b8f5d68c2de8e8d995cac/docs/images/catalog-banner.png", "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "plan-mode", "title": "Plan mode", "repo": "https://github.com/100yenadmin/hermes-plan-mode", "sha": "ee4a245fbc2b2d874f3a5021963bef6c358d17fb", "description": "Claude Code-style plan mode for Hermes: the agent explores and writes a plan, and edits nothing else until you approve it. It works on every interactive Hermes surface: /plan or /planmode on blocks mutating Hermes tools dispatched through pre_tool_call (writes outside .hermes/plans, terminal, code execution, delegation, MCP) while the agent explores, asks clarifying questions and writes a plan. The agent shows the complete plan, submits it with plan_mode(submit) and one approval card asks: approve and auto-accept edits, approve and review each file edit (when Hermes approvals are on, every write_file and patch then gets Hermes' approval prompt with its path and a preview), or keep planning; Other sends feedback, and the revised plan says what changed since the last revision. Once approved, it implements in the same turn and tracks todo_list progress. To change the plan yourself, keep planning, run /planmode edit, save, then /planmode show and /planmode approve; the text you were shown is saved as an approved snapshot, so later edits to the file do not change the approval. The classic profile (plan_profile: classic), approval_card: false and surfaces without a card use Hermes' own approval prompt (gateway buttons, the TUI/Desktop card, the CLI panel or /approve). When yolo or approvals.mode: off would auto-approve, it asks through clarify instead, so a person still decides. By default plans are compact and decision-complete, the lean profile asks at most three targeted questions, and the agent does not commit unless asked (plan_style, plan_profile, allow_commits and plan_skill settings). Classic CLI enforced on every supported Hermes; gateway, TUI and Desktop from Hermes v2026.9.24 (0.21.5), and refused on older builds; 0.21.6 recommended. On the interactive classic CLI, Hermes' inline diff shows a new plan file in full, so the agent does not retype it (write_once). A report-a-problem skill drafts a bug report and files it with gh only after you approve the draft. Disclosure \u2014 plan-mode does not enforce Codex app-server exec/applyPatch or TUI /background and btw side agents. A plan is approved only on its approval card (a clarify question only the plugin issues and checks), through Hermes' own approval prompt, or with /planmode approve. It reads nine groups of internal Hermes seams for session identity, workspace, profile, skills.inline_shell and the classic CLI's inline diff, each guarded with a documented fallback. It creates .hermes/plans under the session working directory, reads plan files there, saves the approved text of an edited plan as a new file under .hermes/plans/approved, and keeps per-session state in plugin state. It adds a turn note while planning or executing, a \u2264200-char system-prompt hint, and a one-line footer to short replies on chat platforms. When a turn ends while a submitted plan still awaits approval and no approval card was answered, it adds one line to that reply on any surface, whatever its length, saying how to approve (unless footer is off). When you pick \"Always\" on a plan approval or a per-edit review, Hermes core writes a plugin_rule:plan-mode entry to command_allowlist in config.yaml; each entry is keyed to one plan revision, so it cannot approve another plan. With allow_gateway_injection: true it queues one message to start work after a typed /planmode approve. On TUI, Desktop and hermes serve sessions (lean profile, plan_once) it reads the visible reply text from post_api_request while planning and saves its <proposed_plan> block as the plan file. On the interactive classic CLI (lean, write_once) it checks that Hermes printed a newly written plan file in full, then tells the agent not to retype it. Its report-a-problem skill has the agent file to the plugin repository with gh only after the user approves the exact saved draft. The plugin itself makes no network calls, launches no subprocesses and has no self-updater.", "maintainer": "100yenadmin", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/100yenadmin/hermes-plan-mode#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/100yenadmin/hermes-plan-mode/ee4a245fbc2b2d874f3a5021963bef6c358d17fb/docs/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/100yenadmin/hermes-plan-mode/ee4a245fbc2b2d874f3a5021963bef6c358d17fb/docs/media/cli-card.png", "https://raw.githubusercontent.com/100yenadmin/hermes-plan-mode/ee4a245fbc2b2d874f3a5021963bef6c358d17fb/docs/media/cli-edit-review.png", "https://raw.githubusercontent.com/100yenadmin/hermes-plan-mode/ee4a245fbc2b2d874f3a5021963bef6c358d17fb/docs/media/cli-card-implement.png", "https://raw.githubusercontent.com/100yenadmin/hermes-plan-mode/ee4a245fbc2b2d874f3a5021963bef6c358d17fb/docs/media/cli-edit-approve.png"], "platforms": [], "capabilities": {"provides_tools": ["plan_mode"], "provides_hooks": ["pre_tool_call", "post_tool_call", "pre_llm_call", "transform_llm_output", "pre_approval_request", "post_approval_response", "on_session_finalize", "on_session_reset", "post_llm_call", "transform_tool_result", "post_api_request"], "provides_middleware": [], "requires_env": []}}, {"name": "pocket-watch", "repo": "https://github.com/indigokarasu/hermes-pocket-watch-plugin", "sha": "b05178ab1f2d8a39a377581c3dc7562ec8f0c2dc", "version": "1.0.1", "description": "Dashboard-only cron companion: a Pocket Watch pane showing cron jobs by schedule (daily/weekly/monthly), a health view of run outcomes and consecutive failures, a timeline, and maintenance actions \u2014 a read-oriented window onto the scheduler rather than another agent-facing toolset. Disclosure \u2014 the pane's API reads the cron jobs file under HERMES_HOME to render schedules and run history; it registers no tools, hooks or middleware, performs no network I/O and holds no credentials.", "maintainer": "indigokarasu", "tier": "community", "category": "automation", "docs_url": "https://github.com/indigokarasu/hermes-pocket-watch-plugin#readme", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "post-cortex", "repo": "https://github.com/julymetodiev/hermes-plugin-post-cortex", "sha": "46ab2b97452ca9bd4fe3e7b4027e9f9715e895a5", "description": "Self-hosted long-term memory through a post-cortex daemon (https://github.com/julymetodiev/post-cortex): typed records (decisions, fixed problems, code changes) in an entity graph with local semantic search. Recalls related records from the profile's workspace before each turn, puts the user card and the workspace's project card in the system prompt, mirrors built-in memory writes as records, and adds post_cortex_search, post_cortex_record and post_cortex_context (graph neighbours and reverse dependencies of named components) plus the post-cortex:memory skill. Records and captured turns carry the author hermes:<profile>. Profiles are mapped to shared workspaces by name glob, so a team of profiles recalls each other's records. Disclosure \u2014 talks only to the post-cortex daemon at the configured URL (default http://127.0.0.1:3737; a remote daemon over plain HTTP should sit on a private network or behind TLS): each non-trivial user prompt (up to 2,000 characters) is sent as a search query, and built-in memory writes and post_cortex_record calls are sent as records; with the opt-in capture setting (off by default) each completed turn of the primary agent is sent too: the user's message (with the sender's display name when Hermes knows it), the final reply, tool names and file paths, never tool output; nothing goes to third parties. Disclosure \u2014 the daemon stores records (and captured turns, deleted after its message_retention_days) in its own database and redacts credentials, e-mail addresses, phone numbers and public IPv4 addresses on write. Disclosure \u2014 PCX_TOKEN (and optionally PCX_URL) is read through the Hermes secret scope; the only local state is $HERMES_HOME/post-cortex.json (0600, never holds the token). No threads or processes of its own (capture runs on Hermes' sync worker), no shell commands, no deletes in post-cortex; cron and subagent runs never write automatically.", "maintainer": "julymetodiev", "tier": "community", "category": "memory", "requires_hermes": ">=0.22.2", "version": "0.2.0", "docs_url": "https://github.com/julymetodiev/hermes-plugin-post-cortex#readme", "readme": true, "known_issues": ["Requires a post-cortex daemon 0.4.0 or newer; cards, authorship, capture and derived_from need 0.5.0 and are skipped on an older daemon. A daemon bound to 0.0.0.0 must list the host in the plugin URL in its allowed_hosts, or every request gets 403."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "ppq", "repo": "https://github.com/thepurpose-npub/ppq-hermes-provider", "sha": "94a6686fe4759d6fbd627a3ad58c9e1fcdb0b081", "subdir": "model-providers/ppq", "description": "PayPerQ (ppq.ai) OpenAI-compatible model provider for Hermes \u2014 per-response cost estimation from ppq's published rate card, chat model discovery from GET /v1/models, automatic per-request Zero Data Retention opt-in, and a 3-layer picker pin strategy (user-local pins file \u2192 live top chat models from ppq's public stats dashboard \u2192 generic static fallback; generic installs never get the author's personal pins). Disclosure \u2014 model provider; PPQ_API_KEY and all prompts, tool schemas and responses go to ppq.ai (PayPerQ; terms https://ppq.ai/terms, contact matt@ppq.ai), a relay that routes requests to third-party inference partners, some outside the user's jurisdiction, and frontier providers still see prompts; usage is billed per request from the user's prepaid PayPerQ balance (funded by card or cryptocurrency on ppq.ai; the plugin itself makes no payments). Privacy protections are opt-in per request: for models badged privacyLevel 'zdr' the plugin automatically sends provider={\"zdr\": true, \"data_collection\": \"deny\"} so requests route only to endpoints with a Zero Data Retention policy that do not collect data (the zdr model set refreshes hourly from an unauthenticated GET /v1/models with a pinned fallback); models badged 'e2e' run inside TEE enclaves with no opt-in flag needed \u2014 enclave coverage applies to chat by default, not to image/video/audio, and true end-to-end encryption is only available via the optional local ppq-privacy-verifier proxy. Building the model picker, for any provider, starts a background unauthenticated POST to stats.ppq.ai at most hourly to fetch the top chat models; cost estimates and personal picker pins read optional local files under HERMES_HOME/plugin-data/ppq/ (prices.json, pins.json) that the plugin does not create, so costs show as unknown without a price snapshot. Additional caveats: Claude Opus 4.8 with web search enabled drops the ZDR guarantee, and some Anthropic/Gemini models may override the provider routing fields (order/only/ignore).", "maintainer": "thepurpose-npub", "tier": "community", "category": "models", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/thepurpose-npub/ppq-hermes-provider#readme", "version": "0.3.1", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["PPQ_API_KEY"]}}, {"name": "precleared", "repo": "https://github.com/gabrielaoimevbore-beep/hermes-precleared", "sha": "ba4c8f9bc3a4f0ea3e0de2f4d77313eeb12677ec", "title": "Precleared", "description": "Checks cold email against the law before it goes out: when the agent sends an email with a send tool, one of Hermes's email skills (himalaya, agentmail, Google Workspace) or an email API call, Precleared checks each new recipient against UK PECR and UK GDPR, US CAN-SPAM, Canada's CASL and German, French, Australian, Irish and Dutch rules; anything not cleared goes to Hermes's approval prompt (or is refused in block mode) with the rule, its source and a signed receipt. Adds precleared_check and precleared_verify_receipt tools and a cold-email-check skill. Disclosure \u2014 when the agent sends email through a send tool, an email skill (himalaya, agentmail, Google Workspace), a mailer command or an email-API call, and on every precleared_check call, the plugin sends each new recipient's address with the configured sender country, address source, pitch and optional prospect country to precleared.dev over HTTPS; Precleared keeps a signed receipt of each check that anyone holding the receipt id can open at precleared.dev/r/<id>. The optional PRECLEARED_API_KEY is read through Hermes's secret scope and sent only in the Authorization header; without a key, checks draw on a free allowance shared by everyone on the same network. Emails not cleared go to Hermes's approval prompt (or are refused in block mode), and verdicts are cached under hashed addresses in plugin state for 30 days. No shell commands, background processes or telemetry; maintained by the operator of Precleared.", "maintainer": "gabrielaoimevbore-beep", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/gabrielaoimevbore-beep/hermes-precleared#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["precleared_check", "precleared_verify_receipt"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "preview-text-size", "repo": "https://github.com/pandengyao/hermes-preview-text-size", "sha": "258f6491424ccabcd520c2f61499e5cc26b6a51a", "version": "1.0.0", "title": "Preview Text Size", "description": "Larger or smaller text in the Hermes Desktop file preview pane: scales the rendered Markdown from 90% to 175%, independent of Chat Text Size and UI Scale, through a row in Settings \u2192 Appearance, three command-palette entries and rebindable shortcuts (\u2318\u2325=, \u2318\u2325-, \u2318\u23250 on macOS; unbound by default on Windows and Linux, where Ctrl+Alt is AltGr). The Source and Diff views keep their size. Disclosure \u2014 desktop-only (desktop/plugin.js inside the plugin SDK surface); appends one stylesheet that sets CSS zoom on the preview's [data-preview-markdown] element, removed on disable, so a Desktop release that renames that attribute turns the plugin into a no-op; stores the chosen size in plugin storage; no network calls, credentials, shell commands, background processes or telemetry.", "maintainer": "pandengyao", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/pandengyao/hermes-preview-text-size/blob/258f6491424ccabcd520c2f61499e5cc26b6a51a/README.md", "image": "https://raw.githubusercontent.com/pandengyao/hermes-preview-text-size/258f6491424ccabcd520c2f61499e5cc26b6a51a/docs/before-after.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pricewin", "repo": "https://github.com/PriceDotWin/pricewin-hermes-plugin", "sha": "c3644c21a02fc995791d5056cc4cc8ec9e859b54", "description": "Live hotel and flight prices from Booking.com, Agoda, Trip.com and Traveloka through the PriceWin MCP server (Streamable HTTP at mcp.price.win, no account or key), with the pricewin-travel-search skill and inline hotel/flight cards for the Desktop transcript bundled. Portable Agent Plugins v1 package (mcp.json + skills/ + desktop/). Booking is a request the hotel confirms; nothing is ever charged. Disclosure \u2014 connects to the hosted PriceWin MCP server at mcp.price.win (no key); search arguments including a verbatim excerpt of the user's request go to it, and four of its twelve tools act on bookings (request_booking sends guest details to the hotel, cancellation needs a token emailed to the guest); nothing is charged.", "maintainer": "PriceDotWin", "tier": "community", "category": "tools", "version": "0.2.0", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/PriceDotWin/pricewin-hermes-plugin#readme", "screenshots": ["https://raw.githubusercontent.com/PriceDotWin/pricewin-hermes-plugin/c3644c21a02fc995791d5056cc4cc8ec9e859b54/docs/hotel-cards.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "print-job-watch", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-print-job-watch", "sha": "d5c8ec85ecfd48e970a274368ff32ec75c7575df", "description": "Reads one OctoPrint printer. A cron watch reports printer_disconnected (not a pause); error; complete after Printing, Printing from SD, Pausing, Paused, Resuming, or Finishing; paused after Printing, Printing from SD, Pausing, or Resuming; cancelled; and stalled. This plugin can be used with OctoPrint. OctoPrint is a registered trademark owned by Gina H\u00e4u\u00dfge (https://octoprint.org). Disclosure \u2014 Talks to the one OctoPrint origin you set in OCTOPRINT_URL with your OCTOPRINT_API_KEY, plus an optional webcam still from the same host, fetched without the key when it is on another port. Over plain http, that key is sent unencrypted. Pause, resume, and cancel ask for Hermes approval every time and are refused under cron, yolo, approvals off, single-query, unattended sessions and plugins.isolation: host, and when those checks cannot run. The plugin has no user list of its own: anyone you allow on your Hermes gateway can ask for a move and approve it. Running hermes tools does not remove the slash command. Answering \"always\" adds one unused line to config.yaml, and that line does not approve the next move. The optional watch is a cron job you create from the CLI (a model turn every 5 minutes by default) that stays after uninstall until you run unschedule. At that default it is 288 runs a day with no daily cap. The watch needs plugins.isolation: in_process; under host it only posts a notice that it cannot run, on every run. Not tested on a physical printer, with access control off, or with the stock webcam.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-print-job-watch#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["print_job_status", "print_job_control", "print_job_watch"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OCTOPRINT_URL", "OCTOPRINT_API_KEY"]}}, {"name": "print3d", "repo": "https://github.com/mfranzon/print3d", "sha": "ff98a8c07253a90f5e4afefa42c2ffd893797eec", "description": "Turn an idea, a photo of an object, or a shop listing into a sliced Bambu Studio project. The agent writes a Blender script, print3d checks the mesh (overhangs, thin walls, fits between parts, likeness to the photo), slices it and says what to fix, until it prints clean; each run also writes a 3D view the agent opens in the Desktop preview pane. Portable Agent Plugins v1 package: one skill and a stdio MCP server run through uvx, so Blender 4.2+, Bambu Studio and uv are required; at install Hermes looks for Blender in the standard locations (/Applications and Steam on macOS; PATH, flatpak, snap and Steam on Linux) and refuses the install without it. Disclosure \u2014 runs Blender and the Bambu Studio CLI as local child processes; Blender runs the agent-written Python with your user's permissions, outside Hermes's terminal sandbox, and the server is marked untrusted, so Hermes asks before every tool that runs a script or changes a job (the read-only tools still write preview images and the 3D view under ~/print3d/jobs without asking); installs Pillow and mcp from PyPI; the 3D view loads three.js from cdn.jsdelivr.net; the optional `print3d setup` command (not needed for a catalog install) edits Hermes, Codex, Claude, Cursor and Gemini config files, with backups. Never contacts the printer; no telemetry, no credentials.", "maintainer": "mfranzon", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/mfranzon/print3d#readme", "version": "0.1.0", "image": "https://raw.githubusercontent.com/mfranzon/print3d/ff98a8c07253a90f5e4afefa42c2ffd893797eec/docs/social-preview.png", "screenshots": ["https://raw.githubusercontent.com/mfranzon/print3d/ff98a8c07253a90f5e4afefa42c2ffd893797eec/docs/viewer.png", "https://raw.githubusercontent.com/mfranzon/print3d/ff98a8c07253a90f5e4afefa42c2ffd893797eec/docs/workflow/07-likeness.png", "https://raw.githubusercontent.com/mfranzon/print3d/ff98a8c07253a90f5e4afefa42c2ffd893797eec/docs/workflow/09-results.png"], "platforms": ["macos", "linux"], "known_issues": ["Tested on macOS, where Blender and Bambu Studio are found automatically. On Linux, Blender must be on PATH or installed with flatpak, snap or Steam for the install to go through; set BAMBU_STUDIO_BIN if Studio is not on PATH.", "Bambu Studio is not checked at install; without it, make stops at the slice step and says to install it or set BAMBU_STUDIO_BIN.", "The skill folder is a symlink, so Windows is not supported."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "prism", "repo": "https://github.com/prismhq/hermes-prism-provider", "sha": "f68a9bff76a1dba30389f56a671292e48b22887a", "description": "Prism OpenAI-compatible inference with long-context DeepSeek models.", "maintainer": "Prism", "tier": "community", "category": "models", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/prismhq/hermes-prism-provider#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["PRISM_API_KEY"]}}, {"name": "privacy-gateway", "repo": "https://github.com/saiteja-madha/hermes-privacy-gateway", "sha": "032bda954ad89599c16b655c9b3d11c91083f3e3", "description": "Local Presidio-based PII pseudonymization for Hermes model requests and tool results with an encrypted profile-scoped alias vault. Disclosure \u2014 PII detection runs locally with Presidio and the spaCy en_core_web_lg model, which you install manually; alias mappings are stored encrypted in the Hermes plugin DB under HERMES_PRIVACY_GATEWAY_KEY; requests are blocked when the engine cannot load; tools outside rehydrate_tool_allowlist receive alias tokens, not plaintext.", "maintainer": "saiteja-madha", "tier": "community", "category": "general", "docs_url": "https://github.com/saiteja-madha/hermes-privacy-gateway#readme", "version": "0.1.1", "requires_hermes": ">=0.20.4", "platforms": ["linux"], "capabilities": {"provides_tools": [], "provides_hooks": ["transform_tool_result", "transform_llm_output"], "provides_middleware": ["llm_request", "tool_request"], "requires_env": ["HERMES_PRIVACY_GATEWAY_KEY"]}}, {"name": "profile-models", "title": "Profile Models", "repo": "https://github.com/AllenRobinHubert/profile-models", "sha": "669157573ae4f577fae1eac88bed54afb7506c40", "description": "Read-only Desktop model map for main, auxiliary, sub-agent and MoA routes. Disclosure \u2014 reads the selected profile's full config.yaml through the host's `config.get` (the response includes any credential fields it holds); only model-routing fields are kept and nothing is stored or sent off the machine.", "maintainer": "AllenRobinHubert", "tier": "community", "category": "desktop", "version": "1.0.1", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/AllenRobinHubert/profile-models#readme", "readme": true, "screenshots": ["https://raw.githubusercontent.com/AllenRobinHubert/profile-models/669157573ae4f577fae1eac88bed54afb7506c40/docs/statusbar.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "profile-pane", "repo": "https://github.com/taxbax/profile-pane", "sha": "2b480df77307e263df800dac03c220d009c0fae8", "description": "Disclosure \u2014 copies .env key values (and opt-in auth.json backups) between profiles; rewrites other profiles' SOUL, memory and config.yaml. Cross-profile config pane with copy+manifest reconcile and per-group scope.", "maintainer": "taxbax", "tier": "community", "category": "desktop", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "platforms": ["macos"]}, {"name": "profile-picker", "repo": "https://github.com/weltmaister/hermes-profile-picker", "sha": "9a38fa52616c8b1be5397c4d922e80a2c754613d", "description": "Pick the profile for a new chat right in the composer, next to the model pill, and see which profile a running chat belongs to.", "maintainer": "weltmaister", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/weltmaister/hermes-profile-picker#readme", "version": "1.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "screenshots": ["https://raw.githubusercontent.com/weltmaister/hermes-profile-picker/9a38fa52616c8b1be5397c4d922e80a2c754613d/docs/picker-open.png", "https://raw.githubusercontent.com/weltmaister/hermes-profile-picker/9a38fa52616c8b1be5397c4d922e80a2c754613d/docs/picker-closed.png", "https://raw.githubusercontent.com/weltmaister/hermes-profile-picker/9a38fa52616c8b1be5397c4d922e80a2c754613d/docs/chip-running-chat.png"]}, {"name": "profile-switcher", "repo": "https://github.com/okyssta/hermes-profile-switcher", "sha": "1cf6274592631621bd721bb24501462b83e3b965", "title": "Profile Switcher", "description": "The Alt+Tab gesture for Hermes profiles. Hold Ctrl+Alt and tap Tab to cycle through your profiles, release to land on the highlighted one \u2014 the same hold-tap-release rhythm as the OS app switcher. (Alt+Tab, Win+Tab and Cmd+Tab are owned by the window manager and cannot be bound by any application, so the gesture lives on ctrl+alt+tab, unclaimed by the OS and by Hermes core.) Each row shows the profile's model and most recent conversation; a working profile shows a spinner. Also opens with a single contributed keybind (Cmd+Alt+P / Ctrl+Alt+P, rebindable in the app's own keybind panel), a status-bar chip, and a palette command. The switch goes through the Desktop's own profile path, so the target profile's backend is activated and its chrome is scoped onto it. Desktop-only (desktop/plugin.js inside the plugin SDK surface); no agent tools, hooks, middleware, env vars, network calls, or stored credentials.", "maintainer": "okyssta", "tier": "community", "category": "desktop", "version": "1.1.0", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/okyssta/hermes-profile-switcher#readme", "image": "https://raw.githubusercontent.com/okyssta/hermes-profile-switcher/1cf6274592631621bd721bb24501462b83e3b965/assets/profile-switcher.png", "screenshots": ["https://raw.githubusercontent.com/okyssta/hermes-profile-switcher/1cf6274592631621bd721bb24501462b83e3b965/assets/profile-switcher.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "progress-squash", "repo": "https://github.com/pierrenode/hermes-progress-squash", "sha": "044e6f1128037a58a76d5f6ff71df1607b4c1c63", "subdir": "progress-squash", "description": "Collapses carriage-return progress bars (tqdm, git clone --progress and similar) in terminal output to the frame a terminal would show, so the model reads one line instead of every redraw: a 300-step tqdm loop goes from 17,396 characters to about 120. Other text written between redraws, CRLF line endings and output without a carriage return are left as they are. Disclosure \u2014 register() adds one transform_terminal_output hook that rewrites the output string in memory; no tools, network access, subprocesses, files, settings or environment variables.", "maintainer": "pierrenode", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/pierrenode/hermes-progress-squash", "version": "1.0.0", "image": "https://raw.githubusercontent.com/pierrenode/hermes-progress-squash/044e6f1128037a58a76d5f6ff71df1607b4c1c63/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["transform_terminal_output"], "provides_middleware": [], "requires_env": []}}, {"name": "project-manager", "repo": "https://github.com/AiSolve-me/hermes-project-manager", "sha": "2de4269baafc7399b7d4f92ad71b1d39205caf7b", "version": "1.0.0", "title": "Project Manager", "description": "Git workbench for the Hermes Dashboard and Desktop: discovers the git repositories under the folders you watch, and inspects or changes them per file \u2014 stage, unstage, diff and discard \u2014 plus commit, push, pull, branches, commits and worktrees. Disclosure \u2014 reads the watch paths from its own SQLite table (under HERMES_HOME/plugin-data/project-manager) and git metadata (branch, remote, ahead/behind, commit subjects, status and diff text) from the repositories under them, and lists folder names under any path you type when adding a watch folder; file contents are read only as diff text returned to the requesting UI; the five agent tools are read-only. Writes on request only from the Dashboard/Desktop UI: git add, commit, push, stash (including stash -u before a branch switch), fetch, merge --ff-only (also as \"pull all\" across every watched repository), restore, clean -f, git switch, and git worktree remove (including --force and remove-all). Discard on a tracked file restores it from HEAD and drops the uncommitted edits; on a file in no commit (untracked or staged-new) it leaves the bytes on disk but nothing here can restore a version of it, and both sit behind a confirmation naming which one you are doing. The Desktop Chat button starts a new Hermes session whose working directory is that project's folder, and the project name and branch chip open the repository's remote URL in your system browser. The optional standalone server (project_manager_server.py, 127.0.0.1:9120) requires a per-run token printed to its log. No outbound network, no model call, no API keys; git fetch/push contact the remote named in the request (the UI sends the repository's own remote).", "maintainer": "AiSolve-me", "tier": "community", "category": "desktop", "docs_url": "https://github.com/AiSolve-me/hermes-project-manager#readme", "image": "https://raw.githubusercontent.com/AiSolve-me/hermes-project-manager/2de4269baafc7399b7d4f92ad71b1d39205caf7b/docs/assets/catalog-card.png", "screenshots": ["https://raw.githubusercontent.com/AiSolve-me/hermes-project-manager/2de4269baafc7399b7d4f92ad71b1d39205caf7b/docs/assets/projects-dashboard.png"], "platforms": [], "capabilities": {"provides_tools": ["list_projects", "get_project", "list_branches", "get_recent_commits", "list_watch_paths"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.4"}, {"name": "promoat", "title": "AI Clone Videos", "repo": "https://github.com/TechHiveDev/promoat_partner_hermes_plugin", "sha": "4dc481465d39691483b37caca66944b9311a0468", "description": "Make realistic AI videos of yourself, with your own face and voice, from inside Hermes. Powered by Promoat. Disclosure \u2014 sends your scripts, prompts and the public media URLs you supply to Promoat's hosted API (promoat-platform-plugins.vercel.app) with your PROMOAT_KEY; video, character, voice-clone and speech tools spend paid Promoat credits; clone_voice and create_character build a reusable voice or face from the samples you pass; delete_character and delete_voice permanently remove account assets.", "maintainer": "Promoat", "tier": "community", "category": "tools", "version": "1.1.3", "docs_url": "https://promoat-platform-plugins.vercel.app/docs", "capabilities": {"provides_tools": ["estimate_video", "create_video", "create_character", "clone_voice", "list_voices", "get_balance", "get_job", "get_scenes", "fix_scene", "edit_script", "fix_sound", "list_characters", "get_character", "delete_character", "regenerate_character", "list_voice_presets", "delete_voice", "reclone_voice", "synthesize_speech", "create_first_frame", "plan_scenes", "list_assets", "get_asset", "list_jobs"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["PROMOAT_KEY"]}}, {"name": "prompt-enhance", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "953732a9fb52b6fd89e73fc96d910aab63163e07", "subdir": "public/prompt-enhance", "description": "Rewrite a composer draft outside the chat and put the finished prompt back in the field. A prompt library keeps saved prompts, and a one-call model pick does not change the session.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/prompt-enhance", "version": "1.1.1", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/953732a9fb52b6fd89e73fc96d910aab63163e07/public/prompt-enhance/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "prompt-enhancer", "repo": "https://github.com/Heybinshao/prompt-enhancer", "sha": "e5cc952c44d7d8ea731f406dbfcd2330fda2befb", "description": "A composer button for Hermes Desktop that rewrites a rough draft into a structured prompt (task / scope / constraints / output shape) and restores the original on a second click. One stateless gateway call, preserves @file and /command chips, per-session state. UI in EN / \u7b80\u4e2d / \u7e41\u9ad4.", "maintainer": "Heybinshao", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Heybinshao/prompt-enhancer#readme", "version": "1.6.1", "image": "https://raw.githubusercontent.com/Heybinshao/prompt-enhancer/e5cc952c44d7d8ea731f406dbfcd2330fda2befb/assets/banner.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "prompt-optimizer", "repo": "https://github.com/Sahil-SS9/hermes-multichannel-prompt-optimizer", "sha": "e83eba9a8e102ed255a5bfd20cc88ea50e3af28f", "description": "Model-aware prompt rewriting with quality scoring, analytics, and coaching. Disclosure \u2014 the default auto mode rewrites every user message of 5+ words through your configured model (one extra LLM call per turn) before the agent sees it.", "maintainer": "Sahil-SS9", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/Sahil-SS9/hermes-multichannel-prompt-optimizer", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_gateway_dispatch", "transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "prompt-pocket", "repo": "https://github.com/xraysight/hermes-prompt-pocket", "sha": "1da1175923393292c798a20cadfdadc6067adee6", "description": "Local prompt library for Hermes Desktop. Save, edit, search, and copy named prompts for manual use, with validated JSON import/export and IndexedDB storage. Does not read or modify composer drafts, send messages, or make network requests.", "maintainer": "xraysight", "tier": "community", "category": "desktop", "docs_url": "https://github.com/xraysight/hermes-prompt-pocket#readme", "version": "0.1.1", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "prompt-queue", "repo": "https://github.com/vectorforge22/prompt-queue", "sha": "04314c08a9de003fbf5d58ab648a052a49b09b66", "description": "Kanban-style prompt queue for the desktop: Play drains cards one at a time into per-card target modes \u2014 new session, existing session, project, or a profile's canonical Bot Chat \u2014 gated on the global model slot, background-review completion, and context compaction. Queue/Done/Skipped/ Failed tabs, two-row target picker, markdown ingest (Windows), and a trust-aware ::enqueue directive (ask-first by default). Disclosure \u2014 Desktop pane that runs queued prompts as full agent turns (all tools the session allows) in new or chosen existing sessions, projects it can create, or a hidden per-profile \"Bot Chat\" session while Play is on; reads recent agent.log lines to detect background reviews and context compaction; on Windows the markdown-ingest menu runs local shell commands (mkdir, dir, certutil, explorer, and python on a small bundled reader script it writes into the chosen folder) through Hermes's shell.exec; an opt-in Auto-add setting lets ::enqueue directives in a live assistant reply queue prompts that run without a click.", "maintainer": "vectorforge22", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "1.4.4", "docs_url": "https://github.com/vectorforge22/prompt-queue", "platforms": [], "screenshots": ["https://raw.githubusercontent.com/vectorforge22/prompt-queue/04314c08a9de003fbf5d58ab648a052a49b09b66/docs/screenshots/prompt-queue.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "prompt-snippets", "repo": "https://github.com/Heybinshao/prompt-snippets", "sha": "a6ecc3f73a1ccb7f003f498ca950c525d0537222", "description": "Prompt snippet library for the Hermes Desktop composer: a quick-pick overlay styled after the app's own slash menu (own shortcut), plus a management view with drag reordering, group tags and import/export. Inserts into the focused session, not the active one. UI in EN / \u7b80\u4e2d / \u7e41\u9ad4. v1.8.0 is fully SDK-only: the quick-pick overlay renders as an official Popover anchored to the plugin's own contributed node and all draft writes go through the host composer draft API. No local network; v1.6.0+ adds local JSON import/export via the system clipboard.", "maintainer": "Heybinshao", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Heybinshao/prompt-snippets#readme", "version": "1.8.0", "image": "https://raw.githubusercontent.com/Heybinshao/prompt-snippets/a6ecc3f73a1ccb7f003f498ca950c525d0537222/assets/banner.png", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "prompt-studio", "repo": "https://github.com/bwoliveira/prompt-studio", "sha": "ecead76f0b2ff4f46c09341c871e234eb1692a1a", "description": "Step-by-step prompt builder for Hermes Desktop (F4): option cards per step with AI suggestions, then an AI-written final prompt sent to or placed in the composer through host.composer (Hermes Desktop 0.21.5+). Tuned for Claude Opus 5.5, Claude Sonnet 5.5 and GPT-6 Astra. AI calls go through its own auxiliary task (auxiliary.prompt_studio) via the dashboard plugin API; sends no temperature. No external network beyond the configured provider; preferences in ctx.storage. Disclosure \u2014 on opening in an existing chat (default on, toggle in Studio Settings) it reads the last 8 user/assistant turns (plus any compaction summary) of that session from state.db, redacts secrets and sends up to 8k chars to the configured auxiliary model for a short summary used in step suggestions; draft and form answers go to the same auxiliary model; no other network.", "maintainer": "bwoliveira", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/bwoliveira/prompt-studio#readme", "version": "1.9.0", "image": "https://raw.githubusercontent.com/bwoliveira/prompt-studio/ecead76f0b2ff4f46c09341c871e234eb1692a1a/docs/images/banner.png", "screenshots": ["https://raw.githubusercontent.com/bwoliveira/prompt-studio/ecead76f0b2ff4f46c09341c871e234eb1692a1a/docs/images/step-question.png", "https://raw.githubusercontent.com/bwoliveira/prompt-studio/ecead76f0b2ff4f46c09341c871e234eb1692a1a/docs/images/step-preview.png", "https://raw.githubusercontent.com/bwoliveira/prompt-studio/ecead76f0b2ff4f46c09341c871e234eb1692a1a/docs/images/step-settings.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "prompt-tray", "repo": "https://github.com/aydnOktay/hermes-prompt-tray", "sha": "e693e91f2c83031653a62fe286efb90d081f051b", "description": "Saved chat prompts \u2014 click a tray item to insert it into the Hermes composer. Review / Plan / Explain defaults, then your own. No API keys. Disclosure \u2014 inserts prompts through Hermes Desktop's internal hermes:composer-insert event (not a public SDK API); stores prompts in $HERMES_HOME/plugin-data/prompt-tray/prompts.json; no network.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-prompt-tray", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["prompt_tray_list"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "proofable-mcp", "title": "Proofable", "repo": "https://github.com/proofable/mcp", "subdir": "plugins/proofable-mcp", "sha": "028e2815dd98756e5d74dd6c43cd2cf06ff39b58", "version": "0.1.7", "description": "Context and control for any AI. Agent identity, scoped access, and proof across tools. Disclosure \u2014 skills-only package: its workflow skills steer the agent to Proofable's hosted MCP server at mcp.proofable.me (which you add yourself with `hermes mcp add \u2026 --auth oauth`) to check identity proofs and agent permissions, create wallet-signed proofs, and store, list or revoke secrets in Proofable's hosted vault, so secrets you store and proof/agent data go to Proofable; Hermes does not prompt before those MCP tools run unless you give the server a trust setting; the skills also suggest Proofable's own optional `proofable` CLI, which edits MCP/project config.", "maintainer": "proofable", "tier": "community", "category": "tools", "docs_url": "https://docs.proofable.me/mcp/setup", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.20.0"}, {"name": "protean-model-sync", "repo": "https://github.com/aska-digital/protean-model-sync", "sha": "50d3d096a2beb02a578c28d116a989537f5d19d1", "description": "Fleet-wide provider and model presets with CLI and Hermes Desktop support. Disclosure \u2014 writes model/provider keys into the config.yaml of the profiles you select (backup taken first).", "maintainer": "aska-digital", "tier": "community", "category": "models", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aska-digital/protean-model-sync", "version": "1.1.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "protean-ordaprompt", "repo": "https://github.com/aska-digital/protean-ordaprompt", "sha": "60e89af2853072c7801c465f30999f3c6ceb35b2", "description": "Jev-style comparative classifier for OrdaPilot. It compares all topic labels and session choices in one batch, including new-topic, ambiguous, and new-session options. It uses calibrated score and margin gates, weighs continuity against context cost and contamination, and abstains when uncertain. OpenRouter is optional for provisional new-label proposals and disabled by default.", "maintainer": "aska-digital", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aska-digital/protean-ordaprompt", "version": "1.0.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "protean-subagent-viewer", "repo": "https://github.com/aska-digital/protean-subagent-viewer", "sha": "facbb14b83e932165070394eb664c92dcd17036b", "description": "Read-only Hermes Desktop pane for live and past delegated subagent workers.", "maintainer": "aska-digital", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aska-digital/protean-subagent-viewer", "version": "0.1.2", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "protonpass", "repo": "https://github.com/lucas-nicolas/hermes-protonpass", "sha": "b17cc05a92494aa1d6481c3f1b6ff14a241f7375", "description": "Proton Pass secret source: resolves pass://vault/item/field references (mapped source \"protonpass\") or every env-var-titled item of one vault (bulk source \"protonpass_vault\") into environment variables at startup through the user's own pass-cli, beside the built-in Bitwarden and 1Password sources, with a hermes protonpass setup/status/token/set/remove/sync/disable CLI. Stdlib-only, no Python deps. Disclosure \u2014 when enabled, runs the user-installed pass-cli (argv only, allowlisted env, 30 s per call), which talks to Proton's API; a personal access token or AI-agent token is read from Hermes' env and passed only to the pass-cli login child's environment (never argv); writes a 0700 session dir under cache/protonpass and a 0600 value cache (cache_ttl_seconds: 0 disables); no self-update, no downloaded binaries, no telemetry, no background process.", "maintainer": "lucas-nicolas", "tier": "community", "category": "tools", "requires_hermes": ">=0.20.1", "docs_url": "https://github.com/lucas-nicolas/hermes-protonpass#readme", "version": "0.1.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "provenance-gate", "title": "Provenance Gate", "repo": "https://github.com/simin-yuan/hermes-provenance-gate", "sha": "d8ded75deef198694639d8653c1834a26f3b0372", "version": "0.1.3", "description": "Flags memory and skill_manage writes that state a user decision (\"the user decided ...\", \"\u7528\u6237\u51b3\u5b9a ...\") without the user's own words: each such sentence needs a quote that appears verbatim in text the user typed in this session, shares key words with the decision and does not drop a negation. A patch is checked by the text it produces. Observe mode (the default) records flagged writes and `hermes provenance-gate report` lists them; block mode refuses them and tells the model how to fix the write. Measured on an independent blind set of 133 lines: precision 1.000, recall 0.694. Disclosure \u2014 two hooks (pre_llm_call, pre_tool_call); keeps a local copy of the text the user types, with its sender_id and session link, and an evidence log of checked claims under plugin-data/provenance-gate (30-day default retention, `hermes provenance-gate purge`); reads MEMORY.md, USER.md and skill files to reproduce what a patch produces; no network, no credentials, never asks for approval.", "maintainer": "simin-yuan", "tier": "community", "category": "general", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/simin-yuan/hermes-provenance-gate#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "provider-copy", "repo": "https://github.com/tobenwarrior/hermes-provider-copy", "sha": "1599d21d1bce11d94424f749531dadf8d619f42c", "version": "1.0.1", "description": "Copy provider API keys (and provider base-URL overrides) from one profile onto other profiles \u2014 a one-time, explicit copy from a desktop page. Per-profile missing/present badges, fill-missing by default with an explicit overwrite opt-in. OAuth sign-ins and messaging bot tokens never travel; values never cross back in responses.", "maintainer": "tobenwarrior", "tier": "community", "category": "desktop", "docs_url": "https://github.com/tobenwarrior/hermes-provider-copy#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "provider-status", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "4bc502523a597a673c852a3b09e1c7e4dced1e6f", "subdir": "public/provider-status", "description": "Status-bar quota tracking for 17 providers: Tavily, OpenCode Go, DeepSeek, GLM (z.ai), OpenRouter, Grok (xAI), Codex (OpenAI), OpenAI, Anthropic, Groq, Cerebras, Moonshot Kimi, MiniMax, Google Gemini, Hugging Face, Mistral, and Qwen. DeepSeek and GLM show peak/off-peak gauges and countdowns. Includes OAuth and multi-key pools. This edition does not rotate Hermes environment keys on exhaust, and an expired OAuth token asks for a new login. Codex and Grok checks use their CLI client identity and user-agent. Disclosure \u2014 Reads provider API keys from the Hermes .env and its own config.json and calls each enabled provider's own usage or billing endpoint; Codex and Grok sign-ins use those CLIs' OAuth client identity and user-agent, keep the plugin's tokens in its install folder, and ask for a new login on expiry. When the Discord gateway runs, the bot's Discord presence (visible to everyone in servers the bot shares) is updated every 20 seconds by default with tokens/sec, context-window use and the active provider's name with its remaining quota or dollar credit balance (model and running tool are opt-in); turn it off with plugins.entries.provider-status.settings.discord_presence_enabled: false. /pulse and the agent_pulse tool report process-wide telemetry (model, provider, current tool, quota) to anyone allowed to call them on a gateway. Writes a secret-free quota-cache.json into its install folder and reads Hermes config.yaml for the active model.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/provider-status", "version": "1.6.4", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/4bc502523a597a673c852a3b09e1c7e4dced1e6f/public/provider-status/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": ["agent_pulse"], "provides_hooks": ["pre_api_request", "post_api_request", "api_request_error", "pre_tool_call", "post_tool_call", "pre_llm_call", "post_llm_call"], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.4"}, {"name": "provider-usage", "repo": "https://github.com/PhoeniXAbhisheK/hermes-plugin-provider-usage", "sha": "8f78fcadd351daf77a9013011f220f4665322b7f", "description": "Per-provider quota and balance readout in the Hermes desktop status bar. Per-provider chips with eye toggles, a popover with every quota window, reset times, balance and key-cap amounts, near-limit amber tint, a desktop notification per threshold crossing, and burn-rate projections (ETA to reset or depletion). Providers: OpenCode Go, OpenAI Codex, OpenRouter, plus Anthropic, GitHub Copilot, Nous, Z.AI, Kimi, MiniMax and DeepSeek when configured. Disclosure \u2014 resolves provider credentials read-only (Hermes account-usage helpers and profile secrets, else the profile's .env and the vendor CLI login files ~/.codex/auth.json, ~/.claude/.credentials.json and ~/.local/share/opencode/auth.json) and sends each only to that provider's usage endpoint; the GitHub Copilot check presents the VS Code / Copilot client identity. No subprocesses, no telemetry.", "maintainer": "PhoeniXAbhisheK", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/PhoeniXAbhisheK/hermes-plugin-provider-usage#readme", "version": "0.3.1", "image": "https://raw.githubusercontent.com/PhoeniXAbhisheK/hermes-plugin-provider-usage/8f78fcadd351daf77a9013011f220f4665322b7f/media/banner.png", "screenshots": ["https://raw.githubusercontent.com/PhoeniXAbhisheK/hermes-plugin-provider-usage/8f78fcadd351daf77a9013011f220f4665322b7f/media/panel.png", "https://raw.githubusercontent.com/PhoeniXAbhisheK/hermes-plugin-provider-usage/8f78fcadd351daf77a9013011f220f4665322b7f/media/status-bar.png", "https://raw.githubusercontent.com/PhoeniXAbhisheK/hermes-plugin-provider-usage/8f78fcadd351daf77a9013011f220f4665322b7f/media/notification.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pstack", "repo": "https://github.com/Cloeille/pstack", "sha": "d9454cc1ecba5f28b136deacdfe2df959cf7cdec", "description": "Engineering rigor stack: poteto-mode orchestrator with 17 playbooks, plus how, architect, interrogate, swarm, unslop, and 46 other skills and principles. Disclosure \u2014 skills only, no tools or network calls of their own; when the user asks, the setup-pstack skill changes Hermes `delegation` model/provider/reasoning settings via `hermes config set`, the autopilot, shipping and babysit playbooks push and force-push the agent's own branches, squash-merge pull requests and arm hourly Hermes cron jobs to watch them, and the reflect skill files backlog issues in your team's tracker without asking per item.", "maintainer": "Cloeille", "tier": "community", "category": "tools", "version": "0.3.1", "docs_url": "https://github.com/Cloeille/pstack", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.0"}, {"name": "public-holidays", "repo": "https://github.com/Akloenx123/hermes-public-holidays", "sha": "d73f177b13c368c5c2445f6595f4008ed6c79a78", "description": "Public holidays for 200+ countries and their regions, plus workday checks, workday counts and deadline math (N working days after a date), computed in code instead of by the model. Disclosure \u2014 sends HTTPS GET requests to date.nager.at (Nager.Date, free, no key) carrying only a country code and a year; no redirects, 10 s timeout, responses cached in memory only. No credentials, no files written, no shell commands, no hooks, no background processes, no telemetry.", "maintainer": "Akloenx123", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Akloenx123/hermes-public-holidays#readme", "version": "0.1.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["holidays_list", "workday_check", "workdays_count", "workdays_add"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "pushary", "repo": "https://github.com/Pushary/hermes-plugin-pushary", "sha": "af29cb4ac34354c12ad5054eba82dc1ff3d0f7e2", "subdir": "pushary_plugin", "description": "Phone notifications, questions and approvals through Pushary's native Hermes approval transport, with optional per-tool gates. Disclosure \u2014 approval transport and per-tool gates hand dangerous-command approvals to whoever holds the devices or Slack channel paired to your Pushary account (fails closed); messages queued in the Pushary app or Mac notch are injected into the next turn as operator instructions and wait in ~/.pushary/run/hermes-commands; sends session events with a machine id (~/.pushary/machine-id when present, else a hashed hostname) on every turn, the redacted command and description of each approval it carries, the redacted reason when Hermes marks a turn failed (max 200 characters), redacted gated-tool arguments and pushary_remind reminder text to pushary.com; reads PUSHARY_API_KEY only through Hermes.", "maintainer": "Pushary", "tier": "community", "category": "automation", "docs_url": "https://github.com/Pushary/hermes-plugin-pushary#readme", "version": "0.8.1", "readme": false, "known_issues": ["Updating from 0.5.9: this release reads PUSHARY_API_KEY only through Hermes. If Pushary setup or the Pushary app gave the old copy its key, save it once with: hermes config set PUSHARY_API_KEY <your key>"], "capabilities": {"provides_tools": ["pushary_remind", "pushary_notify", "pushary_ask", "pushary_wait", "pushary_cancel", "pushary_propose_scope", "pushary_enroll", "pushary_ask_end_user"], "provides_hooks": ["pre_llm_call", "pre_tool_call", "post_tool_call", "on_session_start", "on_session_end", "on_session_finalize"], "provides_middleware": [], "requires_env": ["PUSHARY_API_KEY"]}}, {"name": "pushover-hermes-plugin", "repo": "https://github.com/lightx/pushover-hermes-plugin", "sha": "967fe2d476b384d51773529a7b34ab52e3fdebf1", "description": "Pushover as an outbound-only gateway platform, plus opt-in agent lifecycle notifications (finished, questions, errors, approvals, kanban blockers, Hermes's sudo password prompt) via Pushover and/or native notify-send, managed with /notifications. Disclosure \u2014 sends HTTPS requests to api.pushover.net only, carrying your Pushover app token, user key and notification text (when lifecycle notifications are enabled, excerpts of agent replies, clarify questions, approval commands, the command waiting on the sudo password prompt (redacted by Hermes; never the password) and kanban block reasons; PUSHOVER_NOTIFY_QUESTION=minimal suppresses all but kanban reasons); send_message can address any Pushover user or group key; runs notify-send (argv, no shell) when native notifications are enabled; writes an unrotated log under $HERMES_HOME/logs and settings.json under $HERMES_HOME/plugin-data, and $HERMES_HOME/.env only from the interactive setup wizard. Outbound-only, no inbound or approval path, no telemetry, no background processes.", "maintainer": "lightx", "tier": "community", "category": "platform", "requires_hermes": ">=0.21", "docs_url": "https://github.com/lightx/pushover-hermes-plugin#readme", "version": "1.2.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["post_llm_call", "pre_approval_request", "post_approval_response", "pre_tool_call", "post_tool_call", "on_human_input_request"], "provides_middleware": [], "requires_env": ["PUSHOVER_APP_TOKEN", "PUSHOVER_USER_KEY"]}}, {"name": "qdrant-memory", "repo": "https://github.com/cnkang/hermes-plugin-qdrant-memory", "sha": "c85d2bce788b117dddd854bb124971f7de8e564c", "description": "Durable native memory for Hermes with LLM fact extraction. Conversations are distilled by the Hermes-configured LLM into searchable memories \u2014 facts, preferences and decisions with deduplication and importance \u2014 instead of storing turns verbatim, and are kept in Qdrant (embedded, self-hosted Server, or Qdrant Cloud) with configurable embeddings (default: local Ollama qwen3-embedding:4b at 2560 dimensions). The plugin registers a native MemoryProvider plus four scoped tools: qdrant_memory_search, qdrant_memory_add, qdrant_memory_update and qdrant_memory_delete. A SQLite WAL admission ledger makes every write idempotent and replayable across restarts with fail-closed recovery; scoped inventory, portable export and scope-aware deletion (list/export/delete-all with explicit single-agent vs all-agents semantics) ship in the same CLI, and `migrate mem0` imports existing Mem0 exports with resumable, verifiable runs. Disclosure \u2014 memory text is stored in the configured Qdrant store (embedded files under <HERMES_HOME>/qdrant-memory/qdrant by default, or the Server/Cloud URL you set), and memory text plus each turn's recall query are sent as plain text to the configured embedding endpoint (default local Ollama at http://127.0.0.1:11434; an OpenAI-compatible remote endpoint can be configured, and keyed endpoints must use HTTPS). Disclosure \u2014 after each primary-agent turn, at session end and before context compression, conversation text goes to the LLM configured in Hermes through the Hermes plugin LLM facade (a provider/model override needs the plugin's Hermes trust grant) to extract facts and to compare near-duplicate memories; that LLM may be a remote provider. Disclosure \u2014 the provider is selected with memory.provider: qdrant-memory; its settings live in <HERMES_HOME>/qdrant-memory.json (0600, secrets stripped on save). QDRANT_URL, QDRANT_API_KEY and EMBEDDING_API_KEY are read through the Hermes secret scope, but an api_key written by hand into qdrant-memory.json takes precedence, and `migrate mem0` reads the source Qdrant endpoint and any api_key from <HERMES_HOME>/mem0.json or --source-config. Disclosure \u2014 state lives under <HERMES_HOME>/qdrant-memory/ (embedded store, SQLite WAL ledger, lock files); the ledger holds raw turn text and pre-compression transcripts until they are processed, and failed items until retried, then scrubs the bodies. Disclosure \u2014 single-writer design: a local ownership lock excludes a second writer to the same profile destination, and Server/Cloud deployments expect one active writer per scope. Disclosure \u2014 deletion removes records and fences pending operations, but is not a forensic secure erase (SQLite WAL pages and backups may retain content).", "maintainer": "cnkang", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.5", "version": "0.2.2", "docs_url": "https://github.com/cnkang/hermes-plugin-qdrant-memory#readme", "readme": true, "known_issues": ["Preview scope: multi-writer Server/Cloud deployments, hybrid retrieval and a web UI are not supported.", "Deletion removes records and fences pending operations but is not a forensic secure erase; storage-level remnants (WAL, backups) may persist.", "Embedded mode is single-writer: a second process fails closed on the ownership lock instead of sharing the store.", "Extraction adds LLM latency after a turn; memory admission is not guaranteed before the host admits the provider, and pending operations replay on the next start."], "capabilities": {"provides_tools": ["qdrant_memory_search", "qdrant_memory_add", "qdrant_memory_update", "qdrant_memory_delete"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "qdrant", "repo": "https://github.com/kuehnberger/hermes-qdrant-memory", "sha": "5241e51274c657251776659bfb651aae4ba4bf1d", "version": "0.1.8", "image": "https://raw.githubusercontent.com/kuehnberger/hermes-qdrant-memory/5241e51274c657251776659bfb651aae4ba4bf1d/docs/banner.jpg", "description": "Dense semantic memory for Hermes, stored in a Qdrant collection you host. Each turn becomes one point \u2014 user and assistant text verbatim, no LLM summarization step \u2014 embedded on-device at 384 dimensions with fastembed (ONNX; the default install is 206 MB of runtime dependencies with no torch, versus ~1.2 GB when sentence-transformers was a hard dependency) and recalled by cosine search with an optional session_id payload filter, so a result quotes what was actually said. Registers 7 tools: qdrant_search, qdrant_upsert, qdrant_recall, qdrant_collect, qdrant_prepare, qdrant_forget (point-targeted deletion, dry-run by default, no delete-all), and md_search (local markdown knowledge index). An optional recall-indicator display, display.level (off | summary | verbose, default off), adds latency and collection to the chat indicator at summary and one numeric line per operation to the log at verbose \u2014 numbers and identifiers only, never recalled message text or search-result snippets (the md_search line also echoes the query you searched \u2014 your own input, not recalled content); it is separate from the older top-level progress knob (off | minimal | verbose), which gates status events. sentence-transformers is selectable on GPU hosts; both backends produce identical vectors for all-MiniLM-L6-v2, so switching backends needs no re-embedding. A circuit breaker (5 consecutive I/O failures, 120 s cooldown) degrades to no new memories instead of crashing, and is_available()/check_backend()/unavailable_reason() distinguish a misconfiguration from a dead server. Optional hybrid dense+sparse RRF search (default off): one config key enables dense+BM25 RRF fusion. A fresh collection declares the sparse vector at creation and an existing dense-only store gets it added in place (Qdrant >= 1.18) with one bundled backfill command; measured +0.024 recall@10 on the LongMemEval 1,000-example benchmark. INT8 quantization is not implemented. Local embedded Qdrant mode is not supported: the provider is REST-only and needs a reachable server. Disclosure \u2014 all memory content (verbatim user and assistant turns) is stored in and read back from the Qdrant server at the configured url (default http://localhost:6333); QDRANT_API_KEY is only needed for Qdrant Cloud, is kept in .env and read through the Hermes secret scope, and is never written to config.yaml or qdrant.json. Disclosure \u2014 the only other outbound traffic is a one-time download of the embedding model weights (plus the 10 MB Qdrant/bm25 sparse model when hybrid is on) from huggingface.co (fastembed falls back to storage.googleapis.com/qdrant-fastembed if that fails); embedding runs on-device and no memory content goes to any other party. Disclosure \u2014 settings are stored in <HERMES_HOME>/qdrant.json (created 0600, no credentials) and last-operation status in <HERMES_HOME>/qdrant-status.json. Disclosure \u2014 md_search returns snippets of local markdown to the model from ~/.hermes/skills, the Obsidian vault at ~/Documents/hermes_default, ~/.hermes/hermes-agent/website and any path in the md_docs_roots key of qdrant.json; its index is built only when you run scripts/md_ingest.py and lives in <base Hermes home>/state/md-search/ (shared by all profiles). Disclosure \u2014 the optional semantic tier (md_ingest.py --semantic, and md_search queries with few lexical hits) sends embedding vectors plus file-path labels and section headings, never chunk text, to a separate hermes_md_docs collection on the Qdrant server named by the QDRANT_URL env var (default http://localhost:6333, no API key), and downloads paraphrase-multilingual-MiniLM-L12-v2 from huggingface.co on first use. Disclosure \u2014 the plugin is not a server and registers no MCP server, but it is loaded in-process into every Hermes process that embeds, so each one pays its own model copy (measured ~194-211 MB per process). Disclosure \u2014 the bundled scripts/backfill_memory.py (run by hand; a dry run unless --yes) reads a profile's Hermes session database (<profile>/state.db, read-only) and copies every stored user, assistant and tool message from every session source (cli, cron, subagent, gateway), in 2,000-character chunks, into the collection at the url in qdrant.json (default http://localhost:6333); nothing reads state.db unless you run it.", "maintainer": "kuehnberger", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/kuehnberger/hermes-qdrant-memory#readme", "known_issues": ["Windows on ARM is unsupported: grpcio, pulled in by qdrant-client, has no win_arm64 wheel. Linux and macOS on x86_64/arm64 and Windows x86_64 are supported.", "Local embedded Qdrant mode is not supported \u2014 the provider is REST-only and requires a reachable server.", "md_search returns 'no markdown index yet' until you run the bundled ingest script once (python scripts/md_ingest.py, lexical only and fast; add --semantic for the embedding tier, which takes about 7 minutes for 5500 chunks on a 5-core CPU). No background process does this for you.", "Running the plugin's pytest suite inside an installed copy still changes the PM dependency stamp (the .pytest_cache directory is hashed as a build input); only an upstream core change can exclude gitignored state."], "capabilities": {"provides_tools": ["qdrant_search", "qdrant_upsert", "qdrant_recall", "qdrant_collect", "qdrant_prepare", "qdrant_forget", "md_search"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "quota", "repo": "https://github.com/rarf/hermes-quota-plugin", "sha": "89a2ca39a28dddcdcf01cf587519ea3861274b7a", "version": "3.0.0", "description": "Per-provider quota / rate-limit status via /quota command and desktop widget. Reads precomputed quota_cache.json so the widget never does network I/O. Disclosure \u2014 refreshes your Gemini OAuth token using the Gemini CLI's public client identity, in memory only; queries Copilot's internal usage endpoint with VS Code client headers and Anthropic's OAuth usage endpoint using the hermes-quota-plugin User-Agent, caching Anthropic usage responses and rate-limit cooldowns in the Hermes root directory keyed by a token hash so profiles sharing one Claude login share them; optional additional Claude accounts read access tokens only from explicitly configured Claude Code credentials files and send them only to Anthropic's fixed OAuth usage endpoint (read-only, no refresh-token exchange or credential write-back; tokens and paths excluded from the quota cache). Linux extra accounts verified; Windows experimental, extra macOS Keychain accounts unsupported. The openai-codex check reads every saved Codex account from Hermes' own auth.json credential pool (read-only, never refreshed; expired accounts show reauth-required) and queries the Codex usage endpoint with the codex-cli User-Agent; when a Codex account is configured, each refresh also fetches public Codex reset announcements from the third-party site codex-resets.com (anonymous request, no credentials sent); the opencode-go check reads the OpenCode CLI's local auth.json, Hermes' auth.json pool and OPENCODE_GO_API_KEY_N variables (read-only). The cursor check reads the Cursor CLI token from the macOS Keychain or Cursor's auth.json (read-only, never refreshed or rewritten; on expiry it asks you to run cursor-agent login) and queries api2.cursor.sh; the opt-in (default off) antigravity check reads Antigravity's OAuth token from Windows Credential Manager, the macOS Keychain or ~/.gemini/antigravity-cli (read-only), refreshes it in memory with Antigravity's public client identity and sends Antigravity's User-Agent to Google's cloudcode endpoint; the opt-in (default off) grok.com check first sends Hermes' own xai-oauth access token (read via Hermes or from auth.json, read-only) to grok.com's billing endpoint with a browser User-Agent, and on an authentication failure falls back to local browser cookies, using secret-tool on Linux, the macOS Keychain or Windows DPAPI for the browser's cookie key and decrypting only grok.com cookies from a temporary copy of the cookie DB; the commandcode check reads ~/.commandcode/auth.json (read-only) or every saved commandcode credential in Hermes' credential store and uses the Command Code CLI's User-Agent; zai, kimi, minimax, deepseek, openrouter, ollama (which may read OLLAMA_API_KEY from ~/.hermes/.env and calls ollama.com/api/usage, /api/balance and /api/me) and experientiallabs send keys from Hermes' credential store or env only to their own vendor's usage or balance endpoints. The opt-in (default off) Agent Monitor reads this profile's Hermes session database and the local process list to show running sessions, spend estimates and model health, locally only.", "maintainer": "rarf", "tier": "community", "category": "desktop", "docs_url": "https://github.com/rarf/hermes-quota-plugin#readme", "readme": true, "image": "https://raw.githubusercontent.com/rarf/hermes-quota-plugin/89a2ca39a28dddcdcf01cf587519ea3861274b7a/docs/images/quota-banner.png", "screenshots": ["https://raw.githubusercontent.com/rarf/hermes-quota-plugin/89a2ca39a28dddcdcf01cf587519ea3861274b7a/docs/images/quota-pane.png", "https://raw.githubusercontent.com/rarf/hermes-quota-plugin/89a2ca39a28dddcdcf01cf587519ea3861274b7a/docs/images/quota-app.png"], "capabilities": {"provides_tools": [], "provides_hooks": ["footer", "usage_extra"], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.7"}, {"name": "quote-ask", "repo": "https://github.com/freefate258/quote-ask", "sha": "194f1715a623f2ca185469047452365e36cb8972", "title": "Quote & Ask", "description": "Codex-style ask-about-selection for Hermes Desktop: select text anywhere in a conversation, and a small pill appears above the selection offering Quote & ask \u2014 the selection lands in the message composer as a Markdown quote with the caret on the line below, ready for your question \u2014 or Copy, which puts the same Markdown quote on the clipboard. A command-palette entry does the same without the pill. Desktop-only (desktop/plugin.js inside the plugin SDK surface): no agent tools, hooks, middleware or env vars, nothing written to disk, nothing persisted. Disclosure \u2014 reads window.getSelection() and the selection rectangle; serializes the selection to Markdown (fenced code with its language, nested lists, bold/italic, links), cut at 4000 characters; writes the draft through host.composer (getDraft/setDraft, falling back to insertText, then ctx.os.writeClipboard) and focuses the composer; ignores selections made inside the composer itself and hides on collapse, scroll or Escape. No network calls, no credentials, no telemetry.", "maintainer": "freefate258", "tier": "community", "category": "desktop", "version": "0.1.0", "docs_url": "https://github.com/freefate258/quote-ask#readme", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.5"}, {"name": "quotum", "repo": "https://github.com/qvotvm/hermes-quotum", "sha": "b27d42ea995567a66e64b2389b14a665c5a17611", "description": "A quotum seat's Venice key as a provider. Private and anonymized models, with the seat's daily cap, spend and the 20:00 UTC bell in /usage, and a Seals tab in hermes dashboard with the seat's record. Disclosure \u2014 prompts and QUOTUM_SEAT_KEY go to api.venice.ai; /usage, Desktop usage and the Seals tab send a 16-hex sha256 handle of the key to quotum.org, then the Seals tab reads the seat's public record from quotum.org (the key itself is never sent there); QUOTUM_X_SEARCH=1 swaps in its own client that drops Hermes web_search for Venice-side web and X search (billed per search); seats are funded by the QUOTUM crypto token", "maintainer": "quotum", "tier": "community", "category": "models", "version": "0.2.0", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/qvotvm/hermes-quotum#readme", "known_issues": ["The optional QUOTUM_X_SEARCH mode supplies its own client through create_client, so it works with plugins.isolation in_process (the default) only; under host isolation leave it off.", "Hermes' bundled Achievements page has no hook for outside achievements, so the seat's seals live in the plugin's own Seals tab."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["QUOTUM_SEAT_KEY"]}}, {"name": "radio-dm-gateway", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-radio-dm-gateway", "sha": "cc543e3fcd331bb3aeb995d8176947593134e7a3", "description": "Answers an allowlisted direct message on your Meshtastic\u00ae radio. Disclosure \u2014 talks only to the MESHTASTIC_URL you set, over plain tcp, so channel keys and text travel unencrypted. An empty MESHTASTIC_ALLOWED_NODES answers nobody. A channel packet or a direct message without pkiEncrypted is never answered, because a channel key can forge a sender. Allowlisted nodes can prompt the agent, use tools until hermes tools turns them off, and approve one command at a time. An approval question is sent only when its line shows exactly the command /approve will run. A line that still goes out after that send was declined does not let /approve run it, and the next approval is declined once. Each direct message runs an agent turn on your model, and the agent cannot send on its own. No cron job comes with it; one the agent makes stays until hermes cron remove. Hermes main does not load this platform when plugins run in their own process. Node ids, sizes and times go to nodes.json in this profile's plugin-data and stay after uninstall. The message text is not stored. Not tried on a physical radio. Meshtastic\u00ae is a registered trademark of Meshtastic LLC. This site is not affiliated with or endorsed by the Meshtastic project.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-radio-dm-gateway#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MESHTASTIC_URL"]}}, {"name": "rea-captcha", "repo": "https://github.com/masakaai/rea-captcha", "sha": "bac84a628e989d330b807974789cde0ec689be18", "subdir": "integrations/hermes", "description": "Inspect captured browser verification evidence locally when an agent task is interrupted by a CAPTCHA. Portable Agent Plugins v1 package (pinned stateless mcp.json + skill); needs Node.js 22.19+/24.11+/26+ with npx on PATH. Disclosure \u2014 on first start Hermes runs `npx rea-captcha@0.3.1`, which downloads that exact npm package and its dependencies (incl. Playwright) from the npm registry; the catalog config is stateless, so only the read-only, local captcha_analyze works and the browser-session tools fail closed until you configure a separate stateful server; no telemetry, hosted solver, browser-profile copying, or cookie/token transfer.", "maintainer": "masakaai", "tier": "community", "category": "automation", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/masakaai/rea-captcha/tree/bac84a628e989d330b807974789cde0ec689be18/integrations/hermes", "version": "0.3.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "rea", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "1690b63a4790cb821fb6a319ba524815d4e09411", "subdir": "rea", "description": "Reverse engineer programs with REA (rea.tools): native binaries, .NET assemblies, Electron/JavaScript apps, Android packages, firmware and browser/process activity, through REA's MCP server (pinned rea-agents@6.7.0 over npx stdio) with REA's reverse-engineer-anything skill adapted for Hermes. Portable Agent Plugins v1 package (mcp.json + skills/); needs Node.js 22.19+/24.11+/26+ on PATH, plus your own Ghidra, Hopper or IDA for native decompilation. Disclosure \u2014 a few REA tools run a command under a PTY, launch or drive an application, change a connected Android device or overwrite a chosen file, and Hermes does not prompt before them; the bundled skill tells the agent to ask first and to skip them in unattended runs.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/rea", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/1690b63a4790cb821fb6a319ba524815d4e09411/assets/rea.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "reaction-feedback", "repo": "https://github.com/AhmetArif0/hermes-reaction-feedback", "sha": "50d8dbd0fb9f89ce1002ad378a8b656e52a617e1", "subdir": "reaction-feedback", "description": "Lets the agent see the emoji reactions you leave on its Telegram messages: react \ud83d\udc4d or \ud83d\udc4e to a reply and the agent's next turn in that private chat starts with a short note naming the reaction and the message it followed. Disclosure \u2014 registers pre_gateway_dispatch (always returns None, so dispatch is never changed), pre_llm_call and gateway_platform_event hooks; keeps a bounded in-memory record of private-chat message ids, 60-character excerpts and reactions; writes nothing to disk, makes no network requests, starts no processes and reads no secrets.", "maintainer": "AhmetArif0", "tier": "community", "category": "general", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/AhmetArif0/hermes-reaction-feedback", "version": "1.0.2", "image": "https://raw.githubusercontent.com/AhmetArif0/hermes-reaction-feedback/14f339e250ccfac1961977276256745da72e6491/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_gateway_dispatch", "pre_llm_call", "gateway_platform_event"], "provides_middleware": [], "requires_env": []}}, {"name": "reaction-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "c3cf4f480a7a7ee33be542703dd00d5b90bce7cc", "subdir": "reaction-ledger", "description": "Local ledger of the emoji reactions people leave on messages in your Telegram chats with Hermes: /reaction-log counts each message once, with the reactions it has now, and shows per emoji how many messages carry it, in how many chats and how long ago it was last set, or per day with the day's most used emoji, for the last 24 hours, any number of hours or days, or everything recorded; /reaction-log recent lists the newest reaction changes (ten, or up to 100 with /reaction-log recent 50). Only reactions the gateway authorizes reach it. Disclosure \u2014 subscribes to gateway_platform_event as an observer only and ignores every event but a reaction change; writes the emoji a message has after the change, a count of custom emoji and 12-digit hashes of the chat and message ids (never a user id, user name or message text) to plugin-data/reaction-ledger/reactions.jsonl, trimmed to 5,000 rows past 2 MB; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/reaction-ledger", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/c3cf4f480a7a7ee33be542703dd00d5b90bce7cc/docs/reaction-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["gateway_platform_event"], "provides_middleware": [], "requires_env": []}}, {"name": "reading-buddy", "repo": "https://github.com/harrylabsj/hermes-plugin-reading-buddy", "sha": "486034846dc82916460faaa7ab1b4baedea08f5b", "description": "Local-first WeRead (\u5fae\u4fe1\u8bfb\u4e66) reading companion: syncs bookshelf, reading stats and notes to the local machine and turns them into private reading cards and weekly/monthly reviews through 8 MCP tools, with a built-in fictional demo mode for previews. Engine pinned to an immutable git commit (e5f6673) over npx stdio; Portable Agent Plugins v1 package (mcp.json + skills/), needs Node.js 20+ on PATH. All data stays in PLUGIN_DATA; never posts to WeRead \u2014 cards and reviews are local files saved only after user confirmation. Disclosure \u2014 live mode sends your WEREAD_API_KEY as a Bearer token plus book ids and paging cursors to i.weread.qq.com (Tencent's WeRead agent gateway) and nothing else; the engine's MCP tool descriptions and error messages are Chinese-only while the skills are English-first; the engine's npm dependencies resolve as caret ranges at first launch.", "maintainer": "harrylabsj", "tier": "community", "category": "tools", "docs_url": "https://github.com/harrylabsj/reading-buddy", "version": "1.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "reasoning-switch", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "953732a9fb52b6fd89e73fc96d910aab63163e07", "subdir": "public/reasoning-switch", "description": "Rotate the focused session reasoning effort from the status bar. A dialog sets the levels, colors, and per-level prompt limits. Disclosure \u2014 changes the focused session's reasoning effort through the gateway config.set API (core may fall back to writing the global config.yaml when the session id is stale) and auto-demotes the level after the configured number of prompts.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/reasoning-switch", "version": "1.1.1", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/953732a9fb52b6fd89e73fc96d910aab63163e07/public/reasoning-switch/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "recency-anchor", "repo": "https://github.com/etkecc/hermes-recency-anchor", "sha": "24d1906a285fdfe37ecaf6253da8712db28f5a7b", "description": "Your system prompt is message zero and the user's question is message N. On models that weight recency hard, that is not a fair fight, and the instruction you care about most quietly loses to whatever was just asked. This plugin restates it at the end of every user turn instead. Append-only, API cop", "maintainer": "etkecc", "tier": "community", "category": "general", "docs_url": "https://github.com/etkecc/hermes-recency-anchor#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "redaction-pack", "repo": "https://github.com/pierrenode/hermes-redaction-pack", "sha": "febd8bfe9971a3242d0ca18e8e7ca71d685d503b", "subdir": "redaction-pack", "description": "Teaches Hermes's built-in secret redactor 71 more vendor credential formats (HashiCorp Vault, Doppler, Amazon Bedrock, Atlassian, Cloudflare, Supabase, Tailscale, Docker Hub, JFrog Artifactory, CircleCI, HubSpot, PostHog, Grafana, Sentry, Shopify and others) through register_redaction_patterns, so those tokens are masked in logs, tool output and model-bound text like the built-in ones. Disclosure \u2014 register() makes one call, ctx.register_redaction_patterns; no tools, hooks, network access, subprocesses, files or environment variables; the patterns can only add masks, and security.redact_secrets: false still turns redaction off.", "maintainer": "pierrenode", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/pierrenode/hermes-redaction-pack", "version": "1.4.0", "image": "https://raw.githubusercontent.com/pierrenode/hermes-redaction-pack/febd8bfe9971a3242d0ca18e8e7ca71d685d503b/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "redline", "repo": "https://github.com/silentpr0/hermes-redline", "sha": "3fffa9b5af77c31119fb6cf138279cdc5349540c", "subdir": "", "description": "Guided Markdown and source-code review in Hermes Desktop \u2014 annotate passages or line-numbered code in a docked pane and send comment/question/change-request batches back to the agent; cards are offered automatically on delivered Markdown. Disclosure \u2014 reads any user-selected local .md/.markdown or source-code path (.py .sh .js .ts .tsx .c .h .cpp .go .rs .rb .yaml .yml .json .toml .sql, so config files such as config.yaml or auth.json are shown if you open them) up to 1 MB (symlink-resolved), writes only a <file>.redline.json sidecar beside it, and in Hermes Desktop chats the transform_llm_output hook appends a ::redline directive line to qualifying final agent responses; syntax highlighting uses Pygments in the local gateway host with plain-text fallback; no network beyond the local gateway, no credentials, no telemetry, no subprocesses; the pane polls the local backend every 3 s while open.", "maintainer": "silentpr0", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "0.2.0", "image": "https://raw.githubusercontent.com/silentpr0/hermes-redline/3fffa9b5af77c31119fb6cf138279cdc5349540c/docs/banner.png", "screenshots": ["https://raw.githubusercontent.com/silentpr0/hermes-redline/3fffa9b5af77c31119fb6cf138279cdc5349540c/docs/screenshot.png"], "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": ["post_tool_call", "transform_llm_output", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "refusal", "repo": "https://github.com/0ldev/refusal", "sha": "b1bd080caeba423309d437f7df6ee564bd5d27dd", "version": "0.2.0", "description": "Detects when a model refuses a request or deflects to an educational alternative, and retries the turn on the next model in your fallback_providers chain; optionally appends your own text to the retry's system prompt after a refusal. Detection is local and rule-based (regex patterns over the response prose); tool-calling responses, code blocks and partial answers are treated as genuine answers. Disclosure \u2014 an llm_execution middleware inspects every model response before the agent loop uses it, and when it detects a refusal it sets finish_reason to content_filter (Anthropic: stop_reason to refusal) so Hermes activates its fallback model; this is logged and counted identically to a real provider-signalled refusal (reason=content_policy_blocked), with no way for a plugin to register a distinct reason, so the detection log line carries session/model/provider/api_request_id to let the two be told apart by hand; a triggered fallback resends the full conversation to the fallback provider and spends tokens there; with no fallback provider configured, Hermes replaces the response with its standard safety-refusal notice, so a false positive discards a valid answer. Optional (off by default, empty preprompt/preprompt_escalated settings): an llm_request middleware appends your configured text to the system prompt of requests in an armed session, so a same-route retry of the same model carries it; armed state is memory-only unless persist_state is enabled, in which case session ids/levels/turn ids (never text or credentials) are kept in Hermes's plugin state. No network calls, no files read or written outside the plugin package (and, if persist_state is on, its own plugin-data file), no shell commands, no background processes, no stored credentials, no telemetry sent anywhere.", "maintainer": "0ldev", "tier": "community", "category": "models", "requires_hermes": ">=0.22.3", "docs_url": "https://github.com/0ldev/refusal/blob/b1bd080caeba423309d437f7df6ee564bd5d27dd/README.md", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_finalize", "on_session_reset", "on_session_delete", "post_compaction"], "provides_middleware": ["llm_execution", "llm_request"], "requires_env": []}, "known_issues": ["Detection is pattern-based, so an unusual refusal phrasing can be missed and a response that quotes refusal language can occasionally be flagged. Configure at least one fallback model so a false positive does not discard an answer.", "A detected refusal appears under Hermes's own content_policy_blocked failover reason, identically to a real provider-signalled refusal; plugins cannot register a distinct reason (hermes-agent#138900). The detection log line carries session/model/provider/api_request_id so the two can be correlated and told apart by hand, but no plugin can fix Hermes's own aggregate counts.", "The optional preprompt (off by default) rewrites the system prompt of the retry. Hermes skips a fallback entry that resolves to the same provider+model as the one that just failed, so retrying the SAME model needs a different route to it in fallback_providers (see README). This is a prompt-injection mechanism by design \u2014 read the disclosure before enabling it."]}, {"name": "reka-provider", "title": "Reka", "repo": "https://github.com/reka-ai/reka-hermes", "sha": "df031f732c9eddf8b39a0fa240b898da4ca2d6ff", "subdir": "reka-provider", "description": "Reka as a Hermes model provider: Reka's agent-capable models on Reka's OpenAI-compatible API, each with its context window, tool support and image input declared, and reasoning effort sent as Reka's top-level reasoning_effort. Pick Reka in `hermes model` or use `--provider reka`. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, middleware, commands, background work or file access); chat requests (prompts, tool schemas and results, supported user images) and the model list go to https://api.reka.ai/v1 (or REKA_BASE_URL) through Hermes's own client with REKA_API_KEY, which Hermes reads; usage is billed to your Reka account; the plugin itself opens no connections.", "maintainer": "reka-ai", "tier": "verified", "category": "models", "requires_hermes": ">=0.21.6", "docs_url": "https://developer.reka.ai/integrations/agents#hermes", "version": "1.0.3", "readme": true, "platforms": [], "known_issues": ["Images inside tool results (screenshots, vision_analyze) reach the model as Hermes's text summary. Images you attach to a message go to the models that accept them.", "The model list is fixed per release. A new Reka model appears after a reviewed SHA bump."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["REKA_API_KEY"]}}, {"name": "remarkable", "repo": "https://github.com/cygnostik/hermes-plugin-remarkable", "sha": "5f841248b068d49f8a04208bf3471e00acd933f3", "description": "Unofficial reMarkable cloud transfers, library management, backups, typed text, and bounded native notebook rendering. Disclosure \u2014 talks to reMarkable cloud with a device token under ~/.hermes/credentials/remarkable/; remarkable_upload sends model-chosen local PDF/EPUB files to your account; the cloud sidecar (Node 22+) and renderer venv are installed only by the human-run setup commands; USB/SSH off by default.", "maintainer": "cygnostik", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.3", "version": "0.2.0", "docs_url": "https://github.com/cygnostik/hermes-plugin-remarkable#readme", "image": "https://raw.githubusercontent.com/cygnostik/hermes-plugin-remarkable/5f841248b068d49f8a04208bf3471e00acd933f3/docs/media/remarkable-hermes-catalog.png", "platforms": ["windows", "linux", "macos"], "capabilities": {"provides_tools": ["remarkable_enroll", "remarkable_status", "remarkable_list", "remarkable_download", "remarkable_upload", "remarkable_mkdir", "remarkable_manage", "remarkable_export", "remarkable_extract_text", "remarkable_search", "remarkable_backup", "remarkable_changes"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "reme", "repo": "https://github.com/agentscope-ai/ReMe", "sha": "5231f3970c550bb0bc5d1bc7fbc85534274ca530", "subdir": "integrations/hermes_agent", "description": "Local-first, file-native long-term memory with HTTP and embedded ReMe backends. Disclosure \u2014 search queries and full user/assistant turns are sent to the configured ReMe endpoint (default http://127.0.0.1:2333; a non-loopback http:// endpoint receives them in plaintext) or handled by the in-process ReMe SDK; no API keys are forwarded.", "maintainer": "agentscope-ai", "tier": "community", "category": "memory", "requires_hermes": ">=0.21", "docs_url": "https://github.com/agentscope-ai/ReMe/tree/main/integrations/hermes_agent", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "remesher", "title": "Remesher", "repo": "https://github.com/remesher/remesher", "sha": "5f48a067722e10f0c08d368698fc03b05855bb89", "subdir": "integrations/hermes", "version": "0.2.1", "description": "Bounded image-to-GLB jobs using an isolated Remesher CLI, with existing ComfyUI/Comfy3D or native TRELLIS.2 and Pixal3D runtimes. Four Python SDK tools provide health, generation, persistent job status and hashed GLB assets, plus a setup/generation skill. Apache-2.0 for Remesher code; third-party terms remain separate. Disclosure \u2014 reads selected local images and configured files, uploads images to the configured ComfyUI server, launches local CLI subprocesses and detached supervisors, optionally owns a GPU runtime, and stores inputs, logs and assets in profile plugin data. Client/runtime installation and model downloads require separate explicit opt-ins; no model weights are bundled. No credentials or telemetry are required. No Desktop viewer or hosted service is included.", "maintainer": "remesher", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.2", "platforms": ["linux"], "readme": true, "docs_url": "https://github.com/remesher/remesher/blob/5f48a067722e10f0c08d368698fc03b05855bb89/integrations/hermes/README.md", "known_issues": ["Native inference tested on Linux ARM64 NVIDIA Spark only; macOS, Windows, CPU, MPS and ROCm inference are not certified.", "Requires Python 3.11+, a separately installed CLI and configured runtime/model files. Native quality settings are explicit resource-intensive opt-ins, not automatic defaults.", "Single-image quality remains provisional; no automatic background removal, manifold, watertightness or production-anatomy guarantee.", "One active job per profile; retention is manual and native runtime logs are not size-capped. Local timeout does not cancel work on an existing remote server."], "capabilities": {"provides_tools": ["remesher_health", "remesher_generate", "remesher_job", "remesher_assets"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "render-platform", "title": "Render", "repo": "https://github.com/ojusave/render-hermes-plugin", "sha": "1d343332142c27e1b97281ff03e2811f8a083750", "version": "0.1.0", "maintainer": "ojusave", "tier": "community", "category": "platform", "docs_url": "https://github.com/ojusave/render-hermes-plugin#readme", "readme": true, "platforms": [], "description": "Deploy, debug and manage Render applications with 20 unchanged skills from render-oss/skills and Render's hosted MCP connection. Disclosure \u2014 connects Hermes to Render's hosted MCP server (mcp.render.com) with your RENDER_API_KEY; the server is marked untrusted so tools without a read-only annotation need approval; account permissions apply and changes can incur Render charges; bundled skills guide shell commands, file edits and Render CLI installs (including the vendor's curl | sh installer).", "known_issues": ["render-docker is excluded because its upstream Dockerfile cleanup example triggers a critical scanner rule.", "Render's list_workspaces lacks a read-only annotation and requires approval; unattended calls are denied.", "An existing native mcp_servers.render configuration overrides the package connection and trust setting."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["RENDER_API_KEY"]}, "requires_hermes": ">=0.21.6"}, {"name": "rentahuman", "title": "RentAHuman", "repo": "https://github.com/rentahuman-ai/hermes-plugin", "sha": "277e36716546e2b0a9963f028b133562cb52266e", "description": "Find people and coordinate real-world work through the RentAHuman marketplace. Disclosure \u2014 runs the third-party `rentahuman-mcp` server via npx, which sends your requests and your RentAHuman API key to rentahuman.ai and stores agent identity keys in `~/.rentahuman-identities/`; its tools can post and fund tasks, accept workers, send messages and release real money to people \u2014 write-capable calls ask for approval because the server is marked `trust: untrusted`, but each approval moves money or commits you to work.", "maintainer": "RentAHuman", "tier": "community", "category": "tools", "docs_url": "https://rentahuman.ai/docs#mcp", "version": "3.16.1", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["RENTAHUMAN_API_KEY"]}, "requires_hermes": ">=0.21.6"}, {"name": "replaid", "repo": "https://github.com/replaid-pro/replaid-hermes", "sha": "3f8881f2f9f6ee27b59515ff9fef0afee33b87e0", "description": "Connect Replaid with OAuth to read, triage, and draft replies in your social inbox.", "maintainer": "replaid-pro", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/replaid-pro/replaid-hermes#readme", "version": "0.2.1", "capabilities": {"provides_tools": ["replaid_connection_status"], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "requesty", "repo": "https://github.com/requestyai/hermes-provider-requesty", "sha": "aa4e37d7f09dfc1e98b915d740d09e8b1b44c98d", "subdir": "requesty", "title": "Requesty", "description": "Requesty LLM gateway as a Hermes model provider (`--provider requesty`, alias `rq`, or Requesty in `hermes model`). The picker lists Requesty's managed routing policies (curated routes with failover, `@eu` variants for EU-only hosting); any Requesty model id or org policy also works. `/reasoning` maps onto Requesty's `reasoning_effort` for reasoning-capable models, the Hermes session id is sent as `requesty.trace_id`, and context windows and estimated cost come from the Requesty catalog. Prompt caching is done server-side by Requesty. Disclosure \u2014 chat requests go to https://router.requesty.ai/v1 (or REQUESTY_BASE_URL) through Hermes' own client with REQUESTY_API_KEY, which Hermes reads; the plugin itself only fetches Requesty's public model catalogs (/v1/models/managed and /v1/models, no credentials), once per process, sometimes on a short-lived background thread. No attribution headers, telemetry, file access or processes. Supersedes #27908.", "maintainer": "requestyai", "tier": "community", "category": "models", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/requestyai/hermes-provider-requesty#readme", "version": "0.1.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["REQUESTY_API_KEY"]}}, {"name": "rfc-ref", "repo": "https://github.com/EloquentBrush0x/hermes-context-refs", "sha": "7d10da5365b5f6d9cfac8c9f5ce8fdc8273f6624", "subdir": "rfc-ref", "description": "@rfc:<number> context references: attach an IETF RFC's record from the RFC Editor to a message (title, status, date, authors, abstract, what it obsoletes and updates and what obsoletes or updates it, errata link). Disclosure \u2014 sends one HTTPS GET per reference to www.rfc-editor.org/rfc/rfc<number>.json only (the referenced RFC number leaves the machine); no API key, no caching, no files written, no subprocess; register() only adds the @rfc: reference provider.", "maintainer": "EloquentBrush0x", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/EloquentBrush0x/hermes-context-refs/tree/main/rfc-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/EloquentBrush0x/hermes-context-refs/7d10da5365b5f6d9cfac8c9f5ce8fdc8273f6624/docs/rfc-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "rocketchat-platform", "repo": "https://github.com/HalfbitStudio/hermes-plugin-rocketchat", "sha": "989a04cd5f09e57bdd88997940cd18e4d58415b2", "description": "Rocket.Chat gateway adapter for Hermes Agent. Connects to a self-hosted Rocket.Chat instance via the REST API v1 for outbound traffic and the Realtime (DDP) WebSocket for inbound messages. Uses aiohttp (already a Hermes dependency) \u2014 no extra packages needed.", "maintainer": "HalfbitStudio", "tier": "community", "category": "platform", "docs_url": "https://github.com/HalfbitStudio/hermes-plugin-rocketchat#readme", "capabilities": {"provides_tools": ["rocketchat_create_channel", "rocketchat_delegate", "rocketchat_dm", "rocketchat_get_history", "rocketchat_get_permalink", "rocketchat_get_thread", "rocketchat_list_channels", "rocketchat_post", "rocketchat_search_messages", "rocketchat_send_file"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "rply-platform", "repo": "https://github.com/joshuaKnauber/rply", "sha": "932926e7f209e2d41b985b51a73867e7b050ab57", "subdir": "integrations/hermes", "title": "rply", "description": "rply gateway platform: talk to Hermes from the rply inbox on your phone and laptop, with web push. Messages and files both ways, seen/working/done with a live activity note, clarify questions and command approvals as tappable questions, cron delivery, a pinned table of scheduled jobs, a dashboard app with run/pause/resume, and an rply_request_secret tool that saves API keys to the profile's .env without the value passing through the chat. Each profile joins the channel as its own agent. Disclosure \u2014 keeps a long-polling connection to the configured rply server only (RPLY_SERVER, default https://app.rply.sh; self-hostable, AGPL server); messages the channel's members send reach Hermes as user instructions and members answer its approval and clarify prompts; the dashboard sends the server Hermes' cron job list, the titles and previews of the 10 most recent sessions from every platform, token and cost totals and the default model, and runs, pauses or resumes jobs when its buttons are pressed; stores the agent token in the profile's .env, an X25519 keypair in <profile>/rply/secret-key.json (0600) and secrets the human provides in the profile's .env under a variable name the agent picks (core's env denylist applies; the .env path is sent to the server with the request); the secret tool waits up to 15 minutes for the human and refuses under cron; adds a `hermes rply` setup command; credentials read through Hermes' profile-scoped route; no shell commands, no telemetry, no self-update.", "maintainer": "joshuaKnauber", "tier": "community", "category": "platform", "requires_hermes": ">=0.22.2", "docs_url": "https://rply.sh/docs/integrations/hermes/", "version": "0.7.0", "capabilities": {"provides_tools": ["rply_request_secret"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "rss-reader", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "30d6dc6311bfce951c10ed120c878dc3f28a7ced", "subdir": "public/rss-reader", "description": "Desktop RSS reader with reader-mode capture, drag-reorder subscriptions, mute rules, saved searches, AI summaries, keyboard shortcuts, and an optional headline ticker. Disclosure \u2014 optional YouTube cookies you paste in Settings are sent with YouTube feed requests; selectable User-Agent presets (incl. a ChatGPT-User string) are sent to feed hosts; YouTube videos render as youtube-nocookie.com embed iframes inside the reader.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/rss-reader", "version": "1.1.0", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/30d6dc6311bfce951c10ed120c878dc3f28a7ced/public/rss-reader/docs/hero.png", "screenshots": ["https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/30d6dc6311bfce951c10ed120c878dc3f28a7ced/public/rss-reader/docs/screenshot.png"], "platforms": [], "capabilities": {"provides_tools": ["rss"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "rtk-rewrite-docker", "repo": "https://github.com/petertaras/hermes-rtk-rewrite-with-docker-support", "sha": "929c8f5f86fc544a523f94a92f95a57d4c0d7d40", "description": "Community plugin that rewrites Hermes terminal commands through RTK (rtk-ai/rtk, Apache-2.0) so the model sees compact output. Adds a backend gate: it rewrites only for terminal backends a profile opts in to (default local), so a Docker or remote backend without rtk never receives an rtk command. Fail-open pre_tool_call hook (2s timeout). Disclosure \u2014 every terminal command on an opted-in backend (default local) is passed to the rtk binary on the Hermes host's PATH (or RTK_BIN) and replaced with rtk's stdout before approval and execution; the plugin does not validate the rewrite, fails open on timeout or error, and downloads nothing (the repo's optional Containerfile fetches a checksum-pinned RTK release only when you build it). Not affiliated with rtk-ai.", "maintainer": "petertaras", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "version": "0.1.0", "docs_url": "https://github.com/petertaras/hermes-rtk-rewrite-with-docker-support#readme", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "rtk-rewrite", "repo": "https://github.com/kerrz2020/hermes-rtk-rewrite", "sha": "4c5f8a5abdfd7980cba5ef02df86b8efe52c00d6", "description": "Community (non-official) plugin that rewrites Hermes terminal commands through RTK (rtk-ai/rtk, Apache-2.0) before execution, so the model sees compact output instead of raw command spam \u2014 cutting tokens on common dev commands. Adds a fail-open pre_tool_call hook (2s timeout, unexpected exits leave the command untouched), an optional desktop pane, and update scripts. Disclosure \u2014 every terminal tool command is passed to the rtk binary found on PATH (rtk-ai/rtk, installed separately) and replaced with rtk's rewrite before approval and execution; fail-open when rtk is missing or errors. Community mirror of upstream's hooks/hermes/rtk-rewrite, not affiliated with rtk-ai. scripts/update.sh downloads the pinned RTK release binary (v0.49.0, checksum-verified).", "maintainer": "kerrz2020", "tier": "community", "category": "tools", "version": "1.0.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "ruapi", "title": "RuAPI", "repo": "https://github.com/RuAPI-ai/hermes-provider-ruapi", "sha": "fbefc615d447729ccf85aec05e0ea27ecc6f3bd9", "subdir": "ruapi", "description": "RuAPI as Hermes model providers on one key: `ruapi` serves Claude models over RuAPI's native Anthropic Messages API (so Hermes' Anthropic prompt caching and thinking apply), and `ruapi-openai` serves GPT, Gemini, DeepSeek, GLM, Qwen, Kimi and other chat models over its OpenAI-compatible API. Each /model picker lists that side's chat models from the account's GET /v1/models list, leaving out image and video models, and context windows and image input are declared for the main models. Maintained by RuAPI. Disclosure \u2014 registers two model providers at import and nothing else (no tools, hooks, commands or threads). Prompts, tool schemas and RUAPI_API_KEY go to https://www.ruapi.ai (/v1/messages and /v1/chat/completions) through Hermes' own clients, and RuAPI forwards each request to the upstream vendor serving the model. The model list is Hermes' standard GET https://www.ruapi.ai/v1/models request with the key; the plugin makes no network requests of its own, adds no headers, sends no telemetry, reads or writes no files and stores no credentials.", "maintainer": "RuAPI", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/RuAPI-ai/hermes-provider-ruapi#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["RUAPI_API_KEY"]}}, {"name": "runbox", "repo": "https://github.com/Zek-Takai/hermes-runbox", "sha": "544e6f35c65c45d085a90078a328dbd8c3fb8872", "subdir": "plugin", "title": "runbox", "version": "0.1.0", "description": "Build, run and test Python in an offline container per chat, with results as a plain file:line issue list. The agent syncs files or folders in as copies, then runs run (a shell command), check (ruff error rules) and test (pytest); fixes stay in the box until the user asks for export, which writes changed files back through write_file and reports host files changed since the sync as conflicts. In Hermes Desktop a VS Code-style editor opens beside the chat: file tabs with in-place editing, Run / Check / Test / Stop, and PROBLEMS / OUTPUT / RUNS panels that follow the agent live. Ships the runbox:dev-loop starting-point skill. Disclosure \u2014 needs Docker (on macOS a dedicated colima profile 'runbox', started on demand with --activate=false and its own Docker config); pulls the container image pinned by digest and installs a hash-pinned checker toolchain (ruff 0.16.9, pytest 9.1.1 and deps) from PyPI once per image; the work container has no network, hardened flags, and runs commands without Hermes' dangerous-command approval like Hermes' Docker backend; install (PyPI) always asks for approval in a separate installer container; a write_file/patch on an imported original asks for approval (guard_imports); export reads each existing target through read_file before replacing it; a background thread removes idle containers (15 min), stops the VM, and removes boxes of deleted or long-idle chats (reads state.db read-only hourly); adds a short per-turn note (about 80 tokens); no credentials or telemetry.", "maintainer": "Zek-Takai", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.2", "platforms": ["linux", "macos"], "image": "https://raw.githubusercontent.com/Zek-Takai/hermes-runbox/544e6f35c65c45d085a90078a328dbd8c3fb8872/docs/runbox-banner.png", "screenshots": ["https://raw.githubusercontent.com/Zek-Takai/hermes-runbox/544e6f35c65c45d085a90078a328dbd8c3fb8872/docs/runbox-desktop.png", "https://raw.githubusercontent.com/Zek-Takai/hermes-runbox/544e6f35c65c45d085a90078a328dbd8c3fb8872/docs/runbox-demo.gif"], "known_issues": ["Needs Docker: on macOS install colima and the docker CLI (brew install colima docker); on Linux a running Docker daemon. The first start on macOS downloads the VM image and takes a few minutes.", "The Hermes data folder must be under your home folder on macOS (colima shares only that).", "The agent may not always pick runbox on its own (the model chooses its tools). Ask it to use runbox."], "capabilities": {"provides_tools": ["runbox"], "provides_hooks": ["pre_tool_call", "pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "runcrate-provider", "repo": "https://github.com/runcrateai/hermes-runcrate", "sha": "c0023f37820e05147f1dcd1cb8ebd712e6b122e2", "subdir": "model-providers/runcrate", "title": "Runcrate", "description": "Runcrate (runcrate.ai) open models via the OpenAI-compatible API at api.runcrate.ai/v1: live model list from /v1/models, DeepSeek V4.1 Flash as the default, and Hermes reasoning settings sent as reasoning_effort. Disclosure: model provider; prompts, tool schemas and RUNCRATE_API_KEY go to api.runcrate.ai, and free requests can be served by third-party model providers under their own terms (runcrate.ai/privacy).", "maintainer": "runcrateai", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/runcrateai/hermes-runcrate#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["RUNCRATE_API_KEY"]}}, {"name": "s2docs", "title": "s2docs", "repo": "https://github.com/c-pompa/s2docs", "sha": "71e3a45474de73e0b50740ee1851307aa5cc448e", "subdir": "plugin", "version": "0.1.2", "description": "Source 2 documentation and mod tooling for CS2 and Deadlock from a local index of Valve's own game data: convars, Hammer entities with their inputs and outputs, schema classes and enums, game events, the cs_script and Pulse APIs and Source2Wiki pages, plus the mod pipeline \u2014 scaffold addons, validate scripts and .cfg files, start map builds on a registered Windows host over SSH, deploy and verify hashes, and record evidence, test runs and job state. Needs uv and an index built with s2docs sync; every write-capable call asks for approval. Disclosure \u2014 runs its MCP server with uvx from the pinned git commit, resolving its PyPI dependencies on first start as of a fixed 2026-10-10 snapshot; nothing is sent to a third party, but SSH/scp go to any host registered through register_host, build_start runs agent-written shell commands on that host and its builds keep running after the session ends, deploy_push and job_attach copy local files the agent names, and it writes its own index and addon workspace; write tools ask for approval through the package's untrusted server trust.", "maintainer": "c-pompa", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.3", "docs_url": "https://github.com/c-pompa/s2docs/tree/main/plugin", "platforms": ["macos", "linux", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "s3", "repo": "https://github.com/lagoon-labs/hermes-s3-plugin", "sha": "3d1514e270914d89b4e99db9917eaec25d4e6688", "description": "Generic S3-compatible backup and restore operations for Hermes", "maintainer": "lagoon-labs", "tier": "community", "category": "tools", "docs_url": "https://github.com/lagoon-labs/hermes-s3-plugin#readme", "capabilities": {"provides_tools": ["s3-ls", "s3-pull", "s3-push", "s3-rm"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sabi-metadata", "repo": "https://github.com/vizuh/sabi", "sha": "b59bd21b89fca091bf9ebcfb3082a4191e511da7", "description": "Fail-closed attribution middleware for Sabi's local adaptive routing lane (sabi-code). Adds opaque session/turn headers on loopback only; ignores all other models. Verified on Hermes 0.21.3.", "maintainer": "Atroci", "tier": "community", "category": "models", "subdir": "packages/adapters/hermes/plugin", "docs_url": "https://github.com/vizuh/sabi/blob/main/docs/adapters/hermes.md", "version": "0.1.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": ["llm_request"], "requires_env": ["SABI_HERMES_BASE_URL"]}}, {"name": "safeailabs-provider", "title": "Safe AI Labs", "repo": "https://github.com/nevertrust-ai/hermes-safeailabs-provider", "sha": "3fa82ed3b8fc2aa52e96afeabdfbe19fa6a043fc", "description": "Safe AI Labs as a Hermes model provider (`--provider safeailabs`, or Safe AI Labs in `hermes model`): an OpenAI-compatible API with one endpoint per region, the model list from its /v1/models and the context window of its fallback model declared. Disclosure \u2014 registers one model provider at import and nothing else (no tools, hooks, commands or threads); chat requests and the model list go to https://us.api.safeailabs.ai/v1 (or SAFE_AI_BASE_URL) through Hermes' own client with SAFE_AI_KEY, which Hermes reads; the plugin itself opens no connections, reads and writes no files and starts no processes.", "maintainer": "nevertrust-ai", "tier": "community", "category": "models", "requires_hermes": ">=0.22.0", "version": "1.0.0", "docs_url": "https://github.com/nevertrust-ai/hermes-safeailabs-provider#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SAFE_AI_KEY"]}}, {"name": "salesforce-chatter", "repo": "https://github.com/zenplace-system/hermes-plugin-salesforce-chatter", "sha": "16ff469ffb1484e37053315e799846d3c4d7c9d8", "subdir": "salesforce_chatter", "title": "Salesforce Chatter", "description": "Talk to Hermes from Salesforce Chatter: @mention the bot user in a post or comment, it Likes the message as an acknowledgement and replies in the same thread, keeping the thread as one session. Images and files on the post are passed to the model; MEDIA files are attached back. Community plugin, not affiliated with Salesforce. Disclosure \u2014 authenticates as a dedicated bot user with the OAuth 2.0 JWT bearer flow, reading the private key file at SF_CHATTER_PRIVATE_KEY_PATH; talks to the configured Salesforce login host and the org instance (attachment downloads follow Salesforce redirects); image URLs in the agent's replies are fetched from the gateway host over HTTPS (any public host; private, loopback and metadata addresses are refused) and uploaded to Chatter; polls the To Me feed every 60 s and, for allowlisted groups, runs a SOQL probe every 5 s by default (counts against the org API quota); writes Likes, comments, files in the bot user's Files and optional home-channel posts; keeps its ledger in plugin-data/salesforce-chatter/inbox.sqlite. dry_run defaults to true (no Salesforce writes, no outbound image fetch); with SF_CHATTER_ALLOWED_USERS unset nobody is answered. Optional, off by default: html_preview renders model-generated HTML to PNG with Chromium in a network-isolated Docker container (digest-pinned image, pulled if missing). No telemetry.", "maintainer": "zenplace-system", "tier": "community", "category": "platform", "docs_url": "https://github.com/zenplace-system/hermes-plugin-salesforce-chatter#readme", "version": "0.2.1", "requires_hermes": ">=0.21.3", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SF_CHATTER_LOGIN_URL", "SF_CHATTER_CLIENT_ID", "SF_CHATTER_USERNAME", "SF_CHATTER_PRIVATE_KEY_PATH", "SF_CHATTER_BOT_USER_ID"]}}, {"name": "scalekit", "title": "Scalekit", "repo": "https://github.com/scalekit-inc/hermes-tools", "sha": "35bfcedf59442377a930c4c3ed1c818ca425c11a", "description": "Call any Scalekit connector from Hermes: 500+ connectors and 20,000+ tools. Disclosure \u2014 HTTP calls go to the Scalekit environment URL you paste; the three Scalekit values are read with get_secret; one person id is stored at plugin-data/scalekit/identifier; the model can request an approval link, run a named tool, or proxy one HTTP request. Provider tokens stay in Scalekit; no shell, no background process, no telemetry.", "maintainer": "scalekit-inc", "tier": "community", "category": "tools", "requires_hermes": ">=0.20.0", "docs_url": "https://github.com/scalekit-inc/hermes-tools#readme", "version": "0.1.0", "image": "https://raw.githubusercontent.com/scalekit-inc/hermes-tools/35bfcedf59442377a930c4c3ed1c818ca425c11a/screenshots/catalog-card.png", "screenshots": ["https://raw.githubusercontent.com/scalekit-inc/hermes-tools/35bfcedf59442377a930c4c3ed1c818ca425c11a/screenshots/01-plugin-installed-and-enabled.png", "https://raw.githubusercontent.com/scalekit-inc/hermes-tools/35bfcedf59442377a930c4c3ed1c818ca425c11a/screenshots/02-list-connections.png", "https://raw.githubusercontent.com/scalekit-inc/hermes-tools/35bfcedf59442377a930c4c3ed1c818ca425c11a/screenshots/03-github-connected.png", "https://raw.githubusercontent.com/scalekit-inc/hermes-tools/35bfcedf59442377a930c4c3ed1c818ca425c11a/screenshots/04-github-profile.png"], "capabilities": {"provides_tools": ["scalekit_authorize", "scalekit_execute_tool", "scalekit_list_connections", "scalekit_proxy"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SCALEKIT_CLIENT_ID", "SCALEKIT_CLIENT_SECRET", "SCALEKIT_ENVIRONMENT_URL"]}}, {"name": "scamgate", "repo": "https://github.com/odaiameera/scamgate", "sha": "297299b5b44153b5a255a2ad512ef26f9f21fb4f", "subdir": "src/scamgate", "description": "Offline scam gate. Blocks known-bad links and payments before a tool runs, and asks a human when it cannot see the destination. Disclosure \u2014 blocks agent tool calls that would edit Hermes config/profiles/plugins/hooks or turn approvals off, and with approvals off turns its \"ask\" into a block (setting when_approvals_off: allow restores asks); keeps its signing key and ask log under ~/.local/state/scamgate and phishing feeds under ~/.cache/scamgate (not per-profile); feeds download only when you run `scamgate update-feeds` (openphish.com, Phishing-Database on GitHub, optional urlhaus); optional SCAMGATE_RDAP=live sends each checked link's domain to its RDAP registry.", "maintainer": "odaiameera", "tier": "community", "category": "tools", "requires_hermes": ">=0.19.1", "version": "0.3.1", "docs_url": "https://github.com/odaiameera/scamgate", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["scamgate_check_url", "scamgate_check_payment"], "provides_hooks": ["pre_tool_call", "post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "search1api", "repo": "https://github.com/superagents-lab/hermes-search1api", "sha": "ab898ae9a46b382d53aeb7c26cfb1a32ce5c89b8", "description": "Live web search, news, Ask, page crawl, sitemap, and trending via Search1API", "maintainer": "superagents-lab", "tier": "community", "category": "web", "docs_url": "https://github.com/superagents-lab/hermes-search1api#readme", "version": "0.2.1", "capabilities": {"provides_tools": ["search1api_search", "search1api_news", "search1api_ask", "search1api_crawl", "search1api_sitemap", "search1api_trending"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "secret-drop", "repo": "https://github.com/Goitonthefloor/hermes-secret-drop", "sha": "505bd3b47937ae453d4a54a2ee2455a4d274bf42", "description": "Store a secret on the gateway host without showing it to the model. Disclosure \u2014 stores the value in plaintext in the profile .env (mode 0600) and adds the name to terminal.env_passthrough, so $NAME is available to the terminal tool; the model can still read the value with its own tools (cat .env, echo $NAME). Keeps secrets out of chat/prompt context and redacts verbatim output of credential-shaped values; it is not a boundary against a model that deliberately reads it. Adds a static system-prompt section and a /secret command. Imports private core helpers read-only (_config_profile_scope, _is_hermes_provider_credential, _CONFIG_LOCK).", "maintainer": "Goitonthefloor", "tier": "community", "category": "desktop", "version": "1.4.0", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start"], "provides_middleware": [], "requires_env": []}}, {"name": "secret-handoff", "repo": "https://github.com/aean0x/hermes-secret-handoff", "sha": "f669c2a8adce468790be46ad70cfd312df53ba79", "description": "Ephemeral credential paste: request_secret asks through clarify and injects the reply over CDP, never storing it. Disclosure \u2014 the reply is typed into the focused field of the page whose origin matches the requested service, over the endpoint from BROWSER_CDP_URL or SECRET_HANDOFF_CDP_URL; the answer is visible in the CLI scrollback or the chat history of the surface that asked, and the value is never written to disk, the tool result, or the session transcript.", "maintainer": "aean0x", "tier": "community", "category": "tools", "docs_url": "https://github.com/aean0x/hermes-secret-handoff#readme", "version": "0.3.6", "capabilities": {"provides_tools": ["request_secret"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "secure-env-ingress", "repo": "https://github.com/web3blind/hermes-secure-env-plugin", "sha": "96fac2a1295f51d45466276276af32e6d6059c41", "subdir": "secure_env_ingress", "description": "One-use HTTPS forms for missing environment secrets, native encrypted Browser Vault logins/TOTP setup keys and payment cards, protected hosted payment-field filling, nested HTTPS verification codes/passcodes, and approved secret operations outside chat and LLM input. Disclosure \u2014 /senv setup supplies a skill using sudo for host packages and TLS setup after approval; the TLS listener binds all interfaces by default; pre_gateway_dispatch observes gateway messages to bind commands to their sender. In interactive Telegram sessions, secure_env_vault saves logins or fills a code field through the captured browser supervisor without explicitly submitting the site form. Explicit parent payment/nested-code targeting requires compatible host task/profile ownership and browser-generation evidence and fails closed without it; this is not a general fix for native Vault named-tab selection. Payment filling requires separate native consent and exact document/control guards; explicit resume requires existing nonempty values to match Vault. Site input callbacks, especially 3-D Secure, may authorize or auto-submit an operation. Unknown outcomes require external verification before retry. secure_operation executes administrator-allowlisted, SHA-256-pinned external Python consumers with gateway privileges; consumers are trusted, not sandboxed, and none are enabled by default. Secret input is not persisted by this mode; consumers must enforce their own handling policy. Links are bearer authorization, not submitter identity; cancellation cannot stop an already-running consumer.", "maintainer": "web3blind", "tier": "community", "category": "tools", "version": "0.8.1", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/web3blind/hermes-secure-env-plugin/blob/96fac2a1295f51d45466276276af32e6d6059c41/README.md", "platforms": ["linux"], "capabilities": {"provides_tools": ["secure_env_vault", "secure_payment_fill", "secure_operation"], "provides_hooks": ["pre_gateway_dispatch"], "provides_middleware": [], "requires_env": []}}, {"name": "sem-weave", "repo": "https://github.com/Ataraxy-Labs/sem", "sha": "631138c691817f2aa11cecdde3c400e6a0b910aa", "subdir": "integrations/agent-plugin", "description": "CLI-backed skills for local code discovery and entity-diff review with Sem, plus optional Weave branch-merge previews. Requires user-installed CLIs; does not apply edits or merges, install binaries, or change Git configuration.", "maintainer": "rs545837", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/Ataraxy-Labs/sem/tree/631138c691817f2aa11cecdde3c400e6a0b910aa/integrations/agent-plugin", "version": "0.1.0", "platforms": ["linux", "macos"], "known_issues": ["Requires Ataraxy Sem on the host terminal's PATH; Weave is optional for merge previews.", "Tested with Sem 0.27.0 and Weave 0.5.4 on macOS; Windows shell instructions are not included."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sendblue", "repo": "https://github.com/duoi/hermes-sendblue-plugin", "sha": "3318aaa4402769ce440d43e0445ea2151ad5e73e", "description": "Sendblue iMessage / SMS integration. Provides typing indicators, async daemon routing, and Active LLM Tools for SMS dispatch.", "maintainer": "duoi", "tier": "community", "category": "platform", "docs_url": "https://github.com/duoi/hermes-sendblue-plugin#readme", "capabilities": {"provides_tools": ["sendblue_list_messages", "sendblue_send_message"], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "senler-io-user", "title": "Senler.io", "repo": "https://github.com/SenlerBot/senler-io-user-hermes-plugin", "sha": "2294619a45f313f7c4d7c6b75bfa8e3781659253", "description": "Get task-specific guidance for Senler agents, automations and knowledge, connect your account through MCP OAuth, and automate selected webhook events with an outbound Relay connection. Disclosure \u2014 Hermes installs the declared `python-socks[asyncio]` dependency for native SOCKS proxy support. First activation of the enabled plugin adds a `senler-io-user` MCP server (mcp-senler-io-user.senler.io; OAuth handled by Hermes) to the profile's config.yaml and records completion through plugin settings, which native uninstall clears. Reinstalling and enabling the plugin prepares a missing MCP again. The old durable marker from 0.5.2\u20130.5.3 is ignored, so upgrading restores a missing entry once, including an entry manually removed before this upgrade. Existing compatible and disabled connections are preserved; later loads in the same installation respect manual removal. Explicit chat setup can restore a removed connection. Relay setup enables a `senler-io` gateway platform in the same profile. Once you enable automation, the gateway keeps an outbound WSS connection to a Senler-supplied Relay address and runs unattended agent turns on incoming Senler events (customer messages, leads, etc.); the platform is `trusted_inbound`, so these events bypass Hermes allowlists and pairing, and customer text reaches the model as untrusted data. During those runs a hook allows the Senler MCP and native tool discovery and pins customer replies to the event's dialog, but other Senler MCP writes run without a Hermes approval prompt, limited only by your saved instructions and your Senler account permissions. Relay credentials, instructions, event payloads and reports are stored unencrypted in `<HERMES_HOME>/senler-io-relay.sqlite3`; result reports (up to 16,000 characters) and this machine's hostname (as the Relay client name) are sent to Senler. Configured monitoring also stores notification recipients, queued texts and delivery receipts in that database; the selected native Hermes messaging adapter sends summaries and delivery-test messages to the saved recipient.", "maintainer": "SenlerBot", "tier": "community", "category": "automation", "version": "0.5.6", "docs_url": "https://github.com/SenlerBot/senler-io-user-hermes-plugin/blob/2294619a45f313f7c4d7c6b75bfa8e3781659253/README.md", "image": "https://raw.githubusercontent.com/SenlerBot/senler-io-user-hermes-plugin/2294619a45f313f7c4d7c6b75bfa8e3781659253/assets/catalog-banner.png", "readme": true, "known_issues": ["After updating, restart the backend used by Desktop and the gateway; a new chat alone may still use older loaded plugin code.", "Preview: Windows Desktop sign-in was previously confirmed; automatic MCP appearance still needs a Desktop UI check, and a real Senler Relay workflow needs end-to-end verification.", "Requires current Hermes with native MCP OAuth and Relay transport; gateway proxy mode and multiplexed profiles are unsupported.", "Monitoring notifications require a connected messaging channel; arbitrary Desktop/TUI chats are unsupported."], "capabilities": {"provides_tools": ["senler_connect", "senler_relay"], "provides_hooks": ["pre_tool_call", "on_session_end"], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.6"}, {"name": "serpapi", "repo": "https://github.com/serpapi/serpapi-hermes-plugin", "sha": "b5049b4aa0f56836d2f88908c1c2ebca2b9dcf64", "description": "SerpApi web, Maps, News, Shopping, Hotels, Flights, and Travel Explore for Hermes Agent.", "maintainer": "serpapi", "tier": "community", "category": "web", "title": "SerpApi", "version": "1.1.1", "docs_url": "https://github.com/serpapi/serpapi-hermes-plugin#readme", "capabilities": {"provides_tools": ["serpapi_maps_search", "serpapi_news_search", "serpapi_shopping_search", "serpapi_hotels_search", "serpapi_flights_search", "serpapi_travel_explore_search"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SERPAPI_API_KEY"]}}, {"name": "serverless-inference-for-hermes", "title": "CoreWeave Inference", "repo": "https://github.com/coreweave/serverless-inference-for-hermes", "sha": "4fb2c1e63cce98bf5563372e5836e94fe92e1448", "description": "CoreWeave Serverless Inference model provider. Disclosure \u2014 Hermes sends model discovery and chat requests, including prompts and tool results, to https://api.inference.wandb.ai/v1 (CoreWeave / W&B Inference) using COREWEAVE_API_KEY; the installed provider registers a profile only and reads no credential files, starts no processes and adds no telemetry.", "maintainer": "coreweave", "tier": "verified", "category": "models", "docs_url": "https://github.com/coreweave/serverless-inference-for-hermes#readme", "version": "0.1.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["COREWEAVE_API_KEY"]}}, {"name": "session-dashboard", "repo": "https://github.com/tommulkins/hermes-plugin-session-analyzer", "sha": "f5a880ce8d9c4b3891c0687b4de6f30b93b5da16", "image": "https://raw.githubusercontent.com/tommulkins/hermes-plugin-session-analyzer/f5a880ce8d9c4b3891c0687b4de6f30b93b5da16/assets/social-preview.png", "description": "Session Analyzer \u2014 per-session analytics for the Hermes desktop app: full page at /session-dashboard with token/cache/cost aggregates, tool-call breakdown, file changes, failure groups, and Ask AI (copies a ready-to-run analysis prompt into a fresh draft chat). Read-only over state.db.", "maintainer": "tommulkins", "tier": "community", "category": "desktop", "requires_hermes": ">=0.20.0", "docs_url": "https://github.com/tommulkins/hermes-plugin-session-analyzer", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "session-find", "repo": "https://github.com/djmango/session-find", "sha": "caf185c59e62c56a6e4377b8fb08a0ce0e574301", "description": "A search window over your Hermes session history, opened with Cmd+Option+F, from the command palette, or from the glyph in the bottom bar whose hover shows the chord. Finds a session by an exact word, identifier or phrase through the gateway's own full text index, and by meaning as well when a session-find service answers on loopback; typed filters (in:, -in:, after:, before:, me:, repo: and quoted phrases) are mirrored as chips under the box. The empty box lists pinned then recent sessions, the preview pane shows the matching message with its neighbours, and the footer carries the round trip in whole milliseconds. It reads the session database read only, registers no agent tools, hooks or middleware, needs no credentials or environment variables; its only network calls are the loopback checks named below. The window half ships off by default and is switched on in the app's plugin inventory. Disclosure \u2014 while the search window is in use, the plugin's dashboard backend checks every 30 seconds for a separate session-find service at http://127.0.0.1:8474 (or the URL in SESSION_FIND_URL) and, when one answers, sends it your search text, preview requests and the ids of sessions you open, and shows the results it returns; otherwise it reads your Hermes session database read-only.", "maintainer": "djmango", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/djmango/session-find#readme", "version": "1.0.0", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "session-flow", "repo": "https://github.com/agantila/session-flow", "sha": "359f9afecb5872fe0864eec79867a4dfa4d88d33", "description": "Session pane for Hermes Desktop: Firefox-style session groups with project grouping, list/grid views, Ctrl+Scroll session cycling with a HUD, session-row styling and a built-in settings page. All timers are ctx-owned intervals disposed on unload (live-session poll ~30 s, session refresh ~45 s, project cache 60 s, activity expiry 30 s). The standalone full build in this repo (full/plugin.js, install.sh) is not part of this catalog entry. Contact: info@agantila.com. Disclosure \u2014 SDK-only Desktop plugin: reads the local Hermes gateway through public RPCs (projects.tree, projects.list, session.list, session.active_list, session.context_breakdown) and, on your actions, writes through public RPCs (projects.create/update/add_folder/remove_folder/set_primary/set_active/delete, session.create, session.cwd.set, session.title, session.branch_stored, session.archive, session.close, session.delete); captures Ctrl+mouse-wheel across the app (browser zoom suppressed except over canvases, editors and zoomable images) to cycle sessions; settings and groups stay in the app's local plugin storage; no outbound network, no shell commands, no credentials, no self-update.", "maintainer": "AGANTILA \u2014 Deniz Yilmaz <info@agantila.com>", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/agantila/session-flow#readme", "version": "1.29.1", "image": "https://raw.githubusercontent.com/agantila/session-flow/359f9afecb5872fe0864eec79867a4dfa4d88d33/docs/marketing/sf-catalog-banner-2x1.png", "screenshots": ["https://raw.githubusercontent.com/agantila/session-flow/359f9afecb5872fe0864eec79867a4dfa4d88d33/docs/marketing/heroes/sf-hero-a9-sidebar-kanban-files-16x9.jpg", "https://raw.githubusercontent.com/agantila/session-flow/359f9afecb5872fe0864eec79867a4dfa4d88d33/docs/marketing/heroes/sf-hero-a5-ctrlscroll-hud-16x9.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "session-lens", "title": "Hermes Session Lens", "repo": "https://github.com/abualnassr/hermes-session-lens", "sha": "69bc2b183fd376acf27256cd9b43f578a16388ae", "version": "0.53.2", "description": "Read-only observability for Hermes Desktop: what each session cost and why, its full trace, recurring tool failures, every profile at a glance, provider quotas and service balances, model comparison with cheaper-route evidence, and instruction-rule grading. Disclosure \u2014 reads every profile's state.db read-only plus agent logs, cron/gateway state, config.yaml and .env (key names, and the values of keys an adapter uses); with the credentials Hermes' own resolvers return, calls only each configured vendor's usage or balance endpoint (hosts listed in the README), sending Grok CLI client headers to cli-chat-proxy.grok.com and a Claude Code user-agent to api.anthropic.com; Hermes' resolvers may renew Hermes' Codex, Nous and xAI logins and, when Hermes holds no other Anthropic credential, Claude Code's login; runs the local monid CLI when installed; an Anthropic one-token Claude Haiku probe is off by default; writes no Hermes state itself and sends no session content anywhere.", "maintainer": "abualnassr", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/abualnassr/hermes-session-lens/blob/69bc2b183fd376acf27256cd9b43f578a16388ae/README.md", "image": "https://raw.githubusercontent.com/abualnassr/hermes-session-lens/69bc2b183fd376acf27256cd9b43f578a16388ae/docs/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/abualnassr/hermes-session-lens/69bc2b183fd376acf27256cd9b43f578a16388ae/docs/screenshots/why-it-cost.png", "https://raw.githubusercontent.com/abualnassr/hermes-session-lens/69bc2b183fd376acf27256cd9b43f578a16388ae/docs/screenshots/compare.png", "https://raw.githubusercontent.com/abualnassr/hermes-session-lens/69bc2b183fd376acf27256cd9b43f578a16388ae/docs/screenshots/fleet.png", "https://raw.githubusercontent.com/abualnassr/hermes-session-lens/69bc2b183fd376acf27256cd9b43f578a16388ae/docs/screenshots/recurring-failures.png", "https://raw.githubusercontent.com/abualnassr/hermes-session-lens/69bc2b183fd376acf27256cd9b43f578a16388ae/docs/screenshots/ai-usage.png", "https://raw.githubusercontent.com/abualnassr/hermes-session-lens/69bc2b183fd376acf27256cd9b43f578a16388ae/docs/screenshots/sessions.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "session-mirror", "repo": "https://github.com/rrrrnmtsu/hermes-session-mirror", "sha": "02a923f04b414f30286d31b278a3177892dd5f9f", "description": "Mirrors Hermes Desktop, CLI, TUI and ACP conversations into Discord: one public thread per session in a channel you choose, one post per turn (your message and the reply), so work started on a desktop can be followed from the phone. Posting runs on a background thread and never delays or breaks a turn. Disclosure \u2014 register() adds one post_llm_call hook; every turn's text (your message and the final reply, not tool calls or outputs) is sent to the Discord REST API (discord.com) using the bot token you configure, after Hermes's redact_for_egress plus a local token-pattern filter (fail-closed: nothing is sent if the redactor is unavailable); mentions are disabled. The bot token is read only via agent.secret_scope.get_secret (an UnscopedSecretError under multiplexing skips the turn); no external command is ever run. Each turn reads the session's title and source from $HERMES_HOME/state.db read-only; session-to-thread ids are stored (mode 0600) in $HERMES_HOME/state/session-mirror.json. The optional `hermes session-mirror backfill` CLI command reads $HERMES_HOME/state.db read-only and replays past sessions through the same redaction. No other files, telemetry or long-running processes beyond one daemon sender thread.", "maintainer": "rrrrnmtsu", "tier": "community", "category": "platform", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/rrrrnmtsu/hermes-session-mirror", "version": "0.5.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["post_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "session-ref", "repo": "https://github.com/kama-dev/hermes-session-ref", "sha": "468a0408a657becfcc70025d20b6ffc3bf66f8d1", "description": "Reference another Hermes session in the Desktop composer with @session \u2014 type @ and pick from live session suggestions. Inserts a compact @session:\"<title>\" reference; nothing is injected into context, the agent resolves it with its own session-search. No more copying session IDs.", "maintainer": "kama-dev", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/kama-dev/hermes-session-ref#readme", "version": "0.1.1", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "session-token-counter", "repo": "https://github.com/Vsemagush/session-token-counter", "sha": "0e69fb55f8ec11a44f32382c59746e13a30bc179", "description": "Accumulated input/output token totals and context-window occupancy for the focused session, in the Hermes Desktop status bar.", "maintainer": "Vsemagush", "tier": "community", "category": "desktop", "version": "1.0.0", "docs_url": "https://github.com/Vsemagush/session-token-counter#readme", "requires_hermes": ">=0.20.2", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sgme", "repo": "https://github.com/freehul/sgme", "sha": "f12c9bfa2cc9f4a59420376cb91176abb882948b", "subdir": "adapters/hermes", "version": "1.10.6", "description": "SGME (\u62fe\u5149\u8bb0\u5fc6) self-hosted long-term memory engine \u2014 tagged memories with provenance, per-turn recall, automatic session refinement, a skills library, wiki knowledge base, care signals, communication roles and a three-pool task system (ideas/demands/projects), all behind one HTTP service you own. The plugin is a thin bridge: no LLM, no database, everything heavy runs in your SGME server (local or remote). Disclosure \u2014 the plugin talks only to the SGME server you configure (default http://127.0.0.1:9910, SGME_BASE_URL for a remote server), sending SGME_AGENT_KEY / SGME_ADMIN_KEY read through Hermes's secret scope; each session's user, assistant and tool messages are appended to that server and refined into memories at session end by an LLM you configure on the SGME side; its sgme_* tools let the model read and change memories, skills, wiki pages and tasks on that server and write skill packages under $HERMES_HOME/plugin-data/sgme/skills/ on the SGME host; credential names in the SGME vault can be listed, and reading a credential value into the conversation is off by default (credential_get_enabled / SGME_ENABLE_CREDENTIAL_GET); no third-party services, no telemetry.", "maintainer": "freehul", "tier": "community", "category": "memory", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/freehul/sgme/blob/main/AI-INSTALL/README.md", "image": "https://raw.githubusercontent.com/freehul/sgme/f12c9bfa2cc9f4a59420376cb91176abb882948b/assets/selling-point-01-trace.png", "screenshots": ["https://raw.githubusercontent.com/freehul/sgme/f12c9bfa2cc9f4a59420376cb91176abb882948b/assets/selling-point-00-seamless-switching.png", "https://raw.githubusercontent.com/freehul/sgme/f12c9bfa2cc9f4a59420376cb91176abb882948b/assets/selling-point-02-shared-memory.png", "https://raw.githubusercontent.com/freehul/sgme/f12c9bfa2cc9f4a59420376cb91176abb882948b/assets/selling-point-03-unified-search.png", "https://raw.githubusercontent.com/freehul/sgme/f12c9bfa2cc9f4a59420376cb91176abb882948b/assets/selling-point-05-skillhub.png", "https://raw.githubusercontent.com/freehul/sgme/f12c9bfa2cc9f4a59420376cb91176abb882948b/assets/selling-point-07-scenario-inject.png", "https://raw.githubusercontent.com/freehul/sgme/f12c9bfa2cc9f4a59420376cb91176abb882948b/assets/selling-point-11-persona-insight.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SGME_BASE_URL", "SGME_AGENT_KEY", "SGME_ADMIN_KEY", "SGME_INJECT_MODE", "SGME_INJECT_MAX_TOKENS", "SGME_CAPTURE_ENABLED", "SGME_REFINE_ON_END", "SGME_HERMES_AGENT_ID", "SGME_HTTP_TIMEOUT"]}}, {"name": "shodan", "repo": "https://github.com/Adolanium/hermes-plugin-shodan", "sha": "d12828e9c90654bca598d45832cee2ef6454cf30", "description": "Shodan tools with complete capability declarations.", "maintainer": "Adolanium", "tier": "community", "category": "tools", "docs_url": "https://github.com/Adolanium/hermes-plugin-shodan#readme", "image": "https://raw.githubusercontent.com/Adolanium/hermes-plugin-shodan/d12828e9c90654bca598d45832cee2ef6454cf30/assets/catalog-banner.png", "capabilities": {"provides_tools": ["shodan_host", "shodan_search", "shodan_count", "shodan_dns", "shodan_cve", "shodan_account", "shodan_meta", "shodan_scan", "shodan_alert", "shodan_exploits", "shodan_query", "shodan_trends"], "provides_hooks": ["on_session_start", "on_session_reset"], "provides_middleware": [], "requires_env": ["SHODAN_API_KEY"]}}, {"name": "showly", "title": "Showly", "repo": "https://github.com/cuboteam/showly-plugin", "sha": "f3872b21388fe17719f988ebe52f5115cf5d3426", "subdir": "hermes", "description": "Preview, publish, and manage websites hosted on Showly from Hermes Agent, through the hosted Showly MCP server (Streamable HTTP). Portable Agent Plugins v1 package (mcp.json + skills/). Disclosure \u2014 tool calls go to Showly's hosted MCP server at mcp.showly.ai. The bundled showly-hosting skill makes Showly the default for any deploy, preview or share request that names no provider, and new links default to public (anyone with the link). The showly-reports skill runs a bundled local Node.js renderer (vendored answer-me-with-html 0.4.14, upstream self-update check removed) through the shell and uploads the report directory to Showly when sharing is requested. Sign-in is out of band: `npx @showly/mcp-server login --to hermes` (unpinned) writes MCP_SHOWLY_API_KEY into ~/.hermes/config.yaml.", "maintainer": "cuboteam", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "version": "0.7.2", "docs_url": "https://showly.ai/docs/mcp/overview", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "known_issues": ["Sign-in needs one command after install, because a portable mcp.json cannot carry a credential: npx @showly/mcp-server login --to hermes"]}, {"name": "sidebar-cycle", "repo": "https://github.com/devseunggwan/hermes-sidebar-cycle", "sha": "c42f19eeb48159e02f0e2d8c1615523529b35507", "description": "Step through Hermes Desktop sidebar sessions in on-screen order with Ctrl+Cmd+] / Ctrl+Cmd+[ (rebindable), wrapping at both ends. SDK-only: session-row slot markers for order, host.state for the focused session, host.openSession for navigation.", "maintainer": "devseunggwan", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "version": "0.1.0", "docs_url": "https://github.com/devseunggwan/hermes-sidebar-cycle", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sidebar-manager", "repo": "https://github.com/apoapostolov/hermes-agent-awesome-plugins", "sha": "6e65021e0fa4e5de678f2dba67dda6fe097703d9", "subdir": "public/sidebar-manager", "description": "Hide and reorder core sidebar navigation rows from a statusbar dialog.", "maintainer": "apoapostolov", "tier": "community", "category": "desktop", "docs_url": "https://github.com/apoapostolov/hermes-agent-awesome-plugins/tree/main/public/sidebar-manager", "version": "1.0.1", "image": "https://raw.githubusercontent.com/apoapostolov/hermes-agent-awesome-plugins/6e65021e0fa4e5de678f2dba67dda6fe097703d9/public/sidebar-manager/docs/hero.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sigrex", "repo": "https://github.com/sigrexio/agent-plugin", "sha": "c1d654b09a71709c00ca205a12210d868a4ec404", "image": "https://raw.githubusercontent.com/sigrexio/agent-plugin/c1d654b09a71709c00ca205a12210d868a4ec404/assets/banner.png", "description": "Build, run and manage sigrex.io trading automation (code and AI strategies, trading bots, webhooks and signals across crypto exchanges, DEXs and prediction markets) through the official Sigrex MCP server (Streamable HTTP at https://mcp.sigrex.io, OAuth sign-in, no keys in config), with the sigrex workflow skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/), no Python or executables; needs a free Sigrex account. The connection has full account access, including actions that can place live trades. Disclosure \u2014 the tool set is served by the remote MCP server at runtime and is not covered by the pinned sha; the bundled skill instructs the agent to confirm before any action that moves money or changes data.", "maintainer": "sigrexio", "tier": "community", "category": "tools", "docs_url": "https://docs.sigrex.io/more/mcp-server", "version": "1.0.4", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "singularity", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "d46aced3031a8f533fdbf0806bc4cf0d0b28be07", "subdir": "singularity", "description": "Singularity/Apptainer terminal backend: Hermes's terminal, file and code tools run inside a hardened, rootless container on this machine (--containall --no-home), with CPU/memory limits and an optional per-session persistent overlay (`hermes config set terminal.backend singularity`; image from `terminal.singularity_image`). Formerly built into Hermes core; existing users are migrated automatically. Disclosure \u2014 no Python dependencies and no network calls of its own: it drives the `apptainer` (or `singularity`) CLI you install, which pulls the configured image (default `docker://nousresearch/hermes-sandbox:desktop`) and caches a SIF under your scratch directory. Your skills and registered credential files are bind-mounted read-only into the container, and because the container is a disposable sandbox Hermes skips its dangerous-command prompts there, as for its other container backends.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.21.6", "version": "1.0.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/d46aced3031a8f533fdbf0806bc4cf0d0b28be07/assets/singularity.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/singularity", "platforms": ["linux"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sketch-pad", "repo": "https://github.com/aydnOktay/hermes-sketch-pad", "sha": "de7cd07ff29666ca1bcc3897f13b39f9472fab55", "description": "Draw a shape on a Desktop pad and attach the PNG to the next Hermes chat message. For \"what is this shape\" when you have no photo.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-sketch-pad", "version": "0.1.1", "platforms": [], "capabilities": {"provides_tools": ["sketch_pad_last"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "skill-integrity", "version": "0.2.1", "repo": "https://github.com/ZidoCode/skill-integrity", "sha": "352a190b89a91246487107f016c39bb777d8466c", "description": "Rug-pull detection for installed agent skills \u2014 fingerprints every file in every skill directory (SHA-256), keeps a profile-local snapshot, and reports exactly which skill files changed, appeared, or vanished since; a skill that mutates after install without the user touching it is the rug-pull signal. A skill directory made unreadable is reported as a finding, never treated as clean. Read-only observer, stdlib-only, zero network calls; blind spots (oversize files, symlinks, permission-denied) are counted and printed, never silent. The wrapper registers an hourly pre_llm_call hook that injects findings into the agent context, plus a /skill-integrity slash command (snapshot | check | show) that creates the baseline snapshot and shows the file-level diff. The CLI supports --state-dir to target the plugin's manifest directly. Skill dirs and state derive from get_hermes_home(), covering non-default profiles. Disclosure \u2014 reads (hash-only, read-only) every file under the active profile's skills directory and ~/.claude/skills, stores a mode-0600 snapshot in HERMES_HOME/plugin-data/skill-integrity, and at most hourly injects the names of changed skills into the agent's context.", "maintainer": "ZidoCode", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/ZidoCode/skill-integrity#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_commands": ["skill-integrity"], "provides_middleware": [], "requires_env": []}}, {"name": "skill-lineage", "title": "Skill Lineage", "repo": "https://github.com/simin-yuan/hermes-skill-lineage", "sha": "c21178d4578680297b6100638fff59b75d1b572e", "version": "0.1.8", "description": "Records where each skill version's content came from, so a skill that rewrites itself can be audited afterwards. For every skill write \u2014 a foreground skill_manage call, a background-review edit, or a curator consolidation \u2014 it stores the skill content fingerprint before and after, the sources present earlier in the same session (the text the user typed, tool results such as a fetched page or a file, and skills that were read), how each source is linked to the added lines \u2014 strong (at least three shared 8-word shingles), anchor (a shared operative token: a URL or host, a shell command with its first argument, a package install, a file path, an environment variable, an IP or e-mail address, that is not common across sources), or context (seen in the session, nothing measurable shared; recorded, not followed by default) \u2014 and a seq -> prev_hash -> hash chain over the entries. Text is never stored: hashes are keyed per install and the key stays in plugin-data/skill-lineage. `hermes skill-lineage trace <skill>` shows where the newest version came from, `descendants <url|skill>` lists every skill a source produced, `report` lists versions carrying operative lines of no traceable origin, `verify` re-walks the chain, and `head` prints a value to record elsewhere so a later `verify --head` can tell truncation from an intact chain; a key reset is recorded in the chain and shown in `status` rather than happening silently. The plugin does not stop a write and does not judge a skill: it records and it verifies, and it does not claim a source caused an edit. Prior work on memory lineage (MemLineage, arXiv:2605.14421) is acknowledged in the README. Measured on 2026-10-22 against Hermes 3166d61: Python 3.14 62 passed; Python 3.11 54 passed, 1 skipped; `hermes plugins validate` reports no warning other than one known false positive (a test template that quotes a \"curl | sh\" instruction as data and never runs it). Evaluation (generated scenarios and 120 real-model runs) in the README; raw output in eval/. A manual end-to-end run in an isolated HERMES_HOME (one real session creating a skill through skill_manage, then status/trace/descendants/report/verify/head) passed, raw output in tests/smoke-2026-10-21.txt. Disclosure \u2014 four read-only hooks (on_session_start, pre_llm_call, pre_tool_call, post_tool_call); reads tool results, user messages and skill files (in this profile, every other profile's skills folder, the project's .hermes/skills and the skills.external_dirs it reads from config.yaml) to compute keyed hashes; keeps hashes (no text) for 7 days per session and the lineage chain (hashes and skill names) under plugin-data/skill-lineage; no network, no credentials, never blocks or changes a tool call.", "maintainer": "simin-yuan", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/simin-yuan/hermes-skill-lineage#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start", "pre_llm_call", "pre_tool_call", "post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "skill-retrieval", "repo": "https://github.com/moonlight-lupin/agent-skills", "sha": "79801c69e797f5f8efd619f8f451ca89d18c7240", "subdir": "plugins/skill-retrieval", "description": "BM25-based skill retrieval for large skill libraries. An llm_request middleware rewrites the outgoing request's <available_skills> block to names only (the same bytes every turn, so prompt caching is unaffected), and a pre_llm_call hook appends the top-K matching skill descriptions to the current user message. Uses public plugin surfaces only (register_middleware, register_hook); reads SKILL.md frontmatter from the profile's skill roots and imports a few agent.prompt_builder / agent.skill_utils helpers read-only. pyyaml is the only dependency. Disclosure \u2014 optional Jev rerank, off by default: with SKILL_RETRIEVAL_RERANK=jev and TYPESAFE_API_KEY set (read from the environment only), each turn POSTs the user message (injection patterns stripped, capped at 2000 chars) and up to 12 shortlisted skill descriptions (400 chars each) to api.typesafe.ai (3 s timeout, no retries, BM25 order kept on error), and appends a local JSONL log (timestamp, session id, 200-char query excerpt, both orders) under $HERMES_HOME/data/jev-trial/, rotated past 5 MB. With the rerank off it makes no network calls and writes no files.", "maintainer": "moonlight-lupin", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.1", "version": "0.6.0", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "on_skill_lifecycle"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "skill-router", "repo": "https://github.com/xXLODXx/hermes-skill-router", "sha": "445c32f9b274f53bf3d37ce1b37ec1b3e5530ac4", "description": "Evidence-based, session-safe skill routing with auditable decisions and opt-in learning", "maintainer": "xXLODXx", "tier": "community", "category": "general", "docs_url": "https://github.com/xXLODXx/hermes-skill-router#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["post_llm_call", "post_tool_call", "pre_llm_call", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "snag-shelf", "repo": "https://github.com/aydnOktay/hermes-snag-shelf", "sha": "da1b51c53235010ca161bfda67097bfbc74ae277", "description": "Everything that snagged - cross-session shelf of failed tool calls. Full Desktop page, chip, pin, fix-prompt insert. No API keys. Disclosure \u2014 stores failed tool-call metadata (tool, truncated args with key-name redaction, error snippet) locally in plugin-data; no network.", "maintainer": "aydnOktay", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/aydnOktay/hermes-snag-shelf", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": ["snag_shelf_list", "snag_shelf_clear"], "provides_hooks": ["post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "snyk", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "abec9e822a23089943dd1d476a104bf746f19f86", "subdir": "snyk", "description": "Scan code (SAST), dependencies, container images, IaC and SBOMs with Snyk through its first-party MCP server (pinned snyk@1.1306.0 over npx stdio, CLI analytics disabled), with the snyk-security-scan workflow skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/); needs Node.js/npm on PATH and a free Snyk account (browser login via the snyk_auth tool).", "maintainer": "NousResearch", "tier": "official", "category": "tools", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/snyk", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/abec9e822a23089943dd1d476a104bf746f19f86/assets/snyk.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "source-tray", "repo": "https://github.com/aydnOktay/hermes-source-tray", "sha": "e64f7d2ad56f922410071e2096a40ceab421a392", "description": "Session source tray \u2014 URLs the Hermes agent opened via web_search, web_extract, or browser_navigate. Desktop pane and /sources. No search backend of its own and no API keys.", "maintainer": "aydnOktay", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/aydnOktay/hermes-source-tray", "version": "0.1.1", "platforms": [], "capabilities": {"provides_tools": ["source_tray_list", "source_tray_clear"], "provides_hooks": ["post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "specstream", "repo": "https://github.com/specstream/specstream-tools", "sha": "d62eac8deb008f106d6df8036d2724e1a483e0d3", "subdir": "plugins/hermes", "description": "SpecStream gives Hermes finished lists from the live web: describe the list in plain words and get every matching row with the page it was read from, priced per match with a maximum you approve before anything runs. Portable Agent Plugins v1 package with the hosted MCP server (remote streamable-http, OAuth 2.1 with dynamic client registration) and four skills (compile, review-work, approve-work, continue-work); no Python, no executables, no stored credentials. Disclosure \u2014 your request text and your answers to the price are sent to api.specstream.ai; approving a price spends your SpecStream balance (new accounts get $10 free) and the plugin marks its server `untrusted`, so Hermes asks before every call that is not read-only and refuses those calls in unattended runs; a `specstream` server you define in config.yaml replaces the package's and drops that prompt unless you add `trust: untrusted`.", "maintainer": "Specstreamai", "title": "SpecStream", "version": "1.2.0", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://specstream.ai/docs/mcp", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "spectator", "repo": "https://github.com/Sahil-SS9/spectator-mode", "sha": "a1467ded9802559b30061efe861701d8ec14bcae", "description": "Harness-neutral live session sharing, summaries, and branch queries. Disclosure \u2014 reads state.db read-only and exposes masked transcripts to invite-token guests on the dashboard; host-approved guest suggestions are injected via ctx.inject_message.", "maintainer": "Sahil-SS9", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/Sahil-SS9/spectator-mode", "platforms": [], "capabilities": {"provides_tools": ["spectator"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "speechify", "title": "Speechify", "repo": "https://github.com/Speechify-AI/hermes-speechify", "sha": "d9923efa6b4ab2d28aecd283c2afea9ae9e79b25", "description": "The official Speechify text-to-speech provider (tts.provider: speechify), maintained by Speechify. Simba 3.5 voices in 48 languages with low-latency streaming in voice mode, Opus voice notes for messaging platforms, and a hermes speechify command to list voices and hear a test line. Disclosure \u2014 sends the text being spoken, the chosen voice and model, the plugin's name and version (Speechify-Caller attribution headers), and your SPEECHIFY_API_KEY to api.speechify.ai (or the base_url / SPEECHIFY_BASE_URL you configure); synthesis is billed to your Speechify workspace; generated audio is written to Hermes's audio cache; no tools, hooks or middleware; no telemetry.", "maintainer": "Lokeshm24", "tier": "community", "category": "voice", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/Speechify-AI/hermes-speechify#readme", "version": "0.1.2", "known_issues": ["Streaming in voice mode needs Hermes 0.21.6 or newer; 0.21.5 speaks whole sentences instead."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SPEECHIFY_API_KEY"]}}, {"name": "spotify-desktop", "repo": "https://github.com/cruzlxyz/hermes-spotify-desktop", "sha": "9b564d53c219f9962404dee5f84d3bbb47683897", "description": "Spotify Connect remote for Hermes Desktop \u2014 status-bar mini player (now playing, transport, volume, devices, search, playlists, queue) reusing the Hermes Spotify login (Spotify Premium required for playback control). Unified agent+desktop package: Electron status-bar player plus a dashboard-API backend (desktop-focused, no web UI). No agent tools; config via plugins.entries.spotify-desktop.settings (poll intervals).", "maintainer": "cruzlxyz", "tier": "community", "version": "0.1.2", "category": "desktop", "docs_url": "https://github.com/cruzlxyz/hermes-spotify-desktop", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "known_issues": ["On Hermes releases where Spotify moved to the `spotify` plugin, the player needs spotify-desktop with cruzlxyz/hermes-spotify-desktop#2 plus `hermes plugins install spotify` (login: `hermes spotify login`); this pin predates that change."]}, {"name": "spotify", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "4d492b1dc5326af3e38bb2cf3e4b9ad6d65f0072", "subdir": "spotify", "description": "Spotify for Hermes: seven tools (playback, devices, queue, search, playlists, albums, library) over the Spotify Web API, plus `hermes spotify login|status|logout` (loopback PKCE with your own Spotify developer app; Premium needed for playback control). Formerly built into Hermes core; existing users are migrated automatically.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "requires_hermes": ">=0.21.6", "version": "2.1.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/4d492b1dc5326af3e38bb2cf3e4b9ad6d65f0072/assets/spotify.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/spotify", "platforms": [], "capabilities": {"provides_tools": ["spotify_playback", "spotify_devices", "spotify_queue", "spotify_search", "spotify_playlists", "spotify_albums", "spotify_library"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "stack", "repo": "https://github.com/Karb-Interactive/hermes-plugin-stack-memory", "sha": "a1763ec70080bf4094be7981223309264e7c0a18", "version": "0.2.0", "description": "Git-backed Markdown memory with background curation and model-based recall. Disclosure \u2014 runs a background curation agent with terminal, file-read and patch tools on your configured auxiliary model, fed raw conversation turns; it commits and pushes the memory store to whatever git remotes you configure, and pulls shared submodules at session start; the engine runs via uv run, which fetches pyyaml==6.0.2 from PyPI; an optional dataset file (memory.stack.dataset_enabled, off by default) stores full transcripts locally with no rotation.", "maintainer": "vykhovanets", "tier": "community", "category": "memory", "docs_url": "https://github.com/Karb-Interactive/hermes-plugin-stack-memory#readme", "homepage_url": "https://github.com/Karb-Interactive/hermes-plugin-stack-memory", "image": "https://raw.githubusercontent.com/Karb-Interactive/hermes-plugin-stack-memory/a1763ec70080bf4094be7981223309264e7c0a18/docs/stack-plugin-flow-banner.webp", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.4"}, {"name": "stacktree", "repo": "https://github.com/stevysmith/stacktree-skill", "sha": "139fe05f2a03db602b6e29a4816d30ffddf99816", "subdir": "agent-plugin", "description": "Publish what Hermes builds (reports, dashboards, briefs, proposals) to a private link that opens in any browser with no account for the viewer, set a passcode or limit it to a company's email addresses, update it in place, and see who opened it and what they commented. Portable Agent Plugins v1 package (mcp.json + skills/). Disclosure \u2014 hosted-only connector with no local code; every tool call goes to Stacktree's remote MCP server at api.stacktr.ee (OAuth 2.1 with dynamic client registration, token kept by Hermes); the HTML the model passes to publish_html or update_site is stored in the user's Stacktree account and served at the returned link (unlisted by default, public when a public_slug is set); page titles, open counts and third-party reader comments from that account are read into the session; the remote tools that publish, update, gate, delete pages or email approval requests run without a Hermes approval prompt; the required sign-in step `hermes mcp add stacktree --url https://api.stacktr.ee/mcp --auth oauth` writes a config.yaml server entry that replaces the package's own.", "maintainer": "Stacktree", "tier": "community", "category": "tools", "version": "1.2.0", "docs_url": "https://stacktr.ee/agents", "platforms": [], "known_issues": ["Sign in once after installing: hermes mcp add stacktree --url https://api.stacktr.ee/mcp --auth oauth"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "stalkchain", "repo": "https://github.com/StalkC/stalkchain-plugin", "sha": "a4db6100f1d031e5f07cd134e93600bfc70c5f78", "image": "https://raw.githubusercontent.com/StalkC/stalkchain-plugin/a4db6100f1d031e5f07cd134e93600bfc70c5f78/assets/hermes-banner.png", "title": "StalkChain", "description": "Crypto research in plain English through the official StalkChain Data MCP server (Streamable HTTP at https://data.stalkchain.com/mcp/directory, OAuth sign-in, no keys in config): check a coin before you buy, vet a trader before you copy them, see what smart money is buying, review a wallet and set price alerts, across Solana, Ethereum, Base, BNB Chain, Monad, Hyperliquid and Robinhood Chain, plus the StonkFun launchpad. Portable Agent Plugins v1 package (mcp.json + 18 skills), no Python or executables; needs a StalkChain account with credits. Read-only: never trades, moves funds or signs anything; the only write is the user's own price alerts, after they confirm. Disclosure \u2014 the tool set is served by the remote MCP server at runtime and is not covered by the pinned sha; each tool call sends the tool name and its inputs to data.stalkchain.com and spends the account's credits; price alerts are stored by StalkChain with their destination (account email or a user-given Discord, Slack or Telegram webhook URL, which can embed a bot token) until deleted or fired.", "maintainer": "StalkC", "tier": "community", "category": "tools", "docs_url": "https://data.stalkchain.com/docs", "version": "1.1.0", "screenshots": [], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sticky-notes", "repo": "https://github.com/VGFreakXBL/hermes-sticky-notes", "sha": "54cd588fe417b9745295a916ab15dd7d2f4fee39", "description": "In-window sticky notes for Hermes Desktop.", "maintainer": "VGFreakXBL", "tier": "community", "category": "desktop", "version": "0.2.0", "docs_url": "https://github.com/VGFreakXBL/hermes-sticky-notes#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "stop-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "604940a4bb6754c571b7562362fe2d1ceac1d741", "subdir": "stop-ledger", "description": "Local ledger of the turns you stopped while Hermes was still working (/stop, or /new and /reset during a running turn, on messaging platforms, the TUI and the desktop app): /stop-log shows how many running turns were stopped, how many by /stop and by /new, in how many sessions and how long ago the last one was, per platform or per day, for the last 24 hours, any number of hours or days, the latest session or everything recorded; /stop-log recent lists the newest stops (ten, or up to 100 with /stop-log recent 50). Disclosure \u2014 writes stop metadata (platform, /stop or /new, Hermes's label for the stop, a 12-digit hash of the session key; no session key or chat content) to plugin-data/stop-ledger/stops.jsonl, trimmed to 5,000 rows past 2 MB; observer only, cannot delay or undo a stop; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/stop-ledger", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/604940a4bb6754c571b7562362fe2d1ceac1d741/docs/stop-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["agent_loop_stopped"], "provides_middleware": [], "requires_env": []}}, {"name": "storm-fusion-research", "repo": "https://github.com/bmtrnavsky/storm-fusion-research-pipeline", "sha": "b1a492eb9cfd41b120db8ac6d8a97128901b87d2", "description": "Human-gated perspective-panel research. One question, several seats, one judge, one human. Solo, native subagent panel, or per-seat MoA/Fusion fanout via the storm_run_panel tool. Disclosure \u2014 every seat/judge call runs through Hermes's plugin LLM lane on your own credentials; with llm.allow_provider_override / allow_model_override enabled the agent picks provider and model per seat and spend follows that choice. The human gates are skill instructions to the agent, not enforced by the tool.", "maintainer": "bmtrnavsky", "tier": "community", "category": "tools", "version": "0.5.0", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/bmtrnavsky/storm-fusion-research-pipeline#readme", "image": "https://raw.githubusercontent.com/bmtrnavsky/storm-fusion-research-pipeline/b1a492eb9cfd41b120db8ac6d8a97128901b87d2/docs/social-preview.png", "capabilities": {"provides_tools": ["storm_run_panel"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "stream-speed", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "d7b48bbe90d18bfdf26ccbf7bd4da6616e7645d6", "subdir": "stream-speed", "description": "How fast each model starts answering and how fast it writes: /speed shows the median and p90 time to first text and the median characters per second per model, provider or day, or lists the newest streams (ten, or up to 100 with /speed recent 50), for the last 24 hours, any number of hours or days, the latest session or everything recorded, from the streaming hooks. Disclosure \u2014 writes per-response stream timings (ids, model, timings, character count, no text) to plugin-data/stream-speed/streams.jsonl, trimmed to 5,000 rows past 2 MB; atexit waits up to 1 s; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/stream-speed", "version": "1.4.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/d7b48bbe90d18bfdf26ccbf7bd4da6616e7645d6/docs/stream-speed-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_stream_start", "on_stream_delta", "on_stream_end"], "provides_middleware": [], "requires_env": []}}, {"name": "stt-vocab", "repo": "https://github.com/pierrenode/hermes-stt-vocab", "sha": "54e83f9289315af6d47c7c6fdeb5714a08b35262", "subdir": "stt-vocab", "description": "Puts the names a speech-to-text model mis-hears into the transcription prompt Hermes sends with each voice message: terms you list (globally or per surface) and names found in this profile's memories/USER.md and MEMORY.md, most important last, within the 896 characters Hermes keeps for Whisper-family backends; your stt.prompt stays in front. Notes written in German, Spanish, French, Italian, Dutch, Portuguese or Turkish can be named in the languages setting. Disclosure \u2014 register() adds one pre_transcription hook that returns a new prompt string; memory-derived names go only to local backends (faster-whisper, local_command) unless allow_remote is set, and the memory files are not read otherwise; reads at most 256 KB per memory file; no tools, network access, subprocesses or writes; Hermes uploads the prompt with the audio to the configured STT provider.", "maintainer": "pierrenode", "tier": "community", "category": "voice", "requires_hermes": ">=0.21", "docs_url": "https://github.com/pierrenode/hermes-stt-vocab", "version": "1.1.0", "image": "https://raw.githubusercontent.com/pierrenode/hermes-stt-vocab/6145d065d50f196d51b3ab80fe4a76fb2827c115/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_transcription"], "provides_middleware": [], "requires_env": []}}, {"name": "sugar", "repo": "https://github.com/roboticforce/sugar", "sha": "eade16940789bc1f927af090f8a3b475e537eddd", "subdir": "hermes-plugin", "description": "Local-first persistent memory for coding agents. SQLite on your disk - decisions, preferences, error patterns, and guidelines with project and global scopes and guideline-aware search. No cloud, no API key, nothing leaves the machine.", "maintainer": "Steven Leggett", "tier": "community", "category": "memory", "requires_hermes": ">=0.19", "docs_url": "https://github.com/roboticforce/sugar/tree/main/hermes-plugin", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "sunshine-moonlight", "repo": "https://github.com/lEWFkRAD/hermes-plugin-sunshine-moonlight", "sha": "46554af075ffbd2919f3b30326ef774a8bd489d2", "version": "0.1.0", "image": "https://raw.githubusercontent.com/lEWFkRAD/hermes-plugin-sunshine-moonlight/46554af075ffbd2919f3b30326ef774a8bd489d2/docs/banner.jpg", "description": "Set up and diagnose Moonlight game streaming (Sunshine host <-> Moonlight client) between machines that run Hermes. One tool, action-based: discover hosts on the tailnet/LAN, preflight ports, install+start Sunshine, pair clients, verify encoders, and launch a stream. Writes to remote machines only over SSH and only when the action says so. Disclosure \u2014 runs shell commands as your user on this machine and, over SSH, on hosts you name (BatchMode, your existing keys); `install` runs `sudo` with your package manager to install `sunshine` or `moonlight-qt` without a Hermes approval prompt; `configure`/`start` rewrite Sunshine's config (with a backup) and restart its user service; `discover` reads `tailscale status` and port-probes your tailnet peers; `launch` starts a Moonlight process. No credentials stored, no telemetry.", "title": "Sunshine / Moonlight", "maintainer": "lEWFkRAD", "tier": "community", "category": "tools", "docs_url": "https://github.com/lEWFkRAD/hermes-plugin-sunshine-moonlight#readme", "requires_hermes": ">=0.21.3", "platforms": ["linux"], "capabilities": {"provides_tools": ["game_stream"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "superlocalmemory", "repo": "https://github.com/qualixar/superlocalmemory", "sha": "2aeef02a3007c3bdc097b4b00e89c905f1b72289", "subdir": "hermes-plugin", "description": "Local-first long-term memory for Hermes, kept on your own computer: recall before each turn, tool-outcome logging, opt-in turn capture, 16 skills and /slm commands. Disclosure \u2014 talks only to the `superlocalmemory` MCP server you configure and grant in `plugins.entries.superlocalmemory.mcp_allowlist` (on this computer, or on another one with `connection: remote`): each turn's user message (redacted) is sent for recall and every tool call's arguments and result (redacted, up to 2,000 characters each) are logged to it, and with `capture_turns` on every turn is saved; `/slm` commands run the local `slm` CLI, including ones that change SLM and host settings (`/slm upgrade-hosts --apply` writes the plugin's grant into Hermes config.yaml); `slm_agent` starts a child agent that inherits the parent session's tools.", "maintainer": "Qualixar", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/qualixar/superlocalmemory/blob/main/docs/hermes.md", "version": "4.2.6", "title": "SuperLocalMemory", "known_issues": ["Grant the plugin its memory server after install: slm upgrade-hosts --host hermes --apply (adds mcp_allowlist: [superlocalmemory])."], "capabilities": {"provides_tools": ["slm_agent", "slm_agent_status", "slm_agent_cancel", "slm_agent_result"], "provides_hooks": ["on_session_start", "pre_llm_call", "post_tool_call", "post_llm_call", "on_session_end", "on_session_finalize", "on_session_reset", "on_skill_lifecycle", "subagent_start", "subagent_stop"], "provides_middleware": [], "requires_env": []}}, {"name": "supermemory", "repo": "https://github.com/supermemoryai/hermes-supermemory", "sha": "91405dd00fdf2a0b3515b25c25557598f6793299", "version": "1.0.1", "description": "Supermemory semantic long-term memory provider \u2014 profile recall, semantic search, explicit memory tools, and per-turn conversation capture. Maintained by Supermemory; the same provider that shipped in-tree.", "maintainer": "supermemoryai", "tier": "community", "category": "memory", "docs_url": "https://github.com/supermemoryai/hermes-supermemory#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SUPERMEMORY_API_KEY"]}}, {"name": "surp-hermes-x402-llm", "repo": "https://github.com/ivcained/surp-hermes-x402-llm", "sha": "fdbd49f8a4577199f0870d0bf9e15b795467977c", "description": "Marketplace-aware LLM routing for Surp \u2014 live prices for all models, provider TPS and trusted flags, mid-chat seller switching, secret masking, and approval-gated paid chat. Disclosure \u2014 the messages passed to surp_chat and SURP_API_KEY go to the surp.ivc.lol gateway, run by the individual developer ivcained (operator page https://surp.ivc.lol/operator, terms https://surp.ivc.lol/terms; not affiliated with Surplus Intelligence), which forwards them to third-party sellers on the Surplus Intelligence marketplace, including sellers not flagged trusted unless trusted_only is set; paid surp_chat calls spend from the user's prepaid Surp balance (USDC on Base, 5 % gateway markup), each behind a per-model Hermes approval prompt (denied in cron and other unattended runs by default) plus a per-request ceiling (max_spend_usd, default $0.05); the price, provider, quote, combo and cache tools call the same gateway without a key; routing preferences are stored under HERMES_HOME/cache/surp-hermes-x402-llm/.", "maintainer": "ivcained", "tier": "community", "category": "models", "version": "0.5.0", "readme": true, "capabilities": {"provides_tools": ["surp_models", "surp_markets", "surp_providers", "surp_route_prefs", "surp_quote", "surp_cache_status", "surp_chat", "surp_usage", "surp_jev_stats", "surp_combo_create", "surp_combo_list", "surp_combo_get"], "provides_hooks": ["pre_tool_call"], "requires_env": ["SURP_API_KEY"]}, "requires_hermes": ">=0.21.5"}, {"name": "switchbot-control", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-switchbot-control", "sha": "f6083c6b25b9d9bd274e6dc6e483b5e1d522b7ee", "description": "SwitchBot OpenAPI v1.1, personal use. No Plug Mini on/off. Locks off unless enabled. setPosition only Curtain/Curtain3 (0=open). Disclosure \u2014 Controls real devices through the SwitchBot cloud API (api.switch-bot.com) using your SWITCHBOT_TOKEN and SWITCHBOT_SECRET. Each call reads SWITCHBOT_TOKEN and SWITCHBOT_SECRET for the active profile, and an HTTP proxy set in the environment is not used. Every command asks for Hermes approval and is refused under cron, yolo, approvals off and unattended sessions. Lock and door devices stay refused unless you turn on safety_devices. The plugin has no user list of its own: anyone you allow on your Hermes gateway can request a command and approve it. Answering \"always\" adds an unused line to config.yaml each time. The optional watch is a cron job (a model turn every 5 minutes by default) that stays after uninstall until you run unschedule. Not tested on real devices. While the plugin is enabled, its skill adds one line to the skills index of every session, including surfaces where the tools are turned off.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-switchbot-control#readme", "version": "0.1.2", "image": "https://raw.githubusercontent.com/TakeshiTGAL/hermes-plugin-switchbot-control/f6083c6b25b9d9bd274e6dc6e483b5e1d522b7ee/assets/catalog-banner.png", "platforms": [], "capabilities": {"provides_tools": ["switchbot_devices", "switchbot_command", "switchbot_watch"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SWITCHBOT_TOKEN", "SWITCHBOT_SECRET"]}}, {"name": "t3-code-theme", "title": "T3 Code Theme", "repo": "https://github.com/mariomondev/t3-code-theme", "sha": "c84ce92c9223de1a3395e384c6404bf0e07ee2ce", "description": "Unofficial port of the standard T3 Code dark theme for Hermes Desktop. Palette, T3 composer, sidebar thread cards with project and branch, model labels and confirm dialogs. Scoped to its own theme; other themes are untouched. Disclosure \u2014 unofficial T3 Code lookalike theme; its stylesheet restyles and hides some native Desktop controls, it reads local session metadata (branch, repo, provider) for sidebar cards, and it switches the active theme once on first enable.", "maintainer": "mariomondev", "tier": "community", "category": "desktop", "docs_url": "https://github.com/mariomondev/t3-code-theme#readme", "version": "0.5.0", "image": "https://raw.githubusercontent.com/mariomondev/t3-code-theme/c84ce92c9223de1a3395e384c6404bf0e07ee2ce/docs/banner.jpg", "screenshots": ["https://raw.githubusercontent.com/mariomondev/t3-code-theme/c84ce92c9223de1a3395e384c6404bf0e07ee2ce/docs/chat.png", "https://raw.githubusercontent.com/mariomondev/t3-code-theme/c84ce92c9223de1a3395e384c6404bf0e07ee2ce/docs/empty-chat.png", "https://raw.githubusercontent.com/mariomondev/t3-code-theme/c84ce92c9223de1a3395e384c6404bf0e07ee2ce/docs/sidebar.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "tabella", "repo": "https://github.com/dyiapanis/tabella", "sha": "449e75462dc227789ef5c64e828c4db577f40ee5", "description": "Document lifecycle for agents in one package: create .docx/.xlsx/.pptx/.pdf/.odt/.ods/.odp from structured JSON or raw HTML/CSS, convert between formats via pandoc + LaTeX, and read any document \u2014 anydoc (Rust, office formats and text PDFs to Markdown, in-process) with LiteParse + Tesseract OCR fallback for scanned PDFs and images, plus PDF text editing with output-directory guards. Ships as an Agent Plugins v1 package (auto-discovered plugin.json + mcp.json declaring a stdio MCP server \u2014 the client spawns it per the v1 lifecycle, PLUGIN_ROOT/PLUGIN_DATA injected \u2014 plus an optional self-host streamable-HTTP server; first run of either bootstraps the dependency venv). The HTTP lane binds to 127.0.0.1 only and requires Bearer auth out of the box: a random token is generated into PLUGIN_DATA on first run (TABELLA_TOKEN overrides); requests with an Origin header or a non-JSON body are rejected, and model-supplied HTML cannot fetch network or local-file resources (data: URIs only \u2014 the same fetcher now also guards CSS input, not just HTML). Pandoc invocations are argument-safe: extra_args is allowlisted (--toc, --number-sections, -V key=value) and from_format/to_format are validated against the built-in format-name grammar (^[a-z0-9_]+([+-][a-z0-9_]+)*$), closing pandoc's *.lua reader/writer code-exec path; both servers re-exec into the dependency venv after bootstrap. Disclosure \u2014 Python deps (python-docx, openpyxl, python-pptx, weasyprint, odfpy, Pillow, lxml, PyMuPDF, firecrawl-anydoc, liteparse \u2014 10 direct packages, transitives included in a 25-package closure) are pinned to exact versions with sha256 hashes in requirements-pinned.txt and installed with --require-hashes into a venv under PLUGIN_DATA or ~/.venvs/docs (scripts/setup.sh on Linux/macOS; on Windows the venv is built with the standard library's venv module \u2014 no bash or MSYS2 needed); system pandoc is required for conversion, a TeX engine (e.g. texlive-xetex) only when the output format is PDF (weasyprint for HTML->PDF); OCR needs the tesseract binary (UB-Mannheim build on Windows); all conversion, reading, OCR and PDF editing run locally with no network or telemetry; nothing is uploaded; read, convert, and PDF-edit tools access exactly the filesystem paths you pass; doc_create_document additionally containment-checks its output paths against the configured output directory (escape warns). Linux and Windows are CI-tested platforms (five-lane smoke battery on windows-latest: stdio lifecycle through a natively bootstrapped venv, create, read, pdf-from-html via the GTK runtime, pandoc convert).", "maintainer": "dyiapanis", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/dyiapanis/tabella#readme", "version": "2.0.2", "readme": true, "platforms": ["linux", "windows"], "capabilities": {"provides_tools": ["doc_read", "doc_read_meta", "doc_convert", "doc_create_document", "doc_edit_pdf"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "tailgate", "repo": "https://github.com/c0mrade/tailgate", "sha": "1d497b91e249a9fb870a822126204ca055dabdfe", "description": "Per-job progress updates in chat for jobs Hermes hands off to other machines (coding agents, CI, scripts), with per-job mute and follow and no model calls.", "maintainer": "c0mrade", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/c0mrade/tailgate#readme", "version": "0.2.0", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["tailgate_job_id"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "talaria-webui", "repo": "https://github.com/liamsmith86/talaria-webui", "sha": "14dbcd48e381558643770d54f644714f89204dc3", "subdir": "src/talaria/hermes_plugin", "description": "Extends Hermes Agent API capabilities to deliver a richer chat interface with Talaria WebUI. Disclosure \u2014 adds API_SERVER_KEY-authenticated /talaria/v1 routes to the Hermes API server (cross-session history search, rewind/branch/compress of API sessions, runs with the profile's instructions and prefill); stores response metadata (no message bodies) in $HERMES_HOME/talaria/observations.db; relies on private api_server/AIAgent internals behind feature detection.", "maintainer": "liamsmith86", "tier": "community", "category": "web", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/liamsmith86/talaria-webui/tree/14dbcd48e381558643770d54f644714f89204dc3/src/talaria/hermes_plugin", "version": "1.5.1", "image": "https://raw.githubusercontent.com/liamsmith86/talaria-webui/14dbcd48e381558643770d54f644714f89204dc3/.github/assets/social-preview.jpg", "screenshots": ["https://raw.githubusercontent.com/liamsmith86/talaria-webui/14dbcd48e381558643770d54f644714f89204dc3/.github/assets/demo-desktop.gif", "https://raw.githubusercontent.com/liamsmith86/talaria-webui/14dbcd48e381558643770d54f644714f89204dc3/.github/assets/demo-mobile.gif"], "readme": true, "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_api_request", "post_api_request", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "tam", "repo": "https://github.com/vbcherepanov/hermes-tam-memory", "sha": "9a6e51839fb0619c6e41804ac201272e857ea825", "subdir": "hermes_tam_memory", "version": "0.1.1", "description": "Local-first long-term memory backed by total-agent-memory (TAM) over MCP \u2014 saves each completed turn (with a noise filter; TAM's quality gate applies), recalls relevant memories before each turn within a token budget, and adds tam_recall / tam_save tools; optional TAM team server for shared company memory. Disclosure \u2014 local mode starts the separately installed tam binary as a child process per session with an allowlisted environment that carries no credentials: Hermes provider keys (including HF_TOKEN and OLLAMA_API_KEY), TAM_API_TOKEN and any *_TOKEN / *_API_KEY / *_SECRET / *_PASSWORD variable are withheld, and of HF_* / OLLAMA_* only non-secret settings pass (OLLAMA_URL, OLLAMA_EMBED_MODEL, HF_HOME, HF_HUB_OFFLINE); it stores user/assistant turn text plus built-in memory additions (not tool output) in TAM's store, by default outside HERMES_HOME and shared with other agents using TAM; remote mode sends the same text to the user-configured URL with an optional TAM_API_TOKEN bearer token; hermes memory setup tam writes tam.json, TAM_API_TOKEN to .env and memory.provider in config.yaml.", "maintainer": "vbcherepanov", "tier": "community", "category": "memory", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/vbcherepanov/hermes-tam-memory#readme", "readme": true, "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["tam_recall", "tam_save"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "tamahermes", "repo": "https://github.com/ahrazzle/TamaHermes", "subdir": "plugins/tamahermes", "sha": "d25f76fdf5d8032910ffbe1dca3ba00bf442061f", "description": "Grow a local TamaHermes pet from real Hermes agent activity. Disclosure \u2014 hooks write a pet ledger and sprite atlas under $HERMES_HOME only; the optional python -m tamahermes CLI additionally reads/writes ~/.codex, ~/.petdex and ~/.evopet, runs an unauthenticated loopback preview server (127.0.0.1:8765) and on macOS compiles a Swift overlay and installs a RunAtLoad+KeepAlive LaunchAgent with no uninstall command. No network egress, no credential reads.", "maintainer": "ahrazzle", "tier": "community", "category": "general", "requires_hermes": ">=0.21", "docs_url": "https://github.com/ahrazzle/TamaHermes", "version": "1.2.3", "readme": true, "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start", "pre_llm_call", "post_tool_call", "post_api_request", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "tameru", "title": "Tameru", "repo": "https://github.com/0xWhiteMage/hermes-tameru-plugin", "sha": "5a19df4af88b848adc29d7170182e226c0700dec", "subdir": "hermes_tameru_plugin", "version": "1.5.0", "description": "Big tool outputs, kept small, nothing lost: old tool results shrink to the lines that matter and every distinct error, and the tameru_expand tool brings back the exact original. Deterministic and local, with no LLM calls. Disclosure \u2014 Subclasses Hermes's built-in ContextCompressor and overrides its private prune/demote methods (checks their shape at startup and falls back to stock compaction when they change). Unless you set compression.proactive_prune_tokens yourself, turns on proactive tool-result pruning with a trigger scaled to the model's context window, and after each prune shortens Hermes's re-prune runway. Adds a model-callable tameru_expand tool that returns pruned tool output from memory or from this session's archive (web, browser and MCP output stays wrapped as untrusted data); complex regex greps run in a short-lived local Python child process. No network calls; the render log is off by default.", "maintainer": "0xWhiteMage", "tier": "community", "category": "general", "docs_url": "https://github.com/0xWhiteMage/hermes-tameru-plugin", "image": "https://raw.githubusercontent.com/0xWhiteMage/hermes-tameru-plugin/5a19df4af88b848adc29d7170182e226c0700dec/docs/assets/hero.png", "platforms": ["linux"], "known_issues": ["Full archive recovery requires plugins.isolation to be in_process; host mode limits recovery.", "Overrides private ContextCompressor signatures and falls back when the host contract changes."], "capabilities": {"provides_tools": ["tameru_expand"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.7"}, {"name": "tavily-plugin", "title": "Tavily", "repo": "https://github.com/tavily-ai/tavily-hermes-plugin", "sha": "ac556341056dc903988f63d627d595e468f1cfa9", "description": "Search, extract, map, crawl, and research through Tavily hosted MCP, with Tavily skills. The default connection requires TAVILY_API_KEY; supports Hermes-managed OAuth through a native MCP override. Disclosure \u2014 Connects to Tavily's hosted MCP server at `mcp.tavily.com` and sends it the search queries, URLs and research prompts the agent issues, authenticated with `TAVILY_API_KEY` or a Hermes-managed Tavily OAuth sign-in.", "maintainer": "tavily-ai", "tier": "verified", "category": "web", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/tavily-ai/tavily-hermes-plugin/blob/ac556341056dc903988f63d627d595e468f1cfa9/README.md", "version": "1.0.0", "image": "https://raw.githubusercontent.com/tavily-ai/tavily-hermes-plugin/ac556341056dc903988f63d627d595e468f1cfa9/assets/tavily-catalog-card.svg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TAVILY_API_KEY"]}}, {"name": "teamorouter", "title": "TeamoRouter", "repo": "https://github.com/2867297362mjb-sketch/hermes-provider-teamorouter", "sha": "9260c9a0e7c433b7cbb51bd07128de7f2627c829", "subdir": "teamorouter", "description": "TeamoRouter as Hermes model providers on one key: `teamorouter` serves Claude models over TeamoRouter's native Anthropic Messages API (so Hermes' Anthropic prompt caching and thinking apply), and `teamorouter-openai` serves GPT, Gemini, DeepSeek, GLM and Grok models over its OpenAI-compatible API. Each /model picker lists that side's tool-capable chat models from TeamoRouter's public catalog, leaving out image, service-tier and free-tier variants, and context windows come from the same catalog. Maintained by TeamoRouter. Disclosure \u2014 registers two model providers at import and nothing else (no tools, hooks, commands or threads). Prompts, tool schemas and TEAMOROUTER_API_KEY go to https://api.teamorouter.com (/v1/messages and /v1/chat/completions) through Hermes' own clients, and TeamoRouter forwards each request to the upstream vendor serving the model. The plugin's own request is GET https://api.teamorouter.com/v1/models/pricing, a public endpoint, sent without the key and cached for an hour. `teamorouter-openai` requests carry a fixed `X-Client-Source: hermes-teamorouter-plugin` header (via the profile's default_headers), used only to count traffic from this plugin; Claude requests carry no header from the plugin. No telemetry, no files read or written, no stored credentials, no processes.", "maintainer": "TeamoRouter", "tier": "community", "category": "models", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/2867297362mjb-sketch/hermes-provider-teamorouter#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TEAMOROUTER_API_KEY"]}}, {"name": "telegram-client", "title": "Telegram Client", "repo": "https://github.com/guberm/hermes-telegram-desktop-plugin", "sha": "5c2a3f353b74b66a2e1b9b48c4be15b60bda74ac", "subdir": "plugins/telegram", "description": "Telegram client pane for Hermes Desktop: dialogs, message history with image previews and per-post image reload, forum topics, and reviewed send/reply/save/delete/mark-as-read actions via a dedicated Telethon user session (separate from the core gateway bot token). All history is sanitized before rendering. Disclosure \u2014 the profile dashboard backend reads dialogs and message history and downloads media for in-page previews (page byte-budgeted and cached in memory); TELEGRAM_API_ID/TELEGRAM_API_HASH come from the profile's Hermes secrets; login challenges stay in process memory; the dedicated Telethon session lives in HERMES_HOME/telegram-plugin-auth/ (directory 0700, .session and its -wal/-shm sidecars 0600), and anyone holding that session file controls the Telegram account; delete removes the selected message for everyone; mutations go prepare -> exact preview -> confirm -> commit -> readback, and the pane's \"Confirm actions\" switch (on by default) can turn the preview step off; message links open in the system browser (http and https only).", "maintainer": "guberm", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/guberm/hermes-telegram-desktop-plugin", "version": "1.3.1", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "telegram-notify", "repo": "https://github.com/madpower2000/hermes-telegram-notify", "sha": "d7cab7dfb154425118129b0086032e873a832576", "description": "Remote Telegram lifecycle notifications for the main Hermes agent: turn start, completion with a bounded final answer, interruption/failure, and user-facing approval requests. Suppresses subagent, Telegram-origin lifecycle, and automatic/smart-approval noise. Outbound-only, no input channel. Disclosure \u2014 enabled by default once installed and reuses the core Telegram gateway's TELEGRAM_BOT_TOKEN and TELEGRAM_HOME_CHANNEL when present, so each main-agent turn's final answer (up to 3,200 chars) and approval-request command text (up to 700 chars) from CLI, Desktop and eligible gateway platforms are sent to api.telegram.org for delivery to that one chat; Telegram-origin lifecycle and approval-prompt copies (and, when notify_on_approval_response is enabled, Telegram-origin approval-response copies) are suppressed because the core Telegram gateway already delivers them in that chat; token and state are stored 0600 under HERMES_HOME/telegram-notify.", "maintainer": "madpower2000", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/madpower2000/hermes-telegram-notify", "version": "1.1.3", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_llm_call", "on_session_end", "pre_approval_request", "post_approval_response"], "provides_middleware": [], "requires_env": []}}, {"name": "telegram-stickers", "title": "Telegram Stickers", "repo": "https://github.com/churnast/hermes-telegram-stickers", "sha": "210ce860a06ed24b87f34d9c418f544d2afde4f0", "description": "Lets your agent answer in Telegram with a sticker, the way a person reacts to a joke or good news: four default packs made by Telegram out of the box, then packs you list or send the bot in a direct chat; picked by emoji or by meaning, sent as a reply in the current chat and forum topic, paced per chat, with a per-chat off switch the agent cannot undo. Pace and packs can be set in words in your direct chat. Disclosure: calls only the Telegram Bot API (api.telegram.org or the configured api_base) with the gateway's TELEGRAM_BOT_TOKEN, read through Hermes' secret scope: getStickerSet for the packs in use (during the first-run setup also from a short background thread, only for a sender Hermes answers, at most 32 at once), sendSticker, and getFile plus one download per sticker for /stickers describe, which the owner starts and which sends each sticker image to the vision model configured in Hermes. A native Telegram handler sees stickers sent to the bot in direct chats (not in groups), skips forwarded ones and keeps pack name, sticker kind and sender id in memory for up to an hour; everyone the bot answers in a direct chat can add packs, up to max_learned_packs in all (default 100, 0 for no limit; learn_packs: false turns learning off). A pre_llm_call hook appends fixed text to the user message of Telegram turns: a sticker hint of about 540 characters, a settings note of about 310 characters when the message mentions stickers, or a setup paragraph during the first-run setup. Writes catalog.json, descriptions.json and state.json under plugin-data/telegram-stickers/ and reads Hermes' sticker_cache.json. No middleware: the sticker tools run through Hermes like any tool. Uses Hermes functions outside the plugin API (tools.vision_tools.vision_analyze_tool, gateway.session_context.get_session_env) and reads the call stack to tell the local CLI or TUI from other callers of /stickers. No shell commands, telemetry or self-update. Anyone the bot answers in a direct chat counts as the owner: they can change pacing, packs, banned stickers and per-chat on/off; the off switch the agent cannot undo holds in groups only.", "maintainer": "churnast", "tier": "community", "category": "tools", "requires_hermes": ">=0.20.6", "docs_url": "https://github.com/churnast/hermes-telegram-stickers#readme", "version": "1.2.0", "image": "https://raw.githubusercontent.com/churnast/hermes-telegram-stickers/210ce860a06ed24b87f34d9c418f544d2afde4f0/docs/card.png", "screenshots": ["https://raw.githubusercontent.com/churnast/hermes-telegram-stickers/210ce860a06ed24b87f34d9c418f544d2afde4f0/docs/screenshots/03-paced-like-a-person.png", "https://raw.githubusercontent.com/churnast/hermes-telegram-stickers/210ce860a06ed24b87f34d9c418f544d2afde4f0/docs/screenshots/05-owner-commands.png"], "platforms": ["linux", "macos", "windows"], "known_issues": ["Needs plugins.isolation: in_process (the default). Under plugins.isolation: host it cannot see the current chat, so it sends no stickers, learns no packs and adds no hint.", "Every person the bot answers in a direct chat adds packs (up to max_learned_packs, default 100), which the agent then uses in every chat. Keep the gateway allowlist to yourself, or set learn_packs: false.", "Before Hermes 0.21.5, /stickers in Telegram only shows the status and reloads packs; the owner's other /stickers commands work in the Hermes CLI on the server.", "Where tool progress is on, Hermes posts its progress line (such as telegram_sticker_send...) before a sticker; display.platforms.telegram.tool_progress: off hides every tool's lines in Telegram."], "capabilities": {"provides_tools": ["telegram_sticker_find", "telegram_sticker_send", "telegram_sticker_mute", "telegram_sticker_settings"], "provides_hooks": ["pre_llm_call"], "requires_env": ["TELEGRAM_BOT_TOKEN"]}}, {"name": "telegram_dashboard_probe", "title": "Telegram Dashboard", "repo": "https://github.com/bablobanov/hermes-agent-telegram-dashboard", "sha": "a2bac7cb336d4bd6e95c2f5f5d295317e69a5589", "subdir": "plugin/telegram_dashboard_probe", "description": "One pinned Telegram message with the state of your Hermes on one phone screen: gateway, backup, config drift, the cron ticker and its jobs, whether the Telegram channel is deaf, whether the agent sees its rules and whether its memory writes stand unapproved, account limits and version. Read-only, no LLM calls, nothing to press. Disclosure \u2014 Claude and Codex limits come from Hermes' own account-usage fetcher, called every tick (which, like /usage, may refresh OAuth tokens through Hermes' own auth code); at most once per limits_refresh_seconds (default 900 s) the Grok weekly pool is read from https://cli-chat-proxy.grok.com/v1/billing and /v1/settings with the xai-oauth token Hermes resolves (which, like any Hermes request to xAI, may refresh that OAuth token and save it to auth.json, or clear a dead one, through Hermes' own auth code), sending the header x-xai-token-auth xai-grok-cli that identifies the request as the Grok CLI (an undocumented xAI host Hermes itself does not use), and Kimi Code windows from the kimi-coding base URL /v1/usages with the kimi-coding key Hermes resolves (which, like any Hermes key lookup without a usable key in .env or the environment, may save Hermes' credential pool back to auth.json once when loading it changes something, e.g. a placeholder key in .env) and a User-Agent of claude-code/0.1.0 (undocumented provider surfaces), and up to four operator-configured limits_sources, if set, each with one GET to http on loopback only (127.0.0.1, localhost or ::1), with no proxy and no redirect, optionally sending Authorization: Bearer with the value of an environment variable the operator names (never a *_BOT_TOKEN one); every tick the tail of HERMES_HOME/logs/errors.log (the last 256 KB; the whole file, up to 4 MB, until the first successful read) is read for Gemini HTTP 429 lines, of which only the time, limit, retry and model are kept, and for the engine's own 'Failed to send Telegram message' lines, of which only the time is kept, never the message text; with a memory provider configured, the last 256 KB of the same log are also read for the engine's warnings about that provider, of which only the time and whether one says unavailable are kept; every tick HERMES_HOME/cron/jobs.json is read for each job's id, name, enabled flag, state, times, status and failure streak (never prompt, script, deliver, skills or the model) and the ticker's marker files for their epoch, and HERMES_HOME/cron/executions.db is opened read-only (sqlite3 mode=ro with PRAGMA query_only, in a worker under the tick's deadline) for the job_id, status, delivery_outcome and time columns of failed or undelivered runs, never the error column; the engine's error texts are reduced to the kind of the error in a word and never reach the screen or the record; the connected Telegram adapter's public property send_path_degraded is read every tick, and, as a capability and not a contract, four private attributes of the live adapter object (_updates_received_total, _polling_generation, _polling_last_progress_monotonic, _polling_generation_started_monotonic) are read as attributes, nothing is called on it, and an adapter without them shows no data for that line; every tick HERMES_HOME/state.db is opened read-only the same way for the newest saved system prompt of each platform the running gateway lists in HERMES_HOME/gateway_state.json, and the project context files the engine would load (.hermes.md or HERMES.md in that directory and each parent up to the git root, the AGENTS.override.md / AGENTS.md / agents.md chain from the git root down, CLAUDE.md, .cursorrules and .cursor/rules/*.mdc; up to 4 MB each, links followed as the engine follows them) are read from the directory that prompt names (else the engine's TERMINAL_CWD or the gateway's working directory), and .hermes.md, HERMES.md and the AGENTS names also from the gateway's working directory and HERMES_HOME, which may be outside HERMES_HOME; to tell whether the prompt carries them as they are on disk; only a verdict, the file names, sizes and times are kept, never the prompt's or a file's text; every tick HERMES_HOME/memories/MEMORY.md and USER.md (up to 4 MB each) are read to count their characters against the limits, the waiting writes in HERMES_HOME/pending/memory and pending/skills (up to 2,000 files) for their names and times and, of the memory ones (up to 256 KB each), each add's target and length, and the time of HERMES_HOME/skills/.curator_ledger.jsonl; never a notebook's, an entry's or a waiting write's text, and nothing there is written; the private hermes_cli.version_info._cached_version_info and the signature of agent.prompt_builder._read_text_with_timeout are read from modules the gateway already imported, and nothing is called or changed on them; the release check keeps only each release's version and publication time and downloads, installs or replaces nothing; config.yaml is read through Hermes' own YAML parser for the memory limits, switches, approval gate and provider name, skills.write_approval and each platform's skip_context_files; the plugin's own code never reads the Telegram bot token and never writes vendor credential files (Hermes' auth code it calls for Grok and Kimi may, as said above), and no request the plugin's own code sends with a token in a header follows a redirect; the latest Hermes release is read from api.github.com without a token at most once per 15 minutes (releases/latest with the last answer's ETag; the release list releases?per_page=100 only when Latest names another version); an operator-configured drift_command, if set, runs as a subprocess; the delivery record is written under HERMES_HOME/plugin-data/.", "maintainer": "bablobanov", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.1", "docs_url": "https://github.com/bablobanov/hermes-agent-telegram-dashboard#readme", "version": "0.11.0", "image": "https://raw.githubusercontent.com/bablobanov/hermes-agent-telegram-dashboard/682e20b4664c8e70f51faa9db5f89e42c24f0c0c/docs/social-preview.jpg", "screenshots": ["https://raw.githubusercontent.com/bablobanov/hermes-agent-telegram-dashboard/8ccf906b00fa5000a12738a76808cc76315fd64a/docs/screenshots/01-healthy.png", "https://raw.githubusercontent.com/bablobanov/hermes-agent-telegram-dashboard/8ccf906b00fa5000a12738a76808cc76315fd64a/docs/screenshots/02-healthy-details.png", "https://raw.githubusercontent.com/bablobanov/hermes-agent-telegram-dashboard/8ccf906b00fa5000a12738a76808cc76315fd64a/docs/screenshots/03-memory.png", "https://raw.githubusercontent.com/bablobanov/hermes-agent-telegram-dashboard/8ccf906b00fa5000a12738a76808cc76315fd64a/docs/screenshots/04-new-release.png", "https://raw.githubusercontent.com/bablobanov/hermes-agent-telegram-dashboard/8ccf906b00fa5000a12738a76808cc76315fd64a/docs/screenshots/05-rules.png"], "platforms": [], "known_issues": ["Requires in-process plugin execution: the Telegram handler factory receives the platform's native SDK client, which plugins.isolation: host does not allow; under host the plugin does not load and nothing is delivered."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "telesec", "title": "Telesec", "repo": "https://github.com/neoromantic/telesec", "sha": "b23cd63358e1a66518106c485402a9033f6b31d9", "description": "Telegram Business secretary: transcribes voice notes, round videos, and speech attachments right in the chat, with Settings and per-chat controls in Telegram's Manage Bot panel, plus opt-in text history (with import from a Telegram export), correspondence stats, and contact dossiers. Disclosure \u2014 audio goes to the STT backend Hermes is configured with (local or external); transcript cleanup sends chat text through the host ctx.llm; opt-in dossiers send chat text through the Hermes model task telesec_dossier (default Vercel AI Gateway to Google with zero data retention; an optional message check on the same gateway and optional Cloudflare fact extraction are off by default); an owner-sent /dossier posts that contact's stored dossier (without the owner note, but written with it) into the Business chat for the contact to read; runs local ffprobe/ffmpeg (argument lists, no shell) on attached audio; opt-in dossiers run a gateway background thread; modes, opt-in history, and dossiers are stored 0600 under HERMES_HOME/data/telesec; reads only the numeric bot id prefix of TELEGRAM_BOT_TOKEN; no telemetry.", "maintainer": "neoromantic", "tier": "community", "category": "voice", "requires_hermes": ">=0.21.6", "docs_url": "https://telesec.sergeybaus.com", "version": "0.16.1", "image": "https://raw.githubusercontent.com/neoromantic/telesec/b23cd63358e1a66518106c485402a9033f6b31d9/docs/images/banner.png", "screenshots": ["https://raw.githubusercontent.com/neoromantic/telesec/b23cd63358e1a66518106c485402a9033f6b31d9/docs/images/voice-transcript.png", "https://raw.githubusercontent.com/neoromantic/telesec/b23cd63358e1a66518106c485402a9033f6b31d9/docs/images/owner-panel.png", "https://raw.githubusercontent.com/neoromantic/telesec/b23cd63358e1a66518106c485402a9033f6b31d9/docs/images/stats-panel-en@2x.png", "https://raw.githubusercontent.com/neoromantic/telesec/b23cd63358e1a66518106c485402a9033f6b31d9/docs/images/dossier-panel-en@2x.png"], "readme": true, "known_issues": ["Needs in-process plugin mode for native Telegram handlers.", "Uses the undocumented host STT entrypoint tools.transcription_tools.transcribe_audio (no public plugin route yet; NousResearch/hermes-agent#142505)."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_gateway_dispatch"], "provides_middleware": [], "requires_env": []}}, {"name": "telnyx-provider", "repo": "https://github.com/team-telnyx/hermes-inference-provider", "sha": "f53c20e80f84b4a880a7f2b4f1ed2f8b3fa1d11c", "description": "Vendor-maintained Telnyx inference provider with an authenticated live model catalog, hosted open models, frontier routes, and catalog-derived pricing.", "maintainer": "team-telnyx", "tier": "community", "category": "models", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/team-telnyx/hermes-inference-provider#readme", "version": "0.1.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TELNYX_API_KEY"]}}, {"name": "terraform-drift", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-terraform-drift", "sha": "787dd77e63a5f9b593034fa13fccb12fdece6cb1", "description": "Compare pinned Terraform provider and module versions with the public registry. Disclosure \u2014 tools are on for every Hermes surface, including the gateway. Stop a surface with hermes tools disable --platform <name> terraform-drift, or the plugin with hermes plugins disable terraform-drift. Nothing is written under plugin-data/terraform-drift, and there is no key. Only the directory you name is read, and only .tf, .tf.json, and .terraform.lock.hcl. Symlinks and .. are refused, and .env, tfvars, .terraform, backend values, and hashes are not returned. The provider pin is the lock version, not the required_providers constraint. A module pin is an exact version only. GET calls only registry.terraform.io and, for a github.com source, raw.githubusercontent.com CHANGELOG.md. Redirects and proxy variables are ignored. A timeout or failed read leaves latest empty and is not called current. Semver orders versions, so 1.10.0 is newer than 1.9.0. The digest text is not sent and no cron job is created. known keeps newer versions, and omitting it does not call rows new today. There is no approval card. Before the call, name the directory and say there is no init, plan, apply, or state write. Cron, yolo, and approvals off can still run this read. MIT, no daily cap, requires Hermes >=0.21.4.", "maintainer": "TakeshiTGAL", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-terraform-drift#readme", "version": "0.1.0", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": ["terraform_drift", "terraform_drift_digest"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "thomas", "repo": "https://github.com/keppy/hermes-plugin-thomas", "sha": "7302ab947f99e3adb16e78e139794fe1696134f8", "description": "Fine-tune a small calibrated encoder classifier on Modal and rate it with gonogo. Every GPU launch goes through the human approval gate with the exact config shown; data checks and evaluation run locally for free. Disclosure \u2014 thomas_encoder_train spends the user's Modal GPU credits and uploads the chosen training JSONL rows to Modal after the human approval gate; the base model is downloaded from Hugging Face on the Modal side. Training and inference run in a separate Python interpreter the user configures via THOMAS_PYTHON (with the author's thomas package, torch and modal installed); the Hermes venv only gets gonogo-eval. Runs and artifacts are written under HERMES_HOME/thomas/runs; the eval tool writes report files to the path the model supplies.", "maintainer": "keppy", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "platforms": ["linux", "macos"], "version": "0.1.3", "docs_url": "https://github.com/keppy/hermes-plugin-thomas#readme", "capabilities": {"provides_tools": ["thomas_check_data", "thomas_encoder_train", "thomas_run_status", "thomas_encoder_eval"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "tidal", "repo": "https://github.com/lEWFkRAD/hermes-plugin-tidal", "sha": "85c864a5ff45d69cdea6d54d24c010080cc17a40", "version": "0.1.0", "image": "https://raw.githubusercontent.com/lEWFkRAD/hermes-plugin-tidal/85c864a5ff45d69cdea6d54d24c010080cc17a40/docs/banner.jpg", "description": "TIDAL for Hermes Agent: five tools (playback through local mpv, search, playlists, library, mixes) over the unofficial TIDAL API via tidalapi. Login is TIDAL's own PKCE login flow (hermes tidal login) \u2014 no developer app needed. Playback runs on the Hermes machine (mpv); TIDAL has no remote-device API like Spotify Connect. Needs a TIDAL subscription (any tier). Disclosure \u2014 unofficial TIDAL integration (community tidalapi library using TIDAL's own app client); stores your TIDAL access and refresh token in plaintext (owner-only, 0600) under $HERMES_HOME/plugin-data/tidal/ and refreshes it itself; playback spawns a detached local mpv process with an IPC socket and plays audio on the Hermes machine.", "title": "TIDAL", "maintainer": "lEWFkRAD", "tier": "community", "category": "tools", "docs_url": "https://github.com/lEWFkRAD/hermes-plugin-tidal#readme", "requires_hermes": ">=0.21.6", "platforms": ["linux", "macos"], "capabilities": {"provides_tools": ["tidal_playback", "tidal_search", "tidal_playlists", "tidal_library", "tidal_mixes"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "time-gap", "repo": "https://github.com/Randool/time-gap", "sha": "bc5e65503a412808029573a98b6008387a0ac2f6", "description": "Inject an implicit time-gap sense only when a gap or a date rollover crosses.", "maintainer": "Randool", "tier": "community", "category": "general", "docs_url": "https://github.com/Randool/time-gap#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "timestamp-ref", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "241fccb904c63c6d7540b0b8f932a9c810343572", "subdir": "timestamp-ref", "description": "@ts: context references that turn timestamps into readable times for the model: @ts:1729468800123 attaches the moment in UTC, in the local time zone and as ISO 8601, with its weekday, how long ago or ahead it is, the same moment in Unix seconds, milliseconds and microseconds, and its ISO week; bare numbers are read as seconds, milliseconds, microseconds or nanoseconds by their length (or an s/ms/us/ns suffix) and the block says which; ISO 8601 and RFC 2822 dates and now work too, and up to 10 values in one reference also get the gaps between them; the TUI and Desktop composer preview a value as you type it. Disclosure \u2014 reads only the text of the reference itself and the system clock, using Python's datetime; no network, no files read or written, no subprocess, no credentials; register() only adds the @ts: reference provider", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/timestamp-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/241fccb904c63c6d7540b0b8f932a9c810343572/docs/timestamp-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "tinyfish", "repo": "https://github.com/tinyfish-io/tinyfish-web-agent-integrations", "sha": "770a3765fa6249b1f6a6153ddaaf65b76bf8fdd4", "subdir": "hermes", "description": "TinyFish: the web, built into Hermes. Free Search and Fetch power Hermes's own web_search and web_extract, and when a site needs clicks, forms or a login, a remote browser and the tinyfish_agent web agent handle it. Disclosure \u2014 sends search queries, URLs to fetch and tinyfish_agent goals with your TINYFISH_API_KEY to the TinyFish API (*.tinyfish.ai). Browser sessions and tinyfish_agent runs spend TinyFish credits. Under the default `request` policy each one goes through Hermes's approval prompt first (a session/always answer covers every later call; cron and unattended runs are denied unless you allow them). Setting `tinyfish.credit_policy.<feature>: allow` or YOLO skips the prompt. `hermes tinyfish setup` / `browser enable` (run by you) save the key to Hermes .env, set web.search_backend/extract_backend and browser.cloud_provider in config.yaml, enable the web/browser toolsets, and can install the agent-browser CLI after asking.", "maintainer": "tinyfish-io", "title": "TinyFish", "version": "0.2.3", "image": "https://raw.githubusercontent.com/tinyfish-io/tinyfish-web-agent-integrations/770a3765fa6249b1f6a6153ddaaf65b76bf8fdd4/hermes/assets/banner.png", "tier": "verified", "category": "web", "requires_hermes": ">=0.19", "docs_url": "https://docs.tinyfish.ai", "capabilities": {"provides_tools": ["tinyfish_agent"], "provides_hooks": ["pre_tool_call", "pre_llm_call", "on_session_finalize"], "provides_middleware": [], "requires_env": ["TINYFISH_API_KEY"]}}, {"name": "titanos-mcp", "repo": "https://github.com/guilherme-vasques-ltda/hermes-plugin-titanos", "sha": "ba06280cd28fdfd6029d8f58c987076fb8677745", "description": "Connect Hermes to Titanos marketplace, Amazon, listings, Ads, and product research tools through the pinned Titanos OAuth MCP client. This portable Agent Plugin v1 package bundles seven operating skills, requires Node.js 20.18.1 or newer, and uses browser authorization with a Titanos account. Disclosure \u2014 starts the npm package @titanos/mcp-agents@1.47.2 via npx (fetched from npm on first run); its tools read and WRITE live marketplace/Ads accounts under your Titanos OAuth session.", "maintainer": "Titanos", "tier": "community", "category": "tools", "version": "0.3.0", "docs_url": "https://github.com/guilherme-vasques-ltda/hermes-plugin-titanos", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "together", "repo": "https://github.com/pepijndevos/hermes-together-provider", "sha": "d5267d5d1e1bf98097b13546a739bd8dab8db7ec", "subdir": "", "description": "Together AI model-provider plugin \u2014 OpenAI-compatible API, 270+ serverless open-weight models, live catalog discovery.", "maintainer": "pepijndevos", "tier": "community", "category": "models", "docs_url": "https://github.com/pepijndevos/hermes-together-provider#readme", "version": "1.0.0", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TOGETHER_API_KEY"]}, "requires_hermes": ">=0.21.4"}, {"name": "token-cost-meter", "repo": "https://github.com/IT-dreamer/token-cost-meter", "sha": "18fbc2c15d3ddd1c3784e0f83feec314ac686152", "description": "Live token usage, model-aware USD cost and prompt-cache savings in the Hermes Desktop status bar, with a persistent per-day ledger that survives restarts. Disclosure \u2014 Desktop only; no network calls of its own (prices come from the gateway's model.options and a bundled models.dev rate table); stores per-day token totals, per-session counters and last-known rates in its own Desktop plugin storage; costs are list-price estimates, not billing data.", "maintainer": "IT-dreamer", "tier": "community", "category": "desktop", "version": "1.0.0", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/IT-dreamer/token-cost-meter#readme", "screenshots": ["https://raw.githubusercontent.com/IT-dreamer/token-cost-meter/18fbc2c15d3ddd1c3784e0f83feec314ac686152/image/statusbar-chip-en.png", "https://raw.githubusercontent.com/IT-dreamer/token-cost-meter/18fbc2c15d3ddd1c3784e0f83feec314ac686152/image/session-pane-en.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "token-lens", "repo": "https://github.com/patrickluvsoj/hermes-token-lens", "sha": "a6f20c2df26840bcfc11d8027c9fab6a847cf5dc", "image": "https://raw.githubusercontent.com/patrickluvsoj/hermes-token-lens/a6f20c2df26840bcfc11d8027c9fab6a847cf5dc/docs/banner.png", "description": "Token consumption analytics for Hermes: records exact per-call usage from pre/post_api_request hooks, decomposes every request into categories (system prompt, built-in and per-MCP-server tool schemas, skills, memory, history, tool results, output, reasoning) calibrated to billed totals, and adds a Token Lens dashboard tab plus a Sessions-page card with deterministic and AI-evaluated token-reduction suggestions; `hermes token-lens refresh` runs a suggestion refresh from the CLI. Disclosure \u2014 records per-API-call token counts (no message text) from pre/post_api_request hooks into token_lens.db at the Hermes home root (per-call rows kept 90 days, rollups kept), and reads Hermes's state.db read-only for session token totals and, during the optional dashboard history import, message text for estimation only; after 10 recorded sessions it automatically calls your configured main model through Hermes's plugin LLM facade every 5 sessions (up to two calls per refresh, capped at 50,000 tokens by meta_budget_tokens), sending aggregated token statistics plus the names of your enabled MCP servers and plugins, and auto-applies the model's proposed category regex rules and rubric changes (logged to token_lens.EVOLUTION.md; evolve_rules: false turns this off); the dashboard's refresh button spawns a detached `hermes token-lens refresh` process that logs to logs/token-lens-refresh.log; its data paths follow the HERMES_HOME environment variable rather than the active profile, so in a multi-profile gateway every profile records into the launch profile's database; no third-party network calls, no telemetry.", "maintainer": "patrickluvsoj", "tier": "community", "category": "general", "requires_hermes": ">=0.16.0", "docs_url": "https://github.com/patrickluvsoj/hermes-token-lens#readme", "version": "0.1.0", "screenshots": ["https://raw.githubusercontent.com/patrickluvsoj/hermes-token-lens/cd370f7c6ef9279ae044269943ce2b7532a8c753/docs/screenshots/token-lens-tab.png", "https://raw.githubusercontent.com/patrickluvsoj/hermes-token-lens/cd370f7c6ef9279ae044269943ce2b7532a8c753/docs/screenshots/entry-card.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_finalize", "on_session_start", "post_api_request", "pre_api_request", "pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "tokenwatch", "repo": "https://github.com/0xBernard/tokenwatch", "sha": "b06c293e254d7af6d889fdfa07934a9fc5ca38a7", "description": "Monitor Hermes token usage, notify at thresholds, and freeze tool/gateway activity at configured limits.", "maintainer": "0xBernard", "tier": "community", "category": "general", "docs_url": "https://github.com/0xBernard/tokenwatch#readme", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_end", "on_session_start", "post_api_request", "pre_api_request", "pre_gateway_dispatch", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "tokstat", "repo": "https://github.com/heerey525/tokstat", "sha": "5c11db13bd8ddba5fb958f07bce564efd947ce71", "description": "Live token usage in the Hermes Desktop status bar: cumulative total, a real-time this-turn counter, last-turn delta, context occupancy, and prompt-cache hit rate. Event-driven (no polling, no RPC); English and Chinese, follows the app locale.", "maintainer": "heerey525", "tier": "community", "category": "desktop", "version": "1.0.1", "docs_url": "https://github.com/heerey525/tokstat#readme", "requires_hermes": ">=0.20.2", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "tool-slimmer", "repo": "https://github.com/aliasocracy/hermes-tool-slimmer", "sha": "1b90aa592f7423233ea6cdfd44c7188e14ca7ccf", "description": "Reduce Hermes tool-schema overhead and show selector savings in the dashboard. Disclosure \u2014 optional mode jev (off by default; needs TYPESAFE_API_KEY) sends each turn's request text and up to 32 candidate tool names and descriptions to TypeSafe (api.typesafe.ai); all other modes run locally. Optional user-run scripts can patch Hermes core on older Hermes and install a systemd user self-heal unit; the dashboard advisor edits the tool_slimmer section of config.yaml with a backup.", "maintainer": "aliasocracy", "tier": "community", "category": "tools", "requires_hermes": ">=0.19", "docs_url": "https://github.com/aliasocracy/hermes-tool-slimmer#readme", "version": "0.8.0", "capabilities": {"provides_tools": ["tool_slimmer_hydrate_tools", "tool_slimmer_request_full_tools", "tool_slimmer_select", "tool_slimmer_status"], "provides_hooks": ["pre_llm_call"], "provides_middleware": ["llm_request"], "requires_env": []}}, {"name": "toolaria", "repo": "https://github.com/Sahil-SS9/Toolaria", "sha": "667df67ef5bd23160b1b87a93ebf895c122b6b17", "description": "Rescues oversized MCP and web tool results before they flood context.", "maintainer": "Sahil-SS9", "tier": "community", "category": "tools", "requires_hermes": ">=0.21", "docs_url": "https://github.com/Sahil-SS9/Toolaria", "platforms": [], "capabilities": {"provides_tools": ["rescuer_fetch"], "provides_hooks": ["transform_tool_result", "on_session_start", "on_session_end"], "provides_middleware": ["tool_request"], "requires_env": []}}, {"name": "touchdesigner", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "abec9e822a23089943dd1d476a104bf746f19f86", "subdir": "touchdesigner", "description": "Drive a live TouchDesigner session through the twozero MCP server (Streamable HTTP on 127.0.0.1:40404), with the touchdesigner-mcp workflow skill bundled. Portable Agent Plugins v1 package (mcp.json + skills/); TouchDesigner itself runs on macOS/Windows.", "maintainer": "NousResearch", "tier": "official", "category": "tools", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/touchdesigner", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/abec9e822a23089943dd1d476a104bf746f19f86/assets/touchdesigner.jpg", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "traceverse_hermes_otel", "repo": "https://github.com/Mandark-droid/hermes-otel-plugin", "sha": "701c021808c20b15017f7297a3577157e5faa401", "description": "Hermes Agent OpenTelemetry traces and dashboard logs, with local-model cost estimates and optional in-process evaluation, GPU, energy, and CO2 metrics via genai-otel-instrument. Disclosure \u2014 Sends OpenTelemetry traces and log records for every turn, LLM call and tool call (session ids, models, token counts, costs, tool names, errors) to an OTLP endpoint, `http://localhost:4318` unless `HERMES_OTEL_ENDPOINT` points elsewhere; prompt, response and tool argument/result text is included only when `HERMES_OTEL_CAPTURE_CONTENT=true`; if `genai-otel-instrument` is installed it is activated in-process and instruments the LLM client libraries Hermes uses.", "maintainer": "Mandark-droid", "tier": "community", "category": "general", "requires_hermes": ">=0.19", "docs_url": "https://github.com/Mandark-droid/hermes-otel-plugin/blob/main/README.md", "version": "2.0.0", "screenshots": ["https://raw.githubusercontent.com/Mandark-droid/hermes-otel-plugin/701c021808c20b15017f7297a3577157e5faa401/docs/img/hermes-jaeger-waterfall.png", "https://raw.githubusercontent.com/Mandark-droid/hermes-otel-plugin/701c021808c20b15017f7297a3577157e5faa401/docs/img/genai-otel-hermes.png"], "readme": true, "platforms": [], "title": "Hermes OTel + Eval Metrics", "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_start", "on_session_end", "on_session_finalize", "on_session_reset", "pre_llm_call", "transform_llm_output", "post_api_request", "post_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "true402-swap-guard", "repo": "https://github.com/true402/hermes-swap-guard", "sha": "27da03ba948ba2e91c2d33bf96f36ab509e6547a", "subdir": "true402_swap_guard_free", "description": "Blocks token buys when true402 finds a honeypot or a rug in progress \u2014 one pre_tool_call hook in front of every trading tool, MCP server and terminal command (Base, Ethereum, BSC, Solana). Free edition: it never pays, holds no wallet key and has no payment code. Disclosure \u2014 the pre_tool_call hook reads the command string of every tool call and the parameters of trading-named tools; when a call looks like a buy, each candidate token address and its chain (every 0x address in a trading shell command except well-known majors and an unambiguous sold token, which can include a recipient or wallet address) is sent to true402.dev's free check endpoint, with no prompts, amounts or other tool data. Uses true402's small daily free allowance; when it is used up, a token counts as unchecked and passes by default (configurable to ask or block). Blocks only on a definite danger verdict for a token being bought; a possible sale or a configured caution goes to the Hermes approval gate, and one \"always\" answer there silences all later guard prompts. No stored data, no shell commands, background processes or telemetry.", "maintainer": "true402", "tier": "community", "category": "tools", "title": "true402 swap guard", "requires_hermes": ">=0.22.0", "docs_url": "https://true402.dev/guides/rug-check-hermes-nousresearch-agent", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "tsubasa", "repo": "https://github.com/PalmAndWand/tsubasa-integrations", "sha": "ce52a9cdfae352a339ddf3ff219c6ec06f552bc3", "subdir": "providers/hermes", "description": "Tsubasa OpenAI-compatible model provider (tool calling not supported yet). Disclosure \u2014 sends prompts and your TSUBASA_API_KEY to api.tsubasa.sh, operated by PalmAndWand; the API currently serves Canada only and answers HTTP 451 to requests from elsewhere.", "maintainer": "PalmAndWand", "tier": "community", "category": "models", "docs_url": "https://github.com/PalmAndWand/tsubasa-integrations#readme", "readme": false, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TSUBASA_API_KEY"]}}, {"name": "ttsbuddy", "title": "TTS Buddy", "repo": "https://github.com/ngelik/ttsbuddy-cli", "sha": "cb7af8ab874ab4643041a12cb6723c24ea787a66", "subdir": "plugins/hermes-ttsbuddy", "description": "Native TTS Buddy speech provider using the existing TTS Buddy CLI, with offline voice selection, MP3 generation, Hermes voice-message conversion and exact-job recovery, plus terminal-only account deletion through CLI 0.16.0+. Disclosure \u2014 runs the user-installed `ttsbuddy` CLI (argument array, speech text on stdin), which sends the text and voice settings to TTS Buddy, downloads the hosted audio and uses the account's quota. Credentials come from the profile's `TTSBUDDY_API_KEY` secret or, when the user selects `cli_config_dir`, from that CLI profile's own saved login, which the CLI may read and update. The model-callable `ttsbuddy_recover` tool downloads an existing job to a new MP3 path the model chooses (never overwrites). The terminal command `hermes ttsbuddy account delete` can permanently delete the TTS Buddy account, its hosted files and identity, and cancel subscriptions, after `--yes` and a fresh email code entered at a hidden prompt or protected stdin.", "maintainer": "ngelik", "tier": "community", "category": "voice", "requires_hermes": ">=0.21.7", "docs_url": "https://www.ttsbuddy.com/docs/developers/hermes-plugin", "version": "0.2.0", "readme": true, "platforms": ["linux", "macos"], "known_issues": ["Account deletion is terminal-only, requires CLI 0.16.0+ and an explicit persistent cli_config_dir; speech credentials do not authorize deletion.", "Use fresh unique output filenames/stems: successful Hermes delivery and same-stem Opus conversion can replace files outside the provider's no-clobber checks.", "MP3 source audio only; no PCM streaming. A local timeout does not cancel an accepted hosted job; use ttsbuddy_recover with the exact job ID."], "capabilities": {"provides_tools": ["ttsbuddy_recover"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "turn-bell", "repo": "https://github.com/BrokeSkill/turn-bell", "sha": "b39808efe7eef1528679661ebda902c9b632a438", "description": "A bell in the Hermes desktop composer that pings the ntfy topic Hermes already uses when a turn finishes. Click to cycle off, current turn, or all turns. Disclosure \u2014 when enabled, posts the first line of each finished reply plus model, duration, token and cost figures to the ntfy server/topic Hermes is configured with (default ntfy.sh); reads NTFY_* from the profile .env and falls back to the ntfy CLI's ~/.config/ntfy/client.yml login (read-only).", "maintainer": "BrokeSkill", "tier": "community", "category": "desktop", "version": "1.0.1", "requires_hermes": ">=0.21.5", "image": "https://raw.githubusercontent.com/BrokeSkill/turn-bell/b39808efe7eef1528679661ebda902c9b632a438/assets/demo-modes.gif", "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "turn-usage", "repo": "https://github.com/tpte/hermes-turn-usage", "sha": "728cea2b267af6f4bbc59707fb886d7df10a39e4", "description": "Usage and cost footer appended to every reply \u2014 tokens, cache hit rate, cost and context occupancy, plus a per-tool time breakdown showing which tool actually consumed the wall clock. Waiting time (a blocking user prompt) is reported separately and excluded from the active-time denominator. Pure computation, never calls a model; any failure leaves the reply untouched. Disclosure \u2014 the usage footer is appended to the stored assistant reply, so it is replayed to the model on later turns and adds tokens to every turn.", "maintainer": "tpte", "tier": "community", "category": "general", "docs_url": "https://github.com/tpte/hermes-turn-usage#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "twenty-crm", "repo": "https://github.com/TREE-Ind/hermes-twenty-crm", "sha": "3d87c1634e4b159738b35954ac4efc15c876d46d", "description": "Twenty CRM for Hermes Agent with managed self-hosting, external-instance connectivity, REST, GraphQL, and live schema introspection.", "maintainer": "TREE-Ind", "tier": "community", "category": "tools", "docs_url": "https://github.com/TREE-Ind/hermes-twenty-crm#readme", "capabilities": {"provides_tools": ["twenty_describe_workspace", "twenty_graphql", "twenty_rest", "twenty_schema"], "provides_hooks": ["on_session_start", "pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "typesafe-skill-router", "repo": "https://github.com/DECRUX9812/typesafe-skill-router", "sha": "e6cdac26f9ed588b4a94b8a2f7f9f026e1b9faf3", "description": "TypeSafe (Jev) skill routing: the request is routed before the model call and the one skill from the live roster that fits it is named in a single <skill_relevance> line on the user message \u2014 nothing is injected when nothing fits.", "maintainer": "DECRUX9812", "tier": "community", "category": "automation", "requires_hermes": ">=0.21", "docs_url": "https://github.com/DECRUX9812/typesafe-skill-router#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": ["TYPESAFE_API_KEY"]}}, {"name": "umt", "repo": "https://github.com/Markgatcha/universal-mcp-toolkit", "sha": "b6eb997c316de472318ca658d6d7b57b62ca13d0", "subdir": "plugin", "description": "Connect 28 production-ready MCP servers to any coding agent. Portable Agent Plugins v1 package (mcp.json + skills/): three zero-config stdio servers out of the box (Hacker News, arXiv, npm registry, each pinned to an exact npm version), plus the umt-mcp skill that drives the umt CLI to wire any of the 28 servers into Claude Code, Cursor, Codex, Windsurf, Zed and more. Needs Node.js and npm on PATH.", "maintainer": "Markgatcha", "tier": "community", "category": "tools", "docs_url": "https://github.com/Markgatcha/universal-mcp-toolkit#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "unbrowse", "repo": "https://github.com/unbrowse-ai/unbrowse", "sha": "a82c59dfb05583836ecfa21fdc3f8a2ea73bfb76", "subdir": "plugins/hermes", "description": "Unbrowse: websites as APIs. Read any page as clean markdown, run tasks on sites through learned first-party APIs (no browser), and drive a cloud browser with saved logins when nothing matches. Also a web_extract backend and a guard that routes public-web browser_* calls to Unbrowse. Disclosure \u2014 hosted service: page URLs, task text and tool arguments are sent to unbrowse.ai with your API key, pages are fetched and site logins are stored on Unbrowse's side, and verified calls bill the Unbrowse account; once UNBROWSE_API_KEY is set the plugin blocks the built-in browser_* tools and web_extract on public URLs by default (settings blockBrowser/blockWebExtract, or UNBROWSE_ALLOW_BUILTIN_BROWSER=1).", "maintainer": "unbrowse-ai", "tier": "community", "category": "web", "docs_url": "https://github.com/unbrowse-ai/unbrowse/tree/main/plugins/hermes", "version": "12.1.0", "capabilities": {"provides_tools": ["unbrowse_canvas_read", "unbrowse_canvas_put", "unbrowse_run", "unbrowse_inspect", "unbrowse_resume", "unbrowse_cancel", "unbrowse_learn", "unbrowse_browse_open", "unbrowse_browse_snapshot", "unbrowse_browse_act", "unbrowse_forget", "unbrowse_credentials_list", "unbrowse_credentials_request", "unbrowse_credentials_status", "unbrowse_browse_finish", "unbrowse_browse_close", "unbrowse_scrape", "unbrowse_map", "unbrowse_sites", "unbrowse_credits", "unbrowse_usage", "unbrowse_index", "unbrowse_index_status", "unbrowse_discover"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": ["UNBROWSE_API_KEY"]}}, {"name": "unibaseio-membase", "repo": "https://github.com/unibaseio/membase", "sha": "d304dc773e028bd6a90ae628692b9c8dc008e8dc", "subdir": "integrations/hermes", "title": "Membase", "description": "Long-term memory for you and your AI from Membase (membase.com, by Unibase): one memory every connected AI shares. Searches the user's Membase memory before each turn (8 s, fail-open) and adds membase_search, membase_save and membase_profile. Disclosure \u2014 user prompts are sent as search queries to the Membase API (api.app.membase.com); with the opt-in capture_turns setting the user's messages are saved there too, and what Hermes' built-in memory records about the user is saved to their Membase profile. MEMBASE_API_KEY comes from the Hermes secret scope; the only local file is $HERMES_HOME/unibaseio-membase.json. No background processes, shell commands or telemetry.", "maintainer": "unibaseio", "tier": "community", "category": "memory", "requires_hermes": ">=0.22.2", "version": "0.1.0", "docs_url": "https://github.com/unibaseio/membase/tree/main/integrations/hermes#readme", "readme": true, "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MEMBASE_API_KEY"]}}, {"name": "unicode-ref", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "d33c8c9379ee8d90ef4276ddc61073b28fa32abe", "subdir": "unicode-ref", "description": "@unicode: context references that spell text out character by character for the model: @unicode:\"text\" attaches a table of every character of the quoted text (code point, Unicode name, category) with notes on what does not show on screen: invisible characters and their positions, text-direction controls, spaces other than the ordinary one, Unicode tag characters (decoded), words that mix Latin letters with lookalike Cyrillic, Greek or fullwidth ones, and private-use or unassigned code points; @unicode:U+200B describes up to 20 code points (name, category, UTF-8 bytes, decomposition); the TUI and Desktop composer suggest characters by name. Disclosure \u2014 reads only the text of the reference itself, using Python's unicodedata; no network, no files read or written, no subprocess, no credentials; register() only adds the @unicode: reference provider", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/unicode-ref", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/d33c8c9379ee8d90ef4276ddc61073b28fa32abe/docs/unicode-ref-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "unitares", "repo": "https://github.com/cirwel/unitares-host-adapter", "sha": "bf534cf031593f785b6022f0edf0fc594c2aa912", "description": "Records each Hermes session on a UNITARES server you run: one identity per session and one check-in per completed turn, so the agent's working record carries across sessions. Fail-open; never blocks the agent. Disclosure \u2014 sends only to the server named in UNITARES_MCP_URL, which you host; there is no default server. Per session it sends your model name and platform; per completed turn a fixed check-in marker (never user, assistant or tool text). Hooks run synchronously, so an unresponsive server can delay a call by roughly 40 seconds (connection plus call timeout). After 3 consecutive failures the plugin stops reporting for that session only, until the session is finalized or reset; it stays fail-open and never blocks the agent. If UNITARES_BEARER is set, it is sent as a request header to that same server only.", "maintainer": "cirwel", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.0", "docs_url": "https://github.com/cirwel/unitares-host-adapter#hermes-agent", "version": "0.3.3", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_session_finalize", "on_session_reset", "on_session_start", "post_llm_call", "pre_llm_call"], "provides_middleware": [], "requires_env": ["UNITARES_MCP_URL"]}}, {"name": "unraid", "title": "Unraid", "repo": "https://github.com/Anunnaki-Astronaut/hermes-unraid", "sha": "48deec3dfd9bbc0b00731412635fa2dc06263d03", "description": "Read-only Unraid monitoring for Hermes Desktop: server metadata, array capacity, Docker containers, virtual machines, and grouped alerts. Disclosure \u2014 sends fixed GraphQL queries to the user-configured Unraid host and stores a VIEWER key through Hermes secret scope; no telemetry, background process, shell, SSH, MCP, or mutations.", "maintainer": "Anunnaki-Astronaut", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/Anunnaki-Astronaut/hermes-unraid#readme", "version": "0.2.0", "image": "https://raw.githubusercontent.com/Anunnaki-Astronaut/hermes-unraid/48deec3dfd9bbc0b00731412635fa2dc06263d03/docs/screenshots/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/Anunnaki-Astronaut/hermes-unraid/48deec3dfd9bbc0b00731412635fa2dc06263d03/docs/screenshots/overview.png", "https://raw.githubusercontent.com/Anunnaki-Astronaut/hermes-unraid/48deec3dfd9bbc0b00731412635fa2dc06263d03/docs/screenshots/array.png", "https://raw.githubusercontent.com/Anunnaki-Astronaut/hermes-unraid/48deec3dfd9bbc0b00731412635fa2dc06263d03/docs/screenshots/docker.png", "https://raw.githubusercontent.com/Anunnaki-Astronaut/hermes-unraid/48deec3dfd9bbc0b00731412635fa2dc06263d03/docs/screenshots/vms.png", "https://raw.githubusercontent.com/Anunnaki-Astronaut/hermes-unraid/48deec3dfd9bbc0b00731412635fa2dc06263d03/docs/screenshots/alerts.png"], "readme": true, "platforms": [], "known_issues": ["When Hermes Desktop uses a remote backend, install the Desktop part locally and the Agent/backend part on the remote Hermes host.", "The Unraid GraphQL schema can vary by release; this version was manually tested with Unraid 7.3."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["UNRAID_API_KEY"]}}, {"name": "usage-flame", "repo": "https://github.com/maxshafransky-a11y/hermes-usage-flame", "sha": "a8602cb3d58a2b0af12b6c638aa1add785f2d449", "description": "Pinned glowing chip + fire-themed panel with live subscription-quota windows (remaining %, reset countdown, burn-rate pace and run-out forecast with sparkline history) for every provider Hermes reports usage for. 12 color themes and fonts, RU/EN, zero dependencies, works on Windows. Disclosure \u2014 runs hermes usage --json through the Desktop gateway (cli.exec) every 1\u201315 minutes and sweeps up to 8 providers every 15 minutes; each run queries that provider's usage endpoint with the credential Hermes already holds. Reads the composer's selected provider from Desktop localStorage. No network calls of its own.", "maintainer": "maxshafransky-a11y", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.4", "platforms": ["windows", "macos", "linux"], "docs_url": "https://github.com/maxshafransky-a11y/hermes-usage-flame", "screenshots": ["https://raw.githubusercontent.com/maxshafransky-a11y/hermes-usage-flame/a8602cb3d58a2b0af12b6c638aa1add785f2d449/screenshots/01-hero-dark.png", "https://raw.githubusercontent.com/maxshafransky-a11y/hermes-usage-flame/a8602cb3d58a2b0af12b6c638aa1add785f2d449/screenshots/02-providers-expanded.png", "https://raw.githubusercontent.com/maxshafransky-a11y/hermes-usage-flame/a8602cb3d58a2b0af12b6c638aa1add785f2d449/screenshots/03-themes.png", "https://raw.githubusercontent.com/maxshafransky-a11y/hermes-usage-flame/a8602cb3d58a2b0af12b6c638aa1add785f2d449/screenshots/04-forecast.png", "https://raw.githubusercontent.com/maxshafransky-a11y/hermes-usage-flame/a8602cb3d58a2b0af12b6c638aa1add785f2d449/screenshots/05-light-theme.png", "https://raw.githubusercontent.com/maxshafransky-a11y/hermes-usage-flame/a8602cb3d58a2b0af12b6c638aa1add785f2d449/screenshots/06-chips.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "usage-guard", "repo": "https://github.com/mister-ideas/usage-guard", "sha": "77c96af92bd3e144e4af9427c9b3772557f14205", "description": "Keeps an agent inside its subscription allowance: refuses a provider dispatch once a subscription usage window is exhausted, so an account that allows paid extra usage stops at the wall instead of spending overage. Reads the usage Hermes already displays, holds no credentials, and never touches account or billing settings. Disclosure \u2014 refuses main-loop provider calls (including MoA turns) for the providers in `provider_keys` (Anthropic and OpenAI Codex by default) when a subscription usage window reaches `threshold_percent`, and by default (`fail_open: false`) also refuses when usage data is missing, stale, unreadable, or the guard's own config is malformed; usage is read through Hermes's own account-usage fetcher (no credentials held, at most one read per source every 180 seconds by default) and cached in $HERMES_HOME/plugin-data/usage-guard/usage.json; a `pre_llm_call` hook adds a short usage note to the next turn's context at 80% and 90% used by default, and an opt-in (off by default) `llm_request` middleware lowers an existing output-token budget near the usage limit; both read only the cache, never the network; auxiliary calls (compression, vision, titles, MoA advisors) are not gated.", "image": "https://raw.githubusercontent.com/mister-ideas/usage-guard/77c96af92bd3e144e4af9427c9b3772557f14205/docs/banner.jpg", "screenshots": ["https://raw.githubusercontent.com/mister-ideas/usage-guard/77c96af92bd3e144e4af9427c9b3772557f14205/docs/media/shot-refusal.png", "https://raw.githubusercontent.com/mister-ideas/usage-guard/77c96af92bd3e144e4af9427c9b3772557f14205/docs/media/shot-near-wall.png", "https://raw.githubusercontent.com/mister-ideas/usage-guard/77c96af92bd3e144e4af9427c9b3772557f14205/docs/media/shot-unavailable.png", "https://raw.githubusercontent.com/mister-ideas/usage-guard/77c96af92bd3e144e4af9427c9b3772557f14205/docs/media/shot-install.png"], "maintainer": "mister-ideas", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.6", "version": "0.4.1", "known_issues": ["Anthropic windows: Hermes's Anthropic fetcher scales any utilization <= 1 by 100, so a window at 0-1% can read as 100% and the guard will refuse. Fixed upstream by NousResearch/hermes-agent#139916; this entry's requires_hermes rises to the release carrying it."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call"], "provides_middleware": ["llm_execution", "llm_request"], "requires_env": []}}, {"name": "usage-ledger", "repo": "https://github.com/3DPrintPioneers/hermes-usage-ledger", "sha": "3fa6a32187c943ff2f43959b3a7d258cf9fe067e", "description": "Local-only content-free usage tally and native Desktop statusline (Windows and macOS beta).", "maintainer": "3DPrintPioneers", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/3DPrintPioneers/hermes-usage-ledger/blob/3fa6a32187c943ff2f43959b3a7d258cf9fe067e/README.md", "version": "0.4.4", "readme": true, "platforms": ["windows", "macos"], "known_issues": ["Native macOS validation covers macOS 14.3.1 on Apple Silicon/arm64; Intel Mac native UI is not yet verified.", "If another updater owns tally.md, disable finalize_tally before enabling Agent collection; writer handoff requires quiescent, explicit baseline reconciliation."], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_llm_call", "post_api_request", "post_llm_call", "on_session_finalize"], "provides_middleware": [], "requires_env": []}}, {"name": "usage-stats", "repo": "https://github.com/meviusisback/usage-stats", "sha": "ba0652c5cc45b18a602a087da25bc5fa293b7f99", "description": "Multi-provider usage/balance for the Hermes Desktop status bar \u2014 shows live usage for OpenCode, OpenRouter, DeepSeek, Kimi, NovitaAI, ZAI, Alibaba, Arcee, plus gateway-native Claude/Codex/Cursor/Nous.", "maintainer": "meviusisback", "tier": "community", "category": "desktop", "docs_url": "https://github.com/meviusisback/usage-stats#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "ux3-product-design-harness", "title": "UX3 Product Design Harness", "repo": "https://github.com/cis2042/ux3-product-design-harness", "sha": "48965c6b501f61ebbb8130c9c2e4f9af08922b9f", "version": "0.2.0", "description": "MIT-licensed product judgment across User, Evidence and Business flows, with one portable Agent Plugins v1 skill and all 91 original skill files. Disclosure: skill instructions run bundled local Python/jsonschema validators and read/write user-controlled local briefs, context packs and review outputs, which can contain personal data. Optional evidence gathering uses explicitly user/host-authorized tools, including external search and connectors; selected claims, queries or evidence go to the chosen services under their policies. There is no publisher-operated receiving endpoint, retention service, telemetry or background process. The bundled jev_gate.py runs offline; connecting a remote decision service needs separate configuration and consent. No MCP server, native plugin entrypoint, registered tools, hooks or middleware.", "maintainer": "cis2042", "tier": "community", "category": "general", "requires_hermes": ">=0.22.4", "docs_url": "https://github.com/cis2042/ux3-product-design-harness/blob/48965c6b501f61ebbb8130c9c2e4f9af08922b9f/README.md", "readme": true, "platforms": [], "known_issues": ["Hermes 0.15.1 does not support this portable package; Hermes >=0.22.4 is required.", "Compatible-host installation, runtime inventory, enable/disable and admission scanning have not been executed locally.", "User-invoked bundled validators require existing Python and jsonschema dependencies; no dependency installer or plugin install hook is provided."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "vault-view", "repo": "https://github.com/ergocogn/hermes-desktop-plugin-vault-view", "sha": "7cc1d6f67205ece2b57c17500a198e3841215ac2", "version": "0.5.0", "title": "Vault View", "description": "Local Markdown vault workspace for Hermes Desktop: visual editing, progressive reading, cached image previews, optional per-conversation workspaces, pinned tabs, explicit selection quoting, tag search, links, backlinks and a graph. Compatible with Obsidian vaults. File transport requires a Linux/macOS gateway; Windows Desktop requires a WSL-hosted Unix backend, not a native Windows gateway; ffmpeg thumbnails are optional. Remote images and agent guidance are independent opt-ins and disabled by default; automatic note-content sharing is disabled; direct Obsidian opening is temporarily hidden. Disclosure \u2014 reads and writes notes in the vault folder you choose through Desktop shell commands on the gateway host; remote Markdown images and agent navigation guidance stay off until you opt in.", "maintainer": "ergocogn", "tier": "community", "category": "desktop", "docs_url": "https://github.com/ergocogn/hermes-desktop-plugin-vault-view#readme", "readme": true, "image": "https://raw.githubusercontent.com/ergocogn/hermes-desktop-plugin-vault-view/7cc1d6f67205ece2b57c17500a198e3841215ac2/assets/banner.png", "screenshots": ["https://raw.githubusercontent.com/ergocogn/hermes-desktop-plugin-vault-view/7cc1d6f67205ece2b57c17500a198e3841215ac2/screenshots/vault-view-light.png", "https://raw.githubusercontent.com/ergocogn/hermes-desktop-plugin-vault-view/7cc1d6f67205ece2b57c17500a198e3841215ac2/screenshots/vault-view-settings.png"], "platforms": ["linux", "macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.21.5"}, {"name": "vaultknox", "repo": "https://github.com/Ufonik88/Hermes-VaultKnox", "sha": "8aea272fd9b071615fcd0c93a38b760485673316", "subdir": "src/vaultknox/_hermes_plugin", "description": "Secret-leak protection for Hermes chats. Scans inbound messages and outbound replies for API keys, tokens, and passwords with a 28-pattern detector registry, redacts them before they reach session storage or the user, and injects safe secret-handling rules so the agent never asks for secrets in chat. Zero dependencies, fully offline detection; pairs with the optional hermes-vault CLI for encrypted storage. Disclosure \u2014 rewrites inbound user messages (regex secret redaction, may false-positive on password-like strings), injects a secret-handling prompt each conversation and rewrites assistant replies that ask for secrets; outbound replies are value-redacted with the same registry (regex-based, so a shape no detector covers passes through), with findings logged as detector name plus SHA-256 fingerprint and never the raw value. The vaultknox tool is inert unless the separate vaultknox pip package is installed, its write gate is a tool argument the model sets, and a vault policy that authorises raw consume_token returns the plaintext to the model.", "maintainer": "Ufonik88", "tier": "community", "category": "tools", "requires_hermes": ">=0.19", "docs_url": "https://github.com/Ufonik88/Hermes-VaultKnox/blob/8aea272fd9b071615fcd0c93a38b760485673316/docs/PLUGIN.md", "version": "0.8.3", "image": "https://raw.githubusercontent.com/Ufonik88/Hermes-VaultKnox/8aea272fd9b071615fcd0c93a38b760485673316/docs/images/banner.png", "screenshots": ["https://raw.githubusercontent.com/Ufonik88/Hermes-VaultKnox/8aea272fd9b071615fcd0c93a38b760485673316/docs/images/quickstart-terminal.png", "https://raw.githubusercontent.com/Ufonik88/Hermes-VaultKnox/8aea272fd9b071615fcd0c93a38b760485673316/docs/images/protection-flow.png", "https://raw.githubusercontent.com/Ufonik88/Hermes-VaultKnox/8aea272fd9b071615fcd0c93a38b760485673316/docs/images/plugin-verify.png"], "readme": true, "platforms": [], "capabilities": {"provides_tools": ["vaultknox"], "provides_hooks": ["pre_gateway_dispatch", "pre_llm_call", "transform_llm_output"], "provides_middleware": [], "requires_env": []}}, {"name": "vaultwarden", "repo": "https://github.com/hansipie/hermes-vaultwarden", "sha": "a461ecf127299a701404233cec8f097ac0450225", "description": "Vaultwarden / Bitwarden Password Manager (bw CLI) secret source", "maintainer": "hansipie", "tier": "community", "category": "general", "docs_url": "https://github.com/hansipie/hermes-vaultwarden#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "vector-platform", "repo": "https://github.com/BonesGit/hermes-vector-platform", "sha": "94e1af49a2dcbce4952cb3d17b8591b8e3e10bed", "description": "Vector (vectorapp.io) messaging platform plugin: Hermes becomes a first-class Nostr-based Vector bot (its own nsec/npub identity), relaying DMs through a local Rust sidecar that wraps vector-sdk. First run needs `hermes gateway setup`, which provisions the bot identity (create or import). Disclosure \u2014 `hermes gateway setup` downloads a prebuilt vector-bridge binary from github.com/BonesGit/hermes-vector-platform/releases (tag v<version>, sha256 checked against that release's SHA256SUMS; set vector.prebuilt.download: false to build from the bundled Rust source), merges `vector:` settings into ~/.hermes/config.yaml, writes VECTOR_* to ~/.hermes/.env, and publishes a public bot profile (kind-0, bot: true) to Nostr discovery relays.", "maintainer": "BonesGit", "tier": "community", "category": "platform", "docs_url": "https://github.com/BonesGit/hermes-vector-platform", "image": "https://raw.githubusercontent.com/BonesGit/hermes-vector-platform/refs/heads/master/vector-hermes-agent-plugin.png", "version": "0.5.3", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["VECTOR_NPUB"]}}, {"name": "vet402", "repo": "https://github.com/kzmttkc/vet402-hermes", "sha": "04c7fdd1ac9d6ddabdb0fabd23a1a0557474b51e", "version": "0.2.0", "subdir": "vet402", "description": "Look a paid x402 or MPP URL up in vet402's public record of real purchases before the agent pays it. BLOCK stops the tool call. ALLOW, and a WARN that only says vet402 has not bought there yet, let it run. Any other WARN, a URL with no record for the paying HTTP method, and a vet402 outage ask for approval, and the call is refused when nobody can answer (yolo, approvals off, cron). vet402 only knows endpoints in public x402 and MPP discovery, so an unlisted URL asks. By default only mpp_fetch is checked, and a payment made inside Hermes HTTPX traffic is not seen. Disclosure \u2014 sends each guarded or model-queried URL (scheme, host, port and path; userinfo, query and fragment stripped) and its HTTP method to vet402.com in up to two HTTPS GETs; a missing record or a vet402 outage asks for approval and is refused when nobody can answer, unless VET402_UNKNOWN=allow lets it pay; while enabled, its skill adds one line to the skills index of every session.", "maintainer": "kzmttkc", "tier": "community", "category": "tools", "requires_hermes": ">=0.22.2", "docs_url": "https://github.com/kzmttkc/vet402-hermes/blob/main/vet402/README.md", "capabilities": {"provides_tools": ["vet402_check"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "viajante", "repo": "https://github.com/felipebasurto/viajante", "sha": "9a004462616bd6efa9d1e725e45c59f915234f18", "subdir": "integrations/hermes", "description": "Flight and hotel search from your own machine through a local MCP server and one skill that tells the agent how to read the results. Portable Agent Plugins v1 package (mcp.json + skills/). No API keys and no account. Disclosure \u2014 mcp.json runs `npx -y @viajante/mcp@1.5.2`, which downloads the pinned npm shim and then `uvx` installs the same-version `viajante` package from PyPI on first start, so it needs Node.js, uv and Python 3.10+. Searches read Google Flights and Google Hotels public pages from your IP address (Booking.com and Skiplagged are opt-in). Optional local state (price-history log, cooldown file) is written under the viajante state directory. Nothing is booked and no credentials are stored.", "maintainer": "felipebasurto", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.4", "docs_url": "https://github.com/felipebasurto/viajante/tree/9a004462616bd6efa9d1e725e45c59f915234f18/integrations/hermes", "version": "1.5.2", "readme": true, "platforms": ["linux", "macos", "windows"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "vidiq", "repo": "https://github.com/vid-io/vidiq-mcp", "sha": "1c094797d036577519e378e3ee4856682cbe1818", "description": "Grow on YouTube, Instagram, and TikTok with vidIQ. Disclosure \u2014 skills only; you add vidIQ's hosted MCP server yourself with hermes mcp add vidiq --url https://mcp.vidiq.com/mcp --auth oauth; tool calls send your prompts and authorized channel data to vidIQ and spend vidIQ account credits.", "maintainer": "vid-io", "tier": "community", "category": "tools", "docs_url": "https://github.com/vid-io/vidiq-mcp/blob/1c094797d036577519e378e3ee4856682cbe1818/README.md#hermes-agent", "version": "0.1.5", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "vk-platform", "repo": "https://github.com/web3blind/hermes-vk-platform", "sha": "f922a0fc65bd9ccb0312fd8f394c9d38a503ad8c", "version": "0.2.3", "requires_hermes": ">=0.21.3", "description": "VK Messenger gateway with community Long Poll, media attachments, allowlists, and project-lane routing.", "maintainer": "web3blind", "tier": "community", "category": "platform", "docs_url": "https://github.com/web3blind/hermes-vk-platform/blob/f922a0fc65bd9ccb0312fd8f394c9d38a503ad8c/README.md", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["VK_GROUP_TOKEN", "VK_GROUP_ID"]}}, {"name": "voice-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "93080fb3cf44ce6e13ab050df64ca66b8eea0d90", "subdir": "voice-ledger", "description": "Local ledger of the voice messages and recordings Hermes transcribes (voice messages from messaging platforms, CLI voice mode): /voice-log shows how many recordings there were, how much audio in total and typically, and how long ago the last one was, per speech-to-text provider, model, source, language or day, for the last 24 hours, any number of hours or days or everything recorded; /voice-log recent lists the newest recordings (ten, or up to 100 with /voice-log recent 50). Disclosure \u2014 writes recording metadata (source, provider, model, language, file size read from the file system; no audio, file path, prompt or transcript) to plugin-data/voice-ledger/voice.jsonl, trimmed to 5,000 rows past 2 MB; observer only, always returns None so the transcription request is unchanged; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/voice-ledger", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/93080fb3cf44ce6e13ab050df64ca66b8eea0d90/docs/voice-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_transcription"], "provides_middleware": [], "requires_env": []}}, {"name": "voicestudio", "repo": "https://github.com/aska-digital/protean-voice-studio", "sha": "efe5c1910ee22de7e911a9c8a8625027781f2729", "subdir": "voicestudio", "description": "Client for the local VoiceStudio text-to-speech app (debpalash/VoiceStudio): speak short text, design or clone voices, browse voices, render chaptered long-form audio, dub videos, and check server status. Six tools with mirrored slash commands plus a bundled skill. Disclosure \u2014 sends the text, script files, videos and voice samples you point it at to the VoiceStudio server you configure (default http://127.0.0.1:3900, plain HTTP) and saves the returned audio under HERMES_HOME/plugin-data/voicestudio; no credentials, no telemetry, no self-update.", "maintainer": "aska-digital", "tier": "community", "category": "voice", "requires_hermes": ">=0.21", "version": "1.0.0", "docs_url": "https://github.com/aska-digital/protean-voice-studio", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["vs_speak", "vs_design_voice", "vs_list_voices", "vs_longform", "vs_dub", "vs_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "vornik-companion", "repo": "https://github.com/EaseIT-cz/vornik", "sha": "73bbb88e7c78e3f84d30bc32b223c218c5681c7e", "subdir": "contrib/hermes-companion", "description": "Vornik as Hermes's hardened broker and long-term memory: Hermes holds no credentials; privileged work runs in operator-approved workflows on your own Vornik daemon. Disclosure \u2014 talks only to the self-hosted Vornik daemon at VORNIK_URL with VORNIK_BROKER_TOKEN (and VORNIK_MEMORY_TOKEN for memory); broker tools let the agent start operator-approved workflows on that daemon (writes are approved by a person in Vornik); when selected as memory provider it sends each turn's user query for recall, mirrors MEMORY.md and USER.md writes to the daemon, and asks the daemon to stop recalling (not delete) a mirrored entry that Hermes removes or replaces (/vornik-memory lists and /vornik-forget forgets what Vornik keeps); artifact tools expose only named outputs allowed by the approved workflow from completed runs and read bounded text or return short-lived binary download links from the daemon; task diagnosis tools (offered only when the daemon advertises companion-progress) return a broker task's execution events and closed error classes as the daemon serves them to a broker key; hermes vornik approvals on writes security.approval.transport (and vornik_companion.approval_namespace) to Hermes config, after which Hermes's own dangerous-command prompts (the redacted command text) are sent through the local vornikctl agent host-approval to the daemon and answered on the paired phone, any failure or a Vornik outage denying the command unless transport_fallback: builtin is set, and the plugin never decides itself; hermes vornik connect runs the local vornikctl, which adds an MCP entry to Hermes config.", "maintainer": "EaseIT Labs", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://docs.vornik.io/features/companion/", "version": "0.22.1", "capabilities": {"provides_tools": ["vornik_catalog", "vornik_delegate", "vornik_result", "vornik_status", "vornik_cancel", "vornik_list_artifacts", "vornik_read_artifact", "vornik_task_logs", "vornik_task_explain", "vornik_recall", "vornik_remember"], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": ["VORNIK_URL", "VORNIK_BROKER_TOKEN", "VORNIK_MEMORY_TOKEN"]}, "requires_env": []}, {"name": "wait-ledger", "repo": "https://github.com/olric3015/hermes-plugins", "sha": "c44b60aa6a6621147ce5b3168b7841bf1f8ac006", "subdir": "wait-ledger", "description": "Local ledger of the times Hermes stopped to wait for you (approval prompts, clarify questions, password prompts): /waits shows how many waits there were, how many were answered or left unanswered, and how long Hermes stood still in total, typically and at most, per kind of prompt, per platform or per day, for the last 24 hours, any number of hours or days, the latest session or everything recorded; /waits recent lists the newest waits (ten, or up to 100 with /waits recent 50). Disclosure \u2014 writes wait metadata (session id, platform, kind of prompt, how it ended, wait time; no prompt text, answer or session key) to plugin-data/wait-ledger/waits.jsonl, trimmed to 5,000 rows past 2 MB; observer only, cannot answer, delay or change a prompt; no network", "maintainer": "olric3015", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/olric3015/hermes-plugins/tree/main/wait-ledger", "version": "1.0.0", "image": "https://raw.githubusercontent.com/olric3015/hermes-plugins/c44b60aa6a6621147ce5b3168b7841bf1f8ac006/docs/wait-ledger-card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["on_human_input_request", "on_human_input_resolved"], "provides_middleware": [], "requires_env": []}}, {"name": "walkie-talkie", "repo": "https://github.com/barronlroth/hermes-walkie-talkie", "sha": "b16c7995df66d599e04499272b49976bcb11db2d", "description": "Let one session message another existing session (Telegram topic, group thread or DM), waking it like a user turn so the reply lands in that chat Disclosure \u2014 starts agent turns in other existing gateway sessions (any routed chat, including groups, and from cron jobs) via ctx.inject_message, only after plugins.entries.walkie-talkie.allow_gateway_injection: true; after an accepted handoff it posts a visible copy into the target chat through Hermes's send_message helper using your existing gateway bot credentials; reads state.db, config.yaml and cron/jobs.json read-only; no network calls of its own, no shell, no telemetry.", "maintainer": "barronlroth", "tier": "community", "category": "automation", "requires_hermes": ">=0.21.7", "docs_url": "https://github.com/barronlroth/hermes-walkie-talkie#readme", "version": "0.1.5", "title": "Walkie-Talkie", "capabilities": {"provides_tools": ["list_topics", "message_topic"], "provides_hooks": ["pre_llm_call"], "provides_middleware": [], "requires_env": []}}, {"name": "wallaby-provider", "repo": "https://github.com/Dawncoral/wallaby-hermes-plugin", "sha": "327e0400e041a89d6975377e5d802acb07498def", "description": "Wallaby Token \u2014 curated open-weight inference (Kimi K3); adds Wallaby to the hermes model provider list.", "maintainer": "Dawncoral", "tier": "community", "category": "models", "requires_hermes": ">=0.20.0", "docs_url": "https://github.com/Dawncoral/wallaby-hermes-plugin#readme", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["WALLABY_API_KEY"]}}, {"name": "wallpaper-theme", "repo": "https://github.com/strnadchristopher/hermes-wallpaper-theme", "sha": "40ebeaac235be5751f44491540b7b41d35d41da1", "description": "A Hermes Desktop theme that follows your wallpaper. Reads Pywal's ~/.cache/wal/colors.json by default, or any palette JSON you point it at (settings page or ~/.config/hermes-wallpaper-theme/config.json), derives a palette with checked contrast floors and repaints live when the file changes. Optional glass mode paints a translucent background for native window materials or compositor blur. Disclosure \u2014 the desktop half uses only @hermes/plugin-sdk; the palette file is read by the package's own backend route (dashboard/plugin_api.py, GET /api/plugins/wallpaper-theme/palette, mounted once the plugin is in plugins.enabled), polled every 3 seconds with a change stamp. That route reads only JSON files inside the user's home directory (or XDG_*_HOME) under 256 KiB and returns colour fields only, never raw file text. No network calls, no shell commands, no credentials, no telemetry.", "maintainer": "strnadchristopher", "tier": "community", "category": "desktop", "version": "1.1.0", "docs_url": "https://github.com/strnadchristopher/hermes-wallpaper-theme/blob/40ebeaac235be5751f44491540b7b41d35d41da1/README.md", "platforms": ["linux", "macos", "windows"], "title": "Wallpaper Theme", "screenshots": ["https://raw.githubusercontent.com/strnadchristopher/hermes-wallpaper-theme/40ebeaac235be5751f44491540b7b41d35d41da1/docs/screenshots/pywal-dark.png", "https://raw.githubusercontent.com/strnadchristopher/hermes-wallpaper-theme/40ebeaac235be5751f44491540b7b41d35d41da1/docs/screenshots/flat-palette-light.png", "https://raw.githubusercontent.com/strnadchristopher/hermes-wallpaper-theme/40ebeaac235be5751f44491540b7b41d35d41da1/docs/screenshots/settings.png", "https://raw.githubusercontent.com/strnadchristopher/hermes-wallpaper-theme/40ebeaac235be5751f44491540b7b41d35d41da1/docs/screenshots/glass.png"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "requires_hermes": ">=0.22.1"}, {"name": "watchline", "repo": "https://github.com/qordinate-ai/watchline-hermes-plugin", "sha": "d3d2424336af16cae94e4bbcb47e6edd07a88062", "description": "Watchline delivery adapter for Hermes Agent. Polls a Watchline pull channel and forwards matched events into the Hermes gateway as inbound messages.", "maintainer": "qordinate-ai", "tier": "community", "category": "platform", "docs_url": "https://github.com/qordinate-ai/watchline-hermes-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "waypoint", "repo": "https://github.com/mochiNJ/hermes-waypoint", "sha": "971bab6762466bfdf6036aeaeb35352d6308f61d", "description": "Session status for Hermes Desktop: a thin bar next to every sidebar session with four states \u2014 Working (remembers your next step), Waiting on someone (who/what plus a follow-up reminder), Done (outcome plus a fresh-start handoff) and untracked. Suggests 3 next steps per session (instant quick ideas from the chat, opt-in AI ideas from the auxiliary model, priority colours) with one-click Ask, a Power up button that asks a strong model for sharper ideas on demand, and Mark complete to stop suggestions. Adds a Status Board page (columns, follow-ups due, stale sessions, archive all done), triage of untracked sessions, a resume banner above the composer, a status-bar counter, a daily summary, palette commands and English/Arabic (RTL). SDK-only: session-row slots, a route, sidebar nav, status bar, composer banner, palette. Disclosure \u2014 no network calls of its own (all model calls go through Hermes llm.oneshot); AI next-step suggestions are OFF by default; when enabled, after new replies (at most every 90 s) the plugin sends the focused session's last ~12 user/assistant messages (\u2264 ~7,000 chars) plus its title and the user's notes to the auxiliary task title_generation (Hermes default \"auto\" = your main model); Power up runs only when pressed \u2014 also with AI suggestions off \u2014 and sends a longer excerpt (last ~20 messages, \u2264 ~12,000 chars) to the plugin's own auxiliary tasks waypoint_ideas / waypoint_ideas_2 (registered by __init__.py; unset they resolve to \"auto\" = your main model) or, for \"My chat model\", to the open session's model; an optional automatic big idea (off by default) uses the same choice at most every 10 minutes; Power up call log (2.5.0): the Python half also registers two observe-only hooks (pre_auxiliary_call, post_auxiliary_call) that ignore every auxiliary task except waypoint_ideas / waypoint_ideas_2 and, for those, write one line per call to the user's own Hermes log (logs/agent.log) and append a record to <HERMES_HOME>/plugin-data/waypoint/power-calls.jsonl (rolls over at ~1 MB): model, provider, reasoning effort, response time, token counts (logged as 'unknown' with a reason when Hermes reports none), finish reason and status \u2014 never prompt, message or reply text, nothing leaves the machine, and the hooks never modify a call; reads session history (session.history) and titles (session.list); statuses, notes and cached suggestion text are kept in desktop plugin storage; archives sessions only when you press Archive (undo offered) or confirm \"Archive N done\" on the board (no undo; sessions stay under Archived); posts in-app and native OS notifications for due reminders and a once-a-day local summary; writes composer drafts only on Ask / Insert / Start fresh session and never sends them.", "maintainer": "mochiNJ", "tier": "community", "category": "desktop", "requires_hermes": ">=0.21.6", "docs_url": "https://github.com/mochiNJ/hermes-waypoint", "version": "2.5.0", "screenshots": ["https://raw.githubusercontent.com/mochiNJ/hermes-waypoint/971bab6762466bfdf6036aeaeb35352d6308f61d/media/power-up.png", "https://raw.githubusercontent.com/mochiNJ/hermes-waypoint/971bab6762466bfdf6036aeaeb35352d6308f61d/media/suggestions.png", "https://raw.githubusercontent.com/mochiNJ/hermes-waypoint/971bab6762466bfdf6036aeaeb35352d6308f61d/media/card-waiting.png", "https://raw.githubusercontent.com/mochiNJ/hermes-waypoint/971bab6762466bfdf6036aeaeb35352d6308f61d/media/board.png", "https://raw.githubusercontent.com/mochiNJ/hermes-waypoint/971bab6762466bfdf6036aeaeb35352d6308f61d/media/card-done.png", "https://raw.githubusercontent.com/mochiNJ/hermes-waypoint/971bab6762466bfdf6036aeaeb35352d6308f61d/media/banner.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": ["pre_auxiliary_call", "post_auxiliary_call"], "provides_middleware": [], "requires_env": []}}, {"name": "weather", "repo": "https://github.com/FahrenheitResearch/hermes-weather-plugin", "sha": "d474493ef4ffeefabad9dbf0188f72bce3b47b67", "description": "Weather data, radar/model imagery, and verified meteorological calculations. Built on metrust, rusbie, wrf-rust, rustdar, and ecape-rs.", "maintainer": "FahrenheitResearch", "tier": "community", "category": "tools", "docs_url": "https://github.com/FahrenheitResearch/hermes-weather-plugin#readme", "capabilities": {"provides_tools": ["wx_alerts", "wx_brief", "wx_calc", "wx_conditions", "wx_ecape", "wx_forecast", "wx_global", "wx_metar", "wx_model_image", "wx_radar_image", "wx_severe", "wx_sounding", "wx_storm_image"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "web-crawler-spider", "repo": "https://github.com/mistrysiddh/web-crawler-spider", "sha": "cccc8de3c172fb0e95bc271e9b4b39c24bb360b6", "title": "Web Crawler Spider", "description": "A small spider that lives on the Hermes Desktop window: a web that grows with tool calls, helper spiders for subagents, an amber mood while Hermes waits for approval, spider-sense for risky commands, flies, napping. By default it roams only its own overlay and reads nothing from the app; walking between the app's real buttons and links is an opt-in setting (off by default). Desktop-only (desktop/plugin.js inside the plugin SDK surface); no agent tools, hooks, middleware or env vars. Disclosure \u2014 draws an animated overlay on the Desktop window and reads gateway events (tool runs, subagents, approval waits, risky-command flags) and the app's theme colours; the opt-in \"Explore the app\" setting (off by default) also scans the window's buttons, links and alert banners, including button labels, to walk to them.", "maintainer": "mistrysiddh", "tier": "community", "category": "desktop", "version": "1.3.0", "requires_hermes": ">=0.22.0", "docs_url": "https://github.com/mistrysiddh/web-crawler-spider", "image": "https://raw.githubusercontent.com/mistrysiddh/web-crawler-spider/cccc8de3c172fb0e95bc271e9b4b39c24bb360b6/docs/hero.png", "screenshots": ["https://raw.githubusercontent.com/mistrysiddh/web-crawler-spider/cccc8de3c172fb0e95bc271e9b4b39c24bb360b6/docs/work-web.png", "https://raw.githubusercontent.com/mistrysiddh/web-crawler-spider/cccc8de3c172fb0e95bc271e9b4b39c24bb360b6/docs/helpers.png", "https://raw.githubusercontent.com/mistrysiddh/web-crawler-spider/cccc8de3c172fb0e95bc271e9b4b39c24bb360b6/docs/spider-sense.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "web-deepseek", "repo": "https://github.com/Leegenux/hermes-web-deepseek", "sha": "49151d34b7030a08de1c3f16033a62a951b9c1d7", "description": "DeepSeek Search + Fetch \u2014 routes web_search and web_extract through DeepSeek's in-house AI search engine and server-side fetcher on api.deepseek.com (opened up in the vendor's 2026-10-17 changelog: AI-native engine indexing hundreds of billions of pages, multilingual, filters SEO spam / GEO manipulation / low-quality AIGC). Registers the provider id `deepseek-web`. Disclosure \u2014 each search/fetch is a separate billed DeepSeek call at $0.75 per 1,000 successful requests per endpoint, and only HTTP 200 responses that produce a result are billable (5 QPS per account per endpoint, plus a per-domain QPS limit on fetch); the provider reuses DEEPSEEK_API_KEY and sends it only to api.deepseek.com; extract returns Markdown only (no HTML variant, so web_extract(format=\"html\") gets Markdown), and anti-bot or JS-rendered sites fail (zhihu.com, x.com, nytimes.com returned HTTP 404 in testing) while static pages work.", "maintainer": "Leegenux", "tier": "community", "category": "web", "docs_url": "https://github.com/Leegenux/hermes-web-deepseek#readme", "version": "1.1.2", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["DEEPSEEK_API_KEY"]}}, {"name": "web-defuddle", "repo": "https://github.com/annalinneajohansson82/hermes-defuddle", "sha": "d28bd52eed30c397a45f0b2aba869a28ca4789c4", "description": "Defuddle content extraction \u2014 local, free, no API key. Shells out to the defuddle CLI for clean article markdown. Extract-only; pair with SearXNG or another search provider.", "maintainer": "annalinneajohansson82", "tier": "community", "category": "web", "docs_url": "https://github.com/annalinneajohansson82/hermes-defuddle#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "web-local", "repo": "https://github.com/enzo-adami/hermes-plugin-web-local", "sha": "cef74b40c3ff379a1d5c63264ef99e8f2c9c5529", "description": "Keyless local web extract: fetches pages from this machine with httpx and reduces them to readable text with trafilatura. No API key, no third-party service. Extract-only; pair with any search provider.", "maintainer": "enzo-adami", "tier": "community", "category": "web", "requires_hermes": ">=0.22", "docs_url": "https://github.com/enzo-adami/hermes-plugin-web-local#readme", "version": "1.0.0", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "web-meta-ai", "repo": "https://github.com/ajaynomics/hermes-web-meta-ai", "sha": "302cc18866a6255d768a5a79b5e7cb50cd0adb09", "description": "Meta web search \u2014 routes web_search through the server-side web_search tool on Meta's Responses API (Muse Spark); search-only. Disclosure \u2014 each search is a separate billed Meta Model API call (per-query web search fee plus tokens) on MODEL_API_KEY.", "maintainer": "ajaynomics", "tier": "community", "category": "web", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/ajaynomics/hermes-web-meta-ai#readme", "version": "0.1.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["MODEL_API_KEY"]}}, {"name": "web-octen", "repo": "https://github.com/Octen-Team/hermes-octen-plugin", "sha": "3af8a3fe200d93934c823485f66c3375a4508474", "description": "Octen web search with query-focused highlights and page extraction.", "maintainer": "Octen-Team", "tier": "community", "category": "web", "docs_url": "https://github.com/Octen-Team/hermes-octen-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["OCTEN_API_KEY"]}}, {"name": "web-ollama-cloud", "repo": "https://github.com/rriggs/hermes-plugin-ollama-cloud-search", "sha": "9c739a9ea5985e0ba86c20d7160af06382c2198e", "description": "Ollama Cloud web search + content extraction via Ollama's native REST API. Search returns web results; extract fetches page content. Reuses OLLAMA_API_KEY (https://ollama.com/settings/keys).", "maintainer": "rriggs", "tier": "community", "category": "web", "docs_url": "https://github.com/rriggs/hermes-plugin-ollama-cloud-search#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "web-oxylabs", "repo": "https://github.com/oxylabs/hermes-web-oxylabs", "sha": "e6a5ee8fbabae43a7cd7f77610f187dbc890e76a", "description": "Oxylabs AI Studio web search and extraction provider for Hermes Agent. Requires OXYLABS_API_KEY (sign up at https://aistudio.oxylabs.io/api-key).", "maintainer": "oxylabs", "tier": "community", "category": "web", "docs_url": "https://github.com/oxylabs/hermes-web-oxylabs#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "web-search-plus", "repo": "https://github.com/robbyczgw-cla/hermes-web-search-plus", "sha": "2033dc26b3c60a3b1cc74c025f163258915c14e5", "description": "Multi-provider web search, URL extraction, quality reports, and opt-in research mode. Disclosure \u2014 reads the operator's HERMES_HOME/config.yaml (read-only) for its own Desktop settings block (country, language, max_results, auto_routing, provider_order, searxng_url, donsetch_bin) and, in its status command, the web backend and keyless_rescue settings, and checks (without opening it) whether a pre-5.1 .env file exists in its plugin folder or HERMES_HOME/plugins, to tell upgraders where their keys went; may spawn an operator-configured local donsetch CLI as a subprocess (argv, no shell).", "maintainer": "robbyczgw-cla", "tier": "community", "category": "web", "docs_url": "https://github.com/robbyczgw-cla/hermes-web-search-plus#readme", "version": "5.1.4", "capabilities": {"provides_tools": ["web_extract_plus", "web_search_plus"], "provides_hooks": ["on_session_start"], "provides_middleware": [], "requires_env": []}}, {"name": "web-serply", "repo": "https://github.com/serply-inc/hermes-web-serply", "sha": "c6cab41471586a110e5a584061168a045f566e08", "description": "Serply web search provider for Hermes Agent. Google web results via the Serply SERP API. Requires SERPLY_API_KEY (sign up at https://serply.io).", "maintainer": "serply-inc", "tier": "community", "category": "web", "docs_url": "https://github.com/serply-inc/hermes-web-serply#readme", "version": "1.0.0", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["SERPLY_API_KEY"]}}, {"name": "web-toon", "repo": "https://github.com/drew-dot-com/hermes-toon", "sha": "fb0892bd1ee6630309adeeaa68fd37454be247d3", "version": "0.1.2", "subdir": "src/hermes_toon", "description": "Paid web extract over TOON: web_extract pays a TOON node about $0.001 per page from a local payer sidecar; the node fetches through an Anyone network exit and returns markdown with a wuzzy/crawl v1 content hash. Disclosure \u2014 with TOON_PAYER_URL set and web.extract_backend toon, every web_extract URL goes to the user's anonfetch payer sidecar and spends about $0.001 from its TOON payment channel with no per-call confirmation; the sidecar's daily cap and origin allowlist are the only spending controls; pages are fetched through Anyone network exits.", "maintainer": "drew-dot-com", "tier": "community", "category": "web", "requires_hermes": ">=0.21.3", "docs_url": "https://github.com/drew-dot-com/hermes-toon#install", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["TOON_PAYER_URL"]}}, {"name": "web-venice", "repo": "https://github.com/MnrGreg/hermes-venice-web", "sha": "dcc286fc40544f4489831ff246de8030fd0417fa", "description": "Venice AI web search + extract \u2014 privacy-first, zero data retention, $0.01/request.", "maintainer": "MnrGreg", "tier": "community", "category": "web", "docs_url": "https://github.com/MnrGreg/hermes-venice-web#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["name"]}}, {"name": "webly", "title": "Webly", "repo": "https://github.com/Webly-AI/webly-plugin", "sha": "e952ff954b23a2ea564e784e9807cc274fa9ba8b", "subdir": "hermes", "description": "Publish a website, or share files and folders, at a live *.webly.site URL from Hermes Agent with no account, then sign in to claim it, edit it, and publish drafts the person approves through the hosted Webly MCP server (Streamable HTTP). Portable Agent Plugins v1 package (plugin.json + mcp.json + skills/). Disclosure \u2014 MCP tool calls go to api.webly.ai/v1/mcp, sending WEBLY_API_KEY as a bearer header when it is set, and the webly server is marked untrusted so Hermes asks before each Webly MCP tool that changes something. The bundled webly skill runs a local Node.js 20+ helper (scripts/webly.mjs) through the shell: it uploads only the files and folders the person asks to publish or share to api.webly.ai (sites are public unless password-protected), runs the project's npm/pnpm/yarn install and build first when the folder has a build script, opens the browser for sign-in and claim, and keeps its anonymous-site token and optional OAuth sign-in in ~/.webly (mode 0600). Its doctor command reads ~/.claude.json, ~/.claude/settings.json and ~/.codex/config.toml only to see whether a webly MCP server is configured there. Publishing, deleting and replacing sites through that helper are gated by skill instructions, not by Hermes approvals. The catalog copy has no update check.", "maintainer": "Webly", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.6", "version": "0.14.5", "docs_url": "https://github.com/Webly-AI/webly-plugin/tree/main/hermes#readme", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}, "known_issues": ["The Webly MCP tools need a sign-in, because a portable mcp.json cannot request OAuth: set WEBLY_API_KEY (a wb_ key from the Webly dashboard), or run `hermes mcp add webly --url https://api.webly.ai/v1/mcp --auth oauth` then `hermes mcp login webly`. Publishing without an account works without either."]}, {"name": "wechat-social-assistant", "repo": "https://github.com/harrylabsj/hermes-plugin-wechat-social-assistant", "sha": "fbfc1bd23fc9494ad9c4433de2574954b5f5476f", "description": "Local-first WeChat relationship memory assistant for macOS: captures only what is visible in the WeChat window via system OCR/Accessibility, stores everything in a local SQLite database (0600/0700 permissions, no cloud), and serves contact briefs, follow-up planning, outreach drafts and weekly relationship reports through 32 MCP tools. Engine pinned to the immutable PyPI release wechat-social-assistant==1.5.1 over uvx stdio; Portable Agent Plugins v1 package (mcp.json + skills/), needs uv on PATH. All data confined to PLUGIN_DATA via WSA_ALLOWED_ROOT + path enforcement. Never reads WeChat databases, never injects into WeChat, never sends messages \u2014 outreach is drafts for human review only. Disclosure \u2014 reads WeChat only by screenshotting/OCR-ing and walking the macOS Accessibility tree of the frontmost window (not WeChat's databases or a bot API), compiles bundled Swift helpers with swiftc into ~/Library/Caches/wechat-social-assistant/bin on first use, and needs Screen Recording (optionally Accessibility) permission for the host terminal; no network egress, never sends messages.", "maintainer": "harrylabsj", "tier": "community", "category": "tools", "docs_url": "https://github.com/harrylabsj/wechat-social-assistant", "version": "1.5.1", "platforms": ["macos"], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "whatsapp-agent-platform", "repo": "https://github.com/ahtishamdilawar/hermes-whatsapp-agent-platform", "sha": "4d8fc1c482ed06a34b6609b1dcdf59e370de7d40", "version": "0.2.0", "requires_hermes": ">=0.21.4", "title": "WhatsApp Agent Platform", "description": "Community platform plugin (not affiliated with Meta or Nous Research) connecting a WhatsApp Agent to Hermes through Meta's WhatsApp Agent Platform API (/agent/v1): long-poll inbound (no public URL), text and media. Disclosure \u2014 sends the API key and message content, files included, only to Meta: api.whatsapp.com, plus lookaside.fbsbx.com for downloads (per WhatsApp's Third-Party Agents Terms, agent chats are not end-to-end encrypted); stores the poll cursor, recent message ids and the creator's id under HERMES_HOME; no other network egress, no telemetry, no self-update. Exception: Hermes fetches image URLs in replies (SSRF-guarded, no key), revealing the server's IP to that host. Files go only to the creator; Meta keeps uploads up to 30 days. Received files are cached under HERMES_HOME (deleted after ~24 h while the gateway runs) and may reach the configured model, vision or speech-to-text provider. WHATSAPP_AGENT_PLATFORM_MEDIA_ENABLED=false disables media. By default only the agent's creator (verified through Meta's API) can message Hermes; WHATSAPP_AGENT_PLATFORM_ALLOWED_USERS or WHATSAPP_AGENT_PLATFORM_ALLOW_ALL_USERS widens that explicitly. The agent API key is saved to the Hermes .env; the state file under HERMES_HOME is 0600 and never contains the key.", "maintainer": "ahtishamdilawar", "tier": "community", "category": "platform", "docs_url": "https://github.com/ahtishamdilawar/hermes-whatsapp-agent-platform/blob/4d8fc1c482ed06a34b6609b1dcdf59e370de7d40/README.md", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["WHATSAPP_AGENT_PLATFORM_API_KEY"]}}, {"name": "wicked-memory", "repo": "https://github.com/WickedAPI/hermes-wicked-memory", "sha": "ba89b3da9a5636a715858bfbf2c34a113e0c28aa", "version": "0.1.0", "description": "Persistent, wallet-scoped long-term memory for Hermes: remember, semantic recall, versioned update, history and approved hard delete, backed by the hosted Wicked Memory service, plus skills for using it and for connecting the Wicked MCP server. Works with no setup (a wallet is generated on first use; search uses the service's shared free key). Disclosure \u2014 sends the memory text and search queries the agent chooses to memory.wickedapi.com (or your configured base_url), each request signed by the agent's wallet, plus one GET to /v1/status on first use to read the published community key; stores a generated private key unencrypted in the plugin data dir unless you supply WICKED_MEMORY_PRIVATE_KEY; no shell commands, no background processes, no telemetry; every wicked_memory_forget asks for human approval. The bundled wicked-suite-mcp skill walks you through adding the author's hosted Wicked MCP server (https://mcp.wickedapi.com/mcp, 75 tools, some x402-priced); that server is a separate manual step and is not covered by this pin.", "maintainer": "choaticpixels", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "docs_url": "https://github.com/WickedAPI/hermes-wicked-memory#readme", "readme": true, "platforms": [], "capabilities": {"provides_tools": ["wicked_memory_remember", "wicked_memory_recall", "wicked_memory_update", "wicked_memory_history", "wicked_memory_forget", "wicked_memory_whoami"], "provides_hooks": ["pre_tool_call"], "provides_middleware": [], "requires_env": []}}, {"name": "wiki-ref", "repo": "https://github.com/EloquentBrush0x/hermes-context-refs", "sha": "0154f6bfaafc837cc4af78742e6db7c087d5b5a7", "subdir": "wiki-ref", "description": "@wiki:<title> context references: attach the lead section of a Wikipedia article to a message, or one section with @wiki:<title>#<section>, with title autocomplete in the TUI and Desktop composer. Disclosure \u2014 sends HTTPS GET requests to <language>.wikipedia.org/w/api.php only (the referenced title and the typed autocomplete prefix leave the machine; a section is cut locally); no API key, no files written, no subprocess; register() only adds the @wiki: reference provider.", "maintainer": "EloquentBrush0x", "tier": "community", "category": "web", "requires_hermes": ">=0.21", "docs_url": "https://github.com/EloquentBrush0x/hermes-context-refs/tree/main/wiki-ref", "version": "1.1.0", "image": "https://raw.githubusercontent.com/EloquentBrush0x/hermes-context-refs/0154f6bfaafc837cc4af78742e6db7c087d5b5a7/docs/card.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "wireguard", "repo": "https://github.com/lEWFkRAD/hermes-plugin-wireguard", "sha": "dcb810fab7e98d8824da4b0d3078c1f195db87e1", "version": "0.1.0", "image": "https://raw.githubusercontent.com/lEWFkRAD/hermes-plugin-wireguard/dcb810fab7e98d8824da4b0d3078c1f195db87e1/docs/banner.jpg", "description": "Read-only status and peer list for a WireGuard server running on the same Windows machine as Hermes. Two tools: vpn_status (service state, tunnel address and port, server public key, per-peer handshake and transfer) and vpn_peers (the peer list only). The plugin runs only wg.exe show, sc.exe query, and one PowerShell adapter lookup; it never changes the tunnel and never reads the tunnel configuration file or any private key material. Windows only (WireGuard for Windows). Disclosure \u2014 runs local wg.exe show, sc.exe query and one PowerShell Get-NetIPAddress lookup (read-only, never touches the tunnel config or private key); tool results put peer public keys, allowed IPs and peer endpoint IP addresses into the conversation sent to your model provider.", "title": "WireGuard", "maintainer": "lEWFkRAD", "tier": "community", "category": "tools", "docs_url": "https://github.com/lEWFkRAD/hermes-plugin-wireguard#readme", "requires_hermes": ">=0.21.3", "platforms": ["windows"], "capabilities": {"provides_tools": ["vpn_status", "vpn_peers"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "wolfmarkdown", "repo": "https://github.com/WolfMarkTools/WolfMarkDown", "sha": "d9c1b4a7e31df41ed1e555f5d7c0a8f27e16c5ad", "description": "Create, clean, and verify standalone Markdown with conservative semantic repair and deterministic artifact checks. Disclosure \u2014 skill-only plugin that has the agent run its bundled Node.js 22+ scripts through the terminal; on first use it runs `npm ci` in the plugin folder (lockfile-pinned packages from registry.npmjs.org), and the optional `/wolfmarkdown setup` also creates skill symlinks in ~/.agents/skills and ~/.claude/skills.", "maintainer": "WolfMarkTools", "tier": "community", "category": "tools", "version": "1.0.3", "title": "WolfMarkDown", "readme": true, "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "woof", "repo": "https://github.com/recastsystems/hermes-woof", "sha": "2c82b34eb386a490d25439757556f6bab84048af", "description": "Plan, launch, watch and compare WOOF weather simulations on your own NVIDIA GPU: size runs with WOOF's own planner, launch them locally or on an ssh/WSL GPU host, get maps in the chat while the forecast runs, compare physics or resolution, run multi-arm research campaigns and score runs against radar and surface observations. Disclosure \u2014 runs need Linux x86_64 with an NVIDIA GPU (plan-only elsewhere); the user-run hermes woof install pip-installs recast-woof>=1.0.0,<1.1 into ~/woof-env and downloads WOOF tables and optional geography (about 1.6 GB); runs execute the WOOF CLI as detached background jobs writing to ~/woof-runs and fetch public weather data; run events are pushed into the chat as user-role messages; the optional serve/ scripts download llama.cpp and a Qwen GGUF and start an unauthenticated local model server.", "maintainer": "recastsystems", "tier": "community", "category": "tools", "version": "0.1.0", "docs_url": "https://github.com/recastsystems/hermes-woof#readme", "capabilities": {"provides_tools": ["woof_doctor", "woof_catalog", "woof_docs", "woof_plan", "woof_launch", "woof_status", "woof_stop", "woof_show", "woof_compare", "woof_campaign", "woof_score", "woof_report"], "provides_hooks": ["pre_llm_call", "post_llm_call", "on_session_end"], "provides_middleware": [], "requires_env": []}}, {"name": "workflow-record", "repo": "https://github.com/NousResearch/hermes-labs-plugins", "sha": "fde77be2bc939dbc71d425aab41731ad88173e67", "subdir": "workflow-record", "description": "hermes record: demonstrate a browser workflow once (clicks, field values, navigations) and its bundled skill lets /learn turn the recording into a skill that replays it with the browser tools. A Hermes Labs plugin: built by Nous Research, not supported. Disclosure \u2014 attaches over CDP to a Chromium you point it at (--cdp, BROWSER_CDP_URL, browser.cdp_url or 127.0.0.1:9222) and records what you do in that tab until Ctrl-C; password, one-time-code and card fields are masked inside the page as {SECRET:name} and never written. Recordings stay local in <HERMES_HOME>/recordings; nothing is sent anywhere until you run /learn on one, which hands it to your active model.", "maintainer": "NousResearch", "tier": "community", "category": "automation", "docs_url": "https://github.com/NousResearch/hermes-labs-plugins/tree/main/workflow-record", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "world-clock", "repo": "https://github.com/cygnostik/hermes-world-clock", "sha": "84b9579ce6790383227aa1b51c5476ccb54ca8f5", "title": "World Clock", "description": "One time zone in your Hermes Desktop status bar, every other zone you work with a click away. Click the time for a drop-up of your enabled zones; Edit zones lists standard IANA zones with live UTC offsets. Desktop-only (desktop/plugin.js inside the plugin SDK surface); no network, agent tools, hooks, middleware or env vars.", "maintainer": "cygnostik", "tier": "community", "category": "desktop", "docs_url": "https://github.com/cygnostik/hermes-world-clock#readme", "version": "1.0.0", "image": "https://raw.githubusercontent.com/cygnostik/hermes-world-clock/84b9579ce6790383227aa1b51c5476ccb54ca8f5/docs/media/catalog-banner.png", "screenshots": ["https://raw.githubusercontent.com/cygnostik/hermes-world-clock/84b9579ce6790383227aa1b51c5476ccb54ca8f5/docs/media/menu.png", "https://raw.githubusercontent.com/cygnostik/hermes-world-clock/84b9579ce6790383227aa1b51c5476ccb54ca8f5/docs/media/readme-hero.png"], "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "wyoming-voice-bridge", "repo": "https://github.com/TakeshiTGAL/hermes-plugin-wyoming-voice-bridge", "sha": "7be4db8548a82a8745981d47e79d1623a173a54b", "description": "Wyoming speech-to-text and text-to-speech for a Wyoming server you run (stt/tts provider `wyoming`), plus a wyoming_voice_status tool that lists the server's models and voices. Disclosure \u2014 Audio and text to speak go to the WYOMING_* host:port you set over cleartext, unauthenticated TCP (public addresses accepted). Once selected, the providers send speech in every session, including cron and webhooks. Non-WAV audio is converted with your local ffmpeg. wyoming_voice_status asks for approval on each call and refuses under cron, yolo, approvals off, -q and unattended platforms; answering \"always\" leaves a command_allowlist line in config.yaml. It calls internal Hermes approval, config and write-guard helpers, so a Hermes update can disable the status tool or speech file writes (both fail closed).", "maintainer": "TakeshiTGAL", "tier": "community", "category": "voice", "docs_url": "https://github.com/TakeshiTGAL/hermes-plugin-wyoming-voice-bridge#readme", "version": "0.1.0", "requires_hermes": ">=0.21.4", "platforms": [], "capabilities": {"provides_tools": ["wyoming_voice_status"], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "xchat", "repo": "https://github.com/NousResearch/hermes-official-plugins", "sha": "f98c0999c6dd4e59680addc8f3480208018ab5b0", "subdir": "xchat", "description": "X Chat gateway platform: talk to Hermes in X's end-to-end encrypted DMs. Hermes runs as the X account you connect: chat with it in your own self-chat (\"message yourself\"), or give it a separate account and DM that. Messages are decrypted and encrypted locally with X's official Chat XDK, so X only routes ciphertext. Encrypted media, threaded replies, group mention gating and cron delivery.", "maintainer": "NousResearch", "tier": "official", "category": "platform", "requires_hermes": ">=0.21.5", "version": "0.1.0", "image": "https://raw.githubusercontent.com/NousResearch/hermes-official-plugins/f98c0999c6dd4e59680addc8f3480208018ab5b0/assets/xchat.jpg", "docs_url": "https://github.com/NousResearch/hermes-official-plugins/tree/main/xchat", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["XCHAT_ACCESS_TOKEN"]}}, {"name": "xmemo", "repo": "https://github.com/yonro/hermes-xmemo-plugin", "sha": "499a383778647e897d30db3e92e8c8ad4397c799", "subdir": "src/hermes_xmemo/xmemo", "description": "Native XMemo memory provider for Hermes Agent \u2014 durable, identity-aware cross-session memory with semantic search. Disclosure \u2014 cloud memory provider: sends each user prompt (for recall and the search tools), model-written memories and mirrored built-in Hermes memory writes, plus a stable install ID, to xmemo.dev (Yonro Co., Ltd.); keeps a local SQLite cache of recalled results and a queue of unsent writes in $HERMES_HOME/xmemo_cache.db, partitioned by a hashed account identity; reads the key from XMEMO_KEY (also MEMORY_OS_API_KEY / MEMORY_OS_MCP_TOKEN) and, if none is set, falls back to the xmemo login token in ~/.config/xmemo/credentials.json (a catalog rule 11 deviation kept for existing users); workflow and destructive tools and timeline capture are off by default and opt-in.", "maintainer": "yonro", "tier": "community", "category": "memory", "requires_hermes": ">=0.19", "docs_url": "https://github.com/yonro/hermes-xmemo-plugin#readme", "version": "1.2.1", "platforms": [], "capabilities": {"provides_tools": ["xmemo_search", "xmemo_get", "xmemo_list"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["XMEMO_KEY"]}}, {"name": "yandex-disk", "repo": "https://github.com/akinfold/hermes-yandex-disk", "sha": "32250084b6406169d18c9c98e985a6d53342d173", "subdir": "hermes_yandex_disk", "title": "Yandex Disk", "description": "Browse, search, read, write, upload, download, copy, move, share, delete and restore files on Yandex Disk over its REST API. Disclosure \u2014 sends every request to cloud-api.yandex.net, or to the https URL in YANDEX_DISK_BASE_URL if you set one, with your YANDEX_DISK_OAUTH_TOKEN read through Hermes; file bytes go to the upload and download hosts the API hands out, without the token; unless YANDEX_DISK_ACTIONS leaves search out, loading the plugin sends one search request to learn whether the token may search, and yadisk_search is registered only if it may; every tool, permanent delete, emptying the bin and public share links included, is offered unless YANDEX_DISK_ACTIONS narrows them (read gives a read-only Disk); yadisk_upload reads a local file and sends it unredacted, and yadisk_download writes one, after Hermes' shared file-safety rules and the plugin's own: upload refuses .env files, Hermes' credential stores, Hermes' own directory and the home directories that hold keys and logins; download refuses credential files, Hermes' own directory, .hermes directories, agent instruction files such as AGENTS.md, system locations and paths outside HERMES_WRITE_SAFE_ROOT; other local files are within reach; YANDEX_DISK_ROOT confines Disk paths, not local ones; an upload from a URL makes Yandex fetch that URL; file names and contents written by other people reach the agent as tool output; no telemetry, no shell access, no background process. Independent community plugin, not affiliated with Yandex.", "maintainer": "akinfold", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "version": "0.6.2", "docs_url": "https://github.com/akinfold/hermes-yandex-disk#readme", "readme": true, "platforms": [], "known_issues": ["Every tool is offered by default, permanent delete and emptying the bin included. Set YANDEX_DISK_ACTIONS to register fewer (read, download, write, share, delete, all or single tools, comma-separated; read is the README's advice for a first setup), then restart Hermes", "yadisk_search is registered only when the token's application may use Yandex Disk search; a token from a self-registered app or from Poligon usually may not, and the plugin then offers the other fourteen tools", "yadisk_upload sends any other local file the Hermes process can read, unredacted, and the write group includes upload; to keep the agent off local files, name the tools without upload and download, e.g. YANDEX_DISK_ACTIONS=read,mkdir,write_file,copy,move,trash_restore"], "capabilities": {"provides_tools": ["yadisk_disk_info", "yadisk_list", "yadisk_search", "yadisk_read_file", "yadisk_trash_list", "yadisk_download", "yadisk_mkdir", "yadisk_write_file", "yadisk_upload", "yadisk_copy", "yadisk_move", "yadisk_trash_restore", "yadisk_publish", "yadisk_delete", "yadisk_trash_empty"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["YANDEX_DISK_OAUTH_TOKEN"]}}, {"name": "yandex", "repo": "https://github.com/akinfold/hermes-yandex-search-api", "sha": "a143ba11735622105d1b762e61c0211e887d4800", "subdir": "hermes_yandex_search", "title": "Yandex Search API", "description": "Yandex Search API as a backend for the built-in web_search (provider name yandex), plus a yandex_generative_search tool for grounded answers with cited sources. Disclosure \u2014 sends web_search queries and yandex_generative_search questions to searchapi.api.cloud.yandex.net, or to the base URL in YANDEX_SEARCH_API_URL if you set one, with your YANDEX_API_KEY and YANDEX_FOLDER_ID read through Hermes; the Search API is a paid Yandex Cloud service billed to the folder that owns the key; no other endpoint, no telemetry, no file or shell access, no background process. Independent community plugin, not affiliated with Yandex.", "maintainer": "akinfold", "tier": "community", "category": "web", "requires_hermes": ">=0.18.1", "version": "0.1.6", "docs_url": "https://github.com/akinfold/hermes-yandex-search-api#readme", "readme": true, "platforms": [], "known_issues": ["Paid: every web_search routed to yandex and every yandex_generative_search call is billed by Yandex Cloud to the folder that owns YANDEX_API_KEY; the Search API must be enabled for that folder, with billing active", "Installing does not switch web_search over: run hermes config set web.search_backend yandex. The backend is search-only, so web_extract stays with another backend. yandex_generative_search is offered to the agent as soon as the plugin is enabled (toolset yandex_search; hermes tools turns it off per platform)", "Searches the Russian market (SEARCH_TYPE_RU) unless YANDEX_SEARCH_TYPE names another: SEARCH_TYPE_COM, SEARCH_TYPE_TR, SEARCH_TYPE_KK, SEARCH_TYPE_BE or SEARCH_TYPE_UZ"], "capabilities": {"provides_tools": ["yandex_generative_search"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["YANDEX_API_KEY", "YANDEX_FOLDER_ID"]}}, {"name": "yandex_calendar", "repo": "https://github.com/akinfold/hermes-yandex-calendar", "sha": "cad2a6b8e1cad82753b9f57d4f388645210702a0", "subdir": "hermes_yandex_calendar", "title": "Yandex Calendar", "description": "List, create, update, RSVP to, move and delete Yandex Calendar events over CalDAV, with attendees, busy status and several calendars. Disclosure \u2014 sends every request to caldav.yandex.ru, or to the HTTPS URL in YANDEX_CALENDAR_BASE_URL if you set one, with your YANDEX_CALENDAR_LOGIN and YANDEX_CALENDAR_APP_PASSWORD read through Hermes; all seven tools, delete included, are offered unless YANDEX_CALENDAR_ACTIONS narrows them; the tools act as your Yandex account, so adding attendees makes Yandex email each of them an invitation from you, and changing, answering, moving or deleting a meeting may notify the people on it; delete removes the event from the server and the plugin keeps no copy; event text written by other people, such as whoever invites you, reaches the agent as tool output; no other endpoint, no telemetry, no file or shell access, no background process. Independent community plugin, not affiliated with Yandex.", "maintainer": "akinfold", "tier": "community", "category": "tools", "requires_hermes": ">=0.21.5", "version": "0.6.4", "docs_url": "https://github.com/akinfold/hermes-yandex-calendar#readme", "readme": true, "platforms": [], "known_issues": ["Every tool is offered by default, yandex_calendar_delete_event included. Set YANDEX_CALENDAR_ACTIONS to register fewer (read, write, delete, all or single actions, comma-separated; read is the README's advice for a new setup), then restart Hermes", "The tools act as your Yandex account: adding attendees, to a new event or an existing one, makes Yandex email each of them an invitation from you, and changing, answering, moving or deleting a meeting may notify the people on it", "Recurring events are not expanded: a series is listed as stored, with the times of its first occurrence, and one with modified occurrences can be moved or deleted but not edited or answered. A listing over 2 MiB of XML is refused with a request for a shorter range, and a recurring series counts in full", "Read-only calendars such as holidays and birthdays accept a new event without storing it, and yandex_calendar_create_event still reports success: keep them out with YANDEX_CALENDAR_CALENDARS"], "capabilities": {"provides_tools": ["yandex_calendar_list_calendars", "yandex_calendar_list_events", "yandex_calendar_create_event", "yandex_calendar_update_event", "yandex_calendar_respond_event", "yandex_calendar_move_event", "yandex_calendar_delete_event"], "provides_hooks": [], "provides_middleware": [], "requires_env": ["YANDEX_CALENDAR_LOGIN", "YANDEX_CALENDAR_APP_PASSWORD"]}}, {"name": "yantrikdb-hermes-dashboard", "repo": "https://github.com/wysie/yantrikdb-hermes-dashboard", "sha": "30e8fa249a28bef9cb38e62beaa98e38303a8961", "description": "Local-only YantrikDB dashboard for Hermes Agent memory operations", "maintainer": "wysie", "tier": "community", "category": "desktop", "docs_url": "https://github.com/wysie/yantrikdb-hermes-dashboard#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "yantrikdb", "repo": "https://github.com/yantrikos/yantrikdb-hermes-plugin", "sha": "7b22578ada5bf68512461cce4765f81633291aa8", "version": "0.27.0", "description": "Persistent memory for Hermes. Canonicalizes duplicate memories, surfaces contradictions between structured or recognized single-valued claims for review, and returns a why_retrieved reason list with every recall. Embedded by default: no server, no token, no GPU. Optional HTTP backend for HA clusters; pluggable embedders (bundled potion-2M default).", "maintainer": "yantrikos", "tier": "community", "category": "memory", "docs_url": "https://github.com/yantrikos/yantrikdb-hermes-plugin#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "yolo-auto", "repo": "https://github.com/yolo-auto-org/hermes-provider-yolo-auto", "sha": "e81ef7c28cf79e8664cac6634e0e6bafb28cad3a", "subdir": "yolo-auto", "description": "Yolo-Auto: flat-rate OpenAI-compatible API with plan-filtered live model discovery.", "maintainer": "yolo-auto-org", "tier": "community", "category": "models", "docs_url": "https://github.com/yolo-auto-org/hermes-provider-yolo-auto#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["YOLO_AUTO_API_KEY", "YOLO_AUTO_BASE_URL"]}}, {"name": "you", "repo": "https://github.com/youdotcom-oss/agent-skills", "sha": "08f3d80e7ca9518ccc64b38b365a78cc4a762691", "description": "You.com skills for live web search, URL content extraction, cited research, finance research, and integration discovery via the You.com MCP servers (api.you.com). Portable Agent Plugins v1 package (mcp.json + skills/, five skills bundled); auth via YDC_API_KEY, OAuth, or MPP/x402 \u2014 the free profile works keyless.", "maintainer": "youdotcom-oss", "tier": "community", "category": "web", "requires_hermes": ">=0.20", "docs_url": "https://github.com/youdotcom-oss/agent-skills#readme", "version": "0.6.0", "image": "https://raw.githubusercontent.com/youdotcom-oss/agent-skills/08f3d80e7ca9518ccc64b38b365a78cc4a762691/assets/logo.png", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "youtube-dock", "repo": "https://github.com/metamindedu/hermes-youtube-dock", "sha": "31d2635ed1ef49250dc89a5707281a5fa66dd76e", "title": "YouTube Dock", "description": "Open your signed-in YouTube Home recommendations and Shorts in the existing Hermes Desktop Browser beside your conversation, without pasting video URLs or launching an external browser. Desktop-only SDK launcher; no agent tools, hooks, middleware or API keys. Disclosure \u2014 explicit user clicks load YouTube and its normal service/CDN requests in the native Browser; this plugin does not read credentials, cookies, recommendations or watch history. No telemetry, shell commands, backend service or self-updater. Uses the native preview toggle (Hide for an already-open destination), not a dedicated PIP player.", "maintainer": "metamindedu", "tier": "community", "category": "desktop", "requires_hermes": ">=0.22.2", "version": "1.1.0", "docs_url": "https://github.com/metamindedu/hermes-youtube-dock", "screenshots": ["https://raw.githubusercontent.com/metamindedu/hermes-youtube-dock/31d2635ed1ef49250dc89a5707281a5fa66dd76e/docs/menu.png"], "readme": true, "platforms": [], "known_issues": ["v1.1.0 removes the rejected manual-setup beta completely. One-click Open preview/Hide is the only workflow; workspace pinning remains manual.", "Activation attempts to remove only the obsolete manualPinGuide preference through plugin-scoped SDK storage. No old-value reads, replacement settings or clipboard access remain.", "The host may reuse an existing Browser; pinning is visibility, not exclusive reservation. Native Windows Home/Shorts opening was checked; no fresh cross-platform, restart or long-running player certification is claimed.", "Dedicated picture-in-picture is not included; uses the existing docked Browser.", "Google sign-in and playback restrictions still apply; no browser-cookie import.", "Original 1.0.0 launcher: Windows 11/Desktop 0.22.2 manually verified; macOS/Linux playback not manually tested."], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": []}}, {"name": "zalo-platform", "repo": "https://github.com/moken627-hub/hermes-plugin-zalo", "sha": "5a989368d0877c930e76fcc75ea125e7af7ea872", "description": "Zalo Bot Platform gateway adapter for Hermes Agent \u2014 relays messages between Zalo DMs/groups and the agent over the official Bot API (bot-api.zaloplatforms.com), long-polling or webhook mode. Adds slash commands and moderation. Zero extra dependencies (uses httpx, already a Hermes dependency). Production-tested on multiple Vietnamese deployments. Disclosure \u2014 connects to the third-party Zalo Bot API (bot-api.zaloplatforms.com) with your bot token; long-polling by default, or opt-in webhook mode with a listener on 127.0.0.1 by default that checks the X-Bot-Api-Secret-Token header; the setup wizard writes ZALO_* values to ~/.hermes/.env; group chat history is stored locally under <HERMES_HOME>/zalo-history.", "maintainer": "moken627-hub", "tier": "community", "category": "platform", "requires_hermes": ">=0.19", "docs_url": "https://github.com/moken627-hub/hermes-plugin-zalo#readme", "version": "2.1.3", "platforms": [], "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ZALO_BOT_TOKEN"]}}, {"name": "zerosignal", "repo": "https://github.com/TxnLab/hermes-zerosignal-provider", "sha": "ce1ba1f1603b4f191d3cd1aad284879df51a9f4a", "version": "0.1.0", "description": "ZeroSignal \u2014 private, pay-per-request inference through the local zs-proxy; no API key, your wallet is the credential.", "maintainer": "TxnLab", "tier": "community", "category": "models", "requires_hermes": ">=0.21", "docs_url": "https://github.com/TxnLab/hermes-zerosignal-provider#readme", "capabilities": {"provides_tools": [], "provides_hooks": [], "provides_middleware": [], "requires_env": ["ZEROSIGNAL_API_KEY"]}}], "removed": [{"name": "or-picker", "reason": "Folded into openrouter-picker. Installing the provider alone left the picker broken. Install openrouter-picker.", "date": "2026-09-28"}]}