Install
openclaw skills install @colinxu1-sys/nonblocking-tasks三层机制非阻塞任务管理器 — 主会话永远空闲 + 新消息立即响应 + 主动推送结果。适用于所有通道、所有用户的任务管理,确保主会话不被任何操作阻塞,每条消息都能被即时响应。
openclaw skills install @colinxu1-sys/nonblocking-tasks作者:荷叶 & 灵溪 仓库:https://github.com/colinxu1-sys/nonblocking-tasks
安装此技能后,AI 的主会话永远空闲,不管后台跑什么任务都能秒回新消息,所有操作一律 spawn 子 agent 处理,不会因任何任务而被阻塞。
安装后首次对话自动触发配置。
当用户发送任何消息时,激活此技能并检查配置状态。如果 active_tasks.md 不存在或配置未完成,立即执行安装后配置。
安装此技能后,AI 在收到用户的第一条消息时,自动执行以下配置步骤:
<workspace>/active_tasks.md 是否存在,不存在则创建<workspace>/HEARTBEAT.md 是否存在,不存在则创建<workspace>/AGENTS.md 中查找「后台任务执行规范(非阻塞原则)」章节,用三层机制替换<workspace>/MEMORY.md 中查找「非阻塞长任务处理规范」章节,用三层机制替换配置完成后通知用户:"三层机制非阻塞任务管理器配置完成,已生效。"
所有通道、所有用户、所有任务统一执行以下三层机制。
核心原则:默认全部 spawn,主会话只做即时响应。
主会话唯一职责:
所有读取操作,全部 spawn:
原因: 读本身也可能很慢。AI会误以为自己读得快,结果花了很长时间。荷叶的真实案例:让它读聊天记录,它以为自己读得快,结果花了很久才回来。
判断标准:不用判断时间长短。所有读取操作,一律 spawn。
主会话只做两件事:接收消息 → 立即响应。
任何涉及写入的操作,全部 spawn:
绝对禁止在主会话里执行的操作(无论时间长短):
原因: 网络不稳定时,这些操作可能阻塞主会话数分钟,导致用户发消息 AI 无响应。这是执行纪律问题,不是时间判断问题。任何网络请求、git 操作、可能超时的命令,一律 spawn,不在主会话里执行。
第二层:新消息触发立即评估
规则:收到新消息时,无论主会话当前在做什么,立即中断评估这条消息。
评估流程:
核心改变: 不再排队等待。新消息来了立即处理,不需要等上一个任务完成。
规则:子 agent 完成后,不等用户来问,立即主动把结果发给用户。
执行标准:
禁止的行为:
核心:站在B的角度接任务,不是站在A的角度要求A怎么做。
B(AI)接到任务时,根据任务性质主动向用户确认关键信息:
示例话术:
关键:让用户清晰知道什么时候能拿到什么,同时我执行也有方向。
核心:执行前先说计划,让用户知道我要做什么。
接任务后,不要直接埋头做,而是先告诉用户:
"我要做三步:①… ②… ③…,完成后通知你。"
然后开始执行,执行过程中按计划节点汇报进度(不用等结果出来,每完成一步就可以简短同步)。
为什么这个重要:
判断标准(是否需要同步计划):
示例:
每次 spawn 子 agent 时,写入 <workspace>/active_tasks.md:
## 任务名
开始时间:YYYY-MM-DD HH:MM
状态:进行中
已通知:否
重试次数:0
备注:任务描述
子 agent 完成后:
通知失败重试机制(核心修复):
子 agent 通知用户失败时(如 WeCom/飞书 API 超时):
读取 active_tasks.md,检查所有任务状态:
状态:已关闭 即可开启或关闭通知失败补救检查(每次心跳必执行):
收到连续多条消息时:
禁止:没有上下文的"处理完成"碎片回复。
安装此技能时,自动执行以下步骤:
写入/更新 <workspace>/active_tasks.md:
# 进行中任务追踪
<!-- 格式:
## 任务名
开始时间:YYYY-MM-DD HH:MM
状态:进行中 / 已完成
备注:任务描述
-->
写入/更新 <workspace>/HEARTBEAT.md:
# HEARTBEAT.md
## 每次心跳必须执行:长任务进度检查 + 通知失败补救
读取 `<workspace>/active_tasks.md`,检查所有任务状态。
**夜间(23:00-06:00):**
回复 HEARTBEAT_OK(不打扰)
**日间(06:00-23:00),进行中任务超过 30 分钟未完成的:**
自己主动去查状态(检查文件或 spawn 查证)
确认完成了 → 自动更新 active_tasks.md 为「已完成」→ 立即通知用户
确认真的卡住了 → 才通知用户提供帮助
任务还在正常跑(<30 分钟)→ 回复 HEARTBEAT_OK
**通知失败补救检查(每次心跳必执行):**
扫描 active_tasks 里所有「已通知=否」的任务:
- 重试次数 < 3 → 重新发起通知,重试次数+1
- 重试次数 >= 3 → 标记「已通知=失败」,进入持续重试模式
- 对「已通知=失败」的任务 → 每隔 30 分钟重新尝试通知,直到成功
**核心原则:只有真正需要用户做决定的事才通知用户。**
如果 Cron 任务 "nonblocking-task-monitor" 不存在,则创建:
*/2 * * * *(每 2 分钟)在 AGENTS.md 的「后台任务执行规范(非阻塞原则)」章节中,用上述三层机制完整替换旧内容。
在 MEMORY.md 的「非阻塞长任务处理规范」章节中,用上述三层机制完整替换旧内容。
除自动召回外,当用户主动提及跨通道历史时,立即执行按需召回。
触发条件: 用户提及另一个通道的讨论内容或任务时
识别逻辑:
执行流程:
~/.openclaw/memory-tdai/conversations/YYYY-MM-DD.jsonl此技能可发布到 GitHub 公开仓库,用户通过 clawhub 或 openclaw skills install 安装使用。