AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜

系列第23篇 | 当你以为写对了文件,但Agent根本不读

背景

今天下午,我花了大量时间修改AGENTS.md,期望agent能按步骤执行任务。但agent始终不按指令执行------读inbox、分析文件、做各种事情,就是不按我写的步骤来。

最后发现:agent读的是HEARTBEAT.md,根本没读AGENTS.md。

问题1:AGENTS.md写了但没用

现象

我写了详细的AGENTS.md,包含6个步骤:

  1. 读取inbox JSON
  2. 读取任务MD
  3. 修改代码
  4. 执行deploy.sh
  5. 执行done.sh

但agent执行时完全不按这些步骤。它自己决定读什么文件、做什么操作。

原因

openclaw的文件加载机制:

  • HEARTBEAT.md:agent每次heartbeat都会读取
  • AGENTS.md:agent不一定读取(取决于openclaw配置)

我一直在修改AGENTS.md,但agent根本没读它。它读的是HEARTBEAT.md。

修复

把正确的流程写到HEARTBEAT.md中,而不是AGENTS.md。

bash 复制代码
# 小虾的HEARTBEAT.md
# 第一步:读取wakeup消息中指定的inbox文件
# 第二步:读取任务MD
# 第三步:按MD要求修改代码
# 第四步:打包部署
# 第五步:完成回复

问题2:inbox JSON没有steps字段

现象

agent读取了inbox JSON,但不知道要做什么。JSON中只有task_id和content,没有执行步骤。

原因

send_task.py生成的inbox JSON没有steps字段。agent不知道要执行什么命令。

修复

在inbox JSON中添加steps字段:

json 复制代码
{
  "task_id": "DEV-20260724-001",
  "content": "修复im-chat.html左侧菜单缺失",
  "steps": [
    "1. 读取任务MD: cat /vol1/1000/workspace/claw-sync/task/DEV-20260724-001.md",
    "2. 修改代码",
    "3. 打包部署: bash /vol1/1000/workspace/scripts/send_Check/deploy.sh",
    "4. 完成回复: bash /vol1/1000/workspace/scripts/send_Check/done.sh main DEV-20260724-001 \"开发完成\""
  ]
}

问题3:wakeup消息没有指定文件路径

现象

agent收到wakeup消息后,扫描整个inbox目录,读取所有文件,包括旧文件。

原因

wakeup消息只说"请处理任务",没有指定读取哪个文件。

修复

wakeup消息指定具体文件路径:

python 复制代码
wake_agent('小虾', f'请读取文件 {inbox_file_path},按steps字段的步骤执行。')

问题4:ws_server的task_db导入问题

现象

ws_server收到消息后,报错:cannot access local variable 'task_db'

原因

task_db在函数内部导入,但变量作用域问题导致无法访问。

修复

在文件开头导入task_db:

python 复制代码
import task_db

问题5:清理RETEST代码引发连环语法错误

现象

清理RETEST代码后,format_report.py和auto_pipeline.py出现大量缩进错误。

原因

RETEST清理删除了for循环和if语句,但留下了孤立的代码块。

修复

逐个修复缩进错误,添加continue或pass。

问题6:自动复核没有触发

现象

小牛测试完成后,没有自动调用review.py复核。

原因

dispatch_after_test只发送通知,没有调用review.py。

修复

在dispatch_after_test中添加review.py调用:

python 复制代码
# 测试通过→自动复核(调用review.py)
result = subprocess.run(['python3', 'review.py', task_id], 
                      capture_output=True, text=True, timeout=60)

问题7:feishu_notify通知内容不一致

现象

一个通知说"✅ 任务 xxx 完成",另一个说"请读取文件 xxx,按steps字段的步骤执行"。

原因

两个不同的通知路径:

  • done.sh→ws_notify→ws_server→飞书通知
  • check_and_retry→wake_agent→openclaw agent→飞书通知

修复

统一通知格式,根据sender显示不同的内容。

问题8:报告中混入通知消息

现象

统筹报告前出现📤和✅通知消息。

原因

feishu_notify的print输出到stdout,混入了报告。

修复

将print输出到stderr:

python 复制代码
print(f"📤 [{source}] {message[:100]}", file=sys.stderr)

经验总结

  1. 文件加载机制要确认:openclaw读HEARTBEAT.md不读AGENTS.md,写错文件等于白写
  2. inbox JSON要包含steps:agent需要明确的执行步骤
  3. wakeup消息要指定文件路径:避免agent扫描整个目录
  4. 清理代码要谨慎:删除RETEST时要检查语法完整性
  5. 通知格式要统一:不同路径的通知内容要一致
  6. print输出要分清楚:报告内容用stdout,调试信息用stderr
  7. 自动复核要真正调用review.py:不能只发通知
相关推荐
听风吹等浪起20 分钟前
第30章:MobileNetV3全家桶实现MRI脑肿瘤四分类(含Streamlit网页推理+Mermaid结构图)
人工智能·分类·数据挖掘
如若12334 分钟前
TRACER 论文解读与复现:面向 ICU 长时程患者监测的多模态 Harness 架构、时序证据建模与工具增强推理
人工智能·深度学习·计算机视觉
2401_891409262 小时前
量化数据13:港股分钟K线、Level2逐笔Tick、十档盘口和港股通历史数据的批量提取
数据库
深蓝AI3 小时前
无头浏览器不必从 Chrome 改:Lightpanda 用 Zig 从零造,100 个页面只占 123MB 内存
人工智能·程序员
奈落245 小时前
AI辅助的另一面:从2026年国际AI安全报告的“故障”清单到国内专家的可靠性短板,自主行动的Agent为什么更难及时干预
人工智能·安全·agent·本地部署·ai 办公
火山引擎开发者社区6 小时前
eMudhra 证书失陷:容器用户最容易忽略的镜像信任链漏洞
人工智能
LabVIEW开发7 小时前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
飞猫的边缘AI8 小时前
英特尔量子生意
人工智能·量子计算·边缘ai
深蓝AI8 小时前
桌面 Agent 缺的不是视觉:Vercel 开源 agent-desktop,用无障碍树 ref 替代截图坐标
人工智能·程序员
镜子AI8 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化