diff --git a/apps/docs/agents-and-mcp.mdx b/apps/docs/agents-and-mcp.mdx index 4098137f..92e4ed8c 100644 --- a/apps/docs/agents-and-mcp.mdx +++ b/apps/docs/agents-and-mcp.mdx @@ -1,13 +1,13 @@ --- title: "Agents, skills and MCP" -description: "Set up coding agents to integrate Supermemory — CLI, skill, and docs MCP." +description: "Set up coding agents to integrate Supermemory with the CLI, the skill and the docs MCP." sidebarTitle: "Agents, skills and MCP" -icon: "bot" +icon: "/icons/hugeicons/robotic.svg" --- This page is for **building with Supermemory** using coding agents: scaffolding a project, following the real API, and searching product docs. -It is **not** the consumer Memory MCP (give Claude/Cursor long-term memory about *you*). That is a separate product surface — see [Supermemory MCP](/supermemory-mcp/mcp). +This is not the consumer memory MCP that gives Claude or Cursor long-term memory about you. That is a separate product: [Supermemory MCP](/supermemory-mcp/mcp). | Path | How | For | |---|---|---| @@ -52,7 +52,7 @@ npx skills add https://github.com/supermemoryai/skills --skill supermemory Source: [github.com/supermemoryai/skills](https://github.com/supermemoryai/skills). -Best combo for coding agents: **skill** + **docs MCP** + **`npx supermemory setup`**. +For coding agents, use all three together: the skill, the docs MCP and `npx supermemory setup`. ## Docs MCP @@ -186,7 +186,7 @@ You are integrating Supermemory into my app. If the skill is not installed, paste a fuller prompt so the agent asks the right product questions: - + ```` You are integrating Supermemory into my application. Supermemory provides user memory, semantic search, and automatic knowledge extraction for AI applications. @@ -233,16 +233,16 @@ Want your **assistant** to remember you across chats (save/recall/profile in Cla ## Next steps - + Conversation + document ingest, RAG, graph, profile, harness. - + Persistent memory for assistants — separate from docs setup. - + Claude Code, OpenClaw, Codex, Hermes, and more. - + withSupermemory and memory tools in app code. diff --git a/apps/docs/api-reference/connections.mdx b/apps/docs/api-reference/connections.mdx index 47a606cf..d00ca941 100644 --- a/apps/docs/api-reference/connections.mdx +++ b/apps/docs/api-reference/connections.mdx @@ -1,8 +1,8 @@ --- title: "Connections" sidebarTitle: "Overview" -description: "External connectors — create, configure, sync, and manage resources." -icon: "book-open" +description: "Create, configure, sync and manage external connectors." +icon: "/icons/hugeicons/book-open-01.svg" --- Connections pull content from Notion, Google Drive, Gmail, OneDrive, S3, GitHub, and more. diff --git a/apps/docs/api-reference/container-tags.mdx b/apps/docs/api-reference/container-tags.mdx index ce8c6f28..5969f61b 100644 --- a/apps/docs/api-reference/container-tags.mdx +++ b/apps/docs/api-reference/container-tags.mdx @@ -1,8 +1,8 @@ --- title: "Container tags" sidebarTitle: "Overview" -description: "Multi-tenant containers — settings, merge, and delete." -icon: "book-open" +description: "Settings, merge and delete for multi-tenant containers." +icon: "/icons/hugeicons/book-open-01.svg" --- `containerTag` is the primary multi-tenant key (user id, workspace id, etc.). These endpoints manage settings and lifecycle for a tag. diff --git a/apps/docs/api-reference/documents.mdx b/apps/docs/api-reference/documents.mdx index 5f3d0441..3dde4609 100644 --- a/apps/docs/api-reference/documents.mdx +++ b/apps/docs/api-reference/documents.mdx @@ -2,7 +2,7 @@ title: "Documents" sidebarTitle: "Overview" description: "List, get status, update, delete, and inspect ingested documents." -icon: "book-open" +icon: "/icons/hugeicons/book-open-01.svg" --- Documents are the unit of ingestion. Adds return immediately with `status: "queued"`; poll until `done` before relying on search or profiles. diff --git a/apps/docs/api-reference/ingest.mdx b/apps/docs/api-reference/ingest.mdx index 6159cc11..de66584e 100644 --- a/apps/docs/api-reference/ingest.mdx +++ b/apps/docs/api-reference/ingest.mdx @@ -2,7 +2,7 @@ title: "Ingest" sidebarTitle: "Overview" description: "Add documents, files, batches, and conversations to Supermemory." -icon: "book-open" +icon: "/icons/hugeicons/book-open-01.svg" --- Send raw content into the processing pipeline. Supermemory extracts memories, chunks for RAG, and updates profiles asynchronously. diff --git a/apps/docs/api-reference/memories.mdx b/apps/docs/api-reference/memories.mdx index bbe47ff5..94e281d7 100644 --- a/apps/docs/api-reference/memories.mdx +++ b/apps/docs/api-reference/memories.mdx @@ -2,7 +2,7 @@ title: "Memories" sidebarTitle: "Overview" description: "Create, list, update, and forget extracted memory entries (v4)." -icon: "book-open" +icon: "/icons/hugeicons/book-open-01.svg" --- These endpoints operate on **extracted memories**, not raw documents. diff --git a/apps/docs/api-reference/overview.mdx b/apps/docs/api-reference/overview.mdx index 776eb5fc..651ec806 100644 --- a/apps/docs/api-reference/overview.mdx +++ b/apps/docs/api-reference/overview.mdx @@ -1,7 +1,7 @@ --- -title: "API Reference" -description: "Interactive reference for the Supermemory HTTP API — ingest, search, profiles, memories, connectors, and settings." -icon: "unplug" +title: "API reference" +description: "Interactive reference for the Supermemory HTTP API: ingest, search, profiles, memories, connectors and settings." +icon: "/icons/hugeicons/plug-socket.svg" --- This is the **contract-level** reference for Supermemory: methods, paths, parameters, and the playground. diff --git a/apps/docs/api-reference/profiles.mdx b/apps/docs/api-reference/profiles.mdx index 9410bec5..6e185097 100644 --- a/apps/docs/api-reference/profiles.mdx +++ b/apps/docs/api-reference/profiles.mdx @@ -1,8 +1,8 @@ --- title: "Profiles" sidebarTitle: "Profiles overview" -description: "Entity profiles — static and dynamic facts for a container." -icon: "id-card" +description: "Static and dynamic facts about an entity, scoped to a container." +icon: "/icons/hugeicons/id.svg" --- Profiles summarize what Supermemory knows about a user or entity in a `containerTag`. diff --git a/apps/docs/api-reference/search.mdx b/apps/docs/api-reference/search.mdx index 03fb068d..dcd4697c 100644 --- a/apps/docs/api-reference/search.mdx +++ b/apps/docs/api-reference/search.mdx @@ -1,8 +1,8 @@ --- title: "Recall" sidebarTitle: "Overview" -description: "Semantic search over memories, document chunks, or both — plus user profiles." -icon: "book-open" +description: "Semantic search over memories, document chunks or both, plus user profiles." +icon: "/icons/hugeicons/book-open-01.svg" --- Get context back out of Supermemory: search extracted memories / documents, or fetch a user profile. diff --git a/apps/docs/api-reference/settings.mdx b/apps/docs/api-reference/settings.mdx index 6c3308b0..ace06e17 100644 --- a/apps/docs/api-reference/settings.mdx +++ b/apps/docs/api-reference/settings.mdx @@ -2,7 +2,7 @@ title: "Settings" sidebarTitle: "Overview" description: "Organization settings, profile buckets, and data reset." -icon: "book-open" +icon: "/icons/hugeicons/book-open-01.svg" --- Org-level configuration for extraction, customization, and profile buckets. diff --git a/apps/docs/authentication.mdx b/apps/docs/authentication.mdx index d0cf4274..95ae3564 100644 --- a/apps/docs/authentication.mdx +++ b/apps/docs/authentication.mdx @@ -2,10 +2,10 @@ title: "API keys & auth" description: "Org API keys, container-scoped keys, and connector branding." sidebarTitle: "API keys" -icon: "key" +icon: "/icons/hugeicons/key-01.svg" --- -## API Keys +## API keys All API requests require authentication using a Bearer token. Get your API key from the [Developer Platform](https://console.supermemory.ai). @@ -40,7 +40,7 @@ client = Supermemory(api_key="YOUR_API_KEY") --- -## Connector Branding +## Connector branding When users connect external services (Google Drive, Notion, OneDrive), they see a "Log in to **Supermemory**" prompt by default. You can replace this with your own app name by providing your own OAuth credentials via the settings endpoint. diff --git a/apps/docs/concepts/container-tags.mdx b/apps/docs/concepts/container-tags.mdx index 0fa27719..2046bf10 100644 --- a/apps/docs/concepts/container-tags.mdx +++ b/apps/docs/concepts/container-tags.mdx @@ -1,8 +1,8 @@ --- -title: "Container Tags" +title: "Container tags" sidebarTitle: "Container tags" description: "The isolation boundary that groups and partitions memories by user, project, or any logical scope" -icon: "folder" +icon: "/icons/hugeicons/folder-01.svg" --- A **container tag** is the primary way you organize and isolate memories in Supermemory. It's a simple string identifier you attach to content when you add it — and that you pass back when you search, list, or update it. @@ -10,10 +10,10 @@ A **container tag** is the primary way you organize and isolate memories in Supe Think of a container tag as a **namespace**: every memory tagged with `user_alex` lives in its own isolated space, completely separate from memories tagged `user_jordan`. This is what makes Supermemory safe to use in multi-tenant applications — one user can never see another user's memories unless you explicitly query across both tags. - + Bucket memories by user, project, agent, workspace, or any boundary that makes sense for your app. - + Each container tag maps to its own vector namespace, so search and retrieval never leak across boundaries. @@ -167,13 +167,13 @@ Keep tags **deterministic** — derive them directly from IDs you already have ( ## Next steps - + Combine container tags with metadata filters for precise retrieval. - + Mint keys that can only touch one container — multi-tenant clients without the org master key. - + See container tags in action across the add API. diff --git a/apps/docs/concepts/content-types.mdx b/apps/docs/concepts/content-types.mdx index 9aafa528..164da1ff 100644 --- a/apps/docs/concepts/content-types.mdx +++ b/apps/docs/concepts/content-types.mdx @@ -1,13 +1,13 @@ --- -title: "Supported Content Types" +title: "Supported content types" sidebarTitle: "Multi-modal ingestion" description: "All the content formats Supermemory can ingest and process" -icon: "file-stack" +icon: "/icons/hugeicons/files-01.svg" --- Supermemory automatically extracts and indexes content from various formats. There are two entry points: `client.add()` for text and URLs, `client.documents.uploadFile()` for actual files. See [Add Memories](/ingestion/add-memories) to learn how to ingest content via the API. -## Text Content +## Text content Raw text, conversations, notes, or any string content. @@ -22,7 +22,7 @@ await client.add({ --- -## URLs & Web Pages +## URLs & Web pages Send a URL and Supermemory fetches, extracts, and indexes the content. @@ -76,7 +76,7 @@ Automatically handled via [Google Drive connector](/connectors/google-drive): --- -## Code & Markdown +## Code & markdown Both are plain text, so they go through `add` like any other string content — no file upload needed: @@ -122,7 +122,7 @@ await client.documents.uploadFile({ --- -## Audio & Video +## Audio & video Video has a dedicated `fileType`; audio is uploaded the same way and detected from the file itself: @@ -151,7 +151,7 @@ await client.documents.uploadFile({ --- -## Structured Data +## Structured data JSON and CSV are text — stringify and send them through `add()`, no file upload needed. @@ -177,7 +177,7 @@ await client.add({ --- -## File Upload +## File upload For any binary file, use `uploadFile` — it accepts a stream, not base64: @@ -219,7 +219,7 @@ For files, `uploadFile` detects type from the file itself in most cases. `fileTy --- -## Content Limits +## Content limits | Type | Max Size | |------|----------| @@ -235,13 +235,13 @@ For large files, consider chunking or using [connectors](/connectors/overview) f --- -## Next Steps +## Next steps - + Upload content via the API - + How content is chunked and indexed diff --git a/apps/docs/concepts/customization.mdx b/apps/docs/concepts/customization.mdx index 122433ba..bd2b1cb9 100644 --- a/apps/docs/concepts/customization.mdx +++ b/apps/docs/concepts/customization.mdx @@ -1,13 +1,13 @@ --- -title: "Customizing for Your Use Case" +title: "Customizing for your use case" sidebarTitle: "Customizing" description: "Configure Supermemory's behavior for your specific application" -icon: "settings-2" +icon: "/icons/hugeicons/settings-02.svg" --- Configure how Supermemory processes and retrieves content for your specific use case. -## Filter Prompts +## Filter prompts Tell Supermemory what content matters during ingestion. This helps filter and prioritize what gets indexed. @@ -32,25 +32,25 @@ await client.settings.update({ ``` - + ```typescript filterPrompt: `Personal AI assistant. Prioritize recent content, action items, and personal context. Exclude spam and duplicates.` ``` - + ```typescript filterPrompt: `Customer support agent. Prioritize verified solutions, official docs, and resolved tickets. Exclude internal discussions and PII.` ``` - + ```typescript filterPrompt: `Legal research assistant. Prioritize precedents, current regulations, and approved contract language. Exclude privileged communications.` ``` - + ```typescript filterPrompt: `Financial analysis assistant. Prioritize latest reports, verified data, and regulatory filings. Exclude speculative data and MNPI.` @@ -62,7 +62,7 @@ await client.settings.update({ and FDA-approved info. Exclude PHI and outdated recommendations.` ``` - + ```typescript filterPrompt: `Developer documentation assistant. Prioritize current APIs, working examples, and best practices. Exclude deprecated APIs and test fixtures.` @@ -82,7 +82,7 @@ await client.settings.update({ --- -## Entity Context +## Entity context Guide memory extraction for a specific container tag. Filter prompts are org-wide; entity context is per container. @@ -112,7 +112,7 @@ Entity context persists on the container tag and combines with org-level filter --- -## Chunk Size +## Chunk size Control how documents are split into searchable pieces. Smaller chunks = more precise retrieval but less context per result. @@ -135,7 +135,7 @@ Smaller chunks generate more memories per document. Larger chunks provide more c --- -## Connector Branding +## Connector branding Show "Log in to **YourApp**" instead of "Log in to Supermemory" when users connect external services. See [Connectors Overview](/connectors/overview) for the full list of supported integrations. @@ -180,7 +180,7 @@ Show "Log in to **YourApp**" instead of "Log in to Supermemory" when users conne --- -## API Reference +## API reference ```typescript // Get current settings @@ -200,13 +200,13 @@ Settings are organization-wide. Changes apply to new content only—existing mem --- -## Next Steps +## Next steps - + See your custom settings in action - + Set up automatic syncing from external platforms diff --git a/apps/docs/concepts/filtering.mdx b/apps/docs/concepts/filtering.mdx index cb158583..149bdd8c 100644 --- a/apps/docs/concepts/filtering.mdx +++ b/apps/docs/concepts/filtering.mdx @@ -1,17 +1,17 @@ --- -title: "Organizing & Filtering Memories" +title: "Organizing & filtering memories" sidebarTitle: "Metadata filtering" description: "Use container tags and metadata to organize and retrieve memories" -icon: "filter" +icon: "/icons/hugeicons/filter.svg" --- Supermemory provides two ways to organize your memories: - + **Organize memories** into isolated spaces by user, project, or workspace - + **Query memories** by custom properties like category, status, or date @@ -20,11 +20,11 @@ Both can be used independently or together for precise filtering. --- -## Container Tags +## Container tags Container tags create isolated memory spaces. Use them to separate memories by user, project, or any logical boundary. -### Adding Memories with Tags +### Adding memories with tags ```typescript await client.add({ @@ -33,7 +33,7 @@ await client.add({ }); ``` -### Searching with Tags +### Searching with tags ```typescript const results = await client.search({ @@ -47,7 +47,7 @@ const results = await client.search({ Each search is scoped to a single container tag. Passing `containerTag: "user_123"` restricts results to memories stored in that container. -### Recommended Patterns +### Recommended patterns | Pattern | Example | Use Case | |---------|---------|----------| @@ -56,7 +56,7 @@ Each search is scoped to a single container tag. Passing `containerTag: "user_12 | Hierarchical | `org_{orgId}_team_{teamId}` | Multi-level organization | - + ```typescript // Multi-tenant SaaS - isolate by organization and user await client.add({ @@ -98,7 +98,7 @@ Each search is scoped to a single container tag. Passing `containerTag: "user_12 Metadata lets you attach custom properties to memories and filter by them later. -### Adding Memories with Metadata +### Adding memories with metadata ```typescript await client.add({ @@ -112,7 +112,7 @@ await client.add({ }); ``` -### Searching with Metadata Filters +### Searching with metadata filters Filters must be wrapped in `AND` or `OR` arrays: @@ -130,7 +130,7 @@ const results = await client.search({ }); ``` -### Filter Types +### Filter types | Type | Example | Description | |------|---------|-------------| @@ -139,7 +139,7 @@ const results = await client.search({ | Numeric | `{ filterType: "numeric", key: "priority", value: "5", numericOperator: ">=" }` | Number comparison | | Array contains | `{ filterType: "array_contains", key: "tags", value: "important" }` | Check array membership | -### Combining Filters +### Combining filters Use `AND` and `OR` for complex queries: @@ -161,7 +161,7 @@ const results = await client.search({ }); ``` -### Excluding Results +### Excluding results Use `negate: true` to exclude matches: @@ -178,7 +178,7 @@ const results = await client.search({ ``` - + **String contains (substring search):** ```typescript // Find documents with "machine learning" in the description @@ -270,7 +270,7 @@ const results = await client.search({ - `=` becomes `!=` - + **User's work documents from 2024:** ```typescript const results = await client.search({ @@ -326,9 +326,9 @@ const results = await client.search({ --- -## Quick Reference +## Quick reference -### When Adding Memories +### When adding memories ```typescript await client.add({ @@ -338,7 +338,7 @@ await client.add({ }); ``` -### When Searching +### When searching ```typescript const results = await client.search({ @@ -351,13 +351,13 @@ const results = await client.search({ }); ``` -### Metadata Key Rules +### Metadata key rules - Allowed characters: `a-z`, `A-Z`, `0-9`, `_`, `-`, `.` - Max length: 64 characters - No spaces or special characters -### Query Complexity Limits +### Query complexity limits - Maximum 200 conditions per query - Maximum 8 levels of nested `AND`/`OR` expressions @@ -366,7 +366,7 @@ const results = await client.search({ If you need more conditions than these limits allow, break your query into multiple requests or use broader search terms with post-processing. -### Searching Within a Document +### Searching within a document Use `docId` to scope a search to chunks within one large document — useful for books, podcasts, or other long-form content: @@ -379,13 +379,13 @@ const results = await client.search({ --- -## Next Steps +## Next steps - + Apply filters in search queries - + Add content with container tags and metadata diff --git a/apps/docs/concepts/graph-memory.mdx b/apps/docs/concepts/graph-memory.mdx index d92249ee..eced5485 100644 --- a/apps/docs/concepts/graph-memory.mdx +++ b/apps/docs/concepts/graph-memory.mdx @@ -1,8 +1,8 @@ --- title: "Graph memory" sidebarTitle: "Graph memory" -description: "How facts connect, update, and stay true — memory relationships, temporal truth, and automatic forgetting." -icon: "vector-square" +description: "How facts connect, update and stay true: relationships, temporal truth and automatic forgetting." +icon: "/icons/hugeicons/share-08.svg" --- **How understanding is stored and stays true over time.** @@ -174,16 +174,16 @@ const results = await client.search({ | API: add / search / forget | [Ingestion](/ingestion/add-memories) · [Search](/recall/search) · [Forget & update](/recall/memory-operations) | - + Ingest pipeline, statuses, and outputs. - + When to use memory vs document retrieval. - + Static + dynamic context built from the graph. - + See entity chains in a full conversation + document flow. diff --git a/apps/docs/concepts/how-it-works.mdx b/apps/docs/concepts/how-it-works.mdx index 39bb9328..01f2005c 100644 --- a/apps/docs/concepts/how-it-works.mdx +++ b/apps/docs/concepts/how-it-works.mdx @@ -1,17 +1,17 @@ --- -title: "How Supermemory Works" +title: "How Supermemory works" sidebarTitle: "How it works" -description: "From a file or chat turn to something you can search — the ingest pipeline, statuses, and outputs." -icon: "cpu" +description: "How a file or chat turn becomes something you can search: the ingest pipeline, statuses and outputs." +icon: "/icons/hugeicons/cpu.svg" --- -At it's core, supermemory is powered by a custom learning model and a graph database that we built internally. +At its core, supermemory is powered by a custom learning model and a graph database that we built internally. Decides what and how to learn, what is important, when to forget, creating relations, etc. - + Where the learnings are actually stored, optimized for search. Fact-based temporal graph that has Vector, FTS, and graph built in. @@ -21,20 +21,17 @@ But, you don't have to think about the above. The interface for users is as simp ## Get started in under a minute - + From the [developer console](https://console.supermemory.ai) — **API Keys → Create API Key**. `console.supermemory.ai` is where keys and usage live. - + Install the SDK, drop in your key, add a memory, and search it — right below, or the full [ingest → retrieve loop](/using-supermemory). -```bash TypeScript -npm install supermemory -``` - ```typescript TypeScript +// npm install supermemory import Supermemory from "supermemory"; const client = new Supermemory({ apiKey: "sm_..." }); // from console.supermemory.ai → API Keys @@ -48,6 +45,7 @@ const { results } = await client.search({ ``` ```python Python +# pip install supermemory from supermemory import Supermemory client = Supermemory(api_key="sm_...") # from console.supermemory.ai → API Keys @@ -113,7 +111,7 @@ Larger PDFs and long video take longer. Short chat turns usually finish in secon ## Dreaming (how memories enter the graph) -Document **status `done`** means chunks are indexed for search. **Memories** — the graph facts, updates, and derives — come from a second phase called **dreaming**. +A document with status `done` has its chunks indexed for search. Memories (the graph's facts, updates and derived facts) come from a second phase called **dreaming**. This is when the content is passed through the memory model and merged, arranged and organized for the future. @@ -122,7 +120,7 @@ Pass `dreaming` on [add](/ingestion/add-memories): | Mode | Default? | Behavior | When to use | | --- | --- | --- | --- | | **`dynamic`** | Yes | Related documents are grouped so memories form from **coherent units**, not one isolated write at a time. Graph quality is higher for real multi-turn / multi-doc flows. Memory extraction may continue **after** `status: "done"`. | Production agents, connectors, ongoing sessions | -| **`instant`** | No | This document is dreamed **on its own, right away**. Memories are available as soon as processing finishes for that doc. Bills **one extra [operation](/overview/billing)** per document. | Demos, quickstarts, “I need the graph now” | +| **`instant`** | No | This document is dreamed on its own, right away. Memories are available as soon as processing finishes for that document. Bills one extra [operation](/overview/billing) per document. | Demos, quickstarts, “I need the graph now” | ```typescript // Production default — omit or set explicitly @@ -142,7 +140,7 @@ await client.add({ }); ``` -**Rule of thumb:** prefer **`dynamic`** for quality and cost in real apps, use **`instant`** when the next step is a memory search or profile that must reflect this document immediately (as in the [quickstart](/quickstart)). Keeping it dynamic helps it pair better with other memories and better connections, inferences to be made. +**Rule of thumb:** use `dynamic` in real apps for better quality and cost, because batching lets new memories connect to related ones. Use `instant` when the very next step is a memory search or profile that must already reflect this document, as in the [quickstart](/quickstart). How those memories connect and stay true over time is [Graph memory](/concepts/graph-memory). API detail: [Processing modes](/ingestion/add-memories#processing-modes). @@ -156,27 +154,27 @@ After the pipeline runs, the same document leads to three things -> Chunks, Memo | **Memories** | Extracted facts in a living graph — updates, links, time | [Graph memory](/concepts/graph-memory) | | **Profile** | A sample of memories, static + dynamic summary for always-on context | [Profiles](/concepts/user-profiles), [Profile API](/recall/user-profiles) | -Supermemory does **not** only store the file. It derives **memories** (understanding) and keeps **chunks** (the source) so you can personalize *and* ground. That distinction is the core of [Memory vs RAG](/concepts/memory-vs-rag). +Supermemory does more than store the file. It derives memories (what it understood) and keeps chunks (the source), so you can both personalize and ground answers. That distinction is the core of [Memory vs RAG](/concepts/memory-vs-rag). ## Isolation and identity - **`containerTag`** — hard isolation boundary (user, tenant, project). See [Container tags](/concepts/container-tags). -- **Metadata** — soft dimensions *inside* a tag for filtering. See [Metadata filtering](/concepts/filtering). +- **Metadata**: extra dimensions inside a tag that you can filter on. See [metadata filtering](/concepts/filtering). - **Scoped API keys** — credentials that cannot cross a container. See [API keys](/authentication#scoped-api-keys). ## Next steps - + How facts connect, update, and stay true over time. - + Formats, extractors, and what you can send. - + API: add, customId, files, dreaming, status. - + Query documents and memories after the pipeline finishes. diff --git a/apps/docs/concepts/memory-vs-rag.mdx b/apps/docs/concepts/memory-vs-rag.mdx index 2ef9ea08..c3b3af2b 100644 --- a/apps/docs/concepts/memory-vs-rag.mdx +++ b/apps/docs/concepts/memory-vs-rag.mdx @@ -1,23 +1,23 @@ --- -title: "Memory vs RAG: Understanding the Difference" +title: "Memory vs RAG: Understanding the difference" description: "Learn why agent memory and RAG are fundamentally different, and when to use each approach" sidebarTitle: "Memory vs RAG" -icon: "scale" +icon: "/icons/hugeicons/balance-scale.svg" --- Most developers confuse RAG (Retrieval-Augmented Generation) with agent memory. They're not the same thing, and using RAG for memory is why your agents keep forgetting important context. Let's understand the fundamental difference. -## The Core Problem +## The core problem When building AI agents, developers often treat memory as just another retrieval problem. They store conversations in a vector database, embed queries, and hope semantic search will surface the right context. **This approach fails because memory isn't about finding similar text—it's about understanding relationships, temporal context, and user state over time.** -## Documents vs Memories in Supermemory +## Documents vs memories in Supermemory Supermemory makes a clear distinction between these two concepts: -### Documents: Raw Knowledge +### Documents: Raw knowledge Documents are the raw content you send to Supermemory—PDFs, web pages, text files. They represent static knowledge that doesn't change based on who's accessing it. **Characteristics:** @@ -32,7 +32,7 @@ Documents are the raw content you send to Supermemory—PDFs, web pages, text fi - Research papers - General reference material -### Memories: Contextual Understanding +### Memories: Contextual understanding Memories are the insights, preferences, and relationships extracted from documents and conversations. They're tied to specific users or entities and evolve over time. **Characteristics:** @@ -47,12 +47,12 @@ Memories are the insights, preferences, and relationships extracted from documen - Personal facts and relationships - Behavioral patterns -## Why RAG Fails as Memory +## Why RAG fails as memory Let's look at a real scenario that illustrates the problem: - + ``` Day 1: "I love Adidas sneakers" Day 30: "My Adidas broke after a month, terrible quality" @@ -61,7 +61,7 @@ Let's look at a real scenario that illustrates the problem: ``` - + ```python # RAG sees these as isolated embeddings query = "What sneakers should I buy?" @@ -76,7 +76,7 @@ Let's look at a real scenario that illustrates the problem: **Problem**: RAG finds the most semantically similar text but misses the temporal progression and causal relationships. - + ```python # Supermemory understands temporal context query = "What sneakers should I buy?" @@ -93,16 +93,16 @@ Let's look at a real scenario that illustrates the problem: -## The Technical Difference +## The technical difference -### RAG: Semantic Similarity +### RAG: Semantic similarity ``` Query → Embedding → Vector Search → Top-K Results → LLM ``` RAG excels at finding information that's semantically similar to your query. It's stateless—each query is independent. -### Memory: Contextual Graph +### Memory: Contextual graph ``` Query → Entity Recognition → Graph Traversal → Temporal Filtering → Context Assembly → LLM ``` @@ -113,10 +113,10 @@ Memory systems build a knowledge graph that understands: - **Temporal Context**: When facts were true - **Invalidation**: When facts became outdated -## When to Use Each +## When to use each - + - Static documentation - Knowledge bases - Research queries @@ -124,7 +124,7 @@ Memory systems build a knowledge graph that understands: - Content that doesn't change per user - + - User preferences - Conversation history - Personal facts @@ -133,12 +133,12 @@ Memory systems build a knowledge graph that understands: -## Real-World Examples +## Real-world examples -### E-commerce Assistant +### E-commerce assistant - + Stores product catalogs, specifications, reviews ```python @@ -149,7 +149,7 @@ Memory systems build a knowledge graph that understands: ``` - + Tracks user preferences, purchase history, interactions ```python @@ -161,10 +161,10 @@ Memory systems build a knowledge graph that understands: -### Customer Support Bot +### Customer support bot - + FAQ documents, troubleshooting guides, policies ```python @@ -175,7 +175,7 @@ Memory systems build a knowledge graph that understands: ``` - + Previous issues, user account details, conversation context ```python @@ -187,11 +187,11 @@ Memory systems build a knowledge graph that understands: -## How Supermemory Handles Both +## How Supermemory handles both Supermemory provides a unified platform that correctly handles both patterns: -### 1. Document Storage (RAG) +### 1. Document storage (RAG) ```python # Add a document for RAG-style retrieval client.add( @@ -200,7 +200,7 @@ client.add( ) ``` -### 2. Memory Creation +### 2. Memory creation ```python # Add a user-specific memory client.add( @@ -213,7 +213,7 @@ client.add( ) ``` -### 3. Hybrid Retrieval +### 3. Hybrid retrieval ```python # Search combines both approaches results = client.search.memories( @@ -227,7 +227,7 @@ results = client.search.memories( # - Latest Android phone specs (documents) ``` -## The Bottom Line +## The bottom line **Key Insight**: RAG answers "What do I know?" while Memory answers "What do I remember about you?" @@ -241,19 +241,19 @@ Supermemory provides both capabilities in a unified platform, ensuring your agen --- -## Next Steps +## Next steps - + How memory relationships work - + Our managed RAG solution - + Start ingesting content - + Query your memories and documents diff --git a/apps/docs/concepts/multi-tenancy-examples.mdx b/apps/docs/concepts/multi-tenancy-examples.mdx index 86074ed0..62ba38b1 100644 --- a/apps/docs/concepts/multi-tenancy-examples.mdx +++ b/apps/docs/concepts/multi-tenancy-examples.mdx @@ -1,8 +1,8 @@ --- -title: "Multi-tenancy Examples" +title: "Multi-tenancy examples" sidebarTitle: "Examples" description: "Common container tag and metadata patterns for personal agents, company agents, email assistants, and support platforms" -icon: "list-checks" +icon: "/icons/hugeicons/check-list.svg" --- A few common shapes multi-tenancy takes in practice, combining [container tags](/concepts/container-tags) for isolation with [metadata filters](/concepts/filtering) for organization within a boundary. @@ -122,13 +122,13 @@ const results = await client.search({ ## Next steps - + Why container tags and metadata are separate mechanisms. - + How isolation works, naming rules, and access control. - + Metadata filter types, combining `AND`/`OR`, and query limits. diff --git a/apps/docs/concepts/multi-tenancy.mdx b/apps/docs/concepts/multi-tenancy.mdx index 9d6a9e04..03f07b25 100644 --- a/apps/docs/concepts/multi-tenancy.mdx +++ b/apps/docs/concepts/multi-tenancy.mdx @@ -1,8 +1,8 @@ --- -title: "Multi-tenancy Overview" +title: "Multi-tenancy overview" sidebarTitle: "Overview" description: "How Supermemory isolates and organizes memories across users, tenants, and projects" -icon: "users" +icon: "/icons/hugeicons/user-multiple.svg" --- Most apps built on Supermemory serve more than one user, customer, or tenant out of a single Supermemory organization. Multi-tenancy is how you keep those memories apart — so User A's data is never visible to User B, and so you can still slice and query within a user's own data by things like category, status, or date. @@ -10,10 +10,10 @@ Most apps built on Supermemory serve more than one user, customer, or tenant out Supermemory gives you two complementary tools for this: - + **Isolation.** A container tag is a hard boundary — its own namespace. Memories in one tag are never returned by a search scoped to another tag. - + **Organization.** Metadata is a set of custom key/value properties on a memory that you filter by — category, priority, date, participants, anything you define. @@ -99,16 +99,16 @@ Container tags aren't just organizational — they're enforced as an authorizati ## Next steps - + Personal agents, company agents, email assistants, and support platforms. - + How isolation works, naming rules, and access control. - + Metadata filter types, combining `AND`/`OR`, and query limits. - + Mint keys that can only touch one container tag. diff --git a/apps/docs/concepts/rules.mdx b/apps/docs/concepts/rules.mdx index 735c9227..1464068b 100644 --- a/apps/docs/concepts/rules.mdx +++ b/apps/docs/concepts/rules.mdx @@ -2,7 +2,7 @@ title: "Rules of supermemory" description: "Best practices and things to consider when using supermemory in your system" sidebarTitle: "Rules of supermemory" -icon: "gavel" +icon: "/icons/hugeicons/justice-scale-01.svg" --- Supermemory provides powerful primitives and the full context stack for building AI agents. This page collects rules of thumb from building and running supermemory in production. They aren't hard constraints, just shortcuts that save you time, cost, and confusing search results. @@ -30,7 +30,7 @@ Agents benefit most from having a _general_ idea of the topic alongside tools to Two things about this table that trip people up. -**"Remember" and "look up" are both supermemory, but different reads.** You [ingest documents](/ingestion/add-memories); the pipeline derives memories from them and maintains a profile per [container tag](/concepts/how-it-works). `client.search({ searchMode: "memories" })` recalls the derived facts. `client.search({ searchMode: "documents" })` recalls the source material itself. A support agent usually needs both: memories for "this customer runs self-hosted and already tried reinstalling", documents for the actual troubleshooting guide. +**"Remember" and "look up" are both supermemory, but different reads.** You [ingest documents](/ingestion/add-memories); the pipeline derives memories from them and maintains a profile per container tag. `client.search({ searchMode: "memories" })` recalls the derived facts. `client.search({ searchMode: "documents" })` recalls the source material itself. A support agent usually needs both: memories for "this customer runs self-hosted and already tried reinstalling", documents for the actual troubleshooting guide. **Supermemory is not your system of record.** There's no SQL over memories, no joins, no aggregates, no querying by primary key. Keep transactional data in your database, and ingest the narrative *around* it ("the customer disputed invoice #4821 and churned over it") so your AI understands what the rows mean. diff --git a/apps/docs/concepts/super-rag.mdx b/apps/docs/concepts/super-rag.mdx index f4de2789..9e3eccaa 100644 --- a/apps/docs/concepts/super-rag.mdx +++ b/apps/docs/concepts/super-rag.mdx @@ -1,13 +1,13 @@ --- -title: "SuperRAG (Managed RAG as a service)" +title: "SuperRAG (managed RAG as a service)" sidebarTitle: "SuperRAG" description: "Supermemory provides a managed RAG solution - extraction, indexing, storing, and retrieval." -icon: "bolt" +icon: "/icons/hugeicons/flash.svg" --- Supermemory doesn't just store your content—it transforms it into optimized, searchable knowledge. Every upload goes through an intelligent pipeline that extracts, chunks, and indexes content in the ideal way for its type. -## Automatic Content Intelligence +## Automatic content intelligence When you add content, Supermemory: @@ -86,7 +86,7 @@ When you're searching over a mix of both, `searchMode: "hybrid"` (below) is what --- -## Smart Chunking by Content Type +## Smart chunking by content type Different content types need different chunking strategies. Supermemory applies the optimal approach automatically: @@ -121,7 +121,7 @@ Code is chunked using [code-chunk](https://github.com/supermemoryai/code-chunk), This means searching for "authentication middleware" finds the actual function, not a random slice of code. -### Web Pages +### Web pages URLs are fetched, cleaned of navigation/ads, and chunked by article structure — headings, paragraphs, lists. @@ -133,18 +133,18 @@ See [Content Types](/concepts/content-types) for the full list of supported form --- -## Hybrid Memory + RAG +## Hybrid memory + RAG Supermemory combines the best of both approaches in every search: - + - Finds similar document chunks - Great for knowledge retrieval - Stateless — same results for everyone - + - Extracts and tracks user facts - Understands temporal context - Personalizes results per user @@ -168,7 +168,7 @@ const results = await client.search({ --- -## Search Optimization +## Search optimization Two flags give you fine-grained control over result quality: @@ -185,7 +185,7 @@ const results = await client.search({ **When to use:** Complex queries, technical documentation, when precision matters more than speed. -### Query Rewriting +### Query rewriting Expands your query to capture more relevant results: @@ -200,7 +200,7 @@ const results = await client.search({ --- -## Why It's "Super" +## Why it's "Super" | Traditional RAG | SUPER RAG | |-----------------|-----------| @@ -214,25 +214,25 @@ You focus on building your product. Supermemory handles the RAG complexity. --- -## Next Steps +## Next steps - + All supported formats and how they're processed - + The full processing pipeline - + When to use each approach - + Search parameters and optimization - + Exact meter rates for memory vs SuperRAG tokens - + `taskType` and other ingestion parameters diff --git a/apps/docs/concepts/user-profiles.mdx b/apps/docs/concepts/user-profiles.mdx index 4be4f8b9..980f054a 100644 --- a/apps/docs/concepts/user-profiles.mdx +++ b/apps/docs/concepts/user-profiles.mdx @@ -1,8 +1,8 @@ --- -title: "User Profiles" +title: "User profiles" sidebarTitle: "Profiles" description: "Automatically maintained context about your users" -icon: "circle-user" +icon: "/icons/hugeicons/user-circle.svg" --- User profiles are **automatically maintained collections of facts about your users** that Supermemory builds from all their interactions. Think of it as a persistent "about me" document that's always up-to-date. @@ -12,10 +12,10 @@ Each `containerTag` gets it's own profile. > Note: It's called "user" profile, but in reality it can be anything - an agent, organization, etc. - + No search needed — comprehensive user info always ready - + Profiles update as users interact with your system @@ -70,11 +70,11 @@ This is the general pattern: names, pronouns, timezone, tone/format preferences, --- -## Static vs Dynamic +## Static vs dynamic Profiles separate two types of information: -### Static Profile +### Static profile Long-term, stable facts: @@ -82,7 +82,7 @@ Long-term, stable facts: - "Sarah specializes in distributed systems" - "Sarah prefers technical docs over video tutorials" -### Dynamic Profile +### Dynamic profile Recent context and temporary states: @@ -111,13 +111,13 @@ console.log(profile.buckets.goals); Bucket descriptions steer the classifier, so a precise description ("explicit first-person preferences only, exclude inferred traits") produces cleaner buckets than a vague one. Buckets are separate from [`filterPrompt`](/concepts/customization), which controls what gets ingested at all — buckets only organize facts that already made it into the profile. - + Request bucketed profiles, create buckets at the org or space level, get AI-generated suggestions, and see validation limits. --- -## How It Works +## How it works Profiles are built automatically through ingestion: @@ -132,7 +132,7 @@ You don't manually manage profiles — they build themselves as users interact. --- -## Profiles + Search +## Profiles + search Profiles don't replace search — they complement it: @@ -153,7 +153,7 @@ User asks: **"Can you help me debug this?"** --- -## Filtering Profiles +## Filtering profiles Not many people realize this, but profiles support the same [metadata filtering](/concepts/filtering) as memory and document search. A profile is synthesized from the underlying memories in a container tag, so any `AND`/`OR` metadata filter you'd pass to `search` also narrows which memories are eligible to contribute to `static`, `dynamic`, and `buckets`. @@ -183,9 +183,9 @@ Filters apply on top of the search query too — combine `q` and `filters` to sc --- -## Use Cases +## Use cases -### Personalized AI Assistants +### Personalized AI assistants Profiles provide: expertise level, communication preferences, tools used, current projects. @@ -198,7 +198,7 @@ Current focus: ${profile.dynamic.join('\n')} Adjust responses to their expertise and preferences.`; ``` -### Customer Support +### Customer support Profiles provide: product usage, previous issues, tech proficiency. @@ -206,32 +206,32 @@ Profiles provide: product usage, previous issues, tech proficiency. - Agents immediately understand context - AI support references past interactions naturally -### Educational Platforms +### Educational platforms Profiles provide: learning style, completed courses, strengths/weaknesses. -### Development Tools +### Development tools Profiles provide: preferred languages, coding style, current project context. --- -## Next Steps +## Next steps - + Fetch and use profiles via the API - + Create and configure topical buckets - + How the underlying knowledge graph works - + Automatic profile injection with AI SDK - + Build profiles by adding content diff --git a/apps/docs/connectors/github.mdx b/apps/docs/connectors/github.mdx index e3a9fb63..c89b6050 100644 --- a/apps/docs/connectors/github.mdx +++ b/apps/docs/connectors/github.mdx @@ -1,5 +1,5 @@ --- -title: "GitHub Connector" +title: "GitHub connector" description: "Connect GitHub repositories to sync documentation files into your Supermemory knowledge base" icon: "/images/github-icon.svg" --- @@ -10,9 +10,9 @@ Connect GitHub repositories to sync documentation files into your Supermemory kn The GitHub connector requires a **Scale Plan** or **Enterprise Plan**. -## Quick Setup +## Quick setup -### 1. Create GitHub Connection +### 1. Create GitHub connection @@ -86,11 +86,11 @@ The GitHub connector requires a **Scale Plan** or **Enterprise Plan**. - `admin:repo_hook` - Manage webhooks for incremental sync -### 2. Handle OAuth Callback +### 2. Handle OAuth callback After the user grants permissions, GitHub redirects to your callback URL. The connection is automatically established, and the user can now select which repositories to sync. -### 3. List and Configure Repositories +### 3. List and configure repositories Unlike other connectors, GitHub requires repository selection before syncing begins. This gives your users control over which repositories to index. @@ -202,7 +202,7 @@ Supermemory provides the API endpoints to list and configure repositories. As a This gives you complete control over the user experience and allows you to integrate repository selection seamlessly into your application's workflow. -## Supported Document Types +## Supported document types The GitHub connector syncs documentation and text files with the following extensions: @@ -218,7 +218,7 @@ Files are indexed as `github_markdown` document type in Supermemory. Only text-based documentation files are synced. Binary files, images, and code files (`.js`, `.py`, `.go`, etc.) are excluded by default to focus on searchable documentation content. -## Incremental Sync with Webhooks +## Incremental sync with webhooks The GitHub connector automatically sets up webhooks for real-time incremental syncing. When files are pushed or deleted in configured repositories, Supermemory is notified immediately. @@ -226,14 +226,14 @@ The GitHub connector automatically sets up webhooks for real-time incremental sy **Batch Processing:** Webhook events are processed in batches with a 10-minute delay to optimize performance and prevent excessive syncing during rapid commits. This means changes pushed to your repository will be reflected in Supermemory within approximately 10 minutes. -### How It Works +### How it works 1. **Webhook Setup**: When you configure repositories, a webhook is automatically installed in each repository 2. **Push Events**: When commits are pushed to the default branch, changed documentation files are synced 3. **Delete Events**: When documentation files are deleted, they're removed from your Supermemory knowledge base 4. **Incremental Updates**: Only changed files are processed, keeping sync fast and efficient -### Webhook Security +### Webhook security Webhooks are secured using HMAC-SHA256 signature validation with constant-time comparison. Supermemory automatically validates that webhook events come from GitHub before processing them. Each repository gets a unique webhook secret for maximum security. @@ -269,9 +269,9 @@ Webhooks are secured using HMAC-SHA256 signature validation with constant-time c -## Connection Management +## Connection management -### List All Connections +### List all connections @@ -325,7 +325,7 @@ Webhooks are secured using HMAC-SHA256 signature validation with constant-time c -### Update Repository Configuration +### Update repository configuration You can update which repositories are synced at any time: @@ -404,7 +404,7 @@ When you update the repository configuration: - Existing documents from removed repositories remain in Supermemory unless you delete them manually -### Delete Connection +### Delete connection @@ -451,7 +451,7 @@ Deleting a GitHub connection will: - **Permanently delete all synced documents** from your Supermemory knowledge base (unless you pass `deleteDocuments=false` as a query parameter to keep them) -### Manual Sync +### Manual sync Trigger a manual synchronization for all configured repositories: @@ -502,9 +502,9 @@ Trigger a manual synchronization for all configured repositories: -## Advanced Configuration +## Advanced configuration -### Custom OAuth Application +### Custom OAuth application For white-label deployments or custom branding, configure your own GitHub OAuth app using the settings API: diff --git a/apps/docs/connectors/gmail.mdx b/apps/docs/connectors/gmail.mdx index b0b0c3f8..7dc62e88 100644 --- a/apps/docs/connectors/gmail.mdx +++ b/apps/docs/connectors/gmail.mdx @@ -1,7 +1,7 @@ --- -title: "Gmail Connector" +title: "Gmail connector" description: "Sync email threads from Gmail with real-time Pub/Sub webhooks and incremental sync" -icon: "mail" +icon: "/icons/hugeicons/mail-01.svg" --- Connect Gmail to automatically sync email threads into your supermemory knowledge base. Supports real-time updates via Google Cloud Pub/Sub webhooks and incremental synchronization. @@ -10,9 +10,9 @@ Connect Gmail to automatically sync email threads into your supermemory knowledg **Max Plan Required:** The Gmail connector is available on Max plan and above. -## Quick Setup +## Quick setup -### 1. Create Gmail Connection +### 1. Create Gmail connection @@ -79,11 +79,11 @@ Connect Gmail to automatically sync email threads into your supermemory knowledg -### 2. Handle OAuth Callback +### 2. Handle OAuth callback After user grants permissions, Google redirects to your callback URL. The connection is automatically established and the initial sync begins. -### 3. Check Connection Status +### 3. Check connection status @@ -146,9 +146,9 @@ After user grants permissions, Google redirects to your callback URL. The connec -## What Gets Synced +## What gets synced -### Email Threads +### Email threads Gmail threads (conversations) are synced as individual documents with all messages included: @@ -158,7 +158,7 @@ Gmail threads (conversations) are synced as individual documents with all messag - **HTML content** converted to clean markdown - **Attachment metadata**: filename, mime type, size (attachments are referenced, not stored) -### Document Metadata +### Document metadata Each synced thread includes searchable metadata: @@ -190,9 +190,9 @@ const results = await client.search({ }); ``` -## Connection Management +## Connection management -### List All Connections +### List all connections @@ -241,7 +241,7 @@ const results = await client.search({ -### Delete Connection +### Delete connection @@ -295,7 +295,7 @@ Deleting a connection will: - Keep existing synced documents in supermemory (they won't be deleted) -### Manual Sync +### Manual sync Trigger a manual synchronization: @@ -344,7 +344,7 @@ Trigger a manual synchronization: -## Sync Mechanism +## Sync mechanism Gmail connector supports multiple sync methods: @@ -355,7 +355,7 @@ Gmail connector supports multiple sync methods: | **Manual sync** | On-demand via API | | **Incremental sync** | Uses Gmail `historyId` to fetch only changed threads | -### How Real-time Sync Works +### How real-time sync works 1. When a connection is created, supermemory registers a Gmail API "watch" subscription 2. Gmail sends notifications to a Google Cloud Pub/Sub topic when emails change @@ -366,7 +366,7 @@ Gmail connector supports multiple sync methods: Real-time sync monitors the **INBOX** label. Emails in other labels are synced via scheduled/manual sync. -## Permissions & Scopes +## Permissions & scopes The Gmail connector requests the following OAuth scopes: @@ -393,7 +393,7 @@ The Gmail connector requests the following OAuth scopes: ## Troubleshooting -### OAuth Fails or Missing Refresh Token +### OAuth fails or missing refresh token If OAuth fails or the connection stops syncing: @@ -416,7 +416,7 @@ const newConnection = await client.connections.create('gmail', { window.location.href = newConnection.authLink; ``` -### Emails Not Syncing in Real-time +### Emails not syncing in real-time If real-time sync isn't working: @@ -425,7 +425,7 @@ If real-time sync isn't working: - Check if the connection was created recently (watch registration happens on creation) - Trigger a manual sync to verify the connection is working -### Permission Denied Errors +### Permission denied errors If you see permission errors: diff --git a/apps/docs/connectors/google-drive.mdx b/apps/docs/connectors/google-drive.mdx index 45cde2e0..4c3396f8 100644 --- a/apps/docs/connectors/google-drive.mdx +++ b/apps/docs/connectors/google-drive.mdx @@ -1,5 +1,5 @@ --- -title: "Google Drive Connector" +title: "Google Drive connector" description: "Connect Google Drive to sync documents into your Supermemory knowledge base" icon: "/images/google-drive-icon.svg" --- @@ -18,9 +18,9 @@ Connect Google Drive to sync documents into your Supermemory knowledge base with If you use scoped sync and the user has not finished the picker yet, **scheduled or manual import may skip that connection** until a selection is saved on the connection. -## Quick Setup +## Quick setup -### 1. Create Google Drive Connection +### 1. Create Google Drive connection @@ -94,11 +94,11 @@ If you use scoped sync and the user has not finished the picker yet, **scheduled For **whole Drive** sync, include `"syncScope": "full"` in `metadata` on the same `POST /v3/connections/google-drive` request instead of `"selected"`. -### 2. Handle OAuth Callback +### 2. Handle OAuth callback -After the user grants permissions, Google redirects through Supermemory to finish the connection. With **scoped** sync (`syncScope` omitted or `"selected"`), the user is sent to Supermemory’s **hosted file and folder picker**; they must complete that step before imports run. With **`syncScope: "full"`**, Supermemory redirects to your `redirectUrl` (or returns connection details) **without** the picker. You can open the picker again later for an existing connection (Supermemory console, or `POST /v3/connections/{connectionId}/google-drive/hosted-picker` with an authenticated admin session). +After the user grants permissions, Google redirects through Supermemory to finish the connection. With scoped sync (`syncScope` omitted or `"selected"`), the user is sent to Supermemory's hosted file and folder picker and **must finish that step before imports run**. With `syncScope: "full"`, Supermemory skips the picker and redirects to your `redirectUrl` (or returns connection details). You can open the picker again later for an existing connection (Supermemory console, or `POST /v3/connections/{connectionId}/google-drive/hosted-picker` with an authenticated admin session). -### 3. Check Connection Status +### 3. Check connection status @@ -147,7 +147,7 @@ After the user grants permissions, Google redirects through Supermemory to finis -## Supported Document Types +## Supported document types Based on the API type definitions, Google Drive documents are identified with these types: - `google_doc` - Google Docs @@ -158,9 +158,9 @@ Based on the API type definitions, Google Drive documents are identified with th Drive documents are converted to markdown before ingestion. This conversion is lossy — some formatting may not be preserved. -## Connection Management +## Connection management -### List All Connections +### List all connections @@ -220,7 +220,7 @@ Drive documents are converted to markdown before ingestion. This conversion is l -### Delete Connection +### Delete connection @@ -278,7 +278,7 @@ Deleting a connection will: - Keep existing synced documents in Supermemory (they won't be deleted) -### Manual Sync +### Manual sync Trigger a manual synchronization: @@ -331,9 +331,9 @@ Trigger a manual synchronization: -## Advanced Configuration +## Advanced configuration -### Custom OAuth Application +### Custom OAuth application Configure your own Google OAuth app using the settings API: @@ -387,7 +387,7 @@ Configure your own Google OAuth app using the settings API: -### Document Filtering +### Document filtering Configure filtering using the settings API: diff --git a/apps/docs/connectors/granola.mdx b/apps/docs/connectors/granola.mdx index 92b878f3..e75e8fdb 100644 --- a/apps/docs/connectors/granola.mdx +++ b/apps/docs/connectors/granola.mdx @@ -1,5 +1,5 @@ --- -title: "Granola Connector" +title: "Granola connector" description: "Sync AI meeting notes and transcripts from Granola into your Supermemory knowledge base" icon: "/images/granola.svg" --- @@ -10,9 +10,9 @@ Connect Granola to sync AI meeting notes and transcripts into your Supermemory k The Granola connector requires a **Pro Plan** or higher in Supermemory and a Granola plan that can create API keys. In Granola, create one from **Settings > Connectors > API keys**. -## Quick Setup +## Quick setup -### From the Console +### From the console 1. Open the [Supermemory Console](https://console.supermemory.ai). 2. Go to **Connectors**. @@ -86,7 +86,7 @@ The console limits connector setup to 500 documents. Use the API setup below for Supermemory validates the Granola API key before creating the connection. The initial sync starts automatically after the connection is created. -## Configuration Options +## Configuration options For Granola, provider-specific fields are passed inside the top-level `metadata` object. General connection options stay top-level. @@ -100,7 +100,7 @@ For Granola, provider-specific fields are passed inside the top-level `metadata` In the Python SDK, use `container_tags` and `document_limit` for top-level options, but keep the Granola metadata key in camelCase: `apiKey`. -## What Gets Synced +## What gets synced Granola notes are synced as markdown documents. Each document can include: @@ -109,7 +109,7 @@ Granola notes are synced as markdown documents. Each document can include: - AI-generated summary when present - Full transcript when present -### Document Metadata +### Document metadata Each synced note includes searchable metadata: @@ -139,9 +139,9 @@ const results = await client.search({ }); ``` -## Connection Management +## Connection management -### Delete Connection +### Delete connection @@ -166,7 +166,7 @@ const results = await client.search({ By default, deleting a connection removes all synced documents from Supermemory. To keep documents, pass `deleteDocuments=false` as a query parameter: `DELETE /v3/connections/:id?deleteDocuments=false` -### Manual Sync +### Manual sync @@ -194,7 +194,7 @@ By default, deleting a connection removes all synced documents from Supermemory. -## Sync Behavior +## Sync behavior | Feature | Behavior | |---------|----------| diff --git a/apps/docs/connectors/managing-resources.mdx b/apps/docs/connectors/managing-resources.mdx index 24cab0ec..e26c1e6a 100644 --- a/apps/docs/connectors/managing-resources.mdx +++ b/apps/docs/connectors/managing-resources.mdx @@ -1,6 +1,6 @@ --- -title: 'Managing Connection Resources' -sidebarTitle: 'Managing Resources' +title: 'Managing connection resources' +sidebarTitle: 'Managing resources' description: 'Get and configure resources for connections that support resource management' icon: 'folder-sync' --- @@ -11,7 +11,7 @@ icon: 'folder-sync' Some connectors require you to select which resources (e.g., repositories) to sync before syncing begins. Use these generic endpoints to list and configure resources for connections that support resource management. -## Get Resources +## Get resources `GET /v3/connections/:connectionId/resources` @@ -66,7 +66,7 @@ curl -X GET \ ``` -### Query Parameters +### Query parameters - `page`: Optional. Page number for pagination. Default: `1` - `per_page`: Optional. Number of resources per page. Default: `30` @@ -101,7 +101,7 @@ curl -X GET \ **Provider Support:** Not all providers support resource fetching. This endpoint is only available for providers that implement the `fetchResources()` method (e.g., GitHub). For providers that don't support this, you'll receive a `501 Not Implemented` response. -## Configure Connection +## Configure connection `POST /v3/connections/:connectionId/configure` @@ -200,7 +200,7 @@ curl -X POST \ ``` -### Request Body +### Request body ```json { @@ -244,7 +244,7 @@ The structure of each resource object depends on the provider. For GitHub, resou **Provider Support:** Not all providers support resource configuration. This endpoint is only available for providers that implement the `configureConnection()` method (e.g., GitHub). For providers that don't support this, you'll receive a `501 Not Implemented` response. -## Example: GitHub Repository Selection +## Example: GitHub repository selection Here's a complete example for GitHub: diff --git a/apps/docs/connectors/notion.mdx b/apps/docs/connectors/notion.mdx index 421714a3..d7abbf4b 100644 --- a/apps/docs/connectors/notion.mdx +++ b/apps/docs/connectors/notion.mdx @@ -1,13 +1,13 @@ --- -title: "Notion Connector" +title: "Notion connector" description: "Sync Notion pages, databases, and blocks with real-time webhooks and workspace integration" icon: "/images/notion-icon.svg" --- Connect Notion workspaces to automatically sync pages, databases, and content blocks into your Supermemory knowledge base. Supports real-time updates, rich formatting, and database properties. -## Quick Setup +## Quick setup -### 1. Create Notion Connection +### 1. Create Notion connection @@ -75,11 +75,11 @@ Connect Notion workspaces to automatically sync pages, databases, and content bl -### 2. Handle OAuth Flow +### 2. Handle OAuth flow After user grants workspace access, Notion redirects to your callback URL. The connection is automatically established. -### 3. Monitor Sync Progress +### 3. Monitor sync progress @@ -151,30 +151,30 @@ After user grants workspace access, Notion redirects to your callback URL. The c ## Document limit -Each connection has a **`documentLimit`** (optional when creating the connection; allowed range **1–10,000**). For Notion, each sync run asks the Notion Search API for **pages** shared with the integration, ordered by **last edited time, newest first**, and **stops after that many pages** (or when Search has no more results). +Each connection has an optional `documentLimit` between 1 and 10,000. For Notion, each sync asks the Notion Search API for pages shared with the integration, newest edits first, and **stops after that many pages** or when Search runs out of results. - **Full sync:** If your workspace has more shareable pages than `documentLimit`, the rest are **not** included in that run. Pages that look “missing” are often older or less recently edited relative to that ordering. Increase `documentLimit` or trigger another sync after pages change if you need broader coverage. - **Incremental sync:** Only pages edited **after** the previous sync are candidates; each one still counts toward the same `documentLimit`. If more pages changed than the limit since last sync, only the first batch in that newest-first order is returned for that run. Nested and child pages still count as normal pages in Search if the integration can access them—they are not skipped *because* they are nested. The limit applies to **how many pages** are fetched per sync, not to depth. -## Supported Content Types +## Supported content types -### Notion Pages +### Notion pages - **Rich text blocks** with formatting preserved - **Nested pages** and hierarchical structure - **Embedded content** (images, videos, files) - **Code blocks** with syntax highlighting - **Callouts and quotes** converted to markdown -### Notion Databases +### Notion databases - **Database entries** synced as individual documents - **Properties** included in metadata - **Relations** between database entries - **Formulas and rollups** calculated values - **Multi-select and select** properties -### Block Types +### Block types | Block Type | Processing | Markdown Output | |------------|------------|-----------------| @@ -188,7 +188,7 @@ Nested and child pages still count as normal pages in Search if the integration | **Image** | Referenced with metadata | `![alt text](url)` | | **Embed** | Link with context | `[Embedded Content](url)` | -## Delete Connection +## Delete connection Remove a Notion connection when no longer needed: @@ -242,9 +242,9 @@ Deleting a connection will: - Keep existing synced documents in Supermemory (they won't be deleted) -## Advanced Configuration +## Advanced configuration -### Custom Notion Integration +### Custom Notion integration For production deployments, create your own Notion integration: @@ -299,7 +299,7 @@ For production deployments, create your own Notion integration: -### Content Filtering +### Content filtering Control which Notion content gets synced: @@ -369,7 +369,7 @@ Control which Notion content gets synced: -## Workspace Permissions +## Workspace permissions Notion connector respects workspace permissions: @@ -381,9 +381,9 @@ Notion connector respects workspace permissions: | **No Access** | Removed from index | -## Database Integration +## Database integration -### Database Properties +### Database properties Notion database properties are mapped to metadata: @@ -412,7 +412,7 @@ const projectWithStatus = await client.search({ }); ``` -### Optimization Strategies +### Optimization strategies 1. **Set `documentLimit` high enough** for your workspace size (see [Document limit](#document-limit)) 2. **Use targeted container tags** for efficient organization diff --git a/apps/docs/connectors/onedrive.mdx b/apps/docs/connectors/onedrive.mdx index fcd1ca3a..1cdf60fb 100644 --- a/apps/docs/connectors/onedrive.mdx +++ b/apps/docs/connectors/onedrive.mdx @@ -1,5 +1,5 @@ --- -title: "OneDrive Connector" +title: "OneDrive connector" description: "Sync Microsoft Office documents from OneDrive with scheduled synchronization and business account support" icon: "/images/microsoft-icon.svg" --- @@ -7,9 +7,9 @@ icon: "/images/microsoft-icon.svg" Connect OneDrive to automatically sync Word documents, Excel spreadsheets, and PowerPoint presentations into your Supermemory knowledge base. Supports both personal and business accounts with scheduled synchronization. -## Quick Setup +## Quick setup -### 1. Create OneDrive Connection +### 1. Create OneDrive connection @@ -89,7 +89,7 @@ curl -X POST "https://api.supermemory.ai/v3/connections/onedrive" \ After user grants permissions, Microsoft redirects to your callback URL. The connection is automatically established and initial sync begins. -### 3. Monitor Sync Status +### 3. Monitor sync status ```typescript Typescript @@ -138,32 +138,32 @@ After user grants permissions, Microsoft redirects to your callback URL. The con ``` -## Supported Document Types +## Supported document types -### Microsoft Word Documents +### Microsoft Word documents - **Rich text formatting** converted to markdown - **Headers and styles** preserved as markdown hierarchy - **Images and charts** extracted and referenced - **Tables** converted to markdown tables -### Excel Spreadsheets +### Excel spreadsheets - **Worksheet data** converted to structured markdown - **Multiple sheets** processed separately - **Charts and graphs** extracted as images - **Formulas** converted to calculated values - **Cell formatting** simplified in markdown -### PowerPoint Presentations +### PowerPoint presentations - **Slide content** converted to structured markdown - **Speaker notes** included when present - **Images and media** extracted and referenced - **Embedded objects** processed when possible -## Sync Mechanism +## Sync mechanism Webhooks lead to real-time syncing of changes in documents. You may also manually trigger a sync. -### Manual Sync Trigger +### Manual sync trigger ```typescript Typescript @@ -198,7 +198,7 @@ Webhooks lead to real-time syncing of changes in documents. You may also manuall ``` -## Delete Connection +## Delete connection Remove a OneDrive connection when no longer needed: @@ -250,9 +250,9 @@ Deleting a connection will: - Keep existing synced documents in Supermemory (they won't be deleted) -## Advanced Configuration +## Advanced configuration -### Custom Microsoft App +### Custom Microsoft app For production deployments, configure your own Microsoft application: @@ -301,7 +301,7 @@ For production deployments, configure your own Microsoft application: ``` -### Document Filtering +### Document filtering Control which OneDrive documents get synced: @@ -366,7 +366,7 @@ Control which OneDrive documents get synced: ``` -### Optimization Tips +### Optimization tips 1. **Set realistic document limits** based on storage and usage 2. **Use targeted filtering** to sync only business-critical documents diff --git a/apps/docs/connectors/overview.mdx b/apps/docs/connectors/overview.mdx index 5b40ef2b..4320954f 100644 --- a/apps/docs/connectors/overview.mdx +++ b/apps/docs/connectors/overview.mdx @@ -1,13 +1,13 @@ --- -title: "Connectors Overview" +title: "Connectors overview" description: "Integrate Google Drive, Gmail, Notion, OneDrive, GitHub, Granola and Web Crawler to automatically sync documents into your knowledge base" sidebarTitle: "Overview" -icon: "layers" +icon: "/icons/hugeicons/layers-01.svg" --- Connect external platforms to automatically sync documents into supermemory. Supported connectors include Google Drive, Gmail, Notion, OneDrive, GitHub, Granola and Web Crawler with real-time synchronization and intelligent content processing. -## Supported Connectors +## Supported connectors @@ -16,7 +16,7 @@ Connect external platforms to automatically sync documents into supermemory. Sup Real-time sync via webhooks. Supports shared drives, nested folders, and collaborative documents. - + **Email Threads** Real-time sync via Pub/Sub webhooks. Syncs threads with full conversation history and metadata. @@ -47,16 +47,16 @@ Connect external platforms to automatically sync documents into supermemory. Sup Syncs AI meeting notes, summaries, attendees, and transcripts from your Granola workspace. - + **Web Pages, Documentation** Crawl websites automatically with robots.txt compliance. Scheduled recrawling keeps content up to date. -## Quick Start +## Quick start -### 1. Create Connection +### 1. Create connection @@ -123,11 +123,11 @@ curl -X POST "https://api.supermemory.ai/v3/connections/notion" \ -### 2. Handle OAuth Callback +### 2. Handle OAuth callback After user completes OAuth, the connection is automatically established and sync begins. -### 3. Monitor Sync Status +### 3. Monitor sync status @@ -203,16 +203,16 @@ curl -X POST "https://api.supermemory.ai/v3/documents/list" \ -## How Connectors Work +## How connectors work -### Authentication Flow +### Authentication flow 1. **Create Connection**: Call `/v3/connections/{provider}` to get an OAuth URL, or create a direct credential-based connection for Granola or Web Crawler 2. **User Authorization**: Redirect user to complete OAuth flow when the provider requires it 3. **Automatic Setup**: Connection established, sync begins immediately 4. **Continuous Sync**: Real-time updates via webhooks + scheduled sync every 4 hours (or scheduled recrawling for Web Crawler) -### Document Processing Pipeline +### Document processing pipeline ```mermaid graph TD @@ -225,7 +225,7 @@ graph TD E --> G[Document Search] ``` -### Sync Mechanisms +### Sync mechanisms | Provider | Real-time Sync | Scheduled Sync | Manual Sync | |----------|---------------|----------------|-------------| @@ -238,9 +238,9 @@ graph TD | **Web Crawler** | ❌ Not supported | ✅ Scheduled recrawling (7+ days) | ✅ On-demand | -## Connection Management +## Connection management -### List All Connections +### List all connections @@ -292,7 +292,7 @@ curl -X POST "https://api.supermemory.ai/v3/connections/list" \ -### Delete Connections +### Delete connections The `DELETE /v3/connections/:connectionId` endpoint accepts an optional `deleteDocuments` query parameter: @@ -369,7 +369,7 @@ curl -X DELETE "https://api.supermemory.ai/v3/connections/conn_abc123?deleteDocu -## Custom OAuth Applications +## Custom OAuth applications By default, Supermemory uses its own OAuth applications to connect to third-party providers. You can configure your own OAuth app credentials via `PATCH /v3/settings` for tighter control over data access — useful for enterprise customers. diff --git a/apps/docs/connectors/s3.mdx b/apps/docs/connectors/s3.mdx index 12d9a285..7e797475 100644 --- a/apps/docs/connectors/s3.mdx +++ b/apps/docs/connectors/s3.mdx @@ -1,7 +1,7 @@ --- title: "S3 Connector" description: "Connect Amazon S3 or S3-compatible storage to sync files into your Supermemory knowledge base" -icon: "database" +icon: "/icons/hugeicons/database-01.svg" --- Connect Amazon S3 buckets or S3-compatible storage services (MinIO, DigitalOcean Spaces, Cloudflare R2, Tigris) to sync files into your Supermemory knowledge base. @@ -10,7 +10,7 @@ Connect Amazon S3 buckets or S3-compatible storage services (MinIO, DigitalOcean The S3 connector requires a **Scale Plan** or higher. You can also create S3 connections directly from the [Supermemory Console](https://console.supermemory.ai). -## Quick Setup +## Quick setup @@ -69,7 +69,7 @@ The S3 connector requires a **Scale Plan** or higher. You can also create S3 con -## Configuration Options +## Configuration options For S3, provider-specific connection fields are passed inside the top-level `metadata` object. General connection options stay top-level. @@ -89,7 +89,7 @@ For S3, provider-specific connection fields are passed inside the top-level `met In the Python SDK, use `container_tags` for the top-level option, but keep S3 metadata keys in camelCase: `accessKeyId`, `secretAccessKey`, and `containerTagRegex`. -## S3-Compatible Services +## S3-compatible services Use `metadata.endpoint` to connect to S3-compatible storage. These services don't use AWS-style regions, so set `metadata.region` to `auto` — the value is still required for request signing but the service ignores it. @@ -134,7 +134,7 @@ const connection = await client.connections.create('s3', { For S3-compatible services, `metadata.endpoint` is the base S3 endpoint. Do not include the bucket name in the endpoint URL; pass the bucket separately as `metadata.bucket`. -## Prefix Filtering +## Prefix filtering Sync only files within a specific path: @@ -151,7 +151,7 @@ const connection = await client.connections.create('s3', { }); ``` -## Dynamic Container Tags +## Dynamic container tags Extract container tags from S3 key paths for multi-tenant setups: @@ -175,9 +175,9 @@ const connection = await client.connections.create('s3', { The regex must contain a named capture group `(?...)` and be less than 200 characters. -## Connection Management +## Connection management -### Delete Connection +### Delete connection @@ -197,7 +197,7 @@ The regex must contain a named capture group `(?...)` and be less than 2 By default, deleting a connection removes all synced documents from Supermemory. To keep documents, pass `deleteDocuments=false` as a query parameter: `DELETE /v3/connections/:id?deleteDocuments=false` -### Manual Sync +### Manual sync @@ -217,7 +217,7 @@ By default, deleting a connection removes all synced documents from Supermemory. -## Sync Behavior +## Sync behavior | Feature | Behavior | |---------|----------| @@ -226,7 +226,7 @@ By default, deleting a connection removes all synced documents from Supermemory. | **Sync schedule** | Every 4 hours + manual triggers | | **Document limit** | 10,000 files per connection (default) | -## IAM Permissions +## IAM permissions Minimum required permissions: @@ -246,7 +246,7 @@ Minimum required permissions: } ``` -## Error Codes +## Error codes | Code | Message | Solution | |------|---------|----------| diff --git a/apps/docs/connectors/troubleshooting.mdx b/apps/docs/connectors/troubleshooting.mdx index 14ad22d7..a6d81378 100644 --- a/apps/docs/connectors/troubleshooting.mdx +++ b/apps/docs/connectors/troubleshooting.mdx @@ -1,13 +1,13 @@ --- -title: "Connector Troubleshooting" +title: "Connector troubleshooting" sidebarTitle: "Troubleshooting" description: "Diagnose and resolve common issues with Google Drive, Gmail, Notion, and OneDrive connectors" -icon: "wrench" +icon: "/icons/hugeicons/wrench-01.svg" --- Quick guide to resolve common connector issues with authentication, syncing, and permissions. -## Quick Health Check +## Quick health check Check if your connectors are working properly: @@ -66,9 +66,9 @@ curl -X POST "https://api.supermemory.ai/v3/documents/list" \ -## Common Issues +## Common issues -### OAuth Callback Fails +### OAuth callback fails **Problem:** "Invalid redirect URI" error after user grants permissions @@ -90,7 +90,7 @@ const connection = await client.connections.create('notion', { - Copy the exact URL from your OAuth app settings - Test the flow in development first -### Documents Not Syncing +### Documents not syncing **Problem:** Documents stuck in "queued" or "extracting" status for over 30 minutes @@ -108,7 +108,7 @@ If documents consistently fail: - Verify you have permission to access the documents - Ensure the document type is supported -### Permission Denied Errors +### Permission denied errors **Problem:** Some documents show "permission denied" or aren't syncing @@ -129,7 +129,7 @@ const newConnection = await client.connections.create('google-drive', { window.location.href = newConnection.authLink; ``` -### Sync Takes Too Long +### Sync takes too long **Problem:** Hundreds of documents taking hours to sync @@ -143,7 +143,7 @@ const connection = await client.connections.create('onedrive', { }); ``` -## Provider-Specific Issues +## Provider-specific issues ### Google Drive @@ -226,7 +226,7 @@ Gmail connector requires Scale Plan or Enterprise Plan. If you see access errors - Contact support to upgrade your plan -## Best Practices +## Best practices 1. **Set reasonable document limits** - Start with 500-1000 documents 2. **Use descriptive container tags** - Makes debugging easier diff --git a/apps/docs/connectors/web-crawler.mdx b/apps/docs/connectors/web-crawler.mdx index 36808bb0..0eac2088 100644 --- a/apps/docs/connectors/web-crawler.mdx +++ b/apps/docs/connectors/web-crawler.mdx @@ -1,7 +1,7 @@ --- -title: "Web Crawler Connector" +title: "Web Crawler connector" description: "Crawl and sync websites automatically with scheduled recrawling and robots.txt compliance" -icon: "globe" +icon: "/icons/hugeicons/globe-02.svg" --- Connect websites to automatically crawl and sync web pages into your Supermemory knowledge base. The web crawler respects robots.txt rules, includes SSRF protection, and automatically recrawls sites on a schedule. @@ -10,9 +10,9 @@ Connect websites to automatically crawl and sync web pages into your Supermemory The web crawler connector requires a **Scale Plan** or **Enterprise Plan**. -## Quick Setup +## Quick setup -### 1. Create Web Crawler Connection +### 1. Create Web Crawler connection @@ -85,11 +85,11 @@ The web crawler connector requires a **Scale Plan** or **Enterprise Plan**. -### 2. Connection Established +### 2. Connection established Unlike other connectors, the web crawler doesn't require OAuth authentication. The connection is established immediately upon creation, and crawling begins automatically. -### 3. Monitor Sync Progress +### 3. Monitor sync progress @@ -162,22 +162,22 @@ Unlike other connectors, the web crawler doesn't require OAuth authentication. T -## Supported Content Types +## Supported content types -### Web Pages +### Web pages - **HTML content** extracted and converted to markdown - **Same-domain crawling** only (respects hostname boundaries) - **Robots.txt compliance** - respects disallow rules - **Content filtering** - only HTML pages (skips non-HTML content) -### URL Requirements +### URL requirements The web crawler only processes valid public URLs: - Must be a public URL (not localhost, private IPs, or internal domains) - Must be accessible from the internet - Must return HTML content (non-HTML files are skipped) -## Sync Mechanism +## Sync mechanism The web crawler uses **scheduled recrawling** rather than real-time webhooks: @@ -189,9 +189,9 @@ The web crawler uses **scheduled recrawling** rather than real-time webhooks: The recrawl schedule is automatically assigned when the connection is created. Sites are recrawled periodically to keep content up to date, but updates are not instantaneous. -## Connection Management +## Connection management -### List All Connections +### List all connections @@ -248,7 +248,7 @@ The recrawl schedule is automatically assigned when the connection is created. S -### Delete Connection +### Delete connection Remove a web crawler connection when no longer needed: @@ -302,9 +302,9 @@ Deleting a connection will: - Remove the connection configuration -## Advanced Configuration +## Advanced configuration -### Content Filtering +### Content filtering Control which web pages get synced using the settings API: @@ -365,9 +365,9 @@ Control which web pages get synced using the settings API: -## Security & Compliance +## Security & compliance -### SSRF Protection +### SSRF protection Built-in protection against Server-Side Request Forgery (SSRF) attacks: - Blocks private IP addresses (10.x.x.x, 192.168.x.x, 172.16-31.x.x) @@ -375,7 +375,7 @@ Built-in protection against Server-Side Request Forgery (SSRF) attacks: - Blocks cloud metadata endpoints - Only allows public, internet-accessible URLs -### URL Validation +### URL validation All URLs are validated before crawling: - Must be valid HTTP/HTTPS URLs diff --git a/apps/docs/docs.json b/apps/docs/docs.json index 0d41141c..3729d522 100644 --- a/apps/docs/docs.json +++ b/apps/docs/docs.json @@ -8,23 +8,42 @@ }, "openapi": "https://api.supermemory.ai/v4/openapi" }, + "background": { + "color": { + "dark": "#0A0A0A", + "light": "#FFFFFF" + } + }, "colors": { - "dark": "#1E3A8A", - "light": "#3B82F6", - "primary": "#1E3A8A" + "dark": "#091120", + "light": "#F5F5F5", + "primary": "#091120" }, "contextual": { - "options": ["copy", "view", "assistant", "chatgpt", "claude"] + "options": [ + "copy", + "view", + "assistant", + "chatgpt", + "claude", + "mcp", + "add-mcp", + "cursor", + "vscode", + "download-spec" + ] + }, + "favicon": { + "light": "/favicon-light-mode.png", + "dark": "/favicon-dark-mode.png" }, - "favicon": "/favicon.png", "fonts": { "body": { - "family": "Space Grotesk", - "format": "woff2" + "family": "Geist" }, "heading": { - "family": "Space Grotesk", - "format": "woff2" + "family": "Geist", + "weight": 500 } }, "footer": { @@ -66,13 +85,14 @@ "pages": ["index"] }, { - "icon": "code", + "icon": "/icons/hugeicons/source-code.svg", "anchors": [ { - "anchor": "Developer Platform (API)", + "anchor": "Developer platform (API)", + "icon": "/icons/hugeicons/book-open-01.svg", "pages": [ { - "group": "Getting Started", + "group": "Getting started", "pages": [ "overview/what-is-supermemory", "overview/comparison", @@ -88,12 +108,12 @@ "concepts/content-types", { "group": "Retrieval", - "icon": "search", + "icon": "/icons/hugeicons/search-01.svg", "pages": ["concepts/super-rag", "concepts/memory-vs-rag"] }, { "group": "Multi-tenancy and filtering", - "icon": "users", + "icon": "/icons/hugeicons/user-multiple.svg", "pages": [ "concepts/multi-tenancy", "concepts/multi-tenancy-examples", @@ -102,8 +122,8 @@ ] }, { - "group": "User Profiles", - "icon": "id-card", + "group": "User profiles", + "icon": "/icons/hugeicons/id.svg", "pages": ["concepts/user-profiles", "user-profiles/buckets"] } ] @@ -116,7 +136,7 @@ "concepts/customization", { "group": "Ingestion", - "icon": "download", + "icon": "/icons/hugeicons/download-01.svg", "pages": [ "ingestion/add-memories", "ingestion/document-operations" @@ -124,7 +144,7 @@ }, { "group": "Connectors", - "icon": "plug", + "icon": "/icons/hugeicons/plug-01.svg", "pages": [ "connectors/overview", "connectors/notion", @@ -141,7 +161,7 @@ }, { "group": "Recall", - "icon": "upload", + "icon": "/icons/hugeicons/upload-01.svg", "pages": [ "recall/search", "recall/user-profiles", @@ -151,7 +171,7 @@ }, { "group": "SMFS", - "icon": "database", + "icon": "/icons/hugeicons/database-01.svg", "pages": [ "smfs/overview", "smfs/install", @@ -160,7 +180,7 @@ "smfs/bash-tool-python", { "group": "Providers", - "icon": "cloud", + "icon": "/icons/hugeicons/cloud.svg", "pages": [ "smfs/providers/daytona", "smfs/providers/e2b", @@ -179,7 +199,7 @@ "pages": [ { "group": "Supermemory local", - "icon": "server", + "icon": "/icons/hugeicons/server-stack-01.svg", "pages": [ "self-hosting/overview", "self-hosting/quickstart", @@ -196,12 +216,12 @@ "pages": [ { "group": "General", - "icon": "book-open", + "icon": "/icons/hugeicons/book-open-01.svg", "pages": ["ingestion/batch-ingest-historical-data"] }, { "group": "Benchmarking", - "icon": "flask-conical", + "icon": "/icons/hugeicons/test-tube-01.svg", "pages": [ "memorybench/overview", "memorybench/extend-benchmark", @@ -216,11 +236,11 @@ ] }, { - "group": "Migration Guides", + "group": "Migration guides", "pages": [ { "group": "From another provider", - "icon": "truck", + "icon": "/icons/hugeicons/delivery-truck-01.svg", "pages": ["migration/from-mem0", "migration/from-zep"] } ] @@ -228,8 +248,8 @@ ] }, { - "anchor": "API Integrations", - "icon": "plug", + "anchor": "API integrations", + "icon": "/icons/hugeicons/plug-01.svg", "pages": [ "integrations/supermemory-sdk", "integrations/ai-sdk", @@ -252,22 +272,22 @@ "integrations/viasocket", "integrations/zapier", { - "group": "Migration Guides", - "icon": "arrow-up-right", + "group": "Migration guides", + "icon": "/icons/hugeicons/arrow-up-right-01.svg", "pages": ["migration/tools-v2-upgrade"] } ] }, { - "anchor": "API Reference", - "icon": "unplug", + "anchor": "API reference", + "icon": "/icons/hugeicons/plug-socket.svg", "openapi": "https://api.supermemory.ai/v4/openapi", "pages": [ "api-reference/overview", "authentication", { "group": "Ingest", - "icon": "download", + "icon": "/icons/hugeicons/download-01.svg", "pages": [ "api-reference/ingest", "POST /v3/documents", @@ -279,7 +299,7 @@ }, { "group": "Recall", - "icon": "search", + "icon": "/icons/hugeicons/search-01.svg", "pages": [ "api-reference/search", "POST /v4/search", @@ -291,7 +311,7 @@ }, { "group": "Documents", - "icon": "file-text", + "icon": "/icons/hugeicons/file-02.svg", "pages": [ "api-reference/documents", "POST /v3/documents/list", @@ -305,7 +325,7 @@ }, { "group": "Memories", - "icon": "database", + "icon": "/icons/hugeicons/database-01.svg", "pages": [ "api-reference/memories", "POST /v4/memories", @@ -317,7 +337,7 @@ }, { "group": "Container tags", - "icon": "tags", + "icon": "/icons/hugeicons/tag-01.svg", "pages": [ "api-reference/container-tags", "GET /v3/container-tags/{containerTag}", @@ -329,7 +349,7 @@ }, { "group": "Connections", - "icon": "plug", + "icon": "/icons/hugeicons/plug-01.svg", "pages": [ "api-reference/connections", "POST /v3/connections/{provider}", @@ -346,7 +366,7 @@ }, { "group": "Settings", - "icon": "settings", + "icon": "/icons/hugeicons/settings-01.svg", "pages": [ "api-reference/settings", "GET /v3/settings", @@ -358,24 +378,24 @@ ] } ], - "tab": "Developer Platform" + "tab": "Developer platform" }, { - "icon": "puzzle", + "icon": "/icons/hugeicons/puzzle.svg", "anchors": [ { "anchor": "Plugins and MCP", - "icon": "puzzle", + "icon": "/icons/hugeicons/puzzle.svg", "pages": [ { "group": "Supermemory MCP", - "icon": "terminal", + "icon": "/icons/hugeicons/command-line.svg", "pages": [ "supermemory-mcp/mcp", "supermemory-mcp/setup", { "group": "Setups", - "icon": "layers", + "icon": "/icons/hugeicons/layers-01.svg", "pages": [ "supermemory-mcp/chatgpt-web", "supermemory-mcp/claude-desktop" @@ -385,7 +405,7 @@ }, { "group": "Plugins", - "icon": "puzzle", + "icon": "/icons/hugeicons/puzzle.svg", "pages": [ "integrations/openclaw", "integrations/hermes", @@ -1077,6 +1097,12 @@ } ], "styling": { + "codeblocks": { + "theme": { + "dark": "github-dark-default", + "light": "github-light-default" + } + }, "eyebrows": "breadcrumbs" }, "theme": "aspen" diff --git a/apps/docs/favicon-dark-mode.png b/apps/docs/favicon-dark-mode.png new file mode 100644 index 00000000..0fd5e17b Binary files /dev/null and b/apps/docs/favicon-dark-mode.png differ diff --git a/apps/docs/favicon-light-mode.png b/apps/docs/favicon-light-mode.png new file mode 100644 index 00000000..562ba896 Binary files /dev/null and b/apps/docs/favicon-light-mode.png differ diff --git a/apps/docs/icons/hugeicons/activity-01.svg b/apps/docs/icons/hugeicons/activity-01.svg new file mode 100644 index 00000000..1039a713 --- /dev/null +++ b/apps/docs/icons/hugeicons/activity-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/agreement-01.svg b/apps/docs/icons/hugeicons/agreement-01.svg new file mode 100644 index 00000000..0cb0f507 --- /dev/null +++ b/apps/docs/icons/hugeicons/agreement-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/ai-brain-01.svg b/apps/docs/icons/hugeicons/ai-brain-01.svg new file mode 100644 index 00000000..ca2a474c --- /dev/null +++ b/apps/docs/icons/hugeicons/ai-brain-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/arrow-data-transfer-horizontal.svg b/apps/docs/icons/hugeicons/arrow-data-transfer-horizontal.svg new file mode 100644 index 00000000..c6ad332d --- /dev/null +++ b/apps/docs/icons/hugeicons/arrow-data-transfer-horizontal.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/arrow-up-right-01.svg b/apps/docs/icons/hugeicons/arrow-up-right-01.svg new file mode 100644 index 00000000..ac5f4e6b --- /dev/null +++ b/apps/docs/icons/hugeicons/arrow-up-right-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/award-01.svg b/apps/docs/icons/hugeicons/award-01.svg new file mode 100644 index 00000000..f8c78dca --- /dev/null +++ b/apps/docs/icons/hugeicons/award-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/balance-scale.svg b/apps/docs/icons/hugeicons/balance-scale.svg new file mode 100644 index 00000000..2070b0c0 --- /dev/null +++ b/apps/docs/icons/hugeicons/balance-scale.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/book-02.svg b/apps/docs/icons/hugeicons/book-02.svg new file mode 100644 index 00000000..56ef7af4 --- /dev/null +++ b/apps/docs/icons/hugeicons/book-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/book-open-01.svg b/apps/docs/icons/hugeicons/book-open-01.svg new file mode 100644 index 00000000..520f7a96 --- /dev/null +++ b/apps/docs/icons/hugeicons/book-open-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/brain-01.svg b/apps/docs/icons/hugeicons/brain-01.svg new file mode 100644 index 00000000..f0b8b220 --- /dev/null +++ b/apps/docs/icons/hugeicons/brain-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/bug-01.svg b/apps/docs/icons/hugeicons/bug-01.svg new file mode 100644 index 00000000..45bee373 --- /dev/null +++ b/apps/docs/icons/hugeicons/bug-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/building-03.svg b/apps/docs/icons/hugeicons/building-03.svg new file mode 100644 index 00000000..e84847de --- /dev/null +++ b/apps/docs/icons/hugeicons/building-03.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/chart-line-data-01.svg b/apps/docs/icons/hugeicons/chart-line-data-01.svg new file mode 100644 index 00000000..21691b4d --- /dev/null +++ b/apps/docs/icons/hugeicons/chart-line-data-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/chat-bot.svg b/apps/docs/icons/hugeicons/chat-bot.svg new file mode 100644 index 00000000..e7af7c95 --- /dev/null +++ b/apps/docs/icons/hugeicons/chat-bot.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/check-list.svg b/apps/docs/icons/hugeicons/check-list.svg new file mode 100644 index 00000000..89f75194 --- /dev/null +++ b/apps/docs/icons/hugeicons/check-list.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/clipboard.svg b/apps/docs/icons/hugeicons/clipboard.svg new file mode 100644 index 00000000..05742386 --- /dev/null +++ b/apps/docs/icons/hugeicons/clipboard.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/clock-01.svg b/apps/docs/icons/hugeicons/clock-01.svg new file mode 100644 index 00000000..8bd1094a --- /dev/null +++ b/apps/docs/icons/hugeicons/clock-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/cloud.svg b/apps/docs/icons/hugeicons/cloud.svg new file mode 100644 index 00000000..8a2567bf --- /dev/null +++ b/apps/docs/icons/hugeicons/cloud.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/command-line.svg b/apps/docs/icons/hugeicons/command-line.svg new file mode 100644 index 00000000..08240935 --- /dev/null +++ b/apps/docs/icons/hugeicons/command-line.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/compass-01.svg b/apps/docs/icons/hugeicons/compass-01.svg new file mode 100644 index 00000000..e7c32fb1 --- /dev/null +++ b/apps/docs/icons/hugeicons/compass-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/computer.svg b/apps/docs/icons/hugeicons/computer.svg new file mode 100644 index 00000000..ac957b70 --- /dev/null +++ b/apps/docs/icons/hugeicons/computer.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/copy-01.svg b/apps/docs/icons/hugeicons/copy-01.svg new file mode 100644 index 00000000..68a57691 --- /dev/null +++ b/apps/docs/icons/hugeicons/copy-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/cpu.svg b/apps/docs/icons/hugeicons/cpu.svg new file mode 100644 index 00000000..718aab39 --- /dev/null +++ b/apps/docs/icons/hugeicons/cpu.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/credit-card.svg b/apps/docs/icons/hugeicons/credit-card.svg new file mode 100644 index 00000000..3a48fcac --- /dev/null +++ b/apps/docs/icons/hugeicons/credit-card.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/cube.svg b/apps/docs/icons/hugeicons/cube.svg new file mode 100644 index 00000000..ae23bf80 --- /dev/null +++ b/apps/docs/icons/hugeicons/cube.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/cursor-01.svg b/apps/docs/icons/hugeicons/cursor-01.svg new file mode 100644 index 00000000..5d70b8e2 --- /dev/null +++ b/apps/docs/icons/hugeicons/cursor-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/dashboard-speed-01.svg b/apps/docs/icons/hugeicons/dashboard-speed-01.svg new file mode 100644 index 00000000..a0796ae0 --- /dev/null +++ b/apps/docs/icons/hugeicons/dashboard-speed-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/database-01.svg b/apps/docs/icons/hugeicons/database-01.svg new file mode 100644 index 00000000..6aedce34 --- /dev/null +++ b/apps/docs/icons/hugeicons/database-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/delivery-truck-01.svg b/apps/docs/icons/hugeicons/delivery-truck-01.svg new file mode 100644 index 00000000..09f6e86f --- /dev/null +++ b/apps/docs/icons/hugeicons/delivery-truck-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/download-01.svg b/apps/docs/icons/hugeicons/download-01.svg new file mode 100644 index 00000000..03d2eee5 --- /dev/null +++ b/apps/docs/icons/hugeicons/download-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/eraser-01.svg b/apps/docs/icons/hugeicons/eraser-01.svg new file mode 100644 index 00000000..3b65724b --- /dev/null +++ b/apps/docs/icons/hugeicons/eraser-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/file-01.svg b/apps/docs/icons/hugeicons/file-01.svg new file mode 100644 index 00000000..bbdc6340 --- /dev/null +++ b/apps/docs/icons/hugeicons/file-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/file-02.svg b/apps/docs/icons/hugeicons/file-02.svg new file mode 100644 index 00000000..d40d55ea --- /dev/null +++ b/apps/docs/icons/hugeicons/file-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/file-search.svg b/apps/docs/icons/hugeicons/file-search.svg new file mode 100644 index 00000000..9d9ffbed --- /dev/null +++ b/apps/docs/icons/hugeicons/file-search.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/files-01.svg b/apps/docs/icons/hugeicons/files-01.svg new file mode 100644 index 00000000..8dcea80d --- /dev/null +++ b/apps/docs/icons/hugeicons/files-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/files-02.svg b/apps/docs/icons/hugeicons/files-02.svg new file mode 100644 index 00000000..7c167066 --- /dev/null +++ b/apps/docs/icons/hugeicons/files-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/filter.svg b/apps/docs/icons/hugeicons/filter.svg new file mode 100644 index 00000000..357ae3fb --- /dev/null +++ b/apps/docs/icons/hugeicons/filter.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/flash.svg b/apps/docs/icons/hugeicons/flash.svg new file mode 100644 index 00000000..2fe9e832 --- /dev/null +++ b/apps/docs/icons/hugeicons/flash.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/folder-01.svg b/apps/docs/icons/hugeicons/folder-01.svg new file mode 100644 index 00000000..5490e728 --- /dev/null +++ b/apps/docs/icons/hugeicons/folder-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/github.svg b/apps/docs/icons/hugeicons/github.svg new file mode 100644 index 00000000..de82df3e --- /dev/null +++ b/apps/docs/icons/hugeicons/github.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/globe-02.svg b/apps/docs/icons/hugeicons/globe-02.svg new file mode 100644 index 00000000..a329920c --- /dev/null +++ b/apps/docs/icons/hugeicons/globe-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/hard-drive.svg b/apps/docs/icons/hugeicons/hard-drive.svg new file mode 100644 index 00000000..d0c151f6 --- /dev/null +++ b/apps/docs/icons/hugeicons/hard-drive.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/headphones.svg b/apps/docs/icons/hugeicons/headphones.svg new file mode 100644 index 00000000..ab0df5af --- /dev/null +++ b/apps/docs/icons/hugeicons/headphones.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/help-circle.svg b/apps/docs/icons/hugeicons/help-circle.svg new file mode 100644 index 00000000..8051e368 --- /dev/null +++ b/apps/docs/icons/hugeicons/help-circle.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/hierarchy-square-01.svg b/apps/docs/icons/hugeicons/hierarchy-square-01.svg new file mode 100644 index 00000000..bb70b6fd --- /dev/null +++ b/apps/docs/icons/hugeicons/hierarchy-square-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/id.svg b/apps/docs/icons/hugeicons/id.svg new file mode 100644 index 00000000..0c5f25c5 --- /dev/null +++ b/apps/docs/icons/hugeicons/id.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/idea-01.svg b/apps/docs/icons/hugeicons/idea-01.svg new file mode 100644 index 00000000..118badab --- /dev/null +++ b/apps/docs/icons/hugeicons/idea-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/invoice-01.svg b/apps/docs/icons/hugeicons/invoice-01.svg new file mode 100644 index 00000000..ab332379 --- /dev/null +++ b/apps/docs/icons/hugeicons/invoice-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/java-script.svg b/apps/docs/icons/hugeicons/java-script.svg new file mode 100644 index 00000000..439ebb61 --- /dev/null +++ b/apps/docs/icons/hugeicons/java-script.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/justice-scale-01.svg b/apps/docs/icons/hugeicons/justice-scale-01.svg new file mode 100644 index 00000000..ca346f9b --- /dev/null +++ b/apps/docs/icons/hugeicons/justice-scale-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/key-01.svg b/apps/docs/icons/hugeicons/key-01.svg new file mode 100644 index 00000000..a318d6b8 --- /dev/null +++ b/apps/docs/icons/hugeicons/key-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/layers-01.svg b/apps/docs/icons/hugeicons/layers-01.svg new file mode 100644 index 00000000..d3187cca --- /dev/null +++ b/apps/docs/icons/hugeicons/layers-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/left-to-right-list-bullet.svg b/apps/docs/icons/hugeicons/left-to-right-list-bullet.svg new file mode 100644 index 00000000..1f17a417 --- /dev/null +++ b/apps/docs/icons/hugeicons/left-to-right-list-bullet.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/link-01.svg b/apps/docs/icons/hugeicons/link-01.svg new file mode 100644 index 00000000..677bb4ee --- /dev/null +++ b/apps/docs/icons/hugeicons/link-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/location-01.svg b/apps/docs/icons/hugeicons/location-01.svg new file mode 100644 index 00000000..a6b6a069 --- /dev/null +++ b/apps/docs/icons/hugeicons/location-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/lock.svg b/apps/docs/icons/hugeicons/lock.svg new file mode 100644 index 00000000..2698bb6f --- /dev/null +++ b/apps/docs/icons/hugeicons/lock.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/login-01.svg b/apps/docs/icons/hugeicons/login-01.svg new file mode 100644 index 00000000..74538e8e --- /dev/null +++ b/apps/docs/icons/hugeicons/login-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/logout-01.svg b/apps/docs/icons/hugeicons/logout-01.svg new file mode 100644 index 00000000..4f275d27 --- /dev/null +++ b/apps/docs/icons/hugeicons/logout-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/mail-01.svg b/apps/docs/icons/hugeicons/mail-01.svg new file mode 100644 index 00000000..b1eb355c --- /dev/null +++ b/apps/docs/icons/hugeicons/mail-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/message-01.svg b/apps/docs/icons/hugeicons/message-01.svg new file mode 100644 index 00000000..be8416be --- /dev/null +++ b/apps/docs/icons/hugeicons/message-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/message-02.svg b/apps/docs/icons/hugeicons/message-02.svg new file mode 100644 index 00000000..7c3b6b2b --- /dev/null +++ b/apps/docs/icons/hugeicons/message-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/note-01.svg b/apps/docs/icons/hugeicons/note-01.svg new file mode 100644 index 00000000..6ed2bc6f --- /dev/null +++ b/apps/docs/icons/hugeicons/note-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/package.svg b/apps/docs/icons/hugeicons/package.svg new file mode 100644 index 00000000..eb61158c --- /dev/null +++ b/apps/docs/icons/hugeicons/package.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/play-circle.svg b/apps/docs/icons/hugeicons/play-circle.svg new file mode 100644 index 00000000..6d105296 --- /dev/null +++ b/apps/docs/icons/hugeicons/play-circle.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/play.svg b/apps/docs/icons/hugeicons/play.svg new file mode 100644 index 00000000..90204233 --- /dev/null +++ b/apps/docs/icons/hugeicons/play.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/plug-01.svg b/apps/docs/icons/hugeicons/plug-01.svg new file mode 100644 index 00000000..7f2fe523 --- /dev/null +++ b/apps/docs/icons/hugeicons/plug-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/plug-socket.svg b/apps/docs/icons/hugeicons/plug-socket.svg new file mode 100644 index 00000000..3dd53ab2 --- /dev/null +++ b/apps/docs/icons/hugeicons/plug-socket.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/plus-sign.svg b/apps/docs/icons/hugeicons/plus-sign.svg new file mode 100644 index 00000000..3eb00df6 --- /dev/null +++ b/apps/docs/icons/hugeicons/plus-sign.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/puzzle.svg b/apps/docs/icons/hugeicons/puzzle.svg new file mode 100644 index 00000000..658b3335 --- /dev/null +++ b/apps/docs/icons/hugeicons/puzzle.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/python.svg b/apps/docs/icons/hugeicons/python.svg new file mode 100644 index 00000000..bc99d742 --- /dev/null +++ b/apps/docs/icons/hugeicons/python.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/refresh.svg b/apps/docs/icons/hugeicons/refresh.svg new file mode 100644 index 00000000..c33c0075 --- /dev/null +++ b/apps/docs/icons/hugeicons/refresh.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/robotic.svg b/apps/docs/icons/hugeicons/robotic.svg new file mode 100644 index 00000000..bcdc8c03 --- /dev/null +++ b/apps/docs/icons/hugeicons/robotic.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/rotate-clockwise.svg b/apps/docs/icons/hugeicons/rotate-clockwise.svg new file mode 100644 index 00000000..dd340346 --- /dev/null +++ b/apps/docs/icons/hugeicons/rotate-clockwise.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/route-01.svg b/apps/docs/icons/hugeicons/route-01.svg new file mode 100644 index 00000000..50b7b65c --- /dev/null +++ b/apps/docs/icons/hugeicons/route-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/route-02.svg b/apps/docs/icons/hugeicons/route-02.svg new file mode 100644 index 00000000..bbf7c05e --- /dev/null +++ b/apps/docs/icons/hugeicons/route-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/search-01.svg b/apps/docs/icons/hugeicons/search-01.svg new file mode 100644 index 00000000..78352b5f --- /dev/null +++ b/apps/docs/icons/hugeicons/search-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/server-stack-01.svg b/apps/docs/icons/hugeicons/server-stack-01.svg new file mode 100644 index 00000000..f7dbe8b3 --- /dev/null +++ b/apps/docs/icons/hugeicons/server-stack-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/settings-01.svg b/apps/docs/icons/hugeicons/settings-01.svg new file mode 100644 index 00000000..cb176523 --- /dev/null +++ b/apps/docs/icons/hugeicons/settings-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/settings-02.svg b/apps/docs/icons/hugeicons/settings-02.svg new file mode 100644 index 00000000..f801c650 --- /dev/null +++ b/apps/docs/icons/hugeicons/settings-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/share-08.svg b/apps/docs/icons/hugeicons/share-08.svg new file mode 100644 index 00000000..2ef00019 --- /dev/null +++ b/apps/docs/icons/hugeicons/share-08.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/shield-01.svg b/apps/docs/icons/hugeicons/shield-01.svg new file mode 100644 index 00000000..b53f09f3 --- /dev/null +++ b/apps/docs/icons/hugeicons/shield-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/sliders-horizontal.svg b/apps/docs/icons/hugeicons/sliders-horizontal.svg new file mode 100644 index 00000000..17ce24ab --- /dev/null +++ b/apps/docs/icons/hugeicons/sliders-horizontal.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/source-code.svg b/apps/docs/icons/hugeicons/source-code.svg new file mode 100644 index 00000000..5ecad483 --- /dev/null +++ b/apps/docs/icons/hugeicons/source-code.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/sparkles.svg b/apps/docs/icons/hugeicons/sparkles.svg new file mode 100644 index 00000000..7ae8b732 --- /dev/null +++ b/apps/docs/icons/hugeicons/sparkles.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/square.svg b/apps/docs/icons/hugeicons/square.svg new file mode 100644 index 00000000..8fcc5c28 --- /dev/null +++ b/apps/docs/icons/hugeicons/square.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/tag-01.svg b/apps/docs/icons/hugeicons/tag-01.svg new file mode 100644 index 00000000..bb222df4 --- /dev/null +++ b/apps/docs/icons/hugeicons/tag-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/test-tube-01.svg b/apps/docs/icons/hugeicons/test-tube-01.svg new file mode 100644 index 00000000..e48816ff --- /dev/null +++ b/apps/docs/icons/hugeicons/test-tube-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/tick-02.svg b/apps/docs/icons/hugeicons/tick-02.svg new file mode 100644 index 00000000..0ce1e241 --- /dev/null +++ b/apps/docs/icons/hugeicons/tick-02.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/triangle.svg b/apps/docs/icons/hugeicons/triangle.svg new file mode 100644 index 00000000..41be0d32 --- /dev/null +++ b/apps/docs/icons/hugeicons/triangle.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/upload-01.svg b/apps/docs/icons/hugeicons/upload-01.svg new file mode 100644 index 00000000..2ede0991 --- /dev/null +++ b/apps/docs/icons/hugeicons/upload-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/user-circle.svg b/apps/docs/icons/hugeicons/user-circle.svg new file mode 100644 index 00000000..297370b0 --- /dev/null +++ b/apps/docs/icons/hugeicons/user-circle.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/user-multiple.svg b/apps/docs/icons/hugeicons/user-multiple.svg new file mode 100644 index 00000000..9ea8b197 --- /dev/null +++ b/apps/docs/icons/hugeicons/user-multiple.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/user.svg b/apps/docs/icons/hugeicons/user.svg new file mode 100644 index 00000000..69ada85a --- /dev/null +++ b/apps/docs/icons/hugeicons/user.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/workflow-square-01.svg b/apps/docs/icons/hugeicons/workflow-square-01.svg new file mode 100644 index 00000000..a1ffc1b9 --- /dev/null +++ b/apps/docs/icons/hugeicons/workflow-square-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/icons/hugeicons/wrench-01.svg b/apps/docs/icons/hugeicons/wrench-01.svg new file mode 100644 index 00000000..5d961e16 --- /dev/null +++ b/apps/docs/icons/hugeicons/wrench-01.svg @@ -0,0 +1 @@ + diff --git a/apps/docs/images/232.png b/apps/docs/images/232.png deleted file mode 100644 index d3df58c4..00000000 Binary files a/apps/docs/images/232.png and /dev/null differ diff --git a/apps/docs/images/art/bg-branch.jpg b/apps/docs/images/art/bg-branch.jpg new file mode 100644 index 00000000..8806b6e2 Binary files /dev/null and b/apps/docs/images/art/bg-branch.jpg differ diff --git a/apps/docs/images/art/bg-grass.jpg b/apps/docs/images/art/bg-grass.jpg new file mode 100644 index 00000000..906c893f Binary files /dev/null and b/apps/docs/images/art/bg-grass.jpg differ diff --git a/apps/docs/images/art/bg-islands.jpg b/apps/docs/images/art/bg-islands.jpg new file mode 100644 index 00000000..0e4aeef4 Binary files /dev/null and b/apps/docs/images/art/bg-islands.jpg differ diff --git a/apps/docs/images/art/bg-lakeshore.jpg b/apps/docs/images/art/bg-lakeshore.jpg new file mode 100644 index 00000000..4738393f Binary files /dev/null and b/apps/docs/images/art/bg-lakeshore.jpg differ diff --git a/apps/docs/images/art/bg-meadow.jpg b/apps/docs/images/art/bg-meadow.jpg new file mode 100644 index 00000000..144595b8 Binary files /dev/null and b/apps/docs/images/art/bg-meadow.jpg differ diff --git a/apps/docs/images/art/bg-stream.jpg b/apps/docs/images/art/bg-stream.jpg new file mode 100644 index 00000000..baeffc8b Binary files /dev/null and b/apps/docs/images/art/bg-stream.jpg differ diff --git a/apps/docs/images/art/mark-white.svg b/apps/docs/images/art/mark-white.svg new file mode 100644 index 00000000..b950a8a3 --- /dev/null +++ b/apps/docs/images/art/mark-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/docs/images/art/maya.jpg b/apps/docs/images/art/maya.jpg new file mode 100644 index 00000000..d6c11b1f Binary files /dev/null and b/apps/docs/images/art/maya.jpg differ diff --git a/apps/docs/images/how-it-works-overview.webp b/apps/docs/images/how-it-works-overview.webp new file mode 100644 index 00000000..ead79c5b Binary files /dev/null and b/apps/docs/images/how-it-works-overview.webp differ diff --git a/apps/docs/index.mdx b/apps/docs/index.mdx index 6b3eee98..2a61d4fb 100644 --- a/apps/docs/index.mdx +++ b/apps/docs/index.mdx @@ -4,86 +4,112 @@ description: "Context infrastructure for AI agents" mode: "custom" --- -export const HeroCard = ({ title, description, href, children }) => { - return ( - -
- {children} -
-
-

- {title} -

-

- {description} -

-
+import { AGENT_PROMPT } from "/snippets/agent-prompt.jsx" +import { HERO_TS, HERO_PY, HERO_CURL } from "/snippets/hero-samples.jsx" +import { AgentMarks, CopyPromptButton, PromptPanel } from "/snippets/agent-prompt-panel.jsx" + +export const HomeLink = ({ href, icon, children }) => ( +
+ + {children} + +) + +export const PathCard = ({ title, description, href, image, children }) => ( +
+ + - ) -} - -
-
-
-

- supermemory -

-

- Context infrastructure for AI agents. Use it with the API, your tools, your team, or run it yourself. -

- -
- -
- - Developer platform - - - Plugins and MCP - - - Self-hosting - +
+ {title} +

{description}

+
{children}
+) + +export const ListCard = ({ title, children }) => ( +
+
+
{title}
+
{children}
+
+
+) + +
+ +
+
+

+ Memory and continual learning for the world’s best agents. +

+

+ Supermemory gives your agent long-term memory of every user. Paste one prompt into your coding agent and it wires memory into your project. +

+ + +
+
+ +
+
+ +
+

Platform

+

Choose how you use supermemory

+

Start with the path that fits your app and your team.

+
+ + Quickstart + How it works + API reference + + + Supermemory MCP + Claude Code + Cursor + + + Local quickstart + Configuration + Model providers + +
+
+ +
+

