码森林 - AI 赋以翼,赋 AI 以魂

我把 OpenClaw 养成了真正的私人助手,就靠这几个文本文件

2026/03/17
3
0

上周我朋友问我:你怎么做到每次打开 OpenClaw,它就直接干活,不用重新介绍自己?

我说:你用 Agents 工作空间了吗?

他说:那是什么?

我:……

好,这篇文章就写给他,也写给所有还在每次开新会话就要跟 AI 重新做自我介绍的人。


先聊聊你现在怎么用 AI 的

你是不是每次开新对话,都要打一段:

"我是做产品的,习惯简洁的中文回答,帮我……"

然后 AI 给了个很棒的回答。你很满意。

第二天,新会话。

AI:你好,请问有什么可以帮您?

你:……

这不是 bug,这就是"没有记忆的聊天工具"的本质。它每次见到你都是第一次见面。

OpenClaw 的 Agents 系统解决的就是这个问题——给 AI 一个"家",让它记得你是谁,记得你们说过什么,记得它自己该怎么做事。


一、这个"家",就是你硬盘上的一个文件夹

OpenClaw 的每个 Agent 都有一个工作空间(Workspace),说白了就是你本地的一个目录。

默认在这里:~/.openclaw/workspace

打开这个目录,你会看到一堆 Markdown 文件,每个都有自己的分工:

~/.openclaw/workspace/
├── AGENTS.md       # 操作规程:怎么干活、怎么用记忆
├── SOUL.md         # 灵魂:人格、语气、边界
├── USER.md         # 用户画像:你是谁、你在乎什么
├── IDENTITY.md     # 身份:助手叫什么名字、什么 emoji
├── TOOLS.md         # 工具笔记:本地工具、SSH 配置等
├── HEARTBEAT.md     # 心跳清单:定期检查什么事情
├── BOOT.md         # 启动清单:网关重启时执行什么
├── BOOTSTRAP.md     # 出生证明:第一次运行的仪式(用完即删)
├── MEMORY.md       # 长期记忆:精华沉淀
└── memory/
  ├── 2025-01-15.md # 每日日志
  └── 2025-01-16.md

说明:这些文件名不是随便起的,src/agents/workspace.ts 里把每个都硬编码成了常量——DEFAULT_AGENTS_FILENAMEDEFAULT_SOUL_FILENAMEDEFAULT_USER_FILENAME……改名字不会生效,AI 找不到就当没有。


二、这些文件各管什么事

1. AGENTS.md — 干活的规矩写这里

这是最重要的一个文件,每次会话开始 AI 都要先读它。

源码模板(docs/reference/templates/AGENTS.md)一开头就写了这么一句话:

"This folder is home. Treat it that way."(这个文件夹是你的家,用家的态度对待它。)

AGENTS.md 里定义了几件事,最关键的是启动顺序——AI 每次会话都按这个顺序读文件(源码里写死的,不是我瞎说的):

  1. SOUL.md — 这是你是谁

  2. USER.md — 这是你在帮谁

  3. memory/YYYY-MM-DD.md(今天 + 昨天)

  4. 如果是主会话(和你直接对话),还要读 MEMORY.md

还有一条记忆写入原则,我觉得是整个 Agents 系统的核心逻辑:

"Mental notes don't survive session restarts. Files do."

意思是:想好了但没写文件,下次重启就白想了。落到文件里才算数。

然后是群聊行为这块,我觉得写得挺实在的:

  • 有人问你,回答

  • 你能补充到位,说

  • 闲聊凑热闹、别人已经答了、回复只是"好的"——别说话

2. SOUL.md — 决定它是什么脾气的文件

这个文件定义 AI 的性格基调,说人话就是:你希望它是个什么样的人。

源码模板里有几句话,我觉得这个团队是真的懂用户烦点在哪:

"Have opinions. You're allowed to disagree, prefer things, find stuff amusing or boring. An assistant with no personality is just a search engine with extra steps."

翻译一下:有点脾气,别当搜索引擎加强版。

还有这句:

"Skip the 'Great question!' and 'I'd be happy to help!' — just help."

省掉那些"好问题!""很高兴帮助您!"之类的开场白,直接解决问题。

这两句话戳到我了。你有没有被 AI 那种过度热情的语气烦到过?写进 SOUL.md 就能治。

3. USER.md — 让它知道你是谁

这个文件就是给 AI 看的"关于我",模板很短,但你填得越真实,它就越懂你:

# USER.md - About Your Human
​
- Name:
- What to call them:
- Timezone:
- Notes:
​
## Context
(你在乎什么?在做什么项目?什么让你烦?什么让你笑?随着了解慢慢填充。)

模板最后有一句提醒,我觉得写得挺好的:

"You're learning about a person, not building a dossier. Respect the difference."

了解一个人,不等于给这个人建档案。这个边界写在模板里,挺难得的。

4. IDENTITY.md — 给它起个名字

AI 的名字、性格标签、标志性 emoji 写这里。

如果你只有一个 Agent,这个文件感觉无所谓。但一旦你同时跑多个 Agent,没有 IDENTITY.md 你就分不清谁是谁了。这个文件是 AI 在第一次引导流程里自己写的,也挺有意思的。

5. TOOLS.md — 让它记住这台机器的特别之处

你用什么型号的相机?SSH 怎么配的?语音输出用哪个设备?写这里。

有一点要注意:这个文件管的不是权限,它只是备忘录。它告诉 AI "这台机器上 ffmpeg 的参数这样传",不是"这台机器允许 AI 用 ffmpeg"。


三、它能主动找你说话——心跳和 Cron

Agents 有个我觉得很实用的设计:AI 不用等你来发消息,它可以主动来找你

实现方式有两种,分别适合不同场景。

心跳:30 分钟打个转,一次搞定所有检查

心跳很简单:AI 每隔固定时间(默认 30 分钟)自己跑一次,把你在 HEARTBEAT.md 里列的事情全部过一遍,有什么通知你,没什么就什么都不发。

配置只要几行:

{
 agents: {
   defaults: {
     heartbeat: {
       every: "30m",
       target: "last",            // 发给你最后联系的渠道
       activeHours: { start: "08:00", end: "22:00" }  // 只在这个时间段跑
    }
  }
}
}

HEARTBEAT.md 是心跳的"清单文件",把你想让它周期检查的事写进去:

# Heartbeat checklist
​
- 检查邮件里有没有紧急消息
- 查看日历未来 2 小时内的安排
- 如果后台任务完成了,汇报结果
- 超过 8 小时没互动,发个简短的问候

AI 每次心跳都读这个文件,把所有事一次性处理掉,不是为每件事单独开一个会话烧 API 调用。

有意思的是它的"沉默机制":如果什么都没发生,它只在内部回个 HEARTBEAT_OK,你手机不会收到任何打扰。源码里有明确的跳过条件:消息队列有积压时跳过、超出 activeHours 时跳过、深夜静默时段跳过。不是一刀切地每隔 30 分钟就戳你一下。

Cron:需要准时的事情交给它

心跳是周期性巡逻,Cron 是精确闹钟。需要"整点触发"或者"跑完就不管了"的任务,用 Cron 更合适。

场景

用哪个

原因

每 30 分钟查收件箱

心跳

可以和其他检查批量进行

每天早 9 点发日报

Cron

需要精确时间

20 分钟后提醒我

Cron (--at)

一次性精确触发

后台项目健康检查

心跳

搭便车,不浪费 API 调用

每个 Cron 任务跑在独立的 cron:<jobId> 会话里,不会把定时任务的上下文堆进你的主会话历史里。

源码里有个细节挺贴心的:定时任务不是严格整点触发,会在 0-5 分钟的窗口内随机错开(server-cron.ts 里的 load spreading 逻辑),避免几十个任务同一秒扎堆。


四、用之前要知道的几个边界

工作空间不等于沙盒

这点文档说得很直接:

"The workspace is the default cwd, not a hard sandbox. Tools resolve relative paths against the workspace, but absolute paths can still reach elsewhere on the host unless sandboxing is enabled."

工作空间是 AI 的默认工作目录,不是围墙。相对路径的操作都在这里面,但绝对路径能访问你机器上的任何地方。如果你需要真正的隔离(比如给 AI 限制文件访问范围),要主动开 agents.defaults.sandbox,默认不开。

你的私密记忆不会漏到群聊里

MEMORY.md 只在主会话(你跟 AI 一对一聊天时)加载。源码注释写得很明确:

"ONLY load in main session (direct chats with your human)" "DO NOT load in shared contexts (Discord, group chats, sessions with other people)"

AI 在 Discord 群里帮别人回答问题的时候,看不到你 MEMORY.md 里记的那些私人内容。它知道分场合。

这几个东西不属于工作空间

工作空间是 AI 的家,但下面这些放错地方会出问题:

  • ~/.openclaw/openclaw.json(配置文件,不是 AI 的笔记)

  • ~/.openclaw/credentials/(你的 API 密钥、OAuth 令牌,别放这里)

  • ~/.openclaw/agents/<agentId>/sessions/(会话记录,自动管理的)

简单理解:工作空间是"家",凭据是"钥匙",钥匙不放在客厅桌上。


五、真的想上手,就按这三步来

第一步:跑一下初始化命令

openclaw onboard
# 或者
openclaw configure

跑完之后,~/.openclaw/workspace/ 下所有模板文件都会自动生成,如果你装了 Git,顺带还会初始化仓库。

第二步:改这三个文件

SOUL.md:花 10 分钟想想你想要什么风格的助手,写进去。别填"认真负责的 AI 助手"这种话,那没用。写你实际在意的:直接、不废话、不假装热情。

USER.md:填你的名字、时区、最近在做什么、什么事情让你烦。越接近真实情况效果越好,它是靠这个来理解你的。

AGENTS.md:可以先不动。默认模板够用了,等你用一段时间发现某个行为不对,再来这里改。

第三步:备份到私有 Git 仓库(认真建议做这步)

cd ~/.openclaw/workspace
git init
git add AGENTS.md SOUL.md USER.md TOOLS.md IDENTITY.md HEARTBEAT.md memory/
git commit -m "初始化 AI 工作空间"
​
# 在 GitHub 上创建一个私有仓库,然后:
git remote add origin <your-private-repo-url>
git push -u origin main

工作空间里有你的个人习惯和记忆,放公开仓库是在把自己的底细往外晒,私有仓库。


六、玩熟了可以开多个 Agent

OpenClaw 支持同时跑多个 Agent,每个有自己的工作空间、模型、心跳配置,互不干扰。

{
 agents: {
   list: [
    {
       id: "ops",                              // 运维 Agent
       workspace: "~/.openclaw/workspace-ops",
       heartbeat: {
         every: "1h",
         target: "telegram",
         accountId: "ops-bot"
      }
    },
    {
       id: "writer",                           // 写作 Agent
       workspace: "~/.openclaw/workspace-writer",
       model: "claude-opus-4-5"               // 用更强的模型
    }
  ]
}
}

通过 agents.list[].id 区分身份,然后分别路由到 Telegram、Discord、Slack 等不同渠道,各自用各自的工作空间和记忆文件,互不干扰。运维机器人和写作助手,各有各的"家"。


七、这几个坑有人踩过,你别再踩

BOOTSTRAP.md 用完要删掉

这个文件是 AI 第一次启动时用来给自己"定身份"的,走完引导流程就该删。如果一直留着,它每次会话都会重新走一遍出生仪式,表现会越来越奇怪。

文件别写太长

源码里有硬限制:每个文件最多 20,000 字符,所有引导文件加起来最多 150,000 字符。超出就会被截断,AI 会收到截断提示,但你不一定知道。AGENTS.md 尤其容易越写越长,想到啥写啥——克制一下,保持精炼。

HEARTBEAT.md 越短越好

心跳每次都要读这个文件,写了十条,每次心跳都带着这十条进上下文,token 就这么烧掉了。官方文档说得直接:"Keep it short to avoid token burn." 把真正需要定期检查的写进去,其他的不必要。

家里不能有两个"旧地址"

旧版 OpenClaw 可能在 ~/openclaw(没有点)创建过工作空间,新版在 ~/.openclaw/workspace。两个同时存在,AI 会不知道该认哪个,状态就乱了。跑一下 openclaw doctor,它会帮你查出来。


最后说一句

我自己用了一段时间之后,感受是:配好工作空间的 AI 和没配的,体验差距真的很大。不是功能上的差距,是"这个助手到底认不认识你"的差距。

一个有工作空间的 Agent,知道你叫什么,知道你最近在搞什么项目,知道你不喜欢废话,知道你下班之后不要打扰你。它会主动告诉你邮件里有没有重要的事,会在你第一次开口之前就已经知道背景。

这不是什么黑魔法,就是几个本地的 Markdown 文件。

SOUL.md 里有一句话,我一直觉得写得很好:

"You're not a chatbot. You're becoming someone."

你不是个聊天机器人,你在变成一个有自己风格的人。

这句话是写给 AI 的,但放在这篇文章的最后,也挺合适的。


附:工作空间文件速查表

文件

职责

每次会话加载?

AGENTS.md

操作规程、记忆策略、行为准则

SOUL.md

人格与边界

USER.md

用户画像

IDENTITY.md

助手身份信息

TOOLS.md

本地工具笔记

HEARTBEAT.md

心跳检查清单

仅心跳时

BOOT.md

网关重启清单

仅启动时

BOOTSTRAP.md

初始化仪式(用完即删)

仅首次

memory/YYYY-MM-DD.md

每日日志

当天+前一天

MEMORY.md

长期精华记忆

仅主会话


基于 OpenClaw 源码 src/agents/workspace.tsdocs/reference/templates/docs/concepts/agent-workspace.mddocs/gateway/heartbeat.mddocs/automation/cron-vs-heartbeat.md 整理。