mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-08-28 05:25:33 +00:00
feat(nova): add hermes plugin instructions (#832)
This commit is contained in:
parent
8405305c50
commit
0638f65bc3
9 changed files with 72 additions and 15 deletions
|
|
@ -95,7 +95,7 @@ It also comes with an agent embedded inside, which we call Nova.
|
|||
|
||||
### Supermemory Plugins
|
||||
|
||||
Supermemory comes built with Plugins for Claude Code, OpenCode and OpenClaw.
|
||||
Supermemory comes built with Plugins for Claude Code, OpenCode, OpenClaw, and Hermes.
|
||||
|
||||
<img width="844" height="484" alt="image" src="https://github.com/user-attachments/assets/ecb879a2-8652-495d-9228-f305a97ba603" />
|
||||
|
||||
|
|
@ -106,6 +106,7 @@ You can find them here:
|
|||
- Openclaw plugin: https://github.com/supermemoryai/openclaw-supermemory
|
||||
- Claude code plugin: https://github.com/supermemoryai/claude-supermemory
|
||||
- OpenCode plugin: https://github.com/supermemoryai/opencode-supermemory
|
||||
- Hermes agent (Supermemory memory provider): https://github.com/NousResearch/hermes-agent
|
||||
|
||||
### MCP - Quick install
|
||||
|
||||
|
|
@ -137,7 +138,7 @@ Memory is scoped with **projects** (container tags) so you can separate work and
|
|||
|
||||
### Supported clients
|
||||
|
||||
**Claude Desktop** · **Cursor** · **Windsurf** · **VS Code** · **Claude Code** · **OpenCode** · **OpenClaw**
|
||||
**Claude Desktop** · **Cursor** · **Windsurf** · **VS Code** · **Claude Code** · **OpenCode** · **OpenClaw** · **Hermes**
|
||||
|
||||
The MCP server is open source — [view the source](https://supermemory.ai/docs/supermemory-mcp/mcp).
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@ import {
|
|||
fullscreenParam,
|
||||
chatParam,
|
||||
integrationParam,
|
||||
pluginsPanelParam,
|
||||
type IntegrationParamValue,
|
||||
} from "@/lib/search-params"
|
||||
|
||||
type DocumentsResponse = z.infer<typeof DocumentsWithMemoriesResponseSchema>
|
||||
|
|
@ -121,7 +123,17 @@ export default function NewPage() {
|
|||
fullscreenParam,
|
||||
)
|
||||
const [isChatOpen, setIsChatOpen] = useQueryState("chat", chatParam)
|
||||
const [, setIntegration] = useQueryState("integration", integrationParam)
|
||||
const [integrationFromUrl, setIntegration] = useQueryState(
|
||||
"integration",
|
||||
integrationParam,
|
||||
)
|
||||
const [pluginsPanelFromUrl] = useQueryState("plugins", pluginsPanelParam)
|
||||
|
||||
useEffect(() => {
|
||||
if (integrationFromUrl || pluginsPanelFromUrl === true) {
|
||||
void setViewMode("integrations")
|
||||
}
|
||||
}, [integrationFromUrl, pluginsPanelFromUrl, setViewMode])
|
||||
|
||||
// Ephemeral local state (not worth URL-encoding)
|
||||
const [fullscreenInitialContent, setFullscreenInitialContent] = useState("")
|
||||
|
|
@ -378,7 +390,7 @@ export default function NewPage() {
|
|||
)
|
||||
|
||||
const handleOpenIntegrations = useCallback(
|
||||
(integration?: "import" | "chrome" | "connections") => {
|
||||
(integration?: IntegrationParamValue) => {
|
||||
setViewMode("integrations")
|
||||
if (integration) {
|
||||
setIntegration(integration)
|
||||
|
|
|
|||
|
|
@ -67,6 +67,16 @@ const PLUGIN_INFO: Record<string, PluginInfo> = {
|
|||
],
|
||||
icon: "/images/plugins/openclaw.svg",
|
||||
},
|
||||
hermes: {
|
||||
name: "Hermes",
|
||||
description: "Memory layer for Hermes agent",
|
||||
features: [
|
||||
"Semantic search across previous sessions",
|
||||
"Auto-capture of conversation context",
|
||||
"Builds persistent user profile from interactions",
|
||||
],
|
||||
icon: "/images/plugins/hermes.svg",
|
||||
},
|
||||
cursor: {
|
||||
name: "Cursor",
|
||||
description:
|
||||
|
|
@ -339,7 +349,7 @@ function AuthConnectContent() {
|
|||
</button>
|
||||
|
||||
<a
|
||||
href="https://app.supermemory.ai/?view=integrations/plugins"
|
||||
href="https://app.supermemory.ai/?plugins=true"
|
||||
className={dmSans125ClassName(
|
||||
"text-[12px] text-[#737373] hover:text-[#FAFAFA] transition-colors",
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import { GoogleDrive, Notion, OneDrive } from "@ui/assets/icons"
|
|||
import { ArrowLeft, Sun } from "lucide-react"
|
||||
import {
|
||||
integrationParam,
|
||||
pluginsPanelParam,
|
||||
type IntegrationParamValue,
|
||||
} from "@/lib/search-params"
|
||||
import Image from "next/image"
|
||||
|
|
@ -46,7 +47,8 @@ const cards: IntegrationCardDef[] = [
|
|||
{
|
||||
id: "plugins",
|
||||
title: "Plugins",
|
||||
description: "Claude Code, OpenCode, and other AI tool integrations",
|
||||
description:
|
||||
"Claude Code, OpenCode, Hermes, and other AI tool integrations",
|
||||
pro: true,
|
||||
icon: (
|
||||
<div className="flex items-center -space-x-1.5">
|
||||
|
|
@ -71,6 +73,13 @@ const cards: IntegrationCardDef[] = [
|
|||
height={24}
|
||||
className="size-6 rounded"
|
||||
/>
|
||||
<Image
|
||||
src="/images/plugins/hermes.svg"
|
||||
alt="Hermes"
|
||||
width={24}
|
||||
height={24}
|
||||
className="size-6 rounded"
|
||||
/>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
|
|
@ -156,17 +165,26 @@ export function IntegrationsView() {
|
|||
"integration",
|
||||
integrationParam,
|
||||
)
|
||||
const [pluginsPanel, setPluginsPanel] = useQueryState(
|
||||
"plugins",
|
||||
pluginsPanelParam,
|
||||
)
|
||||
const [selectedCard, setSelectedCard] = useState<CardId | null>(null)
|
||||
|
||||
useEffect(() => {
|
||||
if (pluginsPanel === true) {
|
||||
setSelectedCard("plugins")
|
||||
return
|
||||
}
|
||||
if (integration && INTEGRATION_TO_CARD[integration]) {
|
||||
setSelectedCard(INTEGRATION_TO_CARD[integration])
|
||||
}
|
||||
}, [integration])
|
||||
}, [integration, pluginsPanel])
|
||||
|
||||
const handleBack = () => {
|
||||
setSelectedCard(null)
|
||||
setIntegration(null)
|
||||
void setPluginsPanel(null)
|
||||
}
|
||||
|
||||
switch (selectedCard) {
|
||||
|
|
|
|||
|
|
@ -83,6 +83,19 @@ const PLUGIN_CATALOG: Record<string, PluginInfo> = {
|
|||
docsUrl: "https://docs.supermemory.ai/integrations/openclaw",
|
||||
repoUrl: "https://github.com/supermemoryai/openclaw-supermemory",
|
||||
},
|
||||
hermes: {
|
||||
id: "hermes",
|
||||
name: "Hermes",
|
||||
description: "Memory layer for Hermes agent",
|
||||
features: [
|
||||
"Semantic search across previous sessions",
|
||||
"Auto-capture of conversation context",
|
||||
"Builds persistent user profile from interactions",
|
||||
],
|
||||
icon: "/images/plugins/hermes.svg",
|
||||
docsUrl: "https://docs.supermemory.ai/integrations/hermes",
|
||||
repoUrl: "https://github.com/NousResearch/hermes-agent",
|
||||
},
|
||||
}
|
||||
|
||||
interface ConnectedPlugin {
|
||||
|
|
@ -335,7 +348,7 @@ export function PluginsDetail() {
|
|||
"text-[12px] text-[#737373]",
|
||||
)}
|
||||
>
|
||||
Claude Code, OpenCode, OpenClaw & more
|
||||
Claude Code, OpenCode, OpenClaw, Hermes & more
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,10 @@ import { QuickNoteCard } from "./quick-note-card"
|
|||
import { HighlightsCard, type HighlightItem } from "./highlights-card"
|
||||
import { GraphCard } from "./memory-graph"
|
||||
import { Button } from "@ui/components/button"
|
||||
import { categoriesParam } from "@/lib/search-params"
|
||||
import {
|
||||
categoriesParam,
|
||||
type IntegrationParamValue,
|
||||
} from "@/lib/search-params"
|
||||
import { NovaEmptyState } from "@/components/nova/nova-empty-state"
|
||||
import {
|
||||
AlertDialog,
|
||||
|
|
@ -143,9 +146,7 @@ interface HighlightsProps {
|
|||
|
||||
interface NovaEmptyStateProps {
|
||||
onAddMemory: (tab: "note" | "link") => void
|
||||
onOpenIntegrations: (
|
||||
integration?: "import" | "chrome" | "connections",
|
||||
) => void
|
||||
onOpenIntegrations: (integration?: IntegrationParamValue) => void
|
||||
isAllSpaces: boolean
|
||||
spaceName?: string
|
||||
onSwitchToAllSpaces?: () => void
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
"use client"
|
||||
|
||||
import { CHROME_EXTENSION_URL } from "@repo/lib/constants"
|
||||
import type { IntegrationParamValue } from "@/lib/search-params"
|
||||
import { cn } from "@lib/utils"
|
||||
import { dmSansClassName } from "@/lib/fonts"
|
||||
import { Button } from "@ui/components/button"
|
||||
|
|
@ -10,9 +11,7 @@ import { ArrowRight, Link2, FileText, Zap } from "lucide-react"
|
|||
|
||||
interface NovaEmptyStateProps {
|
||||
onAddMemory: (tab: "note" | "link") => void
|
||||
onOpenIntegrations: (
|
||||
integration?: "import" | "chrome" | "connections",
|
||||
) => void
|
||||
onOpenIntegrations: (integration?: IntegrationParamValue) => void
|
||||
isAllSpaces: boolean
|
||||
spaceName?: string
|
||||
onSwitchToAllSpaces?: () => void
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ export type IntegrationParamValue = (typeof integrationLiterals)[number]
|
|||
export const integrationParam = parseAsStringLiteral(integrationLiterals)
|
||||
export type ViewParamValue = (typeof viewLiterals)[number]
|
||||
export const viewParam = parseAsStringLiteral(viewLiterals).withDefault("list")
|
||||
|
||||
export const pluginsPanelParam = parseAsBoolean
|
||||
export const categoriesParam = parseAsArrayOf(parseAsString, ",").withDefault(
|
||||
[],
|
||||
)
|
||||
|
|
|
|||
1
apps/web/public/images/plugins/hermes.svg
Normal file
1
apps/web/public/images/plugins/hermes.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 19 KiB |
Loading…
Add table
Reference in a new issue