问题描述

前天下发任务,今天问 Agent 进展,Agent 对此一无所知。

根本原因:OpenClaw Agent 默认是无状态的。每个 Session 都是全新开始,跨 Session 的记忆需要显式管理。任务信息如果没有写入磁盘记忆文件,就只存在于当次 Session 的 transcript 里,Session 结束后对新 Session 不可见。


断层的五个环节

1. Agent 没有主动写入记忆

Agent 接受任务时,如果没有把”任务描述 + 开始时间 + 当前状态”写入 memory/YYYY-MM-DD.md 或 MEMORY.md,信息就只存在于 transcript。

2. Memory Flush 未触发

Compaction 前会有一个静默 turn 提醒 Agent 保存重要上下文,但只在对话接近 context limit 时才触发。短对话不会触发 Compaction,也就不会触发 flush。

3. Dreaming 默认关闭

即使 Agent 写了日记,Dreaming(把短期信号晋升到 MEMORY.md)默认关闭。前天的日记不会自动提升为长期记忆。

4. 日记文件加载窗口只有两天

memory/YYYY-MM-DD.md 只自动加载今天和昨天的文件。前天(两天前)的日记即使写了,也不会被注入新 Session 的上下文。

5. Commitments 默认关闭

Commitments 机制专门处理”说了要做某事、之后跟进”的场景,但默认关闭。即使开启,也只是通过 heartbeat 触发一次自然跟进,不是持续的任务状态追踪。


解决方案

方案 A:强制 Agent 写入 MEMORY.md(最简单)

下发任务时明确要求:

帮我做 XX 任务,并把任务状态记录到 MEMORY.md,包括:任务描述、开始时间、当前进展。

每次有进展时也要求更新:

更新 MEMORY.md 中 XX 任务的进展状态。

优点:立即生效,无需配置。 缺点:依赖用户主动提醒,容易遗漏。


方案 B:开启 Dreaming + Active Memory(推荐)

{
  "plugins": {
    "entries": {
      "memory-core": {
        "config": {
          "dreaming": { "enabled": true }
        }
      },
      "active-memory": {
        "enabled": true,
        "config": {
          "enabled": true,
          "agents": ["main"],
          "queryMode": "recent"
        }
      }
    }
  }
}
  • Dreaming:每天凌晨 3 点自动把重要短期信号晋升到 MEMORY.md
  • Active Memory:每次对话前主动搜索相关记忆注入上下文,即使 Agent 没有主动搜索也能感知到任务状态

优点:自动化,减少人工干预。 缺点:Dreaming 有评分门控,不保证所有任务信息都晋升;Active Memory 增加每次对话的延迟(最大 120s)。


方案 C:Sub-agent + Task Ledger(最可靠)

对于需要跨天追踪的长任务,用 sessions_spawn 派生后台 sub-agent 执行。任务状态持久化在 task ledger 里,不依赖记忆文件。

# 下发任务时
请用 sessions_spawn 派生一个后台任务来执行 XX,这样我可以随时查看进展。

查看任务状态:

openclaw tasks list                  # 列出所有后台任务
openclaw tasks show <runId>          # 查看具体任务状态
openclaw tasks show <taskName>       # 按名称查看(需设置 taskName 参数)

优点:任务状态完全持久化,不依赖记忆机制,最可靠。 缺点:需要 Agent 支持 sessions_spawn 工具(coding/full profile 默认有,messaging profile 需手动添加);任务完成后 ledger 会被清理。


方案 D:开启 Commitments(辅助)

openclaw config set commitments.enabled true
openclaw config set commitments.maxPerDay 5

开启后,Agent 接受任务时会自动推断”需要跟进”,通过 heartbeat 在适当时候主动回来汇报。

适用场景:任务周期短(当天或次日),需要 Agent 主动跟进。 不适用:长期任务状态追踪,或需要精确查询进展的场景。


方案对比

方案可靠性配置成本适用场景
A. 强制写 MEMORY.md中(依赖人工)无临时任务,不想改配置
B. Dreaming + Active Memory中高低日常对话任务,希望自动化
C. Sub-agent + Task Ledger高中长任务、需要精确状态追踪
D. Commitments低(仅跟进提醒)低短期跟进,辅助使用

诊断命令

# 查看记忆文件是否有任务记录
openclaw memory search "任务关键词"
 
# 查看后台任务状态
openclaw tasks list
openclaw tasks list --status running
 
# 查看 Commitments 状态
openclaw commitments --all
 
# 查看 Dreaming 状态
openclaw memory status --deep

相关页面

  • memory — 记忆机制总览(文件结构、加载规则)
  • dreaming — Dreaming 后台巩固(短期→长期晋升)
  • active-memory — Active Memory(对话前主动注入记忆)
  • commitments — Commitments(推断式跟进记忆)
  • concepts/tool-subagents — Sub-agents(后台任务派生与追踪)
  • concepts/cli-tasks — openclaw tasks(任务状态查看命令)
  • session — Session 生命周期与隔离规则