Camofox Browser
Camofox Browser explained: a browser service for agents, not just an HTML scraper
Separate Camofox’s REST service from the Camoufox engine, understand accessibility snapshots and element references, and define an authorized first use.
What you will learn
- Camofox is the service layer; Camoufox is its browser engine.
- Snapshots and screenshots answer different observation questions.
- Element references need fresh state after page changes.
Before you start
- Basic HTTP and JSON knowledge
- An isolated service and an owned or permitted test page
Explain the chapter’s actual service boundary and verify the proposed observation or lifecycle fixture.
Key takeaways
- Camofox is the service layer; Camoufox is its browser engine.
- Snapshots and screenshots answer different observation questions.
- Element references need fresh state after page changes.
Two names describe different layers
Camofox Browser wraps the Camoufox browser engine in a service intended for automation clients and AI agents. The inspected package is @askjo/camofox-browser, version 1.14.0. Its REST surface creates tabs, returns observations and applies actions. Camoufox is the underlying Firefox-based browser; the wrapper’s API, session lifecycle and deployment configuration are separate engineering responsibilities.
The README emphasizes compatibility with sites that detect automation. Those are upstream claims, not a guarantee established by this review. Browser compatibility does not authorize access to accounts, protected content or services that have declined automated access. Evaluate the project on your own site or an explicitly permitted task, and stop at access restrictions rather than treating them as errors to defeat.
Observe a page before acting on it
The service offers accessibility snapshots and short element references such as e1. These give an agent a compact description of roles and names rather than requiring it to consume raw HTML. A screenshot is another observation with a different purpose: it helps assess appearance, while a semantic snapshot helps locate controls. Neither representation alone proves that all information on a page was captured.
References are not permanent identifiers for a site. The inspected server maps a reference to role, name and occurrence index, with additional frame information where available. Navigation and page changes can invalidate that mapping. An integration should observe, choose one appropriate action and observe again; replaying an old reference after a changed page risks acting on the wrong state.
Define the product boundary before adopting it
A browser service holds resources and potentially authenticated state. The caller must manage user identifiers, tab groups, tab IDs and cleanup; a successful HTTP connection is not a complete agent workflow. The architecture and security chapters distinguish browser contexts from caller authorization, and a healthy idle service from a browser that has actually rendered a page.
The wrapper package declares MIT licensing, but that declaration is not a blanket license for every dependency, visited website or captured asset. This series examines a fixed commit and executes only selected pure helper functions. It does not claim a full browser installation, a live-site compatibility benchmark or a security certification of a hosted deployment.
Implementation steps
- 1
Choose an owned or explicitly permitted test page.
- 2
Identify the client, service and browser-engine boundaries.
- 3
Define the expected observation and allowed action before creating a tab.
Copy-ready example
{"task":"inspect an owned test form","authorization":"test owner approval","observation":"snapshot plus optional screenshot","action":"read only first","success":"expected heading and field labels present"}Frequently asked questions
Is Camofox the same project as Camoufox?
No. Camofox exposes an automation service around the Camoufox browser engine; their responsibilities and configuration layers differ.
Are e1-style references stable across navigation?
Do not assume that. The reviewed server rebuilds reference mappings and explicitly reports stale references after page changes.
Sources
- README.mdSource checked 2026-09-08
- package.jsonSource checked 2026-09-08
- DockerfileSource checked 2026-09-08
- lib/auth.jsSource checked 2026-09-08
- lib/snapshot.jsSource checked 2026-09-08
- lib/extract.jsSource checked 2026-09-08
- lib/config.jsSource checked 2026-09-08
- lib/reporter.jsSource checked 2026-09-08
- lib/page-lease.jsSource checked 2026-09-08
- server.jsSource checked 2026-09-08
- tests/unit/snapshot.test.jsSource checked 2026-09-08
- tests/unit/auth.test.jsSource checked 2026-09-08