# Dense-Mem 快速开始：让 Claude Code 和 Codex 使用同一份记忆

**Summary:** 一篇面向初学者的教程：启动本地 Dense-Mem 服务器，创建第一把 memory key，并把 Claude Code 和 Codex 接到同一个共享 AI 记忆大脑。

- Canonical: https://markhuang.ai/zh/blog/dense-mem-personal-server-claude-code-codex
- Language: zh-CN
- Author: [Mark Huang](https://markhuang.ai/about)
- Published: 2026-05-30
- Section: 教程
- Tags: Dense-Mem, claude-code, Codex, MCP, AI 记忆, 教程
- License: https://creativecommons.org/licenses/by-nc/4.0/

---

![一个安全的共享记忆中枢，连接桌面上的多个 AI 客户端窗口](https://cdn.markhuang.ai/blog/dense-mem-personal-server-claude-code-codex/hero.webp)

*一个共享记忆中枢，把多个 AI 客户端连到一起*

## 一句话总结

2026 年，搭一套 Dense-Mem 最简单的方案就是本地跑个 Docker Compose，三个服务（Dense-Mem、Postgres、Neo4j）共享一个 MCP 端点，搞定。

快速上手三步走：

- 用本地 compose 文件把 Dense-Mem 跑起来
- 用 `provision-team` 生成一个 API key
- 把 Claude Code、Codex，或者两个都连到 `localhost:8080/mcp`

用 AI 聊天的时候，你是不是也有这种感觉：聊的时候挺聪明，第二天再开一个新对话，它什么都不记得了？

Dense-Mem 就是为了解决这个问题——给你的 AI 工具们一个共享的记忆服务器。Claude Code、Codex，还有其他 MCP 客户端，都能连到同一个地方。你不用再每次开新对话都重复说一遍自己的偏好、项目规则、家庭计划、团队决策，而是给这些工具一个真正持久的记忆大脑。

说到底就一句话：

```text
多个 AI 会话 -> 一台 Dense-Mem 服务器 -> 同一份记忆，随时可用
```

这篇教程先从本地版本开始。所有数据都留在你自己机器上，是最稳妥的第一步。

## Dense-Mem 到底是什么

Dense-Mem 不是聊天机器人，它是你所有 AI 工具背后的记忆层。

![对比图：左边是没有 Dense-Mem 时各自孤立的 AI 聊天，右边是接入共享记忆中枢后的 AI 客户端](https://cdn.markhuang.ai/blog/dense-mem-personal-server-claude-code-codex/without-vs-with-dense-mem.webp)

*有 Dense-Mem 和没有 Dense-Mem 的区别*

看图就明白了：

没有 Dense-Mem，每个助手都是冷启动。Claude Code 知道一些事，Codex 知道另一些，明天开个新对话，两边记住的东西全丢了。

有了 Dense-Mem，这些工具都指向同一个记忆服务。你的偏好、项目决策、纠正过的东西、团队上下文，都不会随着聊天窗口关掉就没了。

Dense-Mem 的机制是先存证据（fragment），验证通过后才提升为 fact。如果新记忆和旧记忆冲突，它会主动请你确认，而不是悄悄把旧的覆盖掉。

记忆这东西，不可信就等于没有。这一点很关键。

## 它解决哪些问题

![四个常见的 AI 记忆痛点，汇聚到一个安全的 Dense-Mem 方案中](https://cdn.markhuang.ai/blog/dense-mem-personal-server-claude-code-codex/problems-solved.webp)

*Dense-Mem 专门解决这几类记忆问题*

如果你遇到过下面这些情况，Dense-Mem 就是为你准备的：

- 每次开新对话都要重复说一遍同样的偏好
- 项目决策聊完就沉到历史纪录里，再也找不到
- 不同的 AI 客户端之间没法共享上下文
- 团队或家庭的信息散落在各个会话里
- 纠正了一个错误，结果旧记忆还在捣乱

## 需要准备什么

四样东西：

- Docker——服务器和数据库都跑在容器里，不用手动装环境
- 一个终端——敲命令用的
- 一个兼容 OpenAI 的 embedding 端点和对应的 API key——记忆召回和校验要用
- Claude Code、Codex，或者其他支持 MCP 的客户端

第一次上手的话，以官方 Wiki 为准：[Dense-Mem Quick Start](https://github.com/markhuangai/dense-mem/wiki/Quick-Start)。

## Step 1: 下载本地 Compose 文件

![一台笔记本电脑上运行 Docker Compose，包含 Dense-Mem、Postgres 和 Neo4j](https://cdn.markhuang.ai/blog/dense-mem-personal-server-claude-code-codex/local-docker-start.webp)

*本地 Docker Compose 一键搭建*

先建个文件夹：

```bash
mkdir dense-mem-local
cd dense-mem-local
```

下载入门用的 compose 文件：

```bash
curl -fsSLo docker-compose.yml \
  https://raw.githubusercontent.com/markhuangai/dense-mem/main/examples/docker-compose.base.yml
```

创建 `.env` 配置文件：

```bash
cat > .env <<'EOF'
POSTGRES_PASSWORD=choose-a-strong-postgres-password
NEO4J_PASSWORD=choose-a-strong-neo4j-password
CONTROL_PORTAL_TOKEN=choose-a-long-control-portal-token
AI_API_URL=https://api.openai.com/v1
AI_API_KEY=your-ai-provider-api-key
AI_API_EMBEDDING_MODEL=text-embedding-3-large
AI_API_EMBEDDING_DIMENSIONS=3072
EOF
```

打开 `.env`，把每个占位值替换成你自己的。

这个文件里有密码和 API key，不要分享给任何人。

Dense-Mem 需要一个兼容 OpenAI 的 embedding API。上面这个例子用的是 OpenAI 的 `text-embedding-3-large`，维度必须填 `3072`。如果换成 `text-embedding-3-small`，维度改成 `1536`。如果用其他兼容 OpenAI 的 embedding 服务，`AI_API_URL`、`AI_API_EMBEDDING_MODEL` 和 `AI_API_EMBEDDING_DIMENSIONS` 三个要一起改，改好再开始存记忆。

## Step 2: 启动 Dense-Mem

拉起所有服务：

```bash
docker compose up -d
```

确认一下运行状态：

```bash
docker compose ps
```

启动成功后，你会得到几个本地地址：

- `http://127.0.0.1:8080/mcp` —— Claude Code、Codex 等 MCP 客户端连这个
- `http://127.0.0.1:8080/ui` —— 用户界面
- `http://127.0.0.1:8090/` —— 管理后台，用来管理 team、profile 和 API key

注意，这些地址都是本地的，不会暴露到公网上。

## Step 3: 创建你的第一个 API Key

执行这条命令：

```bash
docker compose exec server /app/provision-team --name "primary-memory"
```

API key 只会显示一次，务必保存好。

输出大概长这样：

```json
{
  "team_name": "primary-memory",
  "profile_name": "default profile",
  "scopes": ["read", "write"],
  "api_key": "dm_default-prof_..."
}
```

这个 API key 就是你的 AI 客户端访问记忆的凭证。

## Step 4: 连接 Claude Code

![一张 API key 把两个 AI 助手终端连接到同一个记忆中枢](https://cdn.markhuang.ai/blog/dense-mem-personal-server-claude-code-codex/connect-clients.webp)

*多个 AI 客户端共享同一个记忆中枢*

先在终端设置环境变量：

```bash
export DENSE_MEM_API_KEY="dm_default-prof_..."
```

然后把 Dense-Mem 注册到 Claude Code：

```bash
claude mcp add --transport http dense-mem http://localhost:8080/mcp \
  --header "Authorization: Bearer $DENSE_MEM_API_KEY"
```

搞定。之后 Claude Code 需要记东西或查记忆的时候，就会自动调用 Dense-Mem。

## Step 5: 连接 Codex

同样先设置环境变量：

```bash
export DENSE_MEM_API_KEY="dm_default-prof_..."
```

然后在 `~/.codex/config.toml` 里加上：

```toml
[mcp_servers.dense_mem]
url = "http://localhost:8080/mcp"
bearer_token_env_var = "DENSE_MEM_API_KEY"
tool_timeout_sec = 60
enabled = true
```

改完配置记得重启 Codex。

现在 Claude Code 和 Codex 都连上了同一台 Dense-Mem。共享同一份记忆，只是客户端不同。

## Step 6: 试试你的第一条记忆

跟你的 AI 客户端说：

```text
记住，我喜欢简洁的回答，带具体例子。
```

然后开一个新对话，问它：

```text
你还记得我喜欢怎么回答问题的吗？
```

如果一切正常，助手会调用 Dense-Mem，从记忆里把答案翻出来。

## 一个大脑，多人共用

![个人、家庭、工作团队的记忆空间连接到一个安全的记忆中枢](https://cdn.markhuang.ai/blog/dense-mem-personal-server-claude-code-codex/shared-teams-profiles.webp)

*用 team 和 profile 划清记忆边界*

Dense-Mem 有 team 和 profile 两个概念。

需要共享记忆的就放同一个 team，不该混在一起的用不同 team。

- 一个人用多个 AI 工具，一个 team + 一个 profile 就够了
- 一家人可以共用一个 family team，每人一个 profile
- 工作团队可以按项目或小组划分 team
- 只需要查询的自动化任务，给一个只读 profile 的 key

这才是真正厉害的地方：记忆不再被锁死在某一个聊天工具里。

Claude Code 里记住的项目规则，Codex 也能调用。家庭助手记住的旅行偏好，换个窗口还能查到。工作团队的项目决策，都存在同一个共享记忆边界里。

## 不要往里存什么

Dense-Mem 是记忆系统，不是密码管理器。

这些东西别往里放：

- 密码
- 助记词（seed phrase）
- 私钥
- 银行卡号
- 任何你不希望 embedding 服务商看到的内容

默认情况下，Dense-Mem 会把记忆内容和查询请求发给你配置的 embedding 服务商处理。如果介意这一点，在存重要内容之前先换成自托管的 embedding 服务。

## 停止和重启

停止所有服务：

```bash
docker compose down
```

重新启动：

```bash
docker compose up -d
```

只要你不手动删 Docker volume，记忆数据会一直保留。

## 下一步

先把本地版跑起来，确认一切正常。接下来就可以把它部署到一台有公网 IP 的服务器上，这样你在任何设备上都能访问同一份记忆。

下一篇教程：[用 Vultr + Traefik 安全部署 Dense-Mem](/blog/secure-dense-mem-vultr-traefik)。

觉得 Dense-Mem 有用的话，去 GitHub 给个 star，也欢迎分享给身边同样在用多个 AI 工具的朋友：[github.com/markhuangai/dense-mem](https://github.com/markhuangai/dense-mem)。
