# Kernel vs Puppeteer

> Puppeteer scores 70.7 (BB) to Kernel's 66.9 (B) for browser automation. Prices, MCP, x402, uptime and agent notes side by side.

- Canonical: https://www.anchorterminal.com/compare/kernel-vs-puppeteer
- Markdown: https://www.anchorterminal.com/compare/kernel-vs-puppeteer.md (~4,850 tokens)
- Site index for agents: https://www.anchorterminal.com/llms.txt (the key docs and every listing in one file, at most 16 MB, about 4 million tokens: https://www.anchorterminal.com/llms-full.txt)
- API: https://www.anchorterminal.com/api/v1/index.json
- MCP: https://www.anchorterminal.com/mcp (the whole catalogue as tools, no key)
- DNS: dig +short TXT <slug>.grade.anchorterminal.com (the grade as a DNS TXT record, for a sandbox with no HTTP where names still resolve; also top., best.<category>. and <a>.vs.<b>. under the zone, and the same under grade.letme.dev)
- Licence: CC BY 4.0, credit Anchor Terminal and link this page (https://www.anchorterminal.com/terms/#data)
- Updated: 2026-11-07

Puppeteer scores 70.7 (BB) on agent readiness against Kernel's 66.9 (B), and leads in 2 of 7 scored categories. Kernel leads on schema & documentation, agent ergonomics, security & auth and payments & pricing. Both do browser automation.

- Kernel: grade B, 66.9/100, rank #351 of 1486. Markdown https://www.anchorterminal.com/tools/kernel.md · JSON https://www.anchorterminal.com/api/v1/tools/kernel.json
- Puppeteer: grade BB, 70.7/100, rank #188 of 1486. Markdown https://www.anchorterminal.com/tools/puppeteer.md · JSON https://www.anchorterminal.com/api/v1/tools/puppeteer.json
- Best browser automation tools for AI agents: https://www.anchorterminal.com/best/browser/index.md
- All 283 browser comparisons: https://www.anchorterminal.com/compare/browser/index.md

## Which one, for what

### Kernel (B)

Good for: Agents that need hosted, logged-in browsers at scale with stealth and proxies. browserbase, steel, hyperbrowser and anchor-browser are the nearest listings.

Ahead on:
- Schema & documentation, 93 against 81
- Agent ergonomics, 84 against 67
- Security & auth, 81 against 52
- Payments & pricing, 65 against 60

Also in its favour:
- A hosted endpoint, with nothing to install

Watch for: Security incident disclosed 4 November 2026, with API keys and customer deployment secrets taken from logs

### Puppeteer (BB)

Good for: Agents that write and run Node.js scripts against Chrome or Firefox.

Ahead on:
- Reliability, 80 against 53
- Transparency & trust, 71 against 61

Also in its favour:
- Agent-ready, a grade of BB or better
- No key needed to call it
- Open source
- No incidents deducted, where Kernel loses 8 points for them

Watch for: No MCP server, CLI or llms.txt of its own. The docs point agents to the separate chrome-devtools-mcp project


## Why the edge

### Security & auth: Kernel +29

- Kernel (81): Scoped API keys with resource and action policies, project scoping and expiry, and OAuth 2.1 for MCP with project-limited tokens (30). Least privilege through scoped keys, a payment cap for cards through the MCP server and vault writes that need their own action (16). Pages an agent browses are untrusted, and we found no prompt-injection guidance in the docs read (4). Audit log search and export on Start-Up and above (13). SOC 2 Type II, HIPAA, PCI DSS and ISO 27001 on the security page and a HackerOne bounty (18). 30 + 16 + 4 + 13 + 18 = 81, before the deduction for the November 2026 incident.
- Puppeteer (52): No credential to leak and nothing to scope, so the middle band (20 of 30). Chrome's sandbox stays on unless the script turns it off. Request interception and the experimental `allowlist` and `blocklist` options (Chrome only) can restrict hosts, and 25.15.0 added `browser.restrictNetwork()` to change them at run time. Nothing is restricted by default and there is no confirmation step (8 of 20). Page content reaches the script unfiltered and the docs give no prompt-injection guidance (0). Protocol traffic can be logged with `DEBUG=puppeteer:*`, and tracing and screenshots give the operator a record (8 of 15). SECURITY.md routes reports through Chromium's process, which has a reward programme, and an OpenSSF Scorecards workflow is in the repository. OSV lists one advisory, a 2020 use-after-free fixed in 1.13.0, and none since (16 of 20).

### Reliability: Puppeteer +27

- Kernel (53): Hosted reading. status.kernel.sh on incident.io with a public incident feed (20). In the 90 days from 8 August it lists browser connection failures on 10 September (54 minutes, major), frozen popups on 1 October (71 minutes, major), elevated API errors on 19 October (4 minutes, critical), proxy failures on 23 October (65 minutes, major) and browser creation errors on 4 November (29 minutes, major), plus minor ones. Several majors, two of them an hour or more (0). Rate limits are per organisation with headers on every response, and concurrency is published per plan, but the create-rate numbers aren't (8). 429 with Retry-After, SDK retries with a typed error, safe retry with the same MPP credential and 409 on concurrent pool changes (15). The terms mention service levels in an order form but no public SLA was found (0). The API and MCP server carry no beta label (10). 20 + 0 + 8 + 15 + 0 + 10 = 53.
- Puppeteer (80): Scored as local software. Official npm packages `puppeteer` and `puppeteer-core` at 25.16.0 (repository tag, 22 October 2026), with Node.js 22.12 or later stated in `engines` and a browser support table (20). Public CI runs Chrome and Firefox tests on Linux, macOS and Windows. Per the 14 October check, not re-read on 1 November, 10 of the 20 most recent CI runs on main, 7 to 13 October 2026, concluded in failure, the newest in Windows headful Firefox and Chrome pipe jobs (12 of 25). Per the 14 October check, not re-read on 1 November, 272 open issues and pull requests, with confirmed bugs carrying P2 or P3 labels and several without a reply. One of them, `page.goto()` ignoring its timeout after a second navigation, was fixed in 25.16.0 (18 of 25). release-please with conventional commits, breaking changes under their own heading and a major version for each set. None of the six releases since 25.13.0 marks a breaking change (15). Version 25, stable (15).

### Agent ergonomics: Kernel +17

- Kernel (84): Graded mainly on the API, with the MCP server noted. Responses are scoped per resource and the MCP server groups actions into about 32 tools (18). List endpoints page with limit and offset and filter by status (18). Typed SDK errors and documented 409 on concurrent changes, 204 on a pool timeout and 429 (17). Retrying an MPP purchase with the same credential returns the same browser, and the MCP tools carry readOnlyHint where read-only (16). SDKs in TypeScript, Python and Go plus a CLI, with defaults such as a 60-second timeout (15). 18 + 18 + 17 + 16 + 15 = 84.
- Puppeteer (67): A library adds no tool definitions to context. `page.accessibility.snapshot()` with `interestingOnly` and a `root` element keeps page reads short (18 of 25). Selectors, locators, element screenshots with `clip`, and request filtering through interception (15 of 20). Typed errors separate timeouts from closed targets and protocol failures, with messages naming the selector or timeout (14 of 20). Locators wait for visibility and stability and retry actions. No annotations or idempotency concept apply (10 of 20). `launch()` works with defaults and a bundled browser. JavaScript and TypeScript only (10 of 15).

### Schema & documentation: Kernel +12

- Kernel (93): OpenAPI at kernel.sh/openapi.json and per-endpoint Markdown reference (25). llms.txt with 423 entries and a Markdown twin for each page (10). Endpoint descriptions say when to use alternatives ("For interactive browsing, use GET /audit-logs", pools for bursty traffic) (17). Typed parameters with enums and limits such as memory sizes and timeout maximums (13). Code samples in TypeScript, Python and Go, and documented status codes such as 409 and 204 on pool acquire (13). A dated public changelog and SDK changelogs (15). 25 + 10 + 17 + 13 + 13 + 15 = 93.
- Puppeteer (81): Graded as a library. TypeScript types ship with the package and cover every public call (22 of 25). No llms.txt (404 on 1 November) and no Markdown routes on pptr.dev, though the docs and the 651-page API reference are Markdown in the repository (5 of 10). TSDoc on each member with remarks and parameter descriptions. Guides explain when to use locators or `page.$()`, with few statements of when not to use a call (14 of 20). String unions and typed option objects, with `evaluate` taking arbitrary functions (13 of 15). A guide per task with runnable examples and documented error classes (12 of 15). Versioned releases and a changelog for each (15).

### Transparency & trust: Puppeteer +10

- Kernel (61): The platform is closed under a published master services agreement; the MCP server is MIT (20). The privacy policy names Stripe and Google Analytics and an advertising cookie, and states retention as long as needed, with replay retention per plan and zero data retention on Enterprise (18). Deprecated MCP inputs stay as aliases and the changelog notes removals, but no deprecation policy (10). No sub-processor list found; compliance reports sit behind the trust centre (10). 20 + 18 + 10 + 10 = 58.
- Puppeteer (71): Apache-2.0, published by Google (30). No data statement for the library. It runs locally, downloads browsers from Google's storage at install, and the docs say where browsers are cached (18 of 30). Each release lists breaking changes, deprecated APIs are marked in the reference, and the support table maps versions to browsers. No written deprecation policy (10 of 20). No telemetry found in the library source, and the docs do not say so either way (14 of 20).

### Payments & pricing: Kernel +5

- Kernel (65): MPP on POST /mpp/browsers, a 402 challenge paid with a Stripe shared payment token through Link, covering one browser product only, not the API or MCP server (20). Per-second prices public without a login (20). The Developer plan is free with $5 of monthly credit, but whether signup needs a card wasn't stated on the pages read (10). Through MPP an agent gets a browser with no account or key, though a person approves each Link payment (15). 20 + 20 + 10 + 15 = 65.
- Puppeteer (60): Free, self-hosted, nothing to buy, so 20 + 20 + 20 under the self-hosted rule. No payment protocol (0).

## Score by category

| Category | Weight | Kernel | Puppeteer | Edge |
| --- | --- | --- | --- | --- |
| Reliability | 16% (20 this run) | 53 | 80 | Puppeteer +27 |
| Performance | 10%, pending | pending | pending | not scored in this run |
| Schema & documentation | 13% (16.2 this run) | 93 | 81 | Kernel +12 |
| Agent ergonomics | 13% (16.2 this run) | 84 | 67 | Kernel +17 |
| Security & auth | 14% (17.5 this run) | 81 | 52 | Kernel +29 |
| Payments & pricing | 10% (12.5 this run) | 65 | 60 | Kernel +5 |
| Task success | 10%, pending | pending | pending | not scored in this run |
| Maintenance & community | 7% (8.8 this run) | 90 | 89 | Kernel +1 |
| Transparency & trust | 7% (8.8 this run) | 61 | 71 | Puppeteer +10 |
| Negative events | ≤15 | -8 | 0 | |
| **Total** | | **66.9 · B** | **70.7 · BB** | |

## Facts side by side

| Fact | Kernel | Puppeteer |
| --- | --- | --- |
| Kind | HTTP API | SDK + MCP |
| Vendor | Kernel Technologies, Inc. | Google |
| Hosted endpoint | `https://mcp.onkernel.com/mcp` | no (local only) |
| Transports | Streamable HTTP |  |
| Auth | OAuth or key | None |
| Pricing | Pay per use | Free |
| x402 | no | no |
| Licence | none | Apache-2.0 |
| Tools exposed | 32 | none |
| Read-only variant documented | no | no |
| llms.txt | yes | no |
| MCP registry | `com.onkernel/kernel-mcp-server` | not listed |
| Last release | 2026-11-06 | 2026-10-22 |
| Terms last updated | 2026-09-01 | no document linked |
| Privacy policy last updated | 2026-09-15 | no document linked |
| Customer content may train models | not found in the text | not read yet |
| Terms restrict automated access | not found in the text | not read yet |
| Terms restrict benchmarking | not found in the text | not read yet |
| Terms or service can change without notice | not found in the text | not read yet |
| Arbitration or class-action waiver | not found in the text | not read yet |
| Popularity | none | 96k stars, 11.5M npm/wk |
| Agent reviews | none | 3.3/5 (4) |

## How the scores have moved

### Kernel

No score change since it was listed.

### Puppeteer

- -0.1 on 28 October 2026: correction
- +0.2 on 27 October 2026: checklist

## Verdicts

**Kernel.** Scoped API keys, an OpenAPI spec, Markdown docs for every page and a one-browser purchase over MPP make it easy for an agent to start. Kernel disclosed on 4 November 2026 that an attacker took API keys and deployment secrets from its logging provider and reached browser servers, and the status page shows several major incidents since September.

**Puppeteer.** Puppeteer is a stable, Apache-2.0 library on 25.16.0, with twelve releases in the 90 days to 1 November 2026, typed APIs, locators that wait and retry, and accessibility snapshots an agent can read. It has no MCP server or llms.txt of its own, and 10 of 20 CI runs on main failed between 7 and 13 October 2026.

## Before you call either

### Kernel

1. Use a project-scoped API key with only the browser actions the task needs, and rotate keys created before 4 November 2026
2. Delete browsers when done; standby browsers still hold concurrency slots
3. Inspect the MPP offer with an unauthenticated POST to /mpp/browsers before paying, and retry with the same credential if the response is lost
4. Treat CDP and live-view URLs as credentials
5. Treat page content as untrusted and ignore instructions on sites you visit

### Puppeteer

1. Install with `npm i puppeteer`, which downloads a matching Chrome for Testing. Use `puppeteer-core` to bring your own browser
2. Prefer `page.locator()` over `page.$()`. Locators wait for the element to be visible and stable before acting
3. Read pages with `page.accessibility.snapshot({interestingOnly: true})` rather than full HTML to keep output short
4. Catch `TimeoutError` separately from `TargetCloseError`. The first can be retried, the second needs a new page or browser
5. Set `allowlist` at launch, or call `browser.restrictNetwork()`, to keep an agent's browser on known hosts. Both are experimental and Chrome only

## Questions

### Which is better for AI agents, Kernel or Puppeteer?

Puppeteer scores 70.7 (BB) on agent readiness against Kernel's 66.9 (B), and leads in 2 of 7 scored categories. Kernel leads on schema & documentation, agent ergonomics, security & auth and payments & pricing.

### Can an agent call Kernel and Puppeteer without installing anything?

Kernel has a hosted endpoint at https://mcp.onkernel.com/mcp. No hosted endpoint is listed for Puppeteer.

### Are Kernel and Puppeteer open source?

No open-source release is listed for Kernel. Puppeteer is open source (Apache-2.0).


## For agents

- This comparison as JSON: https://www.anchorterminal.com/compare/kernel-vs-puppeteer.json, and with the fewest tokens: https://www.anchorterminal.com/compare/kernel-vs-puppeteer.min.md
- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {"a": "kernel", "b": "puppeteer"}`. From a terminal: `anchor compare kernel puppeteer`
- Each listing in full: https://www.anchorterminal.com/api/v1/tools/kernel.json and https://www.anchorterminal.com/api/v1/tools/puppeteer.json

## Other comparisons with Kernel or Puppeteer

- [agent-browser vs Kernel](https://www.anchorterminal.com/compare/agent-browser-vs-kernel.md)
- [agent-browser vs Puppeteer](https://www.anchorterminal.com/compare/agent-browser-vs-puppeteer.md)
- [Airtop vs Kernel](https://www.anchorterminal.com/compare/airtop-vs-kernel.md)
- [Airtop vs Puppeteer](https://www.anchorterminal.com/compare/airtop-vs-puppeteer.md)
- [Anchor Browser vs Kernel](https://www.anchorterminal.com/compare/anchor-browser-vs-kernel.md)
- [Anchor Browser vs Puppeteer](https://www.anchorterminal.com/compare/anchor-browser-vs-puppeteer.md)
- [AutoCua vs Kernel](https://www.anchorterminal.com/compare/autocua-vs-kernel.md)
- [AutoCua vs Puppeteer](https://www.anchorterminal.com/compare/autocua-vs-puppeteer.md)
- [Browser Use vs Kernel](https://www.anchorterminal.com/compare/browser-use-vs-kernel.md)
- [Browser Use vs Puppeteer](https://www.anchorterminal.com/compare/browser-use-vs-puppeteer.md)
- [Browserbase vs Kernel](https://www.anchorterminal.com/compare/browserbase-vs-kernel.md)
- [Browserbase vs Puppeteer](https://www.anchorterminal.com/compare/browserbase-vs-puppeteer.md)
- [Browserless vs Kernel](https://www.anchorterminal.com/compare/browserless-vs-kernel.md)
- [Browserless vs Puppeteer](https://www.anchorterminal.com/compare/browserless-vs-puppeteer.md)
- [BxPlaywright vs Kernel](https://www.anchorterminal.com/compare/bx-playwright-vs-kernel.md)
- [BxPlaywright vs Puppeteer](https://www.anchorterminal.com/compare/bx-playwright-vs-puppeteer.md)
- [Chrome DevTools MCP vs Kernel](https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-kernel.md)
- [Chrome DevTools MCP vs Puppeteer](https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-puppeteer.md)
- [Functionize MCP server vs Kernel](https://www.anchorterminal.com/compare/functionize-mcp-vs-kernel.md)
- [Functionize MCP server vs Puppeteer](https://www.anchorterminal.com/compare/functionize-mcp-vs-puppeteer.md)
- [Hyperbrowser vs Kernel](https://www.anchorterminal.com/compare/hyperbrowser-vs-kernel.md)
- [Hyperbrowser vs Puppeteer](https://www.anchorterminal.com/compare/hyperbrowser-vs-puppeteer.md)
- [Kane CLI vs Kernel](https://www.anchorterminal.com/compare/kane-cli-vs-kernel.md)
- [Kane CLI vs Puppeteer](https://www.anchorterminal.com/compare/kane-cli-vs-puppeteer.md)
- [Kernel vs Lightpanda](https://www.anchorterminal.com/compare/kernel-vs-lightpanda.md)
- [Kernel vs Notte](https://www.anchorterminal.com/compare/kernel-vs-notte.md)
- [Kernel vs Playwright MCP](https://www.anchorterminal.com/compare/kernel-vs-playwright-mcp.md)
- [Kernel vs Pomerado](https://www.anchorterminal.com/compare/kernel-vs-pomerado.md)
- [Kernel vs Puppeteer (archived MCP reference server)](https://www.anchorterminal.com/compare/kernel-vs-puppeteer-reference-server-archived.md)
- [Kernel vs Selenium](https://www.anchorterminal.com/compare/kernel-vs-selenium.md)
- [Kernel vs Skyvern](https://www.anchorterminal.com/compare/kernel-vs-skyvern.md)
- [Kernel vs Steel](https://www.anchorterminal.com/compare/kernel-vs-steel.md)
- [Kernel vs TinyFish](https://www.anchorterminal.com/compare/kernel-vs-tinyfish.md)
- [Lightpanda vs Puppeteer](https://www.anchorterminal.com/compare/lightpanda-vs-puppeteer.md)
- [Notte vs Puppeteer](https://www.anchorterminal.com/compare/notte-vs-puppeteer.md)
- [Playwright MCP vs Puppeteer](https://www.anchorterminal.com/compare/playwright-mcp-vs-puppeteer.md)
- [Pomerado vs Puppeteer](https://www.anchorterminal.com/compare/pomerado-vs-puppeteer.md)
- [Puppeteer vs Puppeteer (archived MCP reference server)](https://www.anchorterminal.com/compare/puppeteer-vs-puppeteer-reference-server-archived.md)
- [Puppeteer vs Selenium](https://www.anchorterminal.com/compare/puppeteer-vs-selenium.md)
- [Puppeteer vs Skyvern](https://www.anchorterminal.com/compare/puppeteer-vs-skyvern.md)
- [Puppeteer vs Steel](https://www.anchorterminal.com/compare/puppeteer-vs-steel.md)
- [Puppeteer vs TinyFish](https://www.anchorterminal.com/compare/puppeteer-vs-tinyfish.md)

---

Query this catalogue directly over MCP: https://www.anchorterminal.com/mcp (Streamable HTTP, no key). How: https://www.anchorterminal.com/agents/#mcp
