Skip to content
This repository was archived by the owner on Aug 8, 2026. It is now read-only.

Latest commit

 

History

History
74 lines (56 loc) · 3.17 KB

File metadata and controls

74 lines (56 loc) · 3.17 KB

Choir

English | 简体中文

Important

已归档,不再维护。

维护成本一直不值得。本地代理编排器必须跟上它所驱动的每一个 agent CLI,而这些 CLI 一直在变:命令行参数、认证方式、输出格式、会话语义。跟上这些变化的成本, 远超编排本身带来的价值。

这部分工作现在以 oh-my-pipi / omp) 插件的形式存在。它本身已经管理了 agent 的生命周期、工具接口和会话模型。为一个 有人维护的框架写插件,比自己维护一个框架轻松得多。

代码保留供参考。此后的 Rust 重写版本在 v4-final 标签。

Choir 是一个用 MoonBit 编写的本地代理编排器。一个昂贵的模型担任团队负责人(TL,Claude);更便宜的代理作为叶子(leaf)运行(默认 Codex,也可选 Gemini、Moon Pilot 或 Cursor)。每个叶子在自己的 git worktree 中工作,并向 TL 的分支提交 PR。内置的 poller 自动处理 Copilot review,把 GitHub review 和 CI 反馈路由到对应面板,并在 PR 获批时通知 TL。核心循环是 scaffold、fork、converge:TL 提交共享类型,派生一波并行叶子,逐个合并已批准的 PR,然后再派生下一波或向上提交自己的 PR。

flowchart TD
    init(["choir init"]) --> srv["Server:常驻 UDS 守护进程"]
    srv --> tl{{"TL:Claude(团队负责人)"}}

    tl -. "可选,多波次" .-> spec["/crystallize 然后 /decompose<br/>feature/&lt;slug&gt; 分支"]
    spec -.-> tl

    tl -->|"1. scaffold 提交(共享类型)"| fork["fork_wave"]
    fork --> la["叶子 A:独立 git worktree"]
    fork --> lb["叶子 B:独立 git worktree"]

    la -->|"file_pr"| pr["PR 到父分支"]
    lb -->|"file_pr"| pr
    pr <--> gh[("GitHub:review / CI")]

    subgraph optional["可选:Copilot 自动 review"]
        copilot["Copilot review"]
    end
    gh <-.-> copilot

    gh --> poller["Poller"]
    poller -->|"review / CI 反馈到对应面板"| la
    poller -->|"review / CI 反馈到对应面板"| lb
    poller -->|"已批准 + 快照"| tl

    tl ==>|"逐个合并已批准的 PR"| converge{{"converge(收敛)"}}
    converge -->|"WaveComplete:下一波"| fork
    converge -->|"完成"| up["向上提交自己的 PR"]

    tl -. "fork_wave role=tl" .-> subtl[["子 TL:相同循环"]]
    subtl -->|"PR 到 TL 分支"| tl

    style optional stroke-dasharray: 5 5
Loading

安装

# 前置依赖:git、gh、zellij 0.44+、bd(Beads),以及你要用的代理 CLI
#   (claude、codex、gemini、moon、agent)。Nix dev shell 提供开源依赖。

moon build --target native --release   # 构建
choir init                             # 拉起服务端 + TL 会话
choir claude [--lean]    # 在运行中的服务端上重启 TL 面板(--lean:不加默认系统提示)
choir init --recreate    # 重启服务端 + TL,保留恢复状态
choir stop [--purge]     # 关闭(--purge 同时删除 worktree + 状态)

许可证

MIT 许可证。架构参考了 exomonad