Skip to main content
sentinel
Sec.00
v4.1.0·410 tests·MIT
How it works
Input · natural language
goal: "find cheapest laptop"
url: "amazon.com"
Sentinel · 4.1.0
runtimeplan · act · verify
Output · typed
{
name: "Acer Aspire 3",
price: "€349"
}

Browser automation that survives a redesign.

AI Browser Automation·40× cheaper than Stagehand·Open source

Drop-in Playwright companion. Describe goals in natural language; Sentinel handles the clicks, caches selectors, and self-heals when the page underneath you changes.

▌Termagent-run.log
running
[boot]sentinel-runtime/4.1.0 // starting
model: gemini-3-flash-previewregion: eu-central · UTF-8
Self-healing locators Parallel sessions OpenTelemetry tracing Shadow DOM + iframes Multi-LLM router MCP server Playwright Test fixture 410 passing tests $0.002 / run
Self-healing locators Parallel sessions OpenTelemetry tracing Shadow DOM + iframes Multi-LLM router MCP server Playwright Test fixture 410 passing tests $0.002 / run
Sec.01Proof
Live // signal feed
PASSamazon.de2.31s$0.0021
·PASSebay.de1.84s$0.0017
·PASSotto.de2.67s$0.0024
·PASSsalesforce.com3.12s$0.0029
·PASSgithub.com1.29s$0.0014
Mission ctrl
Uptime
27d 14:22
Ops / sec
148
P95 // ms
38
Region
eu-central
Build
v4.1.0
Tests
410 / 410
E2E successPass
0/5 sites
Sentinel
2/5 sites
Stagehand
Tokens / actionPass
2–0k
Sentinel
29–51k
Stagehand
Cost per runPass
$0.000
Sentinel
$0.03+
Stagehand
Github · stars
5
39 days since first commit
npm · daily installs
30d total729
Tests · passing
410 / 410
OpenTelemetry · CI on every push
Sec.02Capabilities

Everything the watchtower already sees.

Nine systems, one console. Each capability ships with tests, instrumentation, and a public API. No feature flags. No locked tiers.

F.01

10× fewer tokens per action.

Smart element filtering trims the page state graph before it ever hits the LLM. Same task, fraction of the prompt.

Sentinel
~5k
Stagehand
~51k
F.02

Self-healing locators

Successful selectors are cached and reused. The LLM is only called when an element moves or changes.

F.03

Parallel execution

Sentinel.parallel() runs N browser sessions concurrently with a built-in worker pool and error isolation.

F.04

OpenTelemetry

Every act(), extract(), and agent step emits spans and metrics. Drop into Datadog, Grafana, or Jaeger.

F.05

Shadow DOM & iframes

Full support for Salesforce, ServiceNow, and any component built with Lit, Polymer, or Stencil.

F.06

Multi-LLM

Gemini, OpenAI, Claude, Ollama — swap providers with one line. Bring your own LLMProvider.

F.07

Autonomous Agent

sentinel.run(goal) plans and executes autonomously. fillForm(json) fills declaratively. intercept() captures API data.

F.08

MCP Server

Use Sentinel from inside Cursor, Windsurf, or Claude Desktop without writing a single line of code.

+ Playwright Test fixture · see all 9 capabilities →

Sec.03Parallelism

Three sites. One call.

Sentinel.parallel() runs N browser sessions concurrently with a built-in worker pool. Errors stay isolated. Progress callbacks stream into your dashboard in real time.

typescriptparallel-scrape.ts
const results = await Sentinel.parallel(
  [
    { url: 'https://amazon.de', goal: 'Find cheapest laptop' },
    { url: 'https://ebay.de',   goal: 'Find cheapest laptop' },
    { url: 'https://otto.de',   goal: 'Find cheapest laptop' },
  ],
  { apiKey: process.env.GEMINI_API_KEY, concurrency: 3 }
);
Sec.04Field Manual

The whole field.

Three numbers that matter, then the receipts.

