ego lite 新手教程
你和 AI Agent 在同一个浏览器里并行干活:Agent 在自己的隔离 Space 里跑浏览器任务,你的标签页始终是你的,还白捡它登录态——零配置、零成本。
1 这是什么
ego lite(ego lite) 是 citrolabs/ego-lite 开源项目背后的一套「人和 AI Agent 共用的浏览器」方案。官方一句话定义:"The fastest browser for AI agents to run browser automation"——但不是又一个自动化框架,而是一个从设计之初就让你和 Agent 一起用的真实浏览器。
一句话分清三个容易混淆的名字,这决定你理解整个项目:
| 名字 | 是什么 | 开源吗 |
|---|---|---|
| ego lite(浏览器 App) | 真正跑起来的 Chromium 浏览器,你日常也用,Agent 在里面开独立 Space | ❌ 闭源,但免费下载(macOS .dmg) |
| ego-browser(技能 + 运行时) | Agent 和 ego lite 之间的连接层:把浏览器暴露成一组 JS 工具(snapshot / fill / click / wait / navigate / capture) | ✅ 开源,本仓库主体 |
| ego(运行时绑定) | ego lite App 里内置的 globalThis.ego,ego-browser 通过它驱动浏览器 | — 内嵌在 App 里 |
这个 GitHub 仓库只含开源的外围——ego-browser 技能、Node 运行时、文档与基准,不含浏览器本体。浏览器本体是闭源 App。所以你想「从仓库跑起来看到浏览器」是理解错了:仓库是让 ego-browser 命令在你机器上能驱动 ego lite App 的那一层。
- 不是自动化框架库——browser-use、Vercel agent-browser 是「库」,需要另配一个浏览器去驱动,登录态还常带不过去;ego lite 自己就是浏览器。
- 不自带内置 Agent——ChatGPT Atlas、Perplexity Comet 那种「AI 浏览器」内置了专属 Agent、只许它开浏览器;ego lite 相反,任何外置 Agent CLI(Codex、Claude Code、Cursor…)都能通过 ego-browser 来接。
- 不会抢你的标签页——Agent 只在它自己的 Space 里干活,你的前台标签页、鼠标位置都不被动。
2 为什么需要它
在它之前,"让 Agent 帮我开网页操作"基本靠三类凑合办法,每类都卡在一个痛点:
| 老办法 | 能走到哪一步 | 卡在哪 |
|---|---|---|
| 自动化框架(browser-use / agent-browser) | 在无头/独立浏览器里跑脚本 | 它没有自己的浏览器,要另开一个驱动;你已登录的站点它登录态带不过去,常要重登/验证码 |
| AI 浏览器(Atlas / Comet) | 云端或独立 App 里用内置 Agent 上网 | 只认它内置的那个 Agent;你的真实登录态、扩展、书签进不去,人也没法在同一处接着操作 |
| 让 Agent 直接用你的日常浏览器 | 能碰到已登录页面 | 人和 Agent 抢同一批标签页:它一开新页、一动鼠标,你这边就乱套,你还不敢让它乱点 |
第二个关键设计是代码式(code-base)而非 CLI 式(command-base):ego-browser 暴露给 Agent 的是可直接调用的 JS 函数。Agent 把多步任务写成一段脚本一次执行,而不是陷入「调两条命令 → 看结果 → 再调两条命令」的往返循环——这正是它声称比传统 CLI 自动化更快、token 更省的根因(见第 11 节基准)。
3 核心流程
一次典型的 ego lite 浏览器任务是这样的——你完全不碰浏览器,Agent 在自己的 Space 里走完:
4 安装
ego lite 目前只在 macOS 上运行(Windows / Linux 在路线图)。挑你顺手的路径装,每一条都会把 ego-browser 技能装进你机器上各个 Agent 的技能目录。
| 方式 | 怎么做 | 适合 |
|---|---|---|
| 下载 macOS App | 下载 .dmg(Apple Silicon / Intel 各一版)打开安装 | 想直接开始;装完就带 skill |
| npx 装 skill | npx skills add citrolabs/ego-lite | 只想要 ego-browser 技能;首次跑浏览器任务时它会引导你装 App |
| 让 Agent 帮你装 | 把第 6 节那段话粘给 Agent | 最省心:Agent 读 install.md 自装 |
- ego lite App 和 ego-browser 技能是两码事,都要装。技能只是连接层,真正跑浏览器的命令
ego-browser由 App 提供——没装 App,技能是空壳。 - 首次启动会问你「要不要迁移 Chrome 数据」。选「是」,你的登录态、Cookie、扩展、书签就进了 ego lite,Agent 才能在没有登录摩擦的情况下操作你已登录的站点。首次引导会顺便把
ego-browser注册进 PATH(通常在~/.local/bin)。
三种路径对应的做法,细节如下。App 直装:
# Apple Silicon / Intel 任选其一,点击下载后打开即装
open https://cdn.ego.app/setup/macos/arm64/egolite-Y7MbxKIuhzFB.dmg # 或 x64 版
只装 skill(App 首跑任务时会提示你装):
npx skills add citrolabs/ego-lite
第一次跑浏览器任务前,确认 ego-browser 命令存在(找不到多半是 ~/.local/bin 不在 PATH):
command -v ego-browser
# 若找不到,临时补进 PATH 再试
export PATH="$HOME/.local/bin:$PATH"
command -v ego-browser
5 环境自检
装完 ego lite 且完成一次首次引导后,跑一个最小的 heredoc 验证运行时就绪:
ego-browser nodejs <<'EOF'
console.log('ego-browser ready')
EOF
# 打印出 ego-browser ready 即说明环境 OK
| 依赖 | 要求 | 说明 |
|---|---|---|
| 操作系统 | macOS(arm64 / x64) | ego lite 仅支持 macOS;其他平台走 lite.ego.app 手动装 |
| ego lite App | 已安装并完成首次引导 | ego-browser 命令由它提供;引导会把命令注册进 PATH |
| ego-browser 命令 | command -v ego-browser 能命中 | 找不到先补 ~/.local/bin 到 PATH |
| Chrome 数据迁移 | 首次引导时选是/否 | 选「是」则 Agent 继承你真实登录态;ego lite 只记录这个选项,不采集数据 |
要不要迁移 Chrome 数据?这是首次引导唯一的问题。要 Agent 操作你已登录的站点(刷后台、查账号、在你登录的页面里干活)→ 选「是」;只要它抓公开页面、你也不想把登录态共享给它 → 选「否」。之后随时可以在 ego lite 里改。
6 第一次实战
最简单的方式:把下面这句话粘给任何 Agent CLI(Codex / Claude Code / Cursor…),让它自己装并跑通:
Set up ego lite for me: https://github.com/citrolabs/ego-lite
Read `skills/ego-browser/references/install.md` and follow the steps to install ego lite.
或者你已经装好,自己在终端里用 ego-browser nodejs 的 heredoc 手动跑第一个任务。注意不要把脚本先写进 .js 文件再执行,直接喂给 heredoc:
ego-browser nodejs <<'EOF'
// 给整段任务命名一个 Space,后续轮次复用它
const task = await useOrCreateTaskSpace('inspect example page')
cliLog('task space id: ' + task.id)
await openOrReuseTab('https://example.com', { wait: true, timeout: 20 })
cliLog(await snapshotText())
EOF
第 6 节演示会告诉你发生了什么:
command not found,先读 skills/ego-browser/references/install.md 按流程装,不要反复重试同一个 heredoc。一旦确认用户装好(Agent 场景要让用户口头确认完成了首次引导),再回到原任务。一段真实点儿的操作,用 @N ref 点击 + 填表 + 截图验证:
ego-browser nodejs <<'EOF'
const task = await useOrCreateTaskSpace('login check')
await openOrReuseTab('https://github.com', { wait: true })
// snapshotText 会给每个元素标 [ref=N, loc=...],@N 只在最近一次快照内有效
const snap = await snapshotText()
cliLog(snap)
// 用快照里的 ref 点击、填表
await click('@21', { label: 'check login status' })
await fillInput('input[name="q"]', 'ego lite')
await pressKey('Enter')
// 语义工作流怀疑不准时,用截图核对
await captureScreenshot('/tmp/search-result.png')
cliLog('done')
EOF
7 产物结构
仓库里值得认识的目录与文件(理解了它,才知道「开源的到底哪几层」):
| 路径 | 用途 |
|---|---|
skills/ego-browser/SKILL.md | Agent 面向契约:ego-browser 技能的使用指南,含全部 helper、三种工作流、控制权交接规则 |
skills/ego-browser/references/install.md | 安装参考(装不上 / 用户要求装时才读) |
skills/ego-browser/references/video.md | 视频录制相关参考 |
skills/ego-browser/learnings/<site>/ | 站点经验包(manifest + notes + tools):把对某网站的成功操作沉淀成可复用技能,越用越快 |
package/ego-browser/ | Node helper 运行时源码:浏览器把 heredoc 派发给它执行;Playwright 风格 facade 在此定义 |
AGENTS.md | 仓库开发者的约定(不是本教程读者要读的) |
install.md | 根目录入口,指向 skill 的 install 参考 |
ego-browser nodejs(运行时注入 helpers)→ 浏览器 runtime / CDP → snapshot 或 DOM/AX 解析 → console.log 返回。Agent 脚本是「写在 heredoc 里的代码」,运行在 Node;真正碰 document / window 的代码要包进 js(...) 里,运行在浏览器页面。8 日常怎么用
ego-browser 通过 ego-browser nodejs <<'EOF' 喂 Node 脚本,helper 全部预加载进脚本作用域。常用 helper 按用途分组:
| 分组 | helper(节选) |
|---|---|
| Space | listTaskSpaces · useOrCreateTaskSpace · claimTaskSpace · handOffTaskSpace · takeOverTaskSpace · waitForAgentControl · completeTaskSpace |
| 导航 | openOrReuseTab · gotoAndWait · listTabs · switchTab · closeTab · pageInfo · ensureRealTab |
| 观测 | snapshotText · captureScreenshot · drainEvents |
| 鼠标 / 滚动 | scrollBy · scrollToBottomUntil · scroll · click · doubleClick · hover · dragMouse |
| 键盘 / 输入 | typeText · fillInput · pressKey · dispatchKey · uploadFile |
| 等待 | wait · waitForLoad · waitForElement · waitForNetworkIdle |
| 抓取 / 求值 | serverFetch · browserFetch · js · cdp |
| 输出 | cliLog(唯一终端输出口,结果必须经它)· help |
三种工作流,先选再动手
| 工作流 | 怎么用 | 适用 |
|---|---|---|
语义:snapshotText() + refs / locators | 读整页语义树(带 [ref=N, loc=...]),用 click('@N') / fillInput('@N', ...) 操作 | 普通网页(有 DOM 控件、语义结构完整的站点)——默认首选 |
视觉:captureScreenshot() + 坐标 / 键盘 | 看截图,用 click([x,y])、pressKey、typeText 按视觉操作 | 画布类、重度虚拟化的 App:Google Docs / Sheets、飞书、Notion、Figma、白板、地图 |
直连 DOM / CDP:js(...) / cdp(...) | 浏览器侧逻辑放一个 IIFE 里跑一次,或调 CDP 做 helper 没覆盖的原生操作 | 要浏览器状态、紧凑抽数、自定义遍历、原始 CDP 能力 |
- ✅
click/fillInput/hover等元素级 helper 接受统一选择面:原始 CSS、xpath=...、快照里的@N/ref=N、稳定loc=...,以及[x,y]视口坐标。 - ✅
js()返回求值结果本身,不是 JSON 字符串——别再用JSON.parse包它。 - ✅ 富编辑器(Docs/Sheets/Figma…)先做小写入探针再截图核对,别盲信 DOM 填表——很多虚拟化 App 的工具栏/隐藏 textarea 并不代表真正的文档内容。
- ❌ 任务结束必须
completeTaskSpace(name, { keep }),别把 Space 挂着。默认{ keep: false };只有用户明确要保留页面、需要人工在页面上操作、或结果没法用 URL/文件交付时才{ keep: true }。 - ❌
@Nref 只在最近一次snapshotText()内有效——每次快照都会重建 refMap。要长期引用用loc=...或直接写 CSS。
9 进阶玩法
9.1 Space 是多任务并行的工作区
每个 Space 是一个隔离浏览上下文,默认继承你的登录态。你可以同时开多个:Claude Code 在 10 个 Space 里并行补 10 条线索、Codex 在另外 5 个 Space 里并行抓 5 个竞品站——它们互不干扰、也偷不走你的前台标签页,鼠标停在原地。
Node 运行时每次 heredoc 结束就退出、不留状态,所以多轮任务每轮开头都用 useOrCreateTaskSpace(nameOrId) 复用同一个 Space;优先用返回的 task.id(数字)跨轮次续接,避免名字撞车。
9.2 控制权交接:人和 Agent 随时切换
Space 有归属模型(agent / agentDelegatedToUser / user),任意时刻只有一方握着控制权。任务需要你介入(登录、验证码、手动确认)时,Agent 调 handOffTaskSpace() 把控制权交给你并告诉你该做什么;你确认「继续」后它才用 takeOverTaskSpace() 拿回。你在浏览器 GUI 里也能随时接管——等于手动触发一次 handoff。
"user is controlling" 错误是整个任务的硬停,不是绕过去的小障碍——说明用户故意把浏览器拿回去了,多半是当前思路跑偏。正确做法是停下问用户并等待,绝不自动抢回控制权、不重试失败操作。9.3 站点经验包(Learnings)让 Agent 越用越快
skills/ego-browser/learnings/<site>/ 把对某网站的成功操作沉淀成「站点技能」——它负责记住"这个站怎么登录、哪个选择器稳定、抓这个数据该走哪条路",避免每轮都从头试错。官方路线图把它扩展成通用的「经验积累」:把每次成功动作提炼成可复用工具/工作流,同类任务声称最高快 5×。
9.4 本地模式无 GUI 也能验证 helper
# 直接在本机跑 helper bundle(不需要真实浏览器,调试 helper 本身用)
node dist/out/index.js <<'JS'
console.log(await page.info())
JS
# 覆盖加载的 skill 工作区(站点学习默认来自相邻的 skills/ego-browser)
EGO_BROWSER_AGENT_WORKSPACE=/path/to/skill ego-browser nodejs <<'EOF'
console.log(await site.skills())
EOF
10 不止于此
名字叫"ego lite 浏览器",但它能待的场景不止"自己开个页面让 Agent 点一点":
并行养号 / 竞品监控
多个 Agent 各占一个 Space,同时在不同站/不同账号下干活,互不串号、不抢标签页。
登录态白捡的日常操作
让 Agent 在你已登录的页面里查数据、填表、下单前核对——没有验证码重登摩擦。
抓取藏在 iframe 里的内容
官方称其 Snapshot 靠内核级定制,能稳处理嵌套 iframe——别的方案常在这类页面上崩。
让任何 Agent 都能上网
ego-browser 是连接层:Codex、Claude Code、Cursor 乃至自研 Agent,都能用同一套 JS 工具驱动它。
重活交给背景,人继续前台
你一边写代码,Agent 一边在背景 Space 里帮你跑完一个跨 10 页的调研流程,完成后把结论 cliLog 回来。
沉淀成你自己的站点技能
把对某个站的固定操作流程固化到 learnings,下次同类任务开场即用、不用重新试。
11 性能与成本
官方基准拿 ego lite 对 Vercel 的 agent-browser,在四个复杂浏览器自动化任务上对比。核心结论(数据出自项目 README,条件:四个复杂任务、同为 agent 驱动的浏览器自动化):
| 指标 | ego lite | 说明 |
|---|---|---|
| 完成速度 | 每个任务比 agent-browser 最高快 2.5× | 任务越难,差距越大 |
| Token 消耗 | 大幅更少 | 压缩语义输入 + 一次成段脚本,减少"命令往返"的上下文开销 |
| 调用次数 / 任务 | 少得多 | 代码式把多步合成一次输出,而非"调命令看结果再调命令" |
12 FAQ / 踩坑
跑 heredoc 报 command not found: ego-browser
ego-browser 没进 PATH。先 command -v ego-browser;找不到多半是 ~/.local/bin 不在 PATH,临时 export PATH="$HOME/.local/bin:$PATH" 再试。仍不行就重开 ego lite、走完首次引导,它会注册命令。
Agent 说页面登录态没带过去,要重登
报了 "user is controlling",任务推不动
takeOverTaskSpace() 拿回。不要自动抢、不要重试失败操作、不要 takeOverTaskSpace 自己偷抓——它没有归属检查,会硬生生从用户手里把浏览器夺走。
在 Google Docs / Figma 这类里填字进错地方
fillInput 或 DOM 选择器去填主编辑区。正确姿势:先做一次小写入探针,再用 captureScreenshot() 或导出/读回路径核对;字进错位置就切到「视觉工作流」——截图引导鼠标 + 真实键盘操作。
@21 之类的 ref 报 Unknown ref
@N 只在最近一次 snapshotText() 内有效,每次快照都重建 refMap。元素滚出视口、DOM 重渲染、或上次用了 scope:'only_within_viewport' 没盖到它,都会导致 Unknown ref。需要长期引用的元素用快照里的 loc=... 稳定值,或直接写 CSS 选择器。
页面像是没加载完 / 坐标操作错位
pageInfo()——如果 w: 0 或 h: 0,别继续坐标操作和截图,先切到真实标签页、刷新或用 CDP viewport 修正,再用 pageInfo() + captureScreenshot() 验证。等待类的 wait(...) / timeout 单位是秒,只有参数名以 Ms 结尾的才是毫秒,别填反。
在 js(...) 里写正则 / 用了顶层 return
\\d)或用 String.raw;js() 不接收函数参数、没有参数通道(别像 Puppeteer 的 page.evaluate(fn, ...args) 那样用)。浏览器侧要跑多步逻辑就包进一个自执行 IIFE 跑一次再返回,别拆成多次 js()。顶层 return 会被自动包 IIFE,嵌套回调里的 return 也可能误触发——复杂表达式干脆显式写 (() => { ... })()。
我想知道 Agent 到底执行了什么、在哪查日志
cliLog() 打到你终端。想在浏览器里跑代码留痕,用 js()/cdp()。本地调试 helper bundle 本身:node dist/out/index.js <<'JS' 直接读 stdin。带 --doctor 可诊断运行时。
我的平台不是 macOS,能用吗
13 合规与版权
开源边界先说清:仓库内容按 MIT 许可发布(含 ego-browser 技能、Node helper 运行时、文档与基准);ego lite 浏览器本体是闭源、但免费下载的独立产物。
仓库开发层面的规矩(对贡献者):main 分支只接受走 review 的 PR(连机器人定时推送都被规则集拒了,star 图因此挪到了独立分支)。想改代码自己用,从 package/ego-browser 走常规 Node 开发流(npm ci → npm run build → npm test)。
14 参考链接
| 资源 | 地址 |
|---|---|
| GitHub 仓库 | github.com/citrolabs/ego-lite |
| 官方文档 / 教程 / 工具参考 | lite.ego.app/document/ |
| 路线图(Windows / Linux) | lite.ego.app/roadmap |
| 下载(Apple Silicon / Intel) | README 顶部的 cdn.ego.app/setup/macos/... .dmg 链接 |
| 社区 | Discord · GitHub Discussions · X / Twitter |
| ego-browser 安装参考 | skills/ego-browser/references/install.md(仓库内) |
skills/ego-browser/SKILL.md、skills/ego-browser/references/install.md、AGENTS.md、package/ego-browser/README.md 与官方文档整理(2026-09-04)。ego lite 迭代很快,helper 清单、命令、基准请以 ego-browser 内 help() 和官方文档为准。