Skip to main content

hermes-cloud-file-manager

❖ Communityv0.3.8★ 27

Cloud Files for Hermes Desktop — browse, search, create folders and bulk-upload files and whole folders to the machine your agent runs on, read and edit its Markdown and text files (view first; nothing is written until you review the line diff and press Save), 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.

Open in Hermes Desktop
hermes plugins install hermes-cloud-file-manager

Screenshots

README

From the reviewed commit 9ee6c10 ↗; it updates when the author re-pins.

Cloud File Manager for Hermes

Cloud File Manager: browse, upload, attach and edit files on the machine your agent runs on, and import from Google Drive

When your Hermes agent runs somewhere else — a VPS, a home server, a hosted agent — its files live on that machine, not yours. Cloud File Manager puts that machine's files one click away in Hermes Desktop.

  • Cloud Files in the sidebar: browse the agent's folders, search by name, create folders, and upload files or whole folders by drag-and-drop or from the toolbar. Folder structure is kept, large files go up in chunks (a brief network drop is retried automatically; a file that still fails gets a Retry button), and uploads never overwrite — a name clash keeps both files.
  • Open and edit Markdown and text files: view first, edit on purpose, review the changes, then save. Nothing is saved until you choose Save.
  • Cloud in the chat + menu: pick files already on the agent's machine and drop their locations into your message. Nothing is uploaded again and nothing is copied into the chat; the agent opens the files where they are with its own tools.
  • Google Drive (optional): if the agent is signed in to Google through its google-workspace skill, browse and search its Drive and import files onto the agent's machine, from the page or from + → Google Drive.

The Cloud Files page

Uploading a folder

Requirements

  • Hermes 0.21.5 or newer with Hermes Desktop, connected to an agent (local, remote with a token, or remote with sign-in).
  • The agent's terminal runs locally on the gateway machine (terminal.backend: local, the default). Agents that run their tools in Docker, over SSH or in another sandbox see a different filesystem; the tab says so instead of showing the wrong files.

Install

Cloud File Manager has two halves in one package: a small API that runs on the agent's gateway and the screens that run in Hermes Desktop.

Cloud File Manager is in the Hermes plugin catalog. Installing from the catalog gets the reviewed release, pinned to its commit.

From Hermes Desktop (recommended):

  1. Open Capabilities → Plugins, choose Browse under Plugin catalog, find Cloud File Manager, and choose + Add to this Agent. Desktop installs the agent half into the connected agent and the desktop half on this computer.
  2. On Hermes 0.21.6 or later, the agent picks the plugin up by itself within about a minute. On Hermes 0.21.5 and on evaOS, restart the agent's gateway once.
  3. In Capabilities → Plugins, open Cloud File Manager and switch on Desktop. Desktop plugins stay off until you turn them on.

The Cloud Files row appears in the sidebar, and Cloud appears in the chat + menu.

From the command line on the gateway machine (Hermes 0.21.6 or later installs the catalog release by name):

hermes plugins install hermes-cloud-file-manager --no-enable
hermes plugins enable hermes-cloud-file-manager
# on Hermes 0.21.5, restart the gateway (or your hermes dashboard service) so the API is mounted

Then add the desktop half on each computer that uses it: in Capabilities → Plugins, choose + Add to this Agent on the catalog entry, and switch on Desktop on the plugin's card.