Verdict.01
0×
fewer tokens / action
2–5k vs 29–51k
Verdict.02
0.0×
higher e2e pass rate
5/5 vs 2/5 sites
Verdict.03
0×
cheaper / run
$0.002 vs $0.08
Show all 20 metrics — full receipts
Language
▌ SentinelTypeScript
StagehandTypeScript
BrowserUsePython
AutoGPTPython
PlaywrightTS / Py / Java
Default LLM
▌ SentinelGemini Flash
Stagehandconfigurable
BrowserUseany
AutoGPTGPT-4o
Playwright
Cost / run (ref. task)
▌ Sentinel~$0.002
Stagehand~$0.08
BrowserUse~$0.05 est.
AutoGPT~$0.10 est.
Playwright
Autonomous agent loop
▌ Sentinel
Stagehandpartial
BrowserUse
AutoGPT
Playwright
Self-healing locators
▌ Sentinel
Stagehandpartial
BrowserUse
AutoGPT
Playwright
Prompt caching
▌ Sentinel
Stagehandpartial
BrowserUse
AutoGPT
Playwright
Parallel sessions
▌ Sentinel
Stagehand
BrowserUsepartial
AutoGPT
Playwright
MCP server
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
CLI tool
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
Playwright Test fixture
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
Custom LLM
▌ Sentinel
Stagehandpartial
BrowserUse
AutoGPTpartial
Playwright
fillForm(json)
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
Network intercept
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
TOTP / MFA
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwrightpartial
Planner model split
▌ Sentinel
Stagehand
BrowserUse
AutoGPTpartial
Playwright
Vision grounding
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
Shadow DOM / iframes
▌ Sentinel
Stagehandpartial
BrowserUsepartial
AutoGPT
Playwright
OpenTelemetry
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
Selector export
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright
Open source
▌ Sentinel
Stagehand
BrowserUse
AutoGPT
Playwright

▌ Cost estimates: official API pricing as of 04.08.2026

Sec.04·BBill of Materials

Drag the slider. See the bill.

$780saved vs Stagehand · monthly
Runs / month10,000
500200k
Sentinel$0.0020 / run
$20
BrowserUse$0.050 / run
$500
Stagehand$0.080 / run
$800

Sentinel 40× cheaper than Stagehand. Defaults: Gemini Flash vs GPT-4o.

Run full numbers →
Sec.04·CMigrate

Switch in 10 minutes.

Same act / extract signatures. Just swap the import and your API key. The model swap happens for free.

Stagehand · before
typescriptstagehand.ts
import { Stagehand } from '@browserbasehq/stagehand';

const stagehand = new Stagehand({
  env: 'LOCAL',
  modelName: 'gpt-4o',
});
await stagehand.init();

const page = stagehand.page;
await page.goto('https://amazon.de');
await page.act('search for laptop');

const data = await page.extract({
  instruction: 'get product name and price',
  schema: { name: 'string', price: 'string' },
});
+Sentinel · after
typescriptsentinel.ts
import { Sentinel } from '@isoldex/sentinel';

const sentinel = new Sentinel({
  apiKey: process.env.GEMINI_API_KEY,
});
await sentinel.init();

await sentinel.goto('https://amazon.de');
await sentinel.act('search for laptop');

const data = await sentinel.extract(
  'get product name and price',
  { name: 'string', price: 'string' }
);
Sec.05How it works

How act() survives a redesign.

Sentinel sits on top of Playwright. Every action falls through a layered fallback pipeline. The agent loop wraps it all in a plan-execute-verify-reflect cycle.

Architecture · top to bottom
L4
Your code
await sentinel.act("click search")
L3
Sentinel · 4.1.0
AOM parser → Locator cache → Vision grounding
L2
Playwright
page.click(cssSelector) · resolved at runtime
L1
Browser
Chromium · Firefox · WebKit · headless or headed

Sentinel does not replace Playwright. It sits on top, adds intelligence, falls back to it.

▌ Fallback Pipeline · per-act()sentinel.act("click search button")LAYER.01AOMPARSERa11y rankingLAYER.02LOCATORCACHEcached CSSLAYER.03VISIONGROUNDshot + coordsmissmisshitPASShitPASShitPASS

Each act()falls through the layers in order. The Locator Cache hits ~80% of the time on repeated runs — the LLM never gets called. Vision Grounding catches Canvas, Shadow DOM, and anything the AOM can't see.

▌ Agent Loop · sentinel.run(goal)01PLAN02EXEC03VRFY04RFLTif goal not reached, loop back> exits when goalAchieved = true (or maxSteps hit)

The loop terminates when the verifier says goalAchieved = trueor maxSteps is hit. Built-in loop detection compares the last 3 plans — if they match, the run aborts with LoopDetectedError.

01

Selectors heal

Cached selectors auto-rediscover when the page changes.

02

Drop in incrementally

sentinel.extend(page) adds act/extract/observe to existing Playwright pages.

03

Zero-shot agent

sentinel.run(goal) plans, executes, verifies — no step scripting.

04

Playwright Test ready

@isoldex/sentinel/test exposes an ai fixture for existing test suites.

