Ego-Browser Public Helpers for Agent Scripts: Complete API Reference (2024)
The ego-browser package exposes 40+ public helpers to agent scripts through a globally injected SDK, including CDP methods, pointer/keyboard actions, navigation controls, observation tools, waits, and site-specific skill runners—all defined in src/helpers.ts and installed via installEgoSdk().
The ego-browser package from the citrolabs/ego-lite repository provides a thin SDK that injects a helper context into the global runtime for agent scripts. These ego-browser public helpers enable browser automation, observation, navigation, and AI-powered site interactions without requiring external dependencies. All helpers are defined in src/helpers.ts and re-exported from src/index.ts, making them available as top-level globals like click, page, and site.skills.
This guide covers every public helper grouped by functional area, with implementation details from the source code and practical usage examples.
Core CDP and Evaluation Helpers
The lowest-level helpers provide direct access to the Chrome DevTools Protocol (CDP) and raw JavaScript evaluation.
| Helper | Purpose | Source |
|---|---|---|
cdp |
Send raw CDP commands to the browser | src/helpers.ts lines 5–9 |
evaluate |
Execute JavaScript in the page context | src/helpers.ts lines 5–9 |
These form the foundation that higher-level helpers build upon.
Pointer and Mouse Action Helpers
All mouse and pointer interactions are imported from src/driver/pointer.js and re-exported through the main helpers module.
// Click with options
await click('#submit', { button: 'left', modifiers: ['Control'] });
// Drag and drop
await drag('#source', '#target');
// Hover with precise positioning
await hover('.tooltip-trigger', { position: { x: 10, y: 5 } });
// Scroll element into view if needed
await scrollIntoViewIfNeeded('.lazy-image');
Available pointer helpers:
click— Single click with configurable button and modifiersdblclick— Double-click actionhover— Mouse hover with optional positioningdrag— Drag-and-drop between elementswheel— Scroll wheel eventsscrollIntoViewIfNeeded— Conditional scroll into viewport
Defined in src/helpers.ts lines 30–36.
Keyboard and Input Helpers
Text entry, form interaction, and keyboard events come from src/driver/keyboard.js.
// Type with human-like delays
await fill('#search', 'ego-browser helpers', { timeout: 5000 });
// Press special keys
await press('Enter');
await press('Control+a');
// Sequential keystroke simulation
await pressSequentially('#otp-input', '123456', { delay: 100 });
// Checkbox state management
await check('#terms');
await uncheck('#newsletter');
await setChecked('#remember-me', true);
// Focus and dispatch custom events
await focus('#email');
await dispatchEvent('#form', 'submit');
Full list of input helpers:
press,down,up— Key press, hold, and releaseinsertText— Direct text insertionfocus— Element focusfill— Clear and type into fieldpressSequentially— Keystroke-by-keystroke typingcheck,uncheck,setChecked— Checkbox manipulationselectOption— Dropdown selectiondispatchEvent— Custom DOM event firing
Defined in src/helpers.ts lines 37–49.
Locator and Element Query Helpers
Extract data from page elements using helpers from src/driver/locator.js.
// Basic text extraction
const heading = await textContent('h1');
const visibleText = await innerText('.article-body');
// Form state inspection
const emailValue = await inputValue('#email');
const isAgreed = await isChecked('#consent');
// Multiple element handling
const allLinks = await allTextContents('a[href]');
const count = await count('.list-item');
// Evaluate within element context
const computedStyle = await evaluateLocator('.banner', el => getComputedStyle(el).height);
Available locator utilities:
textContent,innerText— Text extraction variantsinputValue— Current form field valueisChecked— Checkbox stategetAttribute— DOM attribute retrievalcount— Element count matching selectorallInnerTexts,allTextContents— Batch text extractioninnerHTML— Raw HTML contentevaluateLocator,evaluateAll— Custom JS execution in element scope
Defined in src/helpers.ts lines 50–70.
Navigation and Tab Control Helpers
Manage browser tabs, frames, and navigation state via src/driver/nav.js.
// Tab management
const tabs = await listTabs();
await switchTab(tabs[1].id);
await closeTab(tabs[0].id);
// Navigation with error handling
await goto('https://example.com', { waitUntil: 'networkidle' });
await openOrReuseTab('https://docs.example.com');
// Frame/iframe targeting
const frame = await iframeTarget('#preview-frame');
// Ensure we're on a real tab (not devtools/extension)
await ensureRealTab();
// Page metadata
const info = await pageInfo();
console.log(info.url, info.title);
Navigation helpers include:
INTERNAL_URL_PREFIXES— Constants for internal URL schemespageInfo— Current page metadatalistTabs,currentTab— Tab enumerationswitchTab,openOrReuseTab,closeTab— Tab lifecyclegoto— Navigation with load state waitingensureRealTab— Validation helperiframeTarget— Frame context targeting
Defined in src/helpers.ts lines 71–82.
Observation and Screenshot Helpers
Capture page state for analysis or debugging through src/driver/observe.js.
// Structured accessibility snapshot
const snap = await snapshot(); // Returns AX tree for LLM consumption
const raw = await snapshotRaw(); // Unprocessed snapshot data
// Visual capture
await screenshot({ path: 'debug.png', fullPage: true });
// Coordinate calculation for pointer actions
const center = await elementCenter('#target');
// Event drainage for synchronization
await drainEvents();
Observation helpers:
snapshot— Accessibility tree snapshot (AI-optimized format)snapshotRaw— Raw snapshot without processingscreenshot— PNG capture with sizing optionselementCenter— Coordinate calculationdrainEvents— Process pending browser events
Defined in src/helpers.ts lines 83–89.
Wait and Synchronization Helpers
Control timing and conditions for action execution via src/driver/waits.js.
// Explicit delays
await waitForTimeout(1000); // 1 second
// Page state waits
await waitForLoadState('domcontentloaded');
await waitForLoadState('networkidle');
// Element availability
await waitForSelector('.dynamic-content', { timeout: 10000 });
// Custom conditions
await waitForFunction(() => window.__appReady === true, { polling: 100 });
// Network waits
await waitForURL(/\/dashboard/);
await waitForRequest('**/api/session');
await waitForResponse(req => req.url().includes('/api/data'));
Wait helpers:
waitForTimeout— Fixed delaywaitForLoadState— Page lifecycle eventswaitForSelector— Element availabilitywaitForFunction— Custom predicate pollingwaitForURL— Navigation pattern matchingwaitForRequest,waitForResponse— Network event waiting
Defined in src/helpers.ts lines 90–98.
File Upload and Screencast Helpers
Specialized utilities for file handling and video recording.
// File upload
await setInputFiles('#file-input', ['/path/to/upload.pdf']);
// Screencast recording
await startScreencast({ outputPath: '/recordings/session.webm' });
// ... perform actions ...
await stopScreencast();
| Helper | Source |
|---|---|
setInputFiles |
src/driver/files.js via src/helpers.ts line 99 |
startScreencast, stopScreencast |
src/driver/screencast.js via src/helpers.ts lines 100–101 |
Network Fetch Helpers
HTTP requests from both browser and Node contexts.
// Browser-context fetch (uses page's cookies, headers)
const html = await browserFetch('https://api.example.com/data', {
headers: { 'Accept': 'application/json' }
});
// Server-side fetch (bypasses CORS, uses proxy config)
const proxyData = await serverFetch('https://internal.service/metrics');
Source: src/http.js via src/helpers.ts lines 18–22.
Task-Space Management Helpers
Advanced session isolation and handoff controls implemented directly in src/helpers.ts starting at line 107.
// Create isolated automation context
const space = await newTaskSpace('invoice-processing');
await switchTaskSpace(space.id);
// Or reuse existing
const existing = await useOrCreateTaskSpace('customer-onboarding');
// Hand control to human user
await handOffTaskSpace({ message: 'Please solve the CAPTCHA' });
// Resume after human intervention
await waitForAgentControl();
await takeOverTaskSpace();
// Cleanup
await completeTaskSpace(space.id);
Task-space API:
listTaskSpaces— Enumerate active spacesswitchTaskSpace— Change active contextnewTaskSpace,useOrCreateTaskSpace— Space acquisitionclaimTaskSpace— Exclusive access lockingcompleteTaskSpace— Clean terminationhandOffTaskSpace,takeOverTaskSpace— Human/AI control transferwaitForAgentControl— Resume signal
Site-Skill and Learning Helpers
AI-powered site-specific automation through learned patterns, defined near lines 64–78 in src/helpers.ts.
// Discover available skills for current URL
const skills = await siteSkillsForUrl();
console.log(skills); // ['searchProducts', 'addToCart', 'checkout']
// Invoke learned skill
const result = await runSiteTool('github', 'searchRepos', {
query: 'ego-lite',
language: 'typescript'
});
// Browser-side skill execution
await runSiteBrowserTool('linkedin', 'sendConnectionRequest', {
profileUrl: 'https://linkedin.com/in/example'
});
// Context enrichment for skill learning
await learnContext(['.product-card', '.price', '.add-to-cart']);
Site-skill helpers:
siteSkillsForUrl— Skill discovery for URLsiteSkills— Direct skill accessrunSiteTool— Node-side skill executionrunSiteBrowserTool— Browser-context skill executionlearnContext— Feedback for skill improvement
SDK Installation and Helper Context
Helpers are not automatically global—they must be installed via the SDK entry point.
According to src/index.ts lines 51–63, installEgoSdk() performs the injection:
// Inside ego-browser runtime
import { installEgoSdk } from 'ego-browser';
// Installs all helpers as globals: click, page, site.skills, etc.
installEgoSdk();
// Now helpers are available globally
await goto('https://example.com');
await click('button');
The helperContext() function (line 822 in src/helpers.ts) builds the complete facade object containing all exported helpers. Additional utilities include:
loadAgentHelpers(lines 52–65) — Load custom helper extensions__testing(line 667) — Internal testing utilities (not for production use)
Summary
The ego-browser public helpers provide a comprehensive browser automation API for agent scripts:
- 40+ documented helpers across 11 functional categories
- Zero external dependencies once SDK is installed
- Global availability after
installEgoSdk()runs - Layered architecture from low-level CDP to high-level site skills
Key implementation files to reference:
src/helpers.ts— Central definition and export hubsrc/index.ts— SDK installation and global injectionsrc/driver/*.js— Core automation implementationssrc/http.js— Network utilitiessrc/learning/*— Site-skill discovery and execution
Frequently Asked Questions
How do I access ego-browser helpers in my agent script?
Call installEgoSdk() from ego-browser at script startup. This injects all helpers into the global scope as properties of helperContext(), making functions like click, goto, and snapshot available without imports, as implemented in src/index.ts lines 51–63.
What is the difference between browserFetch and serverFetch?
browserFetch executes requests within the page context, inheriting cookies, session storage, and CORS policies. serverFetch runs from the Node.js side, bypassing CORS and using configured proxy settings, making it suitable for internal API calls.
Can I extend ego-browser with custom helpers?
Yes. Use loadAgentHelpers() (defined in src/helpers.ts lines 52–65) to load additional helper modules. Custom helpers integrate into the same helperContext() facade and become available to agent scripts after SDK installation.
How do site skills work in ego-browser?
Site skills are AI-learned automation patterns for specific websites. The siteSkillsForUrl() function discovers available skills, while runSiteTool() and runSiteBrowserTool() execute them in Node or browser contexts respectively. The learnContext() helper provides feedback to improve skill accuracy over time.
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 →