Install
openclaw skills install @onesfuture/workbuddy-skill-session-callback【仅限 WorkBuddy 桌面版使用】会话回调(Session Callback)——实现"一个会话调起另一个会话"的能力:外部进程、定时任务(cron job)或另一个 agent 会话,向目标会话注入消息,唤醒其 agent 带完整上下文继续处理。适用于 WorkBuddy 桌面版:监控回传后唤醒主会话推进任务、定时任务回调指定会话、异步任务完成后通知会话、多会话协作接力、替代 openclaw 的 sessions_send 机制。当用户在 WorkBuddy 中提到"会话回调"、"唤醒会话"、"session callback"、"会话调起另一个会话"、"cron 唤醒指定会话"、"向会话注入消息"、"主会话收到提醒后推进"、"sessions_send" 时使用本 skill。注意:本技能依赖 WorkBuddy 本地结构(~/.workbuddy/sessions/、projects/*.jsonl、/api/v1/acp/*),不适用于 openclaw 等其他平台。
openclaw skills install @onesfuture/workbuddy-skill-session-callback⚠️ 适用平台:WorkBuddy 桌面版(专用)
本技能仅适用于 WorkBuddy 桌面版(Windows/macOS),依赖 WorkBuddy 特有的本地数据与进程结构:
- 会话注册表
~/.workbuddy/sessions/- 会话索引
~/.workbuddy/app/sessions.json- 转录文件
projects/*.jsonl- 本地 ACP 端点
/api/v1/acp/*(WorkBuddy 官方实现)不适用于:openclaw(用其原生
sessions_send/ cron 机制)、CodeBuddy CLI、或其他 agent 平台。在非 WorkBuddy 环境运行本技能无效。参考配套技能:openclaw 生态请用
cron-callback-session(openclaw 原生注入,技术链路不同)。
本技能具备跨会话消息注入能力,属于高影响操作(向任意会话注入消息并触发其 agent 处理,可能引发工具调用)。
核心原则:
默认边界:仅本地回环、不越权、不读会话外数据。建议加固:目标会话白名单、注入前缀标识、敏感操作要求目标 agent 先征求用户确认。
会话回调 = 让一个会话(或外部进程/cron job)唤醒另一个会话并注入消息,目标 agent 带着完整上下文继续处理。 这是"agent 不需要一直保持活跃"的关键机制:源会话/任务先挂起,等回调注入消息后目标会话被重新触发。
等价于 openclaw 的 sessions_send(agent:main:session-xxx + visibility=agent),WorkBuddy 原生实现,无需 hook 桥接。2026-08-02 实测验证成功(唤醒 + 注入 + 上下文延续全链路)。
~/.workbuddy/sessions/<pid>.json 的 endpoint 字段)session/prompt → dispatchQueuedPrompt → AcpUtils.promptToUserMessage → parseMessagesFromPipeInput → agentService.runDefault()(注入转 user 消息并执行)~/.workbuddy/sessions/*.json,按 lastHeartbeat 降序找目标会话的最新注册endpoint 字段:非空且端口可连 = 会话活python scripts/callback.py <session_id> "要注入的消息" [--workdir <path>]
脚本自动完成:发现 endpoint → connect → initialize → session/load → session/prompt。
或手动调用:
POST {endpoint}/api/v1/acp/connect # → {connectionId, sessionToken}
POST {endpoint}/api/v1/acp (initialize) # → capabilities(确认 loadSession: true)
POST {endpoint}/api/v1/acp (session/load) # params: {sessionId, cwd, mcpServers}
POST {endpoint}/api/v1/acp (session/prompt) # params: {sessionId, cwd, prompt, _meta}
session/prompt 返回 session_info_update(agentPhase: idle) + usage_update(prompt_tokens = 目标会话完整上下文)projects/<workdir>/<conversationId>-*.jsonl,role=user = 注入消息,role=assistant = 目标 agent 响应| 目标会话状态 | 行为 | 落盘时机 |
|---|---|---|
| 空闲(无进行中的 run) | 消息立即 dispatch | 立即落盘 + 立即响应 |
| 忙(正在跑任务) | 消息进队列(isBusyForQueue → dispatchQueuedPrompt) | 延迟落盘,等当前 run 结束 |
用 WorkBuddy 内置 automation 作为调度器(宿主进程调度,独立于任何 agent 回合):
automation_update 工具),rrule 设执行频率注意:nohup / Start-Process 后台进程会随 agent 回合结束被回收,不可靠;内置 automation 是唯一可靠调度。
| 症状 | 原因 | 解法 |
|---|---|---|
| 注入后会话无响应 / 转录无新消息 | 目标会话忙(正在跑任务),消息进队列等待 | 等目标会话空闲;或注入前确认其无进行中的 run |
connect 失败 / connection refused | 目标会话进程已退出,endpoint 端口拒连 | 先在界面重新打开该会话激活进程,再注入 |
| 注入成功但上下文"丢失"(agent 像失忆) | 会话 ID 错位:注入到了错误会话(用错上下文响应) | 注入前做四信号对齐校验(界面窗口/env/索引/转录),确认 target 正确 |
| 自动发现 endpoint 找到的端口拒连 | 注册表有死进程残留,心跳排序命中了旧注册 | 脚本已做"心跳排序 + 连通性探测"自动跳过;或手动 --endpoint 指定活端口 |
Method not found | 方法名写错(如 newSession/loadSession) | 必须用 session/load + session/prompt |
注入消息格式报错 Invalid params | prompt 格式不对 | 必须是 [{type: "text", text: "..."}] 数组 |
| sessionId 用了 pid 导致找不到会话 | 会话 ID 是 UUID,不是进程号 | 从 app/sessions.json 取 conversationId(UUID) |
本技能是高影响操作,使用完毕后建议收敛回默认状态:
automation_update 删除);脚本不留后台进程callback.py 输出的日志(如运行目录下的 log 文件)用完可删,避免残留敏感信息(会话 ID、消息内容)原则:跨会话注入是"按需开启、用完即收"的能力,不应作为长期常开的通道。
scripts/callback.py — 一键回调脚本(自动发现 endpoint → connect → initialize → session/load → session/prompt)references/api_reference.md — ACP 协议详细参考(方法、参数、事件类型、队列机制)本 skill 基于公开协议,非逆向工程:
session/load、session/prompt、initialize 等方法均为该协议的公开定义/api/v1/acp/*(官方 HTTP API 文档有收录)——本 skill 是"基于公开协议调用官方端点",性质等同使用公开 API 写客户端兼容性风险(如实标注):
~/.workbuddy/sessions/、projects/*.jsonl),版本升级可能调整使用边界:本 skill 仅调用本地回环端点(127.0.0.1),不涉及云端接口、不做越权操作、不读取会话内容之外的数据。
发现 bug 或有改进建议?请开 GitHub Issue。