Sec.06Tier Manifest

Start free. Always.

The library is and will always be MIT. Pay only when you want managed infrastructure.

▌Foundation

Open Source

Free
Forever
  • Full library — no feature locks
  • Self-hosted, your API keys
  • MIT License
  • Community support
Get started
Recommended

Pro

Coming soon
Hosted API + Dashboard
  • REST API — no Playwright required
  • Managed cloud browsers
  • Usage dashboard + token analytics
  • Priority support
Join waitlist
▌Custom

Enterprise

Custom
On-premise or cloud
  • Everything in Pro
  • SLA + dedicated support
  • On-premise deployment
  • Custom integrations
Contact us
Sec.08Early Access

Shape what comes next.

Sentinel is fresh out of the box. Open an issue, request a feature, or share what you built. Every message is read. Bugs get a fix within 24 hours.

Sec.09Field Questions

Questions answered.

Everything you need to decide if Sentinel is right for your project.

Plain Playwright is great — but it requires you to know exactly which CSS selectors or roles to target. When a site redesigns, every selector breaks. Sentinel lets you describe what you want in natural language and finds the element itself. Self-healing locators mean your script survives UI changes without edits. For well-understood, stable pages you control, plain Playwright is still the right choice — Sentinel is for everything else.
Both automate browsers with AI. Key differences: Sentinel passes 5/5 real-world E2E tests vs Stagehand's 2/5 (same model, same instructions). Sentinel sends 2–5k tokens per action vs Stagehand's 29–51k — 6–10× more efficient. Unique features: fillForm(json), network intercept(), TOTP/MFA, planner model split, click-target verification, and form intelligence. The API is similar, so migration takes under 10 minutes.
BrowserUse is Python-first and great for Python-native AI pipelines. Sentinel is TypeScript-first — built to slot into existing Node.js and Playwright projects. Sentinel also adds production features BrowserUse lacks: self-healing locators, prompt caching, parallel() with a worker pool, Playwright Test integration, MCP server, and OpenTelemetry tracing.
AutoGPT is a general-purpose AI agent where browsing is one of many tools. Sentinel is purpose-built for browser automation — it knows about accessibility trees, Shadow DOM, iframes, form semantics, and Playwright's locator API. You get a specialized, production-grade tool instead of a general agent with a browser plugin bolted on.
No — Gemini is just the default. You can use OpenAI, Claude, Ollama (local), or implement your own LLMProvider. Only Gemini requires a GEMINI_API_KEY. The free Gemini tier covers thousands of runs per month.
Yes, two ways. sentinel.extend(page) adds act(), extract(), and observe() to any existing Playwright Page object. Or use the @isoldex/sentinel/test package which provides an ai fixture that works alongside the standard page and browser fixtures — no test restructuring needed.
Yes. The StateParser recursively pierces all shadow roots via queryShadowAll() and collects interactive elements from same-origin iframes with coordinate offsets. This covers Salesforce Lightning, ServiceNow, and any component built with Lit, Polymer, or Stencil.
The MCP server exposes all 8 Sentinel tools to any MCP-compatible AI assistant like Cursor, Windsurf, or Claude Desktop. Configure it in 5 lines — then your AI assistant can automate any website without you writing a single line of code.
Sentinel itself is free and open source (MIT). You pay only for the LLM API calls: ~$0.002/run with Gemini Flash (free tier: thousands of runs/month). With self-healing locators and prompt caching, repeated identical runs skip most LLM calls — typical savings of 80–95% on subsequent runs of the same workflow.
Yes. v4.1.0 ships with 410 passing tests, OpenTelemetry tracing, structured error classes, automatic LLM retry with exponential backoff, click-target verification, form intelligence, and loop detection in the agent. Actively developed and used in production automation workflows.
Not directly — Sentinel is a Node.js library. For zero-infrastructure use, the Pro tier (coming soon) will expose a REST API: POST a goal + URL, get structured data back. Join the waitlist below.
Set verbose: 3 in SentinelOptions to see full LLM reasoning and decision JSON per act() call. The onStep callback on run() gives step-by-step progress in real time. For distributed tracing, wire up OpenTelemetry — every span includes the instruction, action, selector, success flag, and LLM token cost.
CTA · 30s

Start in 30 seconds.

No account. No credit card. Just your Gemini API key — free tier covers thousands of runs per month.

▌ Coming soon

Hosted API — no Playwright required.

POST a goal + URL. Receive structured data. Managed cloud browsers. Usage dashboard. Zero infrastructure. Join the watch.