Skip to content

8.2 工作区物理隔离


想象一下这个场景:

公司里有五个部门:研发、销售、运营、财务、人事。

如果所有人都挤在一个大办公室里,会发生什么?

研发在讨论代码,销售在打电话,运营在吵架...一片混乱。

所以公司给每个部门独立的办公室。各有各的档案柜,各有各的会议记录。

多 Agent 的核心也是这样——物理隔离。每个 Agent 有自己的办公室、自己的档案柜、自己的记忆。这一节,我们用15分钟,理解多Agent的物理隔离机制。


每个Agent独立工作区

在 OpenClaw 里,一个 Agent 是一个完全独立作用域的“大脑”:

Workspace(工作区)

存放文件、AGENTS.md、SOUL.md、本地笔记、人设规则。就像员工的办公桌和文件柜。

AgentDir(状态目录)

存放认证配置文件、模型注册表、每 Agent 配置。就像员工的工牌和系统账号。

Sessions(会话存储)

独立的聊天记录,位于 ~/.openclaw/agents/<agentId>/sessions。就像员工的邮件历史。

认证配置文件是每 Agent 独立的。每个 Agent 从自己的位置读取:

~/.openclaw/agents/<agentId>/agent/auth-profiles.json

⚠️ 重要:主 Agent 凭证不会自动共享。切勿在 Agent 之间重用 agentDir,这会导致认证/会话冲突。


工作区目录结构

单Agent模式

~/.openclaw/
├── openclaw.json          # 全局配置
├── workspace/             # 主工作区
│   ├── AGENTS.md          # 行为规则
│   ├── SOUL.md            # 人格定义
│   ├── USER.md            # 用户信息
│   ├── MEMORY.md          # 长期记忆
│   ├── TOOLS.md           # 工具使用指南
│   ├── HEARTBEAT.md       # 定时任务监控
│   └── memory/            # 每日日志
└── agents/
    └── main/
        ├── agent/         # 认证配置
        └── sessions/      # 会话记录

多Agent模式

~/.openclaw/
├── openclaw.json
├── workspace-main/        # 主Agent工作区
├── workspace-research/    # 研究Agent工作区
├── workspace-writer/      # 写作Agent工作区
├── skills/                # 全局共享技能
└── agents/
    ├── main/
    ├── research/
    └── writer/

每个 Agent 有自己的一套文件,互不干扰。


试一试:创建你的第二个Agent

用命令行快速创建:

bash
# 添加新Agent
openclaw agents add research \
  --model zai/glm-4.7 \
  --workspace ~/.openclaw/workspace-research

# 设置身份
openclaw agents set-identity --agent research \
  --name "研究员" \
  --emoji "🔍"

验证创建成功:

bash
openclaw agents list --bindings

你应该看到 agents.list 里多了一个 research 条目。

AGENT ID    NAME      WORKSPACE
main        主助手     ~/.openclaw/workspace
research    研究员     ~/.openclaw/workspace-research

子Agent能看到什么?

当你用 sessions_spawn 创建子任务时,子 Agent 的可见范围是受限的。

主会话能看到

全部文件(AGENTS.md、SOUL.md、IDENTITY.md、USER.md、TOOLS.md、MEMORY.md、HEARTBEAT.md、BOOTSTRAP.md)

子Agent/Cron只能看到

白名单 5 个文件:

文件说明
AGENTS.md行为规则
TOOLS.md工具指南
SOUL.md人格定义
IDENTITY.md身份信息
USER.md用户信息

被过滤掉的

文件为什么过滤
MEMORY.md防止子任务污染长期记忆
HEARTBEAT.md定时任务配置不需要给子任务
BOOTSTRAP.md启动配置不需要给子任务

这意味着:子 Agent 看不到主 Agent 的长期记忆。如果需要历史背景,要在 task 描述里显式提供。

实践建议

spawn 时在 task 里显式给路径:

前置必读:
1. read prompts/content-guidelines.md — 内容创作规范
2. read memory/2026-03-10.md — 今日背景

隔离的好处和风险

好处

好处说明
记忆隔离写代码的 Agent 不会干扰写文案的 Agent
安全隔离可以给不同 Agent 设置不同的工具权限
资源控制沙箱隔离特定 Agent,其他 Agent 不受影响
独立演进每个 Agent 的记忆文件独立增长,互不拖累

风险

风险说明
信息孤岛Agent 之间默认不能通信,需要额外配置
重复配置每个 Agent 都要单独设置认证、模型、工具权限
协调成本任务需要在 Agent 之间流转时,需要设计好交接机制

文件协作模式

Agent 之间怎么共享信息?最简单的办法:文件

workspace-main/
├── intel/
│   ├── DAILY-INTEL.md     # 研究员写入
│   └── data/
│       └── 2026-03-10.json
└── agents/
    ├── writer/             # 写作Agent读取intel/
    └── twitter/

协作原则

原则说明
一写多读避免多个 Agent 同时写同一个文件
显式读取在 AGENTS.md 里写明“从哪读、写到哪”
数据双份JSON 存结构化数据,Markdown 存人类可读版本

每Agent独立配置

从 v2026.1.6 开始,每个 Agent 可以有自己的沙箱和工具限制:

json5
{
  agents: {
    list: [
      {
        id: "personal",
        workspace: "~/.openclaw/workspace-personal",
        sandbox: {
          mode: "off",  // 个人Agent无沙箱
        },
        // 无工具限制
      },
      {
        id: "family",
        workspace: "~/.openclaw/workspace-family",
        sandbox: {
          mode: "all",     // 始终沙箱隔离
          scope: "agent",  // 每Agent一个容器
        },
        tools: {
          allow: ["read"],
          deny: ["exec", "write", "edit"],
        },
      },
    ],
  },
}

这样,personal Agent 可以执行任意命令,而 family Agent 只能读取文件。


故障排查

Agent创建失败

检查项操作
workspace 路径确保目录存在且有写权限
模型名称确认模型 ID 正确(如 zai/glm-5
配置语法运行 openclaw config validate 检查

子Agent找不到文件

检查项操作
文件是否在白名单子 Agent 只能看到 5 个白名单文件
路径是否正确使用相对于 workspace 的路径
task 是否显式指定在 task 里用 read 命令指定文件

Agent之间文件不共享

检查项操作
workspace 是否独立每个 Agent 有自己的 workspace 目录
是否需要共享使用公共目录(如 ~/.openclaw/skills/

这一节,你做了什么

学了什么核心理解
物理隔离Workspace、AgentDir、Sessions 各自独立
目录结构多 Agent 模式下每个 Agent 有自己的工作区
子Agent限制只能看到 5 个白名单文件,看不到 MEMORY.md
协作模式通过文件系统实现“一写多读”
独立配置每 Agent 可设置不同的沙箱和工具权限

下一节

物理隔离让每个 Agent 有了自己的“办公室”。但它们之间怎么通信呢?

8.3 Agent间通信。

基于 MIT 许可发布