Memory

Private notes for you, a shared folder for your team — both file-based, both project-local, both plain git.

Overview

Claudin keeps a persistent, file-based memory alongside your project: a private directory just for you and the current project, and a shared team/ subfolder that any contributor can write to and that reaches everyone else through ordinary git push/pull/clone — no server, no Anthropic account, no special sync step. Both load at the start of every session, so the model shows up already knowing who you are, what the project's conventions are, and what the team has already decided.

On by default for any project inside a git repository.

Where it lives

Memory is project-local: it defaults to <gitRoot>/.claudin/memory/, the same pattern already used for .claudin/plans/. Private memory is one file per fact under that directory; team memory lives in its team/ subfolder. Resolution order, first match wins:

  1. CLAUDE_COWORK_MEMORY_PATH_OVERRIDE environment variable (Cowork only)
  2. autoMemoryDirectory in settings.json (trusted sources only)
  3. <gitRoot>/.claudin/memory/, unless autoMemoryProjectLocal: false is set
  4. <memoryBase>/projects/<sanitized-git-root>/memory/ — the legacy global path, used for non-git projects

If a project already had memory under the legacy global path, the first project-local resolution copies it across automatically — it never deletes or moves the original, so the old directory stays as a backup, and the copy only runs once.

Making team/ actually git-trackable

Most projects' .gitignore blanket-excludes .claudin/, which would silently swallow .claudin/memory/team/ too. Claudin never edits .gitignore on its own — instead, when it detects this conflict, it shows you the minimal fix and asks before applying it:

/.claudin/*
!/.claudin/memory/
/.claudin/memory/*
!/.claudin/memory/team/

This carves out just memory/team/ as tracked, while your private memory/*.md, plans/, settings.local.json, rules/, skills/, and agents/ stay ignored, exactly as before.

What to write where

Each memory is one file holding one fact, with frontmatter (name, description, type) and an entry in a per-directory MEMORY.md index. The type also carries a recommended scope:

TypeScopeHolds
userAlways privateWho the user is: role, expertise, goals, preferences.
feedbackPrivate by default; team only for a project-wide conventionCorrections and confirmed approaches — a testing policy or build invariant belongs to the team; personal style stays private.
projectBias toward teamOngoing work, decisions, bugs, or constraints not derivable from the code or git history.
referenceUsually teamPointers to external systems — a tracker project, a chat channel, a dashboard.

Memories link to each other with [[name]], across private and team directories alike. Stale or duplicate memories get updated or deleted rather than piling up — see the tidy command below.

Secrets never reach team memory

This is enforced by code, not just by instruction. Every write or edit to a file under team/ is scanned for secret-shaped content (API keys and similar patterns) before it's allowed to land; a match is rejected with an explanation, because anything in team/ is shared with every collaborator on the repository the moment it's committed.

Keeping memory tidy

Run /memory tidy to merge duplicate memories and prune ones that no longer hold up — it works across both the private directory and the team folder.

Configuration

SettingEffect
autoMemoryProjectLocal: falseForces the legacy global-only location. Set in user/local/policy settings — never projectSettings, for security.
autoMemoryDirectoryOverrides the memory directory outright (trusted settings sources only).