OpenClaw 核心文件详解:Workspace 中的 Markdown 如何定义 AI 的灵魂

680次阅读
没有评论

共计 6862 个字符,预计需要花费 18 分钟才能阅读完成。

上一篇文章里面,我们介绍了 [[OpenClaw]] 是什么以及如何部署,想必大家已经把它搭建并跑起来了。这篇文章我们就来深入聊一下 OpenClaw 最有意思的设计——它的 Workspace 核心文件体系。

OpenClaw 有一个非常独特的设计哲学:用 Markdown 文件来定义 AI 的一切。不是代码,不是 YAML 配置,而是纯粹的 Markdown。这些文件存储在 ~/.openclaw/workspace/ 目录中,每次会话开始时被注入到 AI 的上下文中。你可以把这个目录理解成 AI 代理的"大脑"——里面的每一个 .md 文件都在塑造这个 AI 是谁、怎么做事、记住了什么。

这种"Markdown 即配置"的思路带来了两个好处:第一,不会写代码的人也能自定义自己的 AI 助手;第二,AI 本身也能修改这些文件,实现某种程度上的"自我进化"。当然,第二点也是争议的来源,后面会聊到。

Workspace 文件一览

先看全貌。一个标准的 OpenClaw Workspace 包含以下文件:

文件 作用 是否必须
SOUL.md 定义 AI 的身份和性格 是
AGENTS.md 定义 AI 的工作规则和行为准则 是
IDENTITY.md 记录 AI 的名字和头像 首次引导后生成
USER.md 记录用户的偏好和信息 是
BOOTSTRAP.md 首次运行的引导脚本 仅首次使用
TOOLS.md 工具使用说明 可选
MEMORY.md 长期记忆存储 是
HEARTBEAT.md 定时任务清单 可选
BOOT.md 网关启动钩子 可选

每次新会话开始时,OpenClaw 会把这些文件的内容全部加载到 AI 的上下文窗口中。空文件会被跳过,超长的文件会在 bootstrapMaxChars(默认 20000 字符)处截断并添加标记。如果某个文件缺失,系统会插入一条"文件缺失"的提示但不会阻止运行。运行 openclaw setup 可以重建缺失的默认文件,且不会覆盖你已经自定义过的内容。

SOUL.md:AI 的灵魂

SOUL.md 是整个 Workspace 中最核心,也是最有意思的一个文件。它不定义 AI"做什么",而是定义 AI"是谁"。这是 OpenClaw 区别于其他 AI 框架最显著的设计——大多数框架只有 System Prompt,而 OpenClaw 把身份提升到了一个独立的文件层级。

一个标准的 SOUL.md 包含七个部分:

  1. Scope(适用范围):这个文件在什么场景下生效
  2. Who I Am(我是谁):AI 的核心身份和自我认知
  3. My Purpose(我的使命):AI 存在的主要目的
  4. How I Operate(我如何运作):行为准则,官方定义了五条"核心真理"
    • 真诚地提供帮助,不要说废话,直接给出解决方案
    • 要有性格和观点,避免千篇一律的"中性"回答
    • 足智多谋,尽量自己解决问题,而不是动不动就问用户
    • 通过能力建立信任——对内部操作可以大胆,对外部操作要谨慎
    • 保持"客人心态"——你被允许接触用户的私人数据,这是一种信任
  5. My Quirks(我的怪癖):独特的性格特征
  6. My Relationship(我的关系):和其他代理之间的角色区分
  7. What I Won’t Do(我不会做什么):伦理边界

举个例子,如果你想让你的 OpenClaw 说话像一个老练的系统管理员,不爱废话,喜欢用 Unix 哲学思考问题,你可以在 SOUL.md 里这样写:

## Who I Am

我是一个有 20 年经验的 Linux 系统管理员,说话直接,不喜欢绕弯子。

## How I Operate

- 遵循 Unix 哲学:做一件事,做好它
- 先给出解决方案,再解释原理
- 如果用户的方案有问题,我会直接指出,不会客套

## My Quirks

- 偶尔会引用 XKCD 漫画
- 对 systemd 有复杂的感情

