如何判断哪个 Claude Code、Codex 或 OpenCode 会话卡住了(不用挨个查看 10 个终端)

一套实用工作流,区分“等待审批”、“离线”和“其实还在运行”。先做轻量检查,有条件时再用适合手机的控制循环。

基于版本
CLI
0.2.17
预览 ref
a2c45c8

一个常见的尴尬场景:

好几个会话在跑(Claude Code、Codex、OpenCode)。你放下笔记本离开了一会儿。回来后感觉哪里不对。

不是“崩溃了”,而更像是:

  • 什么都没在动
  • 输出停在了半句话
  • 会话显示“运行中”,但不清楚它到底有没有在做事

麻烦的是开销:如果你有 5 到 10 个会话,光是搞清楚哪个需要处理就可能花掉 20 分钟。

这篇指南提供一套工作流,用来快速回答一个问题:

到底是哪个会话卡住了,卡在哪种状态?

要点

  1. 不要猜。先给“卡住”分类:
    • 等待审批 / 需要输入(常见情况)
    • 断开连接 / 离线(机器休眠、Wi-Fi 断开)
    • 忙碌(仍在运行,只是慢)
    • 出故障(崩溃 / 卡死)
  2. 从门槛低的检查开始(会话列表、最后活动时间、看一眼日志末尾)。
  3. 如果你想要一个适合手机的“现在有什么需要处理?”循环,Happier 是可以帮上忙的选项之一:它有全局收件箱(Inbox),并能为请求做通知路由。

问题(用大白话说)

大多数“卡住的会话”其实并没有卡住。

它们在等待。

  • 在等一个权限提示
  • 在等一个你没回答的问题
  • 因为笔记本休眠、客户端断开而在等

难就难在,终端不会告诉你“这个需要你处理”,只会告诉你“这个进程还在”。

而当你有多个会话时,代价不在修复,而在诊断。

常见做法及其取舍

  • 少开几个会话:有时可行,但真正的工作往往会并行化。
  • 每个仓库一个 tmux 窗口并统一命名:有帮助,但仍然要手动逐个查看。
  • 查看日志末尾(Codex 的 log_dir / OpenCode 日志):有用,但你还是得打开正确的那个。
  • Claude Code 内置的恢复 / 命名功能和 Agent Teams 视图:有用,但不能提供跨提供商的“待处理清单”。

如果你想在手机(或浏览器)上拥有这样的“待处理清单”,Happier 是一款开源应用,让你跨设备运行和编排 Claude Code、Codex、OpenCode 及其他代理。它把审批和请求集中在一个地方显示。

如果你第一次接触 Happier(它是什么、在哪里获取)

Happier 是一款面向 Claude Code、Codex 和 OpenCode 等编程会话的开源配套应用(移动端 / 网页 / 桌面端)。

工作流是:会话持续在你信任的机器(笔记本 / 服务器 / 开发机)上运行,你在手机上用 Happier 监控、审批并推进工作。

开始设置:

一份可行的诊断清单

1) 首先:它是在等你吗?

如果会话“卡住了”,先问:它是不是其实在等人做决定?

常见迹象:

  • 最后的输出是一个问题(“我该选哪个方案?”)
  • 会话在等工具权限
  • 会话处于需要用户操作的提供商特定模式(例如退出计划模式)

如果你用的是 Happier,全局收件箱在这里就派上用场了:审批请求和权限 / 用户操作请求都会出现在那里,通知路由会尽量把你带到真正需要处理的那个会话。

2) 其次:是不是机器休眠或 Wi-Fi 断开导致客户端断连?

如果你合上了笔记本、切换了网络,或者客户端进入了后台,进程可能没事,但你看到的画面已经过期。

常见的解决办法取决于你的工具:

  • 如果你用的是 SSH,Mosh 是针对这类“移动 + 休眠”问题省事的升级。
  • 如果工具是客户端 / 服务器式的流式界面,你可能需要重新连接或重新加载数据流。

(确实有客户端 / 服务器式工具出现“休眠后会话状态过期”问题的实际报告。这种情况下,解决办法通常是“重连并升级”。)

3) 再次:它是不是在忙,只是慢?

会话在以下情况下可能看起来像卡住了:

  • 正在处理一个很大的 diff
  • 正在跑测试
  • 正在等一个很慢的网络请求

这时你需要的是进度信号:

  • 最后一次工具调用的时间
  • 最后一次文件编辑
  • 最后一次 token 输出

如果拿不到任何进度信号,就把它当作出故障,进入下一步。

4) 最后:把它当作卡死处理(并选择安全的干预方式)

如果你确信它真的卡死了:

  • 优先选择低风险的中断(“停下来,总结一下你进行到哪了”)
  • 然后重启或恢复

如果你在意保留会话身份,就不要盲目杀进程。如果有可恢复的机制,就用 resume / attach 路径,而不是“新开一个再粘贴上下文”。

手机优先的“待处理清单”工作流(Happier)

如果你运行着很多会话,又不断在诊断上浪费时间,Happier 带给你的主要价值不是“更强的功能”。

而是更少的寻找:

  • 收件箱回答:“现在有什么需要我处理?”

  • 通知直接跳转到正确的会话(以及正确的服务器配置)

  • 需要处理(Needs attention)把卡在等你的会话归到一起,其余会话就能继续运行,你不必逐个检查

用提醒把会话暂时放到一边

有些会话并没有卡住,只是接下来两个小时不需要你操心。从 0.2.13 开始,你可以有意把它们放到一边:

  1. 打开会话行的菜单,选择提醒我(Remind me)。
  2. 选择一个建议时间、选择日期和时间…(Choose date and time…)或已保存的预设。

设置提醒会把会话标为已读,并在到时间前把它移出需要处理。到时间后它会回到那里,即使期间没有任何新动静。从 0.2.16 开始,打开会话会清除已到期的提醒(如果你更想手动清除,可以关闭设置 → 会话 → 打开时清除提醒(Settings → Session → Clear reminders on open))。提醒改变的是 Happier 应用内的待处理状态,不会发送推送。详情见会话已读状态文档。

不停下忙碌的会话也能纠偏

如果会话正在忙但方向不对,在代理支持引导的情况下,立即插入(Steer now,0.2.16)会在不中断当前回合的情况下把你排队的消息交给代理。立即发送(Send now)仍然会中断。参见引导。

在电脑前时让手机保持安静

同样是 0.2.16 的新功能:一个可选的通知设置,会在 Happier 于电脑上处于焦点时静音手机推送。如果无法确认电脑焦点,推送仍会发到手机上。

坦诚的取舍:这取决于机器仍然可以访问。

故障排查

我分不清它是卡住了还是在等待

逼它给出答案:

  • 发一条简短消息:“你是在等我的输入,还是还在运行?”
  • 如果工具支持,请求一行状态更新

我总是跟丢会话

用下面这些模式之一:

  • 每个任务一个工作树 / 一个会话
  • 会话和仓库命名一致
  • 一个统一的“待处理清单”(收件箱、需要处理、通知)
  • 对已读但想稍后再看的会话设置提醒我时间

相关指南

mobilesessionsclaudecodexopencodetroubleshooting
最后更新: 2026-10-26