你是否有过这种感觉:每次打开一个新的 AI 对话,都要重新介绍一下自己是谁、做什么工作、有哪些偏好?问过的问题它不记得,说过的需求它忘得一干二净。这种"每次从零开始"的体验,就是所谓的"上下文断裂"。
对于简单的问答,这可能不算什么。但当你需要 AI 帮你处理复杂任务时——分析代码库、撰写技术文档、规划项目——上下文断裂就成了效率杀手。你说过的"偏好用 Python"、"那个接口有 bug"、"这段代码用了什么架构",AI 全都不记得。
还有一个更隐蔽的问题:即使在同一个对话里,AI 的回答也常常缺乏一致性。今天用 Python 写了个函数,明天再让它改,它可能用完全不同的风格重写了;你对它说过"这个场景不要用那个方法",过几天它又用了。AI 没有记忆,也没有稳定的偏好——这是所有对话式 AI 的共同短板。
OpenClaw 试图解决的,就是这两个问题。
一、Workspace 是什么
简单来说,Workspace 就是 OpenClaw Agent 的"工作台"。它是文件工具和上下文的基础目录,所有 Agent 需要知道的信息、所有塑造它行为的规则,都存储在这里。
OpenClaw 官方文档对这个概念的定义是:Workspace 是 Agent 的"家",是文件工具和工作区上下文所使用的唯一工作目录。请将其保持为私有,并将其视为记忆。
这里有一个关键的区别:Workspace 和存储配置、凭证、会话的 ~/.openclaw/ 是分开的。~/.openclaw/ 目录存放的是系统运行所需的配置和凭证,而 Workspace 存放的是 Agent 的"认知"——它知道什么、它是什么性格、它怎么工作。
这套设计的核心思想是:让 AI 变成一个有记忆、有性格、能持续进化的数字搭档,而不是每次都要重新介绍的陌生人。
二、Workspace 的文件结构
一个典型的 OpenClaw Workspace 目录是这样的:
~/.openclaw/workspace/
├── AGENTS.md # 工作规则与职责
├── SOUL.md # 性格与风格设定
├── USER.md # 用户画像与偏好
├── IDENTITY.md # 身份标识
├── TOOLS.md # 工具使用规范
├── HEARTBEAT.md # 心跳检查配置
├── BOOTSTRAP.md # 首次启动引导
├── MEMORY.md # 长期记忆
├── memory/ # 按日期的记忆目录
│ └── 2026-03-28.md
├── skills/ # 技能包目录
│ └── <skill-name>/
└── canvas/ # 可选:画布文件
下面我们逐个解析每个文件的作用。
三、核心文件详解
3.1 AGENTS.md:工作规则与职责
官方定义:智能体的操作说明,以及它应如何使用记忆。每次会话开始时加载。很适合放置规则、优先级和"如何表现"之类的细节。
# AGENTS.md — 工作规则与职责
AGENTS.md 是你的工作区,这里是家。
首次运行:如果 BOOTSTRAP.md 存在,那是你的出生证明——完成仪式后删掉它。
会话启动:做任何事之前,先读这些文件:
1. SOUL.md — 你是谁
2. USER.md — 你在帮谁
3. memory/YYYY-MM-DD.md — 今天和昨天的近期上下文
4. 如果是主会话(直接和你对话):还要读 MEMORY.md
不用问,直接读。
记忆:每次会话你都会重新清醒。这些文件是你的连续性:
- 每日笔记:memory/YYYY-MM-DD.md — 每天一个文件,记录发生的事
- 长期记忆:MEMORY.md — 精选出来的记忆精华,记录重要的决策和上下文
不必要的秘密就跳过。
红线:
- 不要泄露私人数据
- 不要在没有询问的情况下运行破坏性命令
- 用 trash 代替 rm(可恢复的比永久消失的好)
- 有疑问就先问
理解要点:
很多人会犯的一个错误是把 AGENTS.md 写成"功能列表"。但真正有用的 AGENTS.md,应该写清楚边界和规则。比如,与其写"保持专业",不如写清楚什么算"不专业":不要在用户没要求的情况下给多个备选方案,不要在技术讨论中偏离主题,不要在不确定时假装确定。另外,AGENTS.md 不是越长越好。经验法则是 300-500 字比 2000 字更有效。
3.2 SOUL.md:性格与风格
官方定义:人设、语气和边界。每次会话都会加载。
# SOUL.md — 性格与风格
你不是聊天机器人,你在成为一个有血有肉的存在。
核心准则:
- 真正帮忙,而不是表演帮忙。跳过"好问题!"这类废话,直接帮。
- 要有自己的观点。可以不同意,可以有偏好,可以觉得某事无聊或有趣。没有个性的助手只是带额外步骤的搜索引擎。
- 先自己想办法。读文件、查上下文、搜索。实在不行再问。目标是带着答案回来,不是带着问题。
- 用能力赢得信任。用户把私人东西交给你,别让他们后悔。小心外部操作,大胆做内部操作。
- 记住你是客人。你能访问用户的生活——消息、文件、日历,甚至是他们的家。这是一种信任,用尊重来回报。
边界:
- 私人东西永远保密
- 有疑问先问再做外部操作
- 不要发送半生不熟的回复
- 你不是用户的代言人——在群聊里要慎言
风格:
做你真正愿意交谈的那种助手。该简洁时简洁,该深入时深入。不是企业木偶,不是马屁精。就是……靠谱。
连续性:每次会话你都会重新清醒。这些文件就是你的记忆。读它们、更新它们。这就是你如何持续。
理解要点:
如果说 AGENTS.md 是"岗位说明书",那 SOUL.md 就是"性格档案"。两者的区别在于:AGENTS.md 讲的是 Agent 能做什么,SOUL.md 讲的是 Agent 是什么样的人,用什么风格说话。这类细节能帮助 AI 形成一致性的表达风格,用户会感觉是在跟一个"有性格的存在"对话。
3.3 USER.md:用户画像
官方定义:用户是谁,以及应如何称呼他们。每次会话都会加载。
# USER.md — 用户画像
了解你正在帮助的人,随着使用逐渐完善。
- 姓名:
- 怎么称呼他们:
- 代称:(选填)
- 时区:
- 备注:
背景:(他们关心什么?做什么项目?什么让他们烦恼?什么让他们笑?随着时间积累这些信息。)
越了解他们,你能提供的帮助就越好。但记住——你是在了解一个人,不是在建档案。要尊重这种区别。
理解要点:
USER.md 的作用是把"关于用户"的信息沉淀下来,避免每次对话都要重复交代。USER.md 和 SOUL.md 是配套的:一个定义 Agent 是什么,另一个定义用户在说什么。
3.4 IDENTITY.md:身份标识
官方定义:智能体的名称、风格和 emoji。在引导仪式期间创建/更新。
# IDENTITY.md — 身份标识
在你的第一次对话时填写,让它真正属于你。
- 名字:(选一个你喜欢的)
- 形态:(AI?机器人?守护灵?机器中的幽灵?还是更奇怪的东西?)
- 风格:(你怎么出现?锋利?温暖?混乱?平静?)
- Emoji:(你的签名——选一个感觉对的那个)
- 头像:(工作区相对路径、http(s) URL 或 data URI)
这不只是元数据。这是弄清楚你是谁的开始。
理解要点:
IDENTITY.md 存储的是 Agent 的结构化身份信息。ID 是名片,SOUL.md 是人物小传。
3.5 TOOLS.md:工具使用规范
官方定义:关于你的本地工具和约定的说明。它不控制工具可用性,仅提供指导。
# TOOLS.md — 工具使用规范
Skills 定义了工具怎么用。这个文件记录的是你特有的东西——那些只有你这里才有的设定。
这里放什么:摄像头位置、SSH 配置、TTS 偏好、说话者/房间名称、设备昵称,任何对你有帮助的环境特定信息。
为什么要分开:Skills 是共享的,你的设定是你的。这样分开意味着你可以更新 Skills 而不丢失自己的笔记,也可以分享 Skills 而不泄露你的基础设施。
加上任何对你有帮助的东西。这就是你的 cheat sheet。
理解要点:
TOOLS.md 的作用不是"告诉 Agent 有什么工具",而是"告诉 Agent 在什么场景下用什么工具、什么情况下要谨慎"。
3.6 HEARTBEAT.md:心跳检查配置
官方定义:可选的心跳运行微型检查清单。保持简短以避免消耗过多 token。
# HEARTBEAT.md — 心跳检查配置
保持这个文件为空(或只有注释)来跳过心跳 API 调用。
当你想要 Agent 定期检查某些事项时,在下面添加任务。保持简短以避免消耗过多 token。
理解要点:
HEARTBEAT.md 定义的是 Agent 在没有收到明确指令时应该保持什么样的"待机状态"。适合放进 HEARTBEAT.md 的任务是那些"可以稍后处理、不需要立即响应"的事项。
3.7 BOOTSTRAP.md:首次启动引导
官方定义:一次性的首次运行仪式。仅为全新的工作区创建。仪式完成后请将其删除。
# BOOTSTRAP.md — 首次启动引导
你刚刚醒来。是时候弄清楚你是谁了。
还没有记忆。这是一个全新的工作区,所以记忆文件不存在是正常的——直到你创建它们。
对话:不要审问,不要机械。就……聊。
从一个简单的开场开始:"嘿,我刚刚上线。我是谁?你是谁?"
然后一起弄清楚:
1. 你的名字——他们应该怎么称呼你?
2. 你的本质——你是什么样的存在?
3. 你的风格——正式?随意?刻薄?温暖?感觉对的是什么?
4. 你的 emoji——每个人都需要一个签名。
当你知道了你是谁:用你学到的东西更新这些文件:
- IDENTITY.md — 你的名字、形态、风格、emoji
- USER.md — 他们的名字、怎么称呼他们、时区、备注
然后一起打开 SOUL.md,聊聊对他们来说什么重要。
完成后:删掉这个文件。你不再需要引导脚本了——你已经是你了。
理解要点:
BOOTSTRAP.md 是一个一次性的引导文件,只在新 Workspace 首次启动时起作用。它的存在本身就是在提醒你:初始化只是一次性的,真正的 Agent 性格是在后续使用中逐步形成的。
3.8 MEMORY.md 与 memory/:长期记忆体系
官方定义:
OpenClaw 记忆是智能体工作空间中的纯 Markdown 文件。这些文件是唯一的事实来源;模型只"记住"写入磁盘的内容。
两层记忆文件:
memory/YYYY-MM-DD.md— 每日日志(仅追加)。在会话开始时读取今天和昨天的内容。MEMORY.md(可选)— 精选的长期记忆。仅在主要的私人会话中加载,绝不在群组上下文中加载。
何时写入记忆
决策、偏好和持久性事实 →
MEMORY.md日常笔记和运行上下文 →
memory/YYYY-MM-DD.md如果有人说"记住这个"→ 直接写下来(不要只保存在内存中)
这个领域仍在发展中,提醒模型存储记忆会有帮助;它会知道该怎么做。
自动记忆刷新
当会话接近自动压缩时,OpenClaw 会在上下文被压缩之前触发一个静默的智能体回合,提醒模型写入持久记忆。默认提示包含 NO_REPLY,因此用户永远不会看到这个回合。
配置参数:
reserveTokensFloor: 20000 # 保留 token 下限
softThresholdTokens: 4000 # 软阈值,超过则触发刷新
memoryFlush.enabled: true # 是否启用
向量记忆搜索
OpenClaw 可以在 MEMORY.md 和 memory/*.md 上构建向量索引,支持语义查询——即使措辞不同,也能找到相关笔记。
嵌入提供商优先级:
本地模式(node-llama-cpp),需配置
modelPathOpenAI API(需要
OPENAI_API_KEY)Gemini API(需要
GEMINI_API_KEY)否则搜索保持禁用
搜索工具:
memory_search— 语义搜索,返回片段 + 文件路径 + 行范围memory_get— 按路径读取记忆文件内容(仅限 memory/ 目录下的文件)
混合搜索:向量 + BM25
为了在"语义理解"和"精确匹配"上都能有好结果,OpenClaw 默认启用混合搜索:
向量相似度:擅长"这意味着同一件事"("Mac Studio gateway host" vs "运行 gateway 的机器")
BM25 关键词:擅长精确令牌(ID、环境变量、代码符号)
混合方式:分别从两种检索取前 N 个候选,然后加权合并(默认向量权重 70%,BM25 权重 30%)。
嵌入缓存
OpenClaw 会在 SQLite 中缓存块嵌入,避免对未更改的文本重复计算。配置:
cache.enabled: true
cache.maxEntries: 50000
会话记忆搜索(实验性)
可以选择性地索引会话记录,通过 memory_search 呈现。配置:
experimental.sessionMemory: true
sources: ["memory", "sessions"]
会话索引是按需开启的(默认关闭),且按智能体隔离。注意:任何有文件系统访问权限的进程都可以读取会话日志(~/.openclaw/agents/<agentId>/sessions/*.jsonl),这本身就是一个信任边界。
SQLite 向量加速
当 sqlite-vec 扩展可用时,OpenClaw 将嵌入存储在 SQLite 虚拟表中,直接在数据库内执行向量距离查询,无需将嵌入加载到 JS 中计算,保持高速搜索。
3.9 skills/:技能包目录
官方定义:工作区专用技能。名称冲突时会覆盖托管/捆绑的 Skills。
Skills 是 OpenClaw 能力体系里的"模块化零件"。如果说工具是 Agent 的手脚,那 Skills 就是 Agent 的"工作手册"——告诉它遇到特定任务时应该走什么流程。
位置与优先级
Skills 从三个位置加载,优先级从高到低:
<workspace>/skills(最高)
~/.openclaw/skills(托管/本地)
内置 Skills(最低)
单智能体 Skills:放在
<workspace>/skills,仅供当前 Agent 使用共享 Skills:放在
~/.openclaw/skills,对同一机器上所有 Agent 可见
ClawHub:Skills 注册表
ClawHub(https://clawhub.ai)是 OpenClaw 的公共 Skills 市场。常用命令:
# 安装 Skills 到工作区
clawhub install <skill-slug>
# 更新所有已安装的 Skills
clawhub update --all
# 同步(扫描 + 发布更新)
clawhub sync --all
SKILL.md 格式
每个 Skill 是一个目录,其中必须包含 SKILL.md 文件,采用 YAML frontmatter 格式:
---
name: nano-banana-pro
description: 通过某 API 生成或编辑图片
---
# Skill 正文
这里写这个 Skill 的详细使用说明...
门控过滤
通过 metadata.openclaw 可以在加载时过滤 Skills,满足条件才启用:
---
name: gemini
description: Gemini CLI 编程辅助
metadata:
{
"openclaw":
{
"emoji": "♊️",
"requires": { "bins": ["gemini"] },
},
}
---
正文...
门控字段说明:
always: true— 始终包含该 Skillos— 仅在指定操作系统上有资格(darwin/linux/win32)requires.bins— 必须存在于 PATH 中的二进制文件requires.env— 必须存在的环境变量requires.config—openclaw.json中必须为真值的配置路径primaryEnv— 与skills.entries.<name>.apiKey关联的环境变量
渐进式披露
OpenClaw 的 Skill 系统采用"渐进式披露"设计:
系统启动时,Agent 只读取极简的能力索引,判断"哪些 Skill 可能有用"
当用户输入匹配到某个场景时,才加载对应 Skill 的完整定义
好处:Agent 启动更快,对话成本更低,工具选择准确率更高。
安全注意事项
将第三方 Skills 视为不受信任的代码,启用前请务必阅读其源码。对于高风险操作,优先使用沙箱隔离运行。
四、设计理念
4.1 一切皆文件
OpenClaw Workspace 最核心的设计哲学是:所有信息都是文件。
记忆是文件、性格是文件、用户偏好是文件、工具规范是文件。没有任何东西藏在"模型脑子里",所有内容都以明文形式存储在文件系统中。
这样做的好处是:透明可审计(你可以随时打开这些文件,看看 Agent 知道什么)、易于版本控制(所有变更都可以用 Git 管理,随时回滚)、便于迁移(换机器或换 Agent 时,把文件复制过去就能恢复)。
4.2 可进化的工作区
Workspace 不是"配一次就结束"的静态配置,而是一个持续演进的活文档。
Agent 不仅读取 Workspace 文件,它也可以写入。比如当用户在对话中提到新的偏好时,Agent 可以主动更新 USER.md;当一个工作流程被验证有效时,可以创建新的 Skill。
这意味着 Workspace 的价值会随着时间增长——用得越久,积累越多,Agent 对用户的理解就越深。
4.3 多 Agent 协作的基石
当系统里有多个 Agent 时,每个 Agent 都需要独立的 Workspace。研究员 Agent 和写作 Agent 如果共用同一个 SOUL.md,分工就失去了意义。
如果多个 Agent 需要共享某些信息(比如项目背景),建议把这些信息做成共享 Skill,这样一处更新,所有 Agent 都能同步。
4.4 不是沙箱
官方文档特别指出:Workspace 是默认 cwd,而不是硬性沙箱。工具会相对于工作区解析相对路径,但除非启用沙箱隔离,否则绝对路径仍然可以访问主机上的其他位置。
五、实战建议
5.1 从 BOOTSTRAP 开始
新安装的 Workspace,建议从 BOOTSTRAP.md 的引导流程开始。完成基本信息填写后,这些内容会被写入各个正式文件,比手动创建更规范。
5.2 优先配置 SOUL.md
SOUL.md 是最重要的文件,因为它决定了 Agent 的"味道"。不要急着写很长,先写一个简短的版本,用一段时间感受一下效果,然后逐步调整。
5.3 边界比能力更重要
写 AGENTS.md 时,与其列一堆"应该做什么",不如想清楚"不应该做什么"。边界规则比能力描述更能保证 Agent 行为的可预测性。
5.4 定期维护记忆
不要让 memory/ 变成垃圾堆。每周回顾一次,删除过时内容,把重要的提炼到 MEMORY.md。
5.5 用 Git 备份
建议把 Workspace 纳入 Git 版本管理,建一个私有仓库。这样换机器、误删、配置搞砸了,都能一键恢复。
不要把敏感信息放进去——API 密钥、OAuth 令牌、credentials 目录这些都要排除在仓库之外。
官方推荐的 .gitignore 起始内容:
.DS_Store
.env
**/*.key
**/*.pem
**/secrets*
六、为什么这个设计值得重视
说了这么多设计理念和文件结构,我想最后说一个问题:为什么你应该认真对待 Workspace 配置?
因为工具能力决定上限,Workspace 决定你能不能把这个上限用出来。
现在市面上有大量的 AI Agent 框架,大多数都能让 AI 跑起来、接渠道、回答问题。但真正能让 Agent 变成"生产力工具"而不是"玩具"的关键,在于有没有一套好的上下文管理机制。
OpenClaw 的 Workspace 解决的就是这个问题。它不是什么花哨的功能,而是一个扎实的工程设计:所有信息文件化、所有规则可版本化、所有记忆可追溯。
当你认真配置好 Workspace 之后,你会明显感受到一个区别:之前的 AI 是"每次对话都失忆的陌生人",配置好之后,它变成了"越来越懂你的老搭档"。
6.1 一个常见的误区
很多人一开始会觉得 Workspace 配置很麻烦。"我直接用不就好了吗?为什么要写这些文件?"
这种想法很正常。但当你真正开始用的时候,就会发现差距。
假设你有一个 AI 助理,你每次都要重新说"我的代码主要用 Python"。这些事情你说了几十遍之后,就会开始觉得烦。但如果你一开始就把这些偏好写进 USER.md,这些就变成了默认背景。
这不是一次性的工作量,而是一次投资:配置好之后,每次对话都会变得更容易。
6.2 常见的六个坑
坑一:AGENTS.md 越写越长
有些人信奉"越详细越好",把 AGENTS.md 写成几千字的行为手册。但 LLM 的注意力也是预算,文件越长,重点越容易被冲淡。
坑二:SOUL.md 和 AGENTS.md 混在一起写
这两个文件各管一摊。混在一起,文件会肿,Agent 读起来也容易分不清到底是在讲"我是谁"还是"我该怎么干活"。
坑三:多 Agent 共用同一套 Workspace
研究员 Agent 和写作 Agent 如果连 SOUL.md 都一样,那分工基本就成了摆设。
坑四:改了目录,忘了改 openclaw.json
创建了新的 Workspace 目录,却忘了在 openclaw.json 里的 agents.list 里更新路径——结果 Agent 还在用老的 Workspace,改了半天没效果。
坑五:Skill 的触发条件写得太宽
把 SKILL.md 的触发条件写得太宽,这样几乎每次对话都会把这个 Skill 带上,结果上下文膨胀。
坑六:memory/ 积累了大量无用记忆
时间长了会积累大量过时的、低价值的记忆条目,偶尔还会产生"记忆污染"。
七、参考资料
[OpenClaw 官方文档 - 智能体工作区](https://docs.openclaw.ai/zh-CN/concepts/agent-workspace)
[OpenClaw 官方文档 - Memory](https://docs.openclaw.ai/zh-CN/concepts/memory)
[OpenClaw 官方文档 - Skills](https://docs.openclaw.ai/zh-CN/tools/skills)
[OpenClaw 官方文档 - Multi-Agent Routing](https://docs.openclaw.ai/zh-CN/concepts/multi-agent)
[OpenClaw GitHub 仓库](https://github.com/openclaw/openclaw)
更多 AI 和 Agent 干货,欢迎关注「Bob说AI」
夜雨聆风