VulpineOS
Docs
Runtime
Runtime overview
Hardened browser, orchestrator, MCP
Injection filter
Strip invisible DOM before the agent
Action lock
Freeze JS, timers, reflows mid-think
Optimised DOM
93.1% measured token reduction
Operator surfaces
Web panel
Embedded operator console
TUI workbench
SSH-friendly terminal UI
MCP toolbelt
36 typed browser tools
Vulpine-Box
One-container self-host
Ecosystem
Foxbridge
CDP ↔ Juggler / WebDriver BiDi
vulpine-mark
Set-of-Mark visual labelling
mobilebridge
Android device sessions
OpenClaw
Pre-configured agent loop
Documentation
Quickstart
First agent in 30 seconds
Architecture
Four-phase security model
MCP Reference
All 36 browser tools
Agent Scripting DSL
Declarative agent definitions
Open source
VulpineOS Runtime
GitHub, MPL 2.0
Foxbridge
CDP ↔ Juggler / WebDriver BiDi
vulpine-mark
Set-of-Mark visual labelling
mobilebridge
Android device discovery + sessions
Integrations
OpenClaw
Pre-configured agent loop
Camoufox
Anti-detect browser core
LLM providers
30+ models, one toolbelt
Docker (Vulpine-Box)
One-click self-host
Guides
AI Agent Security
Threat model, mitigations
Prevent Prompt Injection
Hidden DOM, ARIA tricks
OpenClaw + Camoufox
End-to-end setup
Camoufox vs Chrome
Why Firefox, why patches
Engineering
Changelog
Release notes as work lands
Roadmap
Now, next, later, research
Blog
Long-form posts on the runtime
RenderLab
Optional render-diagnostics study
Community
Support
How to get help, fast
GitHub Discussions
Ideas, RFCs, support
Contributing
How to help
Security
Responsible disclosure
Star on GitHub →
Product · Action lock

Freeze the page while the agent thinks.

Most agent runtimes let the page keep mutating mid-decision: timers fire, layouts reflow, network handlers run, JS heuristics observe the cursor. Action lock stops all of that at the docShell layer until the agent acts.

C++ docShell patchDefault onOff during navigation
01

What it freezes

Page.setActionLock({ enabled: true }) disables JavaScript on every frame via allowJavascript=false, then calls docShell.suspendPage(). That suspends the refresh driver, timers and intervals, network callbacks, and event handling. Layout reflows stop. Animations stop. Pointer events queue but do not fire.

01

JS execution

allowJavascript=false on every frame. No setTimeout, no Promise.then, no inline handlers.

02

Refresh driver

rAF callbacks, CSS animations, video playback all stop until the lock releases.

03

Network

In-flight responses queue but do not deliver to JS until the lock lifts.

04

Events

Pointer, keyboard, focus events suppressed. The page cannot observe the cursor mid-think.

02

Protocol

One protocol call in, one out. The lock is implicit on navigation — the next page loads without you asking.

// Before the agent decides
await page.send("Page.setActionLock", { enabled: true });
//   → JavaScript disabled on every frame
//   → docShell.suspendPage() halts the refresh driver
//   → timers, network callbacks, events queued

// After the agent commits an action
await page.send("Page.setActionLock", { enabled: false });
//   → page resumes immediately

// Navigation auto-releases — no need to flip the lock
await page.send("Page.navigate", { url: "https://example.com" });
Protocol · Page.setActionLock
03

Why this is impossible from a WebExtension

You cannot suspend the JavaScript event loop from JavaScript. Every existing "DOM freeze" library is best-effort and bypassable. Action lock patches nsDocShell in C++ so the page literally cannot run code until we say so. Navigation auto-releases the lock so the next page loads normally.

04

Resources

  • Architecture deep-dive

    docs.vulpineos.com/architecture — every patch, where it lives, and why.

  • VulpineOS source

    github.com/VulpineOS/VulpineOS — runtime, patches, additions.

Self-host the runtime today.

Pull the source, build the binary, and drive your first agent. The waitlist gates the managed runtime; the open-source path is open now.

Read the docs→Star on GitHub
VulpineOS

The browser built for AI agents.
Open-source runtime, end to end.

Camoufox 146.0.1
Product
RuntimeAction lockOptimised DOMMCP toolbeltVulpine-Box
Ecosystem
Foxbridgevulpine-markmobilebridgeOpenClawCamoufox
Resources
Resources hubRoadmapChangelogBlogDocs
Community
SupportDiscussionsContributingIssuesSecurity
© 2026 VulpineOSBuilt on Camoufox · Firefox 146.0.1TermsPrivacyCookiesAcceptable useSecurity