Skip to content

feat(memory): Graphnosis provider UI, MCP install, and onboarding#856

Open
nehloo wants to merge 2 commits into
fathah:mainfrom
nehloo-interactive:feat/graphnosis-desktop-ui
Open

feat(memory): Graphnosis provider UI, MCP install, and onboarding#856
nehloo wants to merge 2 commits into
fathah:mainfrom
nehloo-interactive:feat/graphnosis-desktop-ui

Conversation

@nehloo

@nehloo nehloo commented Jul 16, 2026

Copy link
Copy Markdown

Summary

Adds optional UI surfaces for connecting Graphnosis — local, encrypted, on-device memory — to Hermes Desktop:

  • Memory Providers screen — description + download link for the graphnosis provider
  • Capabilities → MCP Servers — a one-click "Install Graphnosis MCP" card that registers the stdio server directly via addMcpServer (npx -y @graphnosis/mcp-relay ${HOME}/.graphnosis/mcp.sock)
  • Welcome — a "Pair with Graphnosis" onboarding card linking to the download
  • Shared styles for the new cards

No coupling to hermes-agent

The memory provider ships as a standalone plugin (nehloo-interactive/hermes-graphnosis), which Hermes Desktop discovers automatically since it runs Hermes Agent underneath. No dependency on any in-tree hermes-agent change — the MCP install writes the server config directly rather than calling a catalog preset.

Test plan

  • Memory screen shows the Graphnosis provider once the plugin is installed
  • "Install Graphnosis MCP" registers the server on a stock Hermes Agent (no preset)
  • External links open graphnosis.com/download
  • Welcome onboarding card renders

🤖 Generated with Claude Code

Add English copy and download links for the Graphnosis memory provider, a
Capabilities → MCP Servers "Install Graphnosis MCP" card that registers the
stdio server directly (npx @graphnosis/mcp-relay) via addMcpServer, and a
Welcome onboarding card pointing to graphnosis.com.

The memory provider itself ships as the standalone hermes-graphnosis plugin
(github.com/nehloo-interactive/hermes-graphnosis); Hermes Desktop discovers it
automatically since it runs Hermes Agent underneath. No dependency on any
in-tree hermes-agent change.
@nehloo

nehloo commented Jul 16, 2026

Copy link
Copy Markdown
Author

Supersedes #763. That PR used an earlier approach — a hermes-agent catalog-preset install (hermes mcp install graphnosis) that no longer exists — and was ~113 commits behind main.

This PR rebuilds the same UI on current main and registers the MCP server directly via addMcpServer (npx -y @graphnosis/mcp-relay ${HOME}/.graphnosis/mcp.sock), so there's no dependency on any in-tree hermes-agent change. The memory provider itself ships as a standalone plugin (nehloo-interactive/hermes-graphnosis), which Hermes Desktop discovers automatically since it runs Hermes Agent underneath.

@greptile-apps

greptile-apps Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds Graphnosis integration to Hermes Desktop. The main changes are:

  • Local and remote memory-provider discovery metadata.
  • A one-click Graphnosis MCP installation card.
  • Graphnosis download links on the Memory, Tools, and Welcome screens.
  • English translations and shared card styles.

Confidence Score: 5/5

The latest provider-discovery fix looks safe to merge.

  • Graphnosis now maps to its description key in both local and SSH discovery.
  • No distinct blocking issue was found in the updated fix.

Important Files Changed

Filename Overview
src/main/installer.ts Adds Graphnosis metadata to local memory-provider discovery.
src/main/ssh-remote.ts Adds matching Graphnosis metadata to SSH memory-provider discovery.
src/renderer/src/screens/Tools/Tools.tsx Adds the Graphnosis MCP installation and download actions.
src/renderer/src/screens/Memory/MemoryProviders.tsx Adds the Graphnosis provider download URL.
src/renderer/src/screens/Welcome/Welcome.tsx Adds the Graphnosis onboarding and download card.
src/renderer/src/assets/main.css Adds styles for the Graphnosis onboarding and MCP cards.
src/shared/i18n/locales/en/memory.ts Adds the Graphnosis memory-provider description.
src/shared/i18n/locales/en/tools.ts Adds labels for the Graphnosis MCP installation flow.
src/shared/i18n/locales/en/welcome.ts Adds copy for Graphnosis onboarding.

