FaiChou/opencode-dispatch

★ 0Forks 0ShellGitHub ↗Compare

README

OpenCode Dispatch Notifications

这个仓库现在采用最小化方案:通知不依赖任何 OpenCode 插件、hook 或额外脚本,全部由 dispatch-opencode.sh 在 opencode run 结束后直接完成。

这个项目做了什么

  • 用 tmux 异步启动 opencode run
  • 使用固定二进制 /root/.opencode/bin/opencode
  • 捕获 opencode run 的完整终端输出
  • 直接调用 openclaw message send 发送通知
  • 只保留两个运行产物:task-output.txt 和 dispatch.log
  • 所有运行产物默认写到 /root/.openclaw/workspace/opencode-dispatch/

核心思路

这个工作流本来就是 one-shot、tmux、异步收尾场景,所以最稳定的方式就是让 dispatch 脚本自己承担全部职责。

执行顺序只有这些:

  1. dispatch-opencode.sh 调用 /root/.opencode/bin/opencode run
  2. 脚本捕获全部 stdout/stderr 到 /root/.openclaw/workspace/opencode-dispatch/task-output.txt
  3. 脚本生成摘要
  4. 脚本直接调用 openclaw message send
  5. 脚本再调用一次 openclaw message send --media 发送 task-output.txt
  6. 脚本把全过程写进 /root/.openclaw/workspace/opencode-dispatch/dispatch.log

目录说明

路径 作用
scripts/dispatch-opencode.sh 给 openclaw skill 调用的正式脚本
SKILL.md openclaw skill 说明,要求通过 tmux 调度

运行产物

脚本只会写这两个文件到 /root/.openclaw/workspace/opencode-dispatch/:

  • task-output.txt:完整终端输出;固定文件名,每次新任务都会覆盖旧内容
  • dispatch.log:dispatch 自己的日志;固定文件名,每次新任务都会覆盖旧内容,并记录本次任务名

前置依赖

运行这个流程前,需要确保:

  • tmux 已安装
  • /root/.opencode/bin/opencode 存在且可执行
  • python3 已安装
  • openclaw 可执行,默认路径为 OPENCLAW_BIN=/usr/bin/openclaw

如果你的 openclaw 不在默认位置,可以覆盖:

export OPENCLAW_BIN="/your/path/to/openclaw"

快速开始

默认发 Feishu:

scripts/dispatch-opencode.sh \
  --prompt "阅读代码并修复测试失败" \
  --name "fix-tests" \
  --target "your-feishu-target" \
  --channel feishu \
  --workdir "/path/to/project"

改发 Telegram:

scripts/dispatch-opencode.sh \
  --prompt "实现一个 one-shot 命令" \
  --name "opencode-task" \
  --target "-1001234567890" \
  --channel telegram \
  --workdir "/path/to/project"

dispatch-opencode.sh 参数

参数 说明
-p, --prompt 任务提示,必填
-n, --name 任务名,用于日志和通知
-g, --target 通知目标,Feishu 或 Telegram 对应的 target
-c, --channel 通知渠道,默认 feishu,可选 telegram
-w, --workdir 执行 opencode run 的工作目录
-m, --model 指定模型
-a, --agent 指定 agent
--attach 连接已有 opencode serve 实例
--title 指定 session title
--continue 继续最近一次 session

通知内容

最终通知会包含:

  • 任务名
  • 退出码
  • 摘要
  • 清洗过 ANSI 控制字符后的 output 摘要片段

脚本会先去掉终端颜色控制字符,避免消息里出现 [ 0m 这类残留;同时只保留前几个命令块和关键输出,尽量把有限的消息长度留给真正有用的信息。文本消息发出后,还会继续把完整的 task-output.txt 作为 --media 附件发送。

OpenClaw Skill

仓库里提供给 openclaw 使用的 skill:

  • SKILL.md
  • scripts/dispatch-opencode.sh

这个 skill 的约束是:

  • dispatch 必须在 tmux 里启动
  • dispatch 脚本从 openclaw workspace 执行
  • --workdir 必须指向目标项目根目录
  • opencode 固定使用 /root/.opencode/bin/opencode
  • 运行产物默认写到 /root/.openclaw/workspace/opencode-dispatch/

典型调用形态:

tmux new-session -d -s "opencode-fix-tests" \
  "$OPENCLAW_WORKSPACE/.openclaw/skills/opencode-dispatch/scripts/dispatch-opencode.sh --prompt '阅读代码并修复测试失败' --name 'fix-tests' --target 'your-feishu-target' --channel feishu --workdir '/path/to/project'"

排查建议

如果没有收到通知,可以依次检查:

  • /root/.opencode/bin/opencode 是否存在且可执行
  • opencode run 是否正常结束
  • /root/.openclaw/workspace/opencode-dispatch/task-output.txt 是否已经生成
  • /root/.openclaw/workspace/opencode-dispatch/dispatch.log 是否记录了发送结果
  • OPENCLAW_BIN 是否正确
  • target 是否传入

Issues