Products

+

Explore features

+

Browse memory, retrieval, profiles, and connectors.

+
+ + Graph memory + SuperRAG + Search memories + User profiles + Filtering + Memory vs RAG + + + Add memories + Connectors + SMFS + Container tags + Customization + Migrate from mem0 + +
+
+
diff --git a/apps/docs/ingestion/add-memories.mdx b/apps/docs/ingestion/add-memories.mdx index ab19a505..bf6489ff 100644 --- a/apps/docs/ingestion/add-memories.mdx +++ b/apps/docs/ingestion/add-memories.mdx @@ -2,12 +2,12 @@ title: "Ingesting context to supermemory" sidebarTitle: "API" description: "Add text, files, and URLs to Supermemory" -icon: "plus" +icon: "/icons/hugeicons/plus-sign.svg" --- Send any raw content to Supermemory — conversations, documents, files, URLs. We extract the memories automatically. Pass `customId` to identify content and avoid duplicates, and `taskType: "superrag"` if you just need it searchable, not remembered — that's [5x cheaper](#memory-vs-superrag-ingestion) per token. -## Quick Start +## Quick start @@ -75,7 +75,7 @@ If an irrecoverable processing error occurs, the document is automatically delet --- -## Updating Content +## Updating content Use `customId` to update existing documents or conversations. When you send content with the same `customId`, Supermemory intelligently processes only what's new. @@ -144,7 +144,7 @@ content: formatConversation(messages) --- -## Upload Files +## Upload files Upload PDFs, images, and documents directly. @@ -178,7 +178,7 @@ Upload PDFs, images, and documents directly. -### Supported File Types +### Supported file types | Type | Formats | Processing | |------|---------|------------| @@ -205,7 +205,7 @@ Upload PDFs, images, and documents directly. | `taskType` | `"memory" \| "superrag"` | Pipeline to run. Default `"memory"`. `"superrag"` skips fact extraction and profile updates, doing only chunk/embed/index — at 5x cheaper per token. See [SuperRAG ingestion](/concepts/super-rag#ingesting-as-pure-superrag-tasktype-superrag) | - + **Content Types:** ```typescript // Any text — conversations, notes, documents @@ -279,7 +279,7 @@ Upload PDFs, images, and documents directly. --- -## Processing Modes +## Processing modes ### Dreaming: dynamic vs instant @@ -313,7 +313,7 @@ Use `"superrag"` for reference material you want searchable but that shouldn't s --- -## Filtered Writes +## Filtered writes By default, when you add content, Supermemory uses **all** existing memories in the space as context for generating new memories. With **filtered writes**, you can scope this context to only memories from documents matching specific metadata. @@ -390,7 +390,7 @@ await client.add({ --- -## Processing Pipeline +## Processing pipeline When you add content, Supermemory: @@ -408,7 +408,7 @@ console.log(doc.status); // "queued" | "processing" | "done" ``` - + Process multiple documents with rate limiting: ```typescript @@ -441,7 +441,7 @@ console.log(doc.status); // "queued" | "processing" | "done" - Use `customId` to track and deduplicate - + | Status | Error | Cause | |--------|-------|-------| | 400 | BadRequestError | Missing required fields, invalid parameters | @@ -467,7 +467,7 @@ console.log(doc.status); // "queued" | "processing" | "done" ``` - + **Single delete:** ```typescript await client.documents.delete("doc_id_123"); @@ -494,7 +494,7 @@ console.log(doc.status); // "queued" | "processing" | "done" --- -## Next Steps +## Next steps - [How to backfill historical data](/ingestion/batch-ingest-historical-data) — Import dated content with the batch API - [Search Memories](/recall/search) — Query your content diff --git a/apps/docs/ingestion/batch-ingest-historical-data.mdx b/apps/docs/ingestion/batch-ingest-historical-data.mdx index 17ff4e1b..c727fac4 100644 --- a/apps/docs/ingestion/batch-ingest-historical-data.mdx +++ b/apps/docs/ingestion/batch-ingest-historical-data.mdx @@ -2,7 +2,7 @@ title: "How to backfill historical data into Supermemory" sidebarTitle: "Backfill historical data" description: "Backfill historical documents into Supermemory with documentDate, stable custom IDs, and the batch ingestion API." -icon: "history" +icon: "/icons/hugeicons/clock-01.svg" --- Use `POST /v3/documents/batch` to backfill exports, emails, messages, or other dated records. diff --git a/apps/docs/ingestion/document-operations.mdx b/apps/docs/ingestion/document-operations.mdx index 03a1ea99..565aaa58 100644 --- a/apps/docs/ingestion/document-operations.mdx +++ b/apps/docs/ingestion/document-operations.mdx @@ -1,13 +1,13 @@ --- -title: "Document Operations" +title: "Document operations" sidebarTitle: "Documents" description: "List, get, update, and delete your ingested documents" -icon: "files" +icon: "/icons/hugeicons/files-02.svg" --- Manage documents after ingestion using the SDK. -## List Documents +## List documents Retrieve paginated documents with filtering. @@ -77,7 +77,7 @@ Retrieve paginated documents with filtering. | `sort` | string | `createdAt` | Sort by `createdAt` or `updatedAt` | | `order` | string | `desc` | `desc` (newest) or `asc` (oldest) | - + ```typescript async function getAllDocuments(containerTag: string) { const all = []; @@ -100,7 +100,7 @@ Retrieve paginated documents with filtering. ``` - + ```typescript const documents = await client.documents.list({ containerTags: ["user_123"], @@ -116,7 +116,7 @@ Retrieve paginated documents with filtering. --- -## Get Document +## Get document Get a specific document with its processing status. @@ -145,7 +145,7 @@ Get a specific document with its processing status. -### Processing Status +### Processing status | Status | Description | |--------|-------------| @@ -156,7 +156,7 @@ Get a specific document with its processing status. | `done` | Ready for search | | `failed` | Processing failed | - + ```typescript async function waitForProcessing(docId: string) { while (true) { @@ -173,7 +173,7 @@ Get a specific document with its processing status. --- -## Update Document +## Update document Update a document's content or metadata. **Content changes** trigger full reprocessing; **metadata-only changes** (e.g. updating `accepted`, `version`) do not reindex. @@ -207,7 +207,7 @@ Update a document's content or metadata. **Content changes** trigger full reproc --- -## Delete Documents +## Delete documents Permanently remove documents. @@ -261,7 +261,7 @@ Deletes are permanent — no recovery. --- -## Processing Queue +## Processing queue Check documents currently being processed. @@ -288,7 +288,7 @@ Check documents currently being processed. --- -## Next Steps +## Next steps - [Memory Operations](/recall/memory-operations) — Advanced v4 memory operations - [Search](/recall/search) — Query your memories diff --git a/apps/docs/integrations/agent-framework.mdx b/apps/docs/integrations/agent-framework.mdx index 2fe19114..f8b872bf 100644 --- a/apps/docs/integrations/agent-framework.mdx +++ b/apps/docs/integrations/agent-framework.mdx @@ -318,16 +318,16 @@ except SupermemoryConfigurationError as e: ## Related docs - + How automatic profiling works - + Filtering and search modes - + Memory for OpenAI Agents SDK - + Memory for LangChain apps diff --git a/apps/docs/integrations/agno.mdx b/apps/docs/integrations/agno.mdx index 87248559..bd3a95fb 100644 --- a/apps/docs/integrations/agno.mdx +++ b/apps/docs/integrations/agno.mdx @@ -2,7 +2,7 @@ title: "Agno" sidebarTitle: "Agno" description: "Add persistent memory to Agno agents with Supermemory" -icon: "brain" +icon: "/icons/hugeicons/brain-01.svg" --- Agno agents are stateless by default. Each conversation starts fresh. Supermemory changes that - your agents can remember users, recall past conversations, and build on previous interactions. @@ -368,16 +368,16 @@ results = memory.search.memories( ## Related docs - + How automatic profiling works - + Filtering and search modes - + Memory for LangChain apps - + Multi-agent systems with memory diff --git a/apps/docs/integrations/ai-sdk.mdx b/apps/docs/integrations/ai-sdk.mdx index eede8429..6f93593e 100644 --- a/apps/docs/integrations/ai-sdk.mdx +++ b/apps/docs/integrations/ai-sdk.mdx @@ -2,7 +2,7 @@ title: "Vercel AI SDK" sidebarTitle: "Vercel AI SDK" description: "Use Supermemory with Vercel AI SDK for seamless memory management" -icon: "triangle" +icon: "/icons/hugeicons/triangle.svg" --- The Supermemory AI SDK provides native integration with Vercel's AI SDK through two approaches: **User Profiles** for automatic personalization and **Memory Tools** for agent-based interactions. @@ -11,7 +11,7 @@ The Supermemory AI SDK provides native integration with Vercel's AI SDK through Migrating to v2 from 1.4.x? Check the [migration guide](/migration/tools-v2-upgrade). - + Check out the NPM page for more details @@ -21,7 +21,7 @@ The Supermemory AI SDK provides native integration with Vercel's AI SDK through npm install @supermemory/tools ``` -## Quick Comparison +## Quick comparison | Approach | Use Case | Setup | |----------|----------|-------| @@ -30,7 +30,7 @@ npm install @supermemory/tools --- -## User Profiles with Middleware +## User profiles with middleware Automatically inject user profiles into every LLM call for instant personalization. @@ -69,7 +69,7 @@ Both `containerTag` and `customId` are required. ``` -### Memory Search Modes +### Memory search modes **Profile Mode (Default)** - Retrieves the user's complete profile: @@ -89,7 +89,7 @@ const model = withSupermemory(openai("gpt-4"), { containerTag: "user-123", custo const model = withSupermemory(openai("gpt-4"), { containerTag: "user-123", customId: "conv-1", mode: "full" }) ``` -### Custom Prompt Templates +### Custom prompt templates Customize how memories are formatted. The template receives `userMemories`, `generalSearchMemories`, and `searchResults` (raw array for filtering by metadata): @@ -115,7 +115,7 @@ const model = withSupermemory(anthropic("claude-3-sonnet"), { }) ``` -### Verbose Logging +### Verbose logging ```typescript const model = withSupermemory(openai("gpt-4"), { @@ -140,7 +140,7 @@ const model = withSupermemory(openai("gpt-5"), { }) ``` -### Persisting Tool Calls (default: off) +### Persisting tool calls (default: off) By default, saved conversations include only user and assistant text — tool calls and tool results are dropped, since tool payloads are often large and low-signal and would pollute memory extraction. To persist the full tool round trip (tool calls with their arguments, plus tool results, in their original order), set `includeToolCalls: true`: @@ -154,7 +154,7 @@ const model = withSupermemory(openai("gpt-5"), { --- -## Memory Tools +## Memory tools Add memory capabilities to AI agents with search, add, and fetch operations. @@ -172,7 +172,7 @@ const result = await streamText({ }) ``` -### Available Tools +### Available tools **Search Memories** - Semantic search through user memories: @@ -196,7 +196,7 @@ const result = await streamText({ // AI will call: addMemory({ memory: "User is allergic to peanuts" }) ``` -### Using Individual Tools +### Using individual tools For more control, import tools separately: @@ -216,7 +216,7 @@ const result = await streamText({ }) ``` -### Tool Results +### Tool results ```typescript // searchMemories result diff --git a/apps/docs/integrations/cartesia.mdx b/apps/docs/integrations/cartesia.mdx index 5b790545..8e514ed9 100644 --- a/apps/docs/integrations/cartesia.mdx +++ b/apps/docs/integrations/cartesia.mdx @@ -1,6 +1,6 @@ --- title: "Cartesia" -sidebarTitle: "Cartesia (Voice)" +sidebarTitle: "Cartesia (voice)" description: "Integrate Supermemory with Cartesia for conversational memory in voice AI agents" icon: "/images/cartesia.svg" --- @@ -55,7 +55,7 @@ memory_agent = SupermemoryCartesiaAgent( ) ``` -## Agent Wrapper Pattern +## Agent wrapper pattern The `SupermemoryCartesiaAgent` wraps your existing `LlmAgent` to add memory capabilities: @@ -82,11 +82,11 @@ async def get_agent(env, call_request): app = VoiceAgentApp(get_agent=get_agent) ``` -## How It Works +## How it works When integrated with Cartesia Line, Supermemory provides two key functionalities: -### 1. Memory Retrieval +### 1. Memory retrieval When a `UserTurnEnded` event is detected, Supermemory retrieves relevant memories: @@ -94,15 +94,15 @@ When a `UserTurnEnded` event is detected, Supermemory retrieves relevant memorie - **Dynamic Profile**: Recent context and preferences - **Search Results**: Semantically relevant past memories -### 2. Context Enhancement +### 2. Context enhancement Retrieved memories are formatted and injected into the agent's system prompt before processing, giving the model awareness of past conversations. -### 3. Background Storage +### 3. Background storage Conversations are automatically stored in Supermemory (non-blocking) for future retrieval. -## Memory Modes +## Memory modes | Mode | Static Profile | Dynamic Profile | Search Results | Use Case | | ----------- | -------------- | --------------- | -------------- | ------------------------------ | @@ -110,7 +110,7 @@ Conversations are automatically stored in Supermemory (non-blocking) for future | `"query"` | No | No | Yes | Finding relevant past context | | `"full"` | Yes | Yes | Yes | Complete memory (default) | -## Configuration Options +## Configuration options You can customize how memories are retrieved and used: @@ -132,7 +132,7 @@ SupermemoryCartesiaAgent.MemoryConfig( | `mode` | str | "full" | Memory retrieval mode: `"profile"`, `"query"`, or `"full"` | | `system_prompt` | str | "Based on previous conversations:\n\n" | Prefix text for memory context | -### Agent Parameters +### Agent parameters ```python SupermemoryCartesiaAgent( @@ -158,7 +158,7 @@ SupermemoryCartesiaAgent( | `config` | MemoryConfig | No | Advanced configuration | | `base_url` | str | No | Custom API endpoint | -## Container Tags +## Container tags Container tags allow you to organize memories across multiple dimensions: @@ -179,7 +179,7 @@ Memories are stored with all tags: } ``` -## Automatic Document Grouping +## Automatic document grouping The SDK **automatically groups all messages from the same conversation** into a single Supermemory document using `custom_id`: @@ -197,7 +197,7 @@ memory_agent = SupermemoryCartesiaAgent( - All messages from that conversation are appended to the same document - This ensures conversation continuity and proper memory generation -## Example: Basic Voice Agent with Memory +## Example: Basic voice agent with memory Here's a complete example of a Cartesia Line voice agent with Supermemory integration: @@ -238,7 +238,7 @@ if __name__ == "__main__": app.run(host="0.0.0.0", port=8000) ``` -## Example: Advanced Agent with Tools +## Example: Advanced agent with tools Here's an example with custom tools and multi-tag support: diff --git a/apps/docs/integrations/claude-code.mdx b/apps/docs/integrations/claude-code.mdx index 07917820..1328393d 100644 --- a/apps/docs/integrations/claude-code.mdx +++ b/apps/docs/integrations/claude-code.mdx @@ -1,17 +1,15 @@ --- title: "Claude Code" sidebarTitle: "Claude Code" -description: "Claude Code Supermemory Plugin — persistent memory across coding sessions" +description: "Supermemory plugin for Claude Code. Keeps memory across coding sessions." icon: "/images/claude-code-icon.svg" --- -
- Claude Code + Supermemory -
+Claude Code + Supermemory [supermemory](https://github.com/supermemoryai/claude-supermemory) is a Claude Code plugin that gives your AI persistent memory across sessions. Your agent remembers what you worked on — across sessions, across projects. @@ -19,7 +17,7 @@ icon: "/images/claude-code-icon.svg" **Prefer to keep everything on your machine?** This plugin works with [self-hosted Supermemory](/self-hosting/overview) — run `npx supermemory local`, then set `baseUrl` in project config (or point your install at your local API) and use the API key printed on first boot. -## Install the Plugin +## Install the plugin > **Requires Node.js 18+** on your PATH — the memory hooks run as Node scripts. @@ -67,7 +65,7 @@ Create a Supermemory API key from the [API Keys](https://console.supermemory.ai/ -## How It Works +## How it works Once installed, the plugin runs automatically: @@ -88,14 +86,14 @@ Once installed, the plugin runs automatically: ## Configuration -### Environment Variables +### Environment variables ```bash SUPERMEMORY_CC_API_KEY=sm_... # Required SUPERMEMORY_DEBUG=true # Optional: enable debug logging ``` -### Global Settings +### Global settings Create `~/.supermemory-claude/settings.json`: @@ -118,7 +116,7 @@ Create `~/.supermemory-claude/settings.json`: | `signalTurnsBefore` | Context turns before a signal (default: 3) | | `includeTools` | Tools to explicitly capture | -### Project Config +### Project config Per-repo overrides in `.claude/.supermemory-claude/config.json`. Run `/supermemory:project-config` or create manually: @@ -138,14 +136,14 @@ Per-repo overrides in `.claude/.supermemory-claude/config.json`. Run `/supermemo | `personalContainerTag` | Override personal container | | `repoContainerTag` | Override team container tag | -## Next Steps +## Next steps - + Source code, issues, and detailed README. - + Memory for your Cursor chats. diff --git a/apps/docs/integrations/claude-memory.mdx b/apps/docs/integrations/claude-memory.mdx index ba7fb90c..6afc7947 100644 --- a/apps/docs/integrations/claude-memory.mdx +++ b/apps/docs/integrations/claude-memory.mdx @@ -17,7 +17,7 @@ This integration works with Claude's built-in `memory` tool type, introduced in npm install @supermemory/tools @anthropic-ai/sdk ``` -## Quick Start +## Quick start ```typescript import Anthropic from "@anthropic-ai/sdk" @@ -98,7 +98,7 @@ const memoryTool = createClaudeMemoryTool(process.env.SUPERMEMORY_API_KEY!, { }) ``` -## How It Works +## How it works Claude's memory tool uses a file-system metaphor. Supermemory maps these operations to document storage: @@ -111,7 +111,7 @@ Claude's memory tool uses a file-system metaphor. Supermemory maps these operati | `delete` | Delete document | | `rename` | Move document to new path | -### Memory Path Structure +### Memory path structure All memory paths must start with `/memories/`: @@ -125,9 +125,9 @@ All memory paths must start with `/memories/`: Paths are normalized for storage: `/memories/preferences` is stored as `--memories--preferences`. -## Commands Reference +## Commands reference -### View (Read/List) +### View (read/list) ```typescript // List directory contents @@ -150,7 +150,7 @@ Paths are normalized for storage: `/memories/preferences` is stored as `--memori } ``` -### String Replace +### String replace ```typescript { @@ -188,7 +188,7 @@ Paths are normalized for storage: `/memories/preferences` is stored as `--memori } ``` -## Complete Example +## Complete example ```typescript import Anthropic from "@anthropic-ai/sdk" @@ -253,14 +253,14 @@ async function runConversation() { runConversation() ``` -## Environment Variables +## Environment variables ```bash SUPERMEMORY_API_KEY=your_supermemory_key ANTHROPIC_API_KEY=your_anthropic_key ``` -## Comparison with Other Approaches +## Comparison with other approaches | Feature | Claude Memory Tool | OpenAI SDK Tools | AI SDK Tools | |---------|-------------------|------------------|--------------| @@ -269,14 +269,14 @@ ANTHROPIC_API_KEY=your_anthropic_key | Path organization | ✅ Hierarchical | ❌ Tags only | ❌ Tags only | | Integration | Anthropic SDK only | OpenAI SDK only | Vercel AI SDK | -## Next Steps +## Next steps - + Use with Vercel AI SDK for streamlined development - + Memory tools for OpenAI function calling diff --git a/apps/docs/integrations/codex.mdx b/apps/docs/integrations/codex.mdx index cf756e2b..1ad88406 100644 --- a/apps/docs/integrations/codex.mdx +++ b/apps/docs/integrations/codex.mdx @@ -1,7 +1,7 @@ --- title: "Codex" sidebarTitle: "Codex" -description: "codex-supermemory — persistent memory for OpenAI Codex CLI" +description: "Persistent memory for the OpenAI Codex CLI with the codex-supermemory plugin." icon: "/images/codex.svg" --- @@ -14,7 +14,7 @@ icon: "/images/codex.svg" **Prefer to keep everything on your machine?** This plugin works with [self-hosted Supermemory](/self-hosting/overview) — run `npx supermemory local`, then `export SUPERMEMORY_API_URL="http://localhost:6767"` (or set `baseUrl` in `~/.codex/supermemory.json`) and use the API key printed on first boot. -## Install the Plugin +## Install the plugin ```bash npx codex-supermemory@latest install @@ -59,7 +59,7 @@ Alternatively: -## How It Works +## How it works Once installed, the plugin runs on every Codex session: @@ -71,7 +71,7 @@ Once installed, the plugin runs on every Codex session: - **Incremental capture** — Memories are saved every N turns (default: 3) so mid-session context is available for later prompts in the same session. - **Privacy** — Content wrapped in `...` is redacted before storage. -### Memory Scopes +### Memory scopes | Tag | Derived from | Description | |-----|-------------|-------------| @@ -89,7 +89,7 @@ Override tags in `~/.codex/supermemory.json` if needed: Set `SUPERMEMORY_ISOLATE_WORKTREES=true` to keep each worktree isolated. -## Explicit Memory Skills +## Explicit memory skills | Skill | Description | |-------|-------------| @@ -110,7 +110,7 @@ Example prompts: > Is Supermemory connected? ``` -## Verify Installation +## Verify installation ```bash npx codex-supermemory status @@ -163,14 +163,14 @@ export SUPERMEMORY_DEBUG=true tail -f ~/.codex-supermemory.log ``` -## Next Steps +## Next steps - + Source code, issues, and detailed README. - + Memory for your Cursor chats. diff --git a/apps/docs/integrations/convex.mdx b/apps/docs/integrations/convex.mdx index 92f106e5..d13aa6a3 100644 --- a/apps/docs/integrations/convex.mdx +++ b/apps/docs/integrations/convex.mdx @@ -2,7 +2,7 @@ title: "Convex" sidebarTitle: "Convex" description: "Add persistent memory to Convex apps with Supermemory" -icon: "database" +icon: "/icons/hugeicons/database-01.svg" --- Convex apps don't have built-in memory for AI. Supermemory fixes that. You get a memory layer that stores conversations, builds user profiles, and gives your AI context about who it's talking to. @@ -193,16 +193,16 @@ export const listMemories = query({ ## Related docs - + How automatic profiling works - + Filtering and search modes - + Memory middleware for Next.js - + Memory for LangChain apps diff --git a/apps/docs/integrations/crewai.mdx b/apps/docs/integrations/crewai.mdx index 92c9772b..cc6b038a 100644 --- a/apps/docs/integrations/crewai.mdx +++ b/apps/docs/integrations/crewai.mdx @@ -2,7 +2,7 @@ title: "CrewAI" sidebarTitle: "CrewAI" description: "Add persistent memory to CrewAI agents with Supermemory" -icon: "users" +icon: "/icons/hugeicons/user-multiple.svg" --- CrewAI agents don't remember anything between runs by default. Supermemory fixes that. You get a memory layer that stores what happened, who the user is, and what they care about. Your crews can pick up where they left off. @@ -31,7 +31,7 @@ OPENAI_API_KEY=your-openai-api-key Get your Supermemory API key from [console.supermemory.ai](https://console.supermemory.ai). -## Basic Integration +## Basic integration Initialize Supermemory and inject user context into your agent's backstory: @@ -81,7 +81,7 @@ Use this context to personalize your work.""", --- -## Core Concepts +## Core concepts ### User profiles @@ -323,16 +323,16 @@ results = memory.search.memories( ## Related docs - + How automatic profiling works - + Filtering and search modes - + Memory for LangChain apps - + Memory middleware for Next.js diff --git a/apps/docs/integrations/cursor.mdx b/apps/docs/integrations/cursor.mdx index 8c516475..59ec1fdd 100644 --- a/apps/docs/integrations/cursor.mdx +++ b/apps/docs/integrations/cursor.mdx @@ -60,7 +60,7 @@ Restart Cursor after installing the plugin or changing credentials. Check the connection any time with `/supermemory-status`. - + The slash commands just run the plugin's CLI for you. To drive it yourself: ```bash @@ -74,7 +74,7 @@ node "${CURSOR_PLUGIN_ROOT}/dist/cli.js" logout Credentials are stored in `~/.supermemory-cursor/credentials.json`. -## How It Works +## How it works | Layer | What it does | |-------|--------------| @@ -85,7 +85,7 @@ Credentials are stored in `~/.supermemory-cursor/credentials.json`. | Context gatherer | Fans out targeted searches before substantial work | | Always-on rule | Makes the agent recall relevant history proactively | -### Skills and Commands +### Skills and commands | Name | Type | Description | |------|------|-------------| @@ -98,7 +98,7 @@ Credentials are stored in `~/.supermemory-cursor/credentials.json`. | `supermemory-config` | Command | Create or edit the project config file | | `supermemory-logout` | Command | Disconnect Supermemory from Cursor | -## MCP Tools +## MCP tools | Tool | Description | |------|-------------| @@ -120,7 +120,7 @@ Every tool that takes a `container` argument accepts: `user` and `project` write to the same repository container. The `sm_scope` metadata field is what keeps personal and session memories separate from explicit project knowledge when an agent asks for one scope. -## Container Tags +## Container tags Cursor shares one repository tag with the [Claude Code](/integrations/claude-code), [Muse Code](/integrations/muse-code), [OpenAI Codex](/integrations/codex), and [OpenCode](/integrations/opencode) plugins, so agents working on the same repo read and write the same memory: @@ -195,14 +195,14 @@ The plugin still reads the former `cursor_user_*` and `cursor_project_*` tags, a You can also set these from the agent with `supermemory_set_config`, or edit the file by hand. -## Log Out +## Log out Run `/supermemory-logout` in Cursor. This removes the stored credentials. Your memories in Supermemory are preserved. -## Next Steps +## Next steps - + Source code, issues, and detailed README. diff --git a/apps/docs/integrations/eve.mdx b/apps/docs/integrations/eve.mdx index ae56487c..425c28eb 100644 --- a/apps/docs/integrations/eve.mdx +++ b/apps/docs/integrations/eve.mdx @@ -7,7 +7,7 @@ icon: "/images/eve.svg" Your next conversation can start where the last one left off. Supermemory gives your [Eve](https://eve.dev) agent the context to continue a project: what was decided, what changed, and the source material behind it. -You don't need to build a separate **parsing**, **embedding**, **indexing**, or **memory-retrieval** pipeline. Supermemory handles that infrastructure. Eve's memory scope and namespace let you keep context separated by user or workspace. +You don't need to build your own parsing, embedding, indexing or memory-retrieval pipeline. Supermemory handles that infrastructure. Eve's memory scope and namespace let you keep context separated by user or workspace. ## Add Supermemory @@ -47,7 +47,7 @@ You can also [install the provider manually](#manual-installation). ## How memory works -Two conversations about the same launch show the three parts working together: **session history**, **indexed sources**, and **memories**. +Two conversations about the same launch show the three parts working together: session history, indexed sources and memories.