Reviews (2): Last reviewed commit: "fix(memory): register graphnosis in the ..." | Re-trigger Greptile

name: "graphnosis",
type: "stdio",
command: "npx",
args: ["-y", "@graphnosis/mcp-relay", "${HOME}/.graphnosis/mcp.sock"],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Home Variable Remains Literal

The MCP config writer preserves ${HOME}/.graphnosis/mcp.sock as a literal argv value, and stdio servers launched directly do not receive shell expansion. Unless the relay explicitly expands this syntax itself, the installed server cannot find the user's socket even though installation reports success; the value is also not portable to Windows.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hermes-agent interpolates ${VAR} placeholders in MCP server config before spawn (tools/mcp_tool.py, "Recursively resolve ${VAR} placeholders"), so on macOS/Linux ${HOME} resolves to the real socket path — this matches the convention the other Graphnosis surfaces already use (the relay's own README and the prior catalog preset). You're right that it's not robust on Windows, where HOME is typically unset and the placeholder would stay literal. That's a pre-existing, cross-surface gap rather than something specific to this PR; the proper fix is to have @graphnosis/mcp-relay default to os.homedir()/.graphnosis/mcp.sock when no path arg is given, which I'm tracking on the relay package. Keeping ${HOME} here for consistency with the existing providers.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update: the relay fix has landed. @graphnosis/mcp-relay@1.0.3 (published) now expands a leading ~ and ${HOME}/$HOME itself via os.homedir() (and defaults to ~/.graphnosis/mcp.sock when no path arg is given), so the socket path resolves correctly even when the host spawns the server without a shell — including on Windows where HOME is unset. The ${HOME} value written here is therefore portable once users are on relay ≥1.0.3.

Comment on lines +61 to +62
graphnosis:
"Local encrypted engram graph — auto-prefetch, recall, remember. Requires Graphnosis app (no API key)",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Local Discovery Misses Description Key

When a local graphnosis plugin directory is discovered, the provider metadata falls back to the bare name because Graphnosis is absent from the known-provider map. MemoryProviders therefore looks up t("graphnosis") instead of this new memory.providers.graphnosis key, so the card displays only graphnosis rather than the added description.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — fixed in 847ed5b. graphnosis was missing from the KNOWN_PROVIDERS map in src/main/installer.ts (and the remote-mode map in src/main/ssh-remote.ts), so discovery fell back to the bare name and the card looked up t("graphnosis") instead of this key. Added graphnosis: { description: "memory.providers.graphnosis", envVars: [] } to both.

Local (installer.ts) and remote (ssh-remote.ts) memory-provider discovery
fell back to the bare provider name for anything absent from KNOWN_PROVIDERS,
so the Memory screen rendered t("graphnosis") — a literal "graphnosis" —
instead of the memory.providers.graphnosis description. Add the entry so the
description key resolves. (Flagged by review.)
nehloo added a commit to nehloo-interactive/hermes-graphnosis that referenced this pull request Jul 16, 2026
Adds patches/memory-provider-known-map.patch (installer.ts + ssh-remote.ts):
without it, local/remote memory-provider discovery falls back to the bare
provider name, so the Memory screen renders t("graphnosis") instead of the
memory.providers.graphnosis description. Mirrors fathah/hermes-desktop#856
follow-up commit 847ed5b. (Flagged by automated review on the PR.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
nehloo added a commit to nehloo-interactive/graphnosis-app that referenced this pull request Jul 16, 2026
The stdio relay read process.argv[2] raw — path was required and never
expanded. Some MCP hosts spawn stdio servers without a shell and don't
interpolate ${HOME}; notably on Windows HOME is usually unset, so
${HOME}/.graphnosis/mcp.sock reached the relay as a literal, unusable path.

Now the socket-path arg is optional (defaults to ~/.graphnosis/mcp.sock), and
a provided path has a leading ~ and ${HOME}/$HOME expanded via os.homedir()
(cross-platform). Fixes the Windows gap flagged on fathah/hermes-desktop#856 —
consumers can keep passing ${HOME}/... or omit the arg entirely. README
updated; @graphnosis/mcp-relay bumped 1.0.2 -> 1.0.3.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant