Grok 4.6 长工具约 30 秒后会话显示已停止,必须再发消息才会继续
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 401
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: zym
**客户端版本**: 0.1.76
---
## 这是什么问题
Cindy 里用 **Grok 4.6**(Codex harness)跑任务时,只要某一步工具执行超过大约 30 秒,界面就会变成「任务已停止」。后台那次调用往往还在跑,但 Agent 不会自己接着干。用户不发下一条消息,这条会话就会一直停在那里。
这对要跑几十秒到几分钟的查询、页面抓取、MCP 调用很常见。用户会以为 Agent 做完了或崩了,其实只是回合被收掉了。
## 用户能看见什么
1. Agent 正在跑一个明显还没结束的长操作(例如远程查询)。
2. 大约半分钟后,Cindy 显示任务停止,会话回到空闲。
3. Agent **没有**留下「还在跑、请稍候」之类的回复,聊天里像是突然收工。
4. 用户再发一条「怎么停了」或任意跟进,Agent 才会被唤醒,此时后台结果可能已经出来了,也可能已经没人接。
## 期望
长工具没结束时,会话应保持进行中。Agent 应续上同一次调用,直到成功、失败或真正超时,**不需要**用户再戳一句。
## 实际
长工具会先返回类似 `Script running with cell ID N` 的中间状态(表示这次调用被挂起、需要用 `wait` 按这个 cell 续跑)。
随后:
- 模型内部推理写了需要 wait / 还在跑;
- 但没有发出 `wait` 工具调用,也没有任何对用户可见的回复;
- 系统把这一轮标成任务完成(没有最后一条 Agent 消息);
- 后台工具稍后自己跑完,已经没有进行中的回合去接收结果。
## 什么情况下会发生 / 不会
有助于定位,所以写模型差异(这是故障当时用的模型,不是「随便贴当前环境」):
- **会发生:** Grok 4.6。抽查该会话里全部工具调用,都是 `exec`,从未发出过 `wait`。
- **同样协议下正常:** 其他会话里的 GPT-5.6 luna。遇到同一句 `Script running with cell ID N` 后,会立刻调用 `wait`,并带上对应的 cell id,任务继续跑。
协议本身要求:`exec` 返回 cell ID 之后必须立刻 `wait`,还在跑就继续 wait。Grok 这边这一步接不上。
另外观察到:`exec` 和 `wait` 不在同一类工具通道上(一个是 custom tool,一个是普通 function call)。luna 两条都会用;Grok 只打到 `exec` 那条。Grok 的基础说明里也搜不到 wait 续跑协议,luna 的说明里有。这些是本地会话记录里的对照,供排查,不是实现方案。
## 怎样复现
1. 用 Grok 4.6 开一个 Codex 会话。
2. 让 Agent 执行会超过约 30 秒的工具(远程查询、MCP、慢命令均可)。
3. 等到界面显示任务停止,且没有新的 Agent 回复。
4. 不要说话,观察会话是否会自己恢复(预期:不会)。
5. 再发一条任意消息,Agent 才会继续。
## 建议优先修的方向(现象层)
- 还有未结束的挂起 cell 时,不要把回合收成「任务完成」。
- yield 后如果模型空完成(没工具、没回复),应自动续 wait 或重试,而不是静默停住。
- 让 Grok 实际能调用到 `wait`(现在像是调不到或不会发)。
只改提示词、指望模型每次都记得 wait,不够。用户侧的结果是:长任务会假死。
---
## 提交时的任务环境
仅代表提交时快照,不一定是故障环境。OS 来自提交客户端本机,不含 SSH 远端主机;Harness / 模型来自当前任务。与运行环境无关的反馈可忽略本段。
**版本区域**: CN
**OS**: darwin arm64 (25.5.0)
**Harness**: Codex
**Model ID**: ` x-ai-grok/grok-4.6 `
**界面语言**: zh-CN
Contributor guide
Research direction
Start with the Codex harness flow described in the issue and reproduce the Grok 4.6 case using a tool run that exceeds 30 seconds. Trace how an exec result containing a cell ID is routed, how wait is exposed, and how an empty model turn is finalized; done means the session remains active and resumes until the tool succeeds, fails, or reaches a real timeout without user input.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- ai, backend-api-design
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100