How to Use the ego-browser Harness as a Module in Node.js
Install the ego-browser-v2 package, import installEgoSdk from the entry point, and invoke it to expose Playwright-style helpers on globalThis or a custom target object.
The citrolabs/ego-lite repository provides a pure JavaScript/TypeScript module that integrates browser automation directly into Node.js applications without requiring the CLI. By using the ego-browser harness as a module, you gain programmatic access to high-level CDP wrappers, automatic session handling, and Playwright-compatible facades. This approach requires Node.js version 22 or higher and installs via the package name ego-browser-v2.
Installation and Basic Setup
Install the Package
The module is published to npm as ego-browser-v2. Add it to your project using your preferred package manager.
npm install ego-browser-v2
Import the SDK Entry Point
According to the source code in src/index.ts, the package entry point exports installEgoSdk and re-exports all public helpers from src/helpers.ts. Import these into your ES module or TypeScript file.
import { installEgoSdk, helperContext } from "ego-browser-v2";
Installing the ego-browser Harness
The installEgoSdk function (implemented in src/index.ts around lines 44-65) wires the helper context onto a target object, optionally wrapping each helper to await the SDK-ready signal before executing.
Global Installation on globalThis
Calling installEgoSdk() without arguments injects the entire helper surface onto globalThis, matching the behavior of the original CLI harness.
// Installs page, browser, taskSpaces, site, and fetch onto globalThis
installEgoSdk();
After installation, helpers like page, browser, and taskSpaces become available as global variables.
Custom Namespace Installation
To avoid global side effects, pass a custom target object as the first argument. You can optionally provide a specific helper context via the second argument.
const myApi = {};
installEgoSdk(myApi, {
context: helperContext()
});
// Access helpers via myApi.page, myApi.taskSpaces, etc.
Using the Exposed Helpers
Once installed, the harness exposes several high-level facades defined in src/helpers.ts. These wrappers handle automatic session management, transient failure retries, and CDP protocol communication.
Page Automation with the page Facade
The page object mirrors the Playwright API, providing methods like goto(), title(), and locator().
await page.goto("https://example.com");
const title = await page.title();
await page.locator("button").click();
Multi-Tab Management with taskSpaces
The taskSpaces facade enables named workspace management across multiple browser tabs.
const space = await taskSpaces.useOrCreate("my-workspace");
await page.goto("https://github.com/citrolabs/ego-lite");
await taskSpaces.complete(space.id, { keep: true });
Site-Specific Skills with site
The site facade executes learned automation tools against specific domains.
const result = await site.runTool("example.com", "extractData", {
selector: "#main"
});
Complete Implementation Examples
Minimal Setup with Global Injection
Create an index.mjs file that installs the SDK globally and performs basic navigation.
import { installEgoSdk } from "ego-browser-v2";
installEgoSdk();
async function demo() {
await page.goto("https://example.com");
console.log("Title:", await page.title());
await page.locator("a[href*=login]").click();
await page.screenshot({ path: "login.png" });
}
demo().catch(console.error);
Isolated API Object Pattern
Encapsulate the SDK in a separate module to prevent global namespace pollution.
// myEgo.js
import { installEgoSdk, helperContext } from "ego-browser-v2";
const egoApi = {};
installEgoSdk(egoApi, { context: helperContext() });
export default egoApi;
// usage.mjs
import ego from "./myEgo.js";
async function run() {
await ego.page.goto("https://news.example");
const headlines = await ego.page.locator("h1").allInnerTexts();
console.log(headlines);
}
run().catch(console.error);
Working with Task Spaces
Manage complex multi-page workflows using named task spaces.
import { installEgoSdk } from "ego-browser-v2";
installEgoSdk();
async function workInTaskSpace() {
const space = await taskSpaces.useOrCreate("my-workspace");
await page.goto("https://github.com/citrolabs/ego-lite");
await page.locator("a[href*='README']").click();
await taskSpaces.complete(space.id, { keep: true });
}
workInTaskSpace().catch(console.error);
SDK Architecture and Source Locations
Understanding the internal structure helps when debugging or extending the harness.
src/index.ts: Contains theinstallEgoSdkimplementation (lines 44-65), CLI runner logic, and the main entry point exports.src/helpers.ts: Defines thehelperContext()builder and exports thepage,browser,taskSpaces, andsitefacades.src/cdp-eval.ts: Provides low-level CDP evaluation utilities consumed by the high-level helpers.src/driver/: Houses concrete action implementations for pointer events, keyboard input, and navigation.
The helperContext() function creates a cohesive context that wraps raw CDP calls, adds automatic session handling, and provides retry logic for transient failures.
Summary
- Install the ego-browser harness as a module via
npm install ego-browser-v2for Node.js ≥ 22. - Import
installEgoSdkfrom the entry point (src/index.ts) to initialize the SDK. - Call
installEgoSdk()without arguments to expose helpers onglobalThis, or pass a custom object to avoid global side effects. - Access Playwright-style automation through the
pagefacade, multi-tab management viataskSpaces, and domain-specific tools viasite. - The
helperContext()wrapper insrc/helpers.tsmanages CDP sessions and automatic retries behind the scenes.
Frequently Asked Questions
What is the difference between ego-browser-v2 and the CLI harness?
The CLI harness runs automation scripts in a standalone process, while the ego-browser-v2 module allows you to embed the same functionality directly into your Node.js application as a library import, giving you finer control over the runtime environment.
Can I use ego-browser without polluting the global scope?
Yes. Instead of calling installEgoSdk() with no arguments, pass an empty object as the first parameter: installEgoSdk(myApi). This installs all helpers onto myApi rather than globalThis, keeping your global namespace clean.
Which Node.js version is required for ego-browser-v2?
The module requires Node.js version 22 or higher, as specified in the package metadata and source code requirements. Older versions may not support the specific JavaScript features or APIs used in the harness.
How does the page facade relate to Playwright?
The page object exported from src/helpers.ts provides a Playwright-compatible API surface, implementing methods like goto(), title(), and locator() that wrap underlying CDP calls with automatic session management and retry logic.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →