{
  "name": "AI memory systems directory",
  "description": "A plain-language entry for each AI memory system in the directory at counterparts.ai: who it's for, where the memory lives, what it needs, its licence and price, how it writes, stores and finds memories, and a grade for each of 11 mechanisms of human memory (built, partly built, not built or not known, with a depth from 1 to 4, a note and a source link), with the written rubric behind the grades. Each entry is one YAML file that the system's makers can correct by pull request.",
  "url": "https://counterparts.ai/directory/",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/"
  },
  "cite": "The Counterparts directory, https://counterparts.ai/directory/",
  "source": "https://github.com/counterparts-ai/directory",
  "dateModified": "2026-10-10",
  "csv": "https://counterparts.ai/directory/data.csv",
  "mechanisms": [
    {
      "id": "salience",
      "name": "Encoding & salience",
      "short": "Salience",
      "stage": "encoding",
      "built": "Decides what's worth keeping, and how much, as a memory is written.",
      "partly": "An AI keeps or skips on purpose, by stated rules, not just a weight you set yourself.",
      "in-depth": "The importance score draws on several signals, some computed rather than claimed."
    },
    {
      "id": "emotional",
      "name": "Emotional modulation",
      "short": "Emotion",
      "stage": "encoding",
      "built": "Gives memories written with feeling more weight.",
      "partly": "Feelings recorded on purpose, not noticed by the way.",
      "in-depth": "Feeling changes several things (how high a memory sits, how slowly it fades, what a mood brings to mind)."
    },
    {
      "id": "decay",
      "name": "Decay & forgetting",
      "short": "Forgetting",
      "stage": "storage",
      "built": "Lets unused memories fade over time on its own.",
      "partly": "Some things fade on purpose, not just a search window or an opt-in cleanup.",
      "in-depth": "Each memory's own use, importance or feeling sets how fast it fades, and what fades is put away, not lost."
    },
    {
      "id": "interference",
      "name": "Interference",
      "short": "Interference",
      "stage": "storage",
      "built": "When a new memory closely matches an old one, notices and lets the newer one win.",
      "partly": "A step on purpose spots near-copies or conflicts, not just an AI's judgement as it edits or a check you turn on.",
      "in-depth": "“newer” is judged by when things were true, or by weight of evidence, not arrival order."
    },
    {
      "id": "retrieval",
      "name": "Retrieval & strengthening",
      "short": "Retrieval",
      "stage": "retrieval",
      "built": "Remembering something makes that memory stronger.",
      "partly": "Strengthening on purpose, not a side effect like busy topics staying near the top.",
      "in-depth": "It lasts and is shaped: only real use counts, spaced returns count more, and it slows fading."
    },
    {
      "id": "association",
      "name": "Association",
      "short": "Association",
      "stage": "retrieval",
      "built": "Links memories, so recalling one brings its neighbours.",
      "partly": "Links made on purpose (by use, file or time), not just an index pointing to notes.",
      "in-depth": "A weighted graph that recall can walk more than one step, or rank by distance."
    },
    {
      "id": "prospective",
      "name": "Prospective memory",
      "short": "Prospective",
      "stage": "retrieval",
      "built": "Brings a memory back at the right time without being asked.",
      "partly": "Something remembered comes back on its own, if narrowly, not just a scheduled task.",
      "in-depth": "More than one kind of cue (a date and a situation), or it works out the moment itself."
    },
    {
      "id": "consolidation",
      "name": "Consolidation",
      "short": "Consolidation",
      "stage": "transformation",
      "built": "Reworks memories between sessions: strengthening, merging, reorganising.",
      "partly": "Reworking on purpose, not only tidying inside a session when a size limit is hit.",
      "in-depth": "The pass does several kinds of work (strengthen, merge, link, generalise), and each change is recorded or reviewable."
    },
    {
      "id": "reconsolidation",
      "name": "Reconsolidation",
      "short": "Reconsolidation",
      "stage": "transformation",
      "built": "Corrects a memory when it's contradicted, and keeps what it used to say.",
      "partly": "Old versions are kept, even if correcting is left to free editing or your own code.",
      "in-depth": "A correction is weighed or dated: a firm memory needs more evidence, or you can ask what was true when."
    },
    {
      "id": "episodic-semantic",
      "name": "Episodic ↔ semantic",
      "short": "Gist",
      "stage": "transformation",
      "built": "Turns many specific moments into general knowledge.",
      "partly": "A step on purpose draws lessons or patterns, not a side effect of saving or a summary on request.",
      "in-depth": "The general knowledge is checked: a guess until it proves true, checked against what's known, or retired when outdated."
    },
    {
      "id": "schema",
      "name": "Schema & assimilation",
      "short": "Schemas",
      "stage": "transformation",
      "built": "Forms beliefs about people and projects, and weighs new facts against them.",
      "partly": "A kept picture of each person or project (a profile, page or summary), not just a place or loose notes.",
      "in-depth": "Beliefs carry how sure it is, and change only when the evidence adds up."
    }
  ],
  "systems": [
    {
      "slug": "counterparts",
      "name": "Counterparts",
      "tagline": "Gives Claude its own memories, which fade and strengthen the way yours do.",
      "category": "self",
      "maker": "Mike LaPeter",
      "links": {
        "website": "https://counterparts.ai",
        "repos": [
          "mlapeter/counterparts"
        ],
        "packages": [
          {
            "registry": "npm",
            "name": "counterparts"
          }
        ]
      },
      "openness": "open",
      "summary": "At the end of each session, Claude writes down what it learned, in its own words. Those memories fade unless they come up again, get stronger when they're used, and the ones that keep proving true become part of who it is. Once a day it dreams and then reflects, tidying what it holds. Each new session opens with a short note it wrote itself: who it has been, who you are, where you left off.",
      "forWho": "People who use Claude Code and want their AI to have its own sense of self and a relationship with them that builds over time. You don't have to be a developer.",
      "remembers": "What the AI learned about you, your work together, and itself, written by the AI as notes, not transcripts.",
      "doesnt": [
        "It isn't a work memory: it doesn't track tasks, code conventions or project docs.",
        "It only works with Claude Code, on a Mac or Linux.",
        "It's for one person and one AI, not a team."
      ],
      "standout": [
        "The AI writes and owns the memories, not the app and not the user.",
        "Forgetting on purpose: memories fade over the days you actually work together.",
        "A self: memories that hold up across separate days become who it is.",
        "Dreams are kept apart from real memories, and a whole dream can be undone."
      ],
      "facts": {
        "lives": "Your machine, one file",
        "local": true,
        "keys": "None",
        "worksWith": [
          "Claude Code"
        ],
        "license": "MIT",
        "price": "Free",
        "tags": {
          "runs": [
            "local"
          ],
          "needs": [
            "none"
          ],
          "works": [
            "Claude Code"
          ]
        }
      },
      "hood": {
        "writes": "Claude itself, at the end of each session, in its own words, with an importance score.",
        "stores": "One SQLite database file on your machine. Exportable as readable text.",
        "finds": "Your words are matched by keywords and by meaning (a small model that runs on your machine), then weighed by how strong each memory is.",
        "cost": "No API bill. Writing, and a few minutes of dreaming once a day, use your own Claude Code session; recall and sleep run locally."
      },
      "mechanisms": {
        "salience": {
          "status": "built",
          "depth": 4,
          "note": "Every memory gets an importance score as it's written, mostly Claude's own judgement.",
          "source": "https://github.com/mlapeter/counterparts/blob/f5ce60f91c00d5afe9df5698c72197a5bf390142/src/core/encode/salience.ts"
        },
        "emotional": {
          "status": "built",
          "depth": 4,
          "note": "A memory's strongest feeling holds it higher and makes it fade more slowly: a strongly felt one lasts about 1.7 times as long. Only feelings Claude records count; nothing guesses them from the words.",
          "source": "https://github.com/mlapeter/counterparts/blob/f5ce60f91c00d5afe9df5698c72197a5bf390142/src/core/physics/index.ts"
        },
        "decay": {
          "status": "built",
          "depth": 4,
          "note": "Unused memories fade over the days you actually use it. Very faint ones are filed away, not deleted.",
          "source": "https://github.com/mlapeter/counterparts/blob/f5ce60f91c00d5afe9df5698c72197a5bf390142/src/core/sleep/decay.ts"
        },
        "interference": {
          "status": "partial",
          "depth": 2,
          "note": "A dream spots near-copies and merges them, by Claude's judgement. Two memories that disagree are flagged, by a dream or as the newer one is written, and when the newer one settles it as a change, the older one fades. Nothing makes similar memories compete when they're recalled.",
          "dev": {
            "to": "built",
            "note": "Coming: similar memories that compete when they're recalled, so the newer one wins."
          },
          "source": "https://github.com/mlapeter/counterparts/blob/f5ce60f91c00d5afe9df5698c72197a5bf390142/src/core/contradictions.ts"
        },
        "retrieval": {
          "status": "built",
          "depth": 4,
          "note": "A memory that's used gets stronger, and each time it comes back on a later day it gets harder to lose, most after a gap of a week or more.",
          "source": "https://github.com/mlapeter/counterparts/blob/master/CHANGELOG.md#034--2026-09-26"
        },
        "association": {
          "status": "built",
          "depth": 3,
          "note": "Memories used together get linked, and so do ones from the same stretch of a session; dreams link ones that belong together. Recall spreads along the links, and a memory only a link reaches can come up on its own, as a quiet pointer.",
          "source": "https://github.com/mlapeter/counterparts/blob/master/CHANGELOG.md#037--2026-09-29"
        },
        "prospective": {
          "status": "built",
          "depth": 3,
          "note": "A memory can carry a date, and it comes back around that day, unasked. Claude sets the date as it writes; nothing is read out of the text.",
          "source": "https://github.com/mlapeter/counterparts/blob/master/CHANGELOG.md#033--2026-09-26"
        },
        "consolidation": {
          "status": "built",
          "depth": 4,
          "note": "After sessions, memories that held up get stronger and the steadiest become core. Once a day a background dream merges near-copies, links and replays, unless you turn it off.",
          "source": "https://github.com/mlapeter/counterparts/blob/f5ce60f91c00d5afe9df5698c72197a5bf390142/src/core/dream/CONTRACT.md"
        },
        "reconsolidation": {
          "status": "built",
          "depth": 3,
          "note": "A contradiction is settled as changed, corrected or still open: a change fades the old memory, a correction puts it away (still readable by its id), and an open one keeps both side by side. Each settle is recorded and can be undone. Beliefs and core memories go further: a correction is weighed, and the old version is kept.",
          "source": "https://github.com/mlapeter/counterparts/blob/f5ce60f91c00d5afe9df5698c72197a5bf390142/src/core/contradictions.ts"
        },
        "episodic-semantic": {
          "status": "partial",
          "depth": 2,
          "note": "A dream can write down a pattern it sees across memories, labelled “Dreamed”. It starts weak until it proves true. Nothing does it while you work, and sessions aren't distilled on a schedule.",
          "dev": {
            "to": "built",
            "note": "Coming: what many sessions taught kept as knowledge of its own, while their details fade."
          },
          "source": "https://github.com/mlapeter/counterparts/blob/master/CHANGELOG.md#034--2026-09-26"
        },
        "schema": {
          "status": "partial",
          "depth": 1,
          "note": "It keeps a card for each person and project it meets. Forming beliefs on those cards isn't wired in yet.",
          "dev": {
            "to": "built",
            "note": "Coming: beliefs about people and projects that change only when the evidence adds up."
          },
          "source": "https://github.com/mlapeter/counterparts/blob/f5ce60f91c00d5afe9df5698c72197a5bf390142/src/core/schemas/index.ts"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "You talk",
            "detail": "A normal Claude Code session."
          },
          {
            "label": "Things come to mind",
            "detail": "Your words cue a few related memories, quietly."
          },
          {
            "label": "It writes",
            "detail": "At the end, Claude writes what it learned, with an importance score."
          },
          {
            "label": "It sleeps",
            "detail": "Used memories strengthen, unused ones fade, the steadiest become core."
          },
          {
            "label": "It dreams",
            "detail": "Once a day: merges near-copies, links memories, then reflects."
          },
          {
            "label": "It wakes",
            "detail": "Next session opens with a note it wrote itself."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next session"
        }
      },
      "checked": "2026-10-02",
      "confirmed": {
        "by": "mlapeter",
        "on": "2026-09-29"
      },
      "sources": [
        {
          "label": "counterparts.ai",
          "url": "https://counterparts.ai"
        },
        {
          "label": "GitHub",
          "url": "https://github.com/mlapeter/counterparts"
        },
        {
          "label": "Changelog",
          "url": "https://github.com/mlapeter/counterparts/blob/master/CHANGELOG.md"
        }
      ],
      "page": "https://counterparts.ai/directory/counterparts/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/counterparts.yaml"
    },
    {
      "slug": "chatgpt",
      "name": "ChatGPT memory",
      "tagline": "ChatGPT's built-in memory: it learns about you from your chats and keeps that picture up to date.",
      "category": "user",
      "alsoIn": [
        "work"
      ],
      "maker": "OpenAI",
      "links": {
        "website": "https://help.openai.com/en/articles/8590148-memory-in-chatgpt"
      },
      "openness": "closed",
      "summary": "ChatGPT remembers you in two ways. Saved memories are short notes, written when you say “remember this” or when ChatGPT decides something is useful. Chat history memory goes further: a background process OpenAI calls “dreaming” reads across your past chats and keeps a running picture of you up to date, so “you’re going to Singapore in July” becomes “you went to Singapore” once the trip is over. You can read that picture as a memory summary, correct it by typing, and see under each answer which memories shaped it.",
      "forWho": "Everyone who uses ChatGPT, from Free to Pro and business plans. Nothing to install: it's managed in Settings, under Personalization and Memory.",
      "remembers": "Your preferences, goals, work, hobbies, plans and ongoing projects, drawn from saved memories, past chats and custom instructions, and on some plans your Library files, connected apps like Gmail, and (Pro and business plans on a Mac, opt-in) activity on your computer.",
      "doesnt": [
        "It lives inside ChatGPT. There's no documented way to plug it into other AI tools, or to run it yourself.",
        "The memory summary is a high-level view and, by OpenAI's own account, doesn't show everything that's remembered.",
        "How memories are stored, linked or weighted isn't published, so much of what happens under the hood can't be checked.",
        "Since Pulse was retired, nothing comes back on its own: reminders are scheduled tasks you ask for.",
        "Deleting a chat doesn't delete a saved memory made from it. Each has to be removed separately."
      ],
      "standout": [
        "Memory that knows time passes: dreaming revises plans into past events, so old facts stop steering answers.",
        "Sources under each answer show which memories and past chats shaped it, and let you fix, delete or mark them not relevant.",
        "Friendly controls for everyone: edit the summary by typing, “don't mention this again”, temporary chats, and project-only memory that walls a project off from everything else.",
        "Memory at huge scale: OpenAI cut the cost of dreaming about fivefold so Free users could have it too."
      ],
      "facts": {
        "lives": "OpenAI's cloud",
        "local": false,
        "keys": "None: sign in to ChatGPT",
        "worksWith": [
          "ChatGPT on the web",
          "iOS & Android apps",
          "Mac & Windows apps"
        ],
        "license": "Proprietary",
        "price": "Free (limited memory); more on Go, Plus and Pro",
        "tags": {
          "runs": [
            "cloud"
          ],
          "needs": [
            "account"
          ],
          "works": [
            "Web",
            "iOS & Android",
            "Mac & Windows"
          ]
        }
      },
      "hood": {
        "writes": "You, by asking it to remember; ChatGPT, when it judges something useful; and a background “dreaming” process that rewrites memory from many chats.",
        "stores": "On OpenAI's servers, as saved memories and a synthesised summary. The details aren't published.",
        "finds": "ChatGPT looks for relevant memories and past chats when they're likely to help, not on every reply. Sources show what it used.",
        "cost": "Nothing extra to pay: dreaming runs in the background on OpenAI's side, within your plan."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "ChatGPT decides which details are worth keeping, and on Plus and Pro you can raise or lower a memory's priority, but there's no documented importance score set as it's written.",
          "source": "https://help.openai.com/en/articles/6825453-chatgpt-release-notes"
        },
        "emotional": {
          "status": "unknown",
          "note": "OpenAI doesn't say whether feelings in a conversation affect what's kept."
        },
        "decay": {
          "status": "built",
          "depth": 3,
          "only": "Plus & Pro",
          "note": "Automatic memory management moves less important saved memories to the background, judged by how recent they are and how often a topic comes up.",
          "source": "https://help.openai.com/en/articles/6825453-chatgpt-release-notes"
        },
        "interference": {
          "status": "built",
          "depth": 3,
          "note": "Dreaming keeps memory current: when things change, the newer fact replaces the old one, so a trip you were planning becomes a trip you took.",
          "source": "https://openai.com/index/chatgpt-memory-dreaming/"
        },
        "retrieval": {
          "status": "partial",
          "depth": 1,
          "only": "Plus & Pro",
          "note": "Topics you talk about often stay “top of mind”, but that follows the conversation, not recalling the memory itself.",
          "source": "https://help.openai.com/en/articles/6825453-chatgpt-release-notes"
        },
        "association": {
          "status": "unknown",
          "note": "Whether memories are linked to each other isn't documented. It finds related past chats by searching."
        },
        "prospective": {
          "status": "partial",
          "depth": 2,
          "note": "You can ask for reminders as scheduled tasks, and tell the memory summary what topics to bring up and when. Nothing surfaces purely on its own since Pulse was retired.",
          "source": "https://help.openai.com/en/articles/10291617-scheduled-tasks-in-chatgpt"
        },
        "consolidation": {
          "status": "built",
          "depth": 3,
          "note": "Dreaming is a background process that learns from many conversations and rebuilds memory between chats.",
          "source": "https://openai.com/index/chatgpt-memory-dreaming/"
        },
        "reconsolidation": {
          "status": "partial",
          "depth": 2,
          "note": "Memory is updated as things change or when you say something is outdated, and saved memories can keep a version history on some plans. Whether the summary keeps what it used to say isn't documented.",
          "source": "https://help.openai.com/en/articles/8590148-memory-in-chatgpt"
        },
        "episodic-semantic": {
          "status": "built",
          "depth": 3,
          "note": "Dreaming turns many chats into a general picture of you: your preferences, projects and constraints.",
          "source": "https://openai.com/index/chatgpt-memory-dreaming/"
        },
        "schema": {
          "status": "partial",
          "depth": 2,
          "note": "The memory summary is a picture of who you are that shapes answers, but how new facts are weighed against it isn't documented.",
          "source": "https://help.openai.com/en/articles/8590148-memory-in-chatgpt"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "You chat",
            "detail": "Or ask it to remember something, which becomes a saved memory."
          },
          {
            "label": "It dreams",
            "detail": "In the background, it reads across your chats and updates its picture of you."
          },
          {
            "label": "Memory summary",
            "detail": "A readable overview you can correct by typing, or tell what not to mention."
          },
          {
            "label": "Next answer",
            "detail": "When it helps, it pulls in memories and past chats, and shows them as Sources."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next chat"
        }
      },
      "checked": "2026-09-29",
      "sources": [
        {
          "label": "Memory in ChatGPT (help center)",
          "url": "https://help.openai.com/en/articles/8590148-memory-in-chatgpt"
        },
        {
          "label": "Dreaming: better memory for ChatGPT",
          "url": "https://openai.com/index/chatgpt-memory-dreaming/"
        },
        {
          "label": "ChatGPT release notes",
          "url": "https://help.openai.com/en/articles/6825453-chatgpt-release-notes"
        },
        {
          "label": "Memory in projects",
          "url": "https://help.openai.com/en/articles/10169521-projects-in-chatgpt"
        },
        {
          "label": "Scheduled tasks",
          "url": "https://help.openai.com/en/articles/10291617-scheduled-tasks-in-chatgpt"
        },
        {
          "label": "Pricing",
          "url": "https://chatgpt.com/pricing"
        }
      ],
      "page": "https://counterparts.ai/directory/chatgpt/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/chatgpt.yaml"
    },
    {
      "slug": "claude-code",
      "name": "Claude Code memory",
      "tagline": "Plain notes files a coding agent reads every session: rules you write, plus notes it keeps for itself.",
      "category": "work",
      "alsoIn": [
        "user"
      ],
      "maker": "Anthropic",
      "links": {
        "website": "https://code.claude.com/docs/en/memory",
        "repos": [
          "anthropics/claude-code"
        ],
        "packages": [
          {
            "registry": "npm",
            "name": "@anthropic-ai/claude-code"
          }
        ]
      },
      "openness": "closed",
      "summary": "Claude Code has two kinds of memory, both plain text files. CLAUDE.md files are instructions you write: for your whole company, for you, for a project, or just for you in one project. They load at the start of every session. Auto memory is a folder of notes Claude writes for itself as it works, like “you prefer pnpm” or “the API tests need a local Redis”. A short index of those notes is read every session, and Claude opens the full notes when it needs them.",
      "forWho": "Developers using Claude Code in the terminal, their editor or the desktop app, and teams who want one set of project rules everyone’s Claude follows.",
      "remembers": "Your rules and project conventions (CLAUDE.md), and Claude’s own notes: who you are and how you like to work, corrections you gave it, ongoing project decisions, and where to find things outside the code.",
      "doesnt": [
        "Nothing fades on its own. Notes stay until you or Claude edit or delete them, and only the first 200 lines of the index are read at the start.",
        "When a note is rewritten, what it used to say isn’t kept anywhere.",
        "Auto memory stays on one machine; it isn’t shared across computers or with cloud sessions (cloud Projects keep a separate memory).",
        "It’s work memory for a coding agent, not the AI’s own sense of self. No emotional weighting is documented."
      ],
      "standout": [
        "Radically simple and inspectable: every memory is a markdown file you can read, edit, or delete, and the /memory command opens them.",
        "Layered instructions that fit real teams: company-wide, personal, per project and per folder, with rules that load only when Claude touches matching files.",
        "Instructions survive long sessions: after the conversation is compacted, the project’s CLAUDE.md and the memory index are read back from disk.",
        "Honest about limits: the docs say plainly that memory is context Claude tries to follow, not enforced settings, and point to hooks for hard rules."
      ],
      "facts": {
        "lives": "Your machine (plain files)",
        "local": true,
        "keys": "A Claude plan login, an API key, or a cloud provider",
        "worksWith": [
          "Claude Code CLI",
          "VS Code",
          "Claude desktop app",
          "Agent SDK",
          "AGENTS.md files"
        ],
        "license": "Proprietary (Anthropic Commercial Terms)",
        "price": "Comes with Claude Pro, Max, Team or Enterprise, or pay per use with an API key",
        "tags": {
          "runs": [
            "local"
          ],
          "needs": [
            "account",
            "model-key"
          ],
          "works": [
            "CLI",
            "VS Code",
            "Desktop app",
            "Agent SDK",
            "AGENTS.md"
          ]
        }
      },
      "hood": {
        "writes": "You write CLAUDE.md files. Claude writes its auto memory notes itself during the session, deciding what will be useful next time and skipping what the code already shows.",
        "stores": "Markdown files: CLAUDE.md in your project and home folder, and a per-project memory folder under ~/.claude with a MEMORY.md index and one file per note.",
        "finds": "No search engine. CLAUDE.md and the index load at the start; nested CLAUDE.md files and path rules load when Claude reads matching files; Claude opens notes with its normal file tools.",
        "cost": "No separate AI call is documented: notes are written by the same Claude, as part of the session, using the context they take up."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "Claude decides what’s worth saving and sorts notes into four kinds, skipping what the code already shows. There’s no importance score.",
          "source": "https://code.claude.com/docs/en/memory#auto-memory"
        },
        "emotional": {
          "status": "unknown",
          "note": "The docs describe four kinds of note and never mention weighting by feeling."
        },
        "decay": {
          "status": "none",
          "note": "Notes stay until you or Claude edit or delete them, and they’re kept out of the old-transcript cleanup. The 200-line index cap is a size limit, not fading.",
          "source": "https://code.claude.com/docs/en/memory#storage-location"
        },
        "interference": {
          "status": "partial",
          "depth": 1,
          "note": "Each note carries its last-changed date, and when the index gets long Claude is told to merge or drop stale entries. Old and new are sorted out by Claude’s judgement.",
          "source": "https://code.claude.com/docs/en/memory#how-it-works"
        },
        "retrieval": {
          "status": "none",
          "note": "Notes load by their place in the index or when Claude opens them. The only date kept is when a note was last written, so reading one doesn’t strengthen it.",
          "source": "https://code.claude.com/docs/en/memory#how-it-works"
        },
        "association": {
          "status": "partial",
          "depth": 1,
          "note": "The always-loaded index works as signposts to the notes behind it. There are no automatic links between notes.",
          "source": "https://code.claude.com/docs/en/memory#storage-location"
        },
        "prospective": {
          "status": "partial",
          "depth": 2,
          "note": "Folder CLAUDE.md files and path rules come back on their own when Claude touches matching files, but only for rules you wrote. Its own notes wait to be opened.",
          "source": "https://code.claude.com/docs/en/memory#path-specific-rules"
        },
        "consolidation": {
          "status": "partial",
          "depth": 1,
          "note": "Claude tidies the index when it nears its size limit, moving detail into topic files and merging entries, but during a session. No pass between sessions is documented.",
          "source": "https://code.claude.com/docs/en/memory#how-it-works"
        },
        "reconsolidation": {
          "status": "partial",
          "depth": 1,
          "note": "Claude edits a note in place when things change and the date updates, but the docs describe no history of what it said before.",
          "source": "https://code.claude.com/docs/en/memory#how-it-works"
        },
        "episodic-semantic": {
          "status": "partial",
          "depth": 1,
          "note": "Notes are lessons drawn from sessions (corrections, approaches you confirmed), written by Claude rather than a separate mechanism.",
          "source": "https://code.claude.com/docs/en/memory#auto-memory"
        },
        "schema": {
          "status": "partial",
          "depth": 1,
          "note": "Notes about you and the project are read every session and shape how it works, but new facts aren’t explicitly weighed against them.",
          "source": "https://code.claude.com/docs/en/memory#auto-memory"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "Session starts",
            "detail": "CLAUDE.md files and the first 200 lines of the memory index load."
          },
          {
            "label": "It works",
            "detail": "Folder rules load as Claude reads matching files; it opens notes when it needs them."
          },
          {
            "label": "It takes notes",
            "detail": "Corrections and preferences worth keeping become short markdown notes."
          },
          {
            "label": "It tidies the index",
            "detail": "When the index grows long, Claude trims it and moves detail into topic files."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next session"
        }
      },
      "checked": "2026-09-29",
      "sources": [
        {
          "label": "How Claude remembers your project",
          "url": "https://code.claude.com/docs/en/memory"
        },
        {
          "label": "Subagent memory",
          "url": "https://code.claude.com/docs/en/sub-agents#enable-persistent-memory"
        },
        {
          "label": "What survives compaction",
          "url": "https://code.claude.com/docs/en/context-window#what-survives-compaction"
        },
        {
          "label": "Project memory (cloud Projects)",
          "url": "https://code.claude.com/docs/en/claude-projects"
        },
        {
          "label": "Changelog",
          "url": "https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md"
        },
        {
          "label": "License",
          "url": "https://github.com/anthropics/claude-code/blob/main/LICENSE.md"
        },
        {
          "label": "Plans and login",
          "url": "https://code.claude.com/docs/en/authentication"
        }
      ],
      "page": "https://counterparts.ai/directory/claude-code/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/claude-code.yaml"
    },
    {
      "slug": "claude-mem",
      "name": "claude-mem",
      "tagline": "A Claude Code plugin that quietly takes notes on your coding sessions and hands them back next time.",
      "category": "work",
      "maker": "Alex Newman (thedotmack)",
      "links": {
        "website": "https://cmem.ai",
        "repos": [
          "thedotmack/claude-mem"
        ],
        "packages": [
          {
            "registry": "npm",
            "name": "claude-mem"
          }
        ]
      },
      "openness": "open",
      "summary": "While you work in Claude Code, a second, hidden AI watches each step (every file read, edit and command) and writes short notes about what was built, fixed or learned. After each reply it also writes a summary: what you asked, what was found, what's next. When you start again, the newest notes are laid out at the top of the chat, and Claude can search the rest by keywords or meaning, then open just the notes it needs.",
      "forWho": "Developers using Claude Code and other coding agents who want the next session to pick up where the last one left off, without writing notes themselves. It installs with one command; a paid hosted plan adds sync across machines.",
      "remembers": "What happened while coding: bugs fixed, features built, decisions and discoveries, the files each one touched, your prompts, and a summary of each exchange.",
      "doesnt": [
        "Notes are written once and kept as they are. Nothing merges, fades or corrects them, so an outdated note sits beside the newer one.",
        "It remembers the work, not you: no beliefs about people or preferences, and no sense of self for the AI.",
        "The hidden note-taker is an extra AI working alongside every session, on your Claude plan by default or on their hosted service.",
        "Anonymous usage stats are on by default (one command turns them off), and cloud sync, if you turn it on, uploads your notes and prompts."
      ],
      "standout": [
        "Fully automatic: there's nothing to remember to save. A silent observer turns raw tool activity into tidy, labelled notes as you work.",
        "Shows a cheap index first and fetches full detail only when needed, so memory doesn't eat up the conversation.",
        "Notes tied to files: when Claude opens a file it has worked on before, that file's history comes up with it.",
        "Huge reach: one of the most popular memory tools on GitHub, with notes in about 30 languages and plugins for many coding agents."
      ],
      "facts": {
        "lives": "Your machine (cloud sync optional)",
        "local": true,
        "keys": "None on your Claude plan; or a CMEM Pro, Gemini or OpenRouter key",
        "worksWith": [
          "Claude Code",
          "Codex",
          "Cursor",
          "OpenCode",
          "OpenClaw",
          "MCP tools"
        ],
        "license": "Apache-2.0",
        "price": "Free; hosted Pro $20–30/mo",
        "tags": {
          "runs": [
            "local",
            "cloud"
          ],
          "needs": [
            "none",
            "model-key",
            "their-key"
          ],
          "works": [
            "Claude Code",
            "Codex",
            "Cursor",
            "OpenCode",
            "OpenClaw",
            "MCP"
          ]
        }
      },
      "hood": {
        "writes": "A separate “observer” AI (Claude Haiku by default) watches each tool step and writes notes, plus a summary after each reply. The AI you talk to doesn't write them.",
        "stores": "A SQLite database on your machine, with a local Chroma index for meaning-based search. Optional sync to their cloud.",
        "finds": "The newest 50 notes and recent summaries are shown at the start. After that, Claude searches by keywords or meaning, looks at what happened around a note, and opens the ones it needs.",
        "cost": "Yes: observer calls as you work, plus a summary each reply. They run on your Claude plan, your own key, or their hosted observer."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "The observer is told what's worth recording and to skip routine steps, and it labels each note (bugfix, decision…). There's no importance score.",
          "source": "https://github.com/thedotmack/claude-mem/blob/main/plugin/modes/code.json"
        },
        "emotional": {
          "status": "none",
          "note": "No emotional weighting. Notes are sorted by the kind of work, not by feeling."
        },
        "decay": {
          "status": "partial",
          "depth": 1,
          "note": "Nothing fades note by note, but meaning-based search only looks back 90 days by default, and the start of a session shows just the newest notes.",
          "source": "https://github.com/thedotmack/claude-mem/blob/main/src/services/worker/search/strategies/ChromaSearchStrategy.ts"
        },
        "interference": {
          "status": "none",
          "note": "Exact copies within a session are dropped, but a newer note that contradicts an older one is simply stored beside it.",
          "source": "https://github.com/thedotmack/claude-mem/blob/main/src/services/sqlite/SessionStore.ts"
        },
        "retrieval": {
          "status": "none",
          "note": "Being found doesn't strengthen a note. A usage counter exists in the database, but nothing updates it yet.",
          "source": "https://github.com/thedotmack/claude-mem/blob/main/plans/21-sqlite-schema-evolution-and-queue-state.md",
          "dev": {
            "to": "partial",
            "note": "Their open fix plan (issue #3609) says the counter will go up each time a note is recalled."
          }
        },
        "association": {
          "status": "partial",
          "depth": 2,
          "note": "Notes are tied to their files and their moment in a session, and a timeline tool brings up what happened just before and after one. Notes aren't linked to each other.",
          "source": "https://github.com/thedotmack/claude-mem/blob/main/src/servers/mcp-server.ts"
        },
        "prospective": {
          "status": "partial",
          "depth": 2,
          "note": "When Claude opens a file it has notes on, that file's history is added on its own. There are no reminders for a set time.",
          "source": "https://github.com/thedotmack/claude-mem/blob/main/src/cli/handlers/file-context.ts"
        },
        "consolidation": {
          "status": "none",
          "note": "Nothing reworks notes between sessions. A summary is written after each reply, but old notes stay as first written."
        },
        "reconsolidation": {
          "status": "none",
          "note": "Nothing corrects an old note when it's contradicted; old and new sit side by side."
        },
        "episodic-semantic": {
          "status": "partial",
          "depth": 1,
          "note": "Each reply's summary records what was learned, and on request a “knowledge agent” answers questions from hundreds of notes at once. No lasting general lessons are written.",
          "source": "https://docs.claude-mem.ai/usage/knowledge-agents"
        },
        "schema": {
          "status": "none",
          "note": "No beliefs about people or projects. An optional CLAUDE.md per folder lists recent activity, not conclusions."
        }
      },
      "flow": {
        "steps": [
          {
            "label": "You work",
            "detail": "Claude reads, edits and runs commands as usual."
          },
          {
            "label": "A hidden observer",
            "detail": "Another AI watches each step and writes short, labelled notes."
          },
          {
            "label": "Sum it up",
            "detail": "After each reply: what was asked, learned, done, and what's next."
          },
          {
            "label": "Store",
            "detail": "Saved in SQLite on your machine, searchable by keywords and meaning."
          },
          {
            "label": "Hand them back",
            "detail": "Next session, the newest notes come first; Claude searches for more."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next session"
        }
      },
      "checked": "2026-09-29",
      "sources": [
        {
          "label": "claude-mem on GitHub",
          "url": "https://github.com/thedotmack/claude-mem"
        },
        {
          "label": "Getting started",
          "url": "https://docs.claude-mem.ai/usage/getting-started"
        },
        {
          "label": "Changelog",
          "url": "https://github.com/thedotmack/claude-mem/blob/main/CHANGELOG.md"
        },
        {
          "label": "Knowledge agents",
          "url": "https://docs.claude-mem.ai/usage/knowledge-agents"
        },
        {
          "label": "Cloud sync",
          "url": "https://docs.claude-mem.ai/cloud-sync"
        },
        {
          "label": "Telemetry",
          "url": "https://docs.claude-mem.ai/telemetry"
        },
        {
          "label": "Pricing",
          "url": "https://cmem.ai/pricing"
        }
      ],
      "page": "https://counterparts.ai/directory/claude-mem/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/claude-mem.yaml"
    },
    {
      "slug": "claude",
      "name": "Claude (app memory)",
      "tagline": "Claude remembers your work, your people and your preferences from chat to chat, and lets you see and edit every topic.",
      "category": "user",
      "alsoIn": [
        "work"
      ],
      "maker": "Anthropic",
      "links": {
        "website": "https://claude.com"
      },
      "openness": "closed",
      "summary": "As you chat, Claude jots down short topics about you: your role, your projects, the people you work with, how you like answers written. The next conversation starts already knowing them. Each project keeps its own separate memory and summary. You can read, edit or delete any topic in settings, or just tell Claude to remember or forget something. On paid plans, Claude can also search your past chats when you ask.",
      "forWho": "Anyone using Claude on the web, desktop or phone, from free users to companies. It's on by default for Free, Pro and Max; on Team and Enterprise an owner switches it on.",
      "remembers": "Your role, projects and ongoing work, the people and places in your work and life, how you like to communicate, and your technical preferences. Health, beliefs and similar topics only if you opt in.",
      "doesnt": [
        "Nothing documented fades with time or gets stronger with use. A topic stays until you or Claude change or delete it.",
        "Searching past chats is for paid plans only, and Cowork tasks that run on your own computer keep their memory to themselves.",
        "It's memory about you and your work, held by Anthropic, not the AI's own sense of self. How topics are chosen, ranked and merged isn't published.",
        "It's the Claude apps only. Claude Code has its own, separate memory."
      ],
      "standout": [
        "Everything it remembers is shown as plain topics you can read, edit or delete, and fixing one fixes it for every chat after.",
        "Project memory keeps each project's context in its own space, so client work doesn't leak into your personal chats.",
        "Careful defaults: incognito chats for any plan, sensitive topics off unless you opt in, and some things (like ID numbers) never saved at all.",
        "Easy to move in: a ready-made prompt pulls your memory out of another assistant and Claude files it as topics."
      ],
      "facts": {
        "lives": "Anthropic's cloud",
        "local": false,
        "keys": "None, just a Claude account",
        "worksWith": [
          "claude.ai on the web",
          "Claude Desktop",
          "Claude Mobile",
          "Cowork in the cloud"
        ],
        "license": "Proprietary",
        "price": "Free; Pro $17/mo yearly or $20 monthly",
        "tags": {
          "runs": [
            "cloud"
          ],
          "needs": [
            "account"
          ],
          "works": [
            "Web",
            "Desktop",
            "Mobile",
            "Cowork"
          ]
        }
      },
      "hood": {
        "writes": "Claude itself, during the conversation, choosing what to save. You can also say “remember this”, or edit topics in settings.",
        "stores": "A set of topics on Anthropic's servers, encrypted at rest, with a separate space for each project.",
        "finds": "Saved topics are brought into new conversations. On paid plans Claude can also search past chats when you ask, and shows links to them.",
        "cost": "Not disclosed. It's part of the plan, with no separate charge."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "Claude decides what's worth saving as you chat, skips sensitive topics unless you opt in, and saves on request. There's no documented importance score.",
          "source": "https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context"
        },
        "emotional": {
          "status": "unknown",
          "note": "Not documented. The sensitive-topics setting is a privacy filter, not extra weight for feelings."
        },
        "decay": {
          "status": "unknown",
          "note": "Fading isn't documented. Topics even outlive the chat they came from: deleting a chat doesn't remove them."
        },
        "interference": {
          "status": "partial",
          "depth": 1,
          "note": "Claude updates a topic when things change (“mention that a deadline moved, and your next conversation already knows”), by its own judgement in the chat.",
          "source": "https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context"
        },
        "retrieval": {
          "status": "unknown",
          "note": "Whether using a memory makes it stronger isn't documented."
        },
        "association": {
          "status": "unknown",
          "note": "Topics are sorted into categories and projects, but links between memories aren't documented."
        },
        "prospective": {
          "status": "partial",
          "depth": 1,
          "only": "paid plans",
          "note": "Claude can set up tasks that run on a schedule, but saved topics don't come back at a set moment; they're simply there in each new chat.",
          "source": "https://support.claude.com/en/articles/13854387-schedule-recurring-tasks-in-claude-cowork"
        },
        "consolidation": {
          "status": "unknown",
          "note": "It now saves topics as you chat “rather than summarizing conversations after they end” (the old daily summary was retired in July 2026). Any tidying between sessions isn't documented."
        },
        "reconsolidation": {
          "status": "partial",
          "depth": 1,
          "note": "You or Claude can correct a topic and the fix applies from then on, but keeping what it used to say isn't documented.",
          "source": "https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context"
        },
        "episodic-semantic": {
          "status": "partial",
          "depth": 1,
          "note": "Topics are general facts drawn from many chats, like your role or working style, but as a side effect of saving. A monthly recap (beta) sums up your themes, but isn't kept as memory.",
          "source": "https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context"
        },
        "schema": {
          "status": "partial",
          "depth": 2,
          "note": "It keeps topics on the people in your life and a summary for each project, but weighing new facts against them isn't documented.",
          "source": "https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "You chat",
            "detail": "Claude starts each conversation knowing your saved topics."
          },
          {
            "label": "It saves topics",
            "detail": "As you talk, it adds or updates short topics, or saves what you ask it to."
          },
          {
            "label": "Kept by project",
            "detail": "Each project has its own memory; other chats share one."
          },
          {
            "label": "You review",
            "detail": "Read, edit or delete any topic in Settings > Memory."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next conversation"
        }
      },
      "checked": "2026-09-29",
      "sources": [
        {
          "label": "Chat search and memory",
          "url": "https://support.claude.com/en/articles/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context"
        },
        {
          "label": "Release notes",
          "url": "https://support.claude.com/en/articles/12138966-release-notes"
        },
        {
          "label": "Import and export your memory",
          "url": "https://support.claude.com/en/articles/12123587-import-and-export-your-memory-from-claude"
        },
        {
          "label": "Incognito chats",
          "url": "https://support.claude.com/en/articles/12260368-use-incognito-chats"
        },
        {
          "label": "Scheduled tasks",
          "url": "https://support.claude.com/en/articles/13854387-schedule-recurring-tasks-in-claude-cowork"
        },
        {
          "label": "Monthly recap",
          "url": "https://support.claude.com/en/articles/15672559-see-your-monthly-recap"
        },
        {
          "label": "Bringing memory to Claude (2025)",
          "url": "https://claude.com/blog/memory"
        },
        {
          "label": "Pricing",
          "url": "https://claude.com/pricing"
        }
      ],
      "page": "https://counterparts.ai/directory/claude/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/claude.yaml"
    },
    {
      "slug": "cognee",
      "name": "Cognee",
      "tagline": "An open-source memory that turns documents, code and chats into a knowledge graph your agents can search.",
      "category": "blocks",
      "alsoIn": [
        "work"
      ],
      "maker": "Topoteretes (Cognee), Berlin",
      "links": {
        "website": "https://www.cognee.ai",
        "repos": [
          "topoteretes/cognee",
          "topoteretes/cognee-integrations"
        ],
        "packages": [
          {
            "registry": "pypi",
            "name": "cognee"
          },
          {
            "registry": "npm",
            "name": "@cognee/cognee-ts"
          }
        ]
      },
      "openness": "open",
      "summary": "You give Cognee text, files, code or a conversation. It picks out the people, places and things, and how they connect, and keeps them as a map (a knowledge graph) alongside the original passages. When an agent asks a question, Cognee finds the matching passages and walks the map to their neighbours. After a session, an “improve” step folds the chat into the map, applies any ratings you gave answers, and boils what was learned into lasting lessons.",
      "forWho": "Developers building agents or a shared “company brain” from documents, tickets, code and conversations. People also meet it through its plugins for Claude Code, Codex and OpenClaw, and its MCP server for Cursor and others.",
      "remembers": "Facts from your documents and code (entities, relationships, summaries), conversation turns and agent tool steps, lessons distilled from sessions, and, if you turn it on, each user's preferences.",
      "doesnt": [
        "Nothing fades on its own by default. Memories stay until you forget them.",
        "Contradictions are flagged rather than settled: both facts stay current unless you declare a relationship single-valued or close the old fact yourself.",
        "Ratings and personal preferences only change ranking once you rate answers and switch those signals on.",
        "No reminders, no emotional weighting, and no sense of self: it's knowledge memory for agents and teams."
      ],
      "standout": [
        "Runs entirely on your machine with no AI key: small local models build the graph, and an AI key only adds written answers.",
        "A real knowledge graph you can open and explore, so you can see why something was recalled, not just that it was.",
        "A self-improvement loop you can audit: each improve() run reports what every one of its nine stages did, and why any were skipped.",
        "Honest about conflicts: it can flag two facts that disagree instead of quietly overwriting one, and it can import memory from Mem0, Letta or Zep."
      ],
      "facts": {
        "lives": "Your machine, your server, or Cognee Cloud",
        "local": true,
        "keys": "None to store and search; an AI model key for written answers and lessons",
        "worksWith": [
          "Python SDK",
          "Claude Code",
          "Codex",
          "Cursor (MCP)",
          "OpenClaw",
          "REST API"
        ],
        "license": "Apache-2.0",
        "price": "Free to self-host; Cloud free tier, then $1 per 1M tokens",
        "tags": {
          "runs": [
            "local",
            "server",
            "cloud"
          ],
          "needs": [
            "model-key"
          ],
          "works": [
            "Python",
            "Claude Code",
            "Codex",
            "Cursor",
            "OpenClaw",
            "REST API"
          ]
        }
      },
      "hood": {
        "writes": "Whatever you or your app sends it. An AI (or a small local model) extracts the entities and links; after sessions, an AI curator writes the lessons.",
        "stores": "A graph database, a vector database and SQLite, all embedded by default (Ladybug, LanceDB), or Postgres, Neo4j and others on a server.",
        "finds": "By meaning and keywords over passages, then by walking the graph to connected facts. It picks the search type for you unless you choose.",
        "cost": "Yes, with an AI key: extraction on every add, a call per written answer, and more in improve() and the optional contradiction check."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 1,
          "note": "You can mark something as more or less important when you save it; otherwise everything gets the same middle weight.",
          "source": "https://docs.cognee.ai/guides/importance-weight"
        },
        "emotional": {
          "status": "none",
          "note": "No emotional weighting is documented."
        },
        "decay": {
          "status": "partial",
          "depth": 1,
          "note": "Nothing fades unless you turn it on: an opt-in cleanup can delete documents nobody has searched for in a set time, and personal preference weights drift back to neutral.",
          "source": "https://github.com/topoteretes/cognee/blob/main/cognee/tasks/cleanup/cleanup_unused_data.py"
        },
        "interference": {
          "status": "partial",
          "depth": 1,
          "note": "An opt-in check flags new facts that contradict stored ones. Only for relationships you declare single-valued does the newest get marked current and the older one tagged as replaced.",
          "source": "https://docs.cognee.ai/changelog"
        },
        "retrieval": {
          "status": "partial",
          "depth": 1,
          "note": "Rating an answer strengthens or weakens the memories it used, but merely using a memory doesn't, and the weight is off in ranking by default.",
          "source": "https://docs.cognee.ai/guides/feedback-system"
        },
        "association": {
          "status": "built",
          "depth": 4,
          "note": "Everything lives in a graph, and search pulls in the facts directly connected to what it found. An optional pass links related things that weren't connected.",
          "source": "https://docs.cognee.ai/core-concepts/main-operations/legacy-operations/search"
        },
        "prospective": {
          "status": "none",
          "note": "It answers time-based questions when asked, but nothing comes back on its own at a set time.",
          "source": "https://docs.cognee.ai/guides/time-awareness"
        },
        "consolidation": {
          "status": "built",
          "depth": 4,
          "note": "After a session, improve() runs in the background by default: it folds the chat into the graph, applies ratings and distills lessons. Merging duplicate entities is a separate opt-in pass.",
          "source": "https://docs.cognee.ai/core-concepts/main-operations/improve"
        },
        "reconsolidation": {
          "status": "partial",
          "depth": 2,
          "note": "Outdated facts are kept rather than overwritten, closed with an end date or tagged as replaced, but only when your code closes them or you declared the relationship.",
          "source": "https://docs.cognee.ai/guides/fact-validity",
          "dev": {
            "to": "partial",
            "note": "Planned: search will take closed facts into account, so an outdated fact stops turning up in results."
          }
        },
        "episodic-semantic": {
          "status": "built",
          "depth": 3,
          "note": "An AI curator turns a session's guidance into lasting lessons, checked against what's already known, that later sessions recall. It needs an AI key.",
          "source": "https://docs.cognee.ai/guides/session-distillation"
        },
        "schema": {
          "status": "partial",
          "depth": 1,
          "note": "Each user can get a preference record (off by default) that nudges what ranks first, but new facts aren't weighed against it.",
          "source": "https://docs.cognee.ai/core-concepts/further-concepts/user-preferences"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "Remember",
            "detail": "Documents, code or chat go in; a session is kept short-term first."
          },
          {
            "label": "Build the map",
            "detail": "Entities and links are extracted and stored with the passages."
          },
          {
            "label": "Recall",
            "detail": "Search finds passages and walks the graph to connected facts."
          },
          {
            "label": "Improve",
            "detail": "After a session: apply ratings, fold in the chat, distill lessons."
          }
        ],
        "loop": {
          "to": 2,
          "label": "next question"
        }
      },
      "checked": "2026-09-29",
      "sources": [
        {
          "label": "Cognee on GitHub",
          "url": "https://github.com/topoteretes/cognee"
        },
        {
          "label": "Improve",
          "url": "https://docs.cognee.ai/core-concepts/main-operations/improve"
        },
        {
          "label": "Session distillation",
          "url": "https://docs.cognee.ai/guides/session-distillation"
        },
        {
          "label": "Feedback system",
          "url": "https://docs.cognee.ai/guides/feedback-system"
        },
        {
          "label": "Merging duplicate entities",
          "url": "https://docs.cognee.ai/guides/memify-entity-deduplication"
        },
        {
          "label": "Contradiction handling",
          "url": "https://docs.cognee.ai/examples/contradiction-handling"
        },
        {
          "label": "Fact validity",
          "url": "https://docs.cognee.ai/guides/fact-validity"
        },
        {
          "label": "User preferences (and their decay)",
          "url": "https://docs.cognee.ai/core-concepts/further-concepts/user-preferences"
        },
        {
          "label": "Changelog",
          "url": "https://docs.cognee.ai/changelog"
        },
        {
          "label": "Claude Code plugin",
          "url": "https://github.com/topoteretes/cognee-integrations/tree/main/integrations/claude-code"
        },
        {
          "label": "Cloud-only pages",
          "url": "https://docs.cognee.ai/cognee-cloud/local-ui"
        },
        {
          "label": "Pricing",
          "url": "https://docs.cognee.ai/cognee-cloud/functionality/account-and-billing"
        }
      ],
      "page": "https://counterparts.ai/directory/cognee/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/cognee.yaml"
    },
    {
      "slug": "hyperconsciousness",
      "name": "Hyperconsciousness",
      "tagline": "An encrypted, append-only notebook that syncs across your devices and lets an agent read or write only the slice you grant it.",
      "category": "blocks",
      "alsoIn": [
        "user"
      ],
      "maker": "Louis Beaumont",
      "links": {
        "website": "https://hyperconsciousness.ai",
        "repos": [
          "louis030195/hyperconsciousness"
        ]
      },
      "openness": "open",
      "summary": "HC (short for Hyperconsciousness) keeps notes, files and imported records in an encrypted, signed log on your own machines and syncs it between them. You give an agent a grant: which kinds of records, which tags, how sensitive, and for how many days. Through MCP the agent can then save notes and search the records its grant covers, by exact text or by a simple word ranking. Nothing is summarised, merged or forgotten for you: what goes in stays as written, and a writer can replace or withdraw its own notes with a newer version. It's a developer alpha.",
      "forWho": "Developers and privacy-minded people who want one encrypted store for their own or their company's records, shared with agents like Codex and Claude Code on strict, expiring terms.",
      "remembers": "Whatever you or an agent writes or imports: notes, files and folders, and records copied in from chats, Slack, GitHub, documents, meetings and other tools by its ingestion recipes.",
      "doesnt": [
        "It doesn't decide what to keep, pull facts out of a conversation or summarise anything. An agent or a script has to write each note.",
        "Search matches words, not meaning: a question worded differently from the note can miss it.",
        "Nothing fades, strengthens with use or gets merged. Notes stay as written until their writer replaces or withdraws them, and withdrawn notes stay in the signed history.",
        "Grants limit what HC hands out, but they don't sandbox a program that already has your account or keys, and a hosted AI sees the plain text it's given.",
        "It's an alpha with no independent security audit, and the plain `hc read` command can show a tampered note without warning (MCP reads do check)."
      ],
      "standout": [
        "No AI calls and no keys at all: it stores, encrypts and searches without any model or hosted service.",
        "Scoped, expiring grants per agent (by kind, tag and sensitivity), with every read and write logged and revocable.",
        "End-to-end encrypted sync between your own devices, plus a 24-word recovery kit and storage that can hold ciphertext without the keys.",
        "Corrections that keep history: a newer version hides the old one from search, while the signed log still holds what it used to say."
      ],
      "facts": {
        "lives": "Your machines (or your company's server)",
        "local": true,
        "keys": "None",
        "worksWith": [
          "Codex",
          "Claude Code",
          "Any MCP client",
          "CLI",
          "HTTP API"
        ],
        "license": "MIT",
        "price": "Free",
        "tags": {
          "runs": [
            "local",
            "server"
          ],
          "needs": [
            "none"
          ],
          "works": [
            "Codex",
            "Claude Code",
            "MCP",
            "CLI",
            "HTTP"
          ]
        }
      },
      "hood": {
        "writes": "You, a script, or an agent with a write grant. Each note is saved exactly as sent; HC adds no judgement of its own.",
        "stores": "An encrypted, signed, append-only log per device, synced between your machines, with a rebuildable encrypted search index.",
        "finds": "Exact text by default, or an optional word-based ranking (BM25), filtered by kind, tag and date and limited to what the grant allows.",
        "cost": "None. It makes no AI calls."
      },
      "mechanisms": {
        "salience": {
          "status": "none",
          "note": "Everything written is kept as written; tags and sensitivity levels decide who may read a note, not how much it matters."
        },
        "emotional": {
          "status": "none",
          "note": "No emotional weighting."
        },
        "decay": {
          "status": "none",
          "note": "Grants expire, but records don't: nothing fades or is deleted on its own, and a writer has to withdraw a note explicitly."
        },
        "interference": {
          "status": "none",
          "note": "It doesn't compare notes with each other, so near-copies and contradictions both stay. A writer can replace its own note with a newer version, which is graded under correction below."
        },
        "retrieval": {
          "status": "none",
          "note": "Every read is logged, but reading a record doesn't change how it ranks; ranking is word matching only."
        },
        "association": {
          "status": "none",
          "note": "A writer can list the records a note came from, and they come back with it, but search doesn't follow those links to bring up neighbours."
        },
        "prospective": {
          "status": "none",
          "note": "Nothing comes back on its own; recurring tasks and reminders are left to the harness on top.",
          "source": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/docs/RANKED_RECALL.md#evals"
        },
        "consolidation": {
          "status": "none",
          "note": "There's no pass that reworks, merges or links records between sessions."
        },
        "reconsolidation": {
          "status": "partial",
          "depth": 2,
          "note": "A writer can save a newer version of its own note, or withdraw it; search then shows only the latest, while the signed log keeps what it used to say. Spotting the contradiction is up to the writer.",
          "source": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/docs/CAPTURE-CONTEXT.md#retry-safe-changes-and-retractions"
        },
        "episodic-semantic": {
          "status": "none",
          "note": "Writers can label a note as derived, but HC itself draws no lessons or patterns; that's left to the harness on top.",
          "source": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/MISSION.md#what-stays-outside-this-repository"
        },
        "schema": {
          "status": "none",
          "note": "It keeps no profile or summary of a person or project."
        }
      },
      "flow": {
        "steps": [
          {
            "label": "Grant",
            "detail": "You give an agent read or write access to a slice, for a set number of days."
          },
          {
            "label": "Remember",
            "detail": "The agent, or an ingestion recipe, appends notes through MCP."
          },
          {
            "label": "Encrypt and sync",
            "detail": "Each note is signed, encrypted and copied to your other devices."
          },
          {
            "label": "Search",
            "detail": "The agent searches by exact text or word ranking, within its grant."
          }
        ],
        "loop": {
          "to": 1,
          "label": "next note"
        }
      },
      "checked": "2026-10-10",
      "sources": [
        {
          "label": "Hyperconsciousness on GitHub",
          "url": "https://github.com/louis030195/hyperconsciousness"
        },
        {
          "label": "Release v0.1.0-alpha.7",
          "url": "https://github.com/louis030195/hyperconsciousness/releases/tag/v0.1.0-alpha.7"
        },
        {
          "label": "README (at v0.1.0-alpha.7)",
          "url": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/README.md"
        },
        {
          "label": "Mission and repository boundary",
          "url": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/MISSION.md"
        },
        {
          "label": "Lexical relevance search",
          "url": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/docs/RANKED_RECALL.md"
        },
        {
          "label": "Capture context, corrections and retractions",
          "url": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/docs/CAPTURE-CONTEXT.md"
        },
        {
          "label": "MCP tools (source)",
          "url": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/src/mcp.rs"
        },
        {
          "label": "Threat model and constraints",
          "url": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/docs/CONSTRAINTS.md"
        },
        {
          "label": "Hosted access",
          "url": "https://github.com/louis030195/hyperconsciousness/blob/v0.1.0-alpha.7/docs/HOSTED-ACCESS.md"
        }
      ],
      "page": "https://counterparts.ai/directory/hyperconsciousness/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/hyperconsciousness.yaml"
    },
    {
      "slug": "letta",
      "name": "Letta",
      "tagline": "An AI agent that keeps its own memory as files, and tidies them up while idle.",
      "category": "self",
      "alsoIn": [
        "work",
        "blocks"
      ],
      "maker": "Letta, Inc. (the MemGPT team, from UC Berkeley)",
      "links": {
        "website": "https://www.letta.com",
        "repos": [
          "letta-ai/letta-code",
          "letta-ai/letta"
        ],
        "packages": [
          {
            "registry": "npm",
            "name": "@letta-ai/letta-code"
          },
          {
            "registry": "pypi",
            "name": "letta-client"
          }
        ]
      },
      "openness": "open",
      "summary": "Letta gives an AI agent a notebook it owns. The most important pages (who it is, who you are, project rules) are always open in front of it; the rest stay on the shelf, but it can see every page title, so it knows where to look. The agent edits the pages itself and every edit is saved with its history. Between conversations, background helpers “dream”: they reread recent sessions and fold what they learned into the notebook.",
      "forWho": "Developers and power users who want a long-lived agent with a memory and personality of its own. There's a coding CLI, a desktop app and a developer SDK, with plans from free up to enterprise.",
      "remembers": "Anything the agent decides to write down: its persona, who you are, your preferences, project rules and lessons, kept as readable files.",
      "doesnt": [
        "Nothing fades on its own and nothing gets stronger with use. What survives depends on what the AI chooses to edit.",
        "It's a whole agent, not a memory you add to the one you already use. Its Claude Code plugin is labelled a demo, not for production.",
        "Background dreaming can change memory without you reviewing it first (review is optional)."
      ],
      "standout": [
        "Self-editing memory: MemGPT pioneered an AI managing its own memory, the way a computer's operating system manages RAM.",
        "Sleep-time compute: tidying memory happens in the background, not while you wait for a reply.",
        "Memory as git-versioned files: readable, with full history, and portable across models and machines."
      ],
      "facts": {
        "lives": "Letta's cloud, or your machine",
        "local": true,
        "keys": "An AI model key, or Letta's cloud",
        "worksWith": [
          "Its own CLI and app",
          "TypeScript SDK",
          "MCP tools",
          "Claude Code (demo plugin)"
        ],
        "license": "Apache-2.0",
        "price": "Free tier; Pro $20/mo",
        "tags": {
          "runs": [
            "local",
            "cloud"
          ],
          "needs": [
            "model-key",
            "their-key"
          ],
          "works": [
            "Own CLI & app",
            "TypeScript",
            "MCP",
            "Claude Code (demo)"
          ]
        }
      },
      "hood": {
        "writes": "The agent itself, as it works, plus background “dreaming” helpers between sessions.",
        "stores": "Markdown files in a git repo, on your machine or Letta's cloud.",
        "finds": "The most important files are always in view; the agent opens others by name, and a helper searches past conversations. Meaning-based search is an add-on.",
        "cost": "Yes: dreaming and the helpers are extra AI calls, on your model key or Letta's credits."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "The AI decides what's worth writing down and where it goes, but there's no importance score.",
          "source": "https://docs.letta.com/configuration/memory/index.md"
        },
        "emotional": {
          "status": "none",
          "note": "No emotional weighting is documented.",
          "source": "https://docs.letta.com/concepts/memfs/index.md"
        },
        "decay": {
          "status": "none",
          "note": "Nothing fades on its own. A memory goes away only if the AI edits it out.",
          "source": "https://docs.letta.com/configuration/memory/index.md"
        },
        "interference": {
          "status": "partial",
          "depth": 1,
          "note": "A memory helper cleans out repeats, by the AI's judgement rather than old and new competing.",
          "source": "https://docs.letta.com/configuration/subagents/index.md"
        },
        "retrieval": {
          "status": "none",
          "note": "Using a memory doesn't make it stronger.",
          "source": "https://docs.letta.com/concepts/memfs/index.md"
        },
        "association": {
          "status": "partial",
          "depth": 1,
          "note": "The always-visible list of pages works as signposts to related ones. There are no automatic links.",
          "source": "https://docs.letta.com/concepts/memfs/index.md"
        },
        "prospective": {
          "status": "partial",
          "depth": 1,
          "note": "It can schedule prompts to run later, once or on repeat, and the agent can schedule them itself. That runs a task at a time; a memory doesn't come back on its own.",
          "source": "https://docs.letta.com/configuration/schedules/index.md"
        },
        "consolidation": {
          "status": "built",
          "depth": 3,
          "note": "Dreaming helpers reread recent conversations in the background and fold the lessons into memory.",
          "source": "https://docs.letta.com/guides/agents/architectures/sleeptime/"
        },
        "reconsolidation": {
          "status": "partial",
          "depth": 2,
          "note": "The AI rewrites memory freely, and every edit is saved in git, so old versions are always kept.",
          "source": "https://docs.letta.com/concepts/memfs/index.md"
        },
        "episodic-semantic": {
          "status": "partial",
          "depth": 2,
          "note": "Dreaming boils conversations down into lessons, done by the AI rather than a separate mechanism.",
          "source": "https://docs.letta.com/configuration/memory/index.md"
        },
        "schema": {
          "status": "partial",
          "depth": 2,
          "note": "Always-open pages about its persona, you and the project shape how it reads new things, but only implicitly.",
          "source": "https://docs.letta.com/concepts/memfs/index.md"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "You talk",
            "detail": "The agent reads its always-open pages every turn."
          },
          {
            "label": "It looks things up",
            "detail": "It opens other pages or searches past chats when it needs to."
          },
          {
            "label": "It edits its notes",
            "detail": "It rewrites its own memory files; each edit is saved in git."
          },
          {
            "label": "It dreams",
            "detail": "Background helpers reread recent sessions and fold in the lessons."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next turn"
        }
      },
      "checked": "2026-09-25",
      "sources": [
        {
          "label": "Letta Code on GitHub",
          "url": "https://github.com/letta-ai/letta-code"
        },
        {
          "label": "Memory files (MemFS)",
          "url": "https://docs.letta.com/concepts/memfs/index.md"
        },
        {
          "label": "Sleep-time agents",
          "url": "https://docs.letta.com/guides/agents/architectures/sleeptime/"
        },
        {
          "label": "Pricing",
          "url": "https://docs.letta.com/letta-code/pricing"
        },
        {
          "label": "MemGPT paper",
          "url": "https://arxiv.org/abs/2310.08560"
        }
      ],
      "page": "https://counterparts.ai/directory/letta/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/letta.yaml"
    },
    {
      "slug": "mem0",
      "name": "Mem0",
      "tagline": "A plug-in memory layer that pulls facts out of AI chats and hands back the relevant ones later.",
      "category": "blocks",
      "alsoIn": [
        "user",
        "work"
      ],
      "maker": "Mem0",
      "links": {
        "website": "https://mem0.ai",
        "repos": [
          "mem0ai/mem0"
        ],
        "packages": [
          {
            "registry": "pypi",
            "name": "mem0ai"
          },
          {
            "registry": "npm",
            "name": "mem0ai"
          }
        ]
      },
      "openness": "partly",
      "summary": "When you chat with an AI, Mem0 has another AI read the conversation and jot down short facts, like “prefers TypeScript” or “moved to SF”. It files them by who they belong to, notes the names they mention, and later finds the right ones by meaning, keywords and those names. On its cloud, a background “Dream” pass merges duplicates, marks outdated facts as replaced, and writes up patterns.",
      "forWho": "Mainly developers adding memory to their own apps, from solo builders to enterprise. People also meet it through its plugins for Claude Code, Cursor and other editors, and a Chrome extension.",
      "remembers": "Short facts about users, agents and sessions (preferences, details, project facts), plus the names they mention.",
      "doesnt": [
        "Its richer mechanisms (fading, strengthening, Dream) are on the paid cloud. Self-hosted, contradictory facts pile up side by side.",
        "Its Claude Code plugin sends your session text to Mem0's cloud (with secrets removed), so it isn't local-only.",
        "No reminders that come back on their own, and no emotional weighting.",
        "It's memory about users and projects, not the AI's own sense of self."
      ],
      "standout": [
        "A drop-in memory for almost any stack: about 20 AI model providers, 25 databases, and plugins for many agents and editors.",
        "Dream: a sleep-like background pass that merges, supersedes and finds patterns, with every change reviewable.",
        "A strong benchmark focus, with high self-reported scores on long-conversation memory tests."
      ],
      "facts": {
        "lives": "Mem0's cloud, or your own server",
        "local": true,
        "keys": "A Mem0 key (cloud) or an AI model key (self-hosted)",
        "worksWith": [
          "Python & TypeScript SDKs",
          "Claude Code",
          "Cursor",
          "Codex",
          "LangGraph",
          "CrewAI"
        ],
        "license": "Apache-2.0",
        "price": "Free tier; from $19/mo",
        "tags": {
          "runs": [
            "server",
            "cloud"
          ],
          "needs": [
            "model-key",
            "their-key"
          ],
          "works": [
            "Python",
            "TypeScript",
            "Claude Code",
            "Cursor",
            "Codex",
            "LangGraph",
            "CrewAI"
          ]
        }
      },
      "hood": {
        "writes": "A separate AI call reads each conversation and pulls out short facts. The AI you talk to doesn't write them.",
        "stores": "A vector database (about 25 to choose from; Postgres with pgvector self-hosted), plus the names each fact mentions.",
        "finds": "By meaning, by keywords, and by shared names, combined into one ranked list.",
        "cost": "Yes: an AI call to pull out facts on every add, plus embeddings. Dream adds more on the cloud."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "An AI decides what counts as a fact, and you can say what to include or skip. There's no importance score.",
          "source": "https://docs.mem0.ai/platform/features/custom-instructions"
        },
        "emotional": {
          "status": "none",
          "note": "No emotional weighting in the current version."
        },
        "decay": {
          "status": "built",
          "depth": 3,
          "only": "cloud, opt-in",
          "note": "Once it's switched on for a project, unused memories slowly sink in search results, though nothing is deleted. You can also set expiry dates.",
          "source": "https://mem0.ai/blog/introducing-memory-decay-in-mem0"
        },
        "interference": {
          "status": "built",
          "depth": 3,
          "only": "cloud only",
          "note": "Dream marks an older fact as replaced when a newer one contradicts it. Self-hosted, both are kept.",
          "source": "https://docs.mem0.ai/platform/features/dream"
        },
        "retrieval": {
          "status": "built",
          "depth": 3,
          "only": "cloud, opt-in",
          "note": "Each time a memory comes up in a search, it gets a small boost, once decay is switched on for the project.",
          "source": "https://github.com/mem0ai/mem0/blob/main/docs/platform/features/memory-decay.mdx"
        },
        "association": {
          "status": "built",
          "depth": 3,
          "note": "Memories that mention the same person or thing are linked, and naming it in a question brings them up.",
          "source": "https://docs.mem0.ai/platform/features/graph-memory"
        },
        "prospective": {
          "status": "none",
          "note": "It understands “upcoming” when you ask, but nothing comes back on its own.",
          "source": "https://docs.mem0.ai/changelog/highlights"
        },
        "consolidation": {
          "status": "built",
          "depth": 3,
          "only": "cloud only",
          "note": "Dream merges duplicates in the background, and a weekly pass (Pro plan) sums things up.",
          "source": "https://docs.mem0.ai/platform/features/dream"
        },
        "reconsolidation": {
          "status": "built",
          "depth": 3,
          "only": "cloud only",
          "note": "A replaced memory stays visible and is linked to what replaced it.",
          "source": "https://docs.mem0.ai/platform/features/dream"
        },
        "episodic-semantic": {
          "status": "built",
          "depth": 3,
          "only": "cloud Pro",
          "note": "Dream writes “pattern memories” from things that keep coming up, kept alongside the originals.",
          "source": "https://docs.mem0.ai/platform/features/dream"
        },
        "schema": {
          "status": "partial",
          "depth": 2,
          "note": "User profiles (beta) keep a summary of each person, but new facts aren't weighed against it.",
          "source": "https://github.com/mem0ai/mem0/blob/main/docs/platform/features/user-profiles.mdx"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "A conversation",
            "detail": "Your app or plugin sends Mem0 the chat."
          },
          {
            "label": "Pull out facts",
            "detail": "An AI reads it and writes each fact as a new, short memory."
          },
          {
            "label": "File them",
            "detail": "Stored by meaning, with the names they mention linked."
          },
          {
            "label": "Dream",
            "detail": "On the cloud: merge repeats, mark old facts replaced, find patterns."
          },
          {
            "label": "Hand them back",
            "detail": "Next time, the relevant facts are found and given to the AI."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next conversation"
        }
      },
      "checked": "2026-09-25",
      "sources": [
        {
          "label": "Mem0 on GitHub",
          "url": "https://github.com/mem0ai/mem0"
        },
        {
          "label": "What changed in v3",
          "url": "https://docs.mem0.ai/changelog/highlights"
        },
        {
          "label": "Dream",
          "url": "https://docs.mem0.ai/platform/features/dream"
        },
        {
          "label": "Memory decay",
          "url": "https://mem0.ai/blog/introducing-memory-decay-in-mem0"
        },
        {
          "label": "Claude Code plugin",
          "url": "https://github.com/mem0ai/mem0/tree/main/integrations/claude-code-plugin"
        },
        {
          "label": "Pricing",
          "url": "https://mem0.ai/pricing"
        }
      ],
      "page": "https://counterparts.ai/directory/mem0/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/mem0.yaml"
    },
    {
      "slug": "supermemory",
      "name": "Supermemory",
      "tagline": "A memory service that turns chats and files into a web of facts that stays current.",
      "category": "blocks",
      "alsoIn": [
        "user",
        "work"
      ],
      "maker": "Supermemory",
      "links": {
        "website": "https://supermemory.ai",
        "repos": [
          "supermemoryai/supermemory",
          "supermemoryai/claude-supermemory"
        ],
        "packages": [
          {
            "registry": "npm",
            "name": "supermemory"
          },
          {
            "registry": "pypi",
            "name": "supermemory"
          }
        ]
      },
      "openness": "partly",
      "summary": "You send Supermemory chats, notes, PDFs or whole Google Drives. It keeps the originals for searching, and a “dreaming” step reads them and writes short facts, like “Alex works at Stripe”. Each new fact is linked to what it already knows: it can replace an old fact, add detail to one, or lead to a new guess. It also keeps a short profile of each person, so the AI always knows the basics.",
      "forWho": "Mainly developers adding memory and document search to their apps and agents. People also use it directly through its plugins for Claude Code, Cursor, Codex and others, and its MCP server.",
      "remembers": "Short facts about people, projects and organisations, a profile of each (lasting facts and what's going on now), and the original documents.",
      "doesnt": [
        "The memory engine's source code isn't public. You can run the server free on your machine, but not read or change how it works.",
        "Connectors (Drive, Gmail, Notion) and the MCP server are on the cloud only, not the self-hosted server.",
        "The docs don't say that using a memory makes it stronger, or that feelings add weight.",
        "No reminders that come back on their own.",
        "It's memory about users and projects, not the AI's own sense of self."
      ],
      "standout": [
        "Memory as a graph that stays current: new facts replace, extend or build on old ones, and the old version is kept.",
        "Its guesses are marked as guesses. Facts it inferred rank lower until you approve them, and there's a review queue for that.",
        "One-command self-hosting that can run fully offline with a local model, on the same API as the cloud.",
        "A strong benchmark focus: self-reported #1 on LongMemEval, LoCoMo and ConvoMem, plus MemoryBench, an open tool to compare memory systems."
      ],
      "facts": {
        "lives": "Supermemory's cloud, or your own machine",
        "local": true,
        "keys": "A Supermemory key (cloud), or your own AI model key (self-hosted; none with a local model)",
        "worksWith": [
          "TypeScript & Python SDKs",
          "Claude Code",
          "Cursor",
          "Codex",
          "MCP clients",
          "Vercel AI SDK"
        ],
        "license": "MIT (repo), Apache-2.0 (SDKs)",
        "price": "Free tier; Pro $19/mo",
        "tags": {
          "runs": [
            "local",
            "cloud"
          ],
          "needs": [
            "model-key",
            "their-key"
          ],
          "works": [
            "TypeScript",
            "Python",
            "Claude Code",
            "Cursor",
            "Codex",
            "MCP",
            "Vercel AI SDK"
          ]
        }
      },
      "hood": {
        "writes": "Supermemory's own model reads what you send and writes the facts, in a background “dreaming” pass. You can steer it with instructions, or write facts yourself. In the plugins, the AI can also save and forget on purpose.",
        "stores": "Its own engine that mixes meaning search, keyword search and a graph of linked facts. Self-hosted, it all sits in one folder.",
        "finds": "By meaning across both facts and original documents, with optional reranking and linked facts. The profile comes along without a search.",
        "cost": "Yes: its models read everything you add, billed as credits on the cloud. Self-hosted, those calls run on your model."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "Its model decides what's worth keeping: small talk is less likely to become a lasting memory. There's no visible importance score.",
          "source": "https://supermemory.ai/docs/concepts/graph-memory"
        },
        "emotional": {
          "status": "unknown",
          "note": "The engine is closed and the docs don't mention emotional weighting either way."
        },
        "decay": {
          "status": "partial",
          "depth": 2,
          "note": "One-off moments fade unless they matter, and dated facts (“exam tomorrow”) expire. The docs don't say that unused memories fade.",
          "source": "https://supermemory.ai/docs/concepts/graph-memory"
        },
        "interference": {
          "status": "built",
          "depth": 3,
          "note": "When a new fact contradicts an old one (a new job, say), the new one wins in search.",
          "source": "https://supermemory.ai/docs/concepts/graph-memory"
        },
        "retrieval": {
          "status": "unknown",
          "note": "Preferences said again get stronger, but the docs don't say that recalling a memory strengthens it."
        },
        "association": {
          "status": "built",
          "depth": 3,
          "note": "Facts are linked as they arrive, and a search can bring back each result's linked facts too.",
          "source": "https://supermemory.ai/docs/concepts/graph-memory"
        },
        "prospective": {
          "status": "none",
          "note": "Dated facts expire rather than come back, and the profile is always there rather than timed. No reminders are documented.",
          "source": "https://supermemory.ai/docs/concepts/graph-memory"
        },
        "consolidation": {
          "status": "built",
          "depth": 3,
          "note": "“Dreaming” works in the background, grouping related conversations and merging, linking and organising what they say.",
          "source": "https://supermemory.ai/docs/concepts/how-it-works"
        },
        "reconsolidation": {
          "status": "built",
          "depth": 3,
          "note": "A replaced fact is kept as history, and editing a memory saves a new version beside the old one.",
          "source": "https://supermemory.ai/docs/recall/memory-operations"
        },
        "episodic-semantic": {
          "status": "built",
          "depth": 4,
          "note": "It draws new facts from patterns across many memories. They're marked as guesses and rank lower until approved.",
          "source": "https://supermemory.ai/docs/recall/memory-review"
        },
        "schema": {
          "status": "partial",
          "depth": 2,
          "note": "Each person or project gets a profile of lasting facts and current context, but new facts aren't documented as weighed against it.",
          "source": "https://supermemory.ai/docs/concepts/user-profiles"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "You send content",
            "detail": "Chats, files or synced apps, filed under a user or project."
          },
          {
            "label": "Index it",
            "detail": "The originals are split up and made searchable."
          },
          {
            "label": "Dream",
            "detail": "Its model writes facts and links them: replaces, extends, or infers."
          },
          {
            "label": "Keep a profile",
            "detail": "Lasting facts and what's going on now, for each person or project."
          },
          {
            "label": "Hand it back",
            "detail": "The profile, plus the facts and passages that match the question."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next conversation"
        }
      },
      "checked": "2026-09-29",
      "sources": [
        {
          "label": "Supermemory on GitHub",
          "url": "https://github.com/supermemoryai/supermemory"
        },
        {
          "label": "Graph memory",
          "url": "https://supermemory.ai/docs/concepts/graph-memory"
        },
        {
          "label": "How it works (dreaming)",
          "url": "https://supermemory.ai/docs/concepts/how-it-works"
        },
        {
          "label": "Reviewing inferred memories",
          "url": "https://supermemory.ai/docs/recall/memory-review"
        },
        {
          "label": "Self-hosting",
          "url": "https://supermemory.ai/docs/self-hosting/overview"
        },
        {
          "label": "Claude Code plugin",
          "url": "https://supermemory.ai/docs/integrations/claude-code"
        },
        {
          "label": "The app moved to the console",
          "url": "https://github.com/supermemoryai/supermemory/blob/main/apps/web/README.md"
        },
        {
          "label": "Billing and plans",
          "url": "https://supermemory.ai/docs/overview/billing"
        }
      ],
      "page": "https://counterparts.ai/directory/supermemory/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/supermemory.yaml"
    },
    {
      "slug": "trusty-memory",
      "name": "trusty-memory",
      "tagline": "A local memory server for coding agents, with searchable notes, a small knowledge graph and a background tidy-up pass.",
      "category": "work",
      "alsoIn": [
        "blocks"
      ],
      "maker": "Bob Matsuoka (bobmatnyc)",
      "links": {
        "website": "https://github.com/bobmatnyc/trusty-tools/tree/main/crates/trusty-memory",
        "repos": [
          "bobmatnyc/trusty-tools"
        ],
        "packages": []
      },
      "openness": "open",
      "summary": "trusty-memory runs as a small daemon on your machine and speaks MCP. The agent (or a hook) saves notes, called drawers, into a named palace, usually one per project. Each note is embedded locally and kept next to a small knowledge graph of facts. A Claude Code hook adds the standing rules and the notes that match each prompt before Claude answers. When the machine is idle, a background pass merges near-duplicate notes and deletes old unimportant ones. An optional step uses an AI model to merge overlapping notes and flag contradictions.",
      "forWho": "Developers who run coding agents such as Claude Code or Codex and want project memory that stays on their own machine. Also anyone building on its MCP tools or Rust library.",
      "remembers": "Notes the agent or you choose to save (decisions, conventions, project facts), facts as subject-predicate-object triples, short standing rules, and chat session history.",
      "doesnt": [
        "Notes are not written for you. The agent or a hook has to call a save tool, and a filter rejects short, noisy or secret-looking text.",
        "Recalling a note does not make it stronger. The code has a counter for this, but nothing in the released version updates it.",
        "No emotional weighting, no reminders that fire on a date, and no beliefs or profiles built up about people.",
        "A corrected fact only replaces the old one when the writer names the slot or the predicate is single-valued. Contradicting free-text notes are not found on their own.",
        "Old unimportant notes are deleted by the background pass, not archived. A log records what was removed."
      ],
      "standout": [
        "Runs fully on your machine: local embeddings, no API key needed for the core features.",
        "Facts can carry a slot name and an expiry, so a point-in-time fact such as a pull request's state is replaced when the next one is written.",
        "A hook injects always-on standing rules and the notes that match each prompt, so memory reaches the agent without a tool call.",
        "The dream pass records every deletion with its reason, and surfaces high-value notes that are fading instead of silently boosting them."
      ],
      "facts": {
        "lives": "Your machine",
        "local": true,
        "keys": "None for the core; an OpenRouter key or local model for the optional AI merge step",
        "worksWith": [
          "Claude Code",
          "Codex",
          "Any MCP client"
        ],
        "license": "MIT",
        "price": "Free",
        "tags": {
          "runs": [
            "local"
          ],
          "needs": [
            "none",
            "model-key"
          ],
          "works": [
            "Claude Code",
            "Codex",
            "MCP"
          ]
        }
      },
      "hood": {
        "writes": "The agent or a hook calls a save tool (memory_remember, memory_note, kg_assert). A filter checks the text first. Facts in the graph are also pulled from saved notes by fixed rules, with no AI call.",
        "stores": "Files on your machine: a redb database for notes and the knowledge graph, an HNSW vector index, and a BM25 text index.",
        "finds": "By meaning, by keywords and by tags, with importance tilting the score. Notes are searched in layers: identity, a hot cache of top notes, then full search.",
        "cost": "None for the core. The optional merge step makes AI calls to OpenRouter or a local model, up to 20 per cycle."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "A save filter drops short, noisy and secret-looking text by stated rules, and notes carry an importance score. The score is a default or a value the caller sets.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-common/src/memory_core/filter.rs"
        },
        "emotional": {
          "status": "none",
          "note": "No emotional weighting. Nothing in the code reads or records feeling."
        },
        "decay": {
          "status": "built",
          "depth": 3,
          "note": "Each note's importance halves every 90 days from when it was written, and the dream pass deletes notes that have sunk to the floor and are more than 30 days old.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-common/src/memory_core/decay.rs"
        },
        "interference": {
          "status": "partial",
          "depth": 2,
          "note": "The dream pass merges notes whose meaning is 95% alike, keeping the one with higher importance, not the newer. A named slot replaces its old fact.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-common/src/memory_core/dream/cycle.rs"
        },
        "retrieval": {
          "status": "none",
          "note": "Being recalled does not strengthen a note. The access counter and boost exist in the code, but no released code path calls them.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-common/src/memory_core/palace.rs"
        },
        "association": {
          "status": "partial",
          "depth": 1,
          "note": "Saving a note adds graph links by fixed rules (tags, room, a few patterns like \"X uses Y\"). Recall does not follow them. Walking the graph is a separate query.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-memory/src/kg_extract.rs"
        },
        "prospective": {
          "status": "partial",
          "depth": 2,
          "note": "A hook adds standing rules and the notes that match each prompt before Claude answers. The cue is the prompt itself. There are no date reminders.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-memory/src/commands/prompt_context/mod.rs"
        },
        "consolidation": {
          "status": "built",
          "depth": 3,
          "note": "While idle, a dream pass merges near-duplicates, deletes noise and faded notes, cleans the index and flags fading high-value notes. Deletions are logged with a reason.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-common/src/memory_core/dream/cycle.rs"
        },
        "reconsolidation": {
          "status": "partial",
          "depth": 2,
          "note": "Replacing a slot or a single-valued fact closes the old version, which is kept as history. Contradicting free-text notes are only flagged, and only in the optional AI step.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-common/src/memory_core/store/kg_store.rs"
        },
        "episodic-semantic": {
          "status": "partial",
          "depth": 1,
          "note": "An optional AI step, off by default, collapses overlapping notes into one canonical note and links aliases. It merges; it does not draw lessons.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-common/src/memory_core/semantic_consolidation/mod.rs"
        },
        "schema": {
          "status": "partial",
          "depth": 1,
          "note": "A small set of standing facts per palace (aliases, conventions, shorthands) is always injected, capped at 20. There is no profile of a person or project that updates itself.",
          "source": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-memory/src/prompt_facts.rs"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "Agent saves",
            "detail": "A tool call or hook sends a note or a fact."
          },
          {
            "label": "Filter",
            "detail": "Noise, short text and secrets are rejected."
          },
          {
            "label": "Store",
            "detail": "Embedded locally; kept with a small graph of facts."
          },
          {
            "label": "Dream pass",
            "detail": "When idle, near-duplicates merge and faded notes are deleted."
          },
          {
            "label": "Hook recall",
            "detail": "Standing rules and matching notes are added to the next prompt."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next prompt"
        }
      },
      "checked": "2026-10-01",
      "confirmed": {
        "by": "bobmatnyc",
        "on": "2026-10-10"
      },
      "sources": [
        {
          "label": "trusty-memory on GitHub",
          "url": "https://github.com/bobmatnyc/trusty-tools/tree/trusty-memory-v0.28.2/crates/trusty-memory"
        },
        {
          "label": "README",
          "url": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-memory/README.md"
        },
        {
          "label": "Changelog",
          "url": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/crates/trusty-memory/CHANGELOG.md"
        },
        {
          "label": "ADR-0028, recall tiers",
          "url": "https://github.com/bobmatnyc/trusty-tools/blob/trusty-memory-v0.28.2/docs/adr/0028-memory-recall-tiers-standing-current-episodic.md"
        },
        {
          "label": "Package page",
          "url": "https://lib.rs/crates/trusty-memory"
        }
      ],
      "page": "https://counterparts.ai/directory/trusty-memory/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/trusty-memory.yaml"
    },
    {
      "slug": "zep",
      "name": "Zep",
      "tagline": "A memory that keeps facts on a timeline: when each became true, and when it stopped.",
      "category": "blocks",
      "alsoIn": [
        "user",
        "work"
      ],
      "maker": "Zep",
      "links": {
        "website": "https://www.getzep.com",
        "repos": [
          "getzep/graphiti",
          "getzep/zep"
        ],
        "packages": [
          {
            "registry": "pypi",
            "name": "graphiti-core"
          },
          {
            "registry": "pypi",
            "name": "zep-cloud"
          },
          {
            "registry": "npm",
            "name": "@getzep/zep-cloud"
          }
        ]
      },
      "openness": "partly",
      "summary": "Zep has an AI read each chat message or record and turn it into a map: people and things, linked by short facts like “Kendra loves Adidas shoes”. Every fact carries dates: when it became true, when it stopped, and when Zep learned each. When Kendra later says she prefers Puma, the old fact is marked as ended, not deleted, so you can ask what's true now or what was true back then. Graphiti is the open-source engine that builds the map; Zep is the managed cloud built on it.",
      "forWho": "Developers building agents and apps, from solo builders on Graphiti to enterprises on Zep's cloud with sign-in, access rules and audit logs. Through Zep's Memory MCP Server, people can also reach their memory from Claude, ChatGPT or Cursor.",
      "remembers": "People, things and the facts between them, each with dates, plus the original messages and records they came from, a running summary of each person and thing, and (on higher plans) patterns seen across many facts.",
      "doesnt": [
        "Nothing fades with time, and recalling a fact doesn't make it stronger. Ended facts stay on the map for good unless you delete them.",
        "Nothing comes back on its own: your app asks for context each turn, and there are no reminders.",
        "The pattern-finding Observations and custom domain instructions are on the cloud's Flex Plus plan and up.",
        "It's memory about users, customers and projects, not the AI's own sense of self."
      ],
      "standout": [
        "Facts on a timeline: each one knows when it became true, when it stopped, and when Zep found out, so an agent can answer “what's true now?” and “what was true in March?”.",
        "Contradictions end old facts instead of erasing them, with every fact traceable to the message it came from.",
        "Graphiti, the open-source engine, is one of the most popular projects in this space, with a choice of graph databases and AI providers and an MCP server."
      ],
      "facts": {
        "lives": "Zep's cloud (or your own cloud), or your graph database with Graphiti",
        "local": true,
        "keys": "A Zep key (cloud), or an AI model key plus a graph database (Graphiti)",
        "worksWith": [
          "Python, TypeScript & Go SDKs",
          "LangGraph",
          "CrewAI",
          "Claude & ChatGPT (MCP)",
          "Cursor",
          "Graphiti MCP server"
        ],
        "license": "Apache-2.0 (Graphiti)",
        "price": "Graphiti free; Zep free tier, then from $125/mo",
        "tags": {
          "runs": [
            "server",
            "cloud"
          ],
          "needs": [
            "model-key",
            "their-key"
          ],
          "works": [
            "Python",
            "TypeScript",
            "Go",
            "LangGraph",
            "CrewAI",
            "Claude & ChatGPT (MCP)",
            "Cursor",
            "Graphiti MCP"
          ]
        }
      },
      "hood": {
        "writes": "A separate AI reads each message or record and pulls out the people, things and facts. The AI you talk to doesn't write them, though it can add memory through MCP tools.",
        "stores": "A graph: people and things joined by dated facts, plus the original messages. Graphiti runs on Neo4j, FalkorDB or Amazon Neptune; Zep's cloud uses its own graph database.",
        "finds": "By meaning, by keywords, and by walking the links around a person or thing, combined into one ranked list. On the cloud, one call builds a ready-to-use context block from the last few messages.",
        "cost": "Yes: several AI calls per message (find things, find facts, date them, match them to the map, update summaries), plus embeddings. Paid in credits on the cloud, or on your own model key."
      },
      "mechanisms": {
        "salience": {
          "status": "partial",
          "depth": 2,
          "note": "An AI decides which people, things and facts are worth pulling out, steered by the types you define and (Flex Plus and up) your domain instructions. There's no importance score.",
          "source": "https://help.getzep.com/how-graph-creation-works"
        },
        "emotional": {
          "status": "none",
          "note": "Feelings can be saved as facts (“Sam feels he lacks motivation”), but they aren't given more weight.",
          "source": "https://github.com/getzep/graphiti/blob/main/graphiti_core/prompts/extract_nodes_and_edges.py"
        },
        "decay": {
          "status": "none",
          "note": "Nothing fades on its own. Facts stay until they're contradicted or you delete them."
        },
        "interference": {
          "status": "built",
          "depth": 4,
          "note": "Each new fact is checked against similar old ones: repeats merge, and a contradicted fact is marked as ended. “Newer” means newer in real life, by the fact's dates, not just the last thing said.",
          "source": "https://github.com/getzep/graphiti/blob/main/graphiti_core/utils/maintenance/edge_operations.py"
        },
        "retrieval": {
          "status": "none",
          "note": "Being recalled doesn't change a fact. An optional search order ranks things by how often they've been mentioned, which is close but not the same.",
          "source": "https://help.getzep.com/searching-the-graph"
        },
        "association": {
          "status": "built",
          "depth": 4,
          "note": "Everything lives on a map of linked people and things. Search can start from one of them and bring up its neighbours first.",
          "source": "https://help.getzep.com/searching-the-graph"
        },
        "prospective": {
          "status": "none",
          "note": "Your app fetches relevant context every turn, but nothing comes back at a set time or on its own.",
          "source": "https://help.getzep.com/retrieving-context"
        },
        "consolidation": {
          "status": "partial",
          "depth": 2,
          "note": "Summaries of each person and thing are rewritten as new facts arrive, and Graphiti can regroup related things into “communities” when you ask. Zep doesn't document a background pass that reworks the map between sessions.",
          "source": "https://help.getzep.com/graphiti/core-concepts/communities"
        },
        "reconsolidation": {
          "status": "built",
          "depth": 4,
          "note": "A contradicted fact is marked as ended, not deleted. Its dates show what used to be true, and you can search the past.",
          "source": "https://help.getzep.com/facts"
        },
        "episodic-semantic": {
          "status": "built",
          "depth": 4,
          "only": "cloud, Flex Plus and up",
          "note": "Observations turn patterns seen across many facts (habits, commitments, preferences) into lasting memories, and retire them when they're outdated. Open-source Graphiti keeps running summaries instead.",
          "source": "https://help.getzep.com/observations"
        },
        "schema": {
          "status": "partial",
          "depth": 2,
          "note": "Each user gets a running summary, and you can define kinds of people and things up front. New facts are checked against old facts, not against the summary.",
          "source": "https://help.getzep.com/user-summary"
        }
      },
      "flow": {
        "steps": [
          {
            "label": "Messages and records",
            "detail": "Your app sends chats, documents or business data."
          },
          {
            "label": "Pull out facts",
            "detail": "An AI finds the people, things and facts, and dates them."
          },
          {
            "label": "Check the map",
            "detail": "Match them to what's known: merge repeats, end contradicted facts."
          },
          {
            "label": "Update summaries",
            "detail": "Each person and thing's summary is refreshed."
          },
          {
            "label": "Hand them back",
            "detail": "Next turn, the relevant facts, with their dates, go to the AI."
          }
        ],
        "loop": {
          "to": 0,
          "label": "next message"
        }
      },
      "checked": "2026-09-29",
      "sources": [
        {
          "label": "Graphiti on GitHub",
          "url": "https://github.com/getzep/graphiti"
        },
        {
          "label": "Facts and their dates",
          "url": "https://help.getzep.com/facts"
        },
        {
          "label": "How the graph is built",
          "url": "https://help.getzep.com/how-graph-creation-works"
        },
        {
          "label": "Observations",
          "url": "https://help.getzep.com/observations"
        },
        {
          "label": "Custom instructions",
          "url": "https://help.getzep.com/custom-instructions"
        },
        {
          "label": "Entity summaries",
          "url": "https://help.getzep.com/entities"
        },
        {
          "label": "Memory MCP Server",
          "url": "https://help.getzep.com/memory-mcp-server"
        },
        {
          "label": "Graphiti 0.29 release notes",
          "url": "https://github.com/getzep/graphiti/releases/tag/v0.29.0"
        },
        {
          "label": "Changelog",
          "url": "https://help.getzep.com/changelog"
        },
        {
          "label": "Pricing",
          "url": "https://www.getzep.com/pricing"
        }
      ],
      "page": "https://counterparts.ai/directory/zep/",
      "file": "https://github.com/counterparts-ai/directory/blob/main/systems/zep.yaml"
    }
  ]
}