Install from Git (Capabilities → Plugins → Install from Git with https://github.com/electricsheephq/hermes-cloud-file-manager, or hermes plugins install electricsheephq/hermes-cloud-file-manager) also works. It follows the repository's main branch instead of the reviewed catalog release.

Updating: a catalog install offers Update to … on the plugin's card in Capabilities → Plugins when a new release is pinned. After an update, restart the agent's gateway and reopen Hermes.

The sidebar row and the + → Cloud entry only appear for agents that have the gateway half enabled, so installing the desktop half is harmless for your other agents.

Using it

  • Upload: drag files or folders anywhere onto the Cloud Files page, or use Upload files / Upload folder. Progress, retries and failures show in the drawer at the bottom; the batch keeps going if you leave the page. Switching to another agent mid-upload pauses the batch until you switch back — files never land on the wrong machine.

  • Find: type in Search files (name contains, or a glob such as *.pdf) to search the folder you are in and its subfolders. Search skips .git, node_modules, __pycache__, .venv, venv, .tox, .mypy_cache and .cache folders. On a very large folder, search stops after 5 seconds and says that some matches may be missing; open a subfolder to search inside it.

  • Read and edit Markdown: double-click a .md, .markdown or .txt file (or select it and choose Open). It opens read-only, rendered like chat. Choose Edit to change the source, Changes to see your edits line by line, and Review & save to check the diff before Save. Nothing is written until you press Save in that review:

    • no autosave, and ⌘S only opens the review;
    • closing or moving away with unsaved edits asks first;
    • if you go to another page, your unsaved draft is kept in memory until you come back. It is lost if Hermes quits.

    If the file changed on the agent's machine after you opened it (for example, the agent edited it), Save is refused. You can then compare with their version and save knowingly, or copy your text. An open file stays tied to the agent you opened it on; switch back to that agent to save.

A report open in the rendered view

Reviewing the change before saving

  • Share with the agent: select files and Copy path, or in any chat press + → Cloud, tick files in any folders, and Insert locations. The message gets a short list of absolute paths the agent can open. If you switch chats or agents while the picker is open, it offers Copy locations instead of inserting, so locations don't land in a chat you switched to.

Picking files for a chat

The agent opens the inserted locations with its own tools

Google Drive (optional)

If the agent can already use Google Drive through its google-workspace skill, Cloud File Manager can bring files from that Drive onto the agent's machine:

  • On the Cloud Files page: choose Google Drive in the folder menu. Browse or search the agent's Drive, tick files, and choose Import to Cloud Files.
  • In a chat: choose + → Google Drive, tick files, and choose Import and insert. The files are imported, then their locations go into your message, exactly like + → Cloud.

Google Drive as a source on the Cloud Files page

+ → Google Drive imports and inserts

Imports land in uploads/drive/ in the first shown folder, one file at a time. Google Docs and Slides arrive as PDF, Sheets as CSV and Drawings as PNG; other files arrive as they are. A name clash keeps both files, and max_file_mb applies.

Setup: sign the agent in to Google through its google-workspace skill, with Drive access. Follow the skill's own setup, or ask the agent to do it. Within about a minute, Google Drive appears for that agent. For agents without it, nothing extra is shown.

What it can and can't do:

  • It is read-only toward Google Drive. It only lists, searches and downloads; it never uploads, edits, shares or deletes anything there.
  • It works through the agent's own skill. Cloud File Manager never reads the Google token and never installs anything.
  • It runs the skill's scripts from skills/productivity/google-workspace/scripts in the agent's Hermes home, else from the copy bundled with Hermes. It passes them only the environment they need (paths, locale, proxy and CA-bundle settings), never the agent's keys or tokens.
  • It uses the Google account the agent is signed in to, so whoever can use the agent can import from that Drive.

Settings

All optional. Change them in Hermes Desktop: Settings → Plugins → Cloud File Manager on Hermes 0.21.6 or later, or the plugin's row in Capabilities → Plugins on Hermes 0.21.5 and evaOS. Changes apply on the next request; no restart is needed.

Without Desktop, set them under plugins.entries.hermes-cloud-file-manager.settings in the agent's config.yaml:

Setting Label in Desktop Default Meaning
roots Folders to show [] Absolute folders to show. Empty means the agent's own working folder (terminal.cwd), else the gateway user's home. If none of the listed folders can be shown, Cloud Files says so and links to these settings.
folder_notes Folder notes {} A short note per top-level folder, e.g. {"docs": "Imported into the agent's knowledge base"}.
max_file_mb Largest upload (MiB) 100 Largest single file accepted, in MiB. Bigger files are refused before anything is sent. Decimals are rounded down; a value under 1 falls back to 100.

Security model

  • The plugin adds no login, tokens or permission layer of its own. Desktop reaches it through the gateway's existing authenticated plugin channel, so it is exactly as private as your gateway.
  • Every path is confined to the configured folders.
    • Names are checked for traversal and non-portable characters.
    • Symlinks that point outside the shown folders are not followed. An upload never writes its final file through a link.
    • A listing may show such a link as not openable, with the link's own size and date. The plugin never opens its target or shows the target's size or date; it only checks where the link points (the target's path and identity).
    • The agent's Hermes home (its settings and API keys) can never be listed, read or written, even when it sits inside a shown folder. The exception is a folder inside it that the agent is set up to work in (roots, terminal.cwd, or the Docker workspace/ folder); see SECURITY.md.
    • When the shown folder is the gateway user's home, hidden top-level entries (.ssh, .config, …) are hidden and refused.
  • Uploads never overwrite, rename or delete existing files. There is no delete in this version. (Stale temporary files and folders with the plugin's reserved .cfm-…part and .cfm-…dir names are cleaned up once they are more than 24 hours old, the next time an upload or Drive import starts in that folder; at most once an hour per folder.)
  • Only Save in the editor overwrites, only the file you opened, and only if it has not changed since you opened it. See SECURITY.md for the accepted race with writers outside this process.
  • Everyone who can use the agent can see its files — the same access the agent itself has.

Found a security problem? See SECURITY.md.

Limits in this version

  • No rename, move or delete (coming later; use the agent or a shell for now).
  • Uploads never overwrite. Only Save in the editor overwrites, only the file you opened, and only if it has not changed since you opened it.
  • Upload folder cannot carry empty folders (a browser limitation); drag-and-drop keeps them.
  • The editor opens .md, .markdown and .txt files up to 1 MB, as UTF-8. A file that mixes line endings is saved with CRLF throughout once edited; the review says so. Images in a rendered file load from their links, as in Hermes's own file preview. Unsaved drafts live in memory only and are lost when Hermes quits.
  • A folder shows 500 items at a time; Load more adds the next 500. A folder with more than 20,000 items lists only the first 20,000; use Search files to find the rest.
  • A file changed in place outside Cloud Files (same name, new size or date) can take up to 5 seconds to show its new size and date. New, removed and renamed items normally show at once.
  • A name that contains a line break can be browsed but not inserted into a chat; the picker says so.
  • Agents whose tools run in Docker, over SSH or in another sandbox are not supported yet.
  • Google Drive is import-only: pick files, not folders, and nothing is ever written back to Drive.

Compatibility

Requires Hermes 0.21.5 or newer, with its Desktop (requires_hermes: ">=0.21.5"). CI checks every change against pinned builds of upstream Hermes Agent and one downstream Desktop fork (see HERMES_*_SHA in .github/workflows/ci.yml). Those pins are bumped deliberately, after the suite passes against the new builds. A weekly run checks the same suite against both repos' newest main, so a breaking change upstream is spotted before it reaches a release.

Uninstall

Open Cloud File Manager in Capabilities → Plugins and choose Uninstall. Or run hermes plugins remove hermes-cloud-file-manager on the gateway machine, then restart the gateway.

On every other computer where you added the desktop half, also remove it there with Uninstall. Uploaded files stay where they are.

Development

npm ci && npm run build && npm test && npm run typecheck   # desktop half
python -m pytest                                           # gateway half (needs fastapi, httpx, pytest)

desktop/plugin.js is generated from src/desktop/ by npm run build and committed; CI fails if it is stale, if it imports anything but the plugin SDK and React, or if either pinned Hermes Desktop loader would refuse it.

License

MIT © Electric Sheep

fish-audio❖ Community★ 124

The official Fish Audio plugin, maintained by Electric Sheep: expressive text-to-speech in 80+ languages, 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 three skills. Disclosure — 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, 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. No telemetry.

Voice
hermes-teammates❖ Community★ 101

Named subagent teammates for Hermes: the operator defines a roster (instructions, toolsets, model), and the agent assigns them work, checks results, steers a running teammate, 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 — adds five tools 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 on the parent's provider credentials; toolsets narrow the parent's tools at toolset granularity only (the file toolset includes write_file and patch), and a teammate with invalid settings refuses to launch. A delegated child cannot start teammates. Steering dispatches delegate_task's steer action with the turn-bound parent, so under plugins.isolation: host every tool except the roster refuses. It keeps a per-profile SQLite run ledger in its plugin-data folder (goals, statuses, clipped summaries; no transcripts or credentials). 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 lane run to keep the claim alive; no network calls, child processes or self-updates of its own.

Automation
plan-mode❖ Community★ 98

Claude Code-style plan mode 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 submits the plan with plan_mode(submit) and you approve it through Hermes' own approval prompt (gateway buttons, the TUI/Desktop card, the CLI panel or /approve); it then implements in the same turn and tracks todo_list progress. Deny keeps planning and the agent revises. When yolo or approvals.mode: off would auto-approve, it asks one clarify question instead (Approve plan rev N / Keep planning), and only that answer approves. By default plans are compact and decision-complete and the agent does not commit unless asked (plan_style, allow_commits and plan_skill settings; plan_style: core keeps the zero-context /plan craft). The default lean profile keeps compact planning short: a brief planning note, at most three targeted questions, and no todo bookkeeping for short plans (plan_profile: classic keeps 0.3.5); on TUI, Desktop and hermes serve the agent writes the plan once, in its reply, and the plugin saves it. Classic CLI enforced on every supported Hermes; gateway, TUI and Desktop from Hermes v2026.9.24 (0.21.5), and refused on older builds. Disclosure — plan-mode does not enforce Codex app-server exec/applyPatch or TUI /background and btw side agents. It reads eight groups of internal Hermes seams for session identity, workspace, profile and skills.inline_shell, each guarded with a documented fallback. It creates .hermes/plans under the session working directory and keeps per-session state in plugin state. It adds a turn note while planning or executing, a ≤200-char system-prompt hint, and a one-line footer to short replies on chat platforms. When you pick "Always" on a plan approval, Hermes core writes a plugin_rule:plan-mode entry to command_allowlist in config.yaml. 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. No network calls, no subprocesses, no self-updater.

Tools
boardstate❖ Community★ 54

A live board the agent builds for you: a Board tab in the Hermes dashboard and a Desktop page where the agent lays out tabs and widgets (notes, markdown, tables, charts, KPI cards, live Hermes data, approvals) through 19 native boardstate_* tools. 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 — spawns a local Node.js ≥20 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.

Desktop
heartbeat2❖ Community★ 28

Wakes and watchers for Hermes agents, maintained by Electric Sheep. 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. v0.1 delivers to messaging-gateway DMs only and needs plugins.entries.heartbeat2.allow_gateway_injection: true. Disclosure — 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.

Automation

← Back to the catalog · catalog built Oct 14, 2026