V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yadorez
V2EX  ›  程序员

ClawRelay — 用不习惯 OpenClaw,我自己撸了一个 Claude Code 调度器

  •  
  •   yadorez · 2 月 27 日 · 2027 次点击

    起因

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

    不是 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 每调用一个工具,底部就多一个 chip——Bash 、Read 、Edit 、WebSearch……一目了然

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

    多项目管理

    每个项目独立配置:

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

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

    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 )

    手机上和电脑上之前都没法愉快地做监工,现在终于舒服了。


    最后

    代码已开源,欢迎 PR:https://github.com/roodkcab/clawrelay

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

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


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

    ClawRelay

    第 1 条附言  ·  2 月 27 日
    问:为什么不用 happycoder
    答:happy 更像是 tee ,你需要先启动一个 claude 然后把它转发出去,小机器内存是扛不住那么多 claude 的(毕竟不是 rust 写的) clawrelay 采用 session-id 来做会话同步,每次 session 跑完就释放掉 claude ,不需要你时刻开着一个 claude 。

    当然对于没有那么多项目需要并行管理的人来说,足够用了。我的需求太跳脱,有时候要开好几个 claude 来并行处理,happy 对我来说不太够用。
    25 条回复    2026-02-27 13:44:54 +08:00
    andforce
        1
    andforce  
       2 月 27 日
    知识点有点密集,收藏学习
    yukinotech
        2
    yukinotech  
       2 月 27 日   ❤️ 1
    啊?那和直接用 claude code 有啥区别?没看懂,解决了什么问题,似乎变成了在应用里面调用 Claude code 了,还有别的不一样的地方吗
    MHPSY
        3
    MHPSY  
       2 月 27 日
    是我准备要搞的东西,start 了,睡醒就开始用
    Aquariuslt
        4
    Aquariuslt  
       2 月 27 日   ❤️ 2
    > 不抢活,不加戏,不搞中间商赚差价。

    看文章看到这个 AI 修饰语气有点不适。
    Edward4074
        5
    Edward4074  
       2 月 27 日 via iPhone
    @yukinotech 大概是有点类似 codex cli 和 codex 客户端的关系吧
    win8en
        6
    win8en  
       2 月 27 日 via Android
    @yukinotech 正是我想问的
    yadorez
        7
    yadorez  
    OP
       2 月 27 日
    @yukinotech 因为我有 7-8 个项目需要并行处理,我需要的是一个调度器,最好是能远程的.手机上之前用 terminus+tmux+claude code,体验上太难用了,我需要看到 thinking 和看聊天记录,然后好几个项目来回切过于难受了.

    看到 openclaw,第一时间就想到可以用来做调度工具,实际上确实有人这么做了,tmux 负责接管标准输入输出,然后由 openclaw 调度任务,每 10 分钟做一次状态管理,是一种高级的拉尔夫循环

    我之前也是这么做的,直到 cc 开始封禁 openclaw,我自己弄了个 openai compatible streaming api 继续用,但是也很不爽,触发了 telegram 封禁后,10 分钟才能看到返回的消息

    加上 openclaw 过于笨重,所以自己搞一个最轻量的远程调度器是最爽的
    yadorez
        8
    yadorez  
    OP
       2 月 27 日
    @MHPSY 哈哈哈哈,我刚弄完,你猜怎么着,cc 就把远程控制给做了.

    有没有一种英雄所见略同的感觉?
    yadorez
        9
    yadorez  
    OP
       2 月 27 日
    @Edward4074 那只是一层皮,我们真正需要的是一个能随时远程盯好几个项目的编排工具(orchestrator).如果非要找个类比,这就是 k8s 之于 docker.
    Retas
        10
    Retas  
       2 月 27 日
    如果只是远程 cc ,为啥不用 hapi
    xJogger
        11
    xJogger  
       2 月 27 日 via Android
    手机用什么合适?
    philcat
        12
    philcat  
       2 月 27 日
    emm, happy-coder ?
    Tink
        13
    Tink  
    PRO
       2 月 27 日
    我现在逻辑是让龙虾监工 Claude ,他能把要求提的非常明确
    ebiorz
        14
    ebiorz  
       2 月 27 日
    和 happy-coder 有啥区别啊, 做的不是一个事情吗
    yadorez
        15
    yadorez  
    OP
       2 月 27 日
    @philcat happy 的每个会话要启动一个 claude code ,会榨干小机器的内存。虽然我同时跑 3-4 个 project 的时候也挺占用,但是只要推理完了就会释放掉。会话之间的历史是通过 session-id 同步的,所以内存占用非常小。
    d119
        16
    d119  
       2 月 27 日
    折腾了一天 openclaw ,感觉它跟我都是废物
    yadorez
        17
    yadorez  
    OP
       2 月 27 日
    @d119 不需要气馁,claude 自己整了好半天,帮我调试到足够满足我的需求了,我还是觉得怎么用都别扭,哈哈哈
    EasonYan
        18
    EasonYan  
       2 月 27 日
    需要跑 cc 的那个机器有公网 IP 吗?
    yadorez
        19
    yadorez  
    OP
       2 月 27 日
    @EasonYan 我是用 vpn 穿透到内网。放在公网不好吧,我都没做验证的,不过可以加。
    yukinotech
        20
    yukinotech  
       2 月 27 日
    @yadorez get 了,类似 codex app ,而且还能在手机上操作。claude code 原来官方没做吗,我还以为这个是个大趋势
    frantic
        21
    frantic  
       2 月 27 日
    @Tink 这个要咋弄,我现在期望 openclaw 监工 codex 或者 opencode, 我自己只能用于在同一个 bot 聊天窗口通过指令或者语言意图来切换是聊天模型( kimi-k2.5)还是 coding 模型( codex-5.3)
    yadorez
        22
    yadorez  
    OP
       2 月 27 日
    @yukinotech 其实远程操作只是第一层

    然而 clawrelay 真正强大的地方在于可以将 claude 转发到企业微信这样的地方去,每个项目就是一个智能体,智能体之间通过 IM 工具天然造就一张通信网络,每个 agent 有自己项目的代码和其他项目的交互作为上下文,从而快速时间跨项目的开发,比之前的开发效率又要增长一大截了。

    ![ClawRelay]( https://raw.githubusercontent.com/roodkcab/images/refs/heads/main/clawrelay.png?token=GHSAT0AAAAAADWM3AA5NPBAGR67B46D7NEA2NBCVOA)
    Tink
        23
    Tink  
    PRO
       2 月 27 日   ❤️ 1
    @frantic #21 用这个 skill:claude-code-supervisor

    其实就是🦞拉起一个 tmux ,然后启动一个交互式 claudecode 。你告诉他要干什么,他帮你安排给 Claude ,然后把 Claude 执行结果返回给你
    cadl
        24
    cadl  
       2 月 27 日
    我先前也是做了一个 openclaw 对接 claude code 的插件,感觉比 openclaw 通过 tui 交互 claude code 好用一些,可以方便调起 plan 模式,输出 thinking 内容 等等。加了个本地调试的页面,有点类似你的项目。https://github.com/cadl/openclaw-cc-bridge

    本地调试的页面:


    但是春节过年回家基本没在电脑前,在手机上操作 openclaw 使用这个插件还是有很多槽点,跟你的感觉很像。后来我又把自己之前做的一个远程 ssh 连接 claude code 的 app 项目打磨了下,春节期间一边使用自己的这个 app 开发自己,一边发布 testflight 更新,感觉还挺顺畅。因为跟在电脑上操作 claude code 的体验是一致的,能保证生产力。

    也支持 worktree 的工作流啥的,感觉比裸用一个 terminal ssh 登录要方便很多







    frantic
        25
    frantic  
       2 月 27 日
    @Tink 感谢,之前我以为这样会双倍消耗 token, 刚刚想了下应该没啥问题。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2951 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:41 · PVG 22:41 · LAX 06:41 · JFK 09:41
    ♥ Do have faith in what you're doing.