人走开之后,最怕的是「它在等你」
把 Claude Code 放到一台常开的 Mac mini 上跑长任务,很快会遇到一个新问题:任务本身没出错,只是停在了一个确认提示上,比如要不要执行某条命令、要不要改某个目录。你在外面吃饭、开会、通勤,完全不知道;回到电脑前才发现,它已经安安静静等了两个小时。
另一种情况正好相反:任务早就做完了,你却以为还在跑,迟迟没去验收和安排下一步。
解决办法分两半:
- 让机器主动告诉你:卡住或完成时,推送一条消息到手机。
- 让你随时能接回去:收到消息后,用手机 SSH 连上 Mac mini,回到同一个会话,回答一句话就让它继续。
下面按步骤在一台新加坡 Mac mini 上配好。
准备清单
- 一台常开的 Mac mini(整机租用或自有设备托管),已装好 Claude Code 并用你自己的账号登录
- 已安装
tmux,没有的话用 Homebrew 安装:brew install tmux - 手机上装一个 SSH 客户端(iOS、Android 都有成熟的选择),并导入你的 SSH 私钥,用密钥登录,不用密码
- 一个能收推送的渠道:可以是 ntfy 这类推送应用,也可以是你自己建的 Telegram 机器人
步骤一:把会话固定在一个有名字的 tmux 窗口里
手机上最麻烦的是找会话,所以名字要固定:
- SSH 登录 Mac mini 后执行
tmux new -s claude,进入项目目录,再启动claude。 - 在
~/.tmux.conf里加两行:set -g mouse on(手机上可以用手指滚动查看历史)和set -g history-limit 50000(多留一些回滚记录)。 - 离开时按
Ctrl-b再按d脱离,会话继续在 Mac mini 上运行。
以后无论从哪台设备连回来,都只需要 tmux attach -t claude。
步骤二:不进会话,先看一眼
手机屏幕小,直接 attach 进去容易误触。可以先在 Mac mini 上建一个小脚本 ~/bin/peek,内容只有一行:tmux capture-pane -p -t claude | tail -40,再 chmod +x ~/bin/peek。
之后在手机上执行 ssh 你的主机 '~/bin/peek',就能看到会话最后 40 行,判断它是在干活、在等确认,还是已经结束。不需要回复时,看完就走,不碰会话本身。
步骤三:写一个推送脚本
在 Mac mini 上新建 ~/.claude/notify.sh,思路很简单:读入 Claude Code 交给 hook 的 JSON,取出提示文字,再用 curl 发出去。
- 读取内容:
msg=$(jq -r '.message // "任务已结束"')。较新的 macOS 自带jq,没有的话brew install jq。 - 用 ntfy 推送:
curl -s -d "$msg" https://ntfy.sh/你的随机主题名。公共主题谁知道名字谁就能订阅,所以主题名要足够长、足够随机,推送内容里也不要放密码、密钥或客户数据。 - 用 Telegram 机器人推送:调用机器人的
sendMessage接口,把$msg发到你自己的对话;机器人令牌存在只有你能读的文件里,不要写进项目仓库。
写好后 chmod +x ~/.claude/notify.sh,手动执行 echo '{"message":"测试"}' | ~/.claude/notify.sh,确认手机能收到。
步骤四:用 hook 在卡住和完成时自动触发
Claude Code 的 hooks 可以在特定事件发生时执行命令。这里用到两个事件:
- Notification:Claude 需要你确认权限,或者空闲等待输入一段时间后触发,正好对应「它在等你」。
- Stop:Claude 完成本轮回复时触发,对应「做完了,来验收」。
在 ~/.claude/settings.json(对所有项目生效)或项目的 .claude/settings.json 里,给 hooks 下的 Notification 和 Stop 各加一条 type 为 command 的配置,命令都指向 ~/.claude/notify.sh。配好后在会话里输入 /hooks 确认两条都已加载,再故意让它执行一条需要确认的命令,看手机是否响。
如果 Stop 提醒太频繁(每轮短对话都推一次),可以只在长任务时打开它,或者在脚本里判断:距上次推送不足几分钟就不发。
步骤五:收到提醒后,用手机三步处理
- 先
peek看一眼,弄清楚它在问什么。 - 需要回答时,
ssh上去执行tmux attach -t claude,回复一句「可以」「不要改这个目录」或选一个选项。 - 回完立刻
Ctrl-bd脱离,别在手机上做大段编辑。
如果会话已经被关掉,在项目目录执行 claude --continue 接着最近一次对话。真正需要大量输入的工作,留到回到电脑前再做;手机只负责「解锁卡点」和「确认完成」。
为什么要放在一台常开的新加坡整机上
这套方法的前提,是会话和通知脚本一直在同一台机器上运行。放在笔记本上,你一合盖出门,会话就停了,自然也不会有提醒;放在一台常开的 Mac mini 上,tmux 里的会话一直在,hook 随时能发出通知,你从手机、平板或另一台电脑连回去,看到的都是同一个现场。网络环境稳定、时区固定,排查问题也只需要盯一台机器。
SgRent 提供的就是这样的环境:新加坡家庭宽带原生 IP 上的实体 Mac mini M6,整机独享(一人一台物理机),支持 SSH 和 UU 远程连接,FileVault 全盘加密,退租时抹机重装。新客户整机租用月付 ¥699 起,季付、半年付、年付有折扣;已有 Mac 的也可以托管,¥299/月起。实际延迟取决于你本地的网络线路,建议先用一个月把这套手机接管流程跑通。
小结
- 会话固定在
tmux new -s claude,任何设备都用tmux attach -t claude接回 - 用
peek脚本先看最后几十行,不需要时不进会话 notify.sh读 hook 的 JSON,用curl推送到 ntfy 或你的 Telegram 机器人Notificationhook 管「它在等你」,Stophook 管「做完了」- 手机只做解锁卡点和确认完成,大段工作留给电脑
有问题可以在 Telegram 联系 @singatao,或直接看 价格与付款周期。
前往 panel.zumac.ai 订购 → · 查看方案与费用 · 帮助中心
