GitHub Next 刚开源的实验项目 Ace(仓库 githubnext/ace,MIT 许可证)将多人多 Agent 协作搬到了由 Tailscale 局域网(Tailnet)互联的个人 Mac 上。它用写时复制(CoW)的 Git worktree(称为 Lane)隔离每个分支修改,允许队友进你的频道(Channel)直接唤醒你本机的 Agent,并在分屏中实时预览和点击本机编译的原生桌面窗口。但这套「零云端中转、全组共用本机工具链」的设计伴随一道醒目红线:官方在首屏警告「Channels and lanes are not security sandboxes」,开启频道 Agent 共享就等于把宿主机当前用户的完整 Shell 权限交给了队友与 Agent。
该项目于 TLDR AI 2026-11-09 以「GitHub’s multiplayer harness」披露,基于 TypeScript 与 Bun 1.4+ 构建(原生桌面工具需 macOS 15+ 与 Swift 6.2+)。据架构文档 docs/architecture.md 说明,旧版 Ace 曾在云端 VM 中为每个频道跑独立进程,而最大的痛点正是云端 VM 维护;新版砍掉云端基础设施,保留每频道单进程并下沉到个人 Mac 上(注:GitHub 官方后续是否会将 Ace 的多人频道协议并入商业版 Copilot 产品线,公开仓库未披露,待核实 [待验证])。
本文面向探索多人多 Agent 协作、并行 Worktree 管理及团队 Agent 工作流的研发负责人、架构师与全栈开发者,拆解 Ace 的五层协同机制与本机工具链优势,给出四步验证与加固操作,并对比「个人宿主裸跑共享」与「任务看板驱动独立 Runtime」两类路线的取舍边界。
问题:为什么单人盯终端和纯云端沙箱都卡住了团队协作
团队引入编程 Agent 时常卡在两个痛点之间:一是「单人单机盯终端」,上下文锁在个人屏幕里,队友看不到试错过程,也没法在 Agent 提问时替你作答;二是「纯云端沙箱与本机环境脱节」,云端容器无法直接调用本机配好的 Xcode、Swift、Docker 或已登录的 gh CLI,摸不到办公桌 USB 接口上的开发板与音频硬件,也无法实时弹出 macOS 原生应用窗口供人机点击联调。
Ace 选择让队友经 Tailscale 直连你的 Mac 频道:讨论后输入 @ace do it 即可驱动宿主机工具链与原生应用窗口。针对「全员笔记本合盖休眠(Offline)后本地频道断联」的短板,Ace 提供了可选的 Cloud Compute(Beta):团队可在自有账号下通过 Cloudflare Workers(Durable Objects)与 Linux 容器运行云端频道,支持用 Stop compute 生成容器检查点(Checkpoint),并在 Start compute 时从快照恢复(至于该 Beta 何时原生支持除 Cloudflare 外的其他容器托管商,官方文档仅称后续可能跟进或由社区分叉扩展,待核实 [待验证])。
机制:Host、Tailnet、Directory 与 CoW Lane 如何串起多人协作
根据官方术语表 docs/terms.md 与 docs/architecture.md,Ace 由五个核心组件串起实时协作:

