为什么需要目标管理
OpenClaw 的 cron、子代理、长耗时 exec 任务很多都是"发射后不管"。任务挂了、跑到一半卡住、或者做完了你却不知道——这些问题靠人肉记不现实。
目标管理三件套就是给任务装一个持久化的完成状态:
create_goal:建一个目标,写明要达成什么。
get_goal:随时查当前状态、token 消耗、完成与否。
update_goal:把状态改成complete或blocked,附说明。
注意:目标只在实际有用户或系统明确请求时才建。它不是用来代替 todo 清单的,而是长任务对外可见的"进度招牌"。
create_goal:开干前先立旗
参数很简单:
| 参数 | 说明 |
|------|------|
| objective | 目标描述,必填,要具体可验收 |
| token_budget | 可选,给目标设 token 上限 |
示例(在 OpenClaw 工具调用语境):
create_goal({
objective: "把 zyker.cn 的 6 篇文章生成并发布上线,含选题去重与首页重建",
token_budget: 20000
})
建完之后,这个目标会挂在该会话旁边,你和 AI 都能看到"进行中"。
关键行为
- 一个会话同时只能有一个活跃目标:重复
create_goal会失败,先update_goal(status="complete")收尾再开新的。
- token_budget 是软约束:超了不会硬停,但会在状态里体现,方便你判断"是不是烧太多了"。
- 目标状态独立于任务本身——即使 AI 中途上下文重置,目标记录还在。
get_goal:随时回看进度
不需要参数,返回当前目标的:
status:complete/blocked/ 进行中
objective:原始目标描述
- token 用量统计
- 最近一次更新说明
示例:
get_goal({})
实战里常配合 session_status 一起用——前者看"任务做没做完",后者看"模型/用量/时间"。
update_goal:收尾或告警
| 参数 | 说明 |
|------|------|
| status | complete 或 blocked,必填其一 |
| note | 短状态说明,可选但强烈建议写 |
示例:
update_goal({
status: "complete",
note: "6 篇文章已生成并运行 sync_site.py 上线,首页与 sitemap 已重建"
})
blocked 的正确用法
连续 3 个以上目标轮次都卡在同一个阻塞点上,才标 blocked——普通的中途困难不算。标了之后,AI 不会再假装"快好了",而是如实告诉你卡在哪。
标准工作流
- 接到大活(如"生成 6 篇文章并发布")→
create_goal立旗。
- 执行中途 → 需要看进度就
get_goal,不用人肉问"做没做"。
- 做完了 →
update_goal(status="complete", note="..."),明确交代产出。
- 真卡住(缺凭据、缺权限)→
update_goal(status="blocked", note="缺 XX")。
踩坑与反模式
- ❌ 把 goal 当 todo 列表用:它是对外的完成招牌,不是内部 checklist。内部步骤用 progress_card 或普通列表即可。
- ❌ 做完不收尾:目标一直"进行中",下次会话看到会误判没做完。
- ❌ 普通难度也标 blocked:只有真正卡住(等外部输入/权限)才用,别拿它当"还没搞完"的同义词。
- ✅ 大活必建目标:凡是"生成 N 篇 / 部署一套 / 跑通一个流程"这种多步任务,开局立旗最省心。
和其他工具的分工
create_goal/update_goal:任务级完成状态(对外可见)。
progress_card:步骤级进度条(更细,适合长任务的过程展示)。
create_goal偏"结果",progress_card偏"过程",两者可叠加用。
一句话总结
长任务最怕"做没做完说不清"。开局 create_goal 立旗,中途 get_goal 回看,收尾 update_goal 交代——你的 AI 搭档跑大活时,你随时知道它在哪。
扫码关注公众号,获取更多 OpenClaw 实操技巧:
