ego-lite 报 user is controlling 错误?为什么 Agent 绝不能自动重试

发布时间:2026/9/15 17:30:08
ego-lite 报 user is controlling 错误?为什么 Agent 绝不能自动重试 ego-lite 报 user is controlling 错误为什么 Agent 绝不能自动重试【免费下载链接】ego-liteThe fastest browser for AI agents to run browser automation, built for sharing your logged-in browser state with your AI agents, like Codex or Claude Code, without disturbing you. Zero cost, zero config.项目地址: https://gitcode.com/GitHub_Trending/eg/ego-liteego-lite 是一款专为 AI Agent 打造的浏览器你的 Agent如 Codex、Claude Code在自己的隔离 Space 里执行浏览器自动化复用你已登录的浏览器状态而不会打扰你正在浏览的标签页。零成本、零配置。当 Agent 操作浏览器时如果突然报出user is controlling错误很多新手会本能地让 Agent 重试——但这恰恰是最危险的做法。本文讲清楚这个错误到底是什么、为什么它是硬停止以及正确的恢复姿势。这个错误到底意味着什么user is controlling即错误码EGO_TASK_SPACE_USER_IN_CONTROL表示你正在手动接管这个任务 Space 的控制权。用户可以在浏览器 GUI 里随时接管效果等同于 Agent 主动调用了handOffTaskSpace。此时浏览器端会暂停所有 Agent 发起的指令任何点击、填写、截图等操作都会直接失败。关键点在于语义这不是网络抖动、不是元素没加载出来而是人主动把浏览器拿了回去。它通常出现在两种场景Agent 的操作走向偏离预期你手动介入纠正任务需要人工干预登录、验证码、手动确认Agent 已把控制权交还给你。在 SKILL.md 的 Control handoff 章节中官方措辞非常直白A user is controlling error is a hard stop on the whole task — not an obstacle to route around.翻译过来就是这是整个任务的硬停止不是一个可以绕过去的障碍。为什么 Agent 绝不能自动重试1. 重试等于违背用户的明确意图错误产生的瞬间浏览器控制权已经在用户手上。此刻 Agent 每多试一次都是在抢回用户刚拿走的控制权——这在语义上就是把人推开、继续干自己的事。官方文档明确说The only thing you may do isask the user and wait.唯一允许做的就是询问用户并等待。Agent 硬推任务目标才是这里真正的失败。2. 自动夺回控制权会打断用户的操作takeOverTaskSpace没有任何所有权检查调用就会立刻把浏览器从用户手里夺走。如果 Agent 在报错后自动调用它用户可能正在 Space 里手动修正页面状态结果被 Agent 一把抢走——这正是这个错误想避免的事故。3. 错误码是稳定契约重试策略是内置的ego-lite 的运行时把错误分成两类可重试的瞬时错误如元素引用失效和硬停止错误。user is controlling与task space inactive一起被归类为hard stop源码中的判断逻辑在 ego-errors.tsfunction isEgoHardStopCode(code: string | undefined): boolean { return ( code EGO_TASK_SPACE_USER_IN_CONTROL || code EGO_TASK_SPACE_INACTIVE ); }而且错误信息本身就是给 Agent 的行动指南ego-errors.ts里面写着do not retry and do not take control back on your own不要重试也不要自行夺回控制权等用户明确说continue后再takeOver恢复。4. 运行时会替你降噪重试只会产生噪音一个容易被忽略的细节如果 Agent 用循环 try/catch 不断重试每次迭代都会打出同样的报错日志被刷屏。ego-lite 的输出管道专门为此设计——在 output-sink.ts 中硬停止错误只会被记录一次运行时结束时丢弃整个输出缓冲只留下这一条干净的指导信息。换句话说框架层面也在帮你把重试风暴压缩成一句话停下来问用户。正确的恢复姿势三步握手✅Agent 交出控制权任务遇到登录、验证码、需要人工确认时Agent 应主动调用handOffTaskSpace并告诉用户具体要做什么。✅用户操作并确认你完成人工操作后通过Continue / Finish task选项或一句 continue 明确确认。✅Agent 夺回控制权只有收到明确确认后Agent 才在新的一轮脚本里调用takeOverTaskSpace继续任务若用户选择结束则用completeTaskSpace(nameOrId, { keep })收尾。相关的完整规则可参考 skills/ego-browser/SKILL.md错误处理实现位于 package/ego-browser/src/ego-errors.ts。新手常见问题Q报了这个错Agent 换个方式继续干行不行不行。绕开和重试一样都属于硬停止被违背的情形。等待用户明确确认是唯一合法路径。QAgent 交还控制权后一直等会不会卡死不会。waitForAgentControl是只读的阻塞轮询绝不夺取控制权只在当前脚本内等待自己发起的交还跨轮次的恢复靠用户确认后的一轮新脚本。Quser is controlling 和任务 Space inactive 有什么区别inactive表示用户已接管并结束了任务该 Space 不再分配给 Agent两者同为硬停止都需要用户明确说继续才能恢复inactive 场景用claimTaskSpace接管。总结user is controlling是用户主动接管的信号不是技术故障Agent 的正确反应只有三个字停、问、等自动重试或自动夺回控制权 违背用户意图是真正的失败恢复的唯一路径用户明确确认 →takeOverTaskSpace→ 继续任务。把这个错误理解成用户在举手示意而不是系统抛出的异常你和 Agent 的协作就会顺畅得多。【免费下载链接】ego-liteThe fastest browser for AI agents to run browser automation, built for sharing your logged-in browser state with your AI agents, like Codex or Claude Code, without disturbing you. Zero cost, zero config.项目地址: https://gitcode.com/GitHub_Trending/eg/ego-lite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考