# 万字讲透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.md：Agent 的工作说明书

### 它到底是什么

AGENTS.md 是 OpenClaw 里最关键的 workspace 文件之一。

源码层面看，它通常会在 session 启动时被带进系统提示词里。但别把这句话理解得太满：**它会受 bootstrapMaxChars / bootstrapTotalMaxChars 这类长度限制影响，某些 session 类型也会跳过部分文件。**

放到人话里，它就是你给 Agent 写的**岗位职责说明书**。

它回答的是这些问题：
- • 这个 Agent 叫什么，主要职责是什么？
- • 遇到什么类型的任务该用什么方式处理？
- • 有哪些事情是绝对不该做的？
- • 当用户说某类话时，该优先走哪套流程？
- • 在多 Agent 场景里，该怎么协调其他 Agent？

### 一个典型的 AGENTS.md 长什么样

```markdown---
title: 万字讲透OpenClaw🦞从"能用"到"真好用"的分水岭：Workspace 深度解析
author: shenwei
---
---
title: 万字讲透OpenClaw🦞从"能用"到"真好用"的分水岭：Workspace 深度解析
source:
author: shenwei
published:
created:
description:
tags: []
---

# 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.md：Agent 的灵魂文件

### 它和 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.md：Agent 的身份证

如果说 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 的陌生人，而是一个真正懂你、记得你、靠谱的长期搭档。
