All plugins

hermes-maps

A live map you and Hermes share, docked beside the chat. Hermes plots places it finds on the web with real coordinates, flies the camera, drops pins with a note and source link, and draws routes. You click a pin or circle an area and Hermes receives what you picked. Two looks: a clean flat map and a cinematic globe. No keys and no cost. Disclosure — viewing the map sends tile requests (your IP address and the area viewed) to tiles.openfreemap.org; a bundled world outline is the offline fallback. Plotting and place search send place names and search text (and the visible map bounds for a visible-area search) from this machine to photon.komoot.io, a free service with no uptime guarantee; results are kept in memory for an hour. Google Maps links and a pin's source link open in the browser only when clicked. Selections you send become chat messages and reach your model provider. Pins, routes, camera and selections are stored in Hermes plugin storage on this machine. No background processes, no telemetry, no credentials, no self-update.

tuancookiez-hubDesktopv0.1.0Updated 23 hours ago

About

A live map you and Hermes share, docked beside the chat. Hermes plots places it finds on the web with real coordinates, flies the camera, drops pins with a note and source link, and draws routes. You click a pin or circle an area and Hermes receives what you picked. Two looks: a clean flat map and a cinematic globe. No keys and no cost. Disclosure — viewing the map sends tile requests (your IP address and the area viewed) to tiles.openfreemap.org; a bundled world outline is the offline fallback. Plotting and place search send place names and search text (and the visible map bounds for a visible-area search) from this machine to photon.komoot.io, a free service with no uptime guarantee; results are kept in memory for an hour. Google Maps links and a pin's source link open in the browser only when clicked. Selections you send become chat messages and reach your model provider. Pins, routes, camera and selections are stored in Hermes plugin storage on this machine. No background processes, no telemetry, no credentials, no self-update.

Hermes Maps

A live map you and Hermes share. Hermes plots what it finds on the web, moves the camera, drops pins and draws routes. You click a point or circle an area, and Hermes receives what you picked.

Hermes Maps beside the chat

The map docks beside the chat and survives closing the page, so you can work on it with Hermes over several turns.

What Hermes can do

| Tool | What it does |
|---|---|
| map_open | Shows the map, in simple or cinematic mode |
| map_fly_to | Moves the camera to a location, with zoom, tilt and rotation |
| map_add_pins | Drops animated pins, one after another if asked. A pin can carry a note and a source link |
| map_draw_route | Draws a line through pins or coordinates in travel order, and reports its length |
| map_clear | Removes pins, routes, the selection, or all of them |
| map_get_state | Reads the camera, visible area, pins, routes and your latest selection |
| map_plot_places | Plots places found by web search: looks up each one, drops its pin with a note and source, and moves the camera |
| map_search_places | Finds real places and their coordinates, anywhere or in the visible area |
| map_request_selection | Asks you to click a point or circle an area |

Each tool reports what the page confirmed: applied, applied_off_screen (done, but the map is hidden) or queued (no map page has it yet).

What you can do

  • Choose Point or Area on the map, then pick a spot or drag around an area.
  • Click a pin to select it. Its card shows Hermes's note and a link to the source page, when Hermes gave them.
  • Type a question on the selection card and send it to the chat.
  • Open the selected spot in Google Maps from the selection card.
  • Switch between Simple, a clean flat map, and Cinematic, a dark globe with long camera moves and pulsing pins.

| | |
|---|---|
| A pin's card with its note | Circling an area |
| A route through four pins | The cinematic globe |

When Hermes asks for a selection, finishing it sends it to the chat straight away. Otherwise nothing is sent until you press Send.

Finding places

Ask something like "find the best ramen in Tokyo and put it on the map". Hermes searches with its own web_search tool, then passes the names and locations to map_plot_places.

Each place takes several seconds to look up, so pins land one at a time. The screenshots here come from the demo recording, which shortens those waits. A place gets a pin only when both its name and its location match. Anything else comes back to Hermes as not placed, because a missing pin is better than a wrong one.

A route from map_draw_route is a straight line between stops, not a road route, and its length is the straight-line total.

map_plot_places and map_search_places use OpenStreetMap data and need no key. Every result includes a Google Maps link. The data has no ratings or opening hours, and it can miss very new businesses.

