Gakido
Agent Skills for Happy Hacking Space's open-source security tools. Compatible with Claude Code, OpenAI Codex, Gemini CLI, and Cursor.
npx -y skills add HappyHackingSpace/skills --skill gakidoAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
High-performance Python HTTP client with browser impersonation and anti-bot evasion. Use when the user needs to bypass bot detection, impersonate browsers with TLS fingerprinting, make HTTP/2/3 requests, or build web scrapers that evade anti-bot systems.
SKILL.md
3.5 KB, as published. Nobody here has run it
Gakido - Browser Impersonation HTTP Client
Gakido (餓鬼道, "the hungry ghost") is a high-performance CPython HTTP client focused on browser impersonation, anti-bot evasion, and speed.
Installation
pip install gakido
pip install gakido[h3] # with HTTP/3 support
pip install gakido[dev] # development dependencies
Or with uv:
uv add gakido
uv add gakido[h3]
Features
- 96 browser profiles (Chrome, Firefox, Safari, Edge, Opera, Brave, Vivaldi, Tor)
- JA3/Akamai-style TLS fingerprint overrides
- HTTP/1.1, HTTP/2, and HTTP/3 (QUIC) support
- Automatic compression (gzip, deflate, brotli)
- Sync + async clients with connection pooling
- Multipart uploads
- WebSocket client
- Proxy support (HTTP, SOCKS5, SOCKS5H)
- Retry with exponential backoff
Quick Start
Sync
from gakido import Client
c = Client(impersonate="chrome_120")
r = c.get("https://example.com")
print(r.status_code, r.text[:200])
Async
import asyncio
from gakido.aio import AsyncClient
async def main():
async with AsyncClient(impersonate="chrome_120") as c:
r = await c.get("https://httpbin.org/get")
print(r.status_code)
asyncio.run(main())
TLS Fingerprint Overrides
from gakido import Client, ExtraFingerprints
ja3_str = "771,4866-4867-4865-49196,0-11-10,29,0"
extra_fp = ExtraFingerprints(alpn=["http/1.1"])
c = Client(
impersonate="chrome_120",
tls_configuration_options={"ja3_str": ja3_str, "extra_fp": extra_fp},
)
r = c.get("https://tls.browserleaks.com/json")
print(r.json().get("ja3_hash"))
HTTP/3 (QUIC)
import asyncio
from gakido import AsyncClient
async def main():
async with AsyncClient(
impersonate="chrome_120",
http3=True,
http3_fallback=True,
) as c:
r = await c.get("https://cloudflare.com/cdn-cgi/trace")
print(f"HTTP/{r.http_version}: {r.status_code}")
asyncio.run(main())
Proxies
from gakido import Client
c = Client()
r = c.get("http://httpbin.org/ip", proxy="http://127.0.0.1:8080")
r = c.get("http://httpbin.org/ip", proxy="socks5://127.0.0.1:1080")
Multipart Upload
files = {"file": ("test.txt", b"hello", "text/plain")}
data = {"foo": "bar"}
with Client() as c:
r = c.post("https://httpbin.org/post", data=data, files=files)
print(r.json())
WebSocket
from gakido.websocket import WebSocket
ws = WebSocket.connect("echo.websocket.events", 443, "/", headers=[], tls=True)
ws.send_text("hello")
op, payload = ws.recv()
print(payload.decode(errors="ignore"))
ws.close()
Retry with Backoff
from gakido import Client
client = Client(
max_retries=3,
retry_base_delay=0.5,
retry_max_delay=30.0,
retry_jitter=True,
)
resp = client.get("http://flaky.example.com")
Notes
force_http1=Trueby default; setforce_http1=Falseto allow ALPN h2http3=Trueenables QUIC (requirespip install gakido[h3])auto_decompress=Trueby default
References
- Repository: https://github.com/HappyHackingSpace/gakido
- Documentation: https://happyhackingspace.github.io/gakido/
- Antibot Benchmark: https://github.com/HappyHackingSpace/gakido/blob/main/docs/antibot-benchmark.md