A browser, built for agents. MCP-native, model-agnostic browser control over Chromium, Firefox, WebKit, Android Chrome, and Safari — a curated, token-efficient tool surface that is safe by default.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 13 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
${api.namespace}.add_element
-
${api.namespace}.create_rectangle
-
${api.namespace}.create_shape
-
${api.namespace}.delete_element
-
${api.namespace}.delete_shape
-
${api.namespace}.get_scene_state
-
${api.namespace}.get_selected_shapes
-
${api.namespace}.get_selection
-
${api.namespace}.get_viewport
-
${api.namespace}.move_node
-
${api.namespace}.select_node
-
${api.namespace}.select_shapes
-
${api.namespace}.set_scroll
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 797c059 · analyzer v33 · 3d ago
skills & prompt files 26
- agent-rules kalebteccom-browxai-797c059/.claude/agents/README.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/architecture-fitness-auditor.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/capability-gate-auditor.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/docs-impact-auditor.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/keystone-writer.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/plugin-author.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/release-engineer.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/security-reviewer.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/tool-author.md
- agent-rules kalebteccom-browxai-797c059/.claude/agents/tracker-id-auditor.md
- agent-rules kalebteccom-browxai-797c059/.codex/agents/README.md
- agent-rules kalebteccom-browxai-797c059/.codex/agents/architecture-fitness-auditor.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/capability-gate-auditor.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/docs-impact-auditor.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/keystone-writer.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/plugin-author.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/release-engineer.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/security-reviewer.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/tool-author.toml
- agent-rules kalebteccom-browxai-797c059/.codex/agents/tracker-id-auditor.toml
- agent-rules kalebteccom-browxai-797c059/.cursor/rules/00-substrate.mdc
- agent-rules kalebteccom-browxai-797c059/.cursor/rules/01-forbidden-commands.mdc
- agent-rules kalebteccom-browxai-797c059/AGENTS.md
- agent-rules kalebteccom-browxai-797c059/CLAUDE.md
- agent-rules kalebteccom-browxai-797c059/harness/adapters/codex/AGENTS.md
- skill kalebteccom-browxai-797c059/harness/driving-browxai/SKILL.md
danger signals8
- dynamic code execution eval() kalebteccom-browxai-797c059/docs/rfcs/references/safari-probe/safari-substrate-spike.mjs :20
const PAGE_SCRIPT = eval(m[1]); // our own source; no ${} interpolation in this literal - dynamic code execution new Function() kalebteccom-browxai-797c059/src/helper/stealth.test.ts :52
const fn = new Function("window", "navigator", buildStealthScript()); - dynamic code execution new Function() kalebteccom-browxai-797c059/src/page/dom-walk.ts :133
const run = new Function( - dynamic code execution new Function() kalebteccom-browxai-797c059/src/page/drop-files.ts :439
const factory = new Function("return (" + a.src + ");") as () => PageScript; - dynamic code execution new Function() kalebteccom-browxai-797c059/src/page/seed-random.test.ts :58
const fn = new Function("sandbox", `with (sandbox) { ${script} }`); - dynamic code execution new Function() kalebteccom-browxai-797c059/src/session/cache-storage.test.ts :142
const fn = new Function("caches", "Response", "btoa", "atob", "location", `return ${expr}`); - dynamic code execution new Function() kalebteccom-browxai-797c059/src/session/idb-storage.test.ts :238
const fn = new Function("indexedDB", "location", `return ${expr}`); - over-broad OAuth scope https://mail.google.com/ kalebteccom-browxai-797c059/src/page/actionresult-shape.test.ts :31
"https://mail.google.com/mail/u/0/",
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 666
filesystem 150
- fs (weak) kalebteccom-browxai-797c059/docs/rfcs/references/safari-probe/safari-substrate-spike.mjs :4
import { readFileSync } from "node:fs"; - fs kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/config.ts :2
import { existsSync, readFileSync } from "node:fs"; - fs kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/mock/mock-mcp-server.ts :2
import { unlink } from "node:fs/promises"; - fs kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/report/generator.ts :1
import { mkdir, writeFile } from "node:fs/promises"; - fs kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/runner.ts :2
import { mkdir, readFile } from "node:fs/promises"; - fs kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/runtime/processes.ts :2
import { access, mkdir, readdir, stat } from "node:fs/promises"; - fs kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/trace/diagnostics-reader.ts :1
import { readFile, readdir, stat } from "node:fs/promises"; - fs kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/trace/trace-record.ts :1
import { mkdir, writeFile } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/test/report-generator.test.ts :3
import { mkdtemp, rm } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/test/runner-bounds.test.ts :3
import { mkdtemp, readFile, rm } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/src/harness/exercises/action-network.ts :1
import { readFile, stat } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/src/harness/exercises/extensions.ts :1
import { mkdir, writeFile } from "node:fs/promises";
show 28 more
- fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/src/harness/exercises/file-io.ts :1
import { readFile, stat } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/src/harness/exercises/read-core.ts :1
import { mkdir, writeFile } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/src/harness/mcp-client.ts :1
import { existsSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/packages/capability-testbed/src/harness/run-report.ts :1
import { mkdir, mkdtemp, writeFile } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/scripts/audit-package-contents.mjs :28
import { readFileSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/scripts/build-replay-player.ts :20
import { readFile, mkdir, writeFile } from "node:fs/promises"; - fs (weak) kalebteccom-browxai-797c059/scripts/lockfile-lint.mjs :23
import { readFileSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/cli/chrome.ts :13
import { existsSync, readFileSync, unlinkSync, writeFileSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/cli/doctor-engines.ts :15
import { existsSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/cli/doctor-plugins-scan.ts :11
import { existsSync, readFileSync, readdirSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/src/cli/doctor-plugins.test.ts :9
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/cli/doctor-plugins.ts :15
import { existsSync, readFileSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/cli/doctor.ts :7
import { existsSync, statSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/cli/init.ts :11
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/cli/serve.ts :16
import { chmodSync, existsSync, unlinkSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/src/engine/adapters/chromium.engine.test.ts :2
import { mkdtempSync, rmSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/engine/adapters/safari/launch.ts :16
import { statSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/page/archive-assets.ts :7
import { statSync, readdirSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/page/archive-emit.ts :16
import { mkdirSync, writeFileSync, statSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/src/page/archive.test.ts :2
import { mkdtempSync, rmSync, existsSync, readFileSync, readdirSync, statSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/src/page/asset-export.test.ts :2
import { mkdtempSync, readFileSync, rmSync, existsSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/page/asset-export.ts :23
import { mkdirSync, writeFileSync, statSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/src/page/dom-export.test.ts :3
import { mkdtempSync, rmSync, existsSync, readFileSync, statSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/page/dom-export.ts :35
import { mkdirSync, writeFileSync, statSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/src/page/downloads.test.ts :2
import { mkdtempSync, readFileSync, rmSync, writeFileSync, existsSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/page/downloads.ts :22
import { mkdirSync, readFileSync, statSync, unlinkSync } from "node:fs"; - fs (weak) kalebteccom-browxai-797c059/src/page/drop-files.test.ts :9
import { writeFileSync, mkdirSync, rmSync, existsSync } from "node:fs"; - fs kalebteccom-browxai-797c059/src/page/drop-files.ts :32
import { readFileSync } from "node:fs";
110 more not shown — this panel samples each group; the count above is the real total.
shell / exec 18
- shell kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/bin/dogfood.js :2
import { spawnSync } from "node:child_process"; - shell kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/runner.ts :1
import { execFile } from "node:child_process"; - shell kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/runtime/codex-app-server-own.ts :1
import { spawn as nodeSpawn } from "node:child_process"; - shell kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/runtime/processes.ts :1
import { spawn, type ChildProcess } from "node:child_process"; - shell (weak) kalebteccom-browxai-797c059/scripts/audit-package-contents.mjs :27
import { execFileSync } from "node:child_process"; - shell kalebteccom-browxai-797c059/src/cli/chrome.ts :12
import { spawn } from "node:child_process"; - shell kalebteccom-browxai-797c059/src/engine/adapters/adb.ts :22
import { execFile } from "node:child_process"; - shell kalebteccom-browxai-797c059/src/engine/adapters/safari/launch.ts :15
import { execFile } from "node:child_process"; - shell kalebteccom-browxai-797c059/src/page/clipboard.ts :12
import { spawn } from "node:child_process"; - shell kalebteccom-browxai-797c059/src/page/dom-walk.ts :167
const raw = await exec(`return (${PAGE_SCRIPT})(arguments[0], arguments[1], arguments[2])`, [ - shell kalebteccom-browxai-797c059/src/page/snapshot-substrate-safari.ts :30
exec(scriptBody: string, args: unknown[]): Promise<unknown>; - shell kalebteccom-browxai-797c059/src/plugin/pm-runner.ts :12
import { spawn, spawnSync } from "node:child_process";
show 6 more
- shell (weak) kalebteccom-browxai-797c059/src/replay/artifact.test.ts :5
import { execFileSync } from "node:child_process"; - shell kalebteccom-browxai-797c059/src/util/credentials-contract.ts :14
import { spawn } from "node:child_process"; - shell (weak) kalebteccom-browxai-797c059/test/architecture/gate-bootstrap.test.ts :25
import { execFileSync } from "node:child_process"; - shell (weak) kalebteccom-browxai-797c059/test/keystone/android.keystone.test.ts :28
import { execFileSync } from "node:child_process"; - shell (weak) kalebteccom-browxai-797c059/test/keystone/attached-pool.keystone.test.ts :8
import { spawn, type ChildProcess } from "node:child_process"; - shell (weak) kalebteccom-browxai-797c059/test/keystone/replay-player.keystone.test.ts :27
import { spawn, type ChildProcess } from "node:child_process";
network 26
- net (weak) kalebteccom-browxai-797c059/docs/rfcs/references/safari-probe/bidi-probe.mjs :10
const res = await fetch(BASE + path, { - net (weak) kalebteccom-browxai-797c059/docs/rfcs/references/safari-probe/classic-probe.mjs :5
const res = await fetch(BASE + path, { - net (weak) kalebteccom-browxai-797c059/docs/rfcs/references/safari-probe/safari-substrate-spike.mjs :29
const res = await fetch(BASE + path, { - net kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/mock/mock-mcp-server.ts :1
import { createServer } from "node:net"; - net kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/oracle/exercise-oracle.ts :1
import { createConnection, type Socket } from "node:net"; - net kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/runtime/browxai-socket-proxy.ts :1
import { createConnection, type Socket } from "node:net"; - net kalebteccom-browxai-797c059/packages/capability-testbed/dogfood/src/runtime/processes.ts :4
import { createConnection, createServer } from "node:net"; - net kalebteccom-browxai-797c059/packages/capability-testbed/src/server/http.ts :5
import { createServer, type IncomingMessage, type ServerResponse } from "node:http"; - net kalebteccom-browxai-797c059/packages/capability-testbed/src/server/pages/network.ts :36
document.getElementById('do-json').addEventListener('click', () => show(fetch('/api/json'))); - net kalebteccom-browxai-797c059/packages/capability-testbed/src/server/pages/workers.ts :66
const r = await fetch('/workers/sw-ping'); - net kalebteccom-browxai-797c059/packages/capability-testbed/src/server/types.ts :5
import type { IncomingMessage, ServerResponse } from "node:http"; - net kalebteccom-browxai-797c059/packages/capability-testbed/src/server/ws.ts :8
import type { IncomingMessage } from "node:http";
show 14 more
- net kalebteccom-browxai-797c059/src/cli/doctor-cdp.ts :16
const res = await fetch(probeUrl, { signal: AbortSignal.timeout(2000) }); - net kalebteccom-browxai-797c059/src/cli/serve.ts :17
import { createServer as createNetServer, type Server } from "node:net"; - net kalebteccom-browxai-797c059/src/engine/adapters/adb.ts :23
import { createServer } from "node:net"; - net kalebteccom-browxai-797c059/src/page/archive-assets.ts :28
var r = await fetch(${literal}, { credentials: 'include', cache: 'no-store' }); - net kalebteccom-browxai-797c059/src/page/archive.ts :26
// URL is then fetched **from inside the page** via `await fetch(u)`, which - net kalebteccom-browxai-797c059/src/page/asset-export.ts :17
// short-lived) we fall back to a same-origin in-page `fetch()` for the - net kalebteccom-browxai-797c059/src/page/element-export-discovery.ts :169
var r = await fetch(${literal}, { credentials: 'include', cache: 'no-store' }); - net kalebteccom-browxai-797c059/src/sdk/transport-socket.ts :13
import { createConnection, type Socket } from "node:net"; - net kalebteccom-browxai-797c059/src/tools/capture-report-export-tools.ts :23
// tool falls back to an in-page `fetch()` against the original URL — - net kalebteccom-browxai-797c059/src/transport/socket-transport.ts :24
import type { Socket } from "node:net"; - net (weak) kalebteccom-browxai-797c059/test/keystone/attached-pool.keystone.test.ts :9
import { createServer as createSocket } from "node:net"; - net (weak) kalebteccom-browxai-797c059/test/keystone/fixture.ts :15
import { createServer, type Server } from "node:http"; - net (weak) kalebteccom-browxai-797c059/test/keystone/replay-dom.keystone.test.ts :18
import { createServer, type Server } from "node:http"; - net (weak) kalebteccom-browxai-797c059/test/keystone/replay-player.keystone.test.ts :28
import { createServer as createSocket } from "node:net";
secrets 1
- secrets (weak) kalebteccom-browxai-797c059/src/page/verify.test.ts :280
{ kind: "equals", key: "process.env.SECRET", value: "x" },
tool registrations 15
- ${api.namespace}.get_scene_state kalebteccom-browxai-797c059/packages/plugins/excalidraw/src/index.ts :207
- ${api.namespace}.get_viewport kalebteccom-browxai-797c059/packages/plugins/excalidraw/src/index.ts :217
- ${api.namespace}.add_element kalebteccom-browxai-797c059/packages/plugins/excalidraw/src/index.ts :227
- ${api.namespace}.delete_element kalebteccom-browxai-797c059/packages/plugins/excalidraw/src/index.ts :237
- ${api.namespace}.set_scroll kalebteccom-browxai-797c059/packages/plugins/excalidraw/src/index.ts :247
- ${api.namespace}.get_selection kalebteccom-browxai-797c059/packages/plugins/figma/src/index.ts :229
- ${api.namespace}.get_viewport kalebteccom-browxai-797c059/packages/plugins/figma/src/index.ts :239
- ${api.namespace}.select_node kalebteccom-browxai-797c059/packages/plugins/figma/src/index.ts :249
- ${api.namespace}.move_node kalebteccom-browxai-797c059/packages/plugins/figma/src/index.ts :259
- ${api.namespace}.create_rectangle kalebteccom-browxai-797c059/packages/plugins/figma/src/index.ts :269
- ${api.namespace}.get_selected_shapes kalebteccom-browxai-797c059/packages/plugins/tldraw/src/index.ts :202
- ${api.namespace}.get_viewport kalebteccom-browxai-797c059/packages/plugins/tldraw/src/index.ts :212
show 3 more
- ${api.namespace}.create_shape kalebteccom-browxai-797c059/packages/plugins/tldraw/src/index.ts :222
- ${api.namespace}.delete_shape kalebteccom-browxai-797c059/packages/plugins/tldraw/src/index.ts :232
- ${api.namespace}.select_shapes kalebteccom-browxai-797c059/packages/plugins/tldraw/src/index.ts :242
install hooks 2
- prepare kalebteccom-browxai-797c059/package.json :56
git config core.hooksPath .githooks || true - prepublishOnly kalebteccom-browxai-797c059/package.json :57
node scripts/audit-package-contents.mjs && pnpm typecheck && pnpm test && pnpm build
declared dependencies 21
- @modelcontextprotocol/sdk@^1.30.0
- playwright-core@^1.62.0
- rrweb@2.1.4
- zod@^3.23.0
- @cyclonedx/cdxgen@^12.8.4
- @eslint/js@^9.12.0
- @types/node@^20.14.0
- depcheck@^1.4.7
- dependency-cruiser@^17.4.3
- esbuild@^0.28.2
- eslint@^9.12.0
- eslint-plugin-import-x@^4.3.0
show 9 more
- globals@^15.11.0
- jscpd@^5.0.9
- license-checker-rseidelsohn@^4.4.2
- lint-staged@^15.2.10
- prettier@^3.3.3
- tsx@^4.19.0
- typescript@^5.5.0
- typescript-eslint@^8.70.0
- vitest@^2.0.0
clipboard 1
- clipboard shell call kalebteccom-browxai-797c059/src/page/clipboard.ts :48
? ["pbcopy"]
cursor-plugin 1
- opaque (low) kalebteccom-browxai-797c059/.cursor/rules/00-substrate.mdc
bundled .cursor/ plugin descriptor (kalebteccom-browxai-797c059/.cursor/rules/00-substrate.mdc) — presence-detected; review the descriptor