我们在使用 OpenClaw 时都有过这样的困惑:明明安装了许多强大的 Skills(技能),API 也是最贵的,但代理的表现却依然笨拙,只能被动响应,无法主动思考,甚至经常重复提问。这并不一定是大模型本身的能力不足,也不是插件质量问题,核心原因在于忽略了系统底层的“灵魂”配置。真正决定 OpenClaw 智商上限的,不是昂贵的模型调用,而是那些藏在 /.openclaw/workspace/ 目录下不起眼的 .md 配置文件。本文将深入拆解这些核心文件的功能与配置逻辑,带你通过修改底层配置,彻底告别 AI 代理的机械感。/.openclaw/workspace/** )下。如果不熟悉命令行界面的话,也可以在 Web UI 中查看和编辑。位置如下图:
OpenClaw 的所有核心逻辑都存储在工作空间目录(**
打开这个目录,我们会看到如下层级的文件结构,每个文件都承担着不同的职责:
- AGENTS.md:LLM的工作手册,代理调度规则与标准作业程序。
- BOOTSTRAP.md:初始化序列与核心系统提示词。
- HEARTBEAT.md:定时执行逻辑与主动任务状态自检。
- IDENTITY.md:代理身份定义与系统边界约束。
- MEMORY.md:长期上下文数据与既定规则的持久化存储。
- SOUL.md:LLM的性格,响应语气、行为特征及输出格式配置。
- TOOLS.md:工具授权注册表及调用参数规范。
- USER.md:用户(你的)画像数据,包含特定偏好与交互限制配置。
- memory/:存储日常运行日志与短期上下文。
- skills/:已安装的第三方技能扩展目录。
今天我们介绍 HEARTBEAT.md 文件,这是 OpenClaw 的核心文件。
什么是 HEARTBEAT.md?
HEARTBEAT.md 是 OpenClaw 中用于定义周期性任务的配置文件。它的作用类似于给智能体设定一个“心跳节拍”,让它在指定时间自动执行某些动作,比如每日总结、定时提醒、健康检查等。
- 生命周期:Agent 启动时会读取该文件,并根据其中定义的规则创建定时任务。该文件持久存在,你可以随时编辑修改,Agent 会在下次心跳周期生效时应用变更。
核心功能
HEARTBEAT.md 允许你通过简单的 Markdown 列表定义多个定时任务,每个任务包含:
- 触发时间:支持 cron 表达式或自然语言描述(如“每30分钟”、“每天上午9点”)。
- 执行动作:一段自然语言指令,告诉 Agent 要做什么。
示例结构:
1 | # HEARTBEAT.md |
工作原理
- 解析:Agent 启动时读取
HEARTBEAT.md,将每个任务转换为内部的定时触发器。 - 执行:到达指定时间时,Agent 会独立执行该任务的“动作”指令,就像你亲自向它发送了一条消息一样。
- 并发:多个心跳任务可以并发执行,互不干扰。
编写规范
- 使用二级标题(
##)分隔不同的任务。 - 在每个任务块中,使用列表项定义
时间和动作两个属性。时间:支持标准的 cron 表达式(5 个字段:分 时 日 月 周),也支持自然语言短语(如“每小时”、“每5分钟”、“每月1号 08:00”)。动作:任意自然语言指令,Agent 会按照你的描述执行。
- 文件采用 UTF-8 编码,仅支持纯文本 Markdown。
注意事项
- 避免过于频繁:不要设置间隔太短(如每秒)的任务,以免影响系统性能。
- 权限安全:动作指令会以当前 Agent 的权限执行,注意不要写入危险命令(如删除文件)。
- 调试方法:如果某个心跳未执行,可以先检查 cron 表达式是否正确,或查看 Agent 的日志输出(通常在工作区
logs/目录)。 - 动态更新:修改
HEARTBEAT.md后,通常需要重启 Agent 才能生效(部分实现支持热加载,取决于具体版本)。
与其他配置文件的区别
| 文件 | 作用 |
|---|---|
BOOTSTRAP.md |
一次性初始化引导,完成后自动删除 |
HEARTBEAT.md |
定义周期性任务,持久存在 |
SOUL.md / AGENTS.md |
定义智能体的人格、行为边界和角色 |
USER.md |
存储用户偏好和习惯 |
如果你想自定义一个定时任务,但不确定如何编写 cron 表达式,可以告诉我你的需求(比如“每天下午3点提醒我喝水”),我可以帮你生成对应的配置片段。