Hermes Maps doesn't use Google Places. Google's Maps Service Terms forbid using Places content with a non-Google map, and this map is MapLibre. Google Maps links open Google's own site and bring no Google content back.

Install

Hermes Desktop 0.22.7 or later is required.

hermes plugins install hermes-maps --enable

Then:

  1. In Hermes Desktop, open Capabilities → Plugins, press Rescan and turn on Hermes Maps.
  2. Start a new chat so Hermes picks up the tools.
  3. Ask for something, such as "find the best ramen in Tokyo and put it on the map".

If the map says its backend is not running, restart Hermes Desktop once. To install from this repository instead, use hermes plugins install tuancookiez-hub/hermes-maps.

Hermes needs its own web toolset enabled to search the web. The map tools work without it.

Data, network and cost

  • Network: the page loads map styles, tiles and fonts from tiles.openfreemap.org. Those requests reveal your IP address and the area you view. No key or account is needed.
  • Place lookup: when Hermes plots or searches, this machine sends the place names and search text to photon.komoot.io. A visible-area search also sends the map's bounds. No key or account is needed. Requests are at least a second apart, and results are kept in memory for an hour. Komoot doesn't guarantee availability and throttles heavy use, so a search can fail.
  • Google Maps and source links: these open in your browser only when you click one, and the site sees that request as usual. A source link is whatever web address Hermes attached to the pin; only http and https links are accepted.
  • Offline: if OpenFreeMap can't be reached in 5 seconds, the map shows a bundled world outline. It has no labels or streets.
  • Web search: Hermes uses your own web search setup, and any cost or data sharing there is separate from this plugin.
  • Your selections: a selection you send becomes a chat message, so it reaches your model provider like anything you type.
  • Stored data: pins, routes, camera, mode and your latest selection are kept in plugin-data/hermes-maps/data.db inside your Hermes home. Nothing is stored in the install folder.
  • Background work: there are no background processes. The page checks for updates every 3 seconds, only while a map is mounted.
  • Cost: none. OpenFreeMap may discontinue its service at any time without notice, and the offline outline remains if it does.

Hermes Maps collects no telemetry, reads no credential files and doesn't update itself.

Develop

npm ci --prefix desktop-src
npm run build --prefix desktop-src
npm test --prefix desktop-src
pytest

desktop/plugin.js is generated from desktop-src/, and it bundles MapLibre GL JS 5.24.0. To rebuild the offline outline, run npm run world --prefix desktop-src.

Credits

License

MIT

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

More by tuancookiez-hub

8 plugins by tuancookiez-hub in the catalog.

tuancookiez-hubhyatlasHyAtlas 5 — 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 — 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.Communitymemory31tuancookiez-hubenhance-promptA sparkle beside Send that rewrites the composer draft in place without sending it, deepening it into a clarifier, a task list, then a phased plan on further clicks, with a one-click discard back to the original. Also registers the `/enhance` slash command and the `enhance_prompt` tool for the same rewrite from the agent. Draft read and write go through `host.composer`, so `@file` and `/command` chips survive. Disclosure — every click runs one stateless `llm.oneshot` call on your own gateway with the focused chat's model (the auxiliary title model when no chat is focused), followed by a second short call to score the result, so it spends your model credits. It is not an agent turn: no tools run and nothing is written to a session you cannot see. It overrides no model, sends nothing to a third party, never sends the composer message, and carries no telemetry, no credentials and no self-update.CommunityDesktop app6tuancookiez-hubdiscord-tpsShow live tokens-per-second and the active model on your Discord bot's presence. Disclosure — 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.Communityplatform1tuancookiez-hubmodel-explainerA Models page for Hermes Desktop built around your own model picker: choose a model to see its Hermes Index score, cost per task, context and output limits, price, abilities and your own measured speed and spend, with a score-against-cost frontier chart, and compare up to four side by side. Every value cites a source and date. Disclosure — one GET of a public JSON data file from the author's GitHub repo (raw.githubusercontent.com/tuancookiez-hub/hermes-model-explainer, main branch, so its contents can change after this pin), at most daily and only when the page opens (can be turned off; the bundled copy works offline; the file is validated data, never code); reads model.options and the focused session's model and usage figures; writes plugin storage, and switches the chat model only when the user presses Use this model (the same config.set request as the built-in picker, scoped to the open chat). Desktop only: no agent tools, hooks, middleware or env vars.Communitymodels1

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section