Browser Recover
Automated recovery for OpenClaw browser environment failures.
Quick Start
When a browser tool call fails, follow this workflow:
- 1. Detect: Check if error matches browser environment issues
- Diagnose: Run
scripts/check_state.sh to inspect current state - Recover: Run
scripts/recover.sh to clean up - Retry: Execute the original browser operation ONCE
- Report: If still fails, output error summary and STOP
Error Pattern Matching
| Error Pattern | Likely Cause | Recovery Action |
|---|
| INLINECODE2 | Stale CDP connection | INLINECODE3 |
| INLINECODE4 on port 9222/18800 |
Port conflict |
recover.sh --clear-ports |
|
timeout during browser.start | Lock file conflict |
recover.sh --clear-locks |
| Multiple chromium processes | Zombie processes |
recover.sh --full |
|
Profile in use | Stale lock files |
recover.sh --clear-locks |
Recovery Scripts
check_state.sh
Diagnose browser environment without making changes.
Usage:
CODEBLOCK0
Output:
- - Browser process count and PIDs
- Port usage status (9222, 18800, custom ports)
- Lock file locations
- Recommendation (clean or no action needed)
recover.sh
Clean up stale browser resources.
Usage:
CODEBLOCK1
Actions:
- 1. Kills stale browser processes (chromium, chrome variants)
- Clears port conflicts (9222, 18800, configured ports)
- Removes lock files (SingletonLock, SingletonSocket, SingletonCookie)
- Clears cache directories (Cache, Code Cache, GPUCache)
- Waits 2 seconds for resources to release
Configuration:
- - Reads
~/.openclaw/config/openclaw.json for browser settings - Falls back to defaults if config not found
- See references/configuration.md for details
Retry Policy
Session-level tracking:
- - Maximum 2 recovery attempts per session
- Track failures to prevent infinite loops
- Stop after 2nd failure and escalate to human
Implementation:
CODEBLOCK2
When to stop:
- - 2nd recovery in same session fails
- Error is not browser-environment related
- System-level issues detected (permissions, resources)
- User explicitly requests manual intervention
Safety Constraints
DO:
- - Only clean OpenClaw-managed browser instances
- Verify process ownership before killing
- Check profile path matches INLINECODE12
- Log all actions to stderr for OpenClaw to capture
DON'T:
- - Kill user's personal browser processes
- Delete user profile directories (
~/.config/chrome, etc.) - Use
kill -9 without verification - Restart entire system
- Clean up other agents' browser instances without isolation
See references/safety.md for detailed guidelines.
Troubleshooting
If recovery fails or behaves unexpectedly:
- 1. Run
check_state.sh to diagnose - Check OpenClaw logs: INLINECODE16
- Verify configuration: INLINECODE17
- Review references/troubleshooting.md
- If unsure, escalate to human operator
Configuration
Scripts automatically read OpenClaw config for:
- - Browser debug port (
browser.debugPort) - Profile directory (
browser.userDataDir)
See references/configuration.md for:
- - Custom port configuration
- Multiple instance setup
- Platform-specific notes
- Environment variables
Example Workflow
CODEBLOCK3
Notes
- - All scripts log to stderr for OpenClaw to capture automatically
- No separate log files are created
- Scripts read OpenClaw config for browser settings
- Recovery is idempotent (safe to run multiple times)
- Maximum 2 recovery attempts per session to prevent loops
浏览器恢复
针对OpenClaw浏览器环境故障的自动恢复。
快速开始
当浏览器工具调用失败时,请遵循以下工作流程:
- 1. 检测:检查错误是否与浏览器环境问题匹配
- 诊断:运行 scripts/check_state.sh 检查当前状态
- 恢复:运行 scripts/recover.sh 进行清理
- 重试:执行原始浏览器操作一次
- 报告:如果仍然失败,输出错误摘要并停止
错误模式匹配
| 错误模式 | 可能原因 | 恢复操作 |
|---|
| Target closed | 过时的CDP连接 | recover.sh --kill-processes |
| 端口9222/18800上的ECONNREFUSED |
端口冲突 | recover.sh --clear-ports |
| browser.start期间的timeout | 锁文件冲突 | recover.sh --clear-locks |
| 多个chromium进程 | 僵尸进程 | recover.sh --full |
| Profile in use | 过时的锁文件 | recover.sh --clear-locks |
恢复脚本
check_state.sh
诊断浏览器环境而不进行任何更改。
用法:
bash
bash scripts/check_state.sh
输出:
- - 浏览器进程数量和PID
- 端口使用状态(9222、18800、自定义端口)
- 锁文件位置
- 建议(清理或无需操作)
recover.sh
清理过时的浏览器资源。
用法:
bash
完全恢复(默认)
bash scripts/recover.sh
特定操作
bash scripts/recover.sh --kill-processes
bash scripts/recover.sh --clear-ports
bash scripts/recover.sh --clear-locks
显式完全恢复
bash scripts/recover.sh --full
操作:
- 1. 终止过时的浏览器进程(chromium、chrome变体)
- 清除端口冲突(9222、18800、已配置端口)
- 移除锁文件(SingletonLock、SingletonSocket、SingletonCookie)
- 清除缓存目录(Cache、Code Cache、GPUCache)
- 等待2秒释放资源
配置:
重试策略
会话级跟踪:
- - 每个会话最多2次恢复尝试
- 跟踪失败以防止无限循环
- 第2次失败后停止并升级到人工处理
实现:
尝试1:浏览器失败 → 诊断 → 恢复 → 重试 → 成功 ✓
尝试2:浏览器失败 → 诊断 → 恢复 → 重试 → 失败 → 停止
何时停止:
- - 同一会话中第2次恢复失败
- 错误与浏览器环境无关
- 检测到系统级问题(权限、资源)
- 用户明确请求人工干预
安全约束
可以:
- - 仅清理OpenClaw管理的浏览器实例
- 终止前验证进程所有权
- 检查配置文件路径是否匹配 ~/.openclaw/browser
- 将所有操作记录到stderr供OpenClaw捕获
不可以:
- - 终止用户的个人浏览器进程
- 删除用户配置文件目录(~/.config/chrome等)
- 未经验证使用 kill -9
- 重启整个系统
- 在没有隔离的情况下清理其他代理的浏览器实例
详细指南请参见 references/safety.md。
故障排除
如果恢复失败或行为异常:
- 1. 运行 checkstate.sh 进行诊断
- 检查OpenClaw日志:~/.openclaw/logs/
- 验证配置:~/.openclaw/config/openclaw.json
- 查阅 references/troubleshooting.md
- 如果不确定,升级到人工操作员处理
配置
脚本自动读取OpenClaw配置以获取:
- - 浏览器调试端口(browser.debugPort)
- 配置文件目录(browser.userDataDir)
请参见 references/configuration.md 了解:
示例工作流程
markdown
用户:打开 https://example.com
助手:[调用浏览器工具]
错误:端口9222上的ECONNREFUSED
助手:检测到端口冲突。正在运行恢复...
[运行 check_state.sh]
[运行 recover.sh --clear-ports]
[等待2秒]
[重试浏览器工具]
成功:浏览器已打开 https://example.com
备注
- - 所有脚本都记录到stderr供OpenClaw自动捕获
- 不创建单独的日志文件
- 脚本读取OpenClaw配置以获取浏览器设置
- 恢复是幂等的(多次运行安全)
- 每个会话最多2次恢复尝试以防止循环