为什么「多机」之后最先崩的是审批
一台 Mac mini 上开一两个 Claude Code 会话时,你大概还记得哪个终端在闪。扩到两三台机器、每个项目一个 tmux 窗口之后,常见画面会变成:手机上收到「好像卡住了」的感觉,却说不清是编译太久,还是它正在等你点 Yes。
权限确认本身没有问题——不可逆操作本来就该有人点头。麻烦在于信息散落:A 机的会话在等写某个目录,B 机的会话在等跑一条会改仓库的命令,你本地笔记本上还有第三个窗口。没有统一入口时,你只能一台台 SSH 进去翻历史,或者反复用 UU 远程连接切桌面,效率很低,也容易漏掉真正堵着流水线的那一次批准。
下面把「谁在等拍板」收成一块极简状态板。它不替代 Claude Code 自己的权限系统,只负责把分散的等待信号集中到你随时能打开的一个文件里。
准备清单
- 至少一台常开、不休眠的新加坡 Mac mini,已安装 Claude Code,并用你自己的账号登录。
- 能用 SSH 或 UU 远程连接进入这台机器;终端里有 tmux。
- 如果你有多台机器,它们都能访问同一份状态文件(同一用户目录、同一私有 git 仓库,或一台机器当「板机」、其他机器用 scp/ssh 更新)。
步骤一:定一块「板机」和状态文件格式
选一台你最常连的 Mac mini 当板机——通常就是日常写代码、开着主会话的那台。在它上面建一个目录,例如 ~/claude-board,里面放 waiting.tsv(制表符分隔,方便用 column 对齐查看)。
约定四列,简单到可以用文本编辑器手改:
host:机器短名,比如mini-a、mini-b(自己定,不要用可枚举的公网子域举例)。session:tmux 会话名或项目短名,例如api、ios-build。since:开始等待的本地时间,写成2026-10-23 11:05。reason:一句话原因,例如Ask: 写入 ~/.ssh、Ask: git push --force。
第一行可以是表头:host session since reason。文件里「有行」就代表还在等你;拍板并让会话继续后,删掉对应行即可。
步骤二:给每台机器写三条小命令
在每台 Mac mini 的 ~/.zshrc(或你实际用的 shell 配置)里加三个函数,名字随意,语义要清楚:
board-wait:追加一行。参数依次是 session、reason;host 用hostname -s自动填,since 用date '+%Y-%m-%d %H:%M'。写入前先按 host+session 删掉旧行,避免同一会话重复登记。board-clear:按 session(可选再加 host)删掉匹配行。board-show:若本机就是板机,直接column -t -s $'\t' ~/claude-board/waiting.tsv;若在其他机器,用ssh board-host 'column -t …'读板机上的文件。
状态文件只放等待元数据,不要写入令牌、密钥或完整命令参数里的机密。reason 写成类别即可,例如「Ask: 修改密钥目录」,细节回到对应 tmux 会话里看。
多机共享时,有两种稳妥做法:
- 板机中心:其他机器通过 SSH 在板机上执行
board-wait/board-clear(给板机配好密钥登录,命令写进函数即可)。 - git 同步:
waiting.tsv放进私有仓库,等待时 commit + push,查看时 pull。适合机器之间不便互相 SSH、但都能访问同一远程仓库的场景。冲突时以「最新一次 push」为准,并养成拍板后立刻 clear 的习惯。
步骤三:和 Claude Code 的真实卡点对齐
状态板再漂亮,也要接上 Claude Code 真正停下的时刻。实践里用这三条习惯最省事:
- 开会话时先命名:
tmux new -s api,之后所有 board 命令都带同一个 session 名,和窗口一一对应。 - 权限策略先收紧再放行:在项目的权限配置里,把会改仓库、会碰凭据目录、会对外发请求的操作设成需要确认;把只读检查、跑测试设成可自动通过。这样「会等你」的点变少、但每一次都更值得登记。
- 卡住立刻登记:一旦终端停在确认提示,先不要切去干别的——在另一个窗格执行
board-wait api 'Ask: 写入发布目录',然后再离开座位或看手机。回来先board-show,再tmux attach -t api处理。
如果你已经在用 Claude Code 的 hooks(例如某次工具调用被拒绝或进入询问时触发脚本),可以把 board-wait 接到 hook 里自动写文件;接之前先在空项目里试跑,确认 hook 失败时不会拖垮主会话。接不好就继续用手敲三条命令,也完全够用。
步骤四:手机上只看板、再决定连哪台
远程场景建议固定成这个顺序,避免在手机上盲目切桌面:
- 用手机 SSH 客户端连板机(或连任意一台能
board-show的机器),只跑board-show。 - 若列表为空,多半是长任务还在跑,而不是卡在权限上——这时再决定要不要附上具体 tmux 会话看日志。
- 若列表有行,按
since最早的先处理:SSH 或 UU 远程连接进对应 host,tmux attach -t <session>,完成批准或拒绝,然后立刻board-clear。 - 一天结束前再
board-show一次;残留行通常是忘了 clear,或会话已经关掉但状态没删——删掉即可,避免明天被假警报吓到。
UU 远程连接适合需要看完整桌面、点图形界面确认框的时候;只处理终端里的 Yes/No,优先用 SSH,流量更小,也更适合手机操作。
步骤五:把板机留在常开的新加坡整机上
状态板的价值取决于「你随时连得上那份文件」。笔记本合盖、系统更新、休眠,都会让板机短暂失踪;多台 Mac mini 若各自为政,你又会回到一台台翻会话的老路。
更稳的做法是:把板机(以及主要的 Claude Code 长会话)放在新加坡家庭宽带上的常开 Mac mini 上,整机独享,会话、状态文件和 git 主库都在同一台机器里。你本地只负责发起任务和偶尔拍板;机器负责 7×24 挂着跑。实际延迟取决于你本地的网络线路,先租一个月把 board-show → attach → board-clear 这条路径跑顺即可。
Zumac.Ai 提供的就是这类环境:位于新加坡的实体 Mac mini M6,整机独享,支持 SSH 与 UU 远程连接,FileVault 全盘加密,退租时抹机重装。新客户整机租用 ¥999/月起,季付 ¥2,697.30,半年付 6 送 1 为 ¥5,994,年付 12 送 2 为 ¥11,988;已购买客户续费保持原价。新客户首单自审核开通当天起租,续费及老客户新订单自付款当天起租。
小结
- 多会话、多机器时,先解决「谁在等拍板」,再谈怎么加更多自动化。
- 用一份四列的
waiting.tsv就够:host、session、since、reason;有行=还在等。 board-wait/board-clear/board-show三命令,配合命名好的 tmux 会话。- 手机上先看板,再 SSH 或 UU 远程连接进具体机器;处理完马上清行。
- 板机放在常开的新加坡整机上,状态文件才不会跟你的笔记本一起休眠。
