| name | task-strategy |
| version | 0.1.0 |
| trigger | 做不到|不行|失败|超时|被拒绝|无法完成|怎么办|替代方案|降级|fallback |
| fast_path | true |
| description | 通用任务降级策略:当工具不可用、操作被拒绝、或任务超时时,提供标准的降级路径和替代方案选择,避免死循环。 |
任务降级策略
当工具调用失败、操作被拒绝、或连续尝试未果时,按本策略处理。
核心原则:三次失败即停止
同一目标、同一方法连续失败 3 次 → 停止尝试该方法,切换到降级路径或上报用户。
绝不做:
- 反复用相同参数调同一个工具
- 换个"壳"做同样的事(如 shell 被拒 → delegate_coding 跑相同命令 → 写脚本让用户手动跑)
- 无限轮询一个不会变化的状态
降级决策树
1. 工具调用返回错误
错误类型判断:
├── "未连接/不可用/not found" → 该工具的后端服务未就绪
│ ├── 告知用户具体哪个服务未启动
│ ├── 提供启动命令建议(如有)
│ └── 问用户是否要换方案
├── "授权被拒绝/denied" → 用户不允许此操作
│ ├── 不要用其他工具绕过(这违背用户意愿)
│ ├── 说明为什么需要这个操作
│ └── 提供不需要该权限的替代方案
├── "超时" → 操作耗时超出限制
│ ├── 不要立即重试相同操作
│ ├── 分析超时原因(网络?任务太重?)
│ └── 提供简化方案或分步方案
└── 其他错误 → 看错误信息决定
├── 参数错误:修正参数重试 1 次
└── 未知错误:上报用户
2. 浏览器操作失败
browser_session 失败:
├── "扩展未连接" → 提示用户检查扩展 → 如无法修复 → agent-browser 兜底
├── "会话不存在" → 重新创建 session
└── 其他 → 上报
browser_page 操作失败:
├── ref not found → 重新 snapshot → 用 selector 缩小范围 → eval 直接 DOM 操作
├── 页面未加载 → wait(load) → 再试
└── 连续 3 次 → 停止,上报 blocker
3. Shell 授权被拒
shell 被拒绝后:
├── 评估:这个命令是否真的必需?
│ ├── 是读取信息 → 用 file_read / web_fetch / rg_search 等替代
│ ├── 是安装软件 → 告知用户需要手动安装,给出命令
│ ├── 是执行脚本 → 先用 file_write 写到文件,告知用户手动执行
│ └── 是高危操作 → 解释风险,让用户自己在终端执行
├── 绝不做:
│ ├── 用 delegate_coding 跑相同命令(同样需要 shell 权限)
│ ├── 换个工具试图绕过授权(eval/background_task 等)
│ └── 反复请求授权
4. delegate_coding 超时/失败
delegate_coding 失败后:
├── 超时 → 任务太重,拆分成小步骤自己做
├── Agent 不可用 → 自己用 file_write + shell(如有权限) 完成
├── 绝不做:立即重试相同的 delegate_coding 调用
5. computer_use 不可用
cua-driver 未连接:
├── 不要反复尝试 screenshot
├── 如果目标是操作浏览器 → 用 browser 工具替代
├── 如果目标是执行命令/查进程/管理文件 → 用 shell 工具(shell 完全独立于 cua-driver,始终可用)
├── 如果目标是操作 GUI 应用(非浏览器)→ 告知用户需要先启动 cua-driver
├── 重要:cua-driver 未连接不影响 shell、file_read/write、web_search 等工具的使用
响应模板
当需要上报 blocker 时,用以下结构:
**当前状况**:[一句话说明卡在哪]
**已尝试**:[列出已试过的方法]
**建议**:[给出 1-2 个可行的替代方案,让用户选择]
不要:
- 长篇大论解释技术细节
- 自行决定用另一个复杂路径继续
- 假装任务完成了