Skip to main content
isoldex
BrowserUse alternative

BrowserUse for TypeScript.
Production-grade.

BrowserUse is a great Python library. If your stack is TypeScript or Node.js, Sentinel is the equivalent — and then some. Native Playwright integration, self-healing locators, parallel execution, MCP server, and OpenTelemetry tracing that BrowserUse doesn't have.

TypeScript
native, full type safety
Playwright
first-class integration
MIT
open source, self-hostable

What it looks like

TypeScript, Zod schemas, full type inference.

agent.ts
// Sentinel — TypeScript native, drop-in Playwright companion
import { Sentinel, z } from '@isoldex/sentinel';

const sentinel = new Sentinel({ apiKey: process.env.GEMINI_API_KEY });
await sentinel.init();
await sentinel.goto('https://amazon.de');

// Autonomous agent — plan, execute, verify, reflect
const result = await sentinel.run(
  'Search for laptop, extract the top 5 results with name and price',
);

console.log(result.data.products); // typed, structured output
console.log(result.selectors);     // stable CSS selectors for Playwright tests
await sentinel.close();
parallel.ts
// Parallel execution — built-in worker pool, error isolation
const results = await Sentinel.parallel(
  sites.map((url) => ({ url, goal: 'Extract product prices' })),
  {
    apiKey:      process.env.GEMINI_API_KEY,
    concurrency: 5,
    onProgress:  (done, total) => console.log(`${done}/${total}`),
  }
);
hn.spec.ts
// Drop-in into existing Playwright Test suites
import { test, expect } from '@isoldex/sentinel/test';
import { z } from 'zod';

test('extracts HN stories', async ({ ai, page }) => {
  await ai.goto('https://news.ycombinator.com');
  const { stories } = await ai.extract('Get top 5 stories', z.object({
    stories: z.array(z.object({ title: z.string(), points: z.number() }))
  }));
  expect(stories.length).toBe(5);
});

Why Sentinel over BrowserUse

🔷

TypeScript-first

Sentinel is built for Node.js and TypeScript from the ground up. Full type inference on extract() via Zod, typed errors, typed AgentResult. If your stack is JS/TS, Sentinel fits natively — no Python bridge needed.

🔌

Playwright is a first-class citizen

BrowserUse controls Playwright internally but doesn't expose it. Sentinel wraps Playwright and gives you direct access to page and context at any time. You can mix AI actions with standard Playwright assertions, locators, and expectations in the same test.

🔁

Self-healing locators

Sentinel caches the CSS selector for every successful act() call. On repeated runs, Playwright uses the cached selector directly — zero tokens. The cache self-invalidates if the element changes. BrowserUse has no equivalent.

🧪

Playwright Test integration

import { test } from '@isoldex/sentinel/test' gives you an ai fixture alongside the standard page and browser fixtures. Mix AI actions with expect() assertions — your existing CI pipeline works unchanged.

📡

Production observability

Every act(), extract(), and agent step emits OpenTelemetry spans and metrics. Drop into Datadog, Grafana, or Jaeger. BrowserUse has no OTel support.

⚙️

Parallel execution built-in

Sentinel.parallel() manages a worker pool of browser sessions with configurable concurrency, error isolation, and a progress callback. BrowserUse requires managing parallel execution yourself.

Feature comparison

FeatureSentinelBrowserUse
LanguageTypeScript / Node.jsPython
Default LLMGemini Flashany (OpenAI default)
Cost / run (est.)~$0.002~$0.05 (GPT-4o-mini)
Playwright integration✓ native
Playwright Test fixture
Self-healing locators
Prompt caching
Parallel sessions✓ built-inmanual
MCP server
CLI tool
OpenTelemetry
Selector export
Shadow DOM✓ fullpartial
Custom LLM provider✓ interface✓ langchain
Open source✓ MIT✓ MIT

BrowserUse cost estimate based on GPT-4o-mini at default settings. Sentinel with locatorCache + promptCache is effectively free on repeated tasks.

Start in 30 seconds

No account. No credit card. Free Gemini tier covers thousands of runs.