Claude Code 部分执行后卡死:6 种卡死形态 + 分清「上下文 / 工具挂 / 静默 abort」

做完 60% 不报错也没完成消息——三种形态:context 满、工具挂、静默 abort,每种的诊断和恢复路径不同。

Claude Code 打了 5 步任务的 1、2、3 步——然后没了。没报错、没”我做完了”、就一个闪烁光标。等 60 秒,再等一分钟,还是没动静。活儿没完,agent 没说为什么停,重 prompt 它走到第 4 步又卡在第 5 步。

「部分执行后卡死」有三种不同形态、不同修法:context 耗尽(agent 静默截断)、工具挂(Bash / Test 调用没回)、静默 abort(agent 以为完了但其实没)。不要硬撑 stuck session——分清哪种、存状态、从 STATUS.md 重启。

常见原因

按命中率从高到低:

1. context 接近满,agent 静默摘要丢了 plan

agent 的 plan 在它 context 里。context 满时 auto-summary 把 plan 压掉了——agent 做完它”记得”的,因为压缩后的视角里任务已经完了,所以不出输出。

如何判断:卡之前 session 很长 + 工具调用多。restart + 全 context 后同 prompt 能完成——就是 context 不是任务的问题。

2. 工具调用挂了,agent 等不存在的 callback

pnpm test 启动了但永远不返回(测试 setup 死循环、卡住的 dev server)——Claude 的工具层阻塞等,没输出到你这里。

如何判断:看进程 ps aux | grep -E "node|python|pnpm"——活着但不干活(无 CPU、无输出)——kill 掉 agent 往往就继续。

3. 流式连接静默断了

WiFi 抖动、VPN 重连、笔记本休眠——server 的流式响应断了。Claude 后台还在跑但你看不到输出。

如何判断:网络条件不好。试 /resume(如果客户端支持),或 restart——工作通常从 server 侧状态继续。

4. Agent 的 plan 自然结束,但实际没完

agent 内部 3 步 plan,你要 5 步。第 3 步后它认为完了就不输出。Plan 和现实分叉。

如何判断:问「你完成 task 了吗?列出剩余步骤」。它说”是”但你看到没完成——它的 plan 比你的小。

5. 输出被截断,结尾「完成」消息丢了

某个流上限剪掉了 Claude 的最终总结。代码应用了,你没看到收尾。agent 真完了,你不知道。

如何判断git status + git diff 显示活儿确实完了——卡死是表现问题不是实际问题。

6. 长思考 vs 真挂——重启前先分清

某些思考步骤 30+ 秒不出输出。过早 restart 就浪费在跑的活儿。

如何判断:没输出等 60 秒再判 stuck。客户端显示”thinking”指示——模型还在跑。

最短修复路径

按收益从高到低。Step 1 诊断形态,对应修法就出来了。

Step 1:等 60 秒 + 诊断

1. 没输出等 60 秒(怕是长推理步骤)。
2. 跑 `git status` 和 `git diff`——活儿**真的**没完吗?
3. 看进程:`ps aux | grep -E "node|python|pnpm|vitest"` 有没有挂的?
4. 看 top / 活动监视器——有什么在烧 CPU 吗?

diff 显示没完 + 进程空闲 + 60 秒以上无输出——真卡了。

Step 2:重启前存状态

# 快速 checkpoint commit
git add -A && git commit -m "wip: stuck during step N"

# 写本来下一步该做什么
cat > STATUS.md <<EOF
任务:<一句话>
已完成:步骤 1-3(改了文件 A、B、C)
还需要:步骤 4-5(要改 D、E)
最后可见动作:<Claude 在做什么>
EOF

这是 resume 点——盲重启比写这两分钟成本高。

Step 3:必要时 kill 挂的进程

# 找挂的工具进程
ps aux | grep -E "node|python|pnpm|vitest" | grep -v grep

# kill 孤儿(替换 PID)
kill -9 <PID>

# 凶猛清理
pkill -9 -f vitest
pkill -9 -f "pnpm test"

kill 挂工具后 session 解锁——你找到了原因,记录这工具未来不要在同 session 组合用。

Step 4:用 STATUS.md 作 handoff 重启

新 session:

读 STATUS.md,接着任务做。
对照 `git log` 确认哪些已 commit。
不要重做已完成的,从 "remaining" 开始。

新 session 对 snapshot 是全 context——无衰减风险。

Step 5:同一步反复卡就拆它

某步反复 stall 说明它太大或有问题子任务,拆:

原 step 5:「更新所有 consumer 并跑集成测试」

拆成:
  5a:更新 src/api/users.ts。停。
  5b:更新 src/api/orgs.ts。停。
  5c:跑 `pnpm test src/api/users.test.ts`。停。
  5d:跑 `pnpm test src/api/orgs.test.ts`。停。

每子步小到不触发那个失败模式。

Step 6:工具挂就你自己先跑

pnpm test 在 Claude 那里一直挂——你自己在另一个终端跑一次。跑通后告诉 Claude 跳过这一步用你给的结果:

我自己跑了 `pnpm test`,输出如下。
用这份输出,不要自己跑测试命令。

[贴]

不可靠工具的绕道方案,不用放弃 agent。

预防建议

  • 每个大步后让 Claude 写 STATUS——三种 stuck 形态都能存活
  • 任务卡在 1 小时内 agent 时间——小 checkpoint 更耐操
  • 在稳定网络跑;移动热点是流式连接的隐形杀手
  • 别在同 session 组合多个长跑工具——测试和 edit 分开
  • 熟悉每个工具的典型时长,分清慢和挂
  • 反复挂的工具就你自己跑,把结果喂给 Claude

相关阅读

标签: #排查 #Claude Code #排查 #部分执行