
打开终端敲下claude回车之后界面弹出来光标旁边那个小圆环或者点阵动画开始转。一分钟两分钟五分钟……它还在转。这时候你的耐心开始随着那个 spinner 一起消磨最终忍不住CtrlC强制中断然后怀疑自己是不是哪里没配好。这个场景我见过太多次不只是新手连用了很久 Claude Code 的人也会被它搞到崩溃。问题在于大多数人把 spinner 当成“死机指示器”一看到长时间旋转就认定是卡死了。实际上它更像汽车仪表盘的故障灯——它不是一个单一的信号在不同阶段、不同位置出现对应的是完全不同的含义。搞明白这些状态标识再顺着卡顿的根源一步步排查大部分“卡住”其实都能在五分钟内解决。这篇就专门把这个问题讲透Spinner 各状态标识代表什么、卡顿的真正来源有哪些、以及我从日志到配置的完整排查流程。不管你是刚装了 Claude Code 还没跑通还是已经写了不少会话但频繁被转圈打断这篇都能给你一套可以直接照做的方案。1. 先看懂 Spinner状态标识到底是什么很多人一遇到 spinner 转不停就急着找网络问题或者重装软件但第一步其实是搞清楚当前这个 spinner 到底在表达什么状态Claude Code 的界面里spinner 不是只有一个形态。它出现在不同位置配合不同文案代表的是不同的处理阶段。1.1 一个转圈符号的背后至少有四种状态第一种思考态thinking。这是最常出现的 spinner通常出现在 Claude 准备回答你的问题、或者正在规划下一步动作的时候。它表示请求已经发出去了模型正在把你上下文里的信息整合起来生成回应。这个状态的 spinner 一般转得平稳而且通常几秒到十几秒就会结束。如果你问的问题复杂、涉及长代码仓库分析它转个二三十秒也很正常。第二种工具调用态tool call。Claude Code 不只是聊天它会调用终端命令、读写文件、搜索代码库。当它决定要执行某个工具时界面会显示对应的动作说明旁边也会有一个 spinner 或者进度指示。这个状态有个特点它转圈的同时界面上往往能看到具体的工具名称比如Read、Glob、Bash之类。如果卡在这一步问题大概率出在工具本身——比如命令执行时间过长、权限不足或者工具返回的数据量太大。第三种流式输出态streaming。实际上 Claude 已经开始返回内容了你要看到文字一点点往外蹦这时候窗口里也有个类似加载的标识。如果文字一直在输出哪怕慢也不叫卡住。很多新手看着 spinner 没消失就心慌其实内容是正常生成的只是生成速度受网络和模型负载影响。第四种等待确认态waiting for input。Claude Code 在执行一些风险较高的操作前会请求你的确认。这个状态下 spinner 或者提示符是静止的它在等你输入y、回车或者别的指令。很多人没有注意到屏幕下方已经停在那里等确认了误以为又卡住了。把这四种状态分清之后你再回看“卡住”会发现很多情况其实没卡只是你没有一个判断标准。我的经验是先看屏幕上有没有新增的文字、有没有工具执行日志、有没有等待输入的提示符号。有就没卡三样全没有才需要往真正的问题方向查。1.2 最容易被误判的“伪卡住”场景有几个场景特别容易在社区里被当成“卡住”报告我逐个说一下你自己对照。场景一是“网络慢但没断”。模型请求已经发出去了服务器也收到了只是在慢慢生成。尤其当上下文里塞了大量代码文件时首字响应时间会明显变长。你盯着 spinner 看了三十秒其实它只是在等第一个 token一旦开始输出后面就快了。这种不算故障只能说是场景不优化。场景二是“等待确认但没有提示”。有时候 Claude Code 在执行一串操作后会在底部留下一行需要你确认的指令但因为终端滚动、窗口焦点不在、或者你切换了屏幕这行提示没进你的眼睛。这时候 spinner 确实停着不动但它卡在一个交互点上按一下回车或者输入确认指令就能继续。场景三是“扩展或插件在后台跑”。新版 Claude Code 支持一些 hooks 和扩展机制有些操作会触发后台脚本。这些脚本执行期间主任务的 spinner 会一直停留在等待状态。看起来像是整个程序卡住其实只是脚本卡住或者执行得很慢。这个问题在装了第三方扩展后尤其常见后文我会专门讲。搞清楚这些状态排查工作就成功了一半。下面我们再往深一层看那些真正让它转十几分钟甚至无限转下去的问题一般出在哪几个环节。2. 卡顿根源拆解为什么 Spinner 可以转半小时如果你已经排除了“界面只是停在等待确认”这类因素spinner 依然在转那就需要把问题往上追。根据我实际排查的经验卡顿根源通常集中在四个层面网络链路、上下文窗口、工具调用链、本地环境。2.1 请求超时最普通的元凶Claude Code 本质上是一个客户端核心逻辑都在远端模型服务上。它每轮对话、每次工具调用都需要和服务器交互。这个链路上任何一个环节出问题表现在本地就是 spinner 一直转。最常见的两个原因一个是网络延迟过高一个是请求被限流。延迟过高通常不是“断网”而是网络质量差、路由绕路、或者代理配置异常。请求发出去之后 TCP 连接能建立但数据包在网络上慢慢挤牙膏客户端迟迟收不到完整响应。限流则是另一个逻辑你在短时间内发起了太多请求服务端开始对你的请求排队或者拒绝客户端就进入了退避重试状态。表现同样是 spinner 长时间旋转而且往往发生在你连续跑了好几个任务之后。判断方法很简单观察一个 spinner 卡住时你手动访问其他网络服务是否正常。如果其他服务都很快那基本可以排除物理断网问题就更倾向于 API 链路本身比如请求超时参数设置得太短、或者区域内服务连通性本身就波动。我在下一步的排查方案里会给出具体的日志查看方式这里先记住一个结论绝大多数无限转圈都是请求没有拿到响应而不是程序死锁。2.2 上下文过载模型越聪明越迟钝这是我用 Claude Code 踩过最深的一个坑。你开了一个会话聊了几个小时中间塞了几十次文件读取、十来轮代码修改上下文指示条可能早就标黄甚至标红了。这时候你再让它干一个新任务它需要把整个历史从头到尾再“读”一遍响应速度会变得非常明显。spinner 看起来是卡住了其实模型在做一个巨大的计算。这种情况和网络问题有个明显的区别卡住之前你会感觉到前几轮回复已经变慢了不是突然就转半天。如果你回想起来这次会话从一开始就顺聊到后面越来越笨、越来越慢那基本就是上下文窗口快顶满了。解决思路不是修网络而是给会话“减重”。Claude Code 里提供了会话状态查看和上下文压缩的能力。/status命令可以直接看当前的上下文使用情况/compact可以压缩对话历史/clear则直接清空这个会话开启新的一轮。很多人不知道的是压缩后模型虽然会丢失一部分记忆细节但对于当前任务的执行能力反而会回升因为注意力不再被大量历史文本稀释。我的建议是一旦感觉响应明显变慢先做/compact而不是强行继续聊。这个操作至少能解决一半以上的“spinner 越转越久”问题。2.3 工具调用链看起来在转圈其实在反复折腾Claude Code 的一大卖点是能直接操作文件、执行命令。但这也是卡顿的高发区。当模型需要修改多个文件或者执行一条链式命令时它会先调用工具读取现状再根据结果决定下一步。这个过程中 spinner 是转一会儿、停一会儿、再转一会儿节奏不规律。真正的坑出在两种情况。一种是单个工具调用过慢比如Bash执行了一个需要几十秒甚至几分钟的命令界面就卡在那个工具步骤上。另一种是模型进入了纠错循环某个文件改了之后没达到预期它反复读取、修改、再验证每一步都产生新的工具调用。从外部看spinner 似乎一直在转但如果你盯着右侧的日志或者状态栏能看到它其实在内耗。这种卡顿不是故障而是策略问题。排查时最关键的是看“它正在执行哪一步工具调用”。如果工具步骤能看清那就能判断是命令本身太久还是模型陷入循环。前者直接中断并优化命令让模型执行更快的方式后者可以考虑重新描述需求加上更明确的约束条件避免模型反复试探。2.4 本地环境问题终端、网络、扩展的隐形干扰还有相当一部分卡顿和远端模型无关纯粹是本地环境在拖后腿。终端渲染是一个容易被忽略的坑。Claude Code 的界面依赖终端输出如果你的终端模拟器比较老、字体渲染有问题、或者开了很多不必要的插件它可能在渲染长文本时严重掉帧。表现就是 spinner 一直在转但你按任意键都没反应终端本身像冻住了一样。判断方法卡顿时随便敲几个字符看终端有没有回显或者切换一个更精简的终端再启动 Claude Code 对比。网络代理配置也是本地环境里的大坑。很多机器上配了代理工具Claude Code 启动时如果自动读取了这些环境变量请求就会走代理链路。代理本身不稳定或者规则配置错误会导致连接反复建立、反复失败客户端这边就无限重试。这个问题非常隐蔽因为系统是联网的你 ping 什么都通只有 Claude Code 的 API 请求在代理那儿被丢了。我会在第 3 部分给出直接的环境变量排查方法。最后是扩展程序。如果你装了第三方 Claude Code 扩展或者自定义 hooks这些代码会在特定事件触发时执行。它们如果写得不规范、或者在里面做了比较重的网络请求那每次触发都会让 spinner 多转很久。更麻烦的是这类问题往往没有明显的错误提示你只能暂时禁用扩展来做排除法。3. 排查方案一步步从“看见”到“解决”理论讲完了下面给一套我在实际中用的排查流程。这套流程不保证解决所有问题但足够覆盖绝大多数“spinner 一直转”的场景。核心思路是先判断真假再定位环节最后才动手修。3.1 先判断“真卡”还是“假卡”按下CtrlC之前先花十秒钟做三件事。第一件看屏幕。有没有新输出的文字有没有工具执行记录有没有等待确认的提示行屏幕上的内容在五秒内是否有任何变化哪怕只是光标闪烁、进度条走了一格都证明主程序还活着。第二件按一下回车或空格。如果界面之前正等着你确认这个操作可能直接让它继续如果没反应再试试Esc或CtrlC。不要一上来就强制杀进程那样会让当前任务的中间状态全部丢失而且凭空多了一堆需要清理的临时文件。第三件打开另一个终端窗口用ps或者任务管理器看 Claude Code 进程的 CPU 和网络占用。CPU 在动说明它在本地做计算比如处理大文件、压缩上下文网络在持续收发小包说明它正在和服务器通信。这两个指标能帮你把问题定位到“本地处理”还是“远端等待”。这三步做完你已经能区分大部分情况假卡就直接继续任务或者确认等待真卡再往下查。3.2 用内置状态和日志给 Spinner 做“体检”Claude Code 自带一些诊断手段整理一下基本够用。第一是/status命令。在会话里输入这个命令可以看到当前会话的状态信息包括上下文使用情况、当前模型、会话 ID 等。如果你对上下文过载有疑虑这是最直接的验证方式。第二是 verbose 和 debug 模式。启动时加上--verbose参数Claude Code 会把更多请求日志打印到终端--debug则输出更底层的调试信息。这些信息能让你看清每个阶段它到底在等什么:是在等模型响应还是在等某个工具命令执行完。第三是日志文件。Claude Code 通常会把你当前会话的请求和响应记录到本地日志目录里。在 Linux/macOS 上一般位于~/.claude/下面Windows 则在对应的用户目录里。日志会按会话生成文件名带有时间戳。如果你想知道刚才那次卡住发生在哪个环节直接打开最后一次会话日志搜索报错、超时相关的关键字非常高效。我第一次用这个方法定位网络问题时五分钟就找到了原因一条请求在重试队列里反复重发完全不是代码或环境问题。提示不同版本的 Claude Code命令参数和日志路径可能会有调整。拿到手先跑一下claude --help看一下当前版本的参数说明再对照排查比在网上搜索旧教程靠谱得多。3.3 五类高频原因逐个击破确认是“真卡”之后按下面的顺序依次排查。第一步查网络链路。用终端跑一下常用的连通性和延迟测试再检查环境变量。env | grep -i proxy或者 Windows 下echo %HTTP_PROXY%能看到有没有代理变量被设置。如果确认走了代理而代理又不稳定直接在启动 Claude Code 的终端里取消这些变量再试。注意有些代理设置是写入用户配置的可能影响所有新开的终端需要清理或者区分。第二步压上下文。进入会话运行/status看上下文占用比例。如果已经到 70% 以上先执行一次/compact然后再重新发起任务。很多人舍不得压缩会丢失信息但实际情况是任务执行效果通常比强撑着继续要更好。第三步看工具调用。如果卡在工具执行阶段检查它正在执行的命令。可以用CtrlC中断当前工具调用让它停下来但是会中断任务。更好的方式是在任务描述里加上更严格的步骤约束比如明确告诉它最多修改几个文件、不要反复验证。这能有效减少模型陷入自我纠错循环的概率。第四步查终端渲染。换一个轻量终端或者临时禁用终端里安装的主题、字体增强类插件重新启动 Claude Code 复现一次。如果问题消失说明是终端环境问题。这个案子的比例不高但我确实遇到过在旧版 Windows 终端里渲染长输出严重卡顿的情况换终端就好。第五步查扩展冲突。如果安装了第三方扩展或者自定义 hooks先全部禁用再运行。如果恢复正常就逐个启用定位问题源。扩展引起的问题经常伪装成“随机卡住”因为它只在某些工具调用事件触发时才发作。3.4 最后的兜底方案如果上面的步骤全走完问题还是复现那就需要动一些“重武器”了。先升级版本。claude --version看看当前版本然后对照官方发布说明确认是不是已知 bug。很多 spinner 卡顿的问题其实是某个版本的缺陷在新版本里已经修掉了。升级方式以你安装时的渠道为准npm 安装的就用对应包管理工具更新二进制安装的直接下载新版覆盖。再清理配置。把~/.claude/下的临时文件和过老的会话日志清理掉但别删settings.json。有时候积累了大量临时文件会影响启动和会话读取速度。清理前先备份防止误删配置导致登录状态丢失。最后才是重装。卸载、清干净残留目录、重新安装初始化一个干净环境。这一步能解决前几步查不出来的本地问题但代价是你要重新配置登录和偏好设置。所以我的经验是不到万不得已别走这步前面几步已经能覆盖 95% 的卡顿场景。4. 高频场景实战这些“卡住”都有同一个前兆Spinner 卡顿在不同的使用场景下表现和根源会有不小的差异。我把社区里最常遇到的几个场景单独拿出来说这样你对照自己的环境能更快锁定方向。4.1 VS Code 或桌面版环境下卡住很多人不是在纯终端里用 Claude Code而是装在 VS Code 扩展里或者用桌面版客户端。这类环境下卡顿出现的位置更隐蔽因为界面上除了 spinner还可能有编辑器组件、渲染层、扩展进程之间的交互延迟。这个场景最常见的问题有两个。第一个是新装扩展后没有重启窗口。VS Code 的扩展激活机制要求加载完成后才能正常通信如果你装了 Claude Code 扩展后直接打开会话可能遇到初始化流程没有走完、spinner 卡在加载阶段的情况。解法很简单CtrlShiftP执行 “Reload Window”让扩展重新激活。第二个是VS Code 自身的代理设置和系统代理不一致Claude Code 扩展走的是 VS Code 的网络配置如果这里配了代理但系统没有或者反过来就会出现请求发不出去的现象。检查 VS Code 设置里的http.proxy及其一致化配置通常能解决。还有一个容易被忽略的点桌面版客户端如果带 GUI 壳它渲染的长日志和终端模拟器不是同一套。你在桌面版里看到的 spinner 可能只是 UI 动画没刷新进程已经跑完了。这种情况下重点看工具栏或状态栏的错误提示不要只盯着 spinner 本身。4.2 Ubuntu/SSH 环境卡住Ubuntu 是 Claude Code 使用率很高的平台但有个特殊性很多人是在 SSH 远程会话里用的。SSH 环境下 spinner 卡顿的原因要额外加上几类。第一类是SSH 连接不稳定导致的伪卡顿。远程终端里运行 Claude Code如果你的 SSH 会话因为网络抖动进入半断连状态终端不会立刻断开连接而是僵在那里。你看到 spinner 静止等几秒又有反应很可能不是 Claude Code 的问题而是 SSH 本身在熬。排查方式是在 SSH 客户端里开启ServerAliveInterval之类的保活参数减少半断连概率。第二类是无图形环境下字体渲染缺失。某些精简版 Ubuntu 服务器没有安装完整的字体和终端渲染库Claude Code 界面里的 spinner 动画和状态提示可能显示异常但实际功能没受影响。如果终端出现乱码或者动画闪烁先安装基础字体包再设置NO_COLOR1环境变量关掉颜色输出能省掉不少渲染开销。第三类是资源受限。服务器上 CPU 和内存如果很紧张Claude Code 处理大任务时容易卡顿。用htop看一眼负载如果已经被其他进程占满那 spinnner 转再久也没用得先把机器资源腾出来。4.3 接入第三方模型后的特殊问题因为种种原因不少人会通过修改配置让 Claude Code 接入第三方模型服务比如 DeepSeek 这类兼容接口。这里头的坑比官方模型多得多。第三方模型服务大多是兼容接口但不代表所有细节都完全一致。你经常会看到一种情况spinner 转几下然后突然返回一个错误或者干脆一直转没有任何返回。原因通常是接口的流式输出行为不一致或者返回的响应格式里缺少客户端期望的字段导致客户端一直在等待更多的数据。这个场景的排查思路不太一样。官方模型下你怀疑网络链路第三方模型下你应该先怀疑协议兼容性。具体看日志里有没有解析异常、字段缺失之类的报错。另外第三方服务的上下文窗口往往比官方模型小同样的历史记录在官方模型里没事在第三方模型那里可能直接超出限制表现就是请求反复失败、无限重试。这种情况下唯一的办法就是更积极地压缩上下文甚至开启新会话。注意我建议优先使用官方模型和官方支持的方式去排查问题。第三方接入方式本身就是非标准路径出问题后维护成本高、可预期性低。如果你只是想在 Claude Code 里试验第三方模型先跑个小任务确认基本流程再上大项目也不迟。5. 常见问题速查表与避坑心得最后这部分是给你收藏用的。我整理了一份现象和原因对应的速查表遇到 spinner 卡住先对着查效率比从头分析快得多。5.1 现象与原因对照表现象可能原因快速验证方法推荐处理方式spinner 一直转无任何输出网络请求超时/未返回看日志是否在重试队列检查代理环境变量固定网络链路转动速度突然变慢上下文接近上限/status查看占用率执行/compact压缩历史转到一半停住不动等待用户确认输入看屏幕下方是否有提示按回车或输入确认指令卡在某个工具调用步骤工具命令执行过慢看右侧日志是否停在 Bash 调用优化命令或中断后重新描述任务启动阶段就卡住初始化/登录检查未完成看启动日志重装并确保网络畅通检查版本装了扩展后频繁卡住扩展或 hook 不兼容禁用所有扩展复现逐个启用找到问题源换了一个终端就没事终端渲染性能不足对比不同终端更换轻量终端或关掉增强插件只在前几轮很顺畅越往后越慢上下文累积过多观察响应时间是否逐步增大定期/compact或将任务拆分到新会话这张表的逻辑我在实际中验证过很多遍最核心的优先级永远是“网络链路”和“上下文占用”这两项。这两个原因加起来占了 spinner 卡顿场景的绝大多数排查时把它们排在前面能省下大量时间。5.2 几条长期好用的操作习惯分享几条我在踩坑之后养成的习惯属于从实战里磨出来的经验。第一别等到卡死才想起/compact。我的习惯是每完成一个阶段性任务就主动压缩一次上下文。比如写完一个模块、调完一个 bug就跑一次/compact。这样做的好处是模型始终在一个轻量状态下工作响应速度快也不容易在长会话中段突然出现“变笨”的卡顿感。这个习惯带来的收益比我预期的大得多。第二给终端设置一个自己能感知的“时间阈值”。二十秒内 spinner 转圈是常态三十秒以上就要开始关注超过一分钟基本可以断定有问题。我不建议对所有卡顿都快速中断那样会打断模型的执行节奏让任务反而更难完成。但也不能无限等下去。给自己定一个硬指标比如“超过 90 秒无任何增量输出就强制中断”能避免大量无效等待。第三日志是最好的老师。很多人一卡住就去搜索“Claude Code 卡住怎么办”然后看到一堆互相矛盾的方案。我强烈建议先去翻日志哪怕只是粗略扫一眼也能看到请求到底是被限流了、超时了、还是被工具调用拖住了。搜到的方案可以辅助但问题的第一手判断永远来自日志本身。第四优先级先看版本再改配置最后动重装。升级版本永远是最低价高回报的动作。很多 spinner 卡顿是客户端缺陷新版本会修。在没有确认版本问题前不建议去大规模调整配置那样容易引入新的变量。说起来Claude Code 这个工具本身是很耐用的大多数时候卡顿并不是程序坏掉了而是它正在处理一件超出你耐心预期的事。Spinner 不是一个让用户焦虑的故障灯更像是一种沟通方式它在告诉你“我在工作但可能需要你帮我把路修得更顺一点”。学会了读它你就不会再被一个转圈的动画牵着走了。我自己的体会是把排查方法当成习惯之后卡顿终于成了一件小事——看日志、判状态、压上下文五分钟内解决然后继续干正事。希望这篇能让你也有这种“不再慌”的感觉。