Stealth browser automation that actually works. Runs Camoufox (custom Firefox) in Docker with zero Chrome DevTools Protocol exposure, real OS-level mouse and keyboard input via PyAutoGUI, and a JSON HTTP API + MCP server to control it all remotely. Watch it live via noVNC.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport streamable-http · http
verified
reported
listed in the official MCP registry counts 16 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
browser_action
-
click
-
detect_challenge
-
eval_js
-
fill
-
get_html
-
get_interactive_elements
-
mouse_move
-
run_script
-
screenshot
-
scroll
-
send_key
-
system_click
-
system_type
-
wait_for_element
-
wait_for_text
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 87154cf · analyzer v33 · 2d ago
skills & prompt files 1
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 50
filesystem 10
- fs psyb0t-docker-stealthy-auto-browse-87154cf/app/browser.py :15
from pathlib import Path - fs psyb0t-docker-stealthy-auto-browse-87154cf/app/loaders.py :37
with open(path) as f: - fs psyb0t-docker-stealthy-auto-browse-87154cf/app/main.py :879
os.unlink(tmp_path) - fs psyb0t-docker-stealthy-auto-browse-87154cf/app/recorder.py :115
os.unlink(path) - fs psyb0t-docker-stealthy-auto-browse-87154cf/app/script_runner.py :53
with open(path, encoding="utf-8") as script_file: - fs psyb0t-docker-stealthy-auto-browse-87154cf/app/system.py :48
open(xauth_path, "a").close() - fs (weak) psyb0t-docker-stealthy-auto-browse-87154cf/scripts/install_extensions.py :74
with open(destination, "wb") as extension_file: - fs (weak) psyb0t-docker-stealthy-auto-browse-87154cf/tests/apps/http_server.py :78
with open(dest, "wb") as f: - fs (weak) psyb0t-docker-stealthy-auto-browse-87154cf/tests/test_addon_exclusion.py :18
from pathlib import Path - fs (weak) psyb0t-docker-stealthy-auto-browse-87154cf/tests/test_install_extensions.py :8
from pathlib import Path
shell / exec 4
- shell psyb0t-docker-stealthy-auto-browse-87154cf/app/browser.py :11
import subprocess - shell psyb0t-docker-stealthy-auto-browse-87154cf/app/main.py :25
import subprocess - shell psyb0t-docker-stealthy-auto-browse-87154cf/app/recorder.py :15
import subprocess - shell (weak) psyb0t-docker-stealthy-auto-browse-87154cf/scripts/install_extensions.py :7
import subprocess
network 7
- net (weak) psyb0t-docker-stealthy-auto-browse-87154cf/.agents/skills/stealthy-auto-browse/scripts/websearch.py :26
from urllib.parse import quote_plus - net psyb0t-docker-stealthy-auto-browse-87154cf/app/browser.py :17
from urllib.parse import urlparse as _urlparse - net psyb0t-docker-stealthy-auto-browse-87154cf/app/challenge_detector.py :8
from urllib.parse import urlsplit - net psyb0t-docker-stealthy-auto-browse-87154cf/app/loaders.py :9
from urllib.parse import urlparse - net (weak) psyb0t-docker-stealthy-auto-browse-87154cf/scripts/install_extensions.py :9
import urllib.parse - net (weak) psyb0t-docker-stealthy-auto-browse-87154cf/tests/apps/http_proxy.py :6
import socket - net (weak) psyb0t-docker-stealthy-auto-browse-87154cf/tests/test_install_extensions.py :46
installer.urllib.request,
secrets 2
- secrets (weak) psyb0t-docker-stealthy-auto-browse-87154cf/.agents/skills/stealthy-auto-browse/scripts/websearch.py :37
AUTH_TOKEN = os.environ.get("AUTH_TOKEN", "").strip() or None - secrets psyb0t-docker-stealthy-auto-browse-87154cf/app/main.py :147
AUTH_TOKEN = os.environ.get("AUTH_TOKEN", "").strip() or None
database 1
- db psyb0t-docker-stealthy-auto-browse-87154cf/app/redis_sync.py :18
from redis.asyncio import from_url as redis_from_url
tool registrations 16
- run_script psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :103
- get_html psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :393
- detect_challenge psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :398
- get_interactive_elements psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :414
- screenshot psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :428
- system_click psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :461
- system_type psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :478
- send_key psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :491
- mouse_move psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :502
- scroll psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :515
- click psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :528
- fill psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :541
- eval_js psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :553
- wait_for_element psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :564
- wait_for_text psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :581
- browser_action psyb0t-docker-stealthy-auto-browse-87154cf/app/mcp_server.py :591