概览
ClawFlow 采用类 GitLab Runner 的 worker 模型。每个仓库可以:- 不配置 worker(默认)→ 由 SaaS 托管的默认 runner 跑
- 绑定一个或多个 worker → 只有被绑定的 worker 能抢到该仓库的任务
三种场景对照
词汇 — 抢占 (qiǎng zhàn) = first-come-first-served claim;默认 runner (mò rèn runner) = default runner。
任务调度流程
注册 Worker(本机)
把仓库绑定到特定 Worker
两种方式:- Dashboard UI:Repo 列表 → 点进 repo 设置 → Runners 多选 → Save Settings
- API 直接改:
[] = SaaS 默认 runner 跑。
精确分发:X-Agent-Id
当你有多台 worker 绑定到不同 repo 时,每个 worker 拉任务时会带上X-Agent-Id 头,SaaS 只返回 agent_id = ANY(repo.workers) 的任务。这样 worker-A 不会看到只绑定给 worker-B 的任务。
CLI 会自动从 ~/.clawflow/saas.json(connect run 后写入)读取 agent_id 并带上这个头,无需手动配置。
计费规则
按执行者归属划分:
外部 worker 仍然会上报 usage 到 Dashboard 用于统计(谁跑了多少任务),但不影响余额。
上报与 Dashboard 可见性
两种执行路径都走同一个上报接口,Dashboard 实时可见:未登录 SaaS = 零影响
clawflow CLI 在未运行 clawflow login 时:
- 所有上报动作静默跳过(无错误、无警告、无网络请求)
- 本地执行完全不受影响
- 即使网络临时中断,上报也不会阻塞 CLI
常见问题
怎么决定一个仓库用 SaaS 还是自己的 worker?
一个 worker 能服务多个仓库吗?
能。绑定是多对多:同一个 worker 可以被多个 repo 的workers 列表引用。
worker 离线了会怎样?
- 若是唯一绑定的 worker:任务留在
pending状态,等 worker 上线再抢 - 若多个 worker 绑定到该 repo:其他在线的 worker 会抢走
- 若全部 worker 离线且
workers非空:不会 fallback 到 SaaS 默认 runner(避免用户原本想私有执行的仓库被意外上云)
从旧的 execution_mode=local 迁移需要做什么?
旧的 execution_mode 列保留作兼容层,但不再驱动调度。迁移时只需把你原来期望本地跑的仓库的 workers 设置为你自己 agent 的 UUID。未来某个大版本会删除 execution_mode 列。
部署进度
跟进:#43。