跳转至

记忆摄取

Claude Code 会维护自己的自动记忆——它为自己蒸馏出的 Markdown——存放在:

~/.claude/projects/<encoded-cwd>/memory/MEMORY.md   (a link-only index)
~/.claude/projects/<encoded-cwd>/memory/<topic>.md  (distilled prose, one fact per file)

<encoded-cwd> 是仓库绝对路径中除字母和数字外的每个字符替换为 - 后的结果(例如 /home/you/code/my_app → -home-you-code-my-app)。Claude Code 会将超过 200 个字符的名称截断为 200,并在末尾加上一个短哈希。

claude-mem memory ingest 会将这些主题文件直接作为观察导入到你的记忆数据库中。

为什么它不花费任何成本

自动记忆已经过蒸馏——每个主题文件与观察生成器生成的工件属于同一类型。因此 memory-ingest 不会运行 Haiku 生成流水线。它会通过 claude-mem 现有的观察接入点(内容哈希去重 + Chroma 同步)直接存储每个文件的正文。对已经蒸馏过的正文重新运行生成既会有损,又会为负价值付费。

MEMORY.md 索引会被跳过——它只是链接,自身不携带任何知识。

用法

始终先进行 dry-run——这是一个零花费、不涉及数据库的扫描与计数:

# Scan the current repo's memory dir and report what would be stored
npx claude-mem memory ingest --dry-run

# Sweep every project under ~/.claude/projects/*/memory/
npx claude-mem memory ingest --all --dry-run

然后运行真正的摄取:

# Ingest the current repo's memory (default source = cwd)
npx claude-mem memory ingest

# Ingest from an explicit directory
npx claude-mem memory ingest --source ~/.claude/projects/-home-you-code-app/memory

# Ingest everything
npx claude-mem memory ingest --all

选项

选项 作用
(无) 来源 = 你运行命令所在仓库的 memory 目录。
--source <dir> 从明确的 memory/ 目录摄取。它必须位于 Claude Code 的 projects 目录(~/.claude/projects 或 $CLAUDE_CONFIG_DIR/projects)内;任何其他位置,包括指向该目录之外的符号链接,都会被拒绝。
--all 扫描所有 ~/.claude/projects/*/memory/ 目录。
--dry-run 仅进行零花费解析和计数。不启动 worker,不写入数据库。请先运行此命令。
--require-cwd 跳过无法解析其来源 cwd 的孤立项目目录(而不是在回退项目下摄取它们)。

运行方式

  • --dry-run 纯粹是解析与计数——它完全在 CLI 进程中运行,不接触 worker,也不接触数据库,不产生任何花费。
  • 真正的摄取会将数据存储到位于 worker 中的 SQLite 观察数据库。CLI 在需要时启动 worker,并在摘要到达 worker 时通过 HTTP(POST /api/memory/ingest)驱动导入。批量导入不受时间限制。
  • 无法读取的文件会被报告为 failed;其余导入会继续执行。符号链接形式的笔记绝不会被跟随解析,超过 64 KB 的笔记不会被读取;两者都会报告为 skipped,并各自标明原因。在扫描过程中被替换为符号链接的笔记,在打开时会被拒绝,并报告为 failed。位于 projects 目录之外或不存在的来源,worker 会返回 400。
  • 只会导入记忆笔记。一个同级 transcript 文件会被读取以获取其 cwd,用于像实时捕获那样确定项目键;它的内容绝不会被摄取。

Frontmatter

主题文件带有一个小的 YAML frontmatter 块,该块会作为观察元数据被保留:

---
name: recent-work
description: "What was done in the most recent session"
metadata:
  node_type: memory
  type: project
  originSessionId: 74e59070-...
---

<the distilled prose — stored as the observation body>

metadata.type(例如 project、feedback、reference、user)和 metadata.originSessionId 会被传递保留;没有 frontmatter 的文件会按原样使用其正文存储。

幂等性

摄取操作可以安全地重复运行。观察在插入时会按内容哈希去重,因此已经导入的文件会被报告为 already-imported 并跳过——只有新增或变更的文件会被存储。

即使文件保留相同的标题且 CLAUDE_MEM_DEDUP_ENABLED=true,变更后的正文也会被存储。原生笔记使用精确内容去重;对生成的观察仅按标题合并不会丢弃笔记修订版本,也不会丢弃共享同一标题的不同主题文件。更早的修订版本仍然可用。

摘要行会报告结果:

MEMORY INGEST: 12 stored, 38 already-imported, 0 skipped, 0 failed, of 50 files across 1 dirs

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/claude-mem