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.
What it looks like
TypeScript, Zod schemas, full type inference.
// 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 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}`),
}
);// 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
| Feature | Sentinel | BrowserUse |
|---|---|---|
| Language | TypeScript / Node.js | Python |
| Default LLM | Gemini Flash | any (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-in | manual |
| MCP server | ✓ | ✗ |
| CLI tool | ✓ | ✗ |
| OpenTelemetry | ✓ | ✗ |
| Selector export | ✓ | ✗ |
| Shadow DOM | ✓ full | partial |
| 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.