@munstar0s/pifox
Pi extension: the Camofox anti-detection browser as native agent tools, with lazy lifecycle management
Package details
Install @munstar0s/pifox from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@munstar0s/pifox- Package
@munstar0s/pifox- Version
0.1.1- Published
- Aug 24, 2026
- Downloads
- 362/mo · 9/wk
- Author
- munstar0s
- License
- MIT
- Types
- extension
- Size
- 46 KB
- Dependencies
- 1 dependency · 2 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
PiFox
Pi extension: the Camofox anti-detection browser as native agent tools — with lazy lifecycle management.
npm package: @munstar0s/pifox
PiFox registers 13 first-class tools (camofox_create_tab, camofox_snapshot,
camofox_click, … plus pifox_status / pifox_shutdown) directly into the Pi
agent. The Camofox server is not a permanent daemon: PiFox launches it on
the first tool call, keeps it warm while the agent browses, and tears it down
after an idle timeout or when the session ends. Nothing runs while pi sits
idle.
Why
- Zero standing cost — no always-on browser server; memory is used only during active browsing.
- Native integration — tools are registered via
pi.registerTool(), so the model sees typed schemas, and results flow through pi's normal tool pipeline (including image content blocks for screenshots). - Anti-detection browsing — Camoufox spoofs fingerprints at the C++ level, beating bot detection that blocks plain Playwright/Chrome.
- Adopt, don't fight — if a Camofox server is already running on the port, PiFox adopts it instead of spawning a second one (and never kills a server it didn't start).
Tools
The 11 canonical Camofox tools (schemas mirror upstream's shared tool contracts) plus two lifecycle tools:
| Tool | Purpose |
|---|---|
camofox_create_tab |
Open a tab at a URL; returns tabId |
camofox_snapshot |
Accessibility snapshot with element refs (e1, e2, …) + screenshot |
camofox_click |
Click by ref or CSS selector |
camofox_type |
Type text (optional Enter) |
camofox_navigate |
Navigate to URL or search macro (@google_search, …) |
camofox_scroll |
Scroll up/down/left/right |
camofox_screenshot |
Screenshot as inline image (+ optional savePath) |
camofox_close_tab |
Close a tab |
camofox_evaluate |
Run JS in page context |
camofox_list_tabs |
List open tabs |
camofox_import_cookies |
Import Netscape cookies.txt for authenticated browsing |
pifox_status |
Server state, pid, uptime, idle countdown |
pifox_shutdown |
Stop the managed server immediately |
Slash command: /camofox status|start|stop.
Install
As an installable pi package (recommended):
pi install npm:@munstar0s/pifox # or git:github.com/Munstar0s/pifox
Or auto-discovery: clone/symlink this repo into your global extensions directory and install dependencies once:
ln -s /path/to/PiFox ~/.pi/agent/extensions/PiFox
cd ~/.pi/agent/extensions/PiFox && npm install
The npm dependency @askjo/camofox-browser is installed with the package;
the ~300MB Camoufox engine binary downloads automatically on first browser
start (one time).
Configuration (environment, all optional)
| Variable | Default | Meaning |
|---|---|---|
PIFOX_PORT |
9377 |
Server port; also the adoption probe target |
PIFOX_IDLE_SHUTDOWN_MS |
600000 |
Idle teardown delay for managed servers |
PIFOX_KEEP_ALIVE |
unset | 1 disables idle teardown entirely |
PIFOX_USER_ID |
pi |
Camofox session partition |
PIFOX_SESSION_KEY |
default |
Tab partition within the session |
PIFOX_ACCESS_KEY |
unset | Bearer key set on the spawned server + sent on requests |
PIFOX_API_KEY |
unset | Enables cookie import |
PIFOX_CAMOFOX_ENTRY |
auto-resolved | Explicit path to camofox's entry script |
PIFOX_HOME |
~/.pifox |
Where managed-server logs are written |
Lifecycle details
- First camofox tool call → health probe on
127.0.0.1:$PIFOX_PORT. - Healthy → adopt (never killed by PiFox). Unhealthy → spawn a
managed instance bound to loopback with logs in
~/.pifox/camofox.log. - Every tool call refreshes the last-used timestamp.
- A sweeper stops managed servers after the idle timeout
(SIGTERM → SIGKILL escalation);
session_shutdownstops them too. - Unexpected child exits are surfaced via
pifox_status; the next call transparently restarts.
Development
npm install
npm run check # biome + tsc
npm test # unit/integration against a fake camofox REST server
RUN_E2E=1 npx vitest run test/e2e/ # real-camofox end-to-end
License
MIT