ClawRelay 受够了 OpenClaw,我自己 vibe 了一个 Claude Code 调度器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
buaacss
V2EX    分享创造

ClawRelay 受够了 OpenClaw,我自己 vibe 了一个 Claude Code 调度器

  •   buaacss
    roodkcab 2 月 26 日 467 次点击
    这是一个创建于 36 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ClawRelay 受够了 OpenClaw ,我自己撸了一个 Claude Code 调度器

    起因

    先说结论:用了一个假期的 OpenClaw 之后,我决定自己造一个 claude code 监工。

    不是 OpenClaw 不好,它的 Telegram UI 确实香,但用深了之后问题实在太多,多到我一个写代码的人每天花一半时间在跟工具较劲,而不是在干活。

    痛点一:发了消息之后完全不知道它在干什么

    这是最让我抓狂的。你给 Claude 一个任务,然后呢?然后就是对着 Telegram 聊天窗口干瞪眼。它在读文件?在跑命令?在思考人生?你不知道。配了消息切分也不行切太碎 Telegram 直接 429 ,指数退避之后两条消息要等 10 分钟才发出来。10 分钟。你坐在那里等 10 分钟看一条消息,这体验跟拨号上网有什么区别?

    痛点二:两个 Agent 打架

    这是架构层面的硬伤。Claude Code 本身已经是一个非常成熟的 Agent 了,有完整的工具链:Bash 、Read 、Write 、Edit 、Grep 、WebSearch……它自己就能干活。但 OpenClaw 的 pi-mono 框架也是个 Agent ,也想管事。结果就是两个 Agent 互相抢活干,你不得不把 Claude 本来就能做的事情委托给 OpenClaw 去调度,这太不 AI 了。

    说白了我需要的只是一个监工 + 调度器,不是另一个 Agent 。那堆 SAUL 和 SKILL 对我来说完全用不上Claude 自己就能做。唯一算有点用的计划任务和 heartbeat ,对稍微有点经验的人来说也是鸡肋。

    痛点三:Anthropic 封了 OpenClaw

    嗯,这个不多说了。


    所以我做了 ClawRelay

    架构图一目了然:

    Flutter 桌面客户端 ↓ HTTP/SSE ( OpenAI 兼容协议) Go Relay Server (:50009 ) ↓ subprocess fork Claude Code CLI (带完整工具链) ↓ Anthropic API → Claude Opus/Sonnet/Haiku 

    核心设计哲学:Claude Code 是干活的人,ClawRelay 只是给它装了个好看的壳。

    不抢活,不加戏,不搞中间商赚差价。Go relay 是一个无状态的透传层,把 Claude Code 的 stream-json 转成 OpenAI 兼容的 SSE 格式,Flutter 客户端接住渲染。所有工具调用、文件读写、命令执行,全部由 Claude Code 自己搞定。

    你能看到 Claude 在干什么

    这是我最在意的功能。消息发出去之后:

    • 实时 token 流:Claude 打一个字你就看到一个字
    • Extended Thinking 面板:Claude 的思考过程实时展示,默认折叠,点开看完整思维链
    • Tool Call 标签:Claude 每调用一个工具,底部就多一个 chipBash 、Read 、Edit 、WebSearch……一目了然

    再也不用对着屏幕发呆猜它在干嘛了。

    多项目管理

    每个项目独立配置:

    • 工作目录( Claude 在哪个目录下干活)
    • System Prompt (你的个性化指令)
    • 模型选择( Opus / Sonnet / Haiku 随便切)
    • 独立的消息历史,SQLite 本地持久化

    项目之间互不干扰,有新消息还会亮未读标记。同时盯三四个项目的进度完全没问题。

    图片支持做到极致

    三种输入方式全覆盖:

    1. 文件选择器:常规操作
    2. Ctrl+V 粘贴:截图直接贴进来
    3. 拖拽:把图片文件拖进输入框

    还内置了系统截图调用Linux 上 flameshot/maim/scrot ,macOS 上 screencapture ,Windows 上 PowerShell 。截完图自动贴到输入框,发送时 base64 编码传给后端,后端落盘成临时文件让 Claude 读取,响应完成后自动清理。整个流程丝滑到你感觉不到后面那一堆逻辑。

    OpenAI 兼容协议

    /v1/chat/completions,标准的 OpenAI API 格式。这意味着理论上你可以用任何支持 OpenAI API 的客户端连上来。Go relay 做了模型别名映射:gpt-4 → Opus ,gpt-4o → Sonnet ,gpt-3.5-turbo → Haiku 。还有 /v1/stats 端点追踪 token 用量。


    技术栈

    组件 技术
    桌面客户端 Flutter + Riverpod + Drift(SQLite) + Material Design 3
    Relay 服务 Go 1.24 ,无框架,subprocess 管理
    流式传输 SSE ( Server-Sent Events )
    本地存储 SQLite (~/.config/clawrelay/clawrelay.sqlite )

    整个项目没用什么花里胡哨的依赖,Go 后端甚至没引 web 框架,标准库直接撸。


    跟 OpenClaw 的本质区别

    OpenClaw ClawRelay
    架构 Agent 调度 Agent 纯 UI 壳 + 透传 Relay
    工具执行 框架接管 Claude Code 原生执行
    UI Telegram Bot Flutter 原生桌面应用
    消息延迟 受 Telegram API 限制 本地直连,零延迟
    可观测性 黑盒 实时 streaming + thinking + tool chips
    复杂度 重( pi-mono + SAUL + SKILL ) 轻(一个 Go binary + 一个 Flutter app )

    一句话总结:OpenClaw 是在 Claude Code 上面又套了一层 Agent ; ClawRelay 是给 Claude Code 开了一扇窗,让你看得见、管得住。


    最后

    代码已开源,拿走不谢:https://github.com/roodkcab/clawrelay

    如果你也是 Claude Code 重度用户,如果你也受够了对着终端或者 Telegram 猜 Claude 在干什么,试试 ClawRelay 。

    它不多管闲事,不跟 Claude 抢活干,只做一件事:让你清清楚楚地看到 Claude Code 在帮你干什么。


    一个假期的怨气,化成了代码。

    ClawRelay

    buaacss
        1
    buaacss  
    OP
       2 月 26 日
    刚发出来就有 agent 来提交 PR 了,支持了 OSX 和 iOS,这速度也太快了.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2644 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 04:05 PVG 12:05 LAX 21:05 JFK 00:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86