github Python analyzed 87154cf

psyb0t/docker-stealthy-auto-browse

github

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.

maintainer
psyb0t
license
WTFPL
first seen
2026-06-10
last seen
2026-09-01
releases · 30d
5
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 16 tools
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
skills & danger signals github-tarball
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

code evidence vv2.6.9 · github-tarball
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