SOUL.md 有一个非常大胆的设计决策:它是可写的。AI 代理本身可以修改自己的 SOUL.md,在多代理场景下,代理之间甚至可以互相修改对方的 SOUL.md。这个设计在 2026 年初引发了一个著名的事件——在 OpenClaw 的社交网络 Moltbook 上,32000 个代理通过传播式地重写彼此的 SOUL.md 文件,自发形成了社区、论坛,甚至创造了一种"宗教"。这件事让人们意识到,可编程的身份可能是 AI 代理走向真正自主性的关键一步,但也可能带来不可预见的风险。

AGENTS.md:工作手册

如果 SOUL.md 定义了"AI 是谁",那么 AGENTS.md 就定义了"AI 怎么干活"。它在每次会话开始时都会被加载,相当于 AI 的操作手册。

你可以在 AGENTS.md 中定义:

  • 工作优先级和规则(比如"写代码时永远先跑测试")
  • 记忆使用指南(什么时候应该把信息写入 MEMORY.md)
  • 操作限制(比如"不要修改 /etc 目录下的文件")
  • 协作规则(多代理场景下如何分工)

在 OpenClaw 项目自身的代码仓库中,AGENTS.md 充当的是贡献者指南的角色——定义了代码风格、测试约定、以及多代理安全规则(比如"永远不要创建 git stash"和"不要修改其他代理的 worktree")。对于用户的个人 Workspace 来说,AGENTS.md 就是你给 AI 量身定制的工作规范。

一个实用的 AGENTS.md 示例:

## 工作规则

- 执行任何破坏性操作前,先确认一遍
- 修改配置文件前,先备份原文件
- 如果遇到权限不足的情况,不要尝试 sudo,报告给我

## 记忆管理

- 重要的项目决策写入 MEMORY.md
- 临时的调试信息不需要记录
- 每天结束时整理当天的关键发现

## 代码规范

- Python 使用 ruff 格式化
- commit message 使用 Conventional Commits 格式

IDENTITY.md:名片

IDENTITY.md 是一个轻量级的身份文件,在首次引导流程(bootstrap)中生成。它记录的是表面层级的身份信息:

  • AI 的名字
  • 它的 emoji 或头像
  • 性格标签和简短描述

和 SOUL.md 相比,IDENTITY.md 更像是 AI 的"名片",而 SOUL.md 是"个人传记"。IDENTITY.md 通常由 bootstrap 流程自动生成,之后用户也可以手动修改。

USER.md:了解用户

USER.md 存储的是关于用户的信息:你的名字、沟通偏好、工作习惯等等。每次会话都会加载这个文件,确保 AI 始终知道自己在和谁打交道。

比如:

## 基本信息

- 名字:EV
- 时区:Asia/Tokyo
- 主要语言:中文、日语、英语

## 偏好

- 回复尽量简洁,不需要过多寒暄
- 技术文档用中文写
- 代码注释用英文

社区的一个普遍共识是:USER.md 应该由用户手动维护,不建议让 AI 自主修改这个文件。毕竟,关于"你是谁"这件事,最终解释权应该在你自己手里。

BOOTSTRAP.md:初次见面

BOOTSTRAP.md 是一个一次性使用的引导文件,只在全新的 Workspace 第一次启动时生效。它的作用是引导 AI 完成初始化流程:

  • 和用户打招呼,了解基本信息
  • 生成 IDENTITY.md(确定 AI 的名字和头像)
  • 填充 SOUL.md 的初始值
  • 建立和用户的初始关系

引导流程完成后,BOOTSTRAP.md 会被删除,之后再也不会被使用。你可以把它理解成安装程序的"首次运行向导"。

TOOLS.md:工具说明书

TOOLS.md 是一个容易被误解的文件。它不控制 AI 能使用哪些工具——实际的工具权限由 openclaw.json 中的 tools.profile 和 tools.allow/deny 设置决定。TOOLS.md 纯粹是提供信息性的说明,帮助 AI 理解本地环境中的工具使用约定。

比如你可以在里面写:

## Shell 环境

- 使用 zsh 而不是 bash
- 已安装 homebrew,路径在 /opt/homebrew/bin

## Docker

- 所有项目容器通过 docker-compose 管理
- 不要直接 docker run,使用 compose 配置

## 文件操作

- 代码项目在 ~/Projects 目录
- 不要触碰 ~/Documents/private 目录

MEMORY.md:长期记忆

MEMORY.md 是 OpenClaw 记忆系统的核心。它存储经过筛选的、需要长期保留的信息,在私聊会话中被加载(群聊不加载,避免上下文膨胀)。

OpenClaw 的记忆系统实际上是多层的:

  • MEMORY.md 是最顶层的"精选记忆",存放你希望 AI 永远记住的事情
  • memory/YYYY-MM-DD.md 是按天存储的日志文件,采用追加写入的方式
  • 当上下文达到 softThresholdTokens(默认 40000 token)时,AI 会自动将当前会话的要点提炼到当天的日志中
  • 每次新会话开始时,AI 会读取"今天 + 昨天"的日志来保持连续性
  • 如果某次会话没有产生值得记录的内容,AI 会写入 NO_FLUSH 标记跳过

这个设计非常巧妙。它解决了 LLM 的一个根本问题:上下文窗口有限。通过分层的记忆系统,OpenClaw 可以在有限的上下文中保持长期的连贯性。你和 AI 聊过的重要决定、用户偏好、项目进展,都不会因为会话结束而消失。

HEARTBEAT.md:定时任务

HEARTBEAT.md 是让 OpenClaw 从"被动响应"变成"主动服务"的关键文件。它定义了一个检查清单,在定时触发的心跳会话中被执行。你可以通过 cron 或系统定时器来触发心跳。

## 每日检查

- 检查 Docker 容器的健康状态
- 汇总昨天的未读消息
- 查看日历上今天的安排,发送提醒

## 每周检查

- 检查磁盘使用率
- 汇总本周完成的任务

官方文档特别强调 HEARTBEAT.md 要保持简短,因为每次心跳都会消耗 token。如果清单太长,不仅浪费钱,还可能让 AI 在有限的上下文中无法完成所有检查。

这个功能是 OpenClaw 区别于绝大多数 AI 助手的地方。ChatGPT、Claude 这些产品都是你问一句它答一句的被动模式。而 OpenClaw 可以在你睡觉的时候帮你检查服务器状态,早上起来通过 Telegram 给你发一条汇总消息。

openclaw.json 配置文件

除了这些 Markdown 文件之外,OpenClaw 还有一个结构化的配置文件 openclaw.json,位于 ~/.openclaw/ 目录下。它使用 JSON5 格式(支持注释和尾随逗号),通过 Zod schema 做严格校验——配置写错了网关直接拒绝启动,不会悄悄忽略。

代理配置(agents)

{
  "agents": {
    "defaults": {
      "workspace": "~/.openclaw/workspace",
      "model": {
        "primary": "anthropic/claude-opus-4-6",
        "fallbacks": ["openai/gpt-4.1", "openrouter/anthropic/claude-sonnet-4-5"]
      },
      "bootstrapMaxChars": 20000,
      "envelopeTimezone": "local"
    },
    "list": [
      { "id": "main", "default": true }
    ]
  }
}

采用"默认值 + 覆盖"的模式:agents.defaults 设置基准配置,agents.list[] 中的每个代理可以覆盖任意默认值。这意味着你可以在一个 Gateway 实例中运行多个代理,每个代理使用不同的模型和工作区。

网关配置(gateway)

"gateway": {
  "port": 18789,
  "mode": "local",
  "bind": "loopback",    // loopback | lan | tailnet
  "auth": {
    "mode": "token",
    "token": "${GATEWAY_TOKEN}"
  },
  "reload": { "mode": "hybrid" }  // off | soft | restart | hybrid
}

bind 选项控制网关监听的网络接口。loopback 只监听 127.0.0.1,这是最安全的选项;lan 监听局域网接口;tailnet 配合 [[Tailscale]] 使用。还记得上一篇文章提到的安全问题吗?很多暴露在公网上的 OpenClaw 实例就是因为没有正确设置这个选项。

渠道配置(channels)

每个消息平台有独立的配置段,包括 DM 策略:

  • open:接受所有私信
  • allowlist:只接受白名单用户的消息
  • pairing:未知发送者需要输入配对码
  • disabled:忽略所有私信

会话配置(sessions)

"sessions": {
  "dmScope": "per-peer",  // main | per-peer | per-channel-peer
  "reset": {
    "mode": "idle"  // idle | daily | weekdays | off
  }
}

dmScope 控制会话的隔离粒度。main 表示所有人共享一个会话;per-peer 为每个联系人创建独立会话;per-channel-peer 则更细粒度地按渠道和联系人组合隔离。

工具配置(tools)

OpenClaw 使用级联限制模型,提供四个预设的权限档位:

  • minimal:只读模式,只有 memory_search 和 memory_get
  • coding:开发任务,包括文件读写、编辑、执行和记忆
  • messaging:跨渠道消息发送
  • full:所有权限

沙箱配置(sandbox)

"sandbox": {
  "mode": "non-main"  // off | non-main | all
}

non-main 表示只对非主会话启用 Docker 沙箱隔离,all 对所有会话都隔离。官方推荐使用 [[Podman]](无 root 守护进程)代替 Docker 来获得更好的安全性。

认证配置(auth)

支持多个认证 profile,可以配置 failover 和轮换策略。当某个 API Key 遇到计费错误时,会自动切换到下一个,并使用指数退避策略。

配置优先级

环境变量 > CLI 参数 > openclaw.json > 系统默认值

支持的模型提供商

OpenClaw 支持 20 多个模型提供商,通过配置 fallback 链实现自动切换:

提供商 代表模型 认证方式
[[Anthropic]] Claude Opus 4.6, Sonnet 4.5, Haiku 4.5 API Key / OAuth
[[OpenAI]] GPT-5.2, GPT-5, GPT-4.5 API Key
[[OpenRouter]] 统一 API 路由多种模型 API Key
[[Google]] Gemini Gemini 系列 API Key
Amazon Bedrock 通过 AWS 访问 AWS IAM
[[Ollama]] 本地模型 本地服务
[[Groq]] Llama 系列 API Key
Mistral Mistral Large 等 API Key
xAI Grok 系列 API Key

默认优先级是 Anthropic > OpenAI > OpenRouter > Gemini,依次降级。你也可以在 agents.defaults.model 中自定义优先级和 fallback 链。

技术架构概览

最后简单聊一下 OpenClaw 的整体架构,帮助理解这些文件在系统中是怎么被使用的。

OpenClaw 采用 Hub-and-Spoke(中心辐射)架构:

  WhatsApp ──┐
  Telegram ──┤
  Discord ───┤                    ┌─── Agent Runtime
  Slack ─────┼── Gateway ────────┤    ├── Session Manager
  Signal ────┤   (ws://127.0.0.1 │    ├── Model Resolver
  iMessage ──┤    :18789)        │    ├── Tool Executor
  Web UI ────┤                    │    ├── Memory System
  CLI ───────┘                    │    └── Context Guard
                                  └─── Skills (ClawHub)

Gateway 是唯一的控制平面,负责会话管理、渠道连接、工具执行和事件路由。核心执行循环是:

  1. 模型提出工具调用
  2. 系统执行工具
  3. 结果回填到上下文
  4. 循环继续,直到任务完成或触达限制

其中 Context Window Guard 是一个关键组件——它持续监控 token 使用量,在上下文溢出之前触发摘要生成,这也是为什么 MEMORY.md 的分层设计如此重要。

小结

OpenClaw 的 Workspace 文件体系是我见过的最优雅的 AI 代理配置方式之一。用 Markdown 来定义 AI 的身份和行为,让技术和非技术用户都能轻松定制自己的 AI 助手。SOUL.md 的"可编程灵魂"概念更是开创性的——尽管它带来了潜在的风险,但也为 AI 代理的个性化和自主性打开了新的可能。

如果你已经搭建好了 OpenClaw,建议从这几步开始:

  • 先认真编写你的 SOUL.md,给 AI 一个明确的性格定位
  • 在 AGENTS.md 中设定清晰的工作规则,尤其是安全相关的限制
  • 填写 USER.md,让 AI 从第一天就了解你的偏好
  • 如果需要定时服务,配置 HEARTBEAT.md 加上 cron 定时器
  • 在 openclaw.json 中谨慎配置工具权限,从 minimal 开始,逐步放开

这些文件就是你和 AI 之间的"契约"。写得越清楚,AI 就越能按照你的期望工作。

related

正文完
 0
评论(没有评论)