零依赖 GUI:把 OpenCode CLI 变成可视化 AI 任务流水线

为什么写这个工具

最近在用 OpenCode 跑 AI 编码任务,很快遇到一个痛点:opencode run 一次只能跑一个 prompt,想做"先 plan 再 build"这种多步流水线,或者同时给几个项目分头派活,就得自己开一堆终端窗口手动串。

写 shell 脚本编排也能干,但看不到每个任务的实时日志、失败了不知道是哪一步、想停还得挨个找 PID。于是我用 Python 标准库撸了一个 tkinter GUI,把 opencode run 包成可视化任务队列,开源在 GitHub:

https://github.com/YiShan-X/opencode-task-orchestrator

零依赖 ------只用标准库,Python 3.8+ 直接跑,不需要 pip install 任何东西。

核心功能

  • 任务队列 GUI --- 新增 / 编辑 / 排序 / 单击启用切换;每个任务独立的工作目录、提示词、Agent(plan/build)和模型(模型列表自动从 opencode models 拉取)
  • 最多 6 路并发 --- 1 路就是顺序执行,共享同一个任务队列
  • 失败策略 --- 可选「某任务失败后中止后续任务」
  • 假成功防护 --- 三道闸门,见下文详解
  • 断点续跑 --- 状态实时持久化,重跑自动跳过已成功任务,中途关窗口也不丢进度
  • 定时启动 --- 每天定时 / 间隔循环(1-1440 分钟)/ 一次性定时三种模式,到点等同点击「开始执行」
  • 右键批量操作 --- Shift/Ctrl 多选后批量改状态、批量切模型
  • 日志分 tab --- 「全部」汇总 + 每个任务独立 tab,日志跨多次运行持续追加
  • 秒级停止 --- taskkill /T 杀整个进程树,看门狗保证 UI 不卡死
  • 安全退出 --- 运行中关窗需确认,退出前自动停止所有任务并保存状态

亮点:假成功防护

用 AI 跑自动化任务最烦的不是失败,是假成功------进程退出码 0,但实际啥也没干,或者 AI 反问一句"是否按此方案实施?"就停了。这个工具内置三道闸门:

  1. 等待确认语句检测 --- 扫描输出末尾,匹配"是否按此方案实施?""要不要我继续?"这类反问模式,命中即判失败
  2. expect_change 目录快照对比 --- 任务执行前后对目录做文件快照,一个字节都没变就判假成功
  3. verify_cmd 验收命令 --- 任务退出码 0 之后再跑一条用户自定义命令(比如 python -m py_compile main.py),非 0 判失败

三道闸门都可以按任务粒度开关,默认全开。

快速开始

bash 复制代码
# 前提:Python 3.8+,且 opencode CLI 在 PATH 中
python opencode_orchestrator.py
  1. 新增任务 --- 选项目目录、填提示词,可选 Agent 和模型
  2. 设置 并发数 (1-6)、失败后中止跳过已完成 开关
  3. ▶ 开始执行 ,在 tab 里看各任务日志;■ 停止 立即终止全部进程
  4. 中断后重开,已成功的任务自动跳过;点 重置状态 全部重来

配置长这样

任务列表持久化为 JSON,可以直接手编也可以 GUI 操作:

json 复制代码
{
  "concurrency": 2,
  "stop_on_fail": true,
  "skip_done": true,
  "schedule": {
    "enabled": true,
    "mode": "daily",
    "time": "08:00",
    "fired": false
  },
  "tasks": [
    {
      "path": "D:/projects/app",
      "prompt": "分析项目结构,输出技术方案到 plan.md",
      "agent": "plan",
      "model": "deepseek-api/deepseek-v4-flash",
      "enabled": true
    },
    {
      "path": "D:/projects/app",
      "prompt": "按照 plan.md 中的方案执行重构",
      "agent": "build",
      "verify_cmd": "python -m py_compile main.py",
      "expect_change": true,
      "enabled": true
    }
  ]
}

任务间传上下文

每个 opencode run 都是独立会话,任务之间通过中间文件 传递产物:前一个任务输出 plan.md,后一个任务的提示词引用它------这就是 OpenCode 官方推荐的 plan → build 串联模式,GUI 只是把它可视化、可重跑化。

定时启动

支持三种模式,设置随配置持久化,重启自动恢复:

  • 每天定时 --- 到点触发,错过不补跑(适合上班前自动开跑)
  • 间隔循环 --- 1-1440 分钟,适合持续集成式巡检
  • 一次性定时 --- 指定日期时间,fire 一次后自动失效

一些实现细节

整个工具是单文件 tkinter 应用,约 1000 行,零依赖。几个值得说的点:

  • 线程模型 --- 工作线程绝不直接操作 tkinter 控件,所有 UI 更新走 queue.Queue,主线程每 100ms 排空一次。这是 tkinter 多线程的标准做法,避免了一堆诡异的竞态崩溃
  • 进程树终止 --- Windows 下用 taskkill /F /T /PID 杀整棵树,配合 CREATE_NO_WINDOW 避免弹控制台黑窗
  • 子进程输出解码 --- 统一 encoding="utf-8", errors="replace",遇到非 UTF-8 输出优雅降级而不是崩溃
  • 状态机约束 --- Task.__init__ 会把持久化的 status: "running" 强制归一化为 "pending"------配置文件不可能复活"执行中"状态,避免上次异常退出留下的脏状态误导 UI

适合谁

  • 已经在用 OpenCode CLI,想批量/定时跑任务的人
  • 想做"AI 流水线"但又不想引入 Airflow / Dagster 这种大家伙的人
  • 需要把 AI 编码任务接入 CI 之前,先在本机手动验证流程的人

项目地址

GitHub: https://github.com/YiShan-X/opencode-task-orchestrator

MIT 协议,欢迎 Star / Issue / PR。如果你也在用 OpenCode 做自动化,不妨试试,有问题随时提 Issue。

相关推荐
de之梦-御风1 小时前
【工业自动化平台】 工程设计-依赖注入控制反转(2)
架构·自动化·.net
long3161 小时前
Codex 团队开发入门到精通学习资料
ai·团队开发·个人开发·ai编程
孙启超1 小时前
【AI应用开发】Agent 无限 loop(反复调用同一个工具)如何规避?
人工智能·python·算法·llm·agent·loop·ai应用开发
银-豆豆1 小时前
Python爬虫
开发语言·爬虫·python
香吧香2 小时前
Python 基础语法总结
python
wangruofeng2 小时前
从 QQ 机器人到多租户 Agent 平台,LangBot 用一条流水线接住了 17 个 IM
aigc·agent·ai编程
IT小盘2 小时前
10-使用Reranker提升RAG回答准确率
人工智能·python
卷无止境2 小时前
Python 装饰器:给函数穿件"外套",到底难在哪?
后端·python
大地之灯2 小时前
从零做一个自己的 CLI
python·agent