让你的 AI 智能体们组成一个团队
你本地订阅了 Claude Code、Codex、Grok、Kimi、Antigravity……
ywcrew 让它们互相调用:在任何一个智能体里说句话,就能把任务派给其他家的模型。
装好之后,在 Cursor / Claude Code / Codex / Grok / Kimi 任意一个里,直接说:
| 你说 | 发生了什么 |
|---|---|
| "让 GPT 用最高思考强度查一下这个死锁" | 当前智能体把任务派给 Codex,后台执行,回来一份带证据的结论 |
| "开个评审会,对比一下这两个方案" | Claude、Codex、Kimi 并行各出一份评审,当前智能体汇总共识与分歧 |
| "让 kimi 接着刚才的结论继续深挖" | 跨轮追问,同后端原生续聊,KV 缓存零重建 |
| "让 claude 和 codex 各改一版,选好的" | 两家各自在隔离的 git worktree 里改代码,以 patch 交付,你挑一个 |
三个关键保证:
- 不烧 API key —— 所有调用走你已付费的订阅(各家自己的 CLI 登录态)
- 不打断当前对话 —— 被调模型在独立进程里跑,主对话的缓存零污染
- 不碰你的代码 —— 只读任务有权限约束,改代码任务在隔离副本中进行、以 patch 交付
把仓库名发给你的智能体(推荐),对任意 agent 说:
帮我安装 github.com/yuwen-cool/ywcrew:运行
curl -fsSL https://raw.githubusercontent.com/yuwen-cool/ywcrew/main/install.sh | bash,装完把上手指引转告我。
或者自己在终端跑同一条命令:
curl -fsSL https://raw.githubusercontent.com/yuwen-cool/ywcrew/main/install.sh | bash装完屏幕上会直接给出上手指引(对智能体说什么、怎么自查)。想逐项确认配置的话,再跑一次交互式 ywcrew init。
- 唯一前置要求:Node ≥ 20(脚本会检查并提示)
- 不需要注册任何账号:直接从本仓库下载,构建产物已随仓库提供
- 升级:重跑同一条安装命令;
~/.ywcrew下的配置与偏好不受影响 - 锁定版本:
YWCREW_VERSION=v0.1.0 bash install.sh(默认跟随 main 最新)
sequenceDiagram
participant U as 你
participant H as 宿主智能体<br>(Cursor / Claude Code / …)
participant Y as ywcrew CLI
participant W as detached worker
participant B as 被调后端<br>(claude / codex / grok / kimi / agy)
U->>H: "让 GPT 看看这个 bug"
H->>Y: ywcrew run(任务 JSON + 文件白名单)
Y-->>H: 立即返回 runId(不阻塞)
Y->>W: 派生独立进程
W->>B: 组装自包含上下文,headless 调用
Note over H: 继续干手头的活
B-->>W: 执行完成
H->>Y: ywcrew result --wait
Y-->>H: 结构化结论(summary / evidence / patch)
H-->>U: 汇总后的答案 + 可接管的会话命令
宿主智能体靠一份按你的真实配置动态渲染的技能文件学会这一切:里面只出现你实际启用的后端、你的默认模型、你自定义的路由偏好——它不会被引导去调一个你没有的模型。
回来的结论长这样(真实运行输出节选):
{
"status": "ok",
"summary": "发现 1 个 P0:PID 复用后 kill 会误杀无关进程组……",
"evidence": [{ "file": "src/core/lock.ts", "lines": "46-58", "claim": "…" }],
"confidence": "high",
"usage": { "inputTokens": 525103, "outputTokens": 14624, "durationMs": 338466 },
"takeover_command": "cd \"/path/to/proj\" && codex resume 019fa79b-…"
}takeover_command 可以直接复制到终端,亲自接管子智能体的会话继续深聊。
| 后端 | 命令 | 思考强度 | 原生续聊 | 只读机制 |
|---|---|---|---|---|
| Claude Code | claude |
– | 支持 | --permission-mode plan |
| Codex | codex |
支持 | 支持 | --sandbox read-only(原生沙箱) |
| Grok | grok |
支持 | 支持 | --permission-mode plan |
| Kimi Code | kimi |
– | 支持 | worktree 隔离(无原生只读档) |
| Antigravity | agy |
支持 | 支持 | --mode plan |
计划中的后端(opencode / droid / cursor-agent / 浏览器通道)见 docs/roadmap.md。
| 命令 | 作用 |
|---|---|
ywcrew run --stdin |
派单个任务(任务 JSON,ywcrew template 看模板) |
ywcrew panel --stdin |
同一任务并行发给多个模型(评审会;成员不可用自动降级) |
ywcrew followup <threadId> "…" |
跨轮追问;--backend 换模型自动重建历史 |
ywcrew status / result <runId> |
查状态 / 取结论(result --wait 阻塞等待多个 run) |
ywcrew route list/add/clear |
查看/自定义任务路由偏好(写进各宿主技能) |
ywcrew doctor |
体检:后端安装、登录态、宿主技能装载 |
ywcrew backends |
列出可用后端与模型 |
ywcrew refresh |
重新探测后端与模型清单,重渲染宿主技能 |
ywcrew install |
把技能分发到各宿主的 skills 目录 |
ywcrew gc |
清理超龄任务记录、worktree 与不活跃线程 |
ywcrew mcp |
以 MCP stdio server 方式运行(可选接入方式) |
为什么不直接在主对话里切换模型? 切模型会把当前对话的 KV 缓存整个打掉重建,又慢又贵。ywcrew 把被调模型放进独立进程,主对话缓存零污染,回来的只有结论。
被调的模型能看到我的整个项目吗?
默认模式下,注入的上下文严格限于你圈定的文件白名单(secret guard 拦截凭据文件、路径逃逸、密钥特征),但被调模型运行在项目目录中,理论上可自行读取其他文件(各家的权限档是行为约束)。敏感仓库请加 "strict": true:任务会在只含白名单文件的影子目录中执行,被调模型物理上读不到项目的其他任何文件。
模型返回的结论可信吗?
每条 evidence(文件 + 行号)都由 worker 自动核验并标记 verified——文件不存在或行号越界会被如实标出。结论本身仍是建议性的,宿主智能体会对照代码库复核后再采纳。
改代码的任务安全吗? edit 任务永远在隔离的 git worktree 里进行(你未提交的改动也会同步进去,保证它看到的是当前真实代码),产出以 patch 文件交付,绝不直接改你的仓库。
任务跑一半我关掉编辑器会怎样?
没影响。worker 是 detached 进程,状态全部落盘在 ~/.ywcrew,随时回来 ywcrew result <runId> 取结论。
多个任务同时跑会打架吗? 有跨进程并发控制(每后端 + 全局双层槽位锁),排队自动进行;僵死任务有心跳检测和惰性回收。
展开查看架构决策
- CLI-first + 技能分发:所有宿主都有 shell;技能文件按用户真实配置动态渲染,MCP 只是可选通道
- 任务五段式模板:briefing / locations / objective / constraints / output_contract——被调模型对项目零知识,上下文质量决定结果质量;提示词层同时声明 agentic 环境与读写边界
- 无 daemon:detached worker + 磁盘状态 + mkdir 原子锁(带初始化宽限与归属校验)+ 心跳惰性回收,宿主进程退出不影响任务
- 续聊双通道:同后端原生 session resume(KV 缓存零重建);跨后端按时间正序重建历史(预算封顶,旧轮折叠)
- 失败当场报:未安装/未登录的后端、不存在的目录、零匹配的 glob、占位符模型名——全部在派单时拦截并给出下一步动作
- 多模型互审出厂:发布前由 GPT 5.6 与 Kimi 各自完成一轮代码评审(就是用 ywcrew 自己派的单),P0/P1 全部修复
npm install && npm run build # tsup 打包到 dist/(dist 随仓库提交,改完 src 记得重新 build)
npm test # vitest 单测
npm run typecheck