- Host(本机进程,
apps/host):运行在开发者 Mac 上,在$ACE_HOME/channels/<id>/(默认~/.local/state/ace)下保存channel.json与channel.sqlite。客户端按需拉起频道 worker 并经channel.sock通信;无连接且无任务时自动休眠(Dormant)。 - Team = Tailnet(Tailscale 局域网):Ace 不设独立账号或角色系统,同一 Tailnet 即团队本身。宿主机网关通过
tailscale whois校验调用者并映射为 GitHub 登录名展示在线状态(Here/Away);未启动 Tailscale 则无法创建频道。 - Directory(轻量目录服务,
services/directory):由团队自部署在 Cloudflare Workers(SQLite Durable Objects)、Fly.io 或celld上。它只记录项目、Host、频道位置、项目共享(Share)与在线状态(Lobby),不存任何聊天消息、代码或 Diff。真实消息与代码流完全在 Host 间经 Tailnet 点对点传输,主机凭HMAC-SHA256(ACE_SECRET, tailnet)向目录鉴权。 - Channel 与 Chat(频道与对话,
packages/channel):每个 Channel 对应一个piSession,内含一个或多个 Chat(支持父子 Chat 派生 Subagent)。当 Agent 用question工具提问时,任何有权限的队友均可作答;离线期间动态汇总在「While you were away」中。 - Lane(基于 Luke Edwards
lane的写时复制 Worktree):每个工作单元对应独立 Git worktree 与分支,底层调用 Luke Edwards 的laneCLI 以写时复制(CoW)方式创建(lane new)并提交 PR(lane push),单时刻最多一个 Chat 写入同一 Lane。
在原生桌面控制(docs/desktop-tools.md)上,Ace 内嵌基于 OpenClaw Peekaboo 的桥接库,获授权后可检视并点击 macOS 窗口控件、读写剪贴板(文本上限 24,000 字节 JSON,图像上限 10 MiB / 6400 万像素),并将原生窗口实时嵌入侧栏分屏;模型请求直接读取本机 Keychain 中的 Anthropic 或 OpenAI 密钥直连厂商。
| 架构维度 | Ace 本地频道 (Local Channel) | Ace 云端频道 (Cloud Compute Beta) |
|---|---|---|
| 运行位置 | 开发者个人 Mac(apps/host + 本地 worker) | 团队自部署 Cloudflare Durable Object + Linux 容器 |
| 分支隔离与硬件 | 基于 lane 的 CoW Worktree;可调 Xcode、USB 外设与原生窗口 | 容器内独立克隆检出;仅限 Linux 容器,无本机硬件与桌面工具 |
| 合盖休眠与密钥 | 宿主休眠后变为 Offline;密钥存于个人 Mac Keychain | 笔记本合盖仍后台运行(支持 Checkpoint 恢复);密钥存服务端 Secret |
怎么做:四步复现 Ace 协作流并收敛宿主执行边界
第一步:在 Tailscale 环境下用 Bun 启动频道与回环调试
确认本机已登录 Tailscale 且安装 Bun 1.4+ 后,可针对本地 Git 仓库启动频道;若仅单机调试,可加 --loopback 禁用局域网监听:
# 克隆仓库并启动本地项目频道(需 Tailscale 在线且 Bun 1.4+)
git clone https://github.com/githubnext/ace.git && cd ace
bun install
bun ace new --project ~/code/my-repo
bun ace ask <channel> "what does this repo do?"
# 仅在 127.0.0.1 回环监听,不向 Tailnet 节点暴露或广播目录
bun ace serve --loopback第二步:按频道收紧队友 Agent 调用与原生桌面开关
队友拥有项目访问权(Access 或整项目 Share)仅能看频道和发消息;能否唤醒你本机的 Agent 由频道级 agent access 独立控制(新频道默认关闭):
# 关闭队友对该频道 Agent 的调用权(仅在绝对互信结对时设为 on)
bun ace agents <channel> off
# 关闭该频道的 macOS 原生桌面控制工具(新频道默认关闭)
bun ace desktop <channel> off第三步:自管部署轻量 Directory 并严禁暴露公网
通过客户端 Settings -> Team -> Set up... 用自有 wrangler login 部署 ace-directory-<tailnet>,或用 celld 加 tailscale serve 在内网托管,严禁开启 Funnel 或公网端口映射:
# 仅在 tailnet 内部暴露 HTTPS,停用 Cloudflare 目录时可直接删除 Worker
tailscale serve --bg --https 443 http://127.0.0.1:8787
bunx wrangler delete --name ace-directory-<tailnet>第四步:超过三人结对规模后,迁入独立电脑 Runtime 与任务看板
当团队超过两三名绝对互信搭档、进入多角色工程协作时,把协作建立在「连进个人办公机裸跑宿主 Shell」上既受制于个人笔记本休眠,又违背最小权限原则。

工程团队落地时,可借助 HiFox 将协作中心与个人办公机解耦:
- 用专门的远程电脑替代共享个人 Mac:按《电脑》文档规范,「个人电脑适合个人 Agent 和本地开发工作。团队共享任务更适合使用专门的远程电脑,避免共享个人凭据、工作目录和不稳定的本机在线状态」。将远程开发机上的 Claude Code、Codex 登记为运行时(Runtime),本地服务主动外连,无需开入站端口。
- 用独立 Worktree 与沙箱外推送隔离凭据:按《Agent 工作目录》与《HiFox CLI》机制,每个并行任务在独立 worktree 中运行并提交至
<产品>-agent/<Agent 名称>/<任务编号>分支,通过hifox repo checkout与hifox repo push把代码托管凭据留在沙箱外。 - 用小队(Crew)收敛调用权:按《小队》机制,任务指派给小队后先由队长 Agent 评估并按序
@成员 Agent,还可设置「小队专属 Agent」禁止私聊与外部单独指派。
避坑指南:把 Ace 用于团队协作前必须认清的四个死角
- 误把 Lane Worktree 当成安全沙箱:Lane 仅隔离 Git 分支文件,Agent 进程仍继承宿主机当前用户的完整权限,可执行任意 Shell 命令并读写或删除项目目录外的
~/.ssh与私有文件。 - 以为关掉
ace desktop <channel> off就能防截屏:架构文档指出该开关仅是原生工具门禁(native tools gate),而非 Shell 沙箱;关闭后 Agent 仍可在宿主 Shell 中调用系统自带的screencapture截屏或读取本机环境变量。 - 忽略同机跨频道唤醒与
ACE_SECRET泄露风险:关闭agent access只拦外部队友,同一台 Host 另一频道的 Agent 发出的消息仍可直接唤醒目标频道 Agent。同时,目录服务的TAILNETMagicDNS 后缀在证书透明度日志中公开,一旦ACE_SECRET泄露,外部即可算出HMAC-SHA256(ACE_SECRET, tailnet)调用目录服务。 - 把实验性本地 Harness 当成多引擎成品:据
docs/architecture.md的「Not yet built」清单,Ace 对 Claude Code 与 Codex 等外部 Harness 的接入、文件与浏览器预览标签页(Issues#22、#16)及跨托管频道发消息均尚未构建(外部 Harness 具体支持排期官方未公布,待核实 [待验证])。
结论:双人极客结对用频道直连,多角色工程交付归任务看板
Ace 证明多人多 Agent 协同正在取代单人盯终端,但「频道直连个人宿主 Shell」与「企业级工程治理」边界截然不同。建议今天落实三项动作:
- 严守 2 至 3 人绝对互信的本机结对边界:仅在联调本机 Xcode 原生窗口或 USB 硬件、且完全信任搭档操作本机 Shell 时开启
ace agents <channel> on;单机多分支并行可参考《Orca:在隔离 worktree 里并行跑编程 Agent》。 - 解耦个人电脑休眠与后台长任务:避免全组进度挂在随时合盖的个人 Mac 上,长任务防断连与本机/云端边界可对照《笔记本合盖休眠后,怎么让 AI 编程 Agent 继续运行》与《Codex Cloud 来了:什么时候还该让 Agent 跑在自己的电脑上?》。
- 用任务状态门与独立 Runtime 承接团队交付:在 HiFox 中结合《Agent 如何执行任务》与《任务状态》,在空间(Space)的任务(Task)与专项(Project)中沉淀需求,从 Backlog 移入 Todo 后派发至专门远程电脑的 Runtime 在独立 Worktree 中执行,待写回结果并经人工 review 分支后再合并。



