Skip to main content
Thunder logo

⚡ Thunder

The human engine for AI agents.

Give any software a human body: a real browser with a real fingerprint, a mouse that trembles like a hand, keystrokes at human cadence, and a TLS handshake indistinguishable from Chrome's.

A bot that walks like a person.

PyPI Python License: MIT Tests

Install · Watch the proof · MCP for any software


Why Thunder exists

Every anti-bot system on Earth looks for the same three tells:

  1. Protocol tells — a Python scraper's TLS/HTTP-2 handshake screams "bot" before a byte of JS runs.
  2. Fingerprint tells — navigator.webdriver, headless quirks, software-rendered WebGL, empty plugin arrays.
  3. Behavioral tells — perfectly straight mouse paths, instant typing, zero reading pauses.

Thunder is a body for your AI that has none of them. Not patched over — absent, the way a real human's browser is.

pip install thunder-agent
import thunder

body = thunder.Body(profile="ada")          # a persistent human named Ada
await body.warmup()                         # age the session like a returning user
await body.go("https://protected-site.com")
await body.type("#email", "ada@example.com")   # typed like a person. Typos included.
await body.look("proof.png")                    # screenshot evidence
await body.rest()                              # close, keep the identity

Ada comes back tomorrow with the same cookies, same screen, same GPU string, same timezone. The site sees a returning regular.


📦 Install in 30 seconds

pip install thunder-agent

Works on Linux, macOS, Windows. Real-Chrome engine auto-detected; falls back to bundled Chromium.

thunder demo        # watch it browse like a human, right now
thunder ghost https://nowsecure.nl    # TLS-level fetch that passes the gate

⚡ The five layers

Layer What it does The tell it kills
Body Stealth browser: real Google Chrome, persistent profiles headless shells, disposable identities
Skin One consistent identity: UA, platform, GPU, screen, timezone, locale fingerprint mismatches, SwiftShader WebGL
Hand Bézier mouse with hand tremor, human keystroke cadence, typos it fixes straight-line paths, machine-perfect timing
Ghost Pure HTTP with Chrome's exact TLS/JA3 fingerprint + full header orchestration + human-style retries Python-scrape handshake = instant 403
Pool Thunder's own proxy pool: auto-fetched, Ghost-validated egress, sticky per profile shared/flagged datacenter IPs
Warmup Organic light browsing before your target cold first-hit sessions

Verified live: bot.sannysoft.com under Thunder — WebDriver missing (passed) · WebDriver Advanced passed · Chrome present (passed) · PluginArray passed — 4 passed, 0 failed with headed real Chrome. Ghost pulls a 200 from a Cloudflare gate that 403s plain Python, same minute.


🔌 MCP: give ANY software a human body

Zero-install, zero-account — paste this URL into Claude (Settings → Connectors → Add custom connector, or claude.ai/mcp):

https://thunder-mcp.onrender.com/mcp

That's it. No signup, no keys. Thunder-hosted, always on. You get thunder_search, thunder_read, thunder_ghost, thunder_feel, thunder_solve, thunder_open — search, clean extraction and bot-gate-safe fetches through Chrome's exact TLS handshake, from inside Claude.

Want the full human body (stealth Chrome, mouse tremor, human typing) under MCP? Run it locally — same 10-tool MCP server:

Thunder ships an MCP server (10 tools). Paste one config and Claude, Cursor, Cline, Windsurf — anything that speaks MCP — browses as a human:

{ "mcpServers": { "thunder": {
    "command": "pipx", "args": ["run", "thunder-agent", "thunder-mcp"] } } }
{ "mcpServers": { "thunder": {
    "command": "uvx", "args": ["--from", "thunder-agent", "thunder-mcp"] } } }

Tools: thunder_open · thunder_read · thunder_search · thunder_click · thunder_type · thunder_scroll · thunder_ghost · thunder_solve · thunder_feel · thunder_close — each one moves like a person, never like a script.


🚫 The blocker table — what used to stop bots, and Thunder's answer

Blocker Thunder's counter
Datacenter IP suspicion ProxyManager: sticky per-profile residential proxies, health-checked, auto-rotation — THUNDER_PROXY env or ProxyManager.from_env()
No GPU / software WebGL Full WebGL1 and WebGL2 spoof: vendor + renderer read as a real consumer GPU, on every API path detectors use
Headless leaks Headless-evasion pack: outerWidth/Height, colorDepth, broken-image dimensions, full window.chrome shape, battery API
Advanced CAPTCHAs Keyless soft_solve (human-hand click inside challenges) + ocr_solve (local OCR for image/math) + CapSolver/2Captcha bridge for the hardest
Behavioral ML Hand tremor + micro-corrections + warmup sessions + thinking pauses — entropy that reads as a person, because it moves like one

🔒 CAPTCHAs without a subscription

from thunder.captcha import soft_solve, ocr_solve
result = await soft_solve(body.page)     # human-hand click, no keys needed

Non-interactive challenges often pass on a warmed-up session. For Turnstile/reCAPTCHA Enterprise, wire your own CapSolver or 2Captcha key — Thunder senses the challenge type and routes it.


🧠 Pair with any mind

Thunder is the body; bring any brain. Works with stewmind, Ollama, LM Studio, vLLM, OpenAI-compatible APIs, or fully offline transformers.

from thunder.mind import Mind
mind = Mind(provider="ollama", model="llama3")
plan = await mind.think("find the pricing page and extract the tiers", body)

🧪 Tested, not promised

git clone https://github.com/emmanuelerogian723-alt/thunder
cd thunder && pip install -e ".[dev]" && pytest

Stealth regression suite: webdriver erased + scan-invisible · genuine PluginArray · headless pack · WebGL skin-consistency · proxy rotation. Each one fails loudly if a future commit breaks the human illusion.


⚖️ The honest limits (why people trust Thunder)

  • No tool on Earth is "undetectable." Anyone selling that is lying to you.
  • Cloud IPs still look like clouds — pair Thunder with a residential proxy for the hardest targets.
  • Google-scale behavioral ML scores the whole session. Thunder's warmup + hand give you a real chance; it's not a magic key.
  • Use Thunder only where you're authorized. Your accounts, your tests, your sites. That's the license, and it's the line.

MIT licensed. Built in the open — every claim on this page has a script in tests/ or a screenshot in proofs/.


Watch Thunder beat the bot-detection gauntlet, live:

https://emmanuelerogian723-alt.github.io/thunder/

⭐ If this saved you a month of anti-detect work, star the repo — it helps others find it.

Thunder — built so software can finally act human. 🌩️

Metadata

Release files for thunder-agent 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for thunder-agent 0.4.0
File Size Uploaded Provenance
thunder_agent-0.4.0.tar.gz 39.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for thunder-agent 0.4.0
File Interpreter ABI Platform
thunder_agent-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 78.2 kB

Release files / thunder_agent-0.4.0.tar.gz

Download URL thunder_agent-0.4.0.tar.gz
Size 39.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6c3b9e05058da94c3813384ef48adcde24455825272138cef4f09579740b65c3
BLAKE2b-256 checksum
How to use checksums
145e49bdfb123d3d6df0c8ac2630a119f7a36d7c355422c5f0c33760d0c35db6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / thunder_agent-0.4.0-py3-none-any.whl

Download URL thunder_agent-0.4.0-py3-none-any.whl
Size 38.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3d26fbac390996b96fed9bfed0eadaa00c4c2e038f37a9ec8133edcfb10be559
BLAKE2b-256 checksum
How to use checksums
9f1311ecc6a498aabc605ffdd256c49cc8e7249bbd4cb80e622eb2b660a5640c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Security for thunder-agent 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page