JS Eyes 技能综合评估
核心用法
JS Eyes 是一套面向 OpenClaw 的浏览器自动化技术栈,通过 Node.js 服务端与浏览器扩展的 WebSocket 连接实现远程网页操控。核心工作流包括:
1. 基础部署:在 {baseDir} 执行 npm install,将 {baseDir}/openclaw-plugin 注册到 OpenClaw 的 plugins.load.paths,并启用 js-eyes 插件入口
2. 安全配置:必须配置 ~/.js-eyes/config/config.json 启用 security.allowRawEval: true 以获得完整功能(虽被标记为不安全,但这是该技能的标准部署模式)
3. 浏览器连接:安装浏览器扩展后,通过 Native Messaging 主机或手动输入 Server Token 建立与服务端的认证连接
4. 动态扩展:支持通过 js_eyes_discover_skills/js_eyes_install_skill 安装注册表技能,或通过 js-eyes skills link <path> 热加载外部自定义技能
显著优点
- 零重启热加载:技能文件变更通过 chokidar 监听自动生效,无需重启 OpenClaw
- 双轨技能管理:区分注册表技能(需审批/启用流程)与外部技能(直接 link/unlink)
- 细粒度安全策略:支持 egress 白名单、工具级 consent 策略、会话级权限控制
- 安全策略热重载:
egressAllowlist、toolPolicies等配置可实时生效(500ms 内) - Native Messaging 集成:浏览器扩展可自动同步服务端 token,无需手动复制粘贴
潜在缺点与局限性
- 强制 raw eval:标准部署需开启
allowRawEval: true,本质上放宽了代码执行安全边界;关闭后将禁用execute_script*等核心工具 - Node.js 版本锁定:要求 Node.js ≥22,旧环境需升级
- 浏览器扩展分离安装:扩展不随技能包分发,需单独从 GitHub Releases 获取
- 完整性校验刚性:
.integrity.json不匹配时技能加载失败,手动修改需重新安装 - 工具注册限制:全新工具名在运行时被 OpenClaw 拒绝需重启解决(
failedDispatchers场景)
适合人群
- 需要将 LLM 与浏览器自动化结合的技术用户
- 愿意承担
allowRawEval安全风险以换取完整脚本执行能力的场景 - 需要开发自定义浏览器自动化技能的开发者(参考
js-hello-ops-skill模板) - 对细粒度 egress 控制和审计日志有合规需求的企业用户
常规风险
| 风险类别 | 具体表现 | 缓解措施 |
|---------|---------|---------|
| 代码注入 | `allowRawEval` 允许执行任意 JavaScript | 绑定 loopback 地址、启用 token 认证、禁用 `allowAnonymous` |
| 凭证泄露 | Native Messaging 或 token 配置不当 | 使用本地 launcher 安装(避免 `npx`)、定期轮换 token |
| 越权访问 | egress 策略未限制敏感域名 | 配置 `egressAllowlist` 和 `sensitiveCookieDomains` |
| 供应链攻击 | `npx` 安装时依赖 npm 注册表 | 优先使用本地 `bin/js-eyes-native-host-install.*` 脚本 |
| 热加载竞态 | 并发编辑技能文件导致不一致 | 依赖 `SkillRegistry` 的 300ms debounce 机制 |
部署建议
生产环境建议启用 verifyExtraSkillDirs: true 并定期运行 js-eyes doctor 审计态势;开发环境可利用热加载加速迭代,但需关注 failedDispatchers 提示的强制重启场景。