All plugins

hermes-session-diff

Persistent session file diffs, run comparisons, and individual edit history in Hermes Desktop.

Adolanium4DesktopUpdated 18 days ago

Session Diff

See what changed. Even after the session ends.

A file-by-file record of your Hermes runs, with quick diffs and individual edit history. Changes stay available after a restart, including edits that were later undone.

POWERED BY HERMES AGENT  ·  COMMUNITY PLUGIN  ·  VERSION 0.1.0

See what it does  ·  Watch the demo  ·  Install  ·  Capture limits

Session changes showing a restored file and its intermediate edit in Hermes Desktop

Powered by Hermes

Session Diff uses the existing Hermes Agent hooks, tool middleware, and Desktop plugin SDK. The recorder runs on your gateway; the viewer follows your Desktop theme. No fork, upstream patch, extra server, API key, or model call. The Desktop component is already built.

Every run in one pane

| | |
| --- | --- |
| Find the filesFollow the focused chat, select a recorded session, or filter the file list. Added, modified, deleted, and restored files have distinct labels. | Read the diffSee line numbers, additions, and deletions. Copy the displayed patch when you need it elsewhere. |
| Trace an editOpen individual captured operations. A file changed and restored still has a history, even when its net diff is empty. | Choose the scopeCompare the latest run, an earlier run, or the whole session. The journal survives commits and app restarts. |

The viewer is read-only. It does not stage, commit, revert, or edit your files.

Hermes already includes inline tool diffs, a changed-files card, and Git Review. This plugin adds a persistent journal across runs, intermediate versions, and bounded capture around terminal commands.

Install

Use Hermes Desktop 0.21.3 or newer with combined-package support. Install on the machine running your gateway:

hermes plugins install Adolanium/hermes-session-diff
hermes plugins enable hermes-session-diff

Restart the gateway. In Desktop, rescan or reload plugins, then enable Session changes under Capabilities → Plugins. Open the right pane, or choose Open session changes in the command palette.

Both components matter: the Agent component records changes, and the Desktop component displays them. Recording begins with new tool calls after the recorder is enabled.

Prefer a download? Extract the release ZIP into your profile's $HERMES_HOME/plugins/ directory, then enable the plugin and restart as above. See the reference for profile paths and remote gateways.

Try it

  1. Start a chat in an empty folder and ask Hermes to create a small text file.
  2. Run another prompt that edits the file, then restores it in a separate tool call.
  3. In Session changes, select Latest run. The file is marked Restored.
  4. Open Edit history to see both edits. Restart Hermes and reopen the session; the history is still there.

The 60-second demo shows this in the real Windows app, including the restart. Cursor animation and zooms are added in the video; waiting time is shortened.

Stored locally

The journal lives at $HERMES_HOME/plugin-data/hermes-session-diff/changes.sqlite3, with 30-day retention by default. The plugin adds no telemetry, external storage service, or model requests. A remote Desktop viewer reads the journal through your gateway's authenticated connection.

Snapshots contain file contents. Common credential filenames, ignored dependency directories, binary files, and oversized text are excluded or recorded as metadata only. These filters cannot detect every secret embedded in an ordinary source file. See storage and limits for exact defaults and configuration.

Capture covers explicit file tools and bounded workspace changes observed around local terminal calls. Concurrent edits may be included; writes outside the captured workspace or after a tool returns may be missed. Docker and SSH terminal execution backends are not supported for content capture. A remote gateway using its own local terminal is supported.

Development

npm ci
npm run build
npm test
python -m unittest discover -s tests -p 'test_*.py'
python scripts/package.py

See integration and browser checks for tests using real Hermes tools and the viewer's history, error recovery, and theme contrast.

Updates use Hermes's plugin update commands. Catalog installs, once admitted, follow reviewed commit pins. This plugin never downloads or replaces its own code.

MIT licensed. Independent community plugin; not affiliated with or endorsed by Nous Research.

README from the reviewed commit 9ed3bf2; it updates when the author re-pins.

More by Adolanium

24 plugins by Adolanium in the catalog.

AdolaniumgadgetTalk 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 — 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.Communityplatform466Adolaniumhermes-resetwatchTrack subscription quotas and reset times in Hermes Desktop. Disclosure — 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 (through Hermes's get_secret helper, else read directly), 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 (the credential pool through Hermes's read_credential_pool helper, else auth.json directly, 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. For Codex, a 401 or 403 is retried once with another saved login for the same account. 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 (honored only for https grok.com / x.ai hosts), 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.CommunityDesktop app81Adolaniumhermes-rssRead RSS and Atom feeds and discuss articles in Hermes Desktop. Disclosure — 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.CommunityDesktop app63Adolaniumhermes-tailscaleBrowse Tailscale devices and connect to remote Hermes instances in Hermes Desktop.CommunityDesktop app60