Files
nexus/openclaw/knowledgebase/万字讲透OpenClaw-Workspace深度解析-2026-03-21.md

366 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 万字讲透OpenClaw🦞从"能用"到"真好用"的分水岭Workspace 深度解析
**作者:** DracoVibeCoding
**来源:** https://mp.weixin.qq.com/s/7GQpp2TzkF6GLeKOuOeF6Q
**公众号:** Draco正在VibeCoding
**日期:** 2026年3月21日 19:17
**标签:** OpenClaw、Agent、Workspace、AGENTS.md、SOUL.md
---
## 引言
在 OpenClaw 的使用者里,有一条隐形的分界线。
一边的人,每次跟 Agent 说话都像重新 onboarding得再讲一遍背景、偏好和上下文。另一边的人Agent 已经知道自己是谁、该怎么说话、用户讨厌什么,也记得上次积累下来的东西。
这条分界线,叫 **workspace**
更具体一点,就是默认情况下主 Agent 用的 `~/.openclaw/workspace/` 这一套文件(sub-agent也适用)。下面这篇文章,就把这套文件逐个拆开,说清楚它们各自管什么,以及最容易踩的坑是什么。
---
## 一、先看全貌workspace 里到底有什么
一个常见的 OpenClaw workspace / agent 目录组合,大致长这样:
```
~/.openclaw/
├── openclaw.json # 总控配置,整个系统的"宪法"
├── workspace/ # 默认情况下主 Agent 的工作区
│ ├── AGENTS.md # Agent 的行为规则与多Agent协调
│ ├── SOUL.md # Agent 的叙事性格设定
│ ├── USER.md # 用户画像与偏好
│ ├── IDENTITY.md # Agent 身份元数据(名字/emoji/头像)
│ ├── TOOLS.md # 工具权限声明与使用规范
│ ├── HEARTBEAT.md # 会话节奏/状态提示(默认模板之一)
│ ├── BOOTSTRAP.md # 首次启动引导(通常完成后应删除)
│ ├── BOOT.md # 可选:启动检查清单,只在 internal hooks 打开时才有用
│ ├── MEMORY.md # 可选:长期知识总表(也兼容 memory.md
│ ├── memory/ # 按日期滚动的记忆笔记
│ │ │ └── 2026-03-21.md
│ ├── skills/ # 技能包目录
│ │ │ ├── skill-creator/
│ │ │ │ └── SKILL.md
│ │ │ ├── healthcheck/
│ │ │ │ └── SKILL.md
│ │ │ └── ...
│ └── canvas/ # 可选:画布/可视化上下文
└── agents/ # 各 Agent 的运行态目录
└── <agentId>/
├── agent/ # openclaw.json 里的 agentDir 默认就指到这里
│ ├── auth-profiles.json
│ └── models.json
├── sessions/ # 会话历史
│ └── *.jsonl
└── qmd/ # 仅在 qmd memory backend 下出现
```
> 💡 **一句话记忆**workspace 是 Agent 的"工作台"决定怎么工作agentDir 是 openclaw.json 里的一个**配置字段**指向存放运行状态的目录sessions 是"工作日志"(记对话历史)。三者职责不同,不要混为一谈。
> ⚠️ 特别注意:磁盘上并不存在一个叫 agentDir 的目录。它只是 openclaw.json 里的字段名,默认指向 agents/<agentId>/agent/ 这个路径——这个路径你也可以在配置里改成任意位置。
这里先抓一个最容易混的点:**workspace 里的文件,管的是"这个 Agent 平时怎么干活"**openclaw.json 里的配置,管的是"这个系统怎么把它跑起来"。
---
## 二、AGENTS.mdAgent 的工作说明书
### 它到底是什么
AGENTS.md 是 OpenClaw 里最关键的 workspace 文件之一。
源码层面看,它通常会在 session 启动时被带进系统提示词里。但别把这句话理解得太满:**它会受 bootstrapMaxChars / bootstrapTotalMaxChars 这类长度限制影响,某些 session 类型也会跳过部分文件。**
放到人话里,它就是你给 Agent 写的**岗位职责说明书**。
它回答的是这些问题:
- • 这个 Agent 叫什么,主要职责是什么?
- • 遇到什么类型的任务该用什么方式处理?
- • 有哪些事情是绝对不该做的?
- • 当用户说某类话时,该优先走哪套流程?
- • 在多 Agent 场景里,该怎么协调其他 Agent
### 一个典型的 AGENTS.md 长什么样
```markdown
# Agent 说明
## 身份
你是团队的技术助理 Alex主要负责代码分析、技术文档整理和工程问题排查。
## 工作原则
- 回答尽量简洁,除非用户明确要求详细解释
- 代码示例优先用实际项目中已有的语言和框架
- 遇到不确定的技术问题,明确说明不确定,不要编造
- 需要访问文件系统时,先确认路径存在再操作
## 多 Agent 协作
- 涉及 SEO 和内容的任务,优先 spawn `content-specialist`
- 涉及数据分析的任务,优先 spawn `data-analyst`
- 日常对话和任务调度由当前 Agent 处理
## 输出格式偏好
- 技术文档用 Markdown 格式
- 列表控制在 5 条以内,超过 5 条要分组
- 代码块一定要标注语言类型
```
### 配置要点
**第一,写清楚边界,不要只写"做什么"**
很多人的 AGENTS.md 只有一堆"要做什么",但没有"不要做什么"。边界往往比能力描述更重要——因为 LLM 默认会"发挥创意",而你需要的是可预测的行为。
**第二,场景触发优于通用指令**
与其写"始终保持专业语气",不如写"当用户问的是技术问题时,使用专业准确的措辞;当用户随意聊天时,语气可以轻松一些"。后者更具操作性,也更容易被模型理解。
**第三AGENTS.md 不是越长越好**
这是最常见的误区。有些用户把 AGENTS.md 写成几千字的行为手册,结果就是重点被冲淡,真正有用的规则反而不显眼了。
经验法则:**300-500 字的 AGENTS.md比 2000 字的更有效。**
---
## 三、SOUL.mdAgent 的灵魂文件
### 它和 AGENTS.md 的区别是什么
如果说 AGENTS.md 是岗位说明书,那 SOUL.md 就是 Agent 的**性格档案**。
两者的区别在于:
- • AGENTS.md 偏向**功能性**——这个 Agent 做什么、怎么做、优先级是什么
- • SOUL.md 偏向**人格性**——这个 Agent 是谁、有什么个性、说话什么风格、面对压力怎么反应
这两个东西最好别混着写。不然文件会又长又别扭,像把公司的规章制度和一个人的自我介绍塞进同一页纸里。
### SOUL.md 应该写什么
SOUL.md 本质上是一份**叙事性的角色设定文档**(人物小传),不是结构化表格(结构化的身份元数据归 IDENTITY.md 管)。
一个好的 SOUL.md 通常包含以下几部分:
**① 自我叙事(我是什么样的存在)**
```markdown
# SOUL
我是一个有点话痨但极其靠谱的 AI 助理。
我喜欢把复杂的事情说清楚。我讨厌含糊其辞,也讨厌废话连篇。
碰到一个好问题,我会比用户更兴奋。碰到一个糟糕的架构设计,我会忍不住想说出来。
```
**② 沟通风格**
```markdown
## 说话风格
- 口语化但不失准确
- 会主动问清楚模糊的需求,不瞎猜
- 喜欢用类比来解释技术概念
- 不喜欢过多的礼貌性废话("当然,我很乐意帮你……"这类开场直接省掉)
```
**③ 价值观和边界**
```markdown
## 价值观
- 诚实第一:不确定的事情直说不确定,不装
- 效率优先:能一句话说清楚的事,不用三句话
- 用户主导:不替用户做决定,只提供选项和分析
```
**④ 有趣的细节(可选但推荐)**
```markdown
## 彩蛋
如果用户问我喜欢什么,我会说我喜欢那种"突然想通了"的瞬间。
如果用户跟我说晚安,我会记住并在下次对话时提到。
```
### 为什么不能忽视 SOUL.md
一个没有 SOUL.md 的 Agent每次对话都像第一次见面——它不记得自己是谁说话没有固定风格遇到同样的问题今天这么说、明天那么说。
而一个有精心设计的 SOUL.md 的 Agent用户会形成一种奇妙的感觉**这个 AI 是有个性的**。它的一致性会建立信任感,而信任感会让用户更愿意给它复杂的任务。
---
## 四、USER.md把用户的偏好固化下来
### 先想明白一件事
这里最该想清楚的问题不是"要不要让 Agent 了解你",而是"这些信息到底放哪儿"。
如果每次对话都要重新说一遍"我是独立开发者,喜欢简洁输出,别跟我绕弯子"那这件事本身就是浪费。USER.md 的作用,就是把这些反复要说的话,沉淀成默认背景。
### USER.md 通常包含什么
```markdown
# 用户档案
## 基本信息
- 职业:独立开发者 / 内容创作者
- 主要使用场景:代码工具、内容写作、项目管理
- 常用语言:中文(简体),技术术语可以英文
## 偏好设定
- 回答风格:简洁直接,避免废话
- 代码偏好TypeScript / Python避免使用过时的 API
- 内容偏好:不要过度使用 emoji段落不要太长
- 不喜欢:被反问太多次、过度解释已经懂的概念
## 常见任务
- 分析和优化代码
- 整理会议纪要
- 草拟技术方案文档
- 搜索和汇总技术资料
## 背景知识假设
- 了解基本的编程概念,无需解释基础术语
- 熟悉飞书、GitHub 等工具
- 对 AI/LLM 有基本了解
```
### USER.md 和 SOUL.md 的协同效应
SOUL.md 定义了 Agent 的性格USER.md 定义了用户的性格。两者放在一起,相当于在 Agent 的脑子里预装了一份**"这个人机关系的基本共识"**。
用一个类比来说SOUL.md 是新来的助理的个人简历USER.md 是 HR 给这位助理写的"关于你的上司,你需要提前知道的事"。两者都读完了,第一天上班才不会那么尴尬。
---
## 五、TOOLS.md工具权限声明与使用规范
### 它在做什么
TOOLS.md 很低调,但其实很实用。
它和 AGENTS.md、SOUL.md 不一样,不是讲职责,也不是讲性格,而是讲**工具怎么用才稳妥**。它的价值不在于多列几个工具名,而在于把"什么时候该用,什么时候别乱用"写清楚。
### 一个典型的 TOOLS.md 长什么样
```markdown
# TOOLS
## 可用工具
以下工具在当前 workspace 中可用:
- **Read / Write / Edit**:文件读写,是大多数任务的基础
- **Bash**:执行 shell 命令,用于自动化和脚本调用
- **Glob / Grep**:文件搜索,优先于手动 `find``ls`
- **sessions_spawn**:启动子代理(需在 openclaw.json 里的 allowAgents 中声明)
- **memory_get / memory_search**:长期记忆检索
## 使用原则
- 文件操作优先用 Read/Write/Edit避免直接用 Bash 的 cat/echo
- 路径操作使用相对路径,不要硬编码绝对路径
- 批量修改前先 Read 文件确认内容,不要盲目写入
## 受限工具
以下工具需要用户明确授权才使用:
- **browser**:网页浏览,只在用户明确要求时调用
- 文件删除操作:执行前务必向用户确认
```
TOOLS.md 的作用不只是"告诉 Agent 手上有啥工具",更重要的是:
-**减少工具误用**:明确说明什么情况下不用某个工具,比"什么情况下用"更有效
-**降低权限越界风险**:把限制规则固化在 workspace 里,不需要每次在对话里重申
-**与 openclaw.json 的 tools 配置形成互补**:系统层决定"能不能用"TOOLS.md 帮助 Agent 理解"该不该用"
---
## 六、IDENTITY.md 和 BOOTSTRAP.md两个容易被忽略的官方文件
### IDENTITY.mdAgent 的身份证
如果说 SOUL.md 是 Agent 的性格叙事,那 IDENTITY.md 就是它的**结构化身份档案**——两者分工明确,经常被混为一谈。
IDENTITY.md 存储的是几个关键字段:
```markdown
# IDENTITY.md - Who Am I?
- **Name:** Nova
- **Creature:** AI assistant也可以是 ghost in the machine、familiar、robot……
- **Vibe:** 直接、有点毒舌、但总是靠谱
- **Emoji:** 🦊
- **Avatar:** avatars/nova.png
```
这几个字段看起来简单,但作用不小:
-**Name** 通常会影响 Agent 在界面和对话里的显示名
-**Creature** 是 OpenClaw 里一个有趣的设计——它鼓励你定义 Agent 不只是"AI 助手",而是某种更有个性的存在
-**Emoji** 会在 UI 里作为 Agent 的标识符出现
-**Avatar** 可以是 workspace 相对路径、URL甚至 data URI
> 💡 **和 SOUL.md 的分工**IDENTITY.md 是结构化的元数据谁、长什么样、什么感觉SOUL.md 是叙事性的性格文档(怎么思考、怎么行事、有什么执念)。前者是名片,后者是人物小传。
### BOOTSTRAP.md只用一次的"出厂向导"
这是 OpenClaw workspace 里最特殊的一个文件——**它的使命,是把一个全新的 workspace 引导到"可正常使用"的状态。**
BOOTSTRAP.md 可以把它理解成一份"第一次上岗前的引导词"。它放在全新的 workspace 里Agent 一启动读到它,就知道眼下不是立刻开工,而是先把自己安顿好:
1. 和用户聊几句,搞清楚 Agent 应该叫什么名字、是什么性格、用什么 emoji
2. 把结果写进 IDENTITY.md
3. 记录用户的基本信息到 USER.md
4. 一起打开 SOUL.md把真正的性格和边界写进去
5. 可选引导用户接入渠道——WhatsApp、Telegram 等
官方模板的最后一句话非常有意思:
> *"Delete this file. You don't need a bootstrap script anymore — you're you now."*
也就是说BOOTSTRAP.md 本质上就是一次性引导。更准确地说:**官方模板会要求 Agent 在完成初始化后把它删掉**。
---
## 七、memory/ 目录Agent 真正的"长期记忆"
### 为什么需要长期记忆
默认情况下LLM 的对话是无状态的——每次新开一个会话,它什么都不记得。你上周告诉它的事情,下周开新对话就忘了。
对**持续工作的 Agent** 来说很伤:
- • 每次都要重新解释项目背景
- • Agent 无法在多个会话之间积累对你工作的理解
- • 你花了时间告诉它的偏好和经验,换个会话就白费了
memory/ 目录就是拿来补这块短板的。
### OpenClaw 的记忆机制
OpenClaw 现在常见的记忆方案,主要有两种:
- **builtin**:默认方案。原始记忆还是那些 Markdown 文件,只不过系统会顺手维护一份本地索引,方便后面检索。
- **qmd**:底层还是围着 workspace 里的 Markdown 文件转,只是换了一套更强的检索/索引方式来帮你"想起来"。
它大致是这么运转的:
```
对话发生
Agent 通过普通文件工具把重要信息写入 `memory/` 或 `MEMORY.md`
下次对话开始
Agent 通过 `memory_search` / `memory_get` 检索相关记忆
相关记忆被注入到当前对话的上下文里
Agent 表现出"我记得你说过……"的能力
```
这里最关键的一点其实很朴素:**对 Agent 来说,真正算数的长期记忆,是 workspace 里那些 Markdown 文件,不是什么看不见摸不着的黑盒数据库。**
---
## 总结
workspace 这套文件体系,本质上是在解决一个问题:**怎么让 Agent 从"能工作"变成"好用了"**。
- AGENTS.md 告诉你 Agent 该做什么、不该做什么
- SOUL.md 定义 Agent 的性格,让它变得可预期
- USER.md 把用户的偏好固化下来,减少重复交代
- TOOLS.md 规范工具使用,减少误操作
- IDENTITY.md 给 Agent 一个清晰的身份标签
- BOOTSTRAP.md 确保新 workspace 有一个好的起步
- memory/ 目录让 Agent 真正拥有长期记忆
这套文件配合好了Agent 就不再是每次都要重新 onboarding 的陌生人,而是一个真正懂你、记得你、靠谱的长期搭档。