ego (lite) is just a browser, ego is your personal agent across devices.
Join waitlist
English

Quick start

Install ego lite in five minutes and run your first browser task from your Agent CLI.

llms.txt

Install ego lite in five minutes and run your first browser task from your Agent CLI.

System requirements

  • macOS 12.0 or later
  • One of: Claude Code, OpenAI Codex, Cursor, Continue, Gemini CLI, Hermes Agent, OpenClaw, Opencode

Install

Pick whichever option suits you.

Download the macOS installer

Double-click to install. On first launch, ego lite scans your machine for installed Agent CLIs and writes the ego-browser skill into each of their skill directories.

Install from the command line

Run this in any Agent CLI terminal:

curl -fsSL https://lite.ego.app/install.sh | sh

The script installs the ego lite browser and the ego-browser helper, and registers the skill in every Agent CLI on your machine.

The first time ego lite launches, it asks one question: import your browser data? Then select the corresponding browser to confirm, and your logins, cookies, extensions, and Profile come along so your agents can reuse them.

Your first task

In your Agent CLI, type / to open the skill picker, choose /ego-browser, and describe the task in natural language:

/ego-browser follow @ego_agent on x.com for me

After loading the skill context, the agent emits and runs the following:

ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('follow-ego-agent')
await openOrReuseTab('https://x.com/ego_agent', { wait: true })

await snapshotText()
// The snapshot returns @ego_agent's profile page — a SPA with hundreds of refs.
// The Follow button has accessible name "Follow @ego_agent". This run, its ref is @92.

await click('@92')
await wait(3)  // Give X three seconds to commit the follow and re-render

await snapshotText()
// After click, the same button's label goes from "Follow @ego_agent" to "Following @ego_agent". The ref doesn't change.

cliLog('Done. @ego_agent followed.')
EOF

Two things in this code are worth noting:

  • The agent acts on the ref returned by snapshotText() (@92), not on a CSS selector. The ref maps to how a person perceives the element (the button's accessible name really is "Follow @ego_agent"), so it survives whatever class names X rotates. Refs are assigned per snapshot, so the number you see in practice won't match the example.
  • The agent uses the X login imported from your Chrome. No re-login, no pasted cookies, no OAuth flow. On the first snapshot, the Follow button is already in a clickable state because you were already signed in.

Watch the agent work

Once the task starts, open ego lite and click the Space panel in the sidebar. The running Space is highlighted; click into it to watch the agent in real time: navigation, scrolling, snapshots, data extraction.

Two buttons sit at the bottom of the Space view:

  • Take over. Take the current tab back from the agent and drive it yourself.
  • Stop. End the task immediately.

Operate a page

click is one of many ref-based operations. fill, type, pressKey, hover, and select all work the same way: snapshot once, pick the target ref, then act on it. Here's a login flow:

ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('example-login')
await openOrReuseTab('https://example.com/login', { wait: true })

await snapshotText()
// The snapshot looks roughly like:
//   @3 [input type="email"]    placeholder="Email"
//   @4 [input type="password"] placeholder="Password"
//   @5 [button type="submit"]  "Continue"

await fill('@3', 'user@example.com')
await fill('@4', 'your-password')
await click('@5')
await waitForLoad()

const tab = await currentTab()
cliLog('Logged in:', tab.url)
EOF

If you imported your Chrome data during onboarding and Chrome was already signed into this site, openOrReuseTab takes the agent straight to the logged-in page. The snapshot comes back with the dashboard instead of the login form, and the agent can skip the form altogether.

Run multiple tasks in parallel

Every Space is named by what you pass to useOrCreateTaskSpace. Different names don't conflict, so you can run them at the same time:

# Claude Code in one terminal
ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('leads-enrichment')
await openOrReuseTab('https://www.linkedin.com', { wait: true })
EOF
# Meanwhile, Codex in another terminal
ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('qa-regression')
await openOrReuseTab('https://staging.example.com', { wait: true })
EOF

Next steps