CLI-first browser automation powered by Camoufox, with optional MCP support.
Project description
Camoufox Browser CLI
CLI-first browser automation powered by Camoufox, with optional MCP support.
Host support for camoufox-browser: Linux and macOS only.
The project supports three user-facing workflows:
camoufox-browser: the primary CLI for humans and agentscamoufox-mcp: an optional MCP server that wraps the same command layerskills/camoufox/SKILL.md: a repo skill installed throughnpx skills
Features
- Shared browser operation layer for CLI and MCP
- Persistent browser session through a lightweight background daemon
- Accessibility snapshot refs for agent-friendly interaction
- Anti-detection launch via Camoufox
- Tabs, screenshots, console/network inspection, uploads, dialogs, and form automation
Installation
CLI only
pip install camoufox-browser
# or
pipx install camoufox-browser
# or
uv tool install camoufox-browser
CLI + MCP
pip install "camoufox-browser[mcp]"
# or
uv tool install "camoufox-browser[mcp]"
From source
git clone https://github.com/rlgrpe/camoufox-browser-cli.git
cd camoufox-browser-cli
uv sync
uv run camoufox-browser --help
Install browser binary
After installing the package, download the Camoufox browser binary:
camoufox-browser install
# or directly:
python -m camoufox fetch
uvx camoufox fetch
Linux system dependencies
# Ubuntu/Debian
sudo apt install -y libgtk-3-0 libx11-xcb1 libasound2
# Arch
sudo pacman -S gtk3 libx11 libxcb cairo libasound alsa-lib
CLI Usage
The primary UX is similar to agent-browser: call the CLI directly and let it
start its background daemon automatically when needed.
camoufox-browser open https://example.com
camoufox-browser snapshot
camoufox-browser click 'button:Sign in'
camoufox-browser fill 'textbox:Email' me@example.com --submit
camoufox-browser screenshot --output page.png
camoufox-browser close
Run camoufox-browser --help for the full command surface.
Core commands
| Command | Description |
|---|---|
camoufox-browser open <url> |
Navigate to URL |
camoufox-browser snapshot |
Print accessibility tree with refs |
camoufox-browser click <ref> |
Click an element |
camoufox-browser fill <ref> <text> |
Fill or type into an element |
camoufox-browser select <ref> <value> [more-values...] |
Select dropdown value(s) |
camoufox-browser upload <ref> <file> [more-files...] |
Upload file(s) to a file input |
camoufox-browser drag <start-ref> <end-ref> |
Drag and drop |
camoufox-browser press <key> |
Press keyboard key |
camoufox-browser screenshot [--output FILE] [--full-page] [--ref REF] |
Take screenshot |
camoufox-browser eval '<js>' |
Run JavaScript on page |
camoufox-browser wait [--text TEXT] [--text-gone TEXT] [--time N] |
Wait for condition |
camoufox-browser close |
Close browser (daemon stays running) |
Session and inspection
| Command | Description |
|---|---|
camoufox-browser console [--level error|warning|info|debug] |
Browser console output |
camoufox-browser network [--all] |
Recorded network requests |
camoufox-browser resize <width> <height> |
Resize viewport |
camoufox-browser tabs list|new|close [index]|select <index> |
Manage tabs |
camoufox-browser dialog accept|dismiss [prompt_text] |
Handle pending dialog |
camoufox-browser fill-form '<json-array>' |
Fill multiple fields from JSON |
Advanced daemon control
These commands are optional. The normal workflow does not require them.
| Command | Description |
|---|---|
camoufox-browser start [--headless] [--os windows|macos|linux] [--proxy PROXY] |
Start daemon explicitly |
camoufox-browser stop |
Stop daemon |
camoufox-browser status |
Check if daemon is running |
Element refs
camoufox-browser snapshot prints an accessibility tree. Interactive elements
include a [ref=...] label:
button "Sign in" [ref=button:Sign in]
textbox "Email" [ref=textbox:Email]
link "Forgot password?" [ref=link:Forgot password?]
Pass the ref value to interaction commands:
camoufox-browser click 'button:Sign in'
camoufox-browser fill 'textbox:Email' me@example.com
MCP Server
Install the optional MCP extra:
pip install "camoufox-browser[mcp]"
The MCP server is a thin wrapper over the same operation layer used by
camoufox-browser.
Add to Claude Code
claude mcp add camoufox-mcp -- uvx --from "camoufox-browser[mcp]" camoufox-mcp
Claude Desktop configuration
{
"mcpServers": {
"camoufox-mcp": {
"command": "uvx",
"args": ["--from", "camoufox-browser[mcp]", "camoufox-mcp"]
}
}
}
From source
{
"mcpServers": {
"camoufox-mcp": {
"command": "uv",
"args": [
"run",
"--extra", "mcp",
"--directory", "/path/to/camoufox-browser-cli",
"camoufox-mcp"
]
}
}
}
Skill Usage
The skill does not introduce a separate runtime. It teaches the agent to use
camoufox-browser, and it should be installed through npx skills.
npx skills add https://github.com/rlgrpe/camoufox-browser-cli --skill camoufox
Project-local install for specific agents:
npx skills add https://github.com/rlgrpe/camoufox-browser-cli --skill camoufox -a claude-code -a codex
Development
uv sync
uv run python -m unittest
uv run python -m compileall camoufox_mcp
uv build --wheel
Related Projects
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file camoufox_browser-0.1.1.tar.gz.
File metadata
- Download URL: camoufox_browser-0.1.1.tar.gz
- Upload date:
- Size: 160.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20e31920ad366bde51df627a041016e32fb799ffb1f7321461b4c7c112c25f63
|
|
| MD5 |
b1a0f9337b2f9e65f40d26accd0caad9
|
|
| BLAKE2b-256 |
8ae36e58be95c810870ed252356ccf17cabe938599ed8007ddfe50cc1cfd28d5
|
Provenance
The following attestation bundles were made for camoufox_browser-0.1.1.tar.gz:
Publisher:
workflow.yml on rlgrpe/camoufox-browser-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
camoufox_browser-0.1.1.tar.gz -
Subject digest:
20e31920ad366bde51df627a041016e32fb799ffb1f7321461b4c7c112c25f63 - Sigstore transparency entry: 1273024034
- Sigstore integration time:
-
Permalink:
rlgrpe/camoufox-browser-cli@05325f2c01549d049d87c59677b61a29dcadef5b -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/rlgrpe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@05325f2c01549d049d87c59677b61a29dcadef5b -
Trigger Event:
push
-
Statement type:
File details
Details for the file camoufox_browser-0.1.1-py3-none-any.whl.
File metadata
- Download URL: camoufox_browser-0.1.1-py3-none-any.whl
- Upload date:
- Size: 27.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d44ab1d31ca5d5b967536ed50741c1fe5d7d99678eab47fb098427a6e37cb1e
|
|
| MD5 |
dec199e22952a71d6715f064475fc139
|
|
| BLAKE2b-256 |
ded2e57e1d6d14d107dde3fe407f52254754f1058baa59cf77a23fb4c31ebc79
|
Provenance
The following attestation bundles were made for camoufox_browser-0.1.1-py3-none-any.whl:
Publisher:
workflow.yml on rlgrpe/camoufox-browser-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
camoufox_browser-0.1.1-py3-none-any.whl -
Subject digest:
7d44ab1d31ca5d5b967536ed50741c1fe5d7d99678eab47fb098427a6e37cb1e - Sigstore transparency entry: 1273024037
- Sigstore integration time:
-
Permalink:
rlgrpe/camoufox-browser-cli@05325f2c01549d049d87c59677b61a29dcadef5b -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/rlgrpe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@05325f2c01549d049d87c59677b61a29dcadef5b -
Trigger Event:
push
-
Statement type: