V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yadorez
V2EX  ›  程序员

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

  •  
  •   yadorez · Feb 27 · 3663 views
    This topic created in 69 days ago, the information mentioned may be changed or developed.

    起因

    先说结论:用了一个假期的 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

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

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

    看文章看到这个 AI 修饰语气有点不适。
    Edward4074
        5
    Edward4074  
       Feb 27 via iPhone
    @yukinotech 大概是有点类似 codex cli 和 codex 客户端的关系吧
    win8en
        6
    win8en  
       Feb 27 via Android
    @yukinotech 正是我想问的
    yadorez
        7
    yadorez  
    OP
       Feb 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
       Feb 27
    @MHPSY 哈哈哈哈,我刚弄完,你猜怎么着,cc 就把远程控制给做了.

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

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

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

    其实就是🦞拉起一个 tmux ,然后启动一个交互式 claudecode 。你告诉他要干什么,他帮你安排给 Claude ,然后把 Claude 执行结果返回给你
    cadl
        24
    cadl  
       Feb 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  
       Feb 27
    @Tink 感谢,之前我以为这样会双倍消耗 token, 刚刚想了下应该没啥问题。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   951 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 19:32 · PVG 03:32 · LAX 12:32 · JFK 15:32
    ♥ Do have faith in what you're doing.