Spaces
用可选的分区,把工作、生活、项目或不同 Agent 的记忆分开。
Spaces 是一种可选的“分区”机制。它的作用不是把 Mem 拆成几套系统,而是在你真的需要时,让不同上下文各自更专注。
大多数人一开始不需要它。先一直用 Default,等你明确感觉到两个上下文已经互相打扰,再打开也不晚。
先保持简单
如果你还没有明显感觉到项目、团队或 Agent 之间的记忆混在一起,那就先别开 spaces,继续用默认分区。
第一个有用动作
只有在你已经知道“为什么要分开”时,再创建第二个 space。
最适合的第一批场景:
- 一个长期工作项目,不想和个人内容混在一起
- 一个会持续积累经验的 Agent
- 一个给团队共用的上下文分区
进入 设置 → 偏好设置 → Memory spaces,打开它,然后创建一个名字明确的分区。
成功应该是什么样
在新 space 里保存一条记忆,切回 Default,确认它不会出现在默认的 Memories 视图里。再切回去,能立刻找到它。
Spaces 会改变什么
当某个 space 处于激活状态时,下面这些界面默认都跟着它走:
- Memories
- Threads
- Library
- Working Memory
- AI Now
Timeline 也会先从当前 space 出发,但你仍然可以切回看全部活动。
实体图谱仍然是全局的。Mem 还是会理解你整个知识网络。Spaces 改变的是日常默认读写的记忆类界面,而不是把图谱硬切开。
这些设置到底是什么意思
一个 space 里最关键的是这三个设置:
- 这个空间里的自动回忆
- 只留在这个空间:开始回答前,第一步自动回忆只看当前分区。
- 留在这里 + 共享空间:先看这里,再一起读你标记为共享上下文的空间。
- 搜索全部空间:只给少数天生就该跨全局工作的分区用。
- 作为共享上下文一起读的空间
- 这里只影响检索范围。
- 不会把记忆自动搬过去。
- 不会把两个空间偷偷合并。
- 智能体在这里该怎么工作
- AI Now、Feed 和内置后台任务在这个空间里工作时会读它。
- 它影响的是检索和表达方式。
- 不会改变记录保存在哪里。
Spaces 里的 Working Memory
Working Memory 已经不再只是一个全局文件。
- Default 仍然保留兼容路径
~/ai-now/memory.md - 其他 space 也会有各自的 Working Memory 简报
- 当连接的工具知道自己当前在哪个分区时,它会自动读取对应那一份
这样研究 Agent 打开时看到的是研究上下文,你的默认个人分区仍然可以保持安静。
如果某个 space 已经没有记忆、对话或资料库条目了,但还留着自己的 Working Memory 笔记,删除它时 Mem 会直接说明这一点,并允许你在同一步里把这些自动生成的内容一起移除。
AI 工具怎么使用 Spaces
好的集成会把它当作“环境上下文”,而不是每一轮都让你重新解释一遍的新概念。
- AI Now 跟随应用里当前选中的 space
- 原生集成 如果宿主已经知道当前项目或 Agent 分区,应该优先把这个 lane 存在自己的配置里
- CLI 需要时可以显式加上
--space "<space name>" - HTTP 和 MCP API 仍然沿用
space_id这个字段名做兼容,但也可以直接传可见的空间名称。
nmem --json wm read --space "Research Agent"
nmem --json m search "token rotation" --space "Research Agent"
nmem spaces如果某个工具本身并没有自然的项目分区或 Agent 分区,就应该继续留在 Default,不要硬造一个。
优先用宿主自己的配置
如果一个集成本身已经有设置页或 provider 配置,就应该优先在那里选择 lane。环境变量只适合没有更好配置面的 CLI-first 工具。
多 Agent 宿主怎么设计
不是所有集成都能以同样的粒度处理 spaces。
- 编程类工具,例如 Claude Code、Codex、Gemini CLI,通常只需要给整段会话设一个可选 space。
- Agent 宿主,例如 Hermes、Alma、Bub、OpenClaw,可能需要按 profile、进程或稳定的 Agent 身份来分配不同 lane。
更合理的做法通常只有三种:
- 固定 lane:一个 profile 或一个进程始终只用一个 space
- 派生 lane:宿主本来就知道稳定的身份、项目或工作区,再据此推导出 space
- 明确映射:宿主暴露一小组可枚举身份,再把它们一一映射到命名好的 spaces
不要伪造路由
如果宿主并没有可靠的身份或工作区信号,就不要强行做“每个 Agent 一个 space”的自动路由。此时最稳妥的选择仍然是:一个 profile 对应一个固定 lane,或者继续使用 Default。
什么情况下最值得用
Spaces 真正有价值的时候,是你想提高专注度,而不是为了“隔离而隔离”。
它尤其适合:
- 一个所有者,同时运行很多长期 Agent
- 工作和个人上下文明显不同
- 一个项目共用分区,再加一个更安静的默认分区
- 团队想共享上下文,但不想把每个人的私人笔记全混进去
现在先别担心什么
- 不是因为有这个功能,你就必须立刻建 work / life 两个 space
- 不需要为了 spaces 重做标签体系
- 不需要把实体图谱切开,Mem 本来就故意把它保持为全局