1. 前置条件
- clawflow CLI ≥ v0.15.0
- Claude Code 本地可用(worker 会调用
claude -p "ClawFlow run"执行修复) - 一个拥有管理员权限的 GitHub / GitLab 仓库(要能给 Issue 打标签、接收 Webhook)
2. 账号与登录
2.1 浏览器登录(用于仪表盘)
直接访问 https://clawflow.daboluo.cc ,右上角选 Login with GitHub / Login with GitLab。 首次登录系统会自动为你创建一个 Organization,你是 Owner。2.2 CLI 登录(用于 worker)
- CLI 启动一个本地回调端口(
http://localhost:PORT/callback) - 浏览器打开 SaaS OAuth 页面,完成 GitHub 授权
- SaaS 把一次性
code发回本地端口 - CLI 用
code换 JWT,再用 JWT 调用/api/v1/orgs/current/worker-token获取 worker token - 最终写入
~/.clawflow/config/worker.yaml
3. worker.yaml 详解
| 字段 | 含义 |
|---|---|
saas_url | 你接入的 SaaS 根地址 |
worker_token | 以 cfw_ 开头的机器凭据;/api/v1/worker/tasks 等接口用 Authorization: Bearer cfw_... |
4. 启动 worker
- 每
poll-interval秒GET /api/v1/worker/tasks - 发现 pending 任务后
POST /api/v1/worker/tasks/{id}/claim - 把任务 payload 作为 stdin 喂给
claude -p "ClawFlow run" - 成功 →
POST .../complete带{pr_url};失败 →POST .../fail带{reason}
tmux / screen / systemd 守护。
5. 添加仓库
5.1 仪表盘操作
- https://clawflow.daboluo.cc/dashboard → Repos → Add Repo
- 填写
owner/name、选平台(GitHub / GitLab)、粘贴仓库访问 token- GitHub:Personal Access Token(classic),勾选
repo+admin:repo_hook - GitLab:Personal Access Token,勾选
api
- GitHub:Personal Access Token(classic),勾选
- 保存。Token 以 AES-256-GCM 加密入库,不明文保存。
- 点击 Test Connection 确认连通性。
5.2 配置 Webhook
在 GitHub 仓库 Settings → Webhooks → Add webhook:- Payload URL:
https://clawflow.daboluo.cc/api/v1/webhooks/github - Content type:
application/json - Secret: 仪表盘添加仓库时复制的 webhook secret
- Events: 至少勾选 Issues(带 labeled action)
/api/v1/webhooks/gitlab,方式类似。
6. 触发一次流水线
- 在你添加的仓库里选一个 Issue
- 打上标签
ready-for-agent(首次使用若标签不存在,仪表盘添加仓库时会自动创建) - 回到仪表盘 Pipeline Runs 页,几秒内应看到一条 pending 记录
- 本地 worker 在下次轮询时会认领并执行
- 成功后 Issue 标签变为
agent-evaluated,自动提交一个 PR
标签状态机
| 标签 | 含义 | 是否扣 credits |
|---|---|---|
ready-for-agent | 用户触发,待评估 | 否 |
agent-evaluated | 评估通过 + PR 已提交 | ✅ 成功时扣 |
agent-failed | 执行失败(构建 / 测试 / 提交错误) | 否 |
agent-skipped | 可行性预评分过低,跳过 | 否 |
7. 计费
- Outcome-based:只有 PR 成功提交(
agent-evaluated)才扣 1 credit agent-failed/agent-skipped不扣 credits- 仪表盘 Billing 页可看实时余额、历史用量、充值记录
8. 常见错误排查
8.1 clawflow login 超时
Error: timed out waiting for OAuth callback
- 浏览器是否完成了 GitHub 授权?
- 回调地址
http://localhost:PORT/callback是否被本机防火墙拦截? - SaaS 侧是否能反向回访 localhost?—— CLI 流程只要求 GitHub 能访问 SaaS、SaaS 能 302 到 localhost,一般不会卡。
8.2 github exchange failed: error sending request
发生在 OAuth callback 阶段服务端 无法访问
github.com/login/oauth/access_token。自建 SaaS 时常见,
在国内服务器需要配置 HTTPS_PROXY 环境变量。托管 SaaS 已配好,一般不会遇到。
8.3 worker start 报 401
status 401: invalid or missing worker token
- 看
~/.clawflow/config/worker.yaml的worker_token是否被截断 - 仪表盘 rotate 过后旧 token 就失效了,需要重跑
clawflow login - 或直接
clawflow config set --saas-url ... --token cfw_...手动写入
8.4 worker 一直轮询但不认领
- 确认 Issue 已被打上
ready-for-agent标签 - 仪表盘 Pipeline Runs 有没有看到 pending 记录
- 没有 → Webhook 没触发或 signature 校验失败,检查 webhook secret
- 有 pending 但 worker 不认领 → worker 的
saas_url/worker_token是否和仪表盘的 org 对齐
8.5 PR 没提交但任务显示 complete
- worker 的 Claude Code 会话里有没有报错
- 查看 worker 终端输出
[task <id>] complete, pr=<url>的 URL 是否为空
9. Rotate worker token
两种方式任选其一:- 仪表盘:https://clawflow.daboluo.cc/dashboard → Settings → Rotate Worker Token
- 命令行:重跑
clawflow login --saas-url https://clawflow.daboluo.cc,会自动完成 OAuth + rotate + 重写worker.yaml
10. 托管 vs Self-Host
| 维度 | 托管 SaaS | Self-Host |
|---|---|---|
| 部署 | 无 | 需自建 Postgres + 部署 Rust 后端 |
| OAuth App | 内置 | 要自己在 GitHub / GitLab 注册 |
| 升级 | 自动 | 手动 git pull + 重新部署 |
| 数据主权 | 数据在我们 | 完全自主 |
| 定价 | outcome-based credits | 自付基础设施成本 |
| 推荐人群 | 个人 / 小团队 / 先试用 | 大企业 / 合规强要求 |
11. 下一步
- 邀请队友:仪表盘 Organization → Invite Member(支持 owner / admin / member 三级角色)
- 接入多个仓库:同一 org 下可配多仓库,worker 统一拉队列
- 查看分析报表:Analytics 页看成功率、平均修复时长、按仓库分布