diff --git a/apps/desktop/app/(app)/settings/page.tsx b/apps/desktop/app/(app)/settings/page.tsx
index 80239289..c8c0f3de 100644
--- a/apps/desktop/app/(app)/settings/page.tsx
+++ b/apps/desktop/app/(app)/settings/page.tsx
@@ -10,6 +10,7 @@ import {
} from "@ui/components/card"
import { Button } from "@ui/components/button"
import { cn } from "@lib/utils"
+import { Check, FolderOpen } from "lucide-react"
import Link from "next/link"
import { useRouter } from "next/navigation"
import { useCallback, useEffect, useState } from "react"
@@ -480,7 +481,7 @@ export default function SettingsPage() {
Refresh
-
+
{tools.map((tool) => (
-
-
-
-
-
-
- {tool.name}
-
- {tool.description}
-
-
-
- {tool.configPath}
-
-
{tool.detail}
+
+
+
+
+ {tool.name}
+
+
+ {tool.description}
+
+
+ {tool.connected ? (
+
+
+ Connected
+
+ ) : (
+
+ )}
-
+
+
+ {tool.perks.map((perk) => (
+ -
+
+ {perk}
+
+ ))}
+
+
+
+
+
+ {tool.configPath}
+
+
+ {tool.detected
+ ? tool.version
+ ? `Detected ${tool.version}`
+ : "Detected on this Mac"
+ : "Not detected yet"}
+
+
+
+
+
+ {tool.connected ? (
-
-
+ ) : null}
)
}
-function SettingsToolStatusPill({ tool }: { tool: DesktopToolCard }) {
- if (tool.connected) {
- return (
-
- Connected
-
- )
- }
+function SettingsToolTargetChip({ label }: { label: string }) {
return (
-
- {tool.detected ? "Detected" : "Not detected"}
-
+
+
+ Uses
+
+
+ {label}
+
)
}
diff --git a/apps/desktop/app/onboarding/page.tsx b/apps/desktop/app/onboarding/page.tsx
index 8364fb7d..41cfbea7 100644
--- a/apps/desktop/app/onboarding/page.tsx
+++ b/apps/desktop/app/onboarding/page.tsx
@@ -1,6 +1,7 @@
"use client"
import { LogoFull } from "@ui/assets/Logo"
+import { Button } from "@ui/components/button"
import { cn } from "@lib/utils"
import {
ArrowRight,
@@ -56,6 +57,16 @@ const STEP_LABELS: Record = {
done: "Done",
}
+const modalCardStyle = {
+ boxShadow:
+ "0 2.842px 14.211px 0 rgba(0, 0, 0, 0.25), 0.711px 0.711px 0.711px 0 rgba(255, 255, 255, 0.10) inset",
+}
+
+const inputBevelStyle = {
+ boxShadow:
+ "0px 1px 2px 0px rgba(0,43,87,0.1), inset 0px 0px 0px 1px rgba(43,49,67,0.08), inset 0px 1px 1px 0px rgba(0,0,0,0.08), inset 0px 2px 4px 0px rgba(0,0,0,0.02)",
+}
+
export default function DesktopOnboardingPage() {
const router = useRouter()
const [session, setSession] = useState(null)
@@ -311,7 +322,7 @@ function ToolsStep({
}
/>
-
+
{tools.map((tool) => (
-
-
-
-
-
-
- {tool.name}
-
- {tool.description}
-
-
-
-
- {tool.version ?
: null}
+
+
+
+
+ {tool.name}
+
+
+ {tool.description}
+
+
+ {tool.connected ? (
+
+
+ Connected
+
+ ) : (
+
+ )}
-
- {tool.restartHint}
-
-
- {tool.connected
- ? "Connected"
- : busy
- ? "Preparing..."
- : tool.primaryAction === "connect"
- ? "Connect"
- : "Set up"}
-
-
+
+
+ {tool.perks.map((perk) => (
+ -
+
+ {perk}
+
+ ))}
+
+
+
+
+
+ {tool.configPath}
+
+
+ {tool.detected
+ ? tool.version
+ ? `Detected ${tool.version}`
+ : "Detected on this Mac"
+ : "Not detected yet"}
+
+
+
+
+
)
}
-function ToolStatusPill({ tool }: { tool: DesktopToolCard }) {
- if (tool.connected) {
- return (
-
- Connected
-
- )
- }
+function SaveTargetChip({ label }: { label: string }) {
return (
-
- {tool.detected ? "Detected" : "Not detected"}
-
+
+
+ Uses
+
+
+ {label}
+
)
}
diff --git a/apps/desktop/lib/tool-catalog.ts b/apps/desktop/lib/tool-catalog.ts
index 0b87dedf..3f8283c2 100644
--- a/apps/desktop/lib/tool-catalog.ts
+++ b/apps/desktop/lib/tool-catalog.ts
@@ -11,6 +11,7 @@ export type DesktopToolCatalogEntry = {
description: string
docsUrl: string
icon: LucideIcon
+ perks: string[]
restartHint: string
}
@@ -32,6 +33,11 @@ export const DESKTOP_TOOL_CATALOG: Record<
"Connect the Supermemory MCP server so Claude Code can search and save memories while you work.",
docsUrl: "https://supermemory.ai/docs/integrations/claude-code",
icon: Bot,
+ perks: [
+ "Search and save memories from coding sessions",
+ "Project decisions become reusable context",
+ "Backs up config before every change",
+ ],
restartHint: "Restart Claude Code after changing MCP config.",
},
codex: {
@@ -43,6 +49,11 @@ export const DESKTOP_TOOL_CATALOG: Record<
"Add Supermemory to Codex MCP servers so coding sessions can recall durable context.",
docsUrl: "https://supermemory.ai/docs/integrations/codex",
icon: Terminal,
+ perks: [
+ "Persistent memory for Codex CLI sessions",
+ "Uses the Supermemory MCP server",
+ "Backs up ~/.codex/config.toml first",
+ ],
restartHint: "Restart Codex after changing ~/.codex/config.toml.",
},
cursor: {
@@ -54,6 +65,11 @@ export const DESKTOP_TOOL_CATALOG: Record<
"Write the Supermemory MCP server into Cursor's MCP config for one-click memory access.",
docsUrl: "https://supermemory.ai/docs/supermemory-mcp/setup",
icon: Code2,
+ perks: [
+ "Memory tools directly inside Cursor",
+ "One MCP config for project context",
+ "Backs up config before every change",
+ ],
restartHint: "Restart Cursor so MCP changes are loaded